gAJjc3BoaW54LmVudmlyb25tZW50CkJ1aWxkRW52aXJvbm1lbnQKcQEpgXECfXEDKFURbnVtYmVyZWRfdG9jdHJlZXNxBGNfX2J1aWx0aW5fXwpzZXQKcQVdhVJxBlUIc2V0dGluZ3NxB31xCChVEnNlY3RzdWJ0aXRsZV94Zm9ybXEJiVUVY2xvYWtfZW1haWxfYWRkcmVzc2VzcQqIVQNlbnZxC2gCVRBlbWJlZF9zdHlsZXNoZWV0cQyJVQxyZmNfYmFzZV91cmxxDVUcaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3EOVRZmaWxlX2luc2VydGlvbl9lbmFibGVkcQ+IVQ5kb2N0aXRsZV94Zm9ybXEQiVUKaGFsdF9sZXZlbHERSwVVDmlucHV0X2VuY29kaW5ncRJVCXV0Zi04LXNpZ3ETVQxwZXBfYmFzZV91cmxxFFUgaHR0cHM6Ly93d3cucHl0aG9uLm9yZy9kZXYvcGVwcy9xFXVVBnNyY2RpcnEWWFwAAAAvdXNyL2xvY2FsL2dvb2dsZS9ob21lL2tsay93ZWJzaXRlX3VwZGF0ZV9kaXIvcHl0aG9uX2RvYy9iZWFtL3Nka3MvcHl0aG9uL3RhcmdldC9kb2NzL3NvdXJjZXEXVQZjb25maWdxGGNzcGhpbnguY29uZmlnCkNvbmZpZwpxGSmBcRp9cRsoVQlvdmVycmlkZXNxHH1VBXNldHVwcR1OVQpodG1sX3RoZW1lcR5VEHNwaGlueF9ydGRfdGhlbWVxH1UPaHRtbF90aGVtZV9wYXRocSBdcSFVfC91c3IvbG9jYWwvZ29vZ2xlL2hvbWUva2xrL3dlYnNpdGVfdXBkYXRlX2Rpci9weXRob25fZG9jL2JlYW0vc2Rrcy9weXRob24vdGFyZ2V0Ly50b3gvZG9jcy9sb2NhbC9saWIvcHl0aG9uMi43L3NpdGUtcGFja2FnZXNxImFVEWF1dG9jbGFzc19jb250ZW50cSNVBGJvdGhxJFUObml0cGlja19pZ25vcmVxJV1xJihVCHB5OmNsYXNzcSdVAIZxKGgnVQNBbnlxKYZxKmgnVQREaWN0cSuGcSxoJ1UISXRlcmFibGVxLYZxLmgnVQRMaXN0cS+GcTBoJ1UDU2V0cTGGcTJoJ1UFVHVwbGVxM4ZxNGgnVQV0dXBsZXE1hnE2aCdVIGZ1dHVyZS50eXBlcy5uZXdvYmplY3QubmV3b2JqZWN0cTeGcThoJ1UqYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5fUGlja2xlQ29kZXJCYXNlcTmGcTpoJ1UjYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5GYXN0Q29kZXJxO4ZxPGgnVRphcGFjaGVfYmVhbS5pby5fQXZyb1NvdXJjZXE9hnE+aCdVLmFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5Sb3dBc0RpY3RKc29uQ29kZXJxP4ZxQGgnVTNhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmRhdGFzdG9yZWlvLl9NdXRhdGVxQYZxQmgnVU1hcGFjaGVfYmVhbS5pby5nY3AuaW50ZXJuYWwuY2xpZW50cy5iaWdxdWVyeS5iaWdxdWVyeV92Ml9tZXNzYWdlcy5UYWJsZVNjaGVtYXFDhnFEaCdVIGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5Tb3VyY2VCYXNlcUWGcUZoJ1U1YXBhY2hlX2JlYW0uaW8uc291cmNlX3Rlc3RfdXRpbHMuRXhwZWN0ZWRTcGxpdE91dGNvbWVxR4ZxSGgnVShhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYy5NZXRyaWNSZXN1bHRzcUmGcUpoJ1UkYXBhY2hlX2JlYW0ucGlwZWxpbmUuUGlwZWxpbmVWaXNpdG9ycUuGcUxoJ1UnYXBhY2hlX2JlYW0ucGlwZWxpbmUuUFRyYW5zZm9ybU92ZXJyaWRlcU2GcU5oJ1UeYXBhY2hlX2JlYW0ucHZhbHVlLkFzU2lkZUlucHV0cU+GcVBoJ1UhYXBhY2hlX2JlYW0ucHZhbHVlLkRvT3V0cHV0c1R1cGxlcVGGcVJoJ1UZYXBhY2hlX2JlYW0ucHZhbHVlLlBWYWx1ZXFThnFUaCdVMGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV4ZWN1dG9yLkNhbGxhYmxlVGFza3FVhnFWaCdVNGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5DYWxsYWJsZVdyYXBwZXJDb21iaW5lRm5xV4ZxWGgnVTphcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybVdpdGhTaWRlSW5wdXRzcVmGcVpoJ1UxYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLl9QYXJhbGxlbFRyaWdnZXJGbnFbhnFcaCdVNGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5Jbk1lbW9yeVVubWVyZ2VkU3RhdGVxXYZxXmgnVTFhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzLkFueVR5cGVDb25zdHJhaW50cV+GcWBoJ1UxYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50cy5Db21wb3NpdGVUeXBlSGludHFhhnFiaCdVLmFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHMuVHlwZUNvbnN0cmFpbnRxY4ZxZGgnVT9hcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzLnZhbGlkYXRlX2NvbXBvc2l0ZV90eXBlX3BhcmFtKClxZYZxZmgnVTRhcGFjaGVfYmVhbS51dGlscy53aW5kb3dlZF92YWx1ZS5fSW50ZXJ2YWxXaW5kb3dCYXNlcWeGcWhoJ1UWV2luZG93ZWRUeXBlQ29uc3RyYWludHFphnFqaCdVFnVuaXR0ZXN0LmNhc2UuVGVzdENhc2Vxa4ZxbGgnVQ9fU3RhdGVEb0ZuUGFyYW1xbYZxbmgnVQ9fVGltZXJEb0ZuUGFyYW1xb4ZxcGgnVQ50eXBpbmcuR2VuZXJpY3FxhnFyVQZweTpvYmpxc1UAhnF0aHNoKYZxdWhzaCuGcXZoc2gthnF3aHNoL4ZxeGhzaDGGcXloc2gzhnF6aHNoNYZxe2hzaDeGcXxoc2g5hnF9aHNoO4ZxfmhzaD2GcX9oc2g/hnGAaHNoQYZxgWhzaEOGcYJoc2hFhnGDaHNoR4ZxhGhzaEmGcYVoc2hLhnGGaHNoTYZxh2hzaE+GcYhoc2hRhnGJaHNoU4ZximhzaFWGcYtoc2hXhnGMaHNoWYZxjWhzaFuGcY5oc2hdhnGPaHNoX4ZxkGhzaGGGcZFoc2hjhnGSaHNoZYZxk2hzaGeGcZRoc2hphnGVaHNoa4ZxlmhzaG2GcZdoc2hvhnGYaHNocYZxmVUGcHk6ZXhjVQpWYWx1ZUVycm9ycZqGcZtlVRNpbnRlcnNwaGlueF9tYXBwaW5ncZx9cZ0oVQZweXRob25xnlUZaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMnGfToZVCGhhbWNyZXN0caBVLGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvcaFOhnVVCm1hc3Rlcl9kb2NxolUFaW5kZXhxo1UKZXh0ZW5zaW9uc3GkXXGlKFUSc3BoaW54LmV4dC5hdXRvZG9jcaZVEnNwaGlueC5leHQuZG9jdGVzdHGnVRZzcGhpbnguZXh0LmludGVyc3BoaW54cahVE3NwaGlueC5leHQubmFwb2xlb25xqVUTc3BoaW54LmV4dC52aWV3Y29kZXGqZVUUZG9jdGVzdF9nbG9iYWxfc2V0dXBxq1UcCmltcG9ydCBhcGFjaGVfYmVhbSBhcyBiZWFtClUUYXV0b2RvY19tZW1iZXJfb3JkZXJxrFUIYnlzb3VyY2VxrVUHcHJvamVjdHGuVQtBcGFjaGUgQmVhbVUIbml0cGlja3lxr4hVEGV4Y2x1ZGVfcGF0dGVybnNxsF1xsShVBl9idWlsZHGyVQ9hcGFjaGVfYmVhbS5yc3Rxs2V1YlUNZ2xvYl90b2N0cmVlc3G0aAVdhVJxtVUKZm91bmRfZG9jc3G2aAVdcbcoWDQAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl9ncnBjcbhYFQAAAGFwYWNoZV9iZWFtLmlvLmF2cm9pb3G5WBsAAABhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlxulgFAAAAaW5kZXhxu1geAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VycbxYLQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGVfbWFuYWdlcnG9WCkAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5idW5kbGVfZmFjdG9yeXG+WB4AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXlxv1gTAAAAYXBhY2hlX2JlYW0ub3B0aW9uc3HAWBwAAABhcGFjaGVfYmVhbS5pbnRlcm5hbC5waWNrbGVyccFYMwAAAGFwYWNoZV9iZWFtLmlvLmZsaW5rLmZsaW5rX3N0cmVhbWluZ19pbXB1bHNlX3NvdXJjZXHCWBsAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGlxw1gVAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzccRYKQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9tZXRyaWNzccVYGQAAAGFwYWNoZV9iZWFtLmlvLmdjcC5wdWJzdWJxxlgtAAAAYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsubW9kZWxzccdYFgAAAGFwYWNoZV9iZWFtLnV0aWxzLnVybnNxyFgeAAAAYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzcclYJAAAAGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc3HKWCIAAABhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVycctYHwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnV0aWxxzFgWAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtc3HNWCYAAABhcGFjaGVfYmVhbS50ZXN0aW5nLnBpcGVsaW5lX3ZlcmlmaWVyc3HOWDgAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuc3RhbmRhcmRfd2luZG93X2Zuc19wYjJfZ3JwY3HPWBoAAABhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lcnHQWDUAAABhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5xdWVyaWVzLnF1ZXJ5MnHRWDUAAABhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5xdWVyaWVzLnF1ZXJ5MXHSWDUAAABhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5xdWVyaWVzLnF1ZXJ5MHHTWDcAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkuZGlzcGxheV9tYW5hZ2VycdRYHQAAAGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzcdVYLgAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZmFrZV9kYXRhc3RvcmVx1lgtAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudGVzdF9kaXJlY3RfcnVubmVycddYIAAAAGFwYWNoZV9iZWFtLmlvLmdjcC5nY3NmaWxlc3lzdGVtcdhYGQAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1x2VgfAAAAYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbXHaWBQAAABhcGFjaGVfYmVhbS5pby51dGlsc3HbWC4AAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlX3dyaXRlX2l0X3BpcGVsaW5lcdxYEgAAAGFwYWNoZV9iZWFtLmNvZGVyc3HdWBgAAABhcGFjaGVfYmVhbS5pbnRlcm5hbC5nY3Bx3lgUAAAAYXBhY2hlX2JlYW0uaW8uZmxpbmtx31gYAAAAYXBhY2hlX2JlYW0uaW8ucGFycXVldGlvceBYHgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX2NvbW1vbnHhWBcAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmpvYnHiWBkAAABhcGFjaGVfYmVhbS5tZXRyaWNzLmNlbGxzceNYGAAAAGFwYWNoZV9iZWFtLnRlc3RpbmcudXRpbHHkWBcAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eXHlWBQAAABhcGFjaGVfYmVhbS5waXBlbGluZXHmWDEAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2FuYWx5emVycedYPQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmNvbnN1bWVyX3RyYWNraW5nX3BpcGVsaW5lX3Zpc2l0b3Jx6FguAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmVuZHBvaW50c19wYjJfZ3JwY3HpWCQAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLnV0aWxx6lgTAAAAYXBhY2hlX2JlYW0udGVzdGluZ3HrWB4AAABhcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHNx7FgmAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW9x7VgeAAAAYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtce5YJwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheXHvWCEAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm1x8FgRAAAAYXBhY2hlX2JlYW0uZXJyb3Jx8Vg1AAAAYXBhY2hlX2JlYW0udG9vbHMuZGlzdHJpYnV0aW9uX2NvdW50ZXJfbWljcm9iZW5jaG1hcmtx8lgcAAAAYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc2lua3HzWBsAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmVx9FgVAAAAYXBhY2hlX2JlYW0uaW8udGV4dGlvcfVYJQAAAGFwYWNoZV9iZWFtLmlvLmdjcC5wdWJzdWJfaXRfcGlwZWxpbmVx9lgmAAAAYXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmVx91gaAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXNx+FgzAAAAYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsubmV4bWFya191dGlscflYIAAAAGFwYWNoZV9iZWFtLmlvLnNvdXJjZV90ZXN0X3V0aWxzcfpYFAAAAGFwYWNoZV9iZWFtLmludGVybmFscftYMQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cucHRyYW5zZm9ybV9vdmVycmlkZXNx/FguAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvcnH9WBoAAABhcGFjaGVfYmVhbS51dGlscy5wcm9maWxlcnH+WBsAAABhcGFjaGVfYmVhbS51dGlscy5wcm9jZXNzZXNx/1gsAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuaGVscGVyX3RyYW5zZm9ybXNyAAEAAFgfAAAAYXBhY2hlX2JlYW0uaW8uaGFkb29wZmlsZXN5c3RlbXIBAQAAWCwAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lcnICAQAAWBcAAABhcGFjaGVfYmVhbS51dGlscy5yZXRyeXIDAQAAWBsAAABhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXByBAEAAFgdAAAAYXBhY2hlX2JlYW0ucnVubmVycy5qb2IudXRpbHNyBQEAAFg7AAAAYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsubW9kZWxzLm5leG1hcmtfbW9kZWxyBgEAAFg3AAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uc3RyZWFtaW5nX2NyZWF0ZXIHAQAAWDQAAABhcGFjaGVfYmVhbS5pby5nY3AuYmlnX3F1ZXJ5X3F1ZXJ5X3RvX3RhYmxlX3BpcGVsaW5lcggBAABYHgAAAGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF91dGlsc3IJAQAAWDcAAABhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5uZXhtYXJrX2xhdW5jaGVycgoBAABYIAAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5kZWNvcmF0b3JzcgsBAABYLgAAAGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLnF1ZXJpZXNyDAEAAFggAAAAYXBhY2hlX2JlYW0uaW50ZXJuYWwuaHR0cF9jbGllbnRyDQEAAFgXAAAAYXBhY2hlX2JlYW0udG9vbHMudXRpbHNyDgEAAFgnAAAAYXBhY2hlX2JlYW0udG9vbHMuY29kZXJzX21pY3JvYmVuY2htYXJrcg8BAABYKgAAAGFwYWNoZV9iZWFtLnRvb2xzLnNpZGVpbnB1dF9taWNyb2JlbmNobWFya3IQAQAAWCYAAABhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFya3IRAQAAWDYAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkucGlwZWxpbmVfZ3JhcGhyEgEAAFgmAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5oZWxwZXJyEwEAAFgsAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Qud2F0ZXJtYXJrX21hbmFnZXJyFAEAAFggAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnNyFQEAAFgSAAAAYXBhY2hlX2JlYW0uaW8uZ2NwchYBAABYPwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5waXBlbGluZV9ncmFwaF9yZW5kZXJlcnIXAQAAWCEAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnNpZGVpbnB1dHNyGAEAAFgsAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X2lvX3JlYWRfcGlwZWxpbmVyGQEAAFgRAAAAYXBhY2hlX2JlYW0udXRpbHNyGgEAAFgcAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZXIbAQAAWB0AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvd3IcAQAAWB8AAABhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWNoZWNrch0BAABYHQAAAGFwYWNoZV9iZWFtLmNvZGVycy5vYnNlcnZhYmxlch4BAABYHQAAAGFwYWNoZV9iZWFtLnV0aWxzLnByb3RvX3V0aWxzch8BAABYMgAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuYWRhcHRpdmVfdGhyb3R0bGVyciABAABYGQAAAGFwYWNoZV9iZWFtLmludGVybmFsLnV0aWxyIQEAAFgoAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X3J1bm5lcnIiAQAAWCwAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lcnIjAQAAWC0AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHRyJAEAAFgvAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm5hdGl2ZV90eXBlX2NvbXBhdGliaWxpdHlyJQEAAFgfAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50aW1ldXRpbHImAQAAWCsAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmRhdGFzdG9yZWlvcicBAABYGQAAAGFwYWNoZV9iZWFtLmlvLnRmcmVjb3JkaW9yKAEAAFgRAAAAYXBhY2hlX2JlYW0udG9vbHNyKQEAAFgfAAAAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZXIqAQAAWCAAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZXIrAQAAWCAAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jbG9ja3IsAQAAWBgAAABhcGFjaGVfYmVhbS5pby5nY3AuZ2NzaW9yLQEAAFg2AAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fYXJ0aWZhY3RfYXBpX3BiMl9ncnBjci4BAABYGAAAAGFwYWNoZV9iZWFtLnV0aWxzLnBsdWdpbnIvAQAAWBIAAABhcGFjaGVfYmVhbS5wdmFsdWVyMAEAAFgUAAAAYXBhY2hlX2JlYW0uaW8udmNmaW9yMQEAAFgkAAAAYXBhY2hlX2JlYW0ubWV0cmljcy5tb25pdG9yaW5nX2luZm9zcjIBAABYEwAAAGFwYWNoZV9iZWFtLm1ldHJpY3NyMwEAAFgjAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuY29tbW9uX3VybnNyNAEAAFgjAAAAYXBhY2hlX2JlYW0uaW50ZXJuYWwuZ2NwLmpzb25fdmFsdWVyNQEAAFgaAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3RyNgEAAFg2AAAAYXBhY2hlX2JlYW0udGVzdGluZy5sb2FkX3Rlc3RzLmxvYWRfdGVzdF9tZXRyaWNzX3V0aWxzcjcBAABYDgAAAGFwYWNoZV9iZWFtLmlvcjgBAABYHgAAAGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZXI5AQAAWCQAAABhcGFjaGVfYmVhbS5ydW5uZXJzLnBpcGVsaW5lX2NvbnRleHRyOgEAAFghAAAAYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3BpcGVsaW5lcjsBAABYGwAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pb3I8AQAAWBkAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzcj0BAABYIwAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LnB5dGhvbl91cm5zcj4BAABYLgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnRyYW5zZm9ybV9ldmFsdWF0b3JyPwEAAFgdAAAAYXBhY2hlX2JlYW0uaW50ZXJuYWwuZ2NwLmF1dGhyQAEAAFgfAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MXJBAQAAWC4AAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLnF1ZXJ5X3NwbGl0dGVyckIBAABYHAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJuYWxyQwEAAFg3AAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcHJvdmlzaW9uX2FwaV9wYjJfZ3JwY3JEAQAAWDEAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LnRlc3RfZGF0YWZsb3dfcnVubmVyckUBAABYIwAAAGFwYWNoZV9iZWFtLmlvLnJlc3RyaWN0aW9uX3RyYWNrZXJzckYBAABYIwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV4ZWN1dG9yckcBAABYGgAAAGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljckgBAABYMQAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2pvYl9hcGlfcGIyX2dycGNySQEAAFhCAAAAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LmludGVyYWN0aXZlX3BpcGVsaW5lX2dyYXBockoBAABYJwAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZXJLAQAAWC0AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2VyTAEAAFgrAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X3VzZXJzdGF0ZXJNAQAAWBMAAABhcGFjaGVfYmVhbS5ydW5uZXJzck4BAABYEwAAAGFwYWNoZV9iZWFtLnZlcnNpb25yTwEAAFgyAAAAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9ydW5uZXJyUAEAAFgcAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvd3JRAQAAWB0AAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlc3JSAQAAWC0AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X21ldHJpY3NyUwEAAFgkAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jcmVhdGVfc291cmNlclQBAABYHQAAAGFwYWNoZV9iZWFtLnV0aWxzLmFubm90YXRpb25zclUBAABYHgAAAGFwYWNoZV9iZWFtLmlvLmxvY2FsZmlsZXN5c3RlbXJWAQAAWB0AAABhcGFjaGVfYmVhbS5jb2RlcnMudHlwZWNvZGVyc3JXAQAAWB8AAABhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzclgBAABYIgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJuYWwubmFtZXNyWQEAAFgwAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjcloBAABYFQAAAGFwYWNoZV9iZWFtLmlvLmlvYmFzZXJbAQAAWBsAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWxyXAEAAFgcAAAAYXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZXJdAQAAWB4AAABhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2VyXgEAAFgfAAAAYXBhY2hlX2JlYW0ucnVubmVycy5qb2IubWFuYWdlcnJfAQAAZYVScmABAABVCXRlbXBfZGF0YXJhAQAAfVUOdG9jX3NlY251bWJlcnNyYgEAAH1VG2ludGVyc3BoaW54X25hbWVkX2ludmVudG9yeXJjAQAAfXJkAQAAKGiefXJlAQAAKFgNAAAAc3RkOjJ0bzNmaXhlcnJmAQAAfXJnAQAAKFgHAAAAcmVuYW1lc3JoAQAAKFgGAAAAUHl0aG9ucmkBAABYAwAAADIuN3JqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1yZW5hbWVzWAEAAAAtdHJrAQAAWAYAAAB4cmFuZ2VybAEAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci14cmFuZ2VYAQAAAC10cm0BAABYCQAAAGl0ZXJ0b29sc3JuAQAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLWl0ZXJ0b29sc1gBAAAALXRybwEAAFgIAAAAd3NfY29tbWFycAEAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci13c19jb21tYVgBAAAALXRycQEAAFgDAAAAbWFwcnIBAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItbWFwWAEAAAAtdHJzAQAAWAcAAAB1bmljb2RlcnQBAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItdW5pY29kZVgBAAAALXRydQEAAFgMAAAAdHVwbGVfcGFyYW1zcnYBAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItdHVwbGVfcGFyYW1zWAEAAAAtdHJ3AQAAWAYAAABpbnRlcm5yeAEAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1pbnRlcm5YAQAAAC10cnkBAABYBQAAAHRocm93cnoBAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItdGhyb3dYAQAAAC10cnsBAABYAwAAAHppcHJ8AQAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLXppcFgBAAAALXRyfQEAAFgHAAAAZ2V0Y3dkdXJ+AQAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLWdldGN3ZHVYAQAAAC10cn8BAABYCgAAAGlzaW5zdGFuY2VygAEAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1pc2luc3RhbmNlWAEAAAAtdHKBAQAAWAsAAABtZXRob2RhdHRyc3KCAQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLW1ldGhvZGF0dHJzWAEAAAAtdHKDAQAAWAUAAABwcmludHKEAQAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLXByaW50WAEAAAAtdHKFAQAAWAgAAABleGl0ZnVuY3KGAQAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLWV4aXRmdW5jWAEAAAAtdHKHAQAAWAQAAABuZXh0cogBAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItbmV4dFgBAAAALXRyiQEAAFgCAAAAbmVyigEAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1uZVgBAAAALXRyiwEAAFgFAAAAdHlwZXNyjAEAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci10eXBlc1gBAAAALXRyjQEAAFgEAAAAZGljdHKOAQAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLWRpY3RYAQAAAC10co8BAABYBgAAAGV4Y2VwdHKQAQAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLWV4Y2VwdFgBAAAALXRykQEAAFgEAAAAcmVwcnKSAQAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLXJlcHJYAQAAAC10cpMBAABYCgAAAGJhc2VzdHJpbmdylAEAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1iYXNlc3RyaW5nWAEAAAAtdHKVAQAAWAQAAABleGVjcpYBAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItZXhlY1gBAAAALXRylwEAAFgIAAAAaW1wb3J0czJymAEAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1pbXBvcnRzMlgBAAAALXRymQEAAFgGAAAAZmlsdGVycpoBAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItZmlsdGVyWAEAAAAtdHKbAQAAWAYAAABpbXBvcnRynAEAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1pbXBvcnRYAQAAAC10cp0BAABYCQAAAG1ldGFjbGFzc3KeAQAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLW1ldGFjbGFzc1gBAAAALXRynwEAAFgKAAAAeHJlYWRsaW5lc3KgAQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLXhyZWFkbGluZXNYAQAAAC10cqEBAABYBgAAAGlkaW9tc3KiAQAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLWlkaW9tc1gBAAAALXRyowEAAFgEAAAAbG9uZ3KkAQAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLWxvbmdYAQAAAC10cqUBAABYBQAAAHBhcmVucqYBAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItcGFyZW5YAQAAAC10cqcBAABYCwAAAHNldF9saXRlcmFscqgBAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItc2V0X2xpdGVyYWxYAQAAAC10cqkBAABYBwAAAGltcG9ydHNyqgEAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1pbXBvcnRzWAEAAAAtdHKrAQAAWAYAAABidWZmZXJyrAEAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1idWZmZXJYAQAAAC10cq0BAABYBgAAAHJlZHVjZXKuAQAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLXJlZHVjZVgBAAAALXRyrwEAAFgHAAAAbm9uemVyb3KwAQAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLW5vbnplcm9YAQAAAC10crEBAABYBQAAAGlucHV0crIBAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItaW5wdXRYAQAAAC10crMBAABYDQAAAHN0YW5kYXJkZXJyb3JytAEAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1zdGFuZGFyZGVycm9yWAEAAAAtdHK1AQAAWAUAAAByYWlzZXK2AQAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLXJhaXNlWAEAAAAtdHK3AQAAWAcAAABzeXNfZXhjcrgBAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItc3lzX2V4Y1gBAAAALXRyuQEAAFgHAAAAaGFzX2tleXK6AQAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLWhhc19rZXlYAQAAAC10crsBAABYBgAAAGZ1dHVyZXK8AQAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLWZ1dHVyZVgBAAAALXRyvQEAAFgJAAAAcmF3X2lucHV0cr4BAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItcmF3X2lucHV0WAEAAAAtdHK/AQAAWAcAAABhc3NlcnRzcsABAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItYXNzZXJ0c1gBAAAALXRywQEAAFgLAAAAbnVtbGl0ZXJhbHNywgEAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1udW1saXRlcmFsc1gBAAAALXRywwEAAFgJAAAAZnVuY2F0dHJzcsQBAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItZnVuY2F0dHJzWAEAAAAtdHLFAQAAWAgAAABleGVjZmlsZXLGAQAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLWV4ZWNmaWxlWAEAAAAtdHLHAQAAWAYAAAB1cmxsaWJyyAEAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci11cmxsaWJYAQAAAC10cskBAABYEQAAAGl0ZXJ0b29sc19pbXBvcnRzcsoBAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItaXRlcnRvb2xzX2ltcG9ydHNYAQAAAC10cssBAABYBQAAAGFwcGx5cswBAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItYXBwbHlYAQAAAC10cs0BAAB1WAgAAABzdGQ6dGVybXLOAQAAfXLPAQAAKFgEAAAAYmRmbHLQAQAAKGppAQAAamoBAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLWJkZmxYAQAAAC10ctEBAABYBAAAAGlkbGVy0gEAAChqaQEAAGpqAQAAWDEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1pZGxlWAEAAAAtdHLTAQAAWAoAAABfX2Z1dHVyZV9fctQBAAAoamkBAABqagEAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0tZnV0dXJlWAEAAAAtdHLVAQAAWAkAAABkZWNvcmF0b3Jy1gEAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1kZWNvcmF0b3JYAQAAAC10ctcBAABYAwAAAC4uLnLYAQAAKGppAQAAamoBAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLTFYAQAAAC10ctkBAABYCwAAAGR1Y2stdHlwaW5nctoBAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0tZHVjay10eXBpbmdYAQAAAC10ctsBAABYCAAAAGl0ZXJhdG9yctwBAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0taXRlcmF0b3JYAQAAAC10ct0BAABYCQAAAGltbXV0YWJsZXLeAQAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLWltbXV0YWJsZVgBAAAALXRy3wEAAFgEAAAAdHlwZXLgAQAAKGppAQAAamoBAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLXR5cGVYAQAAAC10cuEBAABYEgAAAGdhcmJhZ2UgY29sbGVjdGlvbnLiAQAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLWdhcmJhZ2UtY29sbGVjdGlvblgBAAAALXRy4wEAAFgLAAAAaW50ZXJwcmV0ZWRy5AEAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1pbnRlcnByZXRlZFgBAAAALXRy5QEAAFgUAAAAZ2VuZXJhdG9yIGV4cHJlc3Npb25y5gEAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1nZW5lcmF0b3ItZXhwcmVzc2lvblgBAAAALXRy5wEAAFgLAAAAbmFtZWQgdHVwbGVy6AEAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1uYW1lZC10dXBsZVgBAAAALXRy6QEAAFgPAAAAdmlydHVhbCBtYWNoaW5lcuoBAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0tdmlydHVhbC1tYWNoaW5lWAEAAAAtdHLrAQAAWAkAAABpbXBvcnRpbmdy7AEAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1pbXBvcnRpbmdYAQAAAC10cu0BAABYBwAAAG11dGFibGVy7gEAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1tdXRhYmxlWAEAAAAtdHLvAQAAWAYAAABtb2R1bGVy8AEAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1tb2R1bGVYAQAAAC10cvEBAABYBQAAAGNsYXNzcvIBAAAoamkBAABqagEAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0tY2xhc3NYAQAAAC10cvMBAABYDAAAAG5lc3RlZCBzY29wZXL0AQAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLW5lc3RlZC1zY29wZVgBAAAALXRy9QEAAFgSAAAAbGlzdCBjb21wcmVoZW5zaW9ucvYBAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0tbGlzdC1jb21wcmVoZW5zaW9uWAEAAAAtdHL3AQAAWA0AAABjbGFzc2ljIGNsYXNzcvgBAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0tY2xhc3NpYy1jbGFzc1gBAAAALXRy+QEAAFgXAAAAbWV0aG9kIHJlc29sdXRpb24gb3JkZXJy+gEAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1tZXRob2QtcmVzb2x1dGlvbi1vcmRlclgBAAAALXRy+wEAAFgJAAAAcGFyYW1ldGVycvwBAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0tcGFyYW1ldGVyWAEAAAAtdHL9AQAAWBAAAABmaWxlLWxpa2Ugb2JqZWN0cv4BAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0tZmlsZS1saWtlLW9iamVjdFgBAAAALXRy/wEAAFgQAAAAZXh0ZW5zaW9uIG1vZHVsZXIAAgAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLWV4dGVuc2lvbi1tb2R1bGVYAQAAAC10cgECAABYBAAAAGVhZnByAgIAAChqaQEAAGpqAQAAWDEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1lYWZwWAEAAAAtdHIDAgAAWAsAAABweXRob24gMzAwMHIEAgAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLXB5dGhvbi0zMDAwWAEAAAAtdHIFAgAAWAkAAABkb2NzdHJpbmdyBgIAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1kb2NzdHJpbmdYAQAAAC10cgcCAABYDgAAAGZsb29yIGRpdmlzaW9ucggCAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0tZmxvb3ItZGl2aXNpb25YAQAAAC10cgkCAABYCQAAAHN0YXRlbWVudHIKAgAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLXN0YXRlbWVudFgBAAAALXRyCwIAAFgIAAAAc2VxdWVuY2VyDAIAAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1zZXF1ZW5jZVgBAAAALXRyDQIAAFgPAAAAcmVmZXJlbmNlIGNvdW50cg4CAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0tcmVmZXJlbmNlLWNvdW50WAEAAAAtdHIPAgAAWAcAAABwYWNrYWdlchACAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0tcGFja2FnZVgBAAAALXRyEQIAAFgEAAAAbGlzdHISAgAAKGppAQAAamoBAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLWxpc3RYAQAAAC10chMCAABYEwAAAHZpcnR1YWwgZW52aXJvbm1lbnRyFAIAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS12aXJ0dWFsLWVudmlyb25tZW50WAEAAAAtdHIVAgAAWBcAAABnbG9iYWwgaW50ZXJwcmV0ZXIgbG9ja3IWAgAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLWdsb2JhbC1pbnRlcnByZXRlci1sb2NrWAEAAAAtdHIXAgAAWAMAAAA+Pj5yGAIAAChqaQEAAGpqAQAAWCwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybVgBAAAALXRyGQIAAFgEAAAAbGJ5bHIaAgAAKGppAQAAamoBAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLWxieWxYAQAAAC10chsCAABYCQAAAGF0dHJpYnV0ZXIcAgAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLWF0dHJpYnV0ZVgBAAAALXRyHQIAAFgKAAAAZGVzY3JpcHRvcnIeAgAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLWRlc2NyaXB0b3JYAQAAAC10ch8CAABYCAAAAGltcG9ydGVyciACAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0taW1wb3J0ZXJYAQAAAC10ciECAABYBgAAAG9iamVjdHIiAgAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLW9iamVjdFgBAAAALXRyIwIAAFgLAAAAaW50ZXJhY3RpdmVyJAIAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1pbnRlcmFjdGl2ZVgBAAAALXRyJQIAAFgMAAAAa2V5IGZ1bmN0aW9uciYCAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0ta2V5LWZ1bmN0aW9uWAEAAAAtdHInAgAAWA8AAABzdHJ1Y3Qgc2VxdWVuY2VyKAIAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1zdHJ1Y3Qtc2VxdWVuY2VYAQAAAC10cikCAABYCAAAAHB5dGhvbmljcioCAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0tcHl0aG9uaWNYAQAAAC10cisCAABYBwAAAG1hcHBpbmdyLAIAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1tYXBwaW5nWAEAAAAtdHItAgAAWA4AAABjb21wbGV4IG51bWJlcnIuAgAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLWNvbXBsZXgtbnVtYmVyWAEAAAAtdHIvAgAAWA8AAABuZXctc3R5bGUgY2xhc3NyMAIAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1uZXctc3R5bGUtY2xhc3NYAQAAAC10cjECAABYBwAAAGNweXRob25yMgIAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1jcHl0aG9uWAEAAAAtdHIzAgAAWA4AAABzcGVjaWFsIG1ldGhvZHI0AgAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLXNwZWNpYWwtbWV0aG9kWAEAAAAtdHI1AgAAWAsAAABmaWxlIG9iamVjdHI2AgAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLWZpbGUtb2JqZWN0WAEAAAAtdHI3AgAAWAkAAABuYW1lc3BhY2VyOAIAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1uYW1lc3BhY2VYAQAAAC10cjkCAABYBQAAAHNsaWNlcjoCAAAoamkBAABqagEAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0tc2xpY2VYAQAAAC10cjsCAABYBAAAADJ0bzNyPAIAAChqaQEAAGpqAQAAWDEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS0ydG8zWAEAAAAtdHI9AgAAWAYAAABmaW5kZXJyPgIAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1maW5kZXJYAQAAAC10cj8CAABYEwAAAHBvc2l0aW9uYWwgYXJndW1lbnRyQAIAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1wb3NpdGlvbmFsLWFyZ3VtZW50WAEAAAAtdHJBAgAAWBAAAABpbnRlZ2VyIGRpdmlzaW9uckICAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0taW50ZWdlci1kaXZpc2lvblgBAAAALXRyQwIAAFgTAAAAYWJzdHJhY3QgYmFzZSBjbGFzc3JEAgAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLWFic3RyYWN0LWJhc2UtY2xhc3NYAQAAAC10ckUCAABYEgAAAHVuaXZlcnNhbCBuZXdsaW5lc3JGAgAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLXVuaXZlcnNhbC1uZXdsaW5lc1gBAAAALXRyRwIAAFgKAAAAZGljdGlvbmFyeXJIAgAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLWRpY3Rpb25hcnlYAQAAAC10ckkCAABYCAAAAGZ1bmN0aW9uckoCAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0tZnVuY3Rpb25YAQAAAC10cksCAABYAwAAAG1yb3JMAgAAKGppAQAAamoBAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLW1yb1gBAAAALXRyTQIAAFgJAAAAX19zbG90c19fck4CAAAoamkBAABqagEAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0tc2xvdHNYAQAAAC10ck8CAABYCgAAAGV4cHJlc3Npb25yUAIAAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1leHByZXNzaW9uWAEAAAAtdHJRAgAAWAgAAABieXRlY29kZXJSAgAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLWJ5dGVjb2RlWAEAAAAtdHJTAgAAWA8AAABkaWN0aW9uYXJ5IHZpZXdyVAIAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1kaWN0aW9uYXJ5LXZpZXdYAQAAAC10clUCAABYDQAAAHplbiBvZiBweXRob25yVgIAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS16ZW4tb2YtcHl0aG9uWAEAAAAtdHJXAgAAWAgAAABjb2VyY2lvbnJYAgAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLWNvZXJjaW9uWAEAAAAtdHJZAgAAWBQAAAB0cmlwbGUtcXVvdGVkIHN0cmluZ3JaAgAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLXRyaXBsZS1xdW90ZWQtc3RyaW5nWAEAAAAtdHJbAgAAWAYAAABsb2FkZXJyXAIAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1sb2FkZXJYAQAAAC10cl0CAABYEAAAAGtleXdvcmQgYXJndW1lbnRyXgIAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1rZXl3b3JkLWFyZ3VtZW50WAEAAAAtdHJfAgAAWAgAAABhcmd1bWVudHJgAgAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLWFyZ3VtZW50WAEAAAAtdHJhAgAAWA8AAABjb250ZXh0IG1hbmFnZXJyYgIAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1jb250ZXh0LW1hbmFnZXJYAQAAAC10cmMCAABYCQAAAGdlbmVyYXRvcnJkAgAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLWdlbmVyYXRvclgBAAAALXRyZQIAAFgRAAAAYnl0ZXMtbGlrZSBvYmplY3RyZgIAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1ieXRlcy1saWtlLW9iamVjdFgBAAAALXRyZwIAAFgJAAAAbWV0YWNsYXNzcmgCAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0tbWV0YWNsYXNzWAEAAAAtdHJpAgAAWAYAAABtZXRob2RyagIAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1tZXRob2RYAQAAAC10cmsCAABYCAAAAGhhc2hhYmxlcmwCAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0taGFzaGFibGVYAQAAAC10cm0CAABYAwAAAHBlcHJuAgAAKGppAQAAamoBAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLXBlcFgBAAAALXRybwIAAFgGAAAAbGFtYmRhcnACAAAoamkBAABqagEAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI3Rlcm0tbGFtYmRhWAEAAAAtdHJxAgAAWAgAAABpdGVyYWJsZXJyAgAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCN0ZXJtLWl0ZXJhYmxlWAEAAAAtdHJzAgAAWAMAAABnaWxydAIAAChqaQEAAGpqAQAAWDAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjdGVybS1naWxYAQAAAC10cnUCAAB1WA4AAABweTpjbGFzc21ldGhvZHJ2AgAAfXJ3AgAAKFgaAAAAZGF0ZXRpbWUuZGF0ZXRpbWUuc3RycHRpbWVyeAIAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS5zdHJwdGltZVgBAAAALXRyeQIAAFgXAAAAZGF0ZXRpbWUuZGF0ZXRpbWUudG9kYXlyegIAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS50b2RheVgBAAAALXRyewIAAFgbAAAAZGF0ZXRpbWUuZGF0ZS5mcm9tdGltZXN0YW1wcnwCAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZS5mcm9tdGltZXN0YW1wWAEAAAAtdHJ9AgAAWBQAAAB0YXJmaWxlLlRhckZpbGUub3BlbnJ+AgAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJGaWxlLm9wZW5YAQAAAC10cn8CAABYHwAAAGRhdGV0aW1lLmRhdGV0aW1lLmZyb210aW1lc3RhbXBygAIAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS5mcm9tdGltZXN0YW1wWAEAAAAtdHKBAgAAWCIAAABkYXRldGltZS5kYXRldGltZS51dGNmcm9tdGltZXN0YW1wcoICAAAoamkBAABqagEAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZXRpbWUudXRjZnJvbXRpbWVzdGFtcFgBAAAALXRygwIAAFggAAAAY29sbGVjdGlvbnMuc29tZW5hbWVkdHVwbGUuX21ha2VyhAIAAChqaQEAAGpqAQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5zb21lbmFtZWR0dXBsZS5fbWFrZVgBAAAALXRyhQIAAFgVAAAAZGF0ZXRpbWUuZGF0ZXRpbWUubm93coYCAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZXRpbWUubm93WAEAAAAtdHKHAgAAWB0AAABkYXRldGltZS5kYXRldGltZS5mcm9tb3JkaW5hbHKIAgAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGV0aW1lLmZyb21vcmRpbmFsWAEAAAAtdHKJAgAAWBgAAABkYXRldGltZS5kYXRldGltZS51dGNub3dyigIAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS51dGNub3dYAQAAAC10cosCAABYGQAAAGRhdGV0aW1lLmRhdGUuZnJvbW9yZGluYWxyjAIAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRlLmZyb21vcmRpbmFsWAEAAAAtdHKNAgAAWBkAAABkYXRldGltZS5kYXRldGltZS5jb21iaW5lco4CAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZXRpbWUuY29tYmluZVgBAAAALXRyjwIAAFgdAAAAaXRlcnRvb2xzLmNoYWluLmZyb21faXRlcmFibGVykAIAAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaXRlcnRvb2xzLmh0bWwjaXRlcnRvb2xzLmNoYWluLmZyb21faXRlcmFibGVYAQAAAC10cpECAABYEwAAAGRhdGV0aW1lLmRhdGUudG9kYXlykgIAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRlLnRvZGF5WAEAAAAtdHKTAgAAdVgMAAAAcHk6YXR0cmlidXRlcpQCAAB9cpUCAAAoWCsAAAB4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIucmV0dXJuc191bmljb2RlcpYCAAAoamkBAABqagEAAFhaAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIucmV0dXJuc191bmljb2RlWAEAAAAtdHKXAgAAWB4AAAB6aXBmaWxlLlppcEluZm8uY3JlYXRlX3ZlcnNpb25ymAIAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGZpbGUuWmlwSW5mby5jcmVhdGVfdmVyc2lvblgBAAAALXRymQIAAFgWAAAAeG1sLmRvbS5Ob2RlLm5vZGVWYWx1ZXKaAgAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Ob2RlLm5vZGVWYWx1ZVgBAAAALXRymwIAAFgYAAAAemlwZmlsZS5aaXBJbmZvLnJlc2VydmVkcpwCAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLlppcEluZm8ucmVzZXJ2ZWRYAQAAAC10cp0CAABYJAAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50LmF0dHJpYnKeAgAAKGppAQAAamoBAABYYQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC5hdHRyaWJYAQAAAC10cp8CAABYFwAAAHNxbGl0ZTMuQ3Vyc29yLnJvd2NvdW50cqACAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLkN1cnNvci5yb3djb3VudFgBAAAALXRyoQIAAFgJAAAAZmlsZS5uYW1lcqICAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZmlsZS5uYW1lWAEAAAAtdHKjAgAAWB8AAAB4bWxycGNsaWIuUHJvdG9jb2xFcnJvci5lcnJjb2RlcqQCAAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbHJwY2xpYi5odG1sI3htbHJwY2xpYi5Qcm90b2NvbEVycm9yLmVycmNvZGVYAQAAAC10cqUCAABYEAAAAHV1aWQuVVVJRC5maWVsZHNypgIAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXVpZC5odG1sI3V1aWQuVVVJRC5maWVsZHNYAQAAAC10cqcCAABYFgAAAGZ1bmN0b29scy5wYXJ0aWFsLmFyZ3NyqAIAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rvb2xzLmh0bWwjZnVuY3Rvb2xzLnBhcnRpYWwuYXJnc1gBAAAALXRyqQIAAFgXAAAAb3B0cGFyc2UuT3B0aW9uLkFDVElPTlNyqgIAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS5PcHRpb24uQUNUSU9OU1gBAAAALXRyqwIAAFgdAAAAb3B0cGFyc2UuT3B0aW9uLlRZUEVEX0FDVElPTlNyrAIAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS5PcHRpb24uVFlQRURfQUNUSU9OU1gBAAAALXRyrQIAAFgeAAAARWFzeURpYWxvZ3MuUHJvZ3Jlc3NCYXIubWF4dmFscq4CAAAoamkBAABqagEAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vhc3lkaWFsb2dzLmh0bWwjRWFzeURpYWxvZ3MuUHJvZ3Jlc3NCYXIubWF4dmFsWAEAAAAtdHKvAgAAWDAAAABjb29raWVsaWIuRGVmYXVsdENvb2tpZVBvbGljeS5Eb21haW5TdHJpY3ROb0RvdHNysAIAAChqaQEAAGpqAQAAWGEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llbGliLmh0bWwjY29va2llbGliLkRlZmF1bHRDb29raWVQb2xpY3kuRG9tYWluU3RyaWN0Tm9Eb3RzWAEAAAAtdHKxAgAAWB8AAABpby5UZXh0SU9XcmFwcGVyLmxpbmVfYnVmZmVyaW5ncrICAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uVGV4dElPV3JhcHBlci5saW5lX2J1ZmZlcmluZ1gBAAAALXRyswIAAFgRAAAAcmUuTWF0Y2hPYmplY3QucmVytAIAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmUuaHRtbCNyZS5NYXRjaE9iamVjdC5yZVgBAAAALXRytQIAAFgSAAAAc2hsZXguc2hsZXguZXNjYXBlcrYCAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NobGV4Lmh0bWwjc2hsZXguc2hsZXguZXNjYXBlWAEAAAAtdHK3AgAAWA0AAABjbWQuQ21kLnJ1bGVycrgCAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NtZC5odG1sI2NtZC5DbWQucnVsZXJYAQAAAC10crkCAABYIAAAAHhtbC5kb20uRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50croCAAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkRvY3VtZW50LmRvY3VtZW50RWxlbWVudFgBAAAALXRyuwIAAFgnAAAAd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5vc19lbnZpcm9ucrwCAAAoamkBAABqagEAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLm9zX2Vudmlyb25YAQAAAC10cr0CAABYFQAAAGRhdGV0aW1lLmRhdGV0aW1lLm1pbnK+AgAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGV0aW1lLm1pblgBAAAALXRyvwIAAFgWAAAAY3N2LmNzdnJlYWRlci5saW5lX251bXLAAgAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jc3YuaHRtbCNjc3YuY3N2cmVhZGVyLmxpbmVfbnVtWAEAAAAtdHLBAgAAWB4AAAB4bWwuZG9tLkRvY3VtZW50VHlwZS5ub3RhdGlvbnNywgIAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uRG9jdW1lbnRUeXBlLm5vdGF0aW9uc1gBAAAALXRywwIAAFgaAAAAc3NsLlNTTENvbnRleHQudmVyaWZ5X21vZGVyxAIAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTENvbnRleHQudmVyaWZ5X21vZGVYAQAAAC10csUCAABYJAAAAHRleHR3cmFwLlRleHRXcmFwcGVyLmRyb3Bfd2hpdGVzcGFjZXLGAgAAKGppAQAAamoBAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZXh0d3JhcC5odG1sI3RleHR3cmFwLlRleHRXcmFwcGVyLmRyb3Bfd2hpdGVzcGFjZVgBAAAALXRyxwIAAFgWAAAAeG1sLmRvbS5BdHRyLmxvY2FsTmFtZXLIAgAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5BdHRyLmxvY2FsTmFtZVgBAAAALXRyyQIAAFgsAAAAeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkN1cnJlbnRCeXRlSW5kZXhyygIAAChqaQEAAGpqAQAAWFsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5DdXJyZW50Qnl0ZUluZGV4WAEAAAAtdHLLAgAAWC4AAAB3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLndzZ2lfZmlsZV93cmFwcGVycswCAAAoamkBAABqagEAAFhdAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLndzZ2lfZmlsZV93cmFwcGVyWAEAAAAtdHLNAgAAWCMAAAB4bWwucGFyc2Vycy5leHBhdC5FeHBhdEVycm9yLmxpbmVub3LOAgAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQuRXhwYXRFcnJvci5saW5lbm9YAQAAAC10cs8CAABYGQAAAHppcGZpbGUuWmlwSW5mby5kYXRlX3RpbWVy0AIAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGZpbGUuWmlwSW5mby5kYXRlX3RpbWVYAQAAAC10ctECAABYJAAAAGVtYWlsLmNoYXJzZXQuQ2hhcnNldC5vdXRwdXRfY2hhcnNldHLSAgAAKGppAQAAamoBAABYWQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5jaGFyc2V0Lmh0bWwjZW1haWwuY2hhcnNldC5DaGFyc2V0Lm91dHB1dF9jaGFyc2V0WAEAAAAtdHLTAgAAWC0AAAB3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLndzZ2lfbXVsdGl0aHJlYWRy1AIAAChqaQEAAGpqAQAAWFwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd3NnaXJlZi5odG1sI3dzZ2lyZWYuaGFuZGxlcnMuQmFzZUhhbmRsZXIud3NnaV9tdWx0aXRocmVhZFgBAAAALXRy1QIAAFgfAAAAY29va2llbGliLkNvb2tpZS5wb3J0X3NwZWNpZmllZHLWAgAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuQ29va2llLnBvcnRfc3BlY2lmaWVkWAEAAAAtdHLXAgAAWBcAAABjb29raWVsaWIuQ29va2llLnNlY3VyZXLYAgAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuQ29va2llLnNlY3VyZVgBAAAALXRy2QIAAFgcAAAAeG1sLmRvbS5Ob2RlLnByZXZpb3VzU2libGluZ3LaAgAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Ob2RlLnByZXZpb3VzU2libGluZ1gBAAAALXRy2wIAAFgiAAAAeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQudGV4dHLcAgAAKGppAQAAamoBAABYXwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC50ZXh0WAEAAAAtdHLdAgAAWCMAAABTb2NrZXRTZXJ2ZXIuQmFzZVNlcnZlci5zb2NrZXRfdHlwZXLeAgAAKGppAQAAamoBAABYVwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXRzZXJ2ZXIuaHRtbCNTb2NrZXRTZXJ2ZXIuQmFzZVNlcnZlci5zb2NrZXRfdHlwZVgBAAAALXRy3wIAAFgqAAAAd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5lcnJvcl9oZWFkZXJzcuACAAAoamkBAABqagEAAFhZAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLmVycm9yX2hlYWRlcnNYAQAAAC10cuECAABYHgAAAEVhc3lEaWFsb2dzLlByb2dyZXNzQmFyLmN1cnZhbHLiAgAAKGppAQAAamoBAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lYXN5ZGlhbG9ncy5odG1sI0Vhc3lEaWFsb2dzLlByb2dyZXNzQmFyLmN1cnZhbFgBAAAALXRy4wIAAFgYAAAAb3B0cGFyc2UuT3B0aW9uLmNhbGxiYWNrcuQCAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UuT3B0aW9uLmNhbGxiYWNrWAEAAAAtdHLlAgAAWBoAAAB0ZXh0d3JhcC5UZXh0V3JhcHBlci53aWR0aHLmAgAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZXh0d3JhcC5odG1sI3RleHR3cmFwLlRleHRXcmFwcGVyLndpZHRoWAEAAAAtdHLnAgAAWBgAAABjdHlwZXMuX1BvaW50ZXIuY29udGVudHNy6AIAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLl9Qb2ludGVyLmNvbnRlbnRzWAEAAAAtdHLpAgAAWBQAAABkb2N0ZXN0LkV4YW1wbGUud2FudHLqAgAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5FeGFtcGxlLndhbnRYAQAAAC10cusCAABYIAAAAG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzLmV4aXRjb2RlcuwCAAAoamkBAABqagEAAFhXAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5Qcm9jZXNzLmV4aXRjb2RlWAEAAAAtdHLtAgAAWBQAAABvcHRwYXJzZS5PcHRpb24uZGVzdHLuAgAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLk9wdGlvbi5kZXN0WAEAAAAtdHLvAgAAWBgAAABjb29raWVsaWIuQ29va2llLmNvbW1lbnRy8AIAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llbGliLmh0bWwjY29va2llbGliLkNvb2tpZS5jb21tZW50WAEAAAAtdHLxAgAAWBUAAAB0YXJmaWxlLlRhckluZm8ubXRpbWVy8gIAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuVGFySW5mby5tdGltZVgBAAAALXRy8wIAAFgVAAAAdGFyZmlsZS5UYXJJbmZvLmduYW1lcvQCAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLlRhckluZm8uZ25hbWVYAQAAAC10cvUCAABYFgAAAGZpbGVjbXAuZGlyY21wLnN1YmRpcnNy9gIAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmlsZWNtcC5odG1sI2ZpbGVjbXAuZGlyY21wLnN1YmRpcnNYAQAAAC10cvcCAABYIAAAAHNxbGl0ZTMuQ29ubmVjdGlvbi50b3RhbF9jaGFuZ2VzcvgCAAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLkNvbm5lY3Rpb24udG90YWxfY2hhbmdlc1gBAAAALXRy+QIAAFgYAAAAZmlsZWNtcC5kaXJjbXAubGVmdF9vbmx5cvoCAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZpbGVjbXAuaHRtbCNmaWxlY21wLmRpcmNtcC5sZWZ0X29ubHlYAQAAAC10cvsCAABYEQAAAENvb2tpZS5Nb3JzZWwua2V5cvwCAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZS5odG1sI0Nvb2tpZS5Nb3JzZWwua2V5WAEAAAAtdHL9AgAAWBYAAABpby5UZXh0SU9CYXNlLm5ld2xpbmVzcv4CAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uVGV4dElPQmFzZS5uZXdsaW5lc1gBAAAALXRy/wIAAFgpAAAAd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5lcnJvcl9zdGF0dXNyAAMAAChqaQEAAGpqAQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd3NnaXJlZi5odG1sI3dzZ2lyZWYuaGFuZGxlcnMuQmFzZUhhbmRsZXIuZXJyb3Jfc3RhdHVzWAEAAAAtdHIBAwAAWB0AAAB6aXBmaWxlLlppcEluZm8uY29tcHJlc3NfdHlwZXICAwAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5aaXBJbmZvLmNvbXByZXNzX3R5cGVYAQAAAC10cgMDAABYEwAAAGltYXBsaWIuSU1BUDQuZGVidWdyBAMAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQuZGVidWdYAQAAAC10cgUDAABYFAAAAHB5Y2xici5DbGFzcy5tZXRob2RzcgYDAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5Y2xici5odG1sI3B5Y2xici5DbGFzcy5tZXRob2RzWAEAAAAtdHIHAwAAWBgAAABodHRwbGliLkhUVFBSZXNwb25zZS5tc2dyCAMAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHR0cGxpYi5odG1sI2h0dHBsaWIuSFRUUFJlc3BvbnNlLm1zZ1gBAAAALXRyCQMAAFggAAAAdGV4dHdyYXAuVGV4dFdyYXBwZXIuZXhwYW5kX3RhYnNyCgMAAChqaQEAAGpqAQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGV4dHdyYXAuaHRtbCN0ZXh0d3JhcC5UZXh0V3JhcHBlci5leHBhbmRfdGFic1gBAAAALXRyCwMAAFgVAAAAemlwZmlsZS5aaXBGaWxlLmRlYnVncgwDAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLlppcEZpbGUuZGVidWdYAQAAAC10cg0DAABYIwAAAHhtbC5wYXJzZXJzLmV4cGF0LkV4cGF0RXJyb3Iub2Zmc2V0cg4DAAAoamkBAABqagEAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC5FeHBhdEVycm9yLm9mZnNldFgBAAAALXRyDwMAAFgVAAAAeG1sLmRvbS5Ob2RlLm5vZGVOYW1lchADAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLk5vZGUubm9kZU5hbWVYAQAAAC10chEDAABYEQAAAG1lbW9yeXZpZXcuZm9ybWF0chIDAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjbWVtb3J5dmlldy5mb3JtYXRYAQAAAC10chMDAABYJAAAAHVuaXR0ZXN0LlRlc3RSZXN1bHQuZXhwZWN0ZWRGYWlsdXJlc3IUAwAAKGppAQAAamoBAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RSZXN1bHQuZXhwZWN0ZWRGYWlsdXJlc1gBAAAALXRyFQMAAFgeAAAAZW1haWwubWVzc2FnZS5NZXNzYWdlLnByZWFtYmxlchYDAAAoamkBAABqagEAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2UucHJlYW1ibGVYAQAAAC10chcDAABYFwAAAGNzdi5EaWFsZWN0LmRvdWJsZXF1b3RlchgDAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nzdi5odG1sI2Nzdi5EaWFsZWN0LmRvdWJsZXF1b3RlWAEAAAAtdHIZAwAAWCIAAABzdWJwcm9jZXNzLlNUQVJUVVBJTkZPLndTaG93V2luZG93choDAAAoamkBAABqagEAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLlNUQVJUVVBJTkZPLndTaG93V2luZG93WAEAAAAtdHIbAwAAWB0AAAB6aXBmaWxlLlppcEluZm8uY3JlYXRlX3N5c3RlbXIcAwAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5aaXBJbmZvLmNyZWF0ZV9zeXN0ZW1YAQAAAC10ch0DAABYHwAAAHpsaWIuRGVjb21wcmVzcy51bmNvbnN1bWVkX3RhaWxyHgMAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemxpYi5odG1sI3psaWIuRGVjb21wcmVzcy51bmNvbnN1bWVkX3RhaWxYAQAAAC10ch8DAABYHAAAAG9wdHBhcnNlLk9wdGlvbi5UWVBFX0NIRUNLRVJyIAMAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS5PcHRpb24uVFlQRV9DSEVDS0VSWAEAAAAtdHIhAwAAWBYAAABvcHRwYXJzZS5PcHRpb24uYWN0aW9uciIDAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UuT3B0aW9uLmFjdGlvblgBAAAALXRyIwMAAFgYAAAAcmUuTWF0Y2hPYmplY3QubGFzdGluZGV4ciQDAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlLmh0bWwjcmUuTWF0Y2hPYmplY3QubGFzdGluZGV4WAEAAAAtdHIlAwAAWA0AAAB1dWlkLlVVSUQuaW50ciYDAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3V1aWQuaHRtbCN1dWlkLlVVSUQuaW50WAEAAAAtdHInAwAAWB0AAABkYXRldGltZS50aW1lZGVsdGEucmVzb2x1dGlvbnIoAwAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLnRpbWVkZWx0YS5yZXNvbHV0aW9uWAEAAAAtdHIpAwAAWBsAAAB1bml0dGVzdC5UZXN0UmVzdWx0LnNraXBwZWRyKgMAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0UmVzdWx0LnNraXBwZWRYAQAAAC10cisDAABYEgAAAGFzdC5BU1QuY29sX29mZnNldHIsAwAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hc3QuaHRtbCNhc3QuQVNULmNvbF9vZmZzZXRYAQAAAC10ci0DAABYKQAAAHRleHR3cmFwLlRleHRXcmFwcGVyLmZpeF9zZW50ZW5jZV9lbmRpbmdzci4DAAAoamkBAABqagEAAFhZAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RleHR3cmFwLmh0bWwjdGV4dHdyYXAuVGV4dFdyYXBwZXIuZml4X3NlbnRlbmNlX2VuZGluZ3NYAQAAAC10ci8DAABYGwAAAGV4Y2VwdGlvbnMuVW5pY29kZUVycm9yLmVuZHIwAwAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5Vbmljb2RlRXJyb3IuZW5kWAEAAAAtdHIxAwAAWBgAAAByZS5NYXRjaE9iamVjdC5sYXN0Z3JvdXByMgMAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmUuaHRtbCNyZS5NYXRjaE9iamVjdC5sYXN0Z3JvdXBYAQAAAC10cjMDAABYFgAAAGRvY3Rlc3QuRXhhbXBsZS5zb3VyY2VyNAMAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRXhhbXBsZS5zb3VyY2VYAQAAAC10cjUDAABYKgAAAFNvY2tldFNlcnZlci5CYXNlU2VydmVyLnJlcXVlc3RfcXVldWVfc2l6ZXI2AwAAKGppAQAAamoBAABYXgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXRzZXJ2ZXIuaHRtbCNTb2NrZXRTZXJ2ZXIuQmFzZVNlcnZlci5yZXF1ZXN0X3F1ZXVlX3NpemVYAQAAAC10cjcDAABYEwAAAGZpbGVjbXAuZGlyY21wLmxlZnRyOAMAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmlsZWNtcC5odG1sI2ZpbGVjbXAuZGlyY21wLmxlZnRYAQAAAC10cjkDAABYGAAAAGRhdGV0aW1lLmRhdGV0aW1lLnNlY29uZHI6AwAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGV0aW1lLnNlY29uZFgBAAAALXRyOwMAAFgfAAAAU29ja2V0U2VydmVyLkJhc2VTZXJ2ZXIudGltZW91dHI8AwAAKGppAQAAamoBAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXRzZXJ2ZXIuaHRtbCNTb2NrZXRTZXJ2ZXIuQmFzZVNlcnZlci50aW1lb3V0WAEAAAAtdHI9AwAAWBUAAABzY2hlZC5zY2hlZHVsZXIucXVldWVyPgMAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2NoZWQuaHRtbCNzY2hlZC5zY2hlZHVsZXIucXVldWVYAQAAAC10cj8DAABYIQAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50LnRhZ3JAAwAAKGppAQAAamoBAABYXgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC50YWdYAQAAAC10ckEDAABYFAAAAGNtZC5DbWQudXNlX3Jhd2lucHV0ckIDAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NtZC5odG1sI2NtZC5DbWQudXNlX3Jhd2lucHV0WAEAAAAtdHJDAwAAWBkAAABmaWxlY21wLmRpcmNtcC5kaWZmX2ZpbGVzckQDAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZpbGVjbXAuaHRtbCNmaWxlY21wLmRpcmNtcC5kaWZmX2ZpbGVzWAEAAAAtdHJFAwAAWBUAAABvcHRwYXJzZS5PcHRpb24ubmFyZ3NyRgMAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS5PcHRpb24ubmFyZ3NYAQAAAC10ckcDAABYFAAAAGNtZC5DbWQudW5kb2NfaGVhZGVyckgDAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NtZC5odG1sI2NtZC5DbWQudW5kb2NfaGVhZGVyWAEAAAAtdHJJAwAAWBQAAABpby5UZXh0SU9CYXNlLmVycm9yc3JKAwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pby5odG1sI2lvLlRleHRJT0Jhc2UuZXJyb3JzWAEAAAAtdHJLAwAAWBsAAABzcWxpdGUzLkNvbm5lY3Rpb24uaXRlcmR1bXByTAMAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuQ29ubmVjdGlvbi5pdGVyZHVtcFgBAAAALXRyTQMAAFgSAAAAcmVwci5SZXByLm1heGFycmF5ck4DAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlcHIuaHRtbCNyZXByLlJlcHIubWF4YXJyYXlYAQAAAC10ck8DAABYHQAAAG9wdHBhcnNlLk9wdGlvbi5TVE9SRV9BQ1RJT05TclADAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UuT3B0aW9uLlNUT1JFX0FDVElPTlNYAQAAAC10clEDAABYEwAAAHNlbGVjdC5rZXZlbnQudWRhdGFyUgMAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2VsZWN0Lmh0bWwjc2VsZWN0LmtldmVudC51ZGF0YVgBAAAALXRyUwMAAFg4AAAAU2ltcGxlSFRUUFNlcnZlci5TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIuZXh0ZW5zaW9uc19tYXByVAMAAChqaQEAAGpqAQAAWHAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2ltcGxlaHR0cHNlcnZlci5odG1sI1NpbXBsZUhUVFBTZXJ2ZXIuU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyLmV4dGVuc2lvbnNfbWFwWAEAAAAtdHJVAwAAWBkAAABDb29raWUuTW9yc2VsLmNvZGVkX3ZhbHVlclYDAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZS5odG1sI0Nvb2tpZS5Nb3JzZWwuY29kZWRfdmFsdWVYAQAAAC10clcDAABYFQAAAGlvLkJ1ZmZlcmVkSU9CYXNlLnJhd3JYAwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pby5odG1sI2lvLkJ1ZmZlcmVkSU9CYXNlLnJhd1gBAAAALXRyWQMAAFgSAAAAc2hsZXguc2hsZXguc291cmNlcloDAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NobGV4Lmh0bWwjc2hsZXguc2hsZXguc291cmNlWAEAAAAtdHJbAwAAWBEAAAByZXByLlJlcHIubWF4ZGljdHJcAwAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXByLmh0bWwjcmVwci5SZXByLm1heGRpY3RYAQAAAC10cl0DAABYHAAAAGNvb2tpZWxpYi5Db29raWUuY29tbWVudF91cmxyXgMAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llbGliLmh0bWwjY29va2llbGliLkNvb2tpZS5jb21tZW50X3VybFgBAAAALXRyXwMAAFgVAAAAcmUuTWF0Y2hPYmplY3QuZW5kcG9zcmADAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlLmh0bWwjcmUuTWF0Y2hPYmplY3QuZW5kcG9zWAEAAAAtdHJhAwAAWBkAAAB6aXBmaWxlLlppcEluZm8uZmlsZV9zaXplcmIDAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLlppcEluZm8uZmlsZV9zaXplWAEAAAAtdHJjAwAAWCIAAABjb2xsZWN0aW9ucy5zb21lbmFtZWR0dXBsZS5fZmllbGRzcmQDAAAoamkBAABqagEAAFhVAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuc29tZW5hbWVkdHVwbGUuX2ZpZWxkc1gBAAAALXRyZQMAAFgUAAAAeG1sLmRvbS5Db21tZW50LmRhdGFyZgMAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uQ29tbWVudC5kYXRhWAEAAAAtdHJnAwAAWBYAAABzaGxleC5zaGxleC5jb21tZW50ZXJzcmgDAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NobGV4Lmh0bWwjc2hsZXguc2hsZXguY29tbWVudGVyc1gBAAAALXRyaQMAAFgnAAAAeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLmJ1ZmZlcl90ZXh0cmoDAAAoamkBAABqagEAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuYnVmZmVyX3RleHRYAQAAAC10cmsDAABYHgAAAHJmYzgyMi5BZGRyZXNzTGlzdC5hZGRyZXNzbGlzdHJsAwAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZmM4MjIuaHRtbCNyZmM4MjIuQWRkcmVzc0xpc3QuYWRkcmVzc2xpc3RYAQAAAC10cm0DAABYGQAAAHVuaXR0ZXN0LlRlc3RDYXNlLm1heERpZmZybgMAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5tYXhEaWZmWAEAAAAtdHJvAwAAWBMAAABzb2NrZXQuc29ja2V0LnByb3RvcnADAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5zb2NrZXQucHJvdG9YAQAAAC10cnEDAABYEwAAAHJlcHIuUmVwci5tYXhzdHJpbmdycgMAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVwci5odG1sI3JlcHIuUmVwci5tYXhzdHJpbmdYAQAAAC10cnMDAABYEgAAAHNobGV4LnNobGV4LnF1b3Rlc3J0AwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaGxleC5odG1sI3NobGV4LnNobGV4LnF1b3Rlc1gBAAAALXRydQMAAFgYAAAAY3R5cGVzLl9GdW5jUHRyLmFyZ3R5cGVzcnYDAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5fRnVuY1B0ci5hcmd0eXBlc1gBAAAALXRydwMAAFgQAAAAcmVwci5SZXByLm1heHNldHJ4AwAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXByLmh0bWwjcmVwci5SZXByLm1heHNldFgBAAAALXRyeQMAAFgxAAAAY29va2llbGliLkRlZmF1bHRDb29raWVQb2xpY3kucmZjMjEwOV9hc19uZXRzY2FwZXJ6AwAAKGppAQAAamoBAABYYgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuRGVmYXVsdENvb2tpZVBvbGljeS5yZmMyMTA5X2FzX25ldHNjYXBlWAEAAAAtdHJ7AwAAWBIAAABvYmplY3QuX19tZXRob2RzX19yfAMAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNvYmplY3QuX19tZXRob2RzX19YAQAAAC10cn0DAABYIQAAAG1pbWV0eXBlcy5NaW1lVHlwZXMuZW5jb2RpbmdzX21hcHJ+AwAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW1ldHlwZXMuaHRtbCNtaW1ldHlwZXMuTWltZVR5cGVzLmVuY29kaW5nc19tYXBYAQAAAC10cn8DAABYGAAAAGNzdi5jc3ZyZWFkZXIuZmllbGRuYW1lc3KAAwAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jc3YuaHRtbCNjc3YuY3N2cmVhZGVyLmZpZWxkbmFtZXNYAQAAAC10coEDAABYHQAAAHppcGZpbGUuWmlwSW5mby5oZWFkZXJfb2Zmc2V0coIDAAAoamkBAABqagEAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLlppcEluZm8uaGVhZGVyX29mZnNldFgBAAAALXRygwMAAFgXAAAAeG1sLmRvbS5Ob2RlLmF0dHJpYnV0ZXNyhAMAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uTm9kZS5hdHRyaWJ1dGVzWAEAAAAtdHKFAwAAWCoAAAB3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLm9yaWdpbl9zZXJ2ZXJyhgMAAChqaQEAAGpqAQAAWFkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd3NnaXJlZi5odG1sI3dzZ2lyZWYuaGFuZGxlcnMuQmFzZUhhbmRsZXIub3JpZ2luX3NlcnZlclgBAAAALXRyhwMAAFgZAAAAemlwZmlsZS5aaXBJbmZvLmZsYWdfYml0c3KIAwAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5aaXBJbmZvLmZsYWdfYml0c1gBAAAALXRyiQMAAFgdAAAAVXNlclN0cmluZy5NdXRhYmxlU3RyaW5nLmRhdGFyigMAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXNlcmRpY3QuaHRtbCNVc2VyU3RyaW5nLk11dGFibGVTdHJpbmcuZGF0YVgBAAAALXRyiwMAAFgWAAAAaW8uVGV4dElPQmFzZS5lbmNvZGluZ3KMAwAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pby5odG1sI2lvLlRleHRJT0Jhc2UuZW5jb2RpbmdYAQAAAC10co0DAABYIQAAAG9zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2UubmFtZXKOAwAAKGppAQAAamoBAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vc3NhdWRpb2Rldi5odG1sI29zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2UubmFtZVgBAAAALXRyjwMAAFgzAAAAQ0dJSFRUUFNlcnZlci5DR0lIVFRQUmVxdWVzdEhhbmRsZXIuY2dpX2RpcmVjdG9yaWVzcpADAAAoamkBAABqagEAAFhoAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NnaWh0dHBzZXJ2ZXIuaHRtbCNDR0lIVFRQU2VydmVyLkNHSUhUVFBSZXF1ZXN0SGFuZGxlci5jZ2lfZGlyZWN0b3JpZXNYAQAAAC10cpEDAABYNwAAAFNpbXBsZVhNTFJQQ1NlcnZlci5TaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlci5ycGNfcGF0aHNykgMAAChqaQEAAGpqAQAAWHEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2ltcGxleG1scnBjc2VydmVyLmh0bWwjU2ltcGxlWE1MUlBDU2VydmVyLlNpbXBsZVhNTFJQQ1JlcXVlc3RIYW5kbGVyLnJwY19wYXRoc1gBAAAALXRykwMAAFgUAAAAaW8uVGV4dElPQmFzZS5idWZmZXJylAMAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW8uaHRtbCNpby5UZXh0SU9CYXNlLmJ1ZmZlclgBAAAALXRylQMAAFgfAAAAU2Nyb2xsZWRUZXh0LlNjcm9sbGVkVGV4dC5mcmFtZXKWAwAAKGppAQAAamoBAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zY3JvbGxlZHRleHQuaHRtbCNTY3JvbGxlZFRleHQuU2Nyb2xsZWRUZXh0LmZyYW1lWAEAAAAtdHKXAwAAWCMAAABlbWFpbC5jaGFyc2V0LkNoYXJzZXQuYm9keV9lbmNvZGluZ3KYAwAAKGppAQAAamoBAABYWAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5jaGFyc2V0Lmh0bWwjZW1haWwuY2hhcnNldC5DaGFyc2V0LmJvZHlfZW5jb2RpbmdYAQAAAC10cpkDAABYGAAAAHhtbC5kb20uTm9kZS5uZXh0U2libGluZ3KaAwAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Ob2RlLm5leHRTaWJsaW5nWAEAAAAtdHKbAwAAWBkAAABodG1sbGliLkhUTUxQYXJzZXIubm9maWxscpwDAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0bWxsaWIuaHRtbCNodG1sbGliLkhUTUxQYXJzZXIubm9maWxsWAEAAAAtdHKdAwAAWCwAAABtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuQmFzZU1hbmFnZXIuYWRkcmVzc3KeAwAAKGppAQAAamoBAABYYwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuQmFzZU1hbmFnZXIuYWRkcmVzc1gBAAAALXRynwMAAFgrAAAAbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24uTGlzdGVuZXIuYWRkcmVzc3KgAwAAKGppAQAAamoBAABYYgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi5MaXN0ZW5lci5hZGRyZXNzWAEAAAAtdHKhAwAAWBYAAAByZS5SZWdleE9iamVjdC5wYXR0ZXJucqIDAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlLmh0bWwjcmUuUmVnZXhPYmplY3QucGF0dGVyblgBAAAALXRyowMAAFgdAAAAZXhjZXB0aW9ucy5CYXNlRXhjZXB0aW9uLmFyZ3NypAMAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI2V4Y2VwdGlvbnMuQmFzZUV4Y2VwdGlvbi5hcmdzWAEAAAAtdHKlAwAAWBgAAABkYXRldGltZS5kYXRldGltZS50emluZm9ypgMAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS50emluZm9YAQAAAC10cqcDAABYJQAAAGlvLkJsb2NraW5nSU9FcnJvci5jaGFyYWN0ZXJzX3dyaXR0ZW5yqAMAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW8uaHRtbCNpby5CbG9ja2luZ0lPRXJyb3IuY2hhcmFjdGVyc193cml0dGVuWAEAAAAtdHKpAwAAWBcAAAByZmM4MjIuTWVzc2FnZS51bml4ZnJvbXKqAwAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZmM4MjIuaHRtbCNyZmM4MjIuTWVzc2FnZS51bml4ZnJvbVgBAAAALXRyqwMAAFgYAAAAc3FsaXRlMy5DdXJzb3IubGFzdHJvd2lkcqwDAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLkN1cnNvci5sYXN0cm93aWRYAQAAAC10cq0DAABYKgAAAHdzZ2lyZWYuaGFuZGxlcnMuQmFzZUhhbmRsZXIud3NnaV9ydW5fb25jZXKuAwAAKGppAQAAamoBAABYWQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci53c2dpX3J1bl9vbmNlWAEAAAAtdHKvAwAAWCUAAAB4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuRXJyb3JDb2RlcrADAAAoamkBAABqagEAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuRXJyb3JDb2RlWAEAAAAtdHKxAwAAWC4AAABjb29raWVsaWIuRGVmYXVsdENvb2tpZVBvbGljeS5zdHJpY3RfbnNfZG9tYWlucrIDAAAoamkBAABqagEAAFhfAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5EZWZhdWx0Q29va2llUG9saWN5LnN0cmljdF9uc19kb21haW5YAQAAAC10crMDAABYLQAAAEJhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuY29tbWFuZHK0AwAAKGppAQAAamoBAABYYwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXNlaHR0cHNlcnZlci5odG1sI0Jhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuY29tbWFuZFgBAAAALXRytQMAAFgNAAAAZmlsZS5uZXdsaW5lc3K2AwAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2ZpbGUubmV3bGluZXNYAQAAAC10crcDAABYFgAAAHhtbC5kb20uTm9kZS5sYXN0Q2hpbGRyuAMAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uTm9kZS5sYXN0Q2hpbGRYAQAAAC10crkDAABYEgAAAGNtZC5DbWQuZG9jX2hlYWRlcnK6AwAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jbWQuaHRtbCNjbWQuQ21kLmRvY19oZWFkZXJYAQAAAC10crsDAABYFQAAAHRocmVhZGluZy5UaHJlYWQubmFtZXK8AwAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuVGhyZWFkLm5hbWVYAQAAAC10cr0DAABYLQAAAEJhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuaGVhZGVyc3K+AwAAKGppAQAAamoBAABYYwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXNlaHR0cHNlcnZlci5odG1sI0Jhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuaGVhZGVyc1gBAAAALXRyvwMAAFgYAAAAY29va2llbGliLkNvb2tpZS5kaXNjYXJkcsADAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5Db29raWUuZGlzY2FyZFgBAAAALXRywQMAAFgVAAAAZGF0ZXRpbWUuZGF0ZXRpbWUubWF4csIDAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZXRpbWUubWF4WAEAAAAtdHLDAwAAWB4AAABpbWFwbGliLklNQVA0LlBST1RPQ09MX1ZFUlNJT05yxAMAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQuUFJPVE9DT0xfVkVSU0lPTlgBAAAALXRyxQMAAFglAAAAdGV4dHdyYXAuVGV4dFdyYXBwZXIuYnJlYWtfb25faHlwaGVuc3LGAwAAKGppAQAAamoBAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZXh0d3JhcC5odG1sI3RleHR3cmFwLlRleHRXcmFwcGVyLmJyZWFrX29uX2h5cGhlbnNYAQAAAC10cscDAABYFgAAAHB5Y2xici5GdW5jdGlvbi5tb2R1bGVyyAMAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHljbGJyLmh0bWwjcHljbGJyLkZ1bmN0aW9uLm1vZHVsZVgBAAAALXRyyQMAAFgTAAAAQ29va2llLk1vcnNlbC52YWx1ZXLKAwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWUuaHRtbCNDb29raWUuTW9yc2VsLnZhbHVlWAEAAAAtdHLLAwAAWCEAAAB4bWwucGFyc2Vycy5leHBhdC5FeHBhdEVycm9yLmNvZGVyzAMAAChqaQEAAGpqAQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LkV4cGF0RXJyb3IuY29kZVgBAAAALXRyzQMAAFgRAAAAcmZjODIyLk1lc3NhZ2UuZnByzgMAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmZjODIyLmh0bWwjcmZjODIyLk1lc3NhZ2UuZnBYAQAAAC10cs8DAABYGQAAAGRvY3Rlc3QuRG9jVGVzdC5kb2NzdHJpbmdy0AMAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRG9jVGVzdC5kb2NzdHJpbmdYAQAAAC10ctEDAABYFQAAAGNvb2tpZWxpYi5Db29raWUubmFtZXLSAwAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuQ29va2llLm5hbWVYAQAAAC10ctMDAABYFwAAAHhtbC5kb20uTm9kZS5jaGlsZE5vZGVzctQDAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLk5vZGUuY2hpbGROb2Rlc1gBAAAALXRy1QMAAFgcAAAAc2hsZXguc2hsZXgud2hpdGVzcGFjZV9zcGxpdHLWAwAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaGxleC5odG1sI3NobGV4LnNobGV4LndoaXRlc3BhY2Vfc3BsaXRYAQAAAC10ctcDAABYFAAAAHNlbGVjdC5rZXZlbnQuZmZsYWdzctgDAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NlbGVjdC5odG1sI3NlbGVjdC5rZXZlbnQuZmZsYWdzWAEAAAAtdHLZAwAAWBIAAABkYXRldGltZS5kYXRlLnllYXJy2gMAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRlLnllYXJYAQAAAC10ctsDAABYFAAAAG9wdHBhcnNlLk9wdGlvbi5oZWxwctwDAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UuT3B0aW9uLmhlbHBYAQAAAC10ct0DAABYEgAAAHJlLk1hdGNoT2JqZWN0LnBvc3LeAwAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sI3JlLk1hdGNoT2JqZWN0LnBvc1gBAAAALXRy3wMAAFgiAAAAZW1haWwuY2hhcnNldC5DaGFyc2V0Lm91dHB1dF9jb2RlY3LgAwAAKGppAQAAamoBAABYVwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5jaGFyc2V0Lmh0bWwjZW1haWwuY2hhcnNldC5DaGFyc2V0Lm91dHB1dF9jb2RlY1gBAAAALXRy4QMAAFgVAAAAeG1scnBjbGliLkJpbmFyeS5kYXRhcuIDAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbHJwY2xpYi5odG1sI3htbHJwY2xpYi5CaW5hcnkuZGF0YVgBAAAALXRy4wMAAFggAAAAc3VicHJvY2Vzcy5TVEFSVFVQSU5GTy5oU3RkRXJyb3Jy5AMAAChqaQEAAGpqAQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI3N1YnByb2Nlc3MuU1RBUlRVUElORk8uaFN0ZEVycm9yWAEAAAAtdHLlAwAAWBkAAAB4bWxycGNsaWIuRmF1bHQuZmF1bHRDb2RlcuYDAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbHJwY2xpYi5odG1sI3htbHJwY2xpYi5GYXVsdC5mYXVsdENvZGVYAQAAAC10cucDAABYGAAAAGxvZ2dpbmcuTG9nZ2VyLnByb3BhZ2F0ZXLoAwAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5Mb2dnZXIucHJvcGFnYXRlWAEAAAAtdHLpAwAAWBwAAABjc3YuRGlhbGVjdC5za2lwaW5pdGlhbHNwYWNlcuoDAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nzdi5odG1sI2Nzdi5EaWFsZWN0LnNraXBpbml0aWFsc3BhY2VYAQAAAC10cusDAABYHwAAAHNxbGl0ZTMuQ29ubmVjdGlvbi50ZXh0X2ZhY3Rvcnly7AMAAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuQ29ubmVjdGlvbi50ZXh0X2ZhY3RvcnlYAQAAAC10cu0DAABYFgAAAGRhdGV0aW1lLnRpbWVkZWx0YS5taW5y7gMAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS50aW1lZGVsdGEubWluWAEAAAAtdHLvAwAAWBoAAABmb3JtYXR0ZXIuZm9ybWF0dGVyLndyaXRlcnLwAwAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIuZm9ybWF0dGVyLndyaXRlclgBAAAALXRy8QMAAFgUAAAAdGFyZmlsZS5UYXJJbmZvLnNpemVy8gMAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuVGFySW5mby5zaXplWAEAAAAtdHLzAwAAWBAAAABpby5JT0Jhc2UuY2xvc2VkcvQDAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uSU9CYXNlLmNsb3NlZFgBAAAALXRy9QMAAFgeAAAAZG9jdGVzdC5Eb2NUZXN0RmFpbHVyZS5leGFtcGxlcvYDAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LkRvY1Rlc3RGYWlsdXJlLmV4YW1wbGVYAQAAAC10cvcDAABYHgAAAHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLmVycm1zZ3L4AwAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWxycGNsaWIuaHRtbCN4bWxycGNsaWIuUHJvdG9jb2xFcnJvci5lcnJtc2dYAQAAAC10cvkDAABYFgAAAHVybGxpYjIuSFRUUEVycm9yLmNvZGVy+gMAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuSFRUUEVycm9yLmNvZGVYAQAAAC10cvsDAABYKwAAAGNvb2tpZWxpYi5EZWZhdWx0Q29va2llUG9saWN5LkRvbWFpbkxpYmVyYWxy/AMAAChqaQEAAGpqAQAAWFwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llbGliLmh0bWwjY29va2llbGliLkRlZmF1bHRDb29raWVQb2xpY3kuRG9tYWluTGliZXJhbFgBAAAALXRy/QMAAFgRAAAAc2hsZXguc2hsZXgudG9rZW5y/gMAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2hsZXguaHRtbCNzaGxleC5zaGxleC50b2tlblgBAAAALXRy/wMAAFgUAAAAc3NsLlNTTEVycm9yLmxpYnJhcnlyAAQAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTEVycm9yLmxpYnJhcnlYAQAAAC10cgEEAABYHQAAAG1pbWV0eXBlcy5NaW1lVHlwZXMudHlwZXNfbWFwcgIEAAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbWV0eXBlcy5odG1sI21pbWV0eXBlcy5NaW1lVHlwZXMudHlwZXNfbWFwWAEAAAAtdHIDBAAAWA0AAAB1dWlkLlVVSUQuaGV4cgQEAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3V1aWQuaHRtbCN1dWlkLlVVSUQuaGV4WAEAAAAtdHIFBAAAWBUAAAB4bWwuZG9tLk5vZGUubm9kZVR5cGVyBgQAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uTm9kZS5ub2RlVHlwZVgBAAAALXRyBwQAAFgnAAAAeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLmJ1ZmZlcl9zaXplcggEAAAoamkBAABqagEAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuYnVmZmVyX3NpemVYAQAAAC10cgkEAABYEgAAAHJlcHIuUmVwci5tYXhkZXF1ZXIKBAAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXByLmh0bWwjcmVwci5SZXByLm1heGRlcXVlWAEAAAAtdHILBAAAWCIAAABkaXN0dXRpbHMuY21kLkNvbW1hbmQuc3ViX2NvbW1hbmRzcgwEAAAoamkBAABqagEAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNtZC5Db21tYW5kLnN1Yl9jb21tYW5kc1gBAAAALXRyDQQAAFgTAAAAY21kLkNtZC5taXNjX2hlYWRlcnIOBAAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jbWQuaHRtbCNjbWQuQ21kLm1pc2NfaGVhZGVyWAEAAAAtdHIPBAAAWCoAAABjb29raWVsaWIuRGVmYXVsdENvb2tpZVBvbGljeS5Eb21haW5TdHJpY3RyEAQAAChqaQEAAGpqAQAAWFsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llbGliLmh0bWwjY29va2llbGliLkRlZmF1bHRDb29raWVQb2xpY3kuRG9tYWluU3RyaWN0WAEAAAAtdHIRBAAAWBcAAAB4bWwuZG9tLkVsZW1lbnQudGFnTmFtZXISBAAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5FbGVtZW50LnRhZ05hbWVYAQAAAC10chMEAABYIwAAAHRleHR3cmFwLlRleHRXcmFwcGVyLmluaXRpYWxfaW5kZW50chQEAAAoamkBAABqagEAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RleHR3cmFwLmh0bWwjdGV4dHdyYXAuVGV4dFdyYXBwZXIuaW5pdGlhbF9pbmRlbnRYAQAAAC10chUEAABYIQAAAGNvb2tpZWxpYi5Db29raWUuZG9tYWluX3NwZWNpZmllZHIWBAAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuQ29va2llLmRvbWFpbl9zcGVjaWZpZWRYAQAAAC10chcEAABYHQAAAGV4Y2VwdGlvbnMuVW5pY29kZUVycm9yLnN0YXJ0chgEAAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNleGNlcHRpb25zLlVuaWNvZGVFcnJvci5zdGFydFgBAAAALXRyGQQAAFgrAAAAQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5yZmlsZXIaBAAAKGppAQAAamoBAABYYQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXNlaHR0cHNlcnZlci5odG1sI0Jhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIucmZpbGVYAQAAAC10chsEAABYHAAAAGRhdGV0aW1lLmRhdGV0aW1lLnJlc29sdXRpb25yHAQAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS5yZXNvbHV0aW9uWAEAAAAtdHIdBAAAWB4AAABleGNlcHRpb25zLlVuaWNvZGVFcnJvci5yZWFzb25yHgQAAChqaQEAAGpqAQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI2V4Y2VwdGlvbnMuVW5pY29kZUVycm9yLnJlYXNvblgBAAAALXRyHwQAAFgTAAAAcHljbGJyLkNsYXNzLmxpbmVub3IgBAAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWNsYnIuaHRtbCNweWNsYnIuQ2xhc3MubGluZW5vWAEAAAAtdHIhBAAAWBgAAAByZXhlYy5SRXhlYy5va19zeXNfbmFtZXNyIgQAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmV4ZWMuaHRtbCNyZXhlYy5SRXhlYy5va19zeXNfbmFtZXNYAQAAAC10ciMEAABYEgAAAHN0cnVjdC5TdHJ1Y3Quc2l6ZXIkBAAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJ1Y3QuaHRtbCNzdHJ1Y3QuU3RydWN0LnNpemVYAQAAAC10ciUEAABYEgAAAHNvY2tldC5zb2NrZXQudHlwZXImBAAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuc29ja2V0LnR5cGVYAQAAAC10cicEAABYEwAAAHhtbC5kb20uQXR0ci5wcmVmaXhyKAQAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uQXR0ci5wcmVmaXhYAQAAAC10cikEAABYFgAAAGN0eXBlcy5fUG9pbnRlci5fdHlwZV9yKgQAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLl9Qb2ludGVyLl90eXBlX1gBAAAALXRyKwQAAFgxAAAAQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5zeXNfdmVyc2lvbnIsBAAAKGppAQAAamoBAABYZwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXNlaHR0cHNlcnZlci5odG1sI0Jhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuc3lzX3ZlcnNpb25YAQAAAC10ci0EAABYEwAAAHRhcmZpbGUuVGFySW5mby5naWRyLgQAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuVGFySW5mby5naWRYAQAAAC10ci8EAABYFwAAAHNzbC5TU0xDb250ZXh0LnByb3RvY29scjAEAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xDb250ZXh0LnByb3RvY29sWAEAAAAtdHIxBAAAWBUAAABvcHRwYXJzZS5PcHRpb24uY29uc3RyMgQAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS5PcHRpb24uY29uc3RYAQAAAC10cjMEAABYPgAAAFNpbXBsZVhNTFJQQ1NlcnZlci5TaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlci5lbmNvZGVfdGhyZXNob2xkcjQEAAAoamkBAABqagEAAFh4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NpbXBsZXhtbHJwY3NlcnZlci5odG1sI1NpbXBsZVhNTFJQQ1NlcnZlci5TaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlci5lbmNvZGVfdGhyZXNob2xkWAEAAAAtdHI1BAAAWBEAAABkYXRldGltZS50aW1lLm1pbnI2BAAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLnRpbWUubWluWAEAAAAtdHI3BAAAWCQAAABkb2N0ZXN0LlVuZXhwZWN0ZWRFeGNlcHRpb24uZXhjX2luZm9yOAQAAChqaQEAAGpqAQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuVW5leHBlY3RlZEV4Y2VwdGlvbi5leGNfaW5mb1gBAAAALXRyOQQAAFgXAAAAeG1sLmRvbS5Ob2RlTGlzdC5sZW5ndGhyOgQAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uTm9kZUxpc3QubGVuZ3RoWAEAAAAtdHI7BAAAWBAAAABjbWQuQ21kLmNtZHF1ZXVlcjwEAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NtZC5odG1sI2NtZC5DbWQuY21kcXVldWVYAQAAAC10cj0EAABYDgAAAGFzdC5BU1QubGluZW5vcj4EAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzdC5odG1sI2FzdC5BU1QubGluZW5vWAEAAAAtdHI/BAAAWBYAAAB6aXBmaWxlLlppcEluZm8udm9sdW1lckAEAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLlppcEluZm8udm9sdW1lWAEAAAAtdHJBBAAAWC0AAAB4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuRXJyb3JDb2x1bW5OdW1iZXJyQgQAAChqaQEAAGpqAQAAWFwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5FcnJvckNvbHVtbk51bWJlclgBAAAALXRyQwQAAFgWAAAAcmZjODIyLk1lc3NhZ2UuaGVhZGVyc3JEBAAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZmM4MjIuaHRtbCNyZmM4MjIuTWVzc2FnZS5oZWFkZXJzWAEAAAAtdHJFBAAAWBUAAABjdHlwZXMuQXJyYXkuX2xlbmd0aF9yRgQAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLkFycmF5Ll9sZW5ndGhfWAEAAAAtdHJHBAAAWCwAAAB3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLnNlcnZlcl9zb2Z0d2FyZXJIBAAAKGppAQAAamoBAABYWwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5zZXJ2ZXJfc29mdHdhcmVYAQAAAC10ckkEAABYFAAAAHB5Y2xici5GdW5jdGlvbi5uYW1lckoEAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5Y2xici5odG1sI3B5Y2xici5GdW5jdGlvbi5uYW1lWAEAAAAtdHJLBAAAWBUAAAByZS5SZWdleE9iamVjdC5ncm91cHNyTAQAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmUuaHRtbCNyZS5SZWdleE9iamVjdC5ncm91cHNYAQAAAC10ck0EAABYMQAAAG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLkxpc3RlbmVyLmxhc3RfYWNjZXB0ZWRyTgQAAChqaQEAAGpqAQAAWGgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24uTGlzdGVuZXIubGFzdF9hY2NlcHRlZFgBAAAALXRyTwQAAFghAAAAbW9kdWxlZmluZGVyLk1vZHVsZUZpbmRlci5tb2R1bGVzclAEAAAoamkBAABqagEAAFhVAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21vZHVsZWZpbmRlci5odG1sI21vZHVsZWZpbmRlci5Nb2R1bGVGaW5kZXIubW9kdWxlc1gBAAAALXRyUQQAAFgcAAAAdW5pdHRlc3QuVGVzdFJlc3VsdC50ZXN0c1J1bnJSBAAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RSZXN1bHQudGVzdHNSdW5YAQAAAC10clMEAABYJAAAAG9wdHBhcnNlLk9wdGlvbi5BTFdBWVNfVFlQRURfQUNUSU9OU3JUBAAAKGppAQAAamoBAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLk9wdGlvbi5BTFdBWVNfVFlQRURfQUNUSU9OU1gBAAAALXRyVQQAAFgTAAAAc3NsLlNTTEVycm9yLnJlYXNvbnJWBAAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMRXJyb3IucmVhc29uWAEAAAAtdHJXBAAAWCsAAABTb2NrZXRTZXJ2ZXIuQmFzZVNlcnZlci5hbGxvd19yZXVzZV9hZGRyZXNzclgEAAAoamkBAABqagEAAFhfAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI1NvY2tldFNlcnZlci5CYXNlU2VydmVyLmFsbG93X3JldXNlX2FkZHJlc3NYAQAAAC10clkEAABYFwAAAHBvcGVuMi5Qb3BlbjMuZnJvbWNoaWxkcloEAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BvcGVuMi5odG1sI3BvcGVuMi5Qb3BlbjMuZnJvbWNoaWxkWAEAAAAtdHJbBAAAWBsAAAB4bWxycGNsaWIuUHJvdG9jb2xFcnJvci51cmxyXAQAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1scnBjbGliLmh0bWwjeG1scnBjbGliLlByb3RvY29sRXJyb3IudXJsWAEAAAAtdHJdBAAAWBcAAAB6aXBmaWxlLlppcEZpbGUuY29tbWVudHJeBAAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5aaXBGaWxlLmNvbW1lbnRYAQAAAC10cl8EAABYGwAAAHhtbHJwY2xpYi5GYXVsdC5mYXVsdFN0cmluZ3JgBAAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWxycGNsaWIuaHRtbCN4bWxycGNsaWIuRmF1bHQuZmF1bHRTdHJpbmdYAQAAAC10cmEEAABYEgAAAG9iamVjdC5fX21lbWJlcnNfX3JiBAAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI29iamVjdC5fX21lbWJlcnNfX1gBAAAALXRyYwQAAFgVAAAAY29va2llbGliLkNvb2tpZS5wYXRocmQEAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5Db29raWUucGF0aFgBAAAALXRyZQQAAFgfAAAAeG1scnBjbGliLlByb3RvY29sRXJyb3IuaGVhZGVyc3JmBAAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWxycGNsaWIuaHRtbCN4bWxycGNsaWIuUHJvdG9jb2xFcnJvci5oZWFkZXJzWAEAAAAtdHJnBAAAWBkAAABjdHlwZXMuU3RydWN0dXJlLl9maWVsZHNfcmgEAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5TdHJ1Y3R1cmUuX2ZpZWxkc19YAQAAAC10cmkEAABYGAAAAHVybGxpYi5VUkxvcGVuZXIudmVyc2lvbnJqBAAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIuaHRtbCN1cmxsaWIuVVJMb3BlbmVyLnZlcnNpb25YAQAAAC10cmsEAABYGQAAAHhtbC5kb20uTm9kZS5uYW1lc3BhY2VVUklybAQAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uTm9kZS5uYW1lc3BhY2VVUklYAQAAAC10cm0EAABYGAAAAGRhdGV0aW1lLmRhdGUucmVzb2x1dGlvbnJuBAAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGUucmVzb2x1dGlvblgBAAAALXRybwQAAFgSAAAAcHljbGJyLkNsYXNzLnN1cGVycnAEAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5Y2xici5odG1sI3B5Y2xici5DbGFzcy5zdXBlclgBAAAALXRycQQAAFgWAAAAY3N2LkRpYWxlY3QuZXNjYXBlY2hhcnJyBAAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jc3YuaHRtbCNjc3YuRGlhbGVjdC5lc2NhcGVjaGFyWAEAAAAtdHJzBAAAWBQAAAByZS5SZWdleE9iamVjdC5mbGFnc3J0BAAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sI3JlLlJlZ2V4T2JqZWN0LmZsYWdzWAEAAAAtdHJ1BAAAWBEAAABkYXRldGltZS5kYXRlLmRheXJ2BAAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGUuZGF5WAEAAAAtdHJ3BAAAWBYAAAB4bWwuZG9tLk5vZGUubG9jYWxOYW1lcngEAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLk5vZGUubG9jYWxOYW1lWAEAAAAtdHJ5BAAAWBgAAABkYXRldGltZS5kYXRldGltZS5taW51dGVyegQAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS5taW51dGVYAQAAAC10cnsEAABYEgAAAGNtZC5DbWQuaWRlbnRjaGFyc3J8BAAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jbWQuaHRtbCNjbWQuQ21kLmlkZW50Y2hhcnNYAQAAAC10cn0EAABYGQAAAHJleGVjLlJFeGVjLm9rX2ZpbGVfdHlwZXNyfgQAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmV4ZWMuaHRtbCNyZXhlYy5SRXhlYy5va19maWxlX3R5cGVzWAEAAAAtdHJ/BAAAWCUAAABlbWFpbC5jaGFyc2V0LkNoYXJzZXQuaGVhZGVyX2VuY29kaW5ncoAEAAAoamkBAABqagEAAFhaAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLmNoYXJzZXQuaHRtbCNlbWFpbC5jaGFyc2V0LkNoYXJzZXQuaGVhZGVyX2VuY29kaW5nWAEAAAAtdHKBBAAAWB0AAAB4bWwuZG9tLkRvY3VtZW50VHlwZS5wdWJsaWNJZHKCBAAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Eb2N1bWVudFR5cGUucHVibGljSWRYAQAAAC10coMEAABYHgAAAHVuaXR0ZXN0LlRlc3RSZXN1bHQuc2hvdWxkU3RvcHKEBAAAKGppAQAAamoBAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RSZXN1bHQuc2hvdWxkU3RvcFgBAAAALXRyhQQAAFgUAAAAbnVtYmVycy5Db21wbGV4LnJlYWxyhgQAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbnVtYmVycy5odG1sI251bWJlcnMuQ29tcGxleC5yZWFsWAEAAAAtdHKHBAAAWB4AAAB1bml0dGVzdC5UZXN0TG9hZGVyLnN1aXRlQ2xhc3NyiAQAAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0TG9hZGVyLnN1aXRlQ2xhc3NYAQAAAC10cokEAABYLAAAAEJhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuc2VydmVycooEAAAoamkBAABqagEAAFhiAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Jhc2VodHRwc2VydmVyLmh0bWwjQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5zZXJ2ZXJYAQAAAC10cosEAABYGQAAAGRhdGV0aW1lLnRpbWUubWljcm9zZWNvbmRyjAQAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS50aW1lLm1pY3Jvc2Vjb25kWAEAAAAtdHKNBAAAWBYAAABkYXRldGltZS5kYXRldGltZS5ob3Vyco4EAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZXRpbWUuaG91clgBAAAALXRyjwQAAFgYAAAAemlwZmlsZS5aaXBJbmZvLmZpbGVuYW1lcpAEAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLlppcEluZm8uZmlsZW5hbWVYAQAAAC10cpEEAABYFwAAAHVybGxpYjIuVVJMRXJyb3IucmVhc29ucpIEAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLlVSTEVycm9yLnJlYXNvblgBAAAALXRykwQAAFgzAAAAY29va2llbGliLkRlZmF1bHRDb29raWVQb2xpY3kuRG9tYWluU3RyaWN0Tm9uRG9tYWlucpQEAAAoamkBAABqagEAAFhkAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5EZWZhdWx0Q29va2llUG9saWN5LkRvbWFpblN0cmljdE5vbkRvbWFpblgBAAAALXRylQQAAFgeAAAAZXhjZXB0aW9ucy5Vbmljb2RlRXJyb3Iub2JqZWN0cpYEAAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNleGNlcHRpb25zLlVuaWNvZGVFcnJvci5vYmplY3RYAQAAAC10cpcEAABYOAAAAFNpbXBsZUhUVFBTZXJ2ZXIuU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyLnNlcnZlcl92ZXJzaW9ucpgEAAAoamkBAABqagEAAFhwAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NpbXBsZWh0dHBzZXJ2ZXIuaHRtbCNTaW1wbGVIVFRQU2VydmVyLlNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlci5zZXJ2ZXJfdmVyc2lvblgBAAAALXRymQQAAFgWAAAAcHljbGJyLkZ1bmN0aW9uLmxpbmVub3KaBAAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWNsYnIuaHRtbCNweWNsYnIuRnVuY3Rpb24ubGluZW5vWAEAAAAtdHKbBAAAWBUAAABjb29raWVsaWIuQ29va2llLnBvcnRynAQAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llbGliLmh0bWwjY29va2llbGliLkNvb2tpZS5wb3J0WAEAAAAtdHKdBAAAWBcAAABvcHRwYXJzZS5PcHRpb24ubWV0YXZhcnKeBAAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLk9wdGlvbi5tZXRhdmFyWAEAAAAtdHKfBAAAWB0AAAB1bml0dGVzdC5UZXN0Q2FzZS5sb25nTWVzc2FnZXKgBAAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmxvbmdNZXNzYWdlWAEAAAAtdHKhBAAAWBUAAABwb3BlbjIuUG9wZW4zLnRvY2hpbGRyogQAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcG9wZW4yLmh0bWwjcG9wZW4yLlBvcGVuMy50b2NoaWxkWAEAAAAtdHKjBAAAWBsAAABmaWxlY21wLmRpcmNtcC5jb21tb25fZmlsZXNypAQAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmlsZWNtcC5odG1sI2ZpbGVjbXAuZGlyY21wLmNvbW1vbl9maWxlc1gBAAAALXRypQQAAFgWAAAAcmVwci5SZXByLm1heGZyb3plbnNldHKmBAAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXByLmh0bWwjcmVwci5SZXByLm1heGZyb3plbnNldFgBAAAALXRypwQAAFgTAAAAY3N2LkRpYWxlY3QucXVvdGluZ3KoBAAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jc3YuaHRtbCNjc3YuRGlhbGVjdC5xdW90aW5nWAEAAAAtdHKpBAAAWBIAAABuZXRyYy5uZXRyYy5tYWNyb3NyqgQAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbmV0cmMuaHRtbCNuZXRyYy5uZXRyYy5tYWNyb3NYAQAAAC10cqsEAABYGgAAAGZ1bmN0b29scy5wYXJ0aWFsLmtleXdvcmRzcqwEAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0b29scy5odG1sI2Z1bmN0b29scy5wYXJ0aWFsLmtleXdvcmRzWAEAAAAtdHKtBAAAWDQAAABjb29raWVsaWIuRGVmYXVsdENvb2tpZVBvbGljeS5zdHJpY3RfbnNfdW52ZXJpZmlhYmxlcq4EAAAoamkBAABqagEAAFhlAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5EZWZhdWx0Q29va2llUG9saWN5LnN0cmljdF9uc191bnZlcmlmaWFibGVYAQAAAC10cq8EAABYEQAAAHV1aWQuVVVJRC52ZXJzaW9ucrAEAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3V1aWQuaHRtbCN1dWlkLlVVSUQudmVyc2lvblgBAAAALXRysQQAAFgPAAAAdXVpZC5VVUlELmJ5dGVzcrIEAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3V1aWQuaHRtbCN1dWlkLlVVSUQuYnl0ZXNYAQAAAC10crMEAABYKwAAAGNvb2tpZWxpYi5EZWZhdWx0Q29va2llUG9saWN5LnN0cmljdF9kb21haW5ytAQAAChqaQEAAGpqAQAAWFwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llbGliLmh0bWwjY29va2llbGliLkRlZmF1bHRDb29raWVQb2xpY3kuc3RyaWN0X2RvbWFpblgBAAAALXRytQQAAFgXAAAAeG1sLmRvbS5Ob2RlLmZpcnN0Q2hpbGRytgQAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uTm9kZS5maXJzdENoaWxkWAEAAAAtdHK3BAAAWBYAAAB0aHJlYWRpbmcuVGhyZWFkLmlkZW50crgEAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5UaHJlYWQuaWRlbnRYAQAAAC10crkEAABYGAAAAGNvb2tpZWxpYi5Db29raWUudmVyc2lvbnK6BAAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuQ29va2llLnZlcnNpb25YAQAAAC10crsEAABYFAAAAGN0eXBlcy5QeURMTC5faGFuZGxlcrwEAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5QeURMTC5faGFuZGxlWAEAAAAtdHK9BAAAWBEAAAB4bWwuZG9tLkF0dHIubmFtZXK+BAAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5BdHRyLm5hbWVYAQAAAC10cr8EAABYFwAAAGN0eXBlcy5fRnVuY1B0ci5yZXN0eXBlcsAEAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5fRnVuY1B0ci5yZXN0eXBlWAEAAAAtdHLBBAAAWBIAAABpbnN0YW5jZS5fX2NsYXNzX19ywgQAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNpbnN0YW5jZS5fX2NsYXNzX19YAQAAAC10csMEAABYMAAAAHhtbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5zcGVjaWZpZWRfYXR0cmlidXRlc3LEBAAAKGppAQAAamoBAABYXwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLnNwZWNpZmllZF9hdHRyaWJ1dGVzWAEAAAAtdHLFBAAAWBIAAAByZXByLlJlcHIubWF4b3RoZXJyxgQAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVwci5odG1sI3JlcHIuUmVwci5tYXhvdGhlclgBAAAALXRyxwQAAFgeAAAAU29ja2V0U2VydmVyLkJhc2VTZXJ2ZXIuc29ja2V0csgEAAAoamkBAABqagEAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI1NvY2tldFNlcnZlci5CYXNlU2VydmVyLnNvY2tldFgBAAAALXRyyQQAAFgYAAAAY29sbGVjdGlvbnMuZGVxdWUubWF4bGVucsoEAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuZGVxdWUubWF4bGVuWAEAAAAtdHLLBAAAWCwAAAB3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLnRyYWNlYmFja19saW1pdHLMBAAAKGppAQAAamoBAABYWwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci50cmFjZWJhY2tfbGltaXRYAQAAAC10cs0EAABYIQAAAGNvb2tpZWxpYi5GaWxlQ29va2llSmFyLmRlbGF5bG9hZHLOBAAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuRmlsZUNvb2tpZUphci5kZWxheWxvYWRYAQAAAC10cs8EAABYHQAAAHhtbC5kb20uRG9jdW1lbnRUeXBlLnN5c3RlbUlkctAEAAAoamkBAABqagEAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkRvY3VtZW50VHlwZS5zeXN0ZW1JZFgBAAAALXRy0QQAAFgXAAAAdGhyZWFkaW5nLlRocmVhZC5kYWVtb25y0gQAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLlRocmVhZC5kYWVtb25YAQAAAC10ctMEAABYFgAAAHNlbGVjdC5zZWxlY3QuUElQRV9CVUZy1AQAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2VsZWN0Lmh0bWwjc2VsZWN0LnNlbGVjdC5QSVBFX0JVRlgBAAAALXRy1QQAAFgVAAAAdGFyZmlsZS5UYXJJbmZvLnVuYW1lctYEAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLlRhckluZm8udW5hbWVYAQAAAC10ctcEAABYGAAAAGN0eXBlcy5fRnVuY1B0ci5lcnJjaGVja3LYBAAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuX0Z1bmNQdHIuZXJyY2hlY2tYAQAAAC10ctkEAABYGwAAAHN1YnByb2Nlc3MuUG9wZW4ucmV0dXJuY29kZXLaBAAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5Qb3Blbi5yZXR1cm5jb2RlWAEAAAAtdHLbBAAAWB8AAAB6aXBmaWxlLlppcEluZm8uZXh0cmFjdF92ZXJzaW9uctwEAAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLlppcEluZm8uZXh0cmFjdF92ZXJzaW9uWAEAAAAtdHLdBAAAWBMAAABkZWZpbml0aW9uLl9fbmFtZV9fct4EAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZGVmaW5pdGlvbi5fX25hbWVfX1gBAAAALXRy3wQAAFgjAAAAb3NzYXVkaW9kZXYub3NzX2F1ZGlvX2RldmljZS5jbG9zZWRy4AQAAChqaQEAAGpqAQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3NzYXVkaW9kZXYuaHRtbCNvc3NhdWRpb2Rldi5vc3NfYXVkaW9fZGV2aWNlLmNsb3NlZFgBAAAALXRy4QQAAFgWAAAAZnVuY3Rvb2xzLnBhcnRpYWwuZnVuY3LiBAAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdG9vbHMuaHRtbCNmdW5jdG9vbHMucGFydGlhbC5mdW5jWAEAAAAtdHLjBAAAWBgAAABkb2N0ZXN0LkRvY1Rlc3QuZXhhbXBsZXNy5AQAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRG9jVGVzdC5leGFtcGxlc1gBAAAALXRy5QQAAFgmAAAAU29ja2V0U2VydmVyLkJhc2VTZXJ2ZXIuc2VydmVyX2FkZHJlc3Ny5gQAAChqaQEAAGpqAQAAWFoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0c2VydmVyLmh0bWwjU29ja2V0U2VydmVyLkJhc2VTZXJ2ZXIuc2VydmVyX2FkZHJlc3NYAQAAAC10cucEAABYFQAAAHNobGV4LnNobGV4LndvcmRjaGFyc3LoBAAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaGxleC5odG1sI3NobGV4LnNobGV4LndvcmRjaGFyc1gBAAAALXRy6QQAAFgSAAAAZGF0ZXRpbWUudGltZS5ob3VycuoEAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUudGltZS5ob3VyWAEAAAAtdHLrBAAAWA8AAABjbWQuQ21kLmxhc3RjbWRy7AQAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY21kLmh0bWwjY21kLkNtZC5sYXN0Y21kWAEAAAAtdHLtBAAAWCoAAABCYXNlSFRUUFNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLnBhdGhy7gQAAChqaQEAAGpqAQAAWGAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmFzZWh0dHBzZXJ2ZXIuaHRtbCNCYXNlSFRUUFNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLnBhdGhYAQAAAC10cu8EAABYFQAAAHJlLk1hdGNoT2JqZWN0LnN0cmluZ3LwBAAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sI3JlLk1hdGNoT2JqZWN0LnN0cmluZ1gBAAAALXRy8QQAAFgRAAAAcHljbGJyLkNsYXNzLmZpbGVy8gQAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHljbGJyLmh0bWwjcHljbGJyLkNsYXNzLmZpbGVYAQAAAC10cvMEAABYHAAAAG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzLm5hbWVy9AQAAChqaQEAAGpqAQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MubmFtZVgBAAAALXRy9QQAAFgcAAAAaHRtbGxpYi5IVE1MUGFyc2VyLmZvcm1hdHRlcnL2BAAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odG1sbGliLmh0bWwjaHRtbGxpYi5IVE1MUGFyc2VyLmZvcm1hdHRlclgBAAAALXRy9wQAAFgUAAAAc2hsZXguc2hsZXguaW5zdHJlYW1y+AQAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2hsZXguaHRtbCNzaGxleC5zaGxleC5pbnN0cmVhbVgBAAAALXRy+QQAAFgTAAAAc2VsZWN0LmtldmVudC5pZGVudHL6BAAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZWxlY3QuaHRtbCNzZWxlY3Qua2V2ZW50LmlkZW50WAEAAAAtdHL7BAAAWBQAAABzZWxlY3Qua2V2ZW50LmZpbHRlcnL8BAAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZWxlY3QuaHRtbCNzZWxlY3Qua2V2ZW50LmZpbHRlclgBAAAALXRy/QQAAFg6AAAAY29va2llbGliLkRlZmF1bHRDb29raWVQb2xpY3kuc3RyaWN0X25zX3NldF9pbml0aWFsX2RvbGxhcnL+BAAAKGppAQAAamoBAABYawAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuRGVmYXVsdENvb2tpZVBvbGljeS5zdHJpY3RfbnNfc2V0X2luaXRpYWxfZG9sbGFyWAEAAAAtdHL/BAAAWBEAAABweWNsYnIuQ2xhc3MubmFtZXIABQAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWNsYnIuaHRtbCNweWNsYnIuQ2xhc3MubmFtZVgBAAAALXRyAQUAAFgYAAAAdXJsbGliMi5IVFRQRXJyb3IucmVhc29ucgIFAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLkhUVFBFcnJvci5yZWFzb25YAQAAAC10cgMFAABYFgAAAGRhdGV0aW1lLnRpbWVkZWx0YS5tYXhyBAUAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS50aW1lZGVsdGEubWF4WAEAAAAtdHIFBQAAWCMAAAB4bWwuZG9tLkRvY3VtZW50VHlwZS5pbnRlcm5hbFN1YnNldHIGBQAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Eb2N1bWVudFR5cGUuaW50ZXJuYWxTdWJzZXRYAQAAAC10cgcFAABYKwAAAFNvY2tldFNlcnZlci5CYXNlU2VydmVyLlJlcXVlc3RIYW5kbGVyQ2xhc3NyCAUAAChqaQEAAGpqAQAAWF8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0c2VydmVyLmh0bWwjU29ja2V0U2VydmVyLkJhc2VTZXJ2ZXIuUmVxdWVzdEhhbmRsZXJDbGFzc1gBAAAALXRyCQUAAFgbAAAAY3R5cGVzLl9DRGF0YS5fYl9uZWVkc2ZyZWVfcgoFAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5fQ0RhdGEuX2JfbmVlZHNmcmVlX1gBAAAALXRyCwUAAFgVAAAAY3N2LmNzdndyaXRlci5kaWFsZWN0cgwFAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nzdi5odG1sI2Nzdi5jc3Z3cml0ZXIuZGlhbGVjdFgBAAAALXRyDQUAAFgYAAAAc3RyaW5nLlRlbXBsYXRlLnRlbXBsYXRlcg4FAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZy5odG1sI3N0cmluZy5UZW1wbGF0ZS50ZW1wbGF0ZVgBAAAALXRyDwUAAFgcAAAAaHR0cGxpYi5IVFRQUmVzcG9uc2UudmVyc2lvbnIQBQAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odHRwbGliLmh0bWwjaHR0cGxpYi5IVFRQUmVzcG9uc2UudmVyc2lvblgBAAAALXRyEQUAAFgoAAAAdW5pdHRlc3QuVGVzdExvYWRlci5zb3J0VGVzdE1ldGhvZHNVc2luZ3ISBQAAKGppAQAAamoBAABYWAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RMb2FkZXIuc29ydFRlc3RNZXRob2RzVXNpbmdYAQAAAC10chMFAABYGAAAAHRhcmZpbGUuVGFySW5mby5saW5rbmFtZXIUBQAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJJbmZvLmxpbmtuYW1lWAEAAAAtdHIVBQAAWBEAAAByZXByLlJlcHIubWF4bGlzdHIWBQAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXByLmh0bWwjcmVwci5SZXByLm1heGxpc3RYAQAAAC10chcFAABYFQAAAHNzbC5TU0xTb2NrZXQuY29udGV4dHIYBQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMU29ja2V0LmNvbnRleHRYAQAAAC10chkFAABYIQAAAGVtYWlsLmNoYXJzZXQuQ2hhcnNldC5pbnB1dF9jb2RlY3IaBQAAKGppAQAAamoBAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5jaGFyc2V0Lmh0bWwjZW1haWwuY2hhcnNldC5DaGFyc2V0LmlucHV0X2NvZGVjWAEAAAAtdHIbBQAAWCAAAABjb29raWVsaWIuRmlsZUNvb2tpZUphci5maWxlbmFtZXIcBQAAKGppAQAAamoBAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuRmlsZUNvb2tpZUphci5maWxlbmFtZVgBAAAALXRyHQUAAFgWAAAAVXNlckxpc3QuVXNlckxpc3QuZGF0YXIeBQAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91c2VyZGljdC5odG1sI1VzZXJMaXN0LlVzZXJMaXN0LmRhdGFYAQAAAC10ch8FAABYGwAAAG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzLnBpZHIgBQAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcy5waWRYAQAAAC10ciEFAABYFQAAAGNzdi5EaWFsZWN0LnF1b3RlY2hhcnIiBQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jc3YuaHRtbCNjc3YuRGlhbGVjdC5xdW90ZWNoYXJYAQAAAC10ciMFAABYFAAAAGFycmF5LmFycmF5Lml0ZW1zaXplciQFAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FycmF5Lmh0bWwjYXJyYXkuYXJyYXkuaXRlbXNpemVYAQAAAC10ciUFAABYEgAAAGNzdi5EaWFsZWN0LnN0cmljdHImBQAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jc3YuaHRtbCNjc3YuRGlhbGVjdC5zdHJpY3RYAQAAAC10cicFAABYGgAAAGZpbGVjbXAuZGlyY21wLmZ1bm55X2ZpbGVzcigFAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZpbGVjbXAuaHRtbCNmaWxlY21wLmRpcmNtcC5mdW5ueV9maWxlc1gBAAAALXRyKQUAAFgXAAAAb3B0cGFyc2UuT3B0aW9uLmRlZmF1bHRyKgUAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS5PcHRpb24uZGVmYXVsdFgBAAAALXRyKwUAAFgXAAAAc3VicHJvY2Vzcy5Qb3Blbi5zdGRlcnJyLAUAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI3N1YnByb2Nlc3MuUG9wZW4uc3RkZXJyWAEAAAAtdHItBQAAWBYAAABkb2N0ZXN0LkRvY1Rlc3QubGluZW5vci4FAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LkRvY1Rlc3QubGluZW5vWAEAAAAtdHIvBQAAWCAAAABkb2N0ZXN0LlVuZXhwZWN0ZWRFeGNlcHRpb24udGVzdHIwBQAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5VbmV4cGVjdGVkRXhjZXB0aW9uLnRlc3RYAQAAAC10cjEFAABYKgAAAHhtbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5FcnJvckJ5dGVJbmRleHIyBQAAKGppAQAAamoBAABYWQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkVycm9yQnl0ZUluZGV4WAEAAAAtdHIzBQAAWBMAAABweWNsYnIuQ2xhc3MubW9kdWxlcjQFAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5Y2xici5odG1sI3B5Y2xici5DbGFzcy5tb2R1bGVYAQAAAC10cjUFAABYHAAAAHVuaXR0ZXN0LlRlc3RSZXN1bHQuZmFpbHVyZXNyNgUAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0UmVzdWx0LmZhaWx1cmVzWAEAAAAtdHI3BQAAWB4AAABTY3JvbGxlZFRleHQuU2Nyb2xsZWRUZXh0LnZiYXJyOAUAAChqaQEAAGpqAQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2Nyb2xsZWR0ZXh0Lmh0bWwjU2Nyb2xsZWRUZXh0LlNjcm9sbGVkVGV4dC52YmFyWAEAAAAtdHI5BQAAWB0AAAB4bWwuZG9tLkRvY3VtZW50VHlwZS5lbnRpdGllc3I6BQAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Eb2N1bWVudFR5cGUuZW50aXRpZXNYAQAAAC10cjsFAABYEgAAAHV1aWQuVVVJRC5ieXRlc19sZXI8BQAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91dWlkLmh0bWwjdXVpZC5VVUlELmJ5dGVzX2xlWAEAAAAtdHI9BQAAWB0AAABvcHRwYXJzZS5PcHRpb24uY2FsbGJhY2tfYXJnc3I+BQAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLk9wdGlvbi5jYWxsYmFja19hcmdzWAEAAAAtdHI/BQAAWB4AAABtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcy5kYWVtb25yQAUAAChqaQEAAGpqAQAAWFUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MuZGFlbW9uWAEAAAAtdHJBBQAAWBMAAAB4bWwuZG9tLk5vZGUucHJlZml4ckIFAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLk5vZGUucHJlZml4WAEAAAAtdHJDBQAAWBUAAABkYXRldGltZS5kYXRldGltZS5kYXlyRAUAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS5kYXlYAQAAAC10ckUFAABYMgAAAEJhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuTWVzc2FnZUNsYXNzckYFAAAoamkBAABqagEAAFhoAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Jhc2VodHRwc2VydmVyLmh0bWwjQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5NZXNzYWdlQ2xhc3NYAQAAAC10ckcFAABYMAAAAGNvb2tpZWxpYi5EZWZhdWx0Q29va2llUG9saWN5LkRvbWFpblJGQzI5NjVNYXRjaHJIBQAAKGppAQAAamoBAABYYQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuRGVmYXVsdENvb2tpZVBvbGljeS5Eb21haW5SRkMyOTY1TWF0Y2hYAQAAAC10ckkFAABYHAAAAHppcGltcG9ydC56aXBpbXBvcnRlci5wcmVmaXhySgUAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemlwaW1wb3J0Lmh0bWwjemlwaW1wb3J0LnppcGltcG9ydGVyLnByZWZpeFgBAAAALXRySwUAAFgaAAAAZnRwbGliLkZUUF9UTFMuc3NsX3ZlcnNpb25yTAUAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnRwbGliLmh0bWwjZnRwbGliLkZUUF9UTFMuc3NsX3ZlcnNpb25YAQAAAC10ck0FAABYEQAAAGRhdGV0aW1lLnRpbWUubWF4ck4FAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUudGltZS5tYXhYAQAAAC10ck8FAABYOgAAAEJhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuZXJyb3JfbWVzc2FnZV9mb3JtYXRyUAUAAChqaQEAAGpqAQAAWHAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmFzZWh0dHBzZXJ2ZXIuaHRtbCNCYXNlSFRUUFNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLmVycm9yX21lc3NhZ2VfZm9ybWF0WAEAAAAtdHJRBQAAWBQAAABmaWxlY21wLmRpcmNtcC5yaWdodHJSBQAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9maWxlY21wLmh0bWwjZmlsZWNtcC5kaXJjbXAucmlnaHRYAQAAAC10clMFAABYOQAAAGNvb2tpZWxpYi5EZWZhdWx0Q29va2llUG9saWN5LnN0cmljdF9yZmMyOTY1X3VudmVyaWZpYWJsZXJUBQAAKGppAQAAamoBAABYagAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuRGVmYXVsdENvb2tpZVBvbGljeS5zdHJpY3RfcmZjMjk2NV91bnZlcmlmaWFibGVYAQAAAC10clUFAABYGwAAAHRhcmZpbGUuVGFySW5mby5wYXhfaGVhZGVyc3JWBQAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJJbmZvLnBheF9oZWFkZXJzWAEAAAAtdHJXBQAAWCUAAAB0ZXh0d3JhcC5UZXh0V3JhcHBlci5icmVha19sb25nX3dvcmRzclgFAAAoamkBAABqagEAAFhVAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RleHR3cmFwLmh0bWwjdGV4dHdyYXAuVGV4dFdyYXBwZXIuYnJlYWtfbG9uZ193b3Jkc1gBAAAALXRyWQUAAFgXAAAAZG9jdGVzdC5FeGFtcGxlLm9wdGlvbnNyWgUAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRXhhbXBsZS5vcHRpb25zWAEAAAAtdHJbBQAAWCYAAAB0ZXh0d3JhcC5UZXh0V3JhcHBlci5zdWJzZXF1ZW50X2luZGVudHJcBQAAKGppAQAAamoBAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZXh0d3JhcC5odG1sI3RleHR3cmFwLlRleHRXcmFwcGVyLnN1YnNlcXVlbnRfaW5kZW50WAEAAAAtdHJdBQAAWBUAAABkb2N0ZXN0LkRvY1Rlc3QuZ2xvYnNyXgUAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRG9jVGVzdC5nbG9ic1gBAAAALXRyXwUAAFgSAAAAc2VsZWN0LmtldmVudC5kYXRhcmAFAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NlbGVjdC5odG1sI3NlbGVjdC5rZXZlbnQuZGF0YVgBAAAALXRyYQUAAFgnAAAAY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QuZGVmYXVsdF9mYWN0b3J5cmIFAAAoamkBAABqagEAAFhaAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QuZGVmYXVsdF9mYWN0b3J5WAEAAAAtdHJjBQAAWB0AAAB6aXBmaWxlLlppcEluZm8uY29tcHJlc3Nfc2l6ZXJkBQAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5aaXBJbmZvLmNvbXByZXNzX3NpemVYAQAAAC10cmUFAABYHgAAAGNvb2tpZWxpYi5Db29raWVQb2xpY3kucmZjMjk2NXJmBQAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuQ29va2llUG9saWN5LnJmYzI5NjVYAQAAAC10cmcFAABYHgAAAHJleGVjLlJFeGVjLm9rX2J1aWx0aW5fbW9kdWxlc3JoBQAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXhlYy5odG1sI3JleGVjLlJFeGVjLm9rX2J1aWx0aW5fbW9kdWxlc1gBAAAALXRyaQUAAFgXAAAAZG9jdGVzdC5FeGFtcGxlLmV4Y19tc2dyagUAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRXhhbXBsZS5leGNfbXNnWAEAAAAtdHJrBQAAWB4AAABzcWxpdGUzLkNvbm5lY3Rpb24ucm93X2ZhY3RvcnlybAUAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuQ29ubmVjdGlvbi5yb3dfZmFjdG9yeVgBAAAALXRybQUAAFgRAAAAdXVpZC5VVUlELnZhcmlhbnRybgUAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXVpZC5odG1sI3V1aWQuVVVJRC52YXJpYW50WAEAAAAtdHJvBQAAWCsAAABCYXNlSFRUUFNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLndmaWxlcnAFAAAoamkBAABqagEAAFhhAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Jhc2VodHRwc2VydmVyLmh0bWwjQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci53ZmlsZVgBAAAALXRycQUAAFgoAAAAc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IucmV0dXJuY29kZXJyBQAAKGppAQAAamoBAABYWgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IucmV0dXJuY29kZVgBAAAALXRycwUAAFghAAAAc3VicHJvY2Vzcy5TVEFSVFVQSU5GTy5oU3RkT3V0cHV0cnQFAAAoamkBAABqagEAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLlNUQVJUVVBJTkZPLmhTdGRPdXRwdXRYAQAAAC10cnUFAABYGQAAAGN0eXBlcy5fU2ltcGxlQ0RhdGEudmFsdWVydgUAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLl9TaW1wbGVDRGF0YS52YWx1ZVgBAAAALXRydwUAAFguAAAAd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci53c2dpX211bHRpcHJvY2Vzc3J4BQAAKGppAQAAamoBAABYXQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci53c2dpX211bHRpcHJvY2Vzc1gBAAAALXRyeQUAAFgcAAAAY3R5cGVzLlN0cnVjdHVyZS5fYW5vbnltb3VzX3J6BQAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuU3RydWN0dXJlLl9hbm9ueW1vdXNfWAEAAAAtdHJ7BQAAWBsAAABkb2N0ZXN0LkRvY1Rlc3RGYWlsdXJlLnRlc3RyfAUAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRG9jVGVzdEZhaWx1cmUudGVzdFgBAAAALXRyfQUAAFgTAAAAc2VsZWN0LmtldmVudC5mbGFnc3J+BQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZWxlY3QuaHRtbCNzZWxlY3Qua2V2ZW50LmZsYWdzWAEAAAAtdHJ/BQAAWBoAAABudW1iZXJzLlJhdGlvbmFsLm51bWVyYXRvcnKABQAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9udW1iZXJzLmh0bWwjbnVtYmVycy5SYXRpb25hbC5udW1lcmF0b3JYAQAAAC10coEFAABYEQAAAGRhdGV0aW1lLmRhdGUubWlucoIFAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZS5taW5YAQAAAC10coMFAABYHwAAAGNvb2tpZWxpYi5Db29raWVQb2xpY3kubmV0c2NhcGVyhAUAAChqaQEAAGpqAQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llbGliLmh0bWwjY29va2llbGliLkNvb2tpZVBvbGljeS5uZXRzY2FwZVgBAAAALXRyhQUAAFgNAAAAZmlsZS5lbmNvZGluZ3KGBQAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2ZpbGUuZW5jb2RpbmdYAQAAAC10cocFAABYGwAAAHRhcmZpbGUuVGFyRmlsZS5wYXhfaGVhZGVyc3KIBQAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJGaWxlLnBheF9oZWFkZXJzWAEAAAAtdHKJBQAAWAkAAABmaWxlLm1vZGVyigUAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNmaWxlLm1vZGVYAQAAAC10cosFAABYHwAAAG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzLmF1dGhrZXlyjAUAAChqaQEAAGpqAQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MuYXV0aGtleVgBAAAALXRyjQUAAFgTAAAAcmV4ZWMuUkV4ZWMub2tfcGF0aHKOBQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXhlYy5odG1sI3JleGVjLlJFeGVjLm9rX3BhdGhYAQAAAC10co8FAABYFAAAAHNvY2tldC5zb2NrZXQuZmFtaWx5cpAFAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5zb2NrZXQuZmFtaWx5WAEAAAAtdHKRBQAAWCIAAAB4bWwuZG9tLlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5kYXRhcpIFAAAoamkBAABqagEAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5kYXRhWAEAAAAtdHKTBQAAWBkAAABzaGxleC5zaGxleC5lc2NhcGVkcXVvdGVzcpQFAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NobGV4Lmh0bWwjc2hsZXguc2hsZXguZXNjYXBlZHF1b3Rlc1gBAAAALXRylQUAAFgjAAAAZW1haWwuY2hhcnNldC5DaGFyc2V0LmlucHV0X2NoYXJzZXRylgUAAChqaQEAAGpqAQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwuY2hhcnNldC5odG1sI2VtYWlsLmNoYXJzZXQuQ2hhcnNldC5pbnB1dF9jaGFyc2V0WAEAAAAtdHKXBQAAWBYAAABkYXRldGltZS5kYXRldGltZS55ZWFycpgFAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZXRpbWUueWVhclgBAAAALXRymQUAAFgYAAAAbXVsdGlmaWxlLk11bHRpRmlsZS5sYXN0cpoFAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpZmlsZS5odG1sI211bHRpZmlsZS5NdWx0aUZpbGUubGFzdFgBAAAALXRymwUAAFgnAAAAd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5lcnJvcl9ib2R5cpwFAAAoamkBAABqagEAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLmVycm9yX2JvZHlYAQAAAC10cp0FAABYFQAAAGNzdi5jc3ZyZWFkZXIuZGlhbGVjdHKeBQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jc3YuaHRtbCNjc3YuY3N2cmVhZGVyLmRpYWxlY3RYAQAAAC10cp8FAABYGAAAAGNvb2tpZWxpYi5Db29raWUuZXhwaXJlc3KgBQAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuQ29va2llLmV4cGlyZXNYAQAAAC10cqEFAABYJAAAAHVuaXR0ZXN0LlRlc3RMb2FkZXIudGVzdE1ldGhvZFByZWZpeHKiBQAAKGppAQAAamoBAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RMb2FkZXIudGVzdE1ldGhvZFByZWZpeFgBAAAALXRyowUAAFgTAAAAY3R5cGVzLkFycmF5Ll90eXBlX3KkBQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuQXJyYXkuX3R5cGVfWAEAAAAtdHKlBQAAWBkAAABmaWxlY21wLmRpcmNtcC5zYW1lX2ZpbGVzcqYFAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZpbGVjbXAuaHRtbCNmaWxlY21wLmRpcmNtcC5zYW1lX2ZpbGVzWAEAAAAtdHKnBQAAWA0AAAB1dWlkLlVVSUQudXJucqgFAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3V1aWQuaHRtbCN1dWlkLlVVSUQudXJuWAEAAAAtdHKpBQAAWCMAAABjb29raWVsaWIuQ29va2llLmRvbWFpbl9pbml0aWFsX2RvdHKqBQAAKGppAQAAamoBAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuQ29va2llLmRvbWFpbl9pbml0aWFsX2RvdFgBAAAALXRyqwUAAFgrAAAAeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkVycm9yTGluZU51bWJlcnKsBQAAKGppAQAAamoBAABYWgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkVycm9yTGluZU51bWJlclgBAAAALXRyrQUAAFgdAAAAemlwZmlsZS5aaXBJbmZvLmludGVybmFsX2F0dHJyrgUAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGZpbGUuWmlwSW5mby5pbnRlcm5hbF9hdHRyWAEAAAAtdHKvBQAAWDQAAABCYXNlSFRUUFNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLnNlcnZlcl92ZXJzaW9ucrAFAAAoamkBAABqagEAAFhqAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Jhc2VodHRwc2VydmVyLmh0bWwjQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5zZXJ2ZXJfdmVyc2lvblgBAAAALXRysQUAAFgiAAAAdW5pdHRlc3QuVGVzdENhc2UuZmFpbHVyZUV4Y2VwdGlvbnKyBQAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmZhaWx1cmVFeGNlcHRpb25YAQAAAC10crMFAABYEQAAAHhtbC5kb20uVGV4dC5kYXRhcrQFAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLlRleHQuZGF0YVgBAAAALXRytQUAAFgVAAAAemlwZmlsZS5aaXBJbmZvLmV4dHJhcrYFAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLlppcEluZm8uZXh0cmFYAQAAAC10crcFAABYIQAAAG1pbWV0eXBlcy5NaW1lVHlwZXMudHlwZXNfbWFwX2ludnK4BQAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW1ldHlwZXMuaHRtbCNtaW1ldHlwZXMuTWltZVR5cGVzLnR5cGVzX21hcF9pbnZYAQAAAC10crkFAABYJgAAAFNvY2tldFNlcnZlci5CYXNlU2VydmVyLmFkZHJlc3NfZmFtaWx5croFAAAoamkBAABqagEAAFhaAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI1NvY2tldFNlcnZlci5CYXNlU2VydmVyLmFkZHJlc3NfZmFtaWx5WAEAAAAtdHK7BQAAWA4AAABjbWQuQ21kLnByb21wdHK8BQAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jbWQuaHRtbCNjbWQuQ21kLnByb21wdFgBAAAALXRyvQUAAFgaAAAAcmV4ZWMuUkV4ZWMub2tfcG9zaXhfbmFtZXNyvgUAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmV4ZWMuaHRtbCNyZXhlYy5SRXhlYy5va19wb3NpeF9uYW1lc1gBAAAALXRyvwUAAFgbAAAAemxpYi5EZWNvbXByZXNzLnVudXNlZF9kYXRhcsAFAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3psaWIuaHRtbCN6bGliLkRlY29tcHJlc3MudW51c2VkX2RhdGFYAQAAAC10csEFAABYOAAAAEJhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuZXJyb3JfY29udGVudF90eXBlcsIFAAAoamkBAABqagEAAFhuAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Jhc2VodHRwc2VydmVyLmh0bWwjQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5lcnJvcl9jb250ZW50X3R5cGVYAQAAAC10csMFAABYEwAAAGRhdGV0aW1lLmRhdGUubW9udGhyxAUAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRlLm1vbnRoWAEAAAAtdHLFBQAAWCQAAAB4bWwuZG9tLlByb2Nlc3NpbmdJbnN0cnVjdGlvbi50YXJnZXRyxgUAAChqaQEAAGpqAQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uUHJvY2Vzc2luZ0luc3RydWN0aW9uLnRhcmdldFgBAAAALXRyxwUAAFgRAAAAc2hsZXguc2hsZXguZGVidWdyyAUAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2hsZXguaHRtbCNzaGxleC5zaGxleC5kZWJ1Z1gBAAAALXRyyQUAAFgaAAAAdXJsbGliMi5CYXNlSGFuZGxlci5wYXJlbnRyygUAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuQmFzZUhhbmRsZXIucGFyZW50WAEAAAAtdHLLBQAAWB0AAAB6aXBpbXBvcnQuemlwaW1wb3J0ZXIuYXJjaGl2ZXLMBQAAKGppAQAAamoBAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96aXBpbXBvcnQuaHRtbCN6aXBpbXBvcnQuemlwaW1wb3J0ZXIuYXJjaGl2ZVgBAAAALXRyzQUAAFgSAAAAeG1sLmRvbS5BdHRyLnZhbHVlcs4FAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkF0dHIudmFsdWVYAQAAAC10cs8FAABYGQAAAHhtbC5kb20uRG9jdW1lbnRUeXBlLm5hbWVy0AUAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uRG9jdW1lbnRUeXBlLm5hbWVYAQAAAC10ctEFAABYHQAAAHJleGVjLlJFeGVjLm5va19idWlsdGluX25hbWVzctIFAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JleGVjLmh0bWwjcmV4ZWMuUkV4ZWMubm9rX2J1aWx0aW5fbmFtZXNYAQAAAC10ctMFAABYEgAAAGN0eXBlcy5QeURMTC5fbmFtZXLUBQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuUHlETEwuX25hbWVYAQAAAC10ctUFAABYNgAAAEJhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIucHJvdG9jb2xfdmVyc2lvbnLWBQAAKGppAQAAamoBAABYbAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXNlaHR0cHNlcnZlci5odG1sI0Jhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIucHJvdG9jb2xfdmVyc2lvblgBAAAALXRy1wUAAFgwAAAAY29va2llbGliLkRlZmF1bHRDb29raWVQb2xpY3kuc3RyaWN0X25zX3NldF9wYXRoctgFAAAoamkBAABqagEAAFhhAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5EZWZhdWx0Q29va2llUG9saWN5LnN0cmljdF9uc19zZXRfcGF0aFgBAAAALXRy2QUAAFgWAAAAY3R5cGVzLl9DRGF0YS5fYl9iYXNlX3LaBQAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuX0NEYXRhLl9iX2Jhc2VfWAEAAAAtdHLbBQAAWA8AAABvYmplY3QuX19kaWN0X19y3AUAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNvYmplY3QuX19kaWN0X19YAQAAAC10ct0FAABYEQAAAHJlcHIuUmVwci5tYXhsb25nct4FAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlcHIuaHRtbCNyZXByLlJlcHIubWF4bG9uZ1gBAAAALXRy3wUAAFg1AAAAQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5yZXF1ZXN0X3ZlcnNpb25y4AUAAChqaQEAAGpqAQAAWGsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmFzZWh0dHBzZXJ2ZXIuaHRtbCNCYXNlSFRUUFNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLnJlcXVlc3RfdmVyc2lvblgBAAAALXRy4QUAAFgjAAAAY29va2llbGliLkNvb2tpZVBvbGljeS5oaWRlX2Nvb2tpZTJy4gUAAChqaQEAAGpqAQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llbGliLmh0bWwjY29va2llbGliLkNvb2tpZVBvbGljeS5oaWRlX2Nvb2tpZTJYAQAAAC10cuMFAABYHgAAAHN1YnByb2Nlc3MuU1RBUlRVUElORk8uZHdGbGFnc3LkBQAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5TVEFSVFVQSU5GTy5kd0ZsYWdzWAEAAAAtdHLlBQAAWBgAAABkYXRldGltZS50aW1lLnJlc29sdXRpb25y5gUAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS50aW1lLnJlc29sdXRpb25YAQAAAC10cucFAABYEAAAAG1lbW9yeXZpZXcuc2hhcGVy6AUAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNtZW1vcnl2aWV3LnNoYXBlWAEAAAAtdHLpBQAAWBEAAABuZXRyYy5uZXRyYy5ob3N0c3LqBQAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9uZXRyYy5odG1sI25ldHJjLm5ldHJjLmhvc3RzWAEAAAAtdHLrBQAAWB0AAABlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuZGVmZWN0c3LsBQAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5NZXNzYWdlLmRlZmVjdHNYAQAAAC10cu0FAABYLwAAAHhtbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5DdXJyZW50Q29sdW1uTnVtYmVycu4FAAAoamkBAABqagEAAFheAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuQ3VycmVudENvbHVtbk51bWJlclgBAAAALXRy7wUAAFgjAAAAZG9jdGVzdC5VbmV4cGVjdGVkRXhjZXB0aW9uLmV4YW1wbGVy8AUAAChqaQEAAGpqAQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuVW5leHBlY3RlZEV4Y2VwdGlvbi5leGFtcGxlWAEAAAAtdHLxBQAAWBQAAAB0YXJmaWxlLlRhckluZm8udHlwZXLyBQAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJJbmZvLnR5cGVYAQAAAC10cvMFAABYFAAAAHN1YnByb2Nlc3MuUG9wZW4ucGlkcvQFAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLlBvcGVuLnBpZFgBAAAALXRy9QUAAFgdAAAAc3NsLlNTTENvbnRleHQuY2hlY2tfaG9zdG5hbWVy9gUAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTENvbnRleHQuY2hlY2tfaG9zdG5hbWVYAQAAAC10cvcFAABYDwAAAG1lbW9yeXZpZXcubmRpbXL4BQAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI21lbW9yeXZpZXcubmRpbVgBAAAALXRy+QUAAFgpAAAAd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5odHRwX3ZlcnNpb25y+gUAAChqaQEAAGpqAQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd3NnaXJlZi5odG1sI3dzZ2lyZWYuaGFuZGxlcnMuQmFzZUhhbmRsZXIuaHR0cF92ZXJzaW9uWAEAAAAtdHL7BQAAWBsAAABodHRwbGliLkhUVFBSZXNwb25zZS5zdGF0dXNy/AUAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHR0cGxpYi5odG1sI2h0dHBsaWIuSFRUUFJlc3BvbnNlLnN0YXR1c1gBAAAALXRy/QUAAFgvAAAAQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5yZXNwb25zZXNy/gUAAChqaQEAAGpqAQAAWGUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmFzZWh0dHBzZXJ2ZXIuaHRtbCNCYXNlSFRUUFNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLnJlc3BvbnNlc1gBAAAALXRy/wUAAFgVAAAAY3N2LkRpYWxlY3QuZGVsaW1pdGVycgAGAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nzdi5odG1sI2Nzdi5EaWFsZWN0LmRlbGltaXRlclgBAAAALXRyAQYAAFgbAAAAc3NsLlNTTENvbnRleHQudmVyaWZ5X2ZsYWdzcgIGAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xDb250ZXh0LnZlcmlmeV9mbGFnc1gBAAAALXRyAwYAAFgWAAAAY29va2llbGliLkNvb2tpZS52YWx1ZXIEBgAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuQ29va2llLnZhbHVlWAEAAAAtdHIFBgAAWA0AAABjbGFzcy5fX21yb19fcgYGAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjY2xhc3MuX19tcm9fX1gBAAAALXRyBwYAAFgPAAAAY2xhc3MuX19iYXNlc19fcggGAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjY2xhc3MuX19iYXNlc19fWAEAAAAtdHIJBgAAWA8AAABzaGxleC5zaGxleC5lb2ZyCgYAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2hsZXguaHRtbCNzaGxleC5zaGxleC5lb2ZYAQAAAC10cgsGAABYGgAAAGZpbGVjbXAuZGlyY21wLmNvbW1vbl9kaXJzcgwGAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZpbGVjbXAuaHRtbCNmaWxlY21wLmRpcmNtcC5jb21tb25fZGlyc1gBAAAALXRyDQYAAFgTAAAAbWVtb3J5dmlldy5pdGVtc2l6ZXIOBgAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI21lbW9yeXZpZXcuaXRlbXNpemVYAQAAAC10cg8GAABYDwAAAGFzdC5BU1QuX2ZpZWxkc3IQBgAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hc3QuaHRtbCNhc3QuQVNULl9maWVsZHNYAQAAAC10chEGAABYJwAAAHhtbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5idWZmZXJfdXNlZHISBgAAKGppAQAAamoBAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLmJ1ZmZlcl91c2VkWAEAAAAtdHITBgAAWBsAAABodHRwbGliLkhUVFBSZXNwb25zZS5yZWFzb25yFAYAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHR0cGxpYi5odG1sI2h0dHBsaWIuSFRUUFJlc3BvbnNlLnJlYXNvblgBAAAALXRyFQYAAFghAAAAb3NzYXVkaW9kZXYub3NzX2F1ZGlvX2RldmljZS5tb2RlchYGAAAoamkBAABqagEAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zc2F1ZGlvZGV2Lmh0bWwjb3NzYXVkaW9kZXYub3NzX2F1ZGlvX2RldmljZS5tb2RlWAEAAAAtdHIXBgAAWCIAAAB4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC50YWlschgGAAAoamkBAABqagEAAFhfAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50LnRhaWxYAQAAAC10chkGAABYFgAAAGRvY3Rlc3QuRXhhbXBsZS5saW5lbm9yGgYAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRXhhbXBsZS5saW5lbm9YAQAAAC10chsGAABYEwAAAHppcGZpbGUuWmlwSW5mby5DUkNyHAYAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGZpbGUuWmlwSW5mby5DUkNYAQAAAC10ch0GAABYGgAAAGRvY3Rlc3QuRG9jVGVzdEZhaWx1cmUuZ290ch4GAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LkRvY1Rlc3RGYWlsdXJlLmdvdFgBAAAALXRyHwYAAFgiAAAAc3FsaXRlMy5Db25uZWN0aW9uLmlzb2xhdGlvbl9sZXZlbHIgBgAAKGppAQAAamoBAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy5Db25uZWN0aW9uLmlzb2xhdGlvbl9sZXZlbFgBAAAALXRyIQYAAFgXAAAAc3VicHJvY2Vzcy5Qb3Blbi5zdGRvdXRyIgYAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI3N1YnByb2Nlc3MuUG9wZW4uc3Rkb3V0WAEAAAAtdHIjBgAAWBYAAABzc2wuU1NMQ29udGV4dC5vcHRpb25zciQGAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xDb250ZXh0Lm9wdGlvbnNYAQAAAC10ciUGAABYFgAAAGN0eXBlcy5fQ0RhdGEuX29iamVjdHNyJgYAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLl9DRGF0YS5fb2JqZWN0c1gBAAAALXRyJwYAAFgLAAAAZmlsZS5lcnJvcnNyKAYAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNmaWxlLmVycm9yc1gBAAAALXRyKQYAAFgXAAAAY3R5cGVzLlN0cnVjdHVyZS5fcGFja19yKgYAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLlN0cnVjdHVyZS5fcGFja19YAQAAAC10cisGAABYFAAAAGRhdGV0aW1lLnRpbWUudHppbmZvciwGAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUudGltZS50emluZm9YAQAAAC10ci0GAABYFQAAAG9wdHBhcnNlLk9wdGlvbi5UWVBFU3IuBgAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLk9wdGlvbi5UWVBFU1gBAAAALXRyLwYAAFgWAAAAZG9jdGVzdC5FeGFtcGxlLmluZGVudHIwBgAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5FeGFtcGxlLmluZGVudFgBAAAALXRyMQYAAFgZAAAAZmlsZWNtcC5kaXJjbXAucmlnaHRfb25seXIyBgAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9maWxlY21wLmh0bWwjZmlsZWNtcC5kaXJjbXAucmlnaHRfb25seVgBAAAALXRyMwYAAFgZAAAAcmUuUmVnZXhPYmplY3QuZ3JvdXBpbmRleHI0BgAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sI3JlLlJlZ2V4T2JqZWN0Lmdyb3VwaW5kZXhYAQAAAC10cjUGAABYGAAAAGZpbGVjbXAuZGlyY21wLmxlZnRfbGlzdHI2BgAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9maWxlY21wLmh0bWwjZmlsZWNtcC5kaXJjbXAubGVmdF9saXN0WAEAAAAtdHI3BgAAWCcAAAB1bml0dGVzdC5UZXN0UmVzdWx0LnVuZXhwZWN0ZWRTdWNjZXNzZXNyOAYAAChqaQEAAGpqAQAAWFcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0UmVzdWx0LnVuZXhwZWN0ZWRTdWNjZXNzZXNYAQAAAC10cjkGAABYGwAAAGZpbGVjbXAuZGlyY21wLmNvbW1vbl9mdW5ueXI6BgAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9maWxlY21wLmh0bWwjZmlsZWNtcC5kaXJjbXAuY29tbW9uX2Z1bm55WAEAAAAtdHI7BgAAWB4AAABtaW1ldHlwZXMuTWltZVR5cGVzLnN1ZmZpeF9tYXByPAYAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWltZXR5cGVzLmh0bWwjbWltZXR5cGVzLk1pbWVUeXBlcy5zdWZmaXhfbWFwWAEAAAAtdHI9BgAAWBwAAABudW1iZXJzLlJhdGlvbmFsLmRlbm9taW5hdG9ycj4GAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L251bWJlcnMuaHRtbCNudW1iZXJzLlJhdGlvbmFsLmRlbm9taW5hdG9yWAEAAAAtdHI/BgAAWA4AAABpby5GaWxlSU8ubmFtZXJABgAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pby5odG1sI2lvLkZpbGVJTy5uYW1lWAEAAAAtdHJBBgAAWBgAAABkb2N0ZXN0LkRvY1Rlc3QuZmlsZW5hbWVyQgYAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRG9jVGVzdC5maWxlbmFtZVgBAAAALXRyQwYAAFgZAAAAZmlsZWNtcC5kaXJjbXAucmlnaHRfbGlzdHJEBgAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9maWxlY21wLmh0bWwjZmlsZWNtcC5kaXJjbXAucmlnaHRfbGlzdFgBAAAALXRyRQYAAFgWAAAAcG9wZW4yLlBvcGVuMy5jaGlsZGVycnJGBgAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wb3BlbjIuaHRtbCNwb3BlbjIuUG9wZW4zLmNoaWxkZXJyWAEAAAAtdHJHBgAAWC0AAAB4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuQ3VycmVudExpbmVOdW1iZXJySAYAAChqaQEAAGpqAQAAWFwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5DdXJyZW50TGluZU51bWJlclgBAAAALXRySQYAAFgVAAAAZmlsZWNtcC5kaXJjbXAuY29tbW9uckoGAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZpbGVjbXAuaHRtbCNmaWxlY21wLmRpcmNtcC5jb21tb25YAQAAAC10cksGAABYFQAAAHRhcmZpbGUuVGFyRmlsZS5wb3NpeHJMBgAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJGaWxlLnBvc2l4WAEAAAAtdHJNBgAAWB8AAABvcHRwYXJzZS5PcHRpb24uY2FsbGJhY2tfa3dhcmdzck4GAAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UuT3B0aW9uLmNhbGxiYWNrX2t3YXJnc1gBAAAALXRyTwYAAFgUAAAAYXJyYXkuYXJyYXkudHlwZWNvZGVyUAYAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXJyYXkuaHRtbCNhcnJheS5hcnJheS50eXBlY29kZVgBAAAALXRyUQYAAFgaAAAAdW5pdHRlc3QuVGVzdFJlc3VsdC5lcnJvcnNyUgYAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0UmVzdWx0LmVycm9yc1gBAAAALXRyUwYAAFgUAAAAZGF0ZXRpbWUudGltZS5taW51dGVyVAYAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS50aW1lLm1pbnV0ZVgBAAAALXRyVQYAAFgUAAAAdGFyZmlsZS5UYXJJbmZvLm1vZGVyVgYAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuVGFySW5mby5tb2RlWAEAAAAtdHJXBgAAWBQAAABudW1iZXJzLkNvbXBsZXguaW1hZ3JYBgAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9udW1iZXJzLmh0bWwjbnVtYmVycy5Db21wbGV4LmltYWdYAQAAAC10clkGAABYIQAAAHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yLmNtZHJaBgAAKGppAQAAamoBAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IuY21kWAEAAAAtdHJbBgAAWBkAAABzcWxpdGUzLkN1cnNvci5jb25uZWN0aW9uclwGAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLkN1cnNvci5jb25uZWN0aW9uWAEAAAAtdHJdBgAAWBIAAABzaGxleC5zaGxleC5saW5lbm9yXgYAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2hsZXguaHRtbCNzaGxleC5zaGxleC5saW5lbm9YAQAAAC10cl8GAABYEgAAAHJlcHIuUmVwci5tYXh0dXBsZXJgBgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXByLmh0bWwjcmVwci5SZXByLm1heHR1cGxlWAEAAAAtdHJhBgAAWBQAAABkb2N0ZXN0LkRvY1Rlc3QubmFtZXJiBgAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5Eb2NUZXN0Lm5hbWVYAQAAAC10cmMGAABYFgAAAHNobGV4LnNobGV4LndoaXRlc3BhY2VyZAYAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2hsZXguaHRtbCNzaGxleC5zaGxleC53aGl0ZXNwYWNlWAEAAAAtdHJlBgAAWCQAAABzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvci5vdXRwdXRyZgYAAChqaQEAAGpqAQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI3N1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yLm91dHB1dFgBAAAALXRyZwYAAFg0AAAAQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5jbGllbnRfYWRkcmVzc3JoBgAAKGppAQAAamoBAABYagAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXNlaHR0cHNlcnZlci5odG1sI0Jhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuY2xpZW50X2FkZHJlc3NYAQAAAC10cmkGAABYGgAAAHVuaXR0ZXN0LlRlc3RSZXN1bHQuYnVmZmVycmoGAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdFJlc3VsdC5idWZmZXJYAQAAAC10cmsGAABYFwAAAG9wdHBhcnNlLk9wdGlvbi5jaG9pY2VzcmwGAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UuT3B0aW9uLmNob2ljZXNYAQAAAC10cm0GAABYIAAAAHN1YnByb2Nlc3MuU1RBUlRVUElORk8uaFN0ZElucHV0cm4GAAAoamkBAABqagEAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLlNUQVJUVVBJTkZPLmhTdGRJbnB1dFgBAAAALXRybwYAAFgOAAAAZmlsZS5zb2Z0c3BhY2VycAYAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNmaWxlLnNvZnRzcGFjZVgBAAAALXRycQYAAFgLAAAAZmlsZS5jbG9zZWRycgYAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNmaWxlLmNsb3NlZFgBAAAALXRycwYAAFgYAAAAY29va2llbGliLkNvb2tpZS5yZmMyMTA5cnQGAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5Db29raWUucmZjMjEwOVgBAAAALXRydQYAAFgTAAAAbWVtb3J5dmlldy5yZWFkb25seXJ2BgAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI21lbW9yeXZpZXcucmVhZG9ubHlYAQAAAC10cncGAABYHQAAAGRhdGV0aW1lLmRhdGV0aW1lLm1pY3Jvc2Vjb25kcngGAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZXRpbWUubWljcm9zZWNvbmRYAQAAAC10cnkGAABYFAAAAG9wdHBhcnNlLk9wdGlvbi50eXBlcnoGAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UuT3B0aW9uLnR5cGVYAQAAAC10cnsGAABYHAAAAHVuaXR0ZXN0LlRlc3RSZXN1bHQuZmFpbGZhc3RyfAYAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0UmVzdWx0LmZhaWxmYXN0WAEAAAAtdHJ9BgAAWB4AAABlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuZXBpbG9ndWVyfgYAAChqaQEAAGpqAQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS5lcGlsb2d1ZVgBAAAALXRyfwYAAFgeAAAAVXNlckRpY3QuSXRlcmFibGVVc2VyRGljdC5kYXRhcoAGAAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VzZXJkaWN0Lmh0bWwjVXNlckRpY3QuSXRlcmFibGVVc2VyRGljdC5kYXRhWAEAAAAtdHKBBgAAWA0AAABjbWQuQ21kLmludHJvcoIGAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NtZC5odG1sI2NtZC5DbWQuaW50cm9YAQAAAC10coMGAABYEgAAAG1lbW9yeXZpZXcuc3RyaWRlc3KEBgAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI21lbW9yeXZpZXcuc3RyaWRlc1gBAAAALXRyhQYAAFgSAAAAc2hsZXguc2hsZXguaW5maWxlcoYGAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NobGV4Lmh0bWwjc2hsZXguc2hsZXguaW5maWxlWAEAAAAtdHKHBgAAWBkAAABtdWx0aWZpbGUuTXVsdGlGaWxlLmxldmVscogGAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpZmlsZS5odG1sI211bHRpZmlsZS5NdWx0aUZpbGUubGV2ZWxYAQAAAC10cokGAABYFwAAAHhtbC5kb20uTm9kZS5wYXJlbnROb2RlcooGAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLk5vZGUucGFyZW50Tm9kZVgBAAAALXRyiwYAAFgUAAAAZGF0ZXRpbWUudGltZS5zZWNvbmRyjAYAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS50aW1lLnNlY29uZFgBAAAALXRyjQYAAFgOAAAAaW8uRmlsZUlPLm1vZGVyjgYAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW8uaHRtbCNpby5GaWxlSU8ubW9kZVgBAAAALXRyjwYAAFgXAAAAZGF0ZXRpbWUuZGF0ZXRpbWUubW9udGhykAYAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS5tb250aFgBAAAALXRykQYAAFgdAAAAemlwZmlsZS5aaXBJbmZvLmV4dGVybmFsX2F0dHJykgYAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGZpbGUuWmlwSW5mby5leHRlcm5hbF9hdHRyWAEAAAAtdHKTBgAAWCUAAAB1cmxsaWIyLkhUVFBDb29raWVQcm9jZXNzb3IuY29va2llamFycpQGAAAoamkBAABqagEAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLkhUVFBDb29raWVQcm9jZXNzb3IuY29va2llamFyWAEAAAAtdHKVBgAAWBoAAABzcWxpdGUzLkN1cnNvci5kZXNjcmlwdGlvbnKWBgAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy5DdXJzb3IuZGVzY3JpcHRpb25YAQAAAC10cpcGAABYEQAAAGRhdGV0aW1lLmRhdGUubWF4cpgGAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZS5tYXhYAQAAAC10cpkGAABYEwAAAHRhcmZpbGUuVGFySW5mby51aWRymgYAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuVGFySW5mby51aWRYAQAAAC10cpsGAABYFwAAAHppcGZpbGUuWmlwSW5mby5jb21tZW50cpwGAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLlppcEluZm8uY29tbWVudFgBAAAALXRynQYAAFgWAAAAc3VicHJvY2Vzcy5Qb3Blbi5zdGRpbnKeBgAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5Qb3Blbi5zdGRpblgBAAAALXRynwYAAFguAAAAeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLm9yZGVyZWRfYXR0cmlidXRlc3KgBgAAKGppAQAAamoBAABYXQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLm9yZGVyZWRfYXR0cmlidXRlc1gBAAAALXRyoQYAAFgUAAAAcHljbGJyLkZ1bmN0aW9uLmZpbGVyogYAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHljbGJyLmh0bWwjcHljbGJyLkZ1bmN0aW9uLmZpbGVYAQAAAC10cqMGAABYGwAAAHhtbC5kb20uTmFtZWROb2RlTWFwLmxlbmd0aHKkBgAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5OYW1lZE5vZGVNYXAubGVuZ3RoWAEAAAAtdHKlBgAAWCAAAABleGNlcHRpb25zLlVuaWNvZGVFcnJvci5lbmNvZGluZ3KmBgAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5Vbmljb2RlRXJyb3IuZW5jb2RpbmdYAQAAAC10cqcGAABYEgAAAHJlcHIuUmVwci5tYXhsZXZlbHKoBgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXByLmh0bWwjcmVwci5SZXByLm1heGxldmVsWAEAAAAtdHKpBgAAWCcAAAB0ZXh0d3JhcC5UZXh0V3JhcHBlci5yZXBsYWNlX3doaXRlc3BhY2VyqgYAAChqaQEAAGpqAQAAWFcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGV4dHdyYXAuaHRtbCN0ZXh0d3JhcC5UZXh0V3JhcHBlci5yZXBsYWNlX3doaXRlc3BhY2VYAQAAAC10cqsGAABYFAAAAHN0cnVjdC5TdHJ1Y3QuZm9ybWF0cqwGAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cnVjdC5odG1sI3N0cnVjdC5TdHJ1Y3QuZm9ybWF0WAEAAAAtdHKtBgAAWBEAAABwb3BlbjIuUG9wZW4zLnBpZHKuBgAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wb3BlbjIuaHRtbCNwb3BlbjIuUG9wZW4zLnBpZFgBAAAALXRyrwYAAFgiAAAAY3Vyc2VzLnRleHRwYWQuVGV4dGJveC5zdHJpcHNwYWNlc3KwBgAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMudGV4dHBhZC5UZXh0Ym94LnN0cmlwc3BhY2VzWAEAAAAtdHKxBgAAWBQAAAB0YXJmaWxlLlRhckluZm8ubmFtZXKyBgAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJJbmZvLm5hbWVYAQAAAC10crMGAABYGgAAAGNzdi5EaWFsZWN0LmxpbmV0ZXJtaW5hdG9ycrQGAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nzdi5odG1sI2Nzdi5EaWFsZWN0LmxpbmV0ZXJtaW5hdG9yWAEAAAAtdHK1BgAAdVgHAAAAYzptYWNyb3K2BgAAfXK3BgAAKFgRAAAAUHlPYmplY3RfVkFSX0hFQURyuAYAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N0cnVjdHVyZXMuaHRtbCNjLlB5T2JqZWN0X1ZBUl9IRUFEWAEAAAAtdHK5BgAAWA4AAABQeV9SRVRVUk5fTk9ORXK6BgAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbm9uZS5odG1sI2MuUHlfUkVUVVJOX05PTkVYAQAAAC10crsGAABYBwAAAFB5X1RZUEVyvAYAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N0cnVjdHVyZXMuaHRtbCNjLlB5X1RZUEVYAQAAAC10cr0GAABYBwAAAFB5X1NJWkVyvgYAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N0cnVjdHVyZXMuaHRtbCNjLlB5X1NJWkVYAQAAAC10cr8GAABYDQAAAFB5T2JqZWN0X0hFQURywAYAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N0cnVjdHVyZXMuaHRtbCNjLlB5T2JqZWN0X0hFQURYAQAAAC10csEGAABYDwAAAFB5X1JFVFVSTl9GQUxTRXLCBgAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYm9vbC5odG1sI2MuUHlfUkVUVVJOX0ZBTFNFWAEAAAAtdHLDBgAAWBIAAABQeV9VTkJMT0NLX1RIUkVBRFNyxAYAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNjLlB5X1VOQkxPQ0tfVEhSRUFEU1gBAAAALXRyxQYAAFgUAAAAUHlfRU5EX0FMTE9XX1RIUkVBRFNyxgYAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNjLlB5X0VORF9BTExPV19USFJFQURTWAEAAAAtdHLHBgAAWBYAAABQeV9CRUdJTl9BTExPV19USFJFQURTcsgGAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbml0Lmh0bWwjYy5QeV9CRUdJTl9BTExPV19USFJFQURTWAEAAAAtdHLJBgAAWAkAAABQeV9SRUZDTlRyygYAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N0cnVjdHVyZXMuaHRtbCNjLlB5X1JFRkNOVFgBAAAALXRyywYAAFgSAAAAUHlPYmplY3RfSEVBRF9JTklUcswGAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zdHJ1Y3R1cmVzLmh0bWwjYy5QeU9iamVjdF9IRUFEX0lOSVRYAQAAAC10cs0GAABYDgAAAFB5X1JFVFVSTl9UUlVFcs4GAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9ib29sLmh0bWwjYy5QeV9SRVRVUk5fVFJVRVgBAAAALXRyzwYAAFgVAAAAUHlWYXJPYmplY3RfSEVBRF9JTklUctAGAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zdHJ1Y3R1cmVzLmh0bWwjYy5QeVZhck9iamVjdF9IRUFEX0lOSVRYAQAAAC10ctEGAABYEAAAAFB5X0JMT0NLX1RIUkVBRFNy0gYAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNjLlB5X0JMT0NLX1RIUkVBRFNYAQAAAC10ctMGAAB1WAkAAABzdGQ6bGFiZWx9ctQGAAAoWAkAAABtZXRhLWRhdGFy1QYAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9zZXR1cHNjcmlwdC5odG1sI21ldGEtZGF0YVgUAAAAQWRkaXRpb25hbCBtZXRhLWRhdGF0ctYGAABYDgAAAHR1dC1leGNlcHRpb25zctcGAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9lcnJvcnMuaHRtbCN0dXQtZXhjZXB0aW9uc1gKAAAARXhjZXB0aW9uc3Ry2AYAAFgJAAAAZXZhbG9yZGVyctkGAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNldmFsb3JkZXJYEAAAAEV2YWx1YXRpb24gb3JkZXJ0ctoGAABYEgAAAGF0dHJpYnV0ZXMtb2JqZWN0c3LbBgAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI2F0dHJpYnV0ZXMtb2JqZWN0c1gYAAAAVGhlIEF0dHJpYnV0ZXMgSW50ZXJmYWNldHLcBgAAWBoAAAB0dXQtY29tbWFuZC1saW5lLWFyZ3VtZW50c3LdBgAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvc3RkbGliLmh0bWwjdHV0LWNvbW1hbmQtbGluZS1hcmd1bWVudHNYFgAAAENvbW1hbmQgTGluZSBBcmd1bWVudHN0ct4GAABYDwAAAHdlYWtyZWYtc3VwcG9ydHLfBgAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZXh0ZW5kaW5nL25ld3R5cGVzLmh0bWwjd2Vha3JlZi1zdXBwb3J0WBYAAABXZWFrIFJlZmVyZW5jZSBTdXBwb3J0dHLgBgAAWAwAAABzcGVjaWFsbmFtZXNy4QYAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNzcGVjaWFsbmFtZXNYFAAAAFNwZWNpYWwgbWV0aG9kIG5hbWVzdHLiBgAAWA4AAABjb2VyY2lvbi1ydWxlc3LjBgAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI2NvZXJjaW9uLXJ1bGVzWA4AAABDb2VyY2lvbiBydWxlc3Ry5AYAAFgMAAAAcG9wMy1leGFtcGxlcuUGAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BvcGxpYi5odG1sI3BvcDMtZXhhbXBsZVgMAAAAUE9QMyBFeGFtcGxldHLmBgAAWAwAAABtc3ZjcnQtb3RoZXJy5wYAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXN2Y3J0Lmh0bWwjbXN2Y3J0LW90aGVyWA8AAABPdGhlciBGdW5jdGlvbnN0cugGAABYDQAAAHR1dC1icmllZnRvdXJy6QYAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL3N0ZGxpYi5odG1sI3R1dC1icmllZnRvdXJYIgAAAEJyaWVmIFRvdXIgb2YgdGhlIFN0YW5kYXJkIExpYnJhcnl0cuoGAABYDAAAAHVzaW5nLW9uLW1hY3LrBgAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvbWFjLmh0bWwjdXNpbmctb24tbWFjWBsAAABVc2luZyBQeXRob24gb24gYSBNYWNpbnRvc2h0cuwGAABYDgAAAHBvcGVuMy1vYmplY3Rzcu0GAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BvcGVuMi5odG1sI3BvcGVuMy1vYmplY3RzWBkAAABQb3BlbjMgYW5kIFBvcGVuNCBPYmplY3RzdHLuBgAAWBAAAAB1c2luZy1vbi1nZW5lcmFscu8GAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy9jbWRsaW5lLmh0bWwjdXNpbmctb24tZ2VuZXJhbFgcAAAAQ29tbWFuZCBsaW5lIGFuZCBlbnZpcm9ubWVudHRy8AYAAFgTAAAAZWxlbWVudHRyZWUtc2VjdGlvbnLxBgAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi43Lmh0bWwjZWxlbWVudHRyZWUtc2VjdGlvblgfAAAAVXBkYXRlZCBtb2R1bGU6IEVsZW1lbnRUcmVlIDEuM3Ry8gYAAFgPAAAAc3VtbWFyeS1vYmplY3RzcvMGAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI3N1bW1hcnktb2JqZWN0c1gbAAAAU3VtbWFyeSBJbmZvcm1hdGlvbiBPYmplY3RzdHL0BgAAWBAAAABkbnQtdHlwZS1tZXRob2RzcvUGAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9leHRlbmRpbmcvbmV3dHlwZXMuaHRtbCNkbnQtdHlwZS1tZXRob2RzWAwAAABUeXBlIE1ldGhvZHN0cvYGAABYFQAAAGluc3Qtbm9uLW1zLWNvbXBpbGVyc3L3BgAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaW5zdGFsbC9pbmRleC5odG1sI2luc3Qtbm9uLW1zLWNvbXBpbGVyc1goAAAAVXNpbmcgbm9uLU1pY3Jvc29mdCBjb21waWxlcnMgb24gV2luZG93c3Ry+AYAAFgbAAAAb3B0cGFyc2UtY2FsbGJhY2stZXhhbXBsZS00cvkGAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UtY2FsbGJhY2stZXhhbXBsZS00WC0AAABDYWxsYmFjayBleGFtcGxlIDQ6IGNoZWNrIGFyYml0cmFyeSBjb25kaXRpb250cvoGAABYDwAAAGZ1bmMtbWVtb3J5dmlld3L7BgAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNmdW5jLW1lbW9yeXZpZXdYAQAAAC10cvwGAABYFAAAAGh0dHByZXNwb25zZS1vYmplY3Rzcv0GAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0dHBsaWIuaHRtbCNodHRwcmVzcG9uc2Utb2JqZWN0c1gUAAAASFRUUFJlc3BvbnNlIE9iamVjdHN0cv4GAABYGwAAAHR1dC1zdHJpbmctcGF0dGVybi1tYXRjaGluZ3L/BgAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvc3RkbGliLmh0bWwjdHV0LXN0cmluZy1wYXR0ZXJuLW1hdGNoaW5nWBcAAABTdHJpbmcgUGF0dGVybiBNYXRjaGluZ3RyAAcAAFgTAAAAemlwZmlsZS1jb21tYW5kbGluZXIBBwAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS1jb21tYW5kbGluZVgWAAAAQ29tbWFuZC1MaW5lIEludGVyZmFjZXRyAgcAAFgHAAAAZ2VuZXhwcnIDBwAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ2VuZXhwclgVAAAAR2VuZXJhdG9yIGV4cHJlc3Npb25zdHIEBwAAWA0AAABtb2R1bGVvYmplY3RzcgUHAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tb2R1bGUuaHRtbCNtb2R1bGVvYmplY3RzWA4AAABNb2R1bGUgT2JqZWN0c3RyBgcAAFgHAAAAbG9naWNhbHIHBwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNsb2dpY2FsWA0AAABMb2dpY2FsIGxpbmVzdHIIBwAAWA4AAABhcGktZXhjZXB0aW9uc3IJBwAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW50cm8uaHRtbCNhcGktZXhjZXB0aW9uc1gKAAAARXhjZXB0aW9uc3RyCgcAAFgOAAAAY29tcGxleG9iamVjdHNyCwcAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvbXBsZXguaHRtbCNjb21wbGV4b2JqZWN0c1gWAAAAQ29tcGxleCBOdW1iZXIgT2JqZWN0c3RyDAcAAFgYAAAAbXVsdGlwcm9jZXNzaW5nLW1hbmFnZXJzcg0HAAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy1tYW5hZ2Vyc1gIAAAATWFuYWdlcnN0cg4HAABYEwAAAGV4dGVuZGluZy1kaXN0dXRpbHNyDwcAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9leHRlbmRpbmcuaHRtbCNleHRlbmRpbmctZGlzdHV0aWxzWBMAAABFeHRlbmRpbmcgRGlzdHV0aWxzdHIQBwAAWCAAAABvcHRwYXJzZS1zdGFuZGFyZC1vcHRpb24tYWN0aW9uc3IRBwAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLXN0YW5kYXJkLW9wdGlvbi1hY3Rpb25zWBcAAABTdGFuZGFyZCBvcHRpb24gYWN0aW9uc3RyEgcAAFgIAAAAdmVyeWhpZ2hyEwcAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3ZlcnloaWdoLmh0bWwjdmVyeWhpZ2hYGQAAAFRoZSBWZXJ5IEhpZ2ggTGV2ZWwgTGF5ZXJ0chQHAABYFQAAAHBhcnNldHVwbGVhbmRrZXl3b3Jkc3IVBwAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZXh0ZW5kaW5nL2V4dGVuZGluZy5odG1sI3BhcnNldHVwbGVhbmRrZXl3b3Jkc1gqAAAAS2V5d29yZCBQYXJhbWV0ZXJzIGZvciBFeHRlbnNpb24gRnVuY3Rpb25zdHIWBwAAWBAAAAB0dXQtc3ludGF4ZXJyb3JzchcHAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9lcnJvcnMuaHRtbCN0dXQtc3ludGF4ZXJyb3JzWA0AAABTeW50YXggRXJyb3JzdHIYBwAAWAcAAABib29sZWFuchkHAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjYm9vbGVhblgjAAAAQm9vbGVhbiBPcGVyYXRpb25zIOKAlCBhbmQsIG9yLCBub3R0choHAABYGQAAAG9wdHBhcnNlLWFkZGluZy1uZXctdHlwZXNyGwcAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS1hZGRpbmctbmV3LXR5cGVzWBAAAABBZGRpbmcgbmV3IHR5cGVzdHIcBwAAWAsAAABjbWQtb2JqZWN0c3IdBwAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jbWQuaHRtbCNjbWQtb2JqZWN0c1gLAAAAQ21kIE9iamVjdHN0ch4HAABYBQAAAHdoaWxlch8HAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCN3aGlsZVgTAAAAVGhlIHdoaWxlIHN0YXRlbWVudHRyIAcAAFgNAAAAdHV0LW1vcmVsaXN0c3IhBwAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvZGF0YXN0cnVjdHVyZXMuaHRtbCN0dXQtbW9yZWxpc3RzWA0AAABNb3JlIG9uIExpc3RzdHIiBwAAWAwAAABjZ2ktc2VjdXJpdHlyIwcAAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2dpLmh0bWwjY2dpLXNlY3VyaXR5WBUAAABDYXJpbmcgYWJvdXQgc2VjdXJpdHl0ciQHAABYDgAAAGNzdi1mbXQtcGFyYW1zciUHAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nzdi5odG1sI2Nzdi1mbXQtcGFyYW1zWCIAAABEaWFsZWN0cyBhbmQgRm9ybWF0dGluZyBQYXJhbWV0ZXJzdHImBwAAWA8AAABwcm9maWxlLWluc3RhbnRyJwcAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHJvZmlsZS5odG1sI3Byb2ZpbGUtaW5zdGFudFgXAAAASW5zdGFudCBVc2Vy4oCZcyBNYW51YWx0cigHAABYEQAAAGVsZW1lbnR0cmVlLXhwYXRocikHAAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI2VsZW1lbnR0cmVlLXhwYXRoWA0AAABYUGF0aCBzdXBwb3J0dHIqBwAAWAwAAAB0dXQtYXBwZW5kaXhyKwcAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2FwcGVuZGl4Lmh0bWwjdHV0LWFwcGVuZGl4WAgAAABBcHBlbmRpeHRyLAcAAFgLAAAAb3MtZmlsZS1kaXJyLQcAAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy1maWxlLWRpclgVAAAARmlsZXMgYW5kIERpcmVjdG9yaWVzdHIuBwAAWBUAAABzaW1wbGUteG1scnBjLXNlcnZlcnNyLwcAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2ltcGxleG1scnBjc2VydmVyLmh0bWwjc2ltcGxlLXhtbHJwYy1zZXJ2ZXJzWBoAAABTaW1wbGVYTUxSUENTZXJ2ZXIgT2JqZWN0c3RyMAcAAFgQAAAAZG9tLXR5cGUtbWFwcGluZ3IxBwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjZG9tLXR5cGUtbWFwcGluZ1gMAAAAVHlwZSBNYXBwaW5ndHIyBwAAWBQAAABkb20tbm9kZWxpc3Qtb2JqZWN0c3IzBwAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjZG9tLW5vZGVsaXN0LW9iamVjdHNYEAAAAE5vZGVMaXN0IE9iamVjdHN0cjQHAABYDwAAAHRlcm1pb3MtZXhhbXBsZXI1BwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZXJtaW9zLmh0bWwjdGVybWlvcy1leGFtcGxlWAEAAAAtdHI2BwAAWBIAAABkb2N0ZXN0LWV4Y2VwdGlvbnNyNwcAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QtZXhjZXB0aW9uc1gWAAAAV2hhdCBBYm91dCBFeGNlcHRpb25zP3RyOAcAAFghAAAAY29sbGVjdGlvbnMtYWJzdHJhY3QtYmFzZS1jbGFzc2VzcjkHAAAoamkBAABqagEAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMtYWJzdHJhY3QtYmFzZS1jbGFzc2VzWCEAAABDb2xsZWN0aW9ucyBBYnN0cmFjdCBCYXNlIENsYXNzZXN0cjoHAABYDgAAAGRvbS1leGNlcHRpb25zcjsHAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCNkb20tZXhjZXB0aW9uc1gKAAAARXhjZXB0aW9uc3RyPAcAAFgaAAAAb3B0cGFyc2Utb3B0aW9uLWF0dHJpYnV0ZXNyPQcAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS1vcHRpb24tYXR0cmlidXRlc1gRAAAAT3B0aW9uIGF0dHJpYnV0ZXN0cj4HAABYEAAAAHdhcm5pbmctc3VwcHJlc3NyPwcAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2FybmluZ3MuaHRtbCN3YXJuaW5nLXN1cHByZXNzWCAAAABUZW1wb3JhcmlseSBTdXBwcmVzc2luZyBXYXJuaW5nc3RyQAcAAFgIAAAAa2V5d29yZHNyQQcAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwja2V5d29yZHNYCAAAAEtleXdvcmRzdHJCBwAAWBEAAABtaW1ldHlwZXMtb2JqZWN0c3JDBwAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW1ldHlwZXMuaHRtbCNtaW1ldHlwZXMtb2JqZWN0c1gRAAAATWltZVR5cGVzIE9iamVjdHN0ckQHAABYCQAAAGltcG9ydGluZ3JFBwAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW1wb3J0Lmh0bWwjaW1wb3J0aW5nWBEAAABJbXBvcnRpbmcgTW9kdWxlc3RyRgcAAFgTAAAAYWRkcmVzc2xpc3Qtb2JqZWN0c3JHBwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZmM4MjIuaHRtbCNhZGRyZXNzbGlzdC1vYmplY3RzWBMAAABBZGRyZXNzTGlzdCBPYmplY3RzdHJIBwAAWA4AAAB1bmljb2Rlb2JqZWN0c3JJBwAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI3VuaWNvZGVvYmplY3RzWBoAAABVbmljb2RlIE9iamVjdHMgYW5kIENvZGVjc3RySgcAAFgcAAAAZGlzdHV0aWxzLWluc3RhbGxpbmctc2NyaXB0c3JLBwAAKGppAQAAamoBAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL3NldHVwc2NyaXB0Lmh0bWwjZGlzdHV0aWxzLWluc3RhbGxpbmctc2NyaXB0c1gSAAAASW5zdGFsbGluZyBTY3JpcHRzdHJMBwAAWAQAAABlbHNlck0HAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCNlbHNlWBAAAABUaGUgaWYgc3RhdGVtZW50dHJOBwAAWA8AAAB0dXQta2V5YmluZGluZ3NyTwcAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2ludGVyYWN0aXZlLmh0bWwjdHV0LWtleWJpbmRpbmdzWAwAAABLZXkgQmluZGluZ3N0clAHAABYFAAAADY0LWJpdC1hY2Nlc3MtcmlnaHRzclEHAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNiaXQtYWNjZXNzLXJpZ2h0c1gPAAAANjQtYml0IFNwZWNpZmljdHJSBwAAWAYAAABvYmplY3RyUwcAAChqaQEAAGpqAQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL29iamVjdC5odG1sI29iamVjdFgPAAAAT2JqZWN0IFByb3RvY29sdHJUBwAAWB8AAABsb2dnaW5nLWNvbmZpZy1kaWN0LWluY3JlbWVudGFsclUHAAAoamkBAABqagEAAFhVAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuY29uZmlnLmh0bWwjbG9nZ2luZy1jb25maWctZGljdC1pbmNyZW1lbnRhbFgZAAAASW5jcmVtZW50YWwgQ29uZmlndXJhdGlvbnRyVgcAAFgQAAAAcGFja2FnZS1yZWdpc3RlcnJXBwAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL3BhY2thZ2VpbmRleC5odG1sI3BhY2thZ2UtcmVnaXN0ZXJYFAAAAFRoZSByZWdpc3RlciBjb21tYW5kdHJYBwAAWBAAAABpdGVyYXRvci1vYmplY3RzclkHAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pdGVyYXRvci5odG1sI2l0ZXJhdG9yLW9iamVjdHNYEAAAAEl0ZXJhdG9yIE9iamVjdHN0cloHAABYDAAAAG1zdmNydC1maWxlc3JbBwAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc3ZjcnQuaHRtbCNtc3ZjcnQtZmlsZXNYDwAAAEZpbGUgT3BlcmF0aW9uc3RyXAcAAFgMAAAAY29udGV4dC1pbmZvcl0HAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9ob3d0by9sb2dnaW5nLWNvb2tib29rLmh0bWwjY29udGV4dC1pbmZvWDQAAABBZGRpbmcgY29udGV4dHVhbCBpbmZvcm1hdGlvbiB0byB5b3VyIGxvZ2dpbmcgb3V0cHV0dHJeBwAAWA4AAAB0dXQtc2VhcmNocGF0aHJfBwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvbW9kdWxlcy5odG1sI3R1dC1zZWFyY2hwYXRoWBYAAABUaGUgTW9kdWxlIFNlYXJjaCBQYXRodHJgBwAAWAoAAABleGNlcHRpb25zcmEHAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhlY3V0aW9ubW9kZWwuaHRtbCNleGNlcHRpb25zWAoAAABFeGNlcHRpb25zdHJiBwAAWBIAAABhbGxvY2F0aW5nLW9iamVjdHNyYwcAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2FsbG9jYXRpb24uaHRtbCNhbGxvY2F0aW5nLW9iamVjdHNYHgAAAEFsbG9jYXRpbmcgT2JqZWN0cyBvbiB0aGUgSGVhcHRyZAcAAFgIAAAAaXRlcmF0b3JyZQcAAChqaQEAAGpqAQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2l0ZXIuaHRtbCNpdGVyYXRvclgRAAAASXRlcmF0b3IgUHJvdG9jb2x0cmYHAABYEAAAAHN0cnVjdC1hbGlnbm1lbnRyZwcAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RydWN0Lmh0bWwjc3RydWN0LWFsaWdubWVudFgfAAAAQnl0ZSBPcmRlciwgU2l6ZSwgYW5kIEFsaWdubWVudHRyaAcAAFgTAAAAcHJvZmlsZS1saW1pdGF0aW9uc3JpBwAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wcm9maWxlLmh0bWwjcHJvZmlsZS1saW1pdGF0aW9uc1gLAAAATGltaXRhdGlvbnN0cmoHAABYDgAAAHBwcmludC1leGFtcGxlcmsHAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BwcmludC5odG1sI3BwcmludC1leGFtcGxlWA4AAABwcHJpbnQgRXhhbXBsZXRybAcAAFgLAAAAdHV0LXN0cmluZ3NybQcAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2ludHJvZHVjdGlvbi5odG1sI3R1dC1zdHJpbmdzWAcAAABTdHJpbmdzdHJuBwAAWA8AAABtYWlsYm94LW9iamVjdHNybwcAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3gtb2JqZWN0c1gPAAAATWFpbGJveCBvYmplY3RzdHJwBwAAWBQAAABkb20tYWNjZXNzb3ItbWV0aG9kc3JxBwAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjZG9tLWFjY2Vzc29yLW1ldGhvZHNYEAAAAEFjY2Vzc29yIE1ldGhvZHN0cnIHAABYFQAAAGNvbnRlbnRzLW9mLW1vZHVsZS1yZXJzBwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sI2NvbnRlbnRzLW9mLW1vZHVsZS1yZVgPAAAATW9kdWxlIENvbnRlbnRzdHJ0BwAAWAcAAABwZXAtMzUycnUHAAAoamkBAABqagEAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjUuaHRtbCNwZXAtMzUyWCgAAABQRVAgMzUyOiBFeGNlcHRpb25zIGFzIE5ldy1TdHlsZSBDbGFzc2VzdHJ2BwAAWAYAAABhc3NlcnRydwcAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNhc3NlcnRYFAAAAFRoZSBhc3NlcnQgc3RhdGVtZW50dHJ4BwAAWA4AAABzdHJlYW0taGFuZGxlcnJ5BwAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjc3RyZWFtLWhhbmRsZXJYDQAAAFN0cmVhbUhhbmRsZXJ0cnoHAABYDwAAAGRpc3R1dGlscy1pbnRyb3J7BwAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2ludHJvZHVjdGlvbi5odG1sI2Rpc3R1dGlscy1pbnRyb1gcAAAAQW4gSW50cm9kdWN0aW9uIHRvIERpc3R1dGlsc3RyfAcAAFgLAAAAdHV0LWhpc3RvcnlyfQcAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2ludGVyYWN0aXZlLmh0bWwjdHV0LWhpc3RvcnlYFAAAAEhpc3RvcnkgU3Vic3RpdHV0aW9udHJ+BwAAWA8AAAB3YXJuaW5nLXRlc3RpbmdyfwcAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2FybmluZ3MuaHRtbCN3YXJuaW5nLXRlc3RpbmdYEAAAAFRlc3RpbmcgV2FybmluZ3N0coAHAABYEQAAAG11bHRpZmlsZS1leGFtcGxlcoEHAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpZmlsZS5odG1sI211bHRpZmlsZS1leGFtcGxlWBEAAABNdWx0aUZpbGUgRXhhbXBsZXRyggcAAFgIAAAAYm9vbGVhbnNygwcAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2Jvb2xlYW5zWBIAAABCb29sZWFuIG9wZXJhdGlvbnN0coQHAABYDAAAAG51bGxwb2ludGVyc3KFBwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZXh0ZW5kaW5nL2V4dGVuZGluZy5odG1sI251bGxwb2ludGVyc1gNAAAATlVMTCBQb2ludGVyc3RyhgcAAFgRAAAAc3RyaW5nLWZvcm1hdHRpbmdyhwcAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNzdHJpbmctZm9ybWF0dGluZ1gcAAAAU3RyaW5nIEZvcm1hdHRpbmcgT3BlcmF0aW9uc3RyiAcAAFgUAAAAdHV0LW1vZHVsZXNhc3NjcmlwdHNyiQcAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL21vZHVsZXMuaHRtbCN0dXQtbW9kdWxlc2Fzc2NyaXB0c1gcAAAARXhlY3V0aW5nIG1vZHVsZXMgYXMgc2NyaXB0c3RyigcAAFgJAAAAdHV0LWVycm9ycosHAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9hcHBlbmRpeC5odG1sI3R1dC1lcnJvclgOAAAARXJyb3IgSGFuZGxpbmd0cowHAABYEQAAAGRhdGV0aW1lLWRhdGV0aW1lco0HAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUtZGF0ZXRpbWVYEAAAAGRhdGV0aW1lIE9iamVjdHN0co4HAABYDQAAAGZvcm1hdHN0cmluZ3NyjwcAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjZm9ybWF0c3RyaW5nc1gUAAAARm9ybWF0IFN0cmluZyBTeW50YXh0cpAHAABYEgAAAGNvb2tpZWxpYi1leGFtcGxlc3KRBwAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWItZXhhbXBsZXNYCAAAAEV4YW1wbGVzdHKSBwAAWA0AAABuZXRyYy1vYmplY3RzcpMHAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L25ldHJjLmh0bWwjbmV0cmMtb2JqZWN0c1gNAAAAbmV0cmMgT2JqZWN0c3RylAcAAFgVAAAAaG93dG8tbWluaW1hbC1leGFtcGxlcpUHAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9ob3d0by9sb2dnaW5nLmh0bWwjaG93dG8tbWluaW1hbC1leGFtcGxlWBAAAABBIHNpbXBsZSBleGFtcGxldHKWBwAAWA0AAABzcWxpdGUzLXR5cGVzcpcHAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLXR5cGVzWBcAAABTUUxpdGUgYW5kIFB5dGhvbiB0eXBlc3RymAcAAFgPAAAAZGVjaW1hbC1zaWduYWxzcpkHAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLXNpZ25hbHNYBwAAAFNpZ25hbHN0cpoHAABYBgAAAG5hbWluZ3KbBwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4ZWN1dGlvbm1vZGVsLmh0bWwjbmFtaW5nWBIAAABOYW1pbmcgYW5kIGJpbmRpbmd0cpwHAABYCAAAAGludGVybmV0cp0HAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ludGVybmV0Lmh0bWwjaW50ZXJuZXRYHgAAAEludGVybmV0IFByb3RvY29scyBhbmQgU3VwcG9ydHRyngcAAFgLAAAAdHV0LXNjcmlwdHNynwcAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2FwcGVuZGl4Lmh0bWwjdHV0LXNjcmlwdHNYGQAAAEV4ZWN1dGFibGUgUHl0aG9uIFNjcmlwdHN0cqAHAABYDQAAAHR1dC1pdGVyYXRvcnNyoQcAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2NsYXNzZXMuaHRtbCN0dXQtaXRlcmF0b3JzWAkAAABJdGVyYXRvcnN0cqIHAABYCAAAAHBlcC0zMTE4cqMHAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjYuaHRtbCNwZXAtMzExOFghAAAAUEVQIDMxMTg6IFJldmlzZWQgQnVmZmVyIFByb3RvY29sdHKkBwAAWAkAAABkYXRhdHlwZXNypQcAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0YXR5cGVzLmh0bWwjZGF0YXR5cGVzWAoAAABEYXRhIFR5cGVzdHKmBwAAWA4AAABjb252ZXJ0aW5nLXN0c3KnBwAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wYXJzZXIuaHRtbCNjb252ZXJ0aW5nLXN0c1gVAAAAQ29udmVydGluZyBTVCBPYmplY3RzdHKoBwAAWCAAAABvcHRwYXJzZS1wdXR0aW5nLWl0LWFsbC10b2dldGhlcnKpBwAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLXB1dHRpbmctaXQtYWxsLXRvZ2V0aGVyWBcAAABQdXR0aW5nIGl0IGFsbCB0b2dldGhlcnRyqgcAAFgGAAAAbGF5b3V0cqsHAAAoamkBAABqagEAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI2xheW91dHNYBwAAAExheW91dHN0cqwHAABYFQAAAG11bHRpcGxlLWRlc3RpbmF0aW9uc3KtBwAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaG93dG8vbG9nZ2luZy1jb29rYm9vay5odG1sI211bHRpcGxlLWRlc3RpbmF0aW9uc1ggAAAATG9nZ2luZyB0byBtdWx0aXBsZSBkZXN0aW5hdGlvbnN0cq4HAABYDAAAAGN1cnNlcy1ob3d0b3KvBwAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaG93dG8vY3Vyc2VzLmh0bWwjY3Vyc2VzLWhvd3RvWB4AAABDdXJzZXMgUHJvZ3JhbW1pbmcgd2l0aCBQeXRob250crAHAABYBwAAAHBlcC0zMjhysQcAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuNS5odG1sI3BlcC0zMjhYJgAAAFBFUCAzMjg6IEFic29sdXRlIGFuZCBSZWxhdGl2ZSBJbXBvcnRzdHKyBwAAWBAAAABleGFtcGxlcy1pbXB1dGlscrMHAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltcHV0aWwuaHRtbCNleGFtcGxlcy1pbXB1dGlsWAgAAABFeGFtcGxlc3RytAcAAFgXAAAAbmV3LTI1LWNvbnRleHQtbWFuYWdlcnNytQcAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuNS5odG1sI25ldy0yNS1jb250ZXh0LW1hbmFnZXJzWBgAAABXcml0aW5nIENvbnRleHQgTWFuYWdlcnN0crYHAABYFgAAAGN0eXBlcy1hcnJheXMtcG9pbnRlcnNytwcAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLWFycmF5cy1wb2ludGVyc1gTAAAAQXJyYXlzIGFuZCBwb2ludGVyc3RyuAcAAFgLAAAAdHlwZW9iamVjdHNyuQcAAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGUuaHRtbCN0eXBlb2JqZWN0c1gMAAAAVHlwZSBPYmplY3RzdHK6BwAAWA4AAAB0dXQtYXJncGFzc2luZ3K7BwAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvaW50ZXJwcmV0ZXIuaHRtbCN0dXQtYXJncGFzc2luZ1gQAAAAQXJndW1lbnQgUGFzc2luZ3RyvAcAAFgGAAAAYWNrczI3cr0HAAAoamkBAABqagEAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjcuaHRtbCNhY2tzMjdYEAAAAEFja25vd2xlZGdlbWVudHN0cr4HAABYHgAAAG9wdHBhcnNlLXN0YW5kYXJkLW9wdGlvbi10eXBlc3K/BwAAKGppAQAAamoBAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLXN0YW5kYXJkLW9wdGlvbi10eXBlc1gVAAAAU3RhbmRhcmQgb3B0aW9uIHR5cGVzdHLABwAAWAUAAABhdG9tc3LBBwAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjYXRvbXNYBQAAAEF0b21zdHLCBwAAWAQAAABpMThucsMHAAAoamkBAABqagEAAFgwAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2kxOG4uaHRtbCNpMThuWBQAAABJbnRlcm5hdGlvbmFsaXphdGlvbnRyxAcAAFgSAAAAeGRyLXBhY2tlci1vYmplY3RzcsUHAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3hkcmxpYi5odG1sI3hkci1wYWNrZXItb2JqZWN0c1gOAAAAUGFja2VyIE9iamVjdHN0csYHAABYDQAAAGV2ZW50LW9iamVjdHNyxwcAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjZXZlbnQtb2JqZWN0c1gNAAAARXZlbnQgT2JqZWN0c3RyyAcAAFgDAAAAY2FicskHAAAoamkBAABqagEAAFgxAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI2NhYlgLAAAAQ0FCIE9iamVjdHN0csoHAABYDQAAAGV4cGF0LWV4YW1wbGVyywcAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlleHBhdC5odG1sI2V4cGF0LWV4YW1wbGVYBwAAAEV4YW1wbGV0cswHAABYFAAAAGh0dHAtaGFuZGxlci1vYmplY3Rzcs0HAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCNodHRwLWhhbmRsZXItb2JqZWN0c1gTAAAASFRUUEhhbmRsZXIgT2JqZWN0c3RyzgcAAFgIAAAAc2VxdWVuY2VyzwcAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3NlcXVlbmNlLmh0bWwjc2VxdWVuY2VYEQAAAFNlcXVlbmNlIFByb3RvY29sdHLQBwAAWBEAAABzdHJpbmctY29udmVyc2lvbnLRBwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29udmVyc2lvbi5odG1sI3N0cmluZy1jb252ZXJzaW9uWCAAAABTdHJpbmcgY29udmVyc2lvbiBhbmQgZm9ybWF0dGluZ3Ry0gcAAFgKAAAAc2V0b2JqZWN0c3LTBwAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc2V0Lmh0bWwjc2V0b2JqZWN0c1gLAAAAU2V0IE9iamVjdHN0ctQHAABYBAAAAG9wdHNy1QcAAChqaQEAAGpqAQAAWDAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuNS5odG1sI29wdHNYDQAAAE9wdGltaXphdGlvbnN0ctYHAABYDwAAAHR1dC1tb3JlY29udHJvbHLXBwAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvY29udHJvbGZsb3cuaHRtbCN0dXQtbW9yZWNvbnRyb2xYFwAAAE1vcmUgQ29udHJvbCBGbG93IFRvb2xzdHLYBwAAWAwAAABiaW5oZXgtbm90ZXNy2QcAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmluaGV4Lmh0bWwjYmluaGV4LW5vdGVzWAUAAABOb3Rlc3Ry2gcAAFgQAAAAaW1wbGljaXQtam9pbmluZ3LbBwAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNpbXBsaWNpdC1qb2luaW5nWBUAAABJbXBsaWNpdCBsaW5lIGpvaW5pbmd0ctwHAABYCQAAAGV4ZWNtb2RlbHLdBwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4ZWN1dGlvbm1vZGVsLmh0bWwjZXhlY21vZGVsWA8AAABFeGVjdXRpb24gbW9kZWx0ct4HAABYKgAAAGN0eXBlcy1hY2Nlc3NpbmctdmFsdWVzLWV4cG9ydGVkLWZyb20tZGxsc3LfBwAAKGppAQAAamoBAABYWAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMtYWNjZXNzaW5nLXZhbHVlcy1leHBvcnRlZC1mcm9tLWRsbHNYIwAAAEFjY2Vzc2luZyB2YWx1ZXMgZXhwb3J0ZWQgZnJvbSBkbGxzdHLgBwAAWBoAAABkb20taW1wbGVtZW50YXRpb24tb2JqZWN0c3LhBwAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjZG9tLWltcGxlbWVudGF0aW9uLW9iamVjdHNYGQAAAERPTUltcGxlbWVudGF0aW9uIE9iamVjdHN0cuIHAABYCgAAAHR1dC10dXBsZXNy4wcAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2RhdGFzdHJ1Y3R1cmVzLmh0bWwjdHV0LXR1cGxlc1gUAAAAVHVwbGVzIGFuZCBTZXF1ZW5jZXN0cuQHAABYFQAAAGRvY3Rlc3QtZG9jdGVzdGZpbmRlcnLlBwAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC1kb2N0ZXN0ZmluZGVyWBUAAABEb2NUZXN0RmluZGVyIG9iamVjdHN0cuYHAABYEQAAAGl0ZXJ0b29scy1yZWNpcGVzcucHAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2l0ZXJ0b29scy5odG1sI2l0ZXJ0b29scy1yZWNpcGVzWAcAAABSZWNpcGVzdHLoBwAAWBUAAABpbnN0LXN0YW5kYXJkLWluc3RhbGxy6QcAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2luc3RhbGwvaW5kZXguaHRtbCNpbnN0LXN0YW5kYXJkLWluc3RhbGxYGgAAAFN0YW5kYXJkIEJ1aWxkIGFuZCBJbnN0YWxsdHLqBwAAWBYAAABhcmdwYXJzZS1mcm9tLW9wdHBhcnNlcusHAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FyZ3BhcnNlLmh0bWwjYXJncGFyc2UtZnJvbS1vcHRwYXJzZVgXAAAAVXBncmFkaW5nIG9wdHBhcnNlIGNvZGV0cuwHAABYEQAAAGxlZ2FjeS11bml0LXRlc3Rzcu0HAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjbGVnYWN5LXVuaXQtdGVzdHNYFgAAAFJlLXVzaW5nIG9sZCB0ZXN0IGNvZGV0cu4HAABYDgAAAGRvbS1waS1vYmplY3Rzcu8HAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCNkb20tcGktb2JqZWN0c1gdAAAAUHJvY2Vzc2luZ0luc3RydWN0aW9uIE9iamVjdHN0cvAHAABYFQAAAGN1cnNlcy13aW5kb3ctb2JqZWN0c3LxBwAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMtd2luZG93LW9iamVjdHNYDgAAAFdpbmRvdyBPYmplY3RzdHLyBwAAWAsAAAB0dXQtaW50ZXJhY3LzBwAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvYXBwZW5kaXguaHRtbCN0dXQtaW50ZXJhY1gQAAAASW50ZXJhY3RpdmUgTW9kZXRy9AcAAFgMAAAAY3N2LWV4YW1wbGVzcvUHAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nzdi5odG1sI2Nzdi1leGFtcGxlc1gIAAAARXhhbXBsZXN0cvYHAABYDwAAAHJlZmVyZW5jZS1pbmRleHL3BwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2luZGV4Lmh0bWwjcmVmZXJlbmNlLWluZGV4WB0AAABUaGUgUHl0aG9uIExhbmd1YWdlIFJlZmVyZW5jZXRy+AcAAFgMAAAAdHV0LW11bHRpcGxlcvkHAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9jbGFzc2VzLmh0bWwjdHV0LW11bHRpcGxlWBQAAABNdWx0aXBsZSBJbmhlcml0YW5jZXRy+gcAAFgIAAAAbm90YXRpb25y+wcAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9pbnRyb2R1Y3Rpb24uaHRtbCNub3RhdGlvblgIAAAATm90YXRpb250cvwHAABYDwAAAGRlY2ltYWwtZGVjaW1hbHL9BwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC1kZWNpbWFsWA8AAABEZWNpbWFsIG9iamVjdHN0cv4HAABYFAAAAG1vZHVsZWZpbmRlci1leGFtcGxlcv8HAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21vZHVsZWZpbmRlci5odG1sI21vZHVsZWZpbmRlci1leGFtcGxlWB0AAABFeGFtcGxlIHVzYWdlIG9mIE1vZHVsZUZpbmRlcnRyAAgAAFgLAAAAZGljdG9iamVjdHNyAQgAAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2RpY3QuaHRtbCNkaWN0b2JqZWN0c1gSAAAARGljdGlvbmFyeSBPYmplY3RzdHICCAAAWBMAAABwcm9ncmVzc2Jhci1vYmplY3RzcgMIAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vhc3lkaWFsb2dzLmh0bWwjcHJvZ3Jlc3NiYXItb2JqZWN0c1gTAAAAUHJvZ3Jlc3NCYXIgT2JqZWN0c3RyBAgAAFgIAAAAdHV0LXNldHNyBQgAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2RhdGFzdHJ1Y3R1cmVzLmh0bWwjdHV0LXNldHNYBAAAAFNldHN0cgYIAABYDwAAAHJlcXVlc3Qtb2JqZWN0c3IHCAAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjcmVxdWVzdC1vYmplY3RzWA8AAABSZXF1ZXN0IE9iamVjdHN0cggIAABYAwAAAHNldHIJCAAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjc2V0WAwAAABTZXQgZGlzcGxheXN0cgoIAABYDAAAAHV1aWQtZXhhbXBsZXILCAAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91dWlkLmh0bWwjdXVpZC1leGFtcGxlWAcAAABFeGFtcGxldHIMCAAAWA4AAABzb2NrZXQtb2JqZWN0c3INCAAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQtb2JqZWN0c1gOAAAAU29ja2V0IE9iamVjdHN0cg4IAABYBQAAAHByaW50cg8IAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWwjcHJpbnRYEwAAAFRoZSBwcmludCBzdGF0ZW1lbnR0chAIAABYDQAAAHJsb2NrLW9iamVjdHNyEQgAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjcmxvY2stb2JqZWN0c1gNAAAAUkxvY2sgT2JqZWN0c3RyEggAAFgQAAAAY3JlYXRpbmctd2luaW5zdHITCAAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2J1aWx0ZGlzdC5odG1sI2NyZWF0aW5nLXdpbmluc3RYGwAAAENyZWF0aW5nIFdpbmRvd3MgSW5zdGFsbGVyc3RyFAgAAFgOAAAAMnRvMy1yZWZlcmVuY2VyFQgAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvMnRvMy5odG1sI3RvMy1yZWZlcmVuY2VYLwAAADJ0bzMgLSBBdXRvbWF0ZWQgUHl0aG9uIDIgdG8gMyBjb2RlIHRyYW5zbGF0aW9udHIWCAAAWBEAAABvcHRwYXJzZS10dXRvcmlhbHIXCAAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLXR1dG9yaWFsWAgAAABUdXRvcmlhbHRyGAgAAFgOAAAAdHV0LWZvcm1hdHRpbmdyGQgAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2lucHV0b3V0cHV0Lmh0bWwjdHV0LWZvcm1hdHRpbmdYGQAAAEZhbmNpZXIgT3V0cHV0IEZvcm1hdHRpbmd0choIAABYCAAAAHBlcC0zMTAxchsIAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjYuaHRtbCNwZXAtMzEwMVgkAAAAUEVQIDMxMDE6IEFkdmFuY2VkIFN0cmluZyBGb3JtYXR0aW5ndHIcCAAAWBMAAAB3aGF0c25ldzI3LXB5dGhvbjMxch0IAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjcuaHRtbCN3aGF0c25ldzI3LXB5dGhvbjMxWBkAAABUaGUgRnV0dXJlIGZvciBQeXRob24gMi54dHIeCAAAWBkAAABtdWx0aXByb2Nlc3NpbmctYXV0aC1rZXlzch8IAAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy1hdXRoLWtleXNYEwAAAEF1dGhlbnRpY2F0aW9uIGtleXN0ciAIAABYEgAAAG1oLW1lc3NhZ2Utb2JqZWN0c3IhCAAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taGxpYi5odG1sI21oLW1lc3NhZ2Utb2JqZWN0c1gPAAAATWVzc2FnZSBPYmplY3RzdHIiCAAAWA4AAAB0dXQtZmlyc3RzdGVwc3IjCAAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvaW50cm9kdWN0aW9uLmh0bWwjdHV0LWZpcnN0c3RlcHNYHwAAAEZpcnN0IFN0ZXBzIFRvd2FyZHMgUHJvZ3JhbW1pbmd0ciQIAABYGAAAAGRvY3Rlc3QtZmluZGluZy1leGFtcGxlc3IlCAAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC1maW5kaW5nLWV4YW1wbGVzWCYAAABIb3cgYXJlIERvY3N0cmluZyBFeGFtcGxlcyBSZWNvZ25pemVkP3RyJggAAFgTAAAAaHRtbC1wYXJzZXItb2JqZWN0c3InCAAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odG1sbGliLmh0bWwjaHRtbC1wYXJzZXItb2JqZWN0c1gSAAAASFRNTFBhcnNlciBPYmplY3RzdHIoCAAAWAgAAAB0dXQtcGFzc3IpCAAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvY29udHJvbGZsb3cuaHRtbCN0dXQtcGFzc1gPAAAAcGFzcyBTdGF0ZW1lbnRzdHIqCAAAWBUAAABzYXgtZXhjZXB0aW9uLW9iamVjdHNyKwgAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5odG1sI3NheC1leGNlcHRpb24tb2JqZWN0c1gUAAAAU0FYRXhjZXB0aW9uIE9iamVjdHN0ciwIAABYBgAAAG51bWJlcnItCAAAKGppAQAAamoBAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbnVtYmVyLmh0bWwjbnVtYmVyWA8AAABOdW1iZXIgUHJvdG9jb2x0ci4IAABYHQAAAHRpbWVpdC1jb21tYW5kLWxpbmUtaW50ZXJmYWNlci8IAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpbWVpdC5odG1sI3RpbWVpdC1jb21tYW5kLWxpbmUtaW50ZXJmYWNlWBYAAABDb21tYW5kLUxpbmUgSW50ZXJmYWNldHIwCAAAWAgAAABtYW5pZmVzdHIxCAAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL3NvdXJjZWRpc3QuaHRtbCNtYW5pZmVzdFgiAAAAU3BlY2lmeWluZyB0aGUgZmlsZXMgdG8gZGlzdHJpYnV0ZXRyMggAAFgXAAAAc3VicHJvY2Vzcy1yZXBsYWNlbWVudHNyMwgAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI3N1YnByb2Nlc3MtcmVwbGFjZW1lbnRzWDQAAABSZXBsYWNpbmcgT2xkZXIgRnVuY3Rpb25zIHdpdGggdGhlIHN1YnByb2Nlc3MgTW9kdWxldHI0CAAAWA8AAAB0aW1laXQtZXhhbXBsZXNyNQgAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGltZWl0Lmh0bWwjdGltZWl0LWV4YW1wbGVzWAgAAABFeGFtcGxlc3RyNggAAFgSAAAAemlwaW1wb3J0LWV4YW1wbGVzcjcIAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGltcG9ydC5odG1sI3ppcGltcG9ydC1leGFtcGxlc1gIAAAARXhhbXBsZXN0cjgIAABYEAAAAHBhY2thZ2UtY29tbWFuZHNyOQgAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9wYWNrYWdlaW5kZXguaHRtbCNwYWNrYWdlLWNvbW1hbmRzWBIAAABEaXN0dXRpbHMgY29tbWFuZHN0cjoIAABYHwAAAHVuaXR0ZXN0LWNvbW1hbmQtbGluZS1pbnRlcmZhY2VyOwgAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC1jb21tYW5kLWxpbmUtaW50ZXJmYWNlWBYAAABDb21tYW5kLUxpbmUgSW50ZXJmYWNldHI8CAAAWAkAAABwcmltYXJpZXNyPQgAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI3ByaW1hcmllc1gJAAAAUHJpbWFyaWVzdHI+CAAAWBgAAABwcm94eS1iYXNpYy1hdXRoLWhhbmRsZXJyPwgAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3Byb3h5LWJhc2ljLWF1dGgtaGFuZGxlclgdAAAAUHJveHlCYXNpY0F1dGhIYW5kbGVyIE9iamVjdHN0ckAIAABYEAAAAGJ5dGVhcnJheW9iamVjdHNyQQgAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2J5dGVhcnJheS5odG1sI2J5dGVhcnJheW9iamVjdHNYEgAAAEJ5dGUgQXJyYXkgT2JqZWN0c3RyQggAAFgLAAAAdHV0LW51bWJlcnNyQwgAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2ludHJvZHVjdGlvbi5odG1sI3R1dC1udW1iZXJzWAcAAABOdW1iZXJzdHJECAAAWBAAAABkb20tbm9kZS1vYmplY3RzckUIAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCNkb20tbm9kZS1vYmplY3RzWAwAAABOb2RlIE9iamVjdHN0ckYIAABYDQAAAGFwaS1yZWZlcmVuY2VyRwgAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNhcGktcmVmZXJlbmNlWA0AAABBUEkgUmVmZXJlbmNldHJICAAAWBMAAAB6aXBpbXBvcnRlci1vYmplY3RzckkIAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGltcG9ydC5odG1sI3ppcGltcG9ydGVyLW9iamVjdHNYEwAAAHppcGltcG9ydGVyIE9iamVjdHN0ckoIAABYHwAAAGxvZ2dpbmctY29uZmlnLWRpY3QtY29ubmVjdGlvbnNySwgAAChqaQEAAGpqAQAAWFUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5jb25maWcuaHRtbCNsb2dnaW5nLWNvbmZpZy1kaWN0LWNvbm5lY3Rpb25zWBIAAABPYmplY3QgY29ubmVjdGlvbnN0ckwIAABYCAAAAHBlcC0zMTE2ck0IAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjYuaHRtbCNwZXAtMzExNlgZAAAAUEVQIDMxMTY6IE5ldyBJL08gTGlicmFyeXRyTggAAFgOAAAAYmlzZWN0LWV4YW1wbGVyTwgAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmlzZWN0Lmh0bWwjYmlzZWN0LWV4YW1wbGVYAQAAAC10clAIAABYEAAAAHRlc3RjYXNlLW9iamVjdHNyUQgAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN0ZXN0Y2FzZS1vYmplY3RzWAoAAABUZXN0IGNhc2VzdHJSCAAAWA4AAABtZW1vcnktaGFuZGxlcnJTCAAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbWVtb3J5LWhhbmRsZXJYDQAAAE1lbW9yeUhhbmRsZXJ0clQIAABYDgAAAHdpbmRvdy1vYmplY3RzclUIAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZyYW1ld29yay5odG1sI3dpbmRvdy1vYmplY3RzWA4AAABXaW5kb3cgT2JqZWN0c3RyVggAAFgPAAAAcGlja2xlLXByb3RvY29sclcIAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BpY2tsZS5odG1sI3BpY2tsZS1wcm90b2NvbFgTAAAAVGhlIHBpY2tsZSBwcm90b2NvbHRyWAgAAFgQAAAAdW5pdHRlc3Qtc2VjdGlvbnJZCAAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi43Lmh0bWwjdW5pdHRlc3Qtc2VjdGlvblgYAAAAVXBkYXRlZCBtb2R1bGU6IHVuaXR0ZXN0dHJaCAAAWAoAAABvdGhlci1sYW5nclsIAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjUuaHRtbCNvdGhlci1sYW5nWBYAAABPdGhlciBMYW5ndWFnZSBDaGFuZ2VzdHJcCAAAWAwAAABmb3JtLW9iamVjdHNyXQgAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmwuaHRtbCNmb3JtLW9iamVjdHNYDAAAAEZvcm0gT2JqZWN0c3RyXggAAFgMAAAAaHR0cC1oYW5kbGVycl8IAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNodHRwLWhhbmRsZXJYCwAAAEhUVFBIYW5kbGVydHJgCAAAWBsAAABvcHRwYXJzZS1jYWxsYmFjay1leGFtcGxlLTZyYQgAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS1jYWxsYmFjay1leGFtcGxlLTZYJgAAAENhbGxiYWNrIGV4YW1wbGUgNjogdmFyaWFibGUgYXJndW1lbnRzdHJiCAAAWBsAAABvcHRwYXJzZS1jYWxsYmFjay1leGFtcGxlLTVyYwgAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS1jYWxsYmFjay1leGFtcGxlLTVYIwAAAENhbGxiYWNrIGV4YW1wbGUgNTogZml4ZWQgYXJndW1lbnRzdHJkCAAAWBAAAABtYWlsYm94LWV4YW1wbGVzcmUIAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94LWV4YW1wbGVzWAgAAABFeGFtcGxlc3RyZggAAFgbAAAAb3B0cGFyc2UtY2FsbGJhY2stZXhhbXBsZS0zcmcIAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UtY2FsbGJhY2stZXhhbXBsZS0zWDQAAABDYWxsYmFjayBleGFtcGxlIDM6IGNoZWNrIG9wdGlvbiBvcmRlciAoZ2VuZXJhbGl6ZWQpdHJoCAAAWBsAAABvcHRwYXJzZS1jYWxsYmFjay1leGFtcGxlLTJyaQgAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS1jYWxsYmFjay1leGFtcGxlLTJYJgAAAENhbGxiYWNrIGV4YW1wbGUgMjogY2hlY2sgb3B0aW9uIG9yZGVydHJqCAAAWBsAAABvcHRwYXJzZS1jYWxsYmFjay1leGFtcGxlLTFyawgAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS1jYWxsYmFjay1leGFtcGxlLTFYJAAAAENhbGxiYWNrIGV4YW1wbGUgMTogdHJpdmlhbCBjYWxsYmFja3RybAgAAFgQAAAAZG9tLXRleHQtb2JqZWN0c3JtCAAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjZG9tLXRleHQtb2JqZWN0c1gdAAAAVGV4dCBhbmQgQ0RBVEFTZWN0aW9uIE9iamVjdHN0cm4IAABYCQAAAG9wZXJhdG9yc3JvCAAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNvcGVyYXRvcnNYCQAAAE9wZXJhdG9yc3RycAgAAFgLAAAAYXBpLW9iamVjdHNycQgAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ludHJvLmh0bWwjYXBpLW9iamVjdHNYIwAAAE9iamVjdHMsIFR5cGVzIGFuZCBSZWZlcmVuY2UgQ291bnRzdHJyCAAAWBEAAABkZWJ1Z2dlci1jb21tYW5kc3JzCAAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wZGIuaHRtbCNkZWJ1Z2dlci1jb21tYW5kc1gRAAAARGVidWdnZXIgQ29tbWFuZHN0cnQIAABYCAAAAHB1cmUtbW9kcnUIAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvZXhhbXBsZXMuaHRtbCNwdXJlLW1vZFgkAAAAUHVyZSBQeXRob24gZGlzdHJpYnV0aW9uIChieSBtb2R1bGUpdHJ2CAAAWBkAAABzdGFuZGFyZHdhcm5pbmdjYXRlZ29yaWVzcncIAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjc3RhbmRhcmR3YXJuaW5nY2F0ZWdvcmllc1gbAAAAU3RhbmRhcmQgV2FybmluZyBDYXRlZ29yaWVzdHJ4CAAAWA0AAABhcGktZGVidWdnaW5ncnkIAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbnRyby5odG1sI2FwaS1kZWJ1Z2dpbmdYEAAAAERlYnVnZ2luZyBCdWlsZHN0cnoIAABYCAAAAHBlcC0zMTEwcnsIAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjYuaHRtbCNwZXAtMzExMFgkAAAAUEVQIDMxMTA6IEV4Y2VwdGlvbi1IYW5kbGluZyBDaGFuZ2VzdHJ8CAAAWAsAAABjb2Rlb2JqZWN0c3J9CAAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29kZS5odG1sI2NvZGVvYmplY3RzWAEAAAAtdHJ+CAAAWAwAAAB1cmxsaWItaG93dG9yfwgAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2hvd3RvL3VybGxpYjIuaHRtbCN1cmxsaWItaG93dG9YLAAAAEhPV1RPIEZldGNoIEludGVybmV0IFJlc291cmNlcyBVc2luZyB1cmxsaWIydHKACAAAWBEAAABpbnN0LW5ldy1zdGFuZGFyZHKBCAAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaW5zdGFsbC9pbmRleC5odG1sI2luc3QtbmV3LXN0YW5kYXJkWBsAAABUaGUgbmV3IHN0YW5kYXJkOiBEaXN0dXRpbHN0coIIAABYEwAAAHR1dC1wa2ctaW1wb3J0LXN0YXJygwgAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL21vZHVsZXMuaHRtbCN0dXQtcGtnLWltcG9ydC1zdGFyWBoAAABJbXBvcnRpbmcgKiBGcm9tIGEgUGFja2FnZXRyhAgAAFgPAAAAdHV0LWZpbGVtZXRob2RzcoUIAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9pbnB1dG91dHB1dC5odG1sI3R1dC1maWxlbWV0aG9kc1gXAAAATWV0aG9kcyBvZiBGaWxlIE9iamVjdHN0coYIAABYFgAAAHVybHBhcnNlLXJlc3VsdC1vYmplY3RyhwgAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJscGFyc2UuaHRtbCN1cmxwYXJzZS1yZXN1bHQtb2JqZWN0WCQAAABSZXN1bHRzIG9mIHVybHBhcnNlKCkgYW5kIHVybHNwbGl0KCl0cogIAABYBAAAAGZyb21yiQgAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNmcm9tWBQAAABUaGUgaW1wb3J0IHN0YXRlbWVudHRyiggAAFgLAAAAdHV0LXJlbWFya3NyiwgAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2NsYXNzZXMuaHRtbCN0dXQtcmVtYXJrc1gOAAAAUmFuZG9tIFJlbWFya3N0cowIAABYFAAAAHhkci11bnBhY2tlci1vYmplY3Rzco0IAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3hkcmxpYi5odG1sI3hkci11bnBhY2tlci1vYmplY3RzWBAAAABVbnBhY2tlciBPYmplY3RzdHKOCAAAWA4AAABzdGRjb21wYXJpc29uc3KPCAAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0ZGNvbXBhcmlzb25zWAsAAABDb21wYXJpc29uc3RykAgAAFgKAAAAZGwtb2JqZWN0c3KRCAAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kbC5odG1sI2RsLW9iamVjdHNYCgAAAERsIE9iamVjdHN0cpIIAABYEwAAAHR1dC1saXN0cy1hcy1zdGFja3NykwgAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2RhdGFzdHJ1Y3R1cmVzLmh0bWwjdHV0LWxpc3RzLWFzLXN0YWNrc1gVAAAAVXNpbmcgTGlzdHMgYXMgU3RhY2tzdHKUCAAAWAkAAABmYXEtaW5kZXhylQgAAChqaQEAAGpqAQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2ZhcS9pbmRleC5odG1sI2ZhcS1pbmRleFghAAAAUHl0aG9uIEZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zdHKWCAAAWCsAAABjdHlwZXMtYWNjZXNzaW5nLWZ1bmN0aW9ucy1mcm9tLWxvYWRlZC1kbGxzcpcIAAAoamkBAABqagEAAFhZAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy1hY2Nlc3NpbmctZnVuY3Rpb25zLWZyb20tbG9hZGVkLWRsbHNYJAAAAEFjY2Vzc2luZyBmdW5jdGlvbnMgZnJvbSBsb2FkZWQgZGxsc3RymAgAAFgfAAAAY3R5cGVzLWxvYWRpbmctc2hhcmVkLWxpYnJhcmllc3KZCAAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMtbG9hZGluZy1zaGFyZWQtbGlicmFyaWVzWBgAAABMb2FkaW5nIHNoYXJlZCBsaWJyYXJpZXN0cpoIAABYEAAAAGpzb24tdG8tcHktdGFibGVymwgAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvanNvbi5odG1sI2pzb24tdG8tcHktdGFibGVYAQAAAC10cpwIAABYDwAAAGF1LXJlYWQtb2JqZWN0c3KdCAAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdW5hdS5odG1sI2F1LXJlYWQtb2JqZWN0c1gPAAAAQVVfcmVhZCBPYmplY3RzdHKeCAAAWAsAAABkZWNpbWFsLWZhcXKfCAAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC1mYXFYCwAAAERlY2ltYWwgRkFRdHKgCAAAWA8AAABkaXN0dXRpbHMtaW5kZXhyoQgAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9pbmRleC5odG1sI2Rpc3R1dGlscy1pbmRleFgsAAAARGlzdHJpYnV0aW5nIFB5dGhvbiBNb2R1bGVzIChMZWdhY3kgdmVyc2lvbil0cqIIAABYEwAAAHR1dC1tdWx0aS10aHJlYWRpbmdyowgAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL3N0ZGxpYjIuaHRtbCN0dXQtbXVsdGktdGhyZWFkaW5nWA8AAABNdWx0aS10aHJlYWRpbmd0cqQIAABYAwAAAGlwY3KlCAAAKGppAQAAamoBAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pcGMuaHRtbCNpcGNYKQAAAEludGVycHJvY2VzcyBDb21tdW5pY2F0aW9uIGFuZCBOZXR3b3JraW5ndHKmCAAAWBUAAABjb250cm9sc3dpbmRvdy1vYmplY3RypwgAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnJhbWV3b3JrLmh0bWwjY29udHJvbHN3aW5kb3ctb2JqZWN0WBUAAABDb250cm9sc1dpbmRvdyBPYmplY3R0cqgIAABYDgAAAG1ldGhvZC1vYmplY3RzcqkIAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tZXRob2QuaHRtbCNtZXRob2Qtb2JqZWN0c1gOAAAATWV0aG9kIE9iamVjdHN0cqoIAABYDgAAAHR5cGVtZW1vcnl2aWV3cqsIAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjdHlwZW1lbW9yeXZpZXdYDwAAAG1lbW9yeXZpZXcgdHlwZXRyrAgAAFgPAAAAYWJzdHJhY3QtYnVmZmVycq0IAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9vYmpidWZmZXIuaHRtbCNhYnN0cmFjdC1idWZmZXJYEwAAAE9sZCBCdWZmZXIgUHJvdG9jb2x0cq4IAABYBgAAAGJpbmFyeXKvCAAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjYmluYXJ5WBwAAABCaW5hcnkgYXJpdGhtZXRpYyBvcGVyYXRpb25zdHKwCAAAWBIAAAB0dXQtdW5pY29kZXN0cmluZ3NysQgAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2ludHJvZHVjdGlvbi5odG1sI3R1dC11bmljb2Rlc3RyaW5nc1gPAAAAVW5pY29kZSBTdHJpbmdzdHKyCAAAWBYAAABjdXJzZXMtdGV4dHBhZC1vYmplY3RzcrMIAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy10ZXh0cGFkLW9iamVjdHNYDwAAAFRleHRib3ggb2JqZWN0c3RytAgAAFgIAAAAZnVuYy1zZXRytQgAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjZnVuYy1zZXRYAQAAAC10crYIAABYDwAAAHR1dC1saW5lZWRpdGluZ3K3CAAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvaW50ZXJhY3RpdmUuaHRtbCN0dXQtbGluZWVkaXRpbmdYDAAAAExpbmUgRWRpdGluZ3RyuAgAAFgKAAAAbWFwb2JqZWN0c3K5CAAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29uY3JldGUuaHRtbCNtYXBvYmplY3RzWA8AAABNYXBwaW5nIE9iamVjdHN0croIAABYEQAAAGRpZmZsaWItaW50ZXJmYWNlcrsIAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RpZmZsaWIuaHRtbCNkaWZmbGliLWludGVyZmFjZVgjAAAAQSBjb21tYW5kLWxpbmUgaW50ZXJmYWNlIHRvIGRpZmZsaWJ0crwIAABYCwAAAGRvbS1vYmplY3Rzcr0IAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCNkb20tb2JqZWN0c1gSAAAAT2JqZWN0cyBpbiB0aGUgRE9NdHK+CAAAWBcAAAB0dXQtdW5wYWNraW5nLWFyZ3VtZW50c3K/CAAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvY29udHJvbGZsb3cuaHRtbCN0dXQtdW5wYWNraW5nLWFyZ3VtZW50c1gYAAAAVW5wYWNraW5nIEFyZ3VtZW50IExpc3RzdHLACAAAWAwAAABjZWxsLW9iamVjdHNywQgAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NlbGwuaHRtbCNjZWxsLW9iamVjdHNYDAAAAENlbGwgT2JqZWN0c3RywggAAFgJAAAAY2dpLWludHJvcsMIAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NnaS5odG1sI2NnaS1pbnRyb1gBAAAALXRyxAgAAFgMAAAAdHV0LWRlZmluaW5ncsUIAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9jb250cm9sZmxvdy5odG1sI3R1dC1kZWZpbmluZ1gaAAAATW9yZSBvbiBEZWZpbmluZyBGdW5jdGlvbnN0csYIAABYEAAAAGN0eXBlcy1zdXJwcmlzZXNyxwgAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLXN1cnByaXNlc1gJAAAAU3VycHJpc2VzdHLICAAAWBkAAABsb2dnaW5nLWNvbmZpZy1kaWN0c2NoZW1hcskIAAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuY29uZmlnLmh0bWwjbG9nZ2luZy1jb25maWctZGljdHNjaGVtYVgfAAAAQ29uZmlndXJhdGlvbiBkaWN0aW9uYXJ5IHNjaGVtYXRyyggAAFgIAAAAdHV0LWpzb25yywgAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2lucHV0b3V0cHV0Lmh0bWwjdHV0LWpzb25YIAAAAFNhdmluZyBzdHJ1Y3R1cmVkIGRhdGEgd2l0aCBqc29udHLMCAAAWAgAAABwcm9ncmFtc3LNCAAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL3RvcGxldmVsX2NvbXBvbmVudHMuaHRtbCNwcm9ncmFtc1gYAAAAQ29tcGxldGUgUHl0aG9uIHByb2dyYW1zdHLOCAAAWAwAAABkaXN0cmlidXRpbmdyzwgAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2V4dGVuZGluZy9idWlsZGluZy5odG1sI2Rpc3RyaWJ1dGluZ1gjAAAARGlzdHJpYnV0aW5nIHlvdXIgZXh0ZW5zaW9uIG1vZHVsZXN0ctAIAABYDQAAAG11dGV4LW9iamVjdHNy0QgAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXV0ZXguaHRtbCNtdXRleC1vYmplY3RzWA0AAABNdXRleCBPYmplY3RzdHLSCAAAWBIAAABhZHZhbmNlZC1kZWJ1Z2dpbmdy0wgAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNhZHZhbmNlZC1kZWJ1Z2dpbmdYGQAAAEFkdmFuY2VkIERlYnVnZ2VyIFN1cHBvcnR0ctQIAABYBwAAAHN0cmluZ3Ny1QgAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjc3RyaW5nc1gPAAAAU3RyaW5nIGxpdGVyYWxzdHLWCAAAWAkAAAB0dXQtYnJlYWty1wgAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2NvbnRyb2xmbG93Lmh0bWwjdHV0LWJyZWFrWDgAAABicmVhayBhbmQgY29udGludWUgU3RhdGVtZW50cywgYW5kIGVsc2UgQ2xhdXNlcyBvbiBMb29wc3Ry2AgAAFgLAAAAdHV0LW1vZHVsZXNy2QgAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL21vZHVsZXMuaHRtbCN0dXQtbW9kdWxlc1gHAAAATW9kdWxlc3Ry2ggAAFgHAAAAcGVwLTM0MnLbCAAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi41Lmh0bWwjcGVwLTM0MlgfAAAAUEVQIDM0MjogTmV3IEdlbmVyYXRvciBGZWF0dXJlc3Ry3AgAAFgXAAAAZmlsZS1jb29raWUtamFyLWNsYXNzZXNy3QgAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llbGliLmh0bWwjZmlsZS1jb29raWUtamFyLWNsYXNzZXNYOwAAAEZpbGVDb29raWVKYXIgc3ViY2xhc3NlcyBhbmQgY28tb3BlcmF0aW9uIHdpdGggd2ViIGJyb3dzZXJzdHLeCAAAWAcAAAB0dXQtZGlyct8IAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9tb2R1bGVzLmh0bWwjdHV0LWRpclgSAAAAVGhlIGRpcigpIEZ1bmN0aW9udHLgCAAAWA4AAABkaXJjbXAtb2JqZWN0c3LhCAAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9maWxlY21wLmh0bWwjZGlyY21wLW9iamVjdHNYEAAAAFRoZSBkaXJjbXAgY2xhc3N0cuIIAABYDgAAAGluc3BlY3Qtc291cmNlcuMIAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LXNvdXJjZVgWAAAAUmV0cmlldmluZyBzb3VyY2UgY29kZXRy5AgAAFgXAAAAZG9jdGVzdC1zaW1wbGUtdGVzdGZpbGVy5QgAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3Qtc2ltcGxlLXRlc3RmaWxlWC4AAABTaW1wbGUgVXNhZ2U6IENoZWNraW5nIEV4YW1wbGVzIGluIGEgVGV4dCBGaWxldHLmCAAAWA0AAABzbGljZS1vYmplY3RzcucIAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zbGljZS5odG1sI3NsaWNlLW9iamVjdHNYDQAAAFNsaWNlIE9iamVjdHN0cugIAABYCgAAAHR1dC1sYW1iZGFy6QgAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2NvbnRyb2xmbG93Lmh0bWwjdHV0LWxhbWJkYVgSAAAATGFtYmRhIEV4cHJlc3Npb25zdHLqCAAAWA4AAABjb2RlYy1yZWdpc3RyeXLrCAAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29kZWMuaHRtbCNjb2RlYy1yZWdpc3RyeVgkAAAAQ29kZWMgcmVnaXN0cnkgYW5kIHN1cHBvcnQgZnVuY3Rpb25zdHLsCAAAWBAAAAB0ZW1wbGF0ZS1vYmplY3Rzcu0IAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BpcGVzLmh0bWwjdGVtcGxhdGUtb2JqZWN0c1gQAAAAVGVtcGxhdGUgT2JqZWN0c3Ry7ggAAFgPAAAAYm9vbGVhbi1vYmplY3Rzcu8IAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbHJwY2xpYi5odG1sI2Jvb2xlYW4tb2JqZWN0c1gPAAAAQm9vbGVhbiBPYmplY3RzdHLwCAAAWAgAAABwaHlzaWNhbHLxCAAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNwaHlzaWNhbFgOAAAAUGh5c2ljYWwgbGluZXN0cvIIAABYEgAAAGRlc2NyaXB0b3Itb2JqZWN0c3LzCAAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZGVzY3JpcHRvci5odG1sI2Rlc2NyaXB0b3Itb2JqZWN0c1gSAAAARGVzY3JpcHRvciBPYmplY3RzdHL0CAAAWA8AAABkZWNpbWFsLXJlY2lwZXNy9QgAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwtcmVjaXBlc1gHAAAAUmVjaXBlc3Ry9ggAAFgNAAAAY29udGV4dGxpYm1vZHL3CAAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi41Lmh0bWwjY29udGV4dGxpYm1vZFgVAAAAVGhlIGNvbnRleHRsaWIgbW9kdWxldHL4CAAAWAsAAABhcmctcGFyc2luZ3L5CAAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYXJnLmh0bWwjYXJnLXBhcnNpbmdYJQAAAFBhcnNpbmcgYXJndW1lbnRzIGFuZCBidWlsZGluZyB2YWx1ZXN0cvoIAABYAwAAAGM5OXL7CAAAKGppAQAAamoBAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNjOTlYAQAAAC10cvwIAABYCwAAAGludGVyYWN0aXZlcv0IAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvdG9wbGV2ZWxfY29tcG9uZW50cy5odG1sI2ludGVyYWN0aXZlWBEAAABJbnRlcmFjdGl2ZSBpbnB1dHRy/ggAAFgRAAAAeG1scmVhZGVyLW9iamVjdHNy/wgAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCN4bWxyZWFkZXItb2JqZWN0c1gRAAAAWE1MUmVhZGVyIE9iamVjdHN0cgAJAABYFAAAAGV4cGF0LWNvbnRlbnQtbW9kZWxzcgEJAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCNleHBhdC1jb250ZW50LW1vZGVsc1gaAAAAQ29udGVudCBNb2RlbCBEZXNjcmlwdGlvbnN0cgIJAABYEAAAAGRvY3Rlc3Qtd2FybmluZ3NyAwkAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3Qtd2FybmluZ3NYCAAAAFdhcm5pbmdzdHIECQAAWBgAAABjdHlwZXMtdXRpbGl0eS1mdW5jdGlvbnNyBQkAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLXV0aWxpdHktZnVuY3Rpb25zWBEAAABVdGlsaXR5IGZ1bmN0aW9uc3RyBgkAAFgGAAAAbWVtb3J5cgcJAAAoamkBAABqagEAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tZW1vcnkuaHRtbCNtZW1vcnlYEQAAAE1lbW9yeSBNYW5hZ2VtZW50dHIICQAAWA8AAAB0dXQtY29kaW5nc3R5bGVyCQkAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2NvbnRyb2xmbG93Lmh0bWwjdHV0LWNvZGluZ3N0eWxlWBgAAABJbnRlcm1lenpvOiBDb2RpbmcgU3R5bGV0cgoJAABYDgAAAHR1dC1mdW5jdGlvbmFscgsJAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9kYXRhc3RydWN0dXJlcy5odG1sI3R1dC1mdW5jdGlvbmFsWBwAAABGdW5jdGlvbmFsIFByb2dyYW1taW5nIFRvb2xzdHIMCQAAWBEAAABtYXJzaGFsbGluZy11dGlsc3INCQAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbWFyc2hhbC5odG1sI21hcnNoYWxsaW5nLXV0aWxzWBgAAABEYXRhIG1hcnNoYWxsaW5nIHN1cHBvcnR0cg4JAABYDQAAAGN1c3RvbS1sZXZlbHNyDwkAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2hvd3RvL2xvZ2dpbmcuaHRtbCNjdXN0b20tbGV2ZWxzWA0AAABDdXN0b20gTGV2ZWxzdHIQCQAAWAkAAABvcy1mZC1vcHNyEQkAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy1mZC1vcHNYGgAAAEZpbGUgRGVzY3JpcHRvciBPcGVyYXRpb25zdHISCQAAWAgAAABwZXAtMzEyOXITCQAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi42Lmh0bWwjcGVwLTMxMjlYGgAAAFBFUCAzMTI5OiBDbGFzcyBEZWNvcmF0b3JzdHIUCQAAWBEAAABzZW1hcGhvcmUtb2JqZWN0c3IVCQAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWRpbmcuaHRtbCNzZW1hcGhvcmUtb2JqZWN0c1gRAAAAU2VtYXBob3JlIE9iamVjdHN0chYJAABYEAAAAGNvcHl0cmVlLWV4YW1wbGVyFwkAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2h1dGlsLmh0bWwjY29weXRyZWUtZXhhbXBsZVgQAAAAY29weXRyZWUgZXhhbXBsZXRyGAkAAFgRAAAAZXhjZXB0aW9uaGFuZGxpbmdyGQkAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNleGNlcHRpb25oYW5kbGluZ1gSAAAARXhjZXB0aW9uIEhhbmRsaW5ndHIaCQAAWAcAAABiaXR3aXNlchsJAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNiaXR3aXNlWBkAAABCaW5hcnkgYml0d2lzZSBvcGVyYXRpb25zdHIcCQAAWA4AAABhdGV4aXQtZXhhbXBsZXIdCQAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hdGV4aXQuaHRtbCNhdGV4aXQtZXhhbXBsZVgOAAAAYXRleGl0IEV4YW1wbGV0ch4JAABYDwAAAHNlYXJjaC12cy1tYXRjaHIfCQAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sI3NlYXJjaC12cy1tYXRjaFgUAAAAc2VhcmNoKCkgdnMuIG1hdGNoKCl0ciAJAABYDwAAAHVzZWZ1bC1oYW5kbGVyc3IhCQAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaG93dG8vbG9nZ2luZy5odG1sI3VzZWZ1bC1oYW5kbGVyc1gPAAAAVXNlZnVsIEhhbmRsZXJzdHIiCQAAWBMAAABoaXN0b3J5LWFuZC1saWNlbnNlciMJAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWNlbnNlLmh0bWwjaGlzdG9yeS1hbmQtbGljZW5zZVgTAAAASGlzdG9yeSBhbmQgTGljZW5zZXRyJAkAAFgPAAAAdHV0LWtleXdvcmRhcmdzciUJAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9jb250cm9sZmxvdy5odG1sI3R1dC1rZXl3b3JkYXJnc1gRAAAAS2V5d29yZCBBcmd1bWVudHN0ciYJAABYDwAAAGZpbGUtb3BlcmF0aW9uc3InCQAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaHV0aWwuaHRtbCNmaWxlLW9wZXJhdGlvbnNYHgAAAERpcmVjdG9yeSBhbmQgZmlsZXMgb3BlcmF0aW9uc3RyKAkAAFgOAAAAc2VjdGlvbi1wZXAzMDVyKQkAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuMy5odG1sI3NlY3Rpb24tcGVwMzA1WB4AAABQRVAgMzA1OiBDb21tYS1zZXBhcmF0ZWQgRmlsZXN0cioJAABYDgAAAHNlY3Rpb24tcGVwMzAycisJAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjMuaHRtbCNzZWN0aW9uLXBlcDMwMlgZAAAAUEVQIDMwMjogTmV3IEltcG9ydCBIb29rc3RyLAkAAFggAAAAY3R5cGVzLXZhcmlhYmxlLXNpemVkLWRhdGEtdHlwZXNyLQkAAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLXZhcmlhYmxlLXNpemVkLWRhdGEtdHlwZXNYGQAAAFZhcmlhYmxlLXNpemVkIGRhdGEgdHlwZXN0ci4JAABYCAAAAG5ld3R5cGVzci8JAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9vYmppbXBsLmh0bWwjbmV3dHlwZXNYHQAAAE9iamVjdCBJbXBsZW1lbnRhdGlvbiBTdXBwb3J0dHIwCQAAWBEAAABtaC1mb2xkZXItb2JqZWN0c3IxCQAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taGxpYi5odG1sI21oLWZvbGRlci1vYmplY3RzWA4AAABGb2xkZXIgT2JqZWN0c3RyMgkAAFgNAAAAY3JlYXRpbmctZHVtYnIzCQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2J1aWx0ZGlzdC5odG1sI2NyZWF0aW5nLWR1bWJYIQAAAENyZWF0aW5nIGR1bWIgYnVpbHQgZGlzdHJpYnV0aW9uc3RyNAkAAFgPAAAAcmV4ZWMtZXh0ZW5zaW9ucjUJAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JleGVjLmh0bWwjcmV4ZWMtZXh0ZW5zaW9uWCAAAABEZWZpbmluZyByZXN0cmljdGVkIGVudmlyb25tZW50c3RyNgkAAFgRAAAAY29tcGxldGVyLW9iamVjdHNyNwkAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmxjb21wbGV0ZXIuaHRtbCNjb21wbGV0ZXItb2JqZWN0c1gRAAAAQ29tcGxldGVyIE9iamVjdHN0cjgJAABYGAAAAGV4dGVuZGluZy13aXRoLWVtYmVkZGluZ3I5CQAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZXh0ZW5kaW5nL2VtYmVkZGluZy5odG1sI2V4dGVuZGluZy13aXRoLWVtYmVkZGluZ1gZAAAARXh0ZW5kaW5nIEVtYmVkZGVkIFB5dGhvbnRyOgkAAFgOAAAAbWtkaXJfbW9kZWJpdHNyOwkAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNta2Rpci1tb2RlYml0c1gBAAAALXRyPAkAAFgaAAAAdXNpbmctb24taW50ZXJmYWNlLW9wdGlvbnNyPQkAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL2NtZGxpbmUuaHRtbCN1c2luZy1vbi1pbnRlcmZhY2Utb3B0aW9uc1gRAAAASW50ZXJmYWNlIG9wdGlvbnN0cj4JAABYCAAAAHJlZ3J0ZXN0cj8JAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rlc3QuaHRtbCNyZWdydGVzdFguAAAAUnVubmluZyB0ZXN0cyB1c2luZyB0aGUgY29tbWFuZC1saW5lIGludGVyZmFjZXRyQAkAAFgLAAAAZnVuZGFtZW50YWxyQQkAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvbmNyZXRlLmh0bWwjZnVuZGFtZW50YWxYEwAAAEZ1bmRhbWVudGFsIE9iamVjdHN0ckIJAABYDgAAAGZwZWN0bC1leGFtcGxlckMJAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZwZWN0bC5odG1sI2ZwZWN0bC1leGFtcGxlWAcAAABFeGFtcGxldHJECQAAWAwAAABhcGktaW5jbHVkZXNyRQkAAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ludHJvLmh0bWwjYXBpLWluY2x1ZGVzWA0AAABJbmNsdWRlIEZpbGVzdHJGCQAAWBYAAABsb2dpY2FsX29wZXJhbmRzX2xhYmVsckcJAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNsb2dpY2FsLW9wZXJhbmRzLWxhYmVsWBAAAABMb2dpY2FsIG9wZXJhbmRzdHJICQAAWBUAAABodHRwcy1oYW5kbGVyLW9iamVjdHNySQkAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI2h0dHBzLWhhbmRsZXItb2JqZWN0c1gUAAAASFRUUFNIYW5kbGVyIE9iamVjdHN0ckoJAABYDgAAAHRocmVhZC1vYmplY3RzcksJAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZC1vYmplY3RzWA4AAABUaHJlYWQgT2JqZWN0c3RyTAkAAFgGAAAAbGV2ZWxzck0JAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsZXZlbHNYDgAAAExvZ2dpbmcgTGV2ZWxzdHJOCQAAWBIAAABsb2dnaW5nLWV4Y2VwdGlvbnNyTwkAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2hvd3RvL2xvZ2dpbmcuaHRtbCNsb2dnaW5nLWV4Y2VwdGlvbnNYIAAAAEV4Y2VwdGlvbnMgcmFpc2VkIGR1cmluZyBsb2dnaW5ndHJQCQAAWBEAAABtdWx0aWZpbGUtb2JqZWN0c3JRCQAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aWZpbGUuaHRtbCNtdWx0aWZpbGUtb2JqZWN0c1gRAAAATXVsdGlGaWxlIE9iamVjdHN0clIJAABYCwAAAGxpc3RvYmplY3RzclMJAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9saXN0Lmh0bWwjbGlzdG9iamVjdHNYDAAAAExpc3QgT2JqZWN0c3RyVAkAAFgPAAAAbWluaWRvbS1vYmplY3RzclUJAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20ubWluaWRvbS5odG1sI21pbmlkb20tb2JqZWN0c1gLAAAARE9NIE9iamVjdHN0clYJAABYCQAAAHR1dC1saXN0c3JXCQAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvaW50cm9kdWN0aW9uLmh0bWwjdHV0LWxpc3RzWAUAAABMaXN0c3RyWAkAAFgRAAAAcG9zaXgtbGFyZ2UtZmlsZXNyWQkAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcG9zaXguaHRtbCNwb3NpeC1sYXJnZS1maWxlc1gSAAAATGFyZ2UgRmlsZSBTdXBwb3J0dHJaCQAAWBEAAABkb2N0ZXN0LWRlYnVnZ2luZ3JbCQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC1kZWJ1Z2dpbmdYCQAAAERlYnVnZ2luZ3RyXAkAAFgcAAAAaHR0cC1lcnJvci1wcm9jZXNzb3Itb2JqZWN0c3JdCQAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjaHR0cC1lcnJvci1wcm9jZXNzb3Itb2JqZWN0c1gaAAAASFRUUEVycm9yUHJvY2Vzc29yIE9iamVjdHN0cl4JAABYAgAAAG9zcl8JAAAoamkBAABqagEAAFgrAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zeXMuaHRtbCNvc1gaAAAAT3BlcmF0aW5nIFN5c3RlbSBVdGlsaXRpZXN0cmAJAABYAgAAAG9ycmEJAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNvclgSAAAAQm9vbGVhbiBvcGVyYXRpb25zdHJiCQAAWBUAAAByb3RhdGluZy1maWxlLWhhbmRsZXJyYwkAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI3JvdGF0aW5nLWZpbGUtaGFuZGxlclgTAAAAUm90YXRpbmdGaWxlSGFuZGxlcnRyZAkAAFgOAAAAbW9kdWxlLWhhc2hsaWJyZQkAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuNS5odG1sI21vZHVsZS1oYXNobGliWBMAAABUaGUgaGFzaGxpYiBwYWNrYWdldHJmCQAAWBAAAAB1c2luZy1vbi1lbnZ2YXJzcmcJAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy9jbWRsaW5lLmh0bWwjdXNpbmctb24tZW52dmFyc1gVAAAARW52aXJvbm1lbnQgdmFyaWFibGVzdHJoCQAAWBgAAABzYWZlY29uZmlncGFyc2VyLW9iamVjdHNyaQkAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjc2FmZWNvbmZpZ3BhcnNlci1vYmplY3RzWBgAAABTYWZlQ29uZmlnUGFyc2VyIE9iamVjdHN0cmoJAABYGwAAAHR1dC1wZXJmb3JtYW5jZS1tZWFzdXJlbWVudHJrCQAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvc3RkbGliLmh0bWwjdHV0LXBlcmZvcm1hbmNlLW1lYXN1cmVtZW50WBcAAABQZXJmb3JtYW5jZSBNZWFzdXJlbWVudHRybAkAAFgXAAAAb3BlbmVyLWRpcmVjdG9yLW9iamVjdHNybQkAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI29wZW5lci1kaXJlY3Rvci1vYmplY3RzWBYAAABPcGVuZXJEaXJlY3RvciBPYmplY3RzdHJuCQAAWBUAAAB4bWxycGMtY2xpZW50LWV4YW1wbGVybwkAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1scnBjbGliLmh0bWwjeG1scnBjLWNsaWVudC1leGFtcGxlWBcAAABFeGFtcGxlIG9mIENsaWVudCBVc2FnZXRycAkAAFgNAAAAYXBpLWVtYmVkZGluZ3JxCQAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW50cm8uaHRtbCNhcGktZW1iZWRkaW5nWBAAAABFbWJlZGRpbmcgUHl0aG9udHJyCQAAWA4AAABzZXF1ZW5jZS10eXBlc3JzCQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI3NlcXVlbmNlLXR5cGVzWBkAAABFbXVsYXRpbmcgY29udGFpbmVyIHR5cGVzdHJ0CQAAWAkAAABob3N0X3BvcnRydQkAAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjaG9zdC1wb3J0WAEAAAAtdHJ2CQAAWBUAAABwcm9maWxlci1pbnRyb2R1Y3Rpb25ydwkAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHJvZmlsZS5odG1sI3Byb2ZpbGVyLWludHJvZHVjdGlvblgdAAAASW50cm9kdWN0aW9uIHRvIHRoZSBwcm9maWxlcnN0cngJAABYEQAAAGFyY2hpdmluZy1leGFtcGxlcnkJAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NodXRpbC5odG1sI2FyY2hpdmluZy1leGFtcGxlWBEAAABBcmNoaXZpbmcgZXhhbXBsZXRyegkAAFgGAAAAZmlsdGVycnsJAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNmaWx0ZXJYDgAAAEZpbHRlciBPYmplY3RzdHJ8CQAAWBIAAABzZWN0aW9uLWdlbmVyYXRvcnNyfQkAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuMy5odG1sI3NlY3Rpb24tZ2VuZXJhdG9yc1gaAAAAUEVQIDI1NTogU2ltcGxlIEdlbmVyYXRvcnN0cn4JAABYDwAAAGhvdHNob3QtZXhhbXBsZXJ/CQAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ob3RzaG90Lmh0bWwjaG90c2hvdC1leGFtcGxlWA0AAABFeGFtcGxlIFVzYWdldHKACQAAWBIAAAB0dXQtYmluYXJ5LWZvcm1hdHNygQkAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL3N0ZGxpYjIuaHRtbCN0dXQtYmluYXJ5LWZvcm1hdHNYJwAAAFdvcmtpbmcgd2l0aCBCaW5hcnkgRGF0YSBSZWNvcmQgTGF5b3V0c3RyggkAAFgDAAAAeG1scoMJAAAoamkBAABqagEAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5odG1sI3htbFgWAAAAWE1MIFByb2Nlc3NpbmcgTW9kdWxlc3RyhAkAAFgDAAAAZm9ycoUJAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCNmb3JYEQAAAFRoZSBmb3Igc3RhdGVtZW50dHKGCQAAWBUAAABlbGVtZW50dHJlZS1mdW5jdGlvbnNyhwkAAChqaQEAAGpqAQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjZWxlbWVudHRyZWUtZnVuY3Rpb25zWAkAAABGdW5jdGlvbnN0cogJAABYBQAAAGNhbGxzcokJAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNjYWxsc1gFAAAAQ2FsbHN0cooJAABYGgAAAGluY3JlbWVudGFsLXBhcnNlci1vYmplY3RzcosJAAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjaW5jcmVtZW50YWwtcGFyc2VyLW9iamVjdHNYGQAAAEluY3JlbWVudGFsUGFyc2VyIE9iamVjdHN0cowJAABYAgAAAGFzco0JAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCNhc1gSAAAAVGhlIHdpdGggc3RhdGVtZW50dHKOCQAAWA0AAAB0aW1lci1vYmplY3Rzco8JAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RpbWVyLW9iamVjdHNYDQAAAFRpbWVyIE9iamVjdHN0cpAJAABYEQAAAG1haWxib3gtbWhtZXNzYWdlcpEJAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94LW1obWVzc2FnZVgJAAAATUhNZXNzYWdldHKSCQAAWA0AAAB0dXQtY29tcGFyaW5ncpMJAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9kYXRhc3RydWN0dXJlcy5odG1sI3R1dC1jb21wYXJpbmdYIwAAAENvbXBhcmluZyBTZXF1ZW5jZXMgYW5kIE90aGVyIFR5cGVzdHKUCQAAWBMAAAB3aGF0c25ldzI3LWNhcHN1bGVzcpUJAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjcuaHRtbCN3aGF0c25ldzI3LWNhcHN1bGVzWAgAAABDYXBzdWxlc3RylgkAAFgEAAAAd3NnaXKXCQAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaG93dG8vd2Vic2VydmVycy5odG1sI3dzZ2lYDwAAAFN0ZXAgYmFjazogV1NHSXRymAkAAFgXAAAAb3B0cGFyc2UtZGVmYXVsdC12YWx1ZXNymQkAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS1kZWZhdWx0LXZhbHVlc1gOAAAARGVmYXVsdCB2YWx1ZXN0cpoJAABYCQAAAGJ1aWxkLWFwaXKbCQAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi41Lmh0bWwjYnVpbGQtYXBpWBcAAABCdWlsZCBhbmQgQyBBUEkgQ2hhbmdlc3RynAkAAFgIAAAAc2xpY2luZ3NynQkAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI3NsaWNpbmdzWAgAAABTbGljaW5nc3RyngkAAFgIAAAAYnVpbGRpbmdynwkAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2V4dGVuZGluZy9idWlsZGluZy5odG1sI2J1aWxkaW5nWCwAAABCdWlsZGluZyBDIGFuZCBDKysgRXh0ZW5zaW9ucyB3aXRoIGRpc3R1dGlsc3RyoAkAAFgWAAAAb3B0cGFyc2Utb3RoZXItbWV0aG9kc3KhCQAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLW90aGVyLW1ldGhvZHNYDQAAAE90aGVyIG1ldGhvZHN0cqIJAABYCwAAAGNvbXBhcmlzb25zcqMJAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNjb21wYXJpc29uc1gLAAAAQ29tcGFyaXNvbnN0cqQJAABYGwAAAGxvZ2dpbmctY29uZmlnLWRpY3QtdXNlcmRlZnKlCQAAKGppAQAAamoBAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmNvbmZpZy5odG1sI2xvZ2dpbmctY29uZmlnLWRpY3QtdXNlcmRlZlgUAAAAVXNlci1kZWZpbmVkIG9iamVjdHN0cqYJAABYGQAAAG9wdHBhcnNlLXdoYXQtb3B0aW9ucy1mb3JypwkAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS13aGF0LW9wdGlvbnMtZm9yWBUAAABXaGF0IGFyZSBvcHRpb25zIGZvcj90cqgJAABYFQAAAGRvY3Rlc3QtZG9jdGVzdHBhcnNlcnKpCQAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC1kb2N0ZXN0cGFyc2VyWBUAAABEb2NUZXN0UGFyc2VyIG9iamVjdHN0cqoJAABYDgAAAGZ1bmMtZnJvemVuc2V0cqsJAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2Z1bmMtZnJvemVuc2V0WAEAAAAtdHKsCQAAWBkAAABmYXEtbXVsdGlkaW1lbnNpb25hbC1saXN0cq0JAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9mYXEvcHJvZ3JhbW1pbmcuaHRtbCNmYXEtbXVsdGlkaW1lbnNpb25hbC1saXN0WCgAAABIb3cgZG8gSSBjcmVhdGUgYSBtdWx0aWRpbWVuc2lvbmFsIGxpc3Q/dHKuCQAAWAwAAAB2aWV3LW9iamVjdHNyrwkAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXNpbGliLmh0bWwjdmlldy1vYmplY3RzWAwAAABWaWV3IE9iamVjdHN0crAJAABYFQAAAHByZXR0eXByaW50ZXItb2JqZWN0c3KxCQAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wcHJpbnQuaHRtbCNwcmV0dHlwcmludGVyLW9iamVjdHNYFQAAAFByZXR0eVByaW50ZXIgT2JqZWN0c3RysgkAAFgPAAAAdHV0LWluaGVyaXRhbmNlcrMJAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9jbGFzc2VzLmh0bWwjdHV0LWluaGVyaXRhbmNlWAsAAABJbmhlcml0YW5jZXRytAkAAFgSAAAAd2FybmluZy1jYXRlZ29yaWVzcrUJAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dhcm5pbmdzLmh0bWwjd2FybmluZy1jYXRlZ29yaWVzWBIAAABXYXJuaW5nIENhdGVnb3JpZXN0crYJAABYEQAAAGluc3QtYnVpbGRpbmctZXh0crcJAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9pbnN0YWxsL2luZGV4Lmh0bWwjaW5zdC1idWlsZGluZy1leHRYJAAAAEJ1aWxkaW5nIEV4dGVuc2lvbnM6IFRpcHMgYW5kIFRyaWNrc3RyuAkAAFgUAAAAdHV0LWRhdGEtY29tcHJlc3Npb25yuQkAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL3N0ZGxpYi5odG1sI3R1dC1kYXRhLWNvbXByZXNzaW9uWBAAAABEYXRhIENvbXByZXNzaW9udHK6CQAAWBAAAABvYnNvbGV0ZS1tb2R1bGVzcrsJAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuZG9jLmh0bWwjb2Jzb2xldGUtbW9kdWxlc1gIAAAAT2Jzb2xldGV0crwJAABYDgAAAGNvb2tpZS1leGFtcGxlcr0JAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZS5odG1sI2Nvb2tpZS1leGFtcGxlWAcAAABFeGFtcGxldHK+CQAAWAkAAAB0eXBlcy1zZXRyvwkAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCN0eXBlcy1zZXRYHAAAAFNldCBUeXBlcyDigJQgc2V0LCBmcm96ZW5zZXR0csAJAABYGQAAAGZyZXF1ZW50bHktdXNlZC1hcmd1bWVudHNywQkAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI2ZyZXF1ZW50bHktdXNlZC1hcmd1bWVudHNYGQAAAEZyZXF1ZW50bHkgVXNlZCBBcmd1bWVudHN0csIJAABYCwAAAGZpbGVvYmplY3RzcsMJAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9maWxlLmh0bWwjZmlsZW9iamVjdHNYDAAAAEZpbGUgT2JqZWN0c3RyxAkAAFgKAAAAcmUtb2JqZWN0c3LFCQAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sI3JlLW9iamVjdHNYGgAAAFJlZ3VsYXIgRXhwcmVzc2lvbiBPYmplY3RzdHLGCQAAWBUAAABodHRwLWNvb2tpZS1wcm9jZXNzb3JyxwkAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI2h0dHAtY29va2llLXByb2Nlc3NvclgbAAAASFRUUENvb2tpZVByb2Nlc3NvciBPYmplY3RzdHLICQAAWBcAAABtZW1iZXJzaGlwLXRlc3QtZGV0YWlsc3LJCQAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjbWVtYmVyc2hpcC10ZXN0LWRldGFpbHNYGgAAAE1lbWJlcnNoaXAgdGVzdCBvcGVyYXRpb25zdHLKCQAAWBAAAAB0eXBlc3NlcS1tdXRhYmxlcssJAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjdHlwZXNzZXEtbXV0YWJsZVgWAAAATXV0YWJsZSBTZXF1ZW5jZSBUeXBlc3RyzAkAAFgOAAAAbXN2Y3J0LWNvbnNvbGVyzQkAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXN2Y3J0Lmh0bWwjbXN2Y3J0LWNvbnNvbGVYCwAAAENvbnNvbGUgSS9PdHLOCQAAWA4AAAB0dXQtbG9vcGlkaW9tc3LPCQAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvZGF0YXN0cnVjdHVyZXMuaHRtbCN0dXQtbG9vcGlkaW9tc1gSAAAATG9vcGluZyBUZWNobmlxdWVzdHLQCQAAWA0AAABwcm94eS1oYW5kbGVyctEJAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCNwcm94eS1oYW5kbGVyWBQAAABQcm94eUhhbmRsZXIgT2JqZWN0c3Ry0gkAAFgXAAAAdW5pdHRlc3QtdGVzdC1kaXNjb3Zlcnly0wkAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC10ZXN0LWRpc2NvdmVyeVgOAAAAVGVzdCBEaXNjb3Zlcnl0ctQJAABYEQAAAGZvcm1hdHRlci1vYmplY3RzctUJAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNmb3JtYXR0ZXItb2JqZWN0c1gRAAAARm9ybWF0dGVyIE9iamVjdHN0ctYJAABYGAAAAGh0dHAtZGlnZXN0LWF1dGgtaGFuZGxlcnLXCQAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjaHR0cC1kaWdlc3QtYXV0aC1oYW5kbGVyWB0AAABIVFRQRGlnZXN0QXV0aEhhbmRsZXIgT2JqZWN0c3Ry2AkAAFgHAAAAbGV4aWNhbHLZCQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNsZXhpY2FsWBAAAABMZXhpY2FsIGFuYWx5c2lzdHLaCQAAWBYAAABkb21ldmVudHN0cmVhbS1vYmplY3RzctsJAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20ucHVsbGRvbS5odG1sI2RvbWV2ZW50c3RyZWFtLW9iamVjdHNYFgAAAERPTUV2ZW50U3RyZWFtIE9iamVjdHN0ctwJAABYCgAAAHBpY2tsZS1zdWJy3QkAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGlja2xlLmh0bWwjcGlja2xlLXN1YlgWAAAAU3ViY2xhc3NpbmcgVW5waWNrbGVyc3Ry3gkAAFgPAAAAc2VxdWVuY2VvYmplY3Rzct8JAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jb25jcmV0ZS5odG1sI3NlcXVlbmNlb2JqZWN0c1gQAAAAU2VxdWVuY2UgT2JqZWN0c3Ry4AkAAFgPAAAAY29udGV4dC1tYW5hZ2VycuEJAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9ob3d0by9sb2dnaW5nLWNvb2tib29rLmh0bWwjY29udGV4dC1tYW5hZ2VyWC0AAABVc2luZyBhIGNvbnRleHQgbWFuYWdlciBmb3Igc2VsZWN0aXZlIGxvZ2dpbmd0cuIJAABYEQAAAHdhcm5pbmctZnVuY3Rpb25zcuMJAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dhcm5pbmdzLmh0bWwjd2FybmluZy1mdW5jdGlvbnNYEwAAAEF2YWlsYWJsZSBGdW5jdGlvbnN0cuQJAABYDAAAAHF1ZXVlb2JqZWN0c3LlCQAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9xdWV1ZS5odG1sI3F1ZXVlb2JqZWN0c1gNAAAAUXVldWUgT2JqZWN0c3Ry5gkAAFgMAAAAaW50cm9kdWN0aW9ucucJAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvaW50cm9kdWN0aW9uLmh0bWwjaW50cm9kdWN0aW9uWAwAAABJbnRyb2R1Y3Rpb250cugJAABYCQAAAHJlZmNvdW50c3LpCQAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZXh0ZW5kaW5nL2V4dGVuZGluZy5odG1sI3JlZmNvdW50c1gQAAAAUmVmZXJlbmNlIENvdW50c3Ry6gkAAFgHAAAAb3MtcGF0aHLrCQAAKGppAQAAamoBAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLXBhdGhYIAAAAE1pc2NlbGxhbmVvdXMgU3lzdGVtIEluZm9ybWF0aW9udHLsCQAAWAQAAABwYXNzcu0JAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWwjcGFzc1gSAAAAVGhlIHBhc3Mgc3RhdGVtZW50dHLuCQAAWAYAAABtYXJrdXBy7wkAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFya3VwLmh0bWwjbWFya3VwWCIAAABTdHJ1Y3R1cmVkIE1hcmt1cCBQcm9jZXNzaW5nIFRvb2xzdHLwCQAAWA8AAABzeXN0ZW1mdW5jdGlvbnNy8QkAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N5cy5odG1sI3N5c3RlbWZ1bmN0aW9uc1gQAAAAU3lzdGVtIEZ1bmN0aW9uc3Ry8gkAAFgTAAAAYXBpLXJlZmNvdW50ZGV0YWlsc3LzCQAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW50cm8uaHRtbCNhcGktcmVmY291bnRkZXRhaWxzWBcAAABSZWZlcmVuY2UgQ291bnQgRGV0YWlsc3Ry9AkAAFgKAAAAcGFyc2V0dXBsZXL1CQAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZXh0ZW5kaW5nL2V4dGVuZGluZy5odG1sI3BhcnNldHVwbGVYLAAAAEV4dHJhY3RpbmcgUGFyYW1ldGVycyBpbiBFeHRlbnNpb24gRnVuY3Rpb25zdHL2CQAAWBsAAABhYnN0cmFjdC1iYXNpYy1hdXRoLWhhbmRsZXJy9wkAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI2Fic3RyYWN0LWJhc2ljLWF1dGgtaGFuZGxlclggAAAAQWJzdHJhY3RCYXNpY0F1dGhIYW5kbGVyIE9iamVjdHN0cvgJAABYDgAAAGZvcm1hdGV4YW1wbGVzcvkJAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZy5odG1sI2Zvcm1hdGV4YW1wbGVzWA8AAABGb3JtYXQgZXhhbXBsZXN0cvoJAABYCQAAAGFwaS1pbnRyb3L7CQAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW50cm8uaHRtbCNhcGktaW50cm9YDAAAAEludHJvZHVjdGlvbnRy/AkAAFgTAAAAYXBwbGljYXRpb24tb2JqZWN0c3L9CQAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcmFtZXdvcmsuaHRtbCNhcHBsaWNhdGlvbi1vYmplY3RzWBMAAABBcHBsaWNhdGlvbiBPYmplY3RzdHL+CQAAWAgAAABmZWF0dXJlc3L/CQAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNmZWF0dXJlc1gIAAAARmVhdHVyZXN0cgAKAABYEwAAAGRvbS1lbGVtZW50LW9iamVjdHNyAQoAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI2RvbS1lbGVtZW50LW9iamVjdHNYDwAAAEVsZW1lbnQgT2JqZWN0c3RyAgoAAFgKAAAAbXNpLXRhYmxlc3IDCgAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2ktdGFibGVzWBIAAABQcmVjb21wdXRlZCB0YWJsZXN0cgQKAABYGwAAAGRpc3R1dGlscy1idWlsZC1leHQtaW5wbGFjZXIFCgAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2NvbmZpZ2ZpbGUuaHRtbCNkaXN0dXRpbHMtYnVpbGQtZXh0LWlucGxhY2VYAQAAAC10cgYKAABYDQAAAGltYXA0LW9iamVjdHNyBwoAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXA0LW9iamVjdHNYDQAAAElNQVA0IE9iamVjdHN0cggKAABYFAAAAG1haWxib3gtYmFieWxtZXNzYWdlcgkKAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94LWJhYnlsbWVzc2FnZVgMAAAAQmFieWxNZXNzYWdldHIKCgAAWBcAAABlbGVtZW50dHJlZS1wYXJzaW5nLXhtbHILCgAAKGppAQAAamoBAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCNlbGVtZW50dHJlZS1wYXJzaW5nLXhtbFgLAAAAUGFyc2luZyBYTUx0cgwKAABYBAAAAGV4ZWNyDQoAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNleGVjWBIAAABUaGUgZXhlYyBzdGF0ZW1lbnR0cg4KAABYEAAAAGluc3QtYWx0LWluc3RhbGxyDwoAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2luc3RhbGwvaW5kZXguaHRtbCNpbnN0LWFsdC1pbnN0YWxsWBYAAABBbHRlcm5hdGUgSW5zdGFsbGF0aW9udHIQCgAAWAwAAABzc2wtc2VjdXJpdHlyEQoAAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLXNlY3VyaXR5WBcAAABTZWN1cml0eSBjb25zaWRlcmF0aW9uc3RyEgoAAFgJAAAAdHJhY2UtYXBpchMKAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RyYWNlLmh0bWwjdHJhY2UtYXBpWBYAAABQcm9ncmFtbWF0aWMgSW50ZXJmYWNldHIUCgAAWA4AAABtZW1vcnlvdmVydmlld3IVCgAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbWVtb3J5Lmh0bWwjbWVtb3J5b3ZlcnZpZXdYCAAAAE92ZXJ2aWV3dHIWCgAAWBMAAABtYWlsYm94LW1ib3htZXNzYWdlchcKAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94LW1ib3htZXNzYWdlWAsAAABtYm94TWVzc2FnZXRyGAoAAFgOAAAAYmluYXJ5LW9iamVjdHNyGQoAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1scnBjbGliLmh0bWwjYmluYXJ5LW9iamVjdHNYDgAAAEJpbmFyeSBPYmplY3RzdHIaCgAAWA4AAABzZWN0aW9uLXBlcDMwN3IbCgAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi4zLmh0bWwjc2VjdGlvbi1wZXAzMDdYHAAAAFBFUCAzMDc6IFBpY2tsZSBFbmhhbmNlbWVudHN0chwKAABYCwAAAGdldHRpbmctb3N4ch0KAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy9tYWMuaHRtbCNnZXR0aW5nLW9zeFggAAAAR2V0dGluZyBhbmQgSW5zdGFsbGluZyBNYWNQeXRob250ch4KAABYCAAAAGRlYnVnZ2Vych8KAAAoamkBAABqagEAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BkYi5odG1sI2RlYnVnZ2VyWBsAAABwZGIg4oCUIFRoZSBQeXRob24gRGVidWdnZXJ0ciAKAABYEAAAAGluc3Qtc2VhcmNoLXBhdGhyIQoAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2luc3RhbGwvaW5kZXguaHRtbCNpbnN0LXNlYXJjaC1wYXRoWCAAAABNb2RpZnlpbmcgUHl0aG9u4oCZcyBTZWFyY2ggUGF0aHRyIgoAAFgTAAAAdHV0LWxpc3RzLWFzLXF1ZXVlc3IjCgAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvZGF0YXN0cnVjdHVyZXMuaHRtbCN0dXQtbGlzdHMtYXMtcXVldWVzWBUAAABVc2luZyBMaXN0cyBhcyBRdWV1ZXN0ciQKAABYBgAAADI2YWNrc3IlCgAAKGppAQAAamoBAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi42Lmh0bWwjYWNrc1gQAAAAQWNrbm93bGVkZ2VtZW50c3RyJgoAAFgKAAAAYXNzaWdubWVudHInCgAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI2Fzc2lnbm1lbnRYFQAAAEFzc2lnbm1lbnQgc3RhdGVtZW50c3RyKAoAAFgPAAAAZXh0ZW5kaW5nLWluZGV4cikKAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9leHRlbmRpbmcvaW5kZXguaHRtbCNleHRlbmRpbmctaW5kZXhYLgAAAEV4dGVuZGluZyBhbmQgRW1iZWRkaW5nIHRoZSBQeXRob24gSW50ZXJwcmV0ZXJ0cioKAABYEQAAAGh0dHAtcGFzc3dvcmQtbWdycisKAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCNodHRwLXBhc3N3b3JkLW1nclgXAAAASFRUUFBhc3N3b3JkTWdyIE9iamVjdHN0ciwKAABYDAAAAHNtdHAtb2JqZWN0c3ItCgAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zbXRwbGliLmh0bWwjc210cC1vYmplY3RzWAwAAABTTVRQIE9iamVjdHN0ci4KAABYDgAAAHR1dC1kZWNpbWFsLWZwci8KAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9zdGRsaWIyLmh0bWwjdHV0LWRlY2ltYWwtZnBYIQAAAERlY2ltYWwgRmxvYXRpbmcgUG9pbnQgQXJpdGhtZXRpY3RyMAoAAFgLAAAAYmx0aW4tdHlwZXNyMQoAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNibHRpbi10eXBlc1gOAAAAQnVpbHQtaW4gVHlwZXN0cjIKAABYDgAAAHdhcm5pbmctZmlsdGVycjMKAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dhcm5pbmdzLmh0bWwjd2FybmluZy1maWx0ZXJYEwAAAFRoZSBXYXJuaW5ncyBGaWx0ZXJ0cjQKAABYCQAAAGZ1bmMtZGljdHI1CgAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNmdW5jLWRpY3RYAQAAAC10cjYKAABYFgAAAGh0dHBjb25uZWN0aW9uLW9iamVjdHNyNwoAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHR0cGxpYi5odG1sI2h0dHBjb25uZWN0aW9uLW9iamVjdHNYFgAAAEhUVFBDb25uZWN0aW9uIE9iamVjdHN0cjgKAABYEwAAAGd6aXAtdXNhZ2UtZXhhbXBsZXNyOQoAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ3ppcC5odG1sI2d6aXAtdXNhZ2UtZXhhbXBsZXNYEQAAAEV4YW1wbGVzIG9mIHVzYWdldHI6CgAAWBQAAABhdWRpby1kZXZpY2Utb2JqZWN0c3I7CgAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdW5hdWRpby5odG1sI2F1ZGlvLWRldmljZS1vYmplY3RzWBQAAABBdWRpbyBEZXZpY2UgT2JqZWN0c3RyPAoAAFgJAAAAcmVmZXJlbmNlcj0KAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvY29tbWFuZHJlZi5odG1sI3JlZmVyZW5jZVgRAAAAQ29tbWFuZCBSZWZlcmVuY2V0cj4KAABYFwAAAG1zd2luLXNwZWNpZmljLXNlcnZpY2Vzcj8KAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dpbmRvd3MuaHRtbCNtc3dpbi1zcGVjaWZpYy1zZXJ2aWNlc1gcAAAATVMgV2luZG93cyBTcGVjaWZpYyBTZXJ2aWNlc3RyQAoAAFgIAAAAcGVwLTMxNDFyQQoAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuNi5odG1sI3BlcC0zMTQxWCYAAABQRVAgMzE0MTogQSBUeXBlIEhpZXJhcmNoeSBmb3IgTnVtYmVyc3RyQgoAAFgQAAAAdXJsbGliMi1leGFtcGxlc3JDCgAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi1leGFtcGxlc1gIAAAARXhhbXBsZXN0ckQKAABYDgAAAGRiaGFzaC1vYmplY3RzckUKAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RiaGFzaC5odG1sI2RiaGFzaC1vYmplY3RzWBAAAABEYXRhYmFzZSBPYmplY3RzdHJGCgAAWA4AAABkaXN0dXRpbHMtdGVybXJHCgAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2ludHJvZHVjdGlvbi5odG1sI2Rpc3R1dGlscy10ZXJtWB4AAABEaXN0dXRpbHMtc3BlY2lmaWMgdGVybWlub2xvZ3l0ckgKAABYDQAAAHR1dC1mcC1pc3N1ZXNySQoAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2Zsb2F0aW5ncG9pbnQuaHRtbCN0dXQtZnAtaXNzdWVzWDIAAABGbG9hdGluZyBQb2ludCBBcml0aG1ldGljOiAgSXNzdWVzIGFuZCBMaW1pdGF0aW9uc3RySgoAAFgRAAAAc3ViY2xhc3NpbmctcmVwcnNySwoAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVwci5odG1sI3N1YmNsYXNzaW5nLXJlcHJzWBgAAABTdWJjbGFzc2luZyBSZXByIE9iamVjdHN0ckwKAABYDAAAAGNzdi1jb250ZW50c3JNCgAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jc3YuaHRtbCNjc3YtY29udGVudHNYDwAAAE1vZHVsZSBDb250ZW50c3RyTgoAAFgLAAAAdHV0LXJhaXNpbmdyTwoAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2Vycm9ycy5odG1sI3R1dC1yYWlzaW5nWBIAAABSYWlzaW5nIEV4Y2VwdGlvbnN0clAKAABYFAAAAGRvY3Rlc3QtdW5pdHRlc3QtYXBpclEKAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LXVuaXR0ZXN0LWFwaVgMAAAAVW5pdHRlc3QgQVBJdHJSCgAAWAsAAAB0dXQtc3RhcnR1cHJTCgAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvYXBwZW5kaXguaHRtbCN0dXQtc3RhcnR1cFgcAAAAVGhlIEludGVyYWN0aXZlIFN0YXJ0dXAgRmlsZXRyVAoAAFgPAAAAc2V0dGluZy1lbnZ2YXJzclUKAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy93aW5kb3dzLmh0bWwjc2V0dGluZy1lbnZ2YXJzWCcAAABFeGN1cnN1czogU2V0dGluZyBlbnZpcm9ubWVudCB2YXJpYWJsZXN0clYKAABYCwAAAHdpbmRvd3MtZmFxclcKAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9mYXEvd2luZG93cy5odG1sI3dpbmRvd3MtZmFxWBUAAABQeXRob24gb24gV2luZG93cyBGQVF0clgKAABYGAAAAGNvb2tpZWxpYi1jb29raWUtb2JqZWN0c3JZCgAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWItY29va2llLW9iamVjdHNYDgAAAENvb2tpZSBPYmplY3RzdHJaCgAAWA4AAABjb29raWUtb2JqZWN0c3JbCgAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWUuaHRtbCNjb29raWUtb2JqZWN0c1gOAAAAQ29va2llIE9iamVjdHN0clwKAABYIAAAAHR1dC1jbGFzcy1hbmQtaW5zdGFuY2UtdmFyaWFibGVzcl0KAAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9jbGFzc2VzLmh0bWwjdHV0LWNsYXNzLWFuZC1pbnN0YW5jZS12YXJpYWJsZXNYHAAAAENsYXNzIGFuZCBJbnN0YW5jZSBWYXJpYWJsZXN0cl4KAABYGAAAAGRvbS1kb2N1bWVudHR5cGUtb2JqZWN0c3JfCgAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjZG9tLWRvY3VtZW50dHlwZS1vYmplY3RzWBQAAABEb2N1bWVudFR5cGUgT2JqZWN0c3RyYAoAAFgTAAAAaXRlcnRvb2xzLWZ1bmN0aW9uc3JhCgAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pdGVydG9vbHMuaHRtbCNpdGVydG9vbHMtZnVuY3Rpb25zWBIAAABJdGVydG9vbCBmdW5jdGlvbnN0cmIKAABYCAAAAGdpbHN0YXRlcmMKAAAoamkBAABqagEAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbml0Lmh0bWwjZ2lsc3RhdGVYGgAAAE5vbi1QeXRob24gY3JlYXRlZCB0aHJlYWRzdHJkCgAAWA0AAABzdWJzY3JpcHRpb25zcmUKAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNzdWJzY3JpcHRpb25zWA0AAABTdWJzY3JpcHRpb25zdHJmCgAAWA4AAABjcG9ydGluZy1ob3d0b3JnCgAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaG93dG8vY3BvcnRpbmcuaHRtbCNjcG9ydGluZy1ob3d0b1glAAAAUG9ydGluZyBFeHRlbnNpb24gTW9kdWxlcyB0byBQeXRob24gM3RyaAoAAFgXAAAAaHR0cC1iYXNpYy1hdXRoLWhhbmRsZXJyaQoAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI2h0dHAtYmFzaWMtYXV0aC1oYW5kbGVyWBwAAABIVFRQQmFzaWNBdXRoSGFuZGxlciBPYmplY3RzdHJqCgAAWBEAAABkb2N0ZXN0LWJhc2ljLWFwaXJrCgAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC1iYXNpYy1hcGlYCQAAAEJhc2ljIEFQSXRybAoAAFgNAAAAY3VzdG9taXphdGlvbnJtCgAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI2N1c3RvbWl6YXRpb25YEwAAAEJhc2ljIGN1c3RvbWl6YXRpb250cm4KAABYDwAAAGRvbS1jb25mb3JtYW5jZXJvCgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjZG9tLWNvbmZvcm1hbmNlWAsAAABDb25mb3JtYW5jZXRycAoAAFgHAAAAcHJvZmlsZXJxCgAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wcm9maWxlLmh0bWwjcHJvZmlsZVgUAAAAVGhlIFB5dGhvbiBQcm9maWxlcnN0cnIKAABYBwAAAHBlcC0zMzhycwoAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuNS5odG1sI3BlcC0zMzhYJQAAAFBFUCAzMzg6IEV4ZWN1dGluZyBNb2R1bGVzIGFzIFNjcmlwdHN0cnQKAABYEgAAAGJsdGluLXR5cGUtb2JqZWN0c3J1CgAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2JsdGluLXR5cGUtb2JqZWN0c1gMAAAAVHlwZSBPYmplY3RzdHJ2CgAAWAcAAABtb2R1bGVzcncKAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21vZHVsZXMuaHRtbCNtb2R1bGVzWBEAAABJbXBvcnRpbmcgTW9kdWxlc3RyeAoAAFgWAAAAbG9nZ2luZy1iYXNpYy10dXRvcmlhbHJ5CgAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaG93dG8vbG9nZ2luZy5odG1sI2xvZ2dpbmctYmFzaWMtdHV0b3JpYWxYFgAAAEJhc2ljIExvZ2dpbmcgVHV0b3JpYWx0cnoKAABYCgAAAG5vbmVvYmplY3RyewoAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL25vbmUuaHRtbCNub25lb2JqZWN0WA8AAABUaGUgTm9uZSBPYmplY3R0cnwKAABYEAAAAGF0dHJpYnV0ZS1hY2Nlc3NyfQoAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNhdHRyaWJ1dGUtYWNjZXNzWBwAAABDdXN0b21pemluZyBhdHRyaWJ1dGUgYWNjZXNzdHJ+CgAAWA8AAAB0eXBlc3NlcS14cmFuZ2VyfwoAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCN0eXBlc3NlcS14cmFuZ2VYCwAAAFhSYW5nZSBUeXBldHKACgAAWCAAAABvcHRwYXJzZS1wcmludGluZy12ZXJzaW9uLXN0cmluZ3KBCgAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLXByaW50aW5nLXZlcnNpb24tc3RyaW5nWBkAAABQcmludGluZyBhIHZlcnNpb24gc3RyaW5ndHKCCgAAWA4AAAB0dXQtZG9jc3RyaW5nc3KDCgAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvY29udHJvbGZsb3cuaHRtbCN0dXQtZG9jc3RyaW5nc1gVAAAARG9jdW1lbnRhdGlvbiBTdHJpbmdzdHKECgAAWBIAAABhc3luY29yZS1leGFtcGxlLTJyhQoAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXN5bmNvcmUuaHRtbCNhc3luY29yZS1leGFtcGxlLTJYIgAAAGFzeW5jb3JlIEV4YW1wbGUgYmFzaWMgZWNobyBzZXJ2ZXJ0coYKAABYEgAAAGZpbHRlcnMtZGljdGNvbmZpZ3KHCgAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaG93dG8vbG9nZ2luZy1jb29rYm9vay5odG1sI2ZpbHRlcnMtZGljdGNvbmZpZ1glAAAAQ29uZmlndXJpbmcgZmlsdGVycyB3aXRoIGRpY3RDb25maWcoKXRyiAoAAFgQAAAAZnVuY3Rpb24tb2JqZWN0c3KJCgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZnVuY3Rpb24uaHRtbCNmdW5jdGlvbi1vYmplY3RzWBAAAABGdW5jdGlvbiBPYmplY3RzdHKKCgAAWA0AAABoYW5kbGUtb2JqZWN0cosKAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNoYW5kbGUtb2JqZWN0WBcAAABSZWdpc3RyeSBIYW5kbGUgT2JqZWN0c3RyjAoAAFgQAAAAdXNpbmctb24td2luZG93c3KNCgAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvd2luZG93cy5odG1sI3VzaW5nLW9uLXdpbmRvd3NYFwAAAFVzaW5nIFB5dGhvbiBvbiBXaW5kb3dzdHKOCgAAWA4AAABidWlsdC1pbi1mdW5jc3KPCgAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNidWlsdC1pbi1mdW5jc1gSAAAAQnVpbHQtaW4gRnVuY3Rpb25zdHKQCgAAWBYAAABvcHRwYXJzZS1vdGhlci1hY3Rpb25zcpEKAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2Utb3RoZXItYWN0aW9uc1gNAAAAT3RoZXIgYWN0aW9uc3RykgoAAFgIAAAAcGVwLTAzNzBykwoAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuNi5odG1sI3BlcC0wMzcwWCkAAABQRVAgMzcwOiBQZXItdXNlciBzaXRlLXBhY2thZ2VzIERpcmVjdG9yeXRylAoAAFgSAAAAbG9nZ2luZy1jb25maWctYXBpcpUKAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuY29uZmlnLmh0bWwjbG9nZ2luZy1jb25maWctYXBpWBcAAABDb25maWd1cmF0aW9uIGZ1bmN0aW9uc3RylgoAAFgVAAAAc3RyZWFtLXJlYWRlci1vYmplY3RzcpcKAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVjcy5odG1sI3N0cmVhbS1yZWFkZXItb2JqZWN0c1gUAAAAU3RyZWFtUmVhZGVyIE9iamVjdHN0cpgKAABYEAAAAHRocmVhZGVkLWltcG9ydHNymQoAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkZWQtaW1wb3J0c1gaAAAASW1wb3J0aW5nIGluIHRocmVhZGVkIGNvZGV0cpoKAABYGAAAAGNhY2hlZnRwLWhhbmRsZXItb2JqZWN0c3KbCgAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjY2FjaGVmdHAtaGFuZGxlci1vYmplY3RzWBcAAABDYWNoZUZUUEhhbmRsZXIgT2JqZWN0c3RynAoAAFgIAAAAcGVwLTAzNzhynQoAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuNy5odG1sI3BlcC0wMzc4WDEAAABQRVAgMzc4OiBGb3JtYXQgU3BlY2lmaWVyIGZvciBUaG91c2FuZHMgU2VwYXJhdG9ydHKeCgAAWA0AAABvcy1uZXdzdHJlYW1zcp8KAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MtbmV3c3RyZWFtc1gUAAAARmlsZSBPYmplY3QgQ3JlYXRpb250cqAKAABYGAAAAGN0eXBlcy1zdHJ1Y3R1cmVzLXVuaW9uc3KhCgAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMtc3RydWN0dXJlcy11bmlvbnNYFQAAAFN0cnVjdHVyZXMgYW5kIHVuaW9uc3RyogoAAFgKAAAAbW9kLXB5dGhvbnKjCgAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaG93dG8vd2Vic2VydmVycy5odG1sI21vZC1weXRob25YCgAAAG1vZF9weXRob250cqQKAABYDwAAAG1haWxib3gtbWFpbGRpcnKlCgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC1tYWlsZGlyWAcAAABNYWlsZGlydHKmCgAAWAwAAABvcGVyYXRvci1tYXBypwoAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci1tYXBYHgAAAE1hcHBpbmcgT3BlcmF0b3JzIHRvIEZ1bmN0aW9uc3RyqAoAAFgOAAAAc2hlbHZlLWV4YW1wbGVyqQoAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2hlbHZlLmh0bWwjc2hlbHZlLWV4YW1wbGVYBwAAAEV4YW1wbGV0cqoKAABYFQAAAGluc3QtYWx0LWluc3RhbGwtaG9tZXKrCgAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaW5zdGFsbC9pbmRleC5odG1sI2luc3QtYWx0LWluc3RhbGwtaG9tZVgnAAAAQWx0ZXJuYXRlIGluc3RhbGxhdGlvbjogdGhlIGhvbWUgc2NoZW1ldHKsCgAAWA0AAABwYXJlbnRoZXNpemVkcq0KAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNwYXJlbnRoZXNpemVkWBMAAABQYXJlbnRoZXNpemVkIGZvcm1zdHKuCgAAWA8AAABkb2N0ZXN0LWRvY3Rlc3RyrwoAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QtZG9jdGVzdFgPAAAARG9jVGVzdCBPYmplY3RzdHKwCgAAWAwAAABzbXRwLWhhbmRsZXJysQoAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI3NtdHAtaGFuZGxlclgLAAAAU01UUEhhbmRsZXJ0crIKAABYFAAAAG9wdHBhcnNlLXRlcm1pbm9sb2d5crMKAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UtdGVybWlub2xvZ3lYCwAAAFRlcm1pbm9sb2d5dHK0CgAAWBcAAABmdW5jdGlvbnMtaW4tY2dpLW1vZHVsZXK1CgAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jZ2kuaHRtbCNmdW5jdGlvbnMtaW4tY2dpLW1vZHVsZVgJAAAARnVuY3Rpb25zdHK2CgAAWBMAAABvcHRwYXJzZS1iYWNrZ3JvdW5kcrcKAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UtYmFja2dyb3VuZFgKAAAAQmFja2dyb3VuZHRyuAoAAFgGAAAAdHV0LWlmcrkKAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9jb250cm9sZmxvdy5odG1sI3R1dC1pZlgNAAAAaWYgU3RhdGVtZW50c3RyugoAAFgPAAAAYnVpbHQtaW4tY29uc3RzcrsKAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbnN0YW50cy5odG1sI2J1aWx0LWluLWNvbnN0c1gSAAAAQnVpbHQtaW4gQ29uc3RhbnRzdHK8CgAAWAcAAAB0aGluaWNlcr0KAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9leHRlbmRpbmcvZXh0ZW5kaW5nLmh0bWwjdGhpbmljZVgIAAAAVGhpbiBJY2V0cr4KAABYFAAAAGVtYmVkZGluZ2luY3BsdXNwbHVzcr8KAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9leHRlbmRpbmcvZW1iZWRkaW5nLmh0bWwjZW1iZWRkaW5naW5jcGx1c3BsdXNYFwAAAEVtYmVkZGluZyBQeXRob24gaW4gQysrdHLACgAAWAgAAABsYW5ndWFnZXLBCgAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sYW5ndWFnZS5odG1sI2xhbmd1YWdlWBgAAABQeXRob24gTGFuZ3VhZ2UgU2VydmljZXN0csIKAABYCAAAAHBlcC0wMzcycsMKAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjcuaHRtbCNwZXAtMDM3Mlg0AAAAUEVQIDM3MjogQWRkaW5nIGFuIE9yZGVyZWQgRGljdGlvbmFyeSB0byBjb2xsZWN0aW9uc3RyxAoAAFgPAAAAZHVtYmRibS1vYmplY3RzcsUKAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2R1bWJkYm0uaHRtbCNkdW1iZGJtLW9iamVjdHNYDwAAAER1bWJkYm0gT2JqZWN0c3RyxgoAAFgOAAAAbWVtb3J5ZXhhbXBsZXNyxwoAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21lbW9yeS5odG1sI21lbW9yeWV4YW1wbGVzWAgAAABFeGFtcGxlc3RyyAoAAFgTAAAAbWFpbGJveC1tbWRmbWVzc2FnZXLJCgAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC1tbWRmbWVzc2FnZVgLAAAATU1ERk1lc3NhZ2V0csoKAABYGAAAAG9wdHBhcnNlLWNyZWF0aW5nLXBhcnNlcnLLCgAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLWNyZWF0aW5nLXBhcnNlclgTAAAAQ3JlYXRpbmcgdGhlIHBhcnNlcnRyzAoAAFgdAAAAcHkyNy1tYWludGVuYW5jZS1lbmhhbmNlbWVudHNyzQoAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuNy5odG1sI3B5MjctbWFpbnRlbmFuY2UtZW5oYW5jZW1lbnRzWDUAAABOZXcgRmVhdHVyZXMgQWRkZWQgdG8gUHl0aG9uIDIuNyBNYWludGVuYW5jZSBSZWxlYXNlc3RyzgoAAFgMAAAAZXhwYXQtZXJyb3Jzcs8KAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCNleHBhdC1lcnJvcnNYFQAAAEV4cGF0IGVycm9yIGNvbnN0YW50c3Ry0AoAAFgNAAAAaW5zcGVjdC10eXBlc3LRCgAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC10eXBlc1gRAAAAVHlwZXMgYW5kIG1lbWJlcnN0ctIKAABYEwAAAGJyb3dzZXItY29udHJvbGxlcnNy0woAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2ViYnJvd3Nlci5odG1sI2Jyb3dzZXItY29udHJvbGxlcnNYGgAAAEJyb3dzZXIgQ29udHJvbGxlciBPYmplY3RzdHLUCgAAWAsAAABkZXZlbG9wbWVudHLVCgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZXZlbG9wbWVudC5odG1sI2RldmVsb3BtZW50WBEAAABEZXZlbG9wbWVudCBUb29sc3Ry1goAAFgDAAAAYW5kctcKAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNhbmRYEgAAAEJvb2xlYW4gb3BlcmF0aW9uc3Ry2AoAAFgQAAAAaHR0cGxpYi1leGFtcGxlc3LZCgAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odHRwbGliLmh0bWwjaHR0cGxpYi1leGFtcGxlc1gIAAAARXhhbXBsZXN0ctoKAABYCgAAAG1haWxib3gtbWhy2woAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3gtbWhYAgAAAE1IdHLcCgAAWBwAAABhYnN0cmFjdC1kaWdlc3QtYXV0aC1oYW5kbGVyct0KAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCNhYnN0cmFjdC1kaWdlc3QtYXV0aC1oYW5kbGVyWCEAAABBYnN0cmFjdERpZ2VzdEF1dGhIYW5kbGVyIE9iamVjdHN0ct4KAABYCwAAAHNldC1leGFtcGxlct8KAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NldHMuaHRtbCNzZXQtZXhhbXBsZVgHAAAARXhhbXBsZXRy4AoAAFgXAAAAcG9zdGluc3RhbGxhdGlvbi1zY3JpcHRy4QoAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9idWlsdGRpc3QuaHRtbCNwb3N0aW5zdGFsbGF0aW9uLXNjcmlwdFgbAAAAVGhlIFBvc3RpbnN0YWxsYXRpb24gc2NyaXB0dHLiCgAAWBoAAABzaW1wbGV4bWxycGNzZXJ2ZXItZXhhbXBsZXLjCgAAKGppAQAAamoBAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaW1wbGV4bWxycGNzZXJ2ZXIuaHRtbCNzaW1wbGV4bWxycGNzZXJ2ZXItZXhhbXBsZVgaAAAAU2ltcGxlWE1MUlBDU2VydmVyIEV4YW1wbGV0cuQKAABYBwAAAHBlcC0zNTdy5QoAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuNS5odG1sI3BlcC0zNTdYIwAAAFBFUCAzNTc6IFRoZSDigJhfX2luZGV4X1/igJkgbWV0aG9kdHLmCgAAWBUAAABsb3dlci1sZXZlbC1lbWJlZGRpbmdy5woAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2V4dGVuZGluZy9lbWJlZGRpbmcuaHRtbCNsb3dlci1sZXZlbC1lbWJlZGRpbmdYLQAAAEJleW9uZCBWZXJ5IEhpZ2ggTGV2ZWwgRW1iZWRkaW5nOiBBbiBvdmVydmlld3Ry6AoAAFgJAAAAZnVuYy1saXN0cukKAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2Z1bmMtbGlzdFgBAAAALXRy6goAAFgOAAAAbW9yc2VsLW9iamVjdHNy6woAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llLmh0bWwjbW9yc2VsLW9iamVjdHNYDgAAAE1vcnNlbCBPYmplY3RzdHLsCgAAWAoAAABkbnQtYmFzaWNzcu0KAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9leHRlbmRpbmcvbmV3dHlwZXMuaHRtbCNkbnQtYmFzaWNzWAoAAABUaGUgQmFzaWNzdHLuCgAAWBkAAABjdHlwZXMtY2FsbGJhY2stZnVuY3Rpb25zcu8KAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy1jYWxsYmFjay1mdW5jdGlvbnNYEgAAAENhbGxiYWNrIGZ1bmN0aW9uc3Ry8AoAAFgTAAAAdHV0LXN0YW5kYXJkbW9kdWxlc3LxCgAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvbW9kdWxlcy5odG1sI3R1dC1zdGFuZGFyZG1vZHVsZXNYEAAAAFN0YW5kYXJkIE1vZHVsZXN0cvIKAABYDgAAAHNlY3Rpb24tcGVwMzAxcvMKAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjMuaHRtbCNzZWN0aW9uLXBlcDMwMVgxAAAAUEVQIDMwMTogUGFja2FnZSBJbmRleCBhbmQgTWV0YWRhdGEgZm9yIERpc3R1dGlsc3Ry9AoAAFgFAAAAdHJ1dGhy9QoAAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCN0cnV0aFgTAAAAVHJ1dGggVmFsdWUgVGVzdGluZ3Ry9goAAFgIAAAAbmV3c3R5bGVy9woAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNuZXdzdHlsZVgdAAAATmV3LXN0eWxlIGFuZCBjbGFzc2ljIGNsYXNzZXN0cvgKAABYEAAAAGV4dGVuZGluZy1lcnJvcnNy+QoAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2V4dGVuZGluZy9leHRlbmRpbmcuaHRtbCNleHRlbmRpbmctZXJyb3JzWCEAAABJbnRlcm1lenpvOiBFcnJvcnMgYW5kIEV4Y2VwdGlvbnN0cvoKAABYFQAAAGNyb3NzLWNvbXBpbGUtd2luZG93c3L7CgAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2J1aWx0ZGlzdC5odG1sI2Nyb3NzLWNvbXBpbGUtd2luZG93c1gaAAAAQ3Jvc3MtY29tcGlsaW5nIG9uIFdpbmRvd3N0cvwKAABYDwAAAGRvY3Rlc3QtZXhhbXBsZXL9CgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC1leGFtcGxlWA8AAABFeGFtcGxlIE9iamVjdHN0cv4KAABYCQAAAHR1dC1yYW5nZXL/CgAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvY29udHJvbGZsb3cuaHRtbCN0dXQtcmFuZ2VYFAAAAFRoZSByYW5nZSgpIEZ1bmN0aW9udHIACwAAWAQAAABpZGxlcgELAAAoamkBAABqagEAAFgwAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lkbGUuaHRtbCNpZGxlWAQAAABJRExFdHICCwAAWBAAAABzZWN0aW9uLXB5bWFsbG9jcgMLAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjMuaHRtbCNzZWN0aW9uLXB5bWFsbG9jWCgAAABQeW1hbGxvYzogQSBTcGVjaWFsaXplZCBPYmplY3QgQWxsb2NhdG9ydHIECwAAWAcAAABwZXAtMzUzcgULAAAoamkBAABqagEAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjUuaHRtbCNwZXAtMzUzWCgAAABQRVAgMzUzOiBVc2luZyBzc2l6ZV90IGFzIHRoZSBpbmRleCB0eXBldHIGCwAAWAwAAABzZWN0aW9uLWJvb2xyBwsAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuMy5odG1sI3NlY3Rpb24tYm9vbFgXAAAAUEVQIDI4NTogQSBCb29sZWFuIFR5cGV0cggLAABYFQAAAHNjcm9sbGVkd2luZG93LW9iamVjdHIJCwAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcmFtZXdvcmsuaHRtbCNzY3JvbGxlZHdpbmRvdy1vYmplY3RYFQAAAFNjcm9sbGVkV2luZG93IE9iamVjdHRyCgsAAFgPAAAAbWFwcGluZy1zdHJ1Y3RzcgsLAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjbWFwcGluZy1zdHJ1Y3RzWBkAAABNYXBwaW5nIE9iamVjdCBTdHJ1Y3R1cmVzdHIMCwAAWBMAAABudC1ldmVudGxvZy1oYW5kbGVycg0LAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNudC1ldmVudGxvZy1oYW5kbGVyWBEAAABOVEV2ZW50TG9nSGFuZGxlcnRyDgsAAFgPAAAAaW1wbGVtZW50YXRpb25zcg8LAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvaW50cm9kdWN0aW9uLmh0bWwjaW1wbGVtZW50YXRpb25zWBkAAABBbHRlcm5hdGUgSW1wbGVtZW50YXRpb25zdHIQCwAAWA4AAAB0dXQtY29tbWVudGFyeXIRCwAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvaW50ZXJhY3RpdmUuaHRtbCN0dXQtY29tbWVudGFyeVgrAAAAQWx0ZXJuYXRpdmVzIHRvIHRoZSBJbnRlcmFjdGl2ZSBJbnRlcnByZXRlcnRyEgsAAFgIAAAAbGl0ZXJhbHNyEwsAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjbGl0ZXJhbHNYCAAAAExpdGVyYWxzdHIUCwAAWBEAAABhcmdwYXJzZS10dXRvcmlhbHIVCwAAKGppAQAAamoBAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaG93dG8vYXJncGFyc2UuaHRtbCNpZDFYAQAAAC10chYLAABYEwAAAGN0eXBlcy1yZXR1cm4tdHlwZXNyFwsAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLXJldHVybi10eXBlc1gMAAAAUmV0dXJuIHR5cGVzdHIYCwAAWBUAAABjdXJzZXNwYW5lbC1mdW5jdGlvbnNyGQsAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLnBhbmVsLmh0bWwjY3Vyc2VzcGFuZWwtZnVuY3Rpb25zWAkAAABGdW5jdGlvbnN0choLAABYDAAAAHF1ZXJ5aW5nLXN0c3IbCwAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wYXJzZXIuaHRtbCNxdWVyeWluZy1zdHNYFQAAAFF1ZXJpZXMgb24gU1QgT2JqZWN0c3RyHAsAAFgOAAAAdGVsbmV0LWV4YW1wbGVyHQsAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGVsbmV0bGliLmh0bWwjdGVsbmV0LWV4YW1wbGVYDgAAAFRlbG5ldCBFeGFtcGxldHIeCwAAWAsAAABtZXRob2R0YWJsZXIfCwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZXh0ZW5kaW5nL2V4dGVuZGluZy5odG1sI21ldGhvZHRhYmxlWDcAAABUaGUgTW9kdWxl4oCZcyBNZXRob2QgVGFibGUgYW5kIEluaXRpYWxpemF0aW9uIEZ1bmN0aW9udHIgCwAAWAwAAABmbG9hdG9iamVjdHNyIQsAAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2Zsb2F0Lmh0bWwjZmxvYXRvYmplY3RzWBYAAABGbG9hdGluZyBQb2ludCBPYmplY3RzdHIiCwAAWAIAAABpc3IjCwAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjaXNYFAAAAElkZW50aXR5IGNvbXBhcmlzb25zdHIkCwAAWBYAAABwcm90b2NvbC1lcnJvci1vYmplY3RzciULAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbHJwY2xpYi5odG1sI3Byb3RvY29sLWVycm9yLW9iamVjdHNYFQAAAFByb3RvY29sRXJyb3IgT2JqZWN0c3RyJgsAAFgQAAAAdHV0LW9zLWludGVyZmFjZXInCwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvc3RkbGliLmh0bWwjdHV0LW9zLWludGVyZmFjZVgaAAAAT3BlcmF0aW5nIFN5c3RlbSBJbnRlcmZhY2V0cigLAABYCQAAAHR1dC11c2luZ3IpCwAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvaW50ZXJwcmV0ZXIuaHRtbCN0dXQtdXNpbmdYHAAAAFVzaW5nIHRoZSBQeXRob24gSW50ZXJwcmV0ZXJ0cioLAABYDAAAAHRhci1leGFtcGxlc3IrCwAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyLWV4YW1wbGVzWAgAAABFeGFtcGxlc3RyLAsAAFgQAAAAc2VxdWVuY2UtbWV0aG9kc3ItCwAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI3NlcXVlbmNlLW1ldGhvZHNYMgAAAEFkZGl0aW9uYWwgbWV0aG9kcyBmb3IgZW11bGF0aW9uIG9mIHNlcXVlbmNlIHR5cGVzdHIuCwAAWAgAAABwZXAtMDM3MXIvCwAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi42Lmh0bWwjcGVwLTAzNzFYJAAAAFBFUCAzNzE6IFRoZSBtdWx0aXByb2Nlc3NpbmcgUGFja2FnZXRyMAsAAFgSAAAAc3RhbmRhcmRleGNlcHRpb25zcjELAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjc3RhbmRhcmRleGNlcHRpb25zWBMAAABTdGFuZGFyZCBFeGNlcHRpb25zdHIyCwAAWAIAAABpZnIzCwAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLmh0bWwjaWZYEAAAAFRoZSBpZiBzdGF0ZW1lbnR0cjQLAABYCwAAAGRvbS1leGFtcGxlcjULAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20ubWluaWRvbS5odG1sI2RvbS1leGFtcGxlWAsAAABET00gRXhhbXBsZXRyNgsAAFgTAAAAbW9yZS1tZXRhY2hhcmFjdGVyc3I3CwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaG93dG8vcmVnZXguaHRtbCNtb3JlLW1ldGFjaGFyYWN0ZXJzWBMAAABNb3JlIE1ldGFjaGFyYWN0ZXJzdHI4CwAAWAYAAABweXRob25yOQsAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHl0aG9uLmh0bWwjcHl0aG9uWBcAAABQeXRob24gUnVudGltZSBTZXJ2aWNlc3RyOgsAAFgCAAAAaW5yOwsAAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2luWBoAAABNZW1iZXJzaGlwIHRlc3Qgb3BlcmF0aW9uc3RyPAsAAFgQAAAAZGVjaW1hbC10dXRvcmlhbHI9CwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC10dXRvcmlhbFgUAAAAUXVpY2stc3RhcnQgVHV0b3JpYWx0cj4LAABYBwAAAGhhbmRsZXJyPwsAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2hhbmRsZXJYDwAAAEhhbmRsZXIgT2JqZWN0c3RyQAsAAFgZAAAAbG9nZ2luZy1jb25maWctZmlsZWZvcm1hdHJBCwAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmNvbmZpZy5odG1sI2xvZ2dpbmctY29uZmlnLWZpbGVmb3JtYXRYGQAAAENvbmZpZ3VyYXRpb24gZmlsZSBmb3JtYXR0ckILAABYDwAAAHN0cnVjdC1leGFtcGxlc3JDCwAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJ1Y3QuaHRtbCNzdHJ1Y3QtZXhhbXBsZXNYCAAAAEV4YW1wbGVzdHJECwAAWAsAAAB0dXQtZ2VuZXhwc3JFCwAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvY2xhc3Nlcy5odG1sI3R1dC1nZW5leHBzWBUAAABHZW5lcmF0b3IgRXhwcmVzc2lvbnN0ckYLAABYCAAAAHdpbi1kbGxzckcLAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9leHRlbmRpbmcvd2luZG93cy5odG1sI3dpbi1kbGxzWBYAAABVc2luZyBETExzIGluIFByYWN0aWNldHJICwAAWA0AAABtYXRjaC1vYmplY3RzckkLAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlLmh0bWwjbWF0Y2gtb2JqZWN0c1gNAAAATWF0Y2ggT2JqZWN0c3RySgsAAFgJAAAAaW1hZ2luYXJ5cksLAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2ltYWdpbmFyeVgSAAAASW1hZ2luYXJ5IGxpdGVyYWxzdHJMCwAAWAgAAABleGFtcGxlc3JNCwAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2V4YW1wbGVzLmh0bWwjZXhhbXBsZXNYCAAAAEV4YW1wbGVzdHJOCwAAWBYAAAB0dXQtYmF0dGVyaWVzLWluY2x1ZGVkck8LAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9zdGRsaWIuaHRtbCN0dXQtYmF0dGVyaWVzLWluY2x1ZGVkWBIAAABCYXR0ZXJpZXMgSW5jbHVkZWR0clALAABYHwAAAGN0eXBlcy1maW5kaW5nLXNoYXJlZC1saWJyYXJpZXNyUQsAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLWZpbmRpbmctc2hhcmVkLWxpYnJhcmllc1gYAAAARmluZGluZyBzaGFyZWQgbGlicmFyaWVzdHJSCwAAWBoAAABvcHRwYXJzZS1wb3B1bGF0aW5nLXBhcnNlcnJTCwAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLXBvcHVsYXRpbmctcGFyc2VyWBUAAABQb3B1bGF0aW5nIHRoZSBwYXJzZXJ0clQLAABYBgAAAHNvbWVvc3JVCwAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb21lb3MuaHRtbCNzb21lb3NYIgAAAE9wdGlvbmFsIE9wZXJhdGluZyBTeXN0ZW0gU2VydmljZXN0clYLAABYCgAAAHR1dC1zdGRlcnJyVwsAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL3N0ZGxpYi5odG1sI3R1dC1zdGRlcnJYMAAAAEVycm9yIE91dHB1dCBSZWRpcmVjdGlvbiBhbmQgUHJvZ3JhbSBUZXJtaW5hdGlvbnRyWAsAAFgYAAAAaW5zdC1wbGF0Zm9ybS12YXJpYXRpb25zclkLAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9pbnN0YWxsL2luZGV4Lmh0bWwjaW5zdC1wbGF0Zm9ybS12YXJpYXRpb25zWBMAAABQbGF0Zm9ybSB2YXJpYXRpb25zdHJaCwAAWBQAAABpbnB1dC1zb3VyY2Utb2JqZWN0c3JbCwAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI2lucHV0LXNvdXJjZS1vYmplY3RzWBMAAABJbnB1dFNvdXJjZSBPYmplY3RzdHJcCwAAWAoAAABsb2ctcmVjb3Jkcl0LAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2ctcmVjb3JkWBEAAABMb2dSZWNvcmQgT2JqZWN0c3RyXgsAAFgQAAAAbG9nZ2luZy1jb29rYm9va3JfCwAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaG93dG8vbG9nZ2luZy1jb29rYm9vay5odG1sI2xvZ2dpbmctY29va2Jvb2tYEAAAAExvZ2dpbmcgQ29va2Jvb2t0cmALAABYBQAAAHlpZWxkcmELAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWwjeWllbGRYEwAAAFRoZSB5aWVsZCBzdGF0ZW1lbnR0cmILAABYEgAAAGRlZmluaW5nLW5ldy10eXBlc3JjCwAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZXh0ZW5kaW5nL25ld3R5cGVzLmh0bWwjZGVmaW5pbmctbmV3LXR5cGVzWBIAAABEZWZpbmluZyBOZXcgVHlwZXN0cmQLAABYDgAAAG51bWVyaWNvYmplY3RzcmULAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jb25jcmV0ZS5odG1sI251bWVyaWNvYmplY3RzWA8AAABOdW1lcmljIE9iamVjdHN0cmYLAABYFgAAAGluc3QtaG93LWluc3RhbGwtd29ya3NyZwsAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2luc3RhbGwvaW5kZXguaHRtbCNpbnN0LWhvdy1pbnN0YWxsLXdvcmtzWBYAAABIb3cgaW5zdGFsbGF0aW9uIHdvcmtzdHJoCwAAWBAAAABlbWJlZGRpbmctbG9jYWxlcmkLAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvY2FsZS5odG1sI2VtYmVkZGluZy1sb2NhbGVYNAAAAEZvciBleHRlbnNpb24gd3JpdGVycyBhbmQgcHJvZ3JhbXMgdGhhdCBlbWJlZCBQeXRob250cmoLAABYDwAAAG5ldHdvcmstbG9nZ2luZ3JrCwAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaG93dG8vbG9nZ2luZy1jb29rYm9vay5odG1sI25ldHdvcmstbG9nZ2luZ1g1AAAAU2VuZGluZyBhbmQgcmVjZWl2aW5nIGxvZ2dpbmcgZXZlbnRzIGFjcm9zcyBhIG5ldHdvcmt0cmwLAABYBwAAAHBlcC0zMTRybQsAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuNS5odG1sI3BlcC0zMTRYMwAAAFBFUCAzMTQ6IE1ldGFkYXRhIGZvciBQeXRob24gU29mdHdhcmUgUGFja2FnZXMgdjEuMXRybgsAAFgFAAAAYnJlYWtybwsAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNicmVha1gTAAAAVGhlIGJyZWFrIHN0YXRlbWVudHRycAsAAFgNAAAAY3JlYXRpbmctcnBtc3JxCwAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2J1aWx0ZGlzdC5odG1sI2NyZWF0aW5nLXJwbXNYFQAAAENyZWF0aW5nIFJQTSBwYWNrYWdlc3RycgsAAFgVAAAAY29va2llLXBvbGljeS1vYmplY3RzcnMLAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZS1wb2xpY3ktb2JqZWN0c1gUAAAAQ29va2llUG9saWN5IE9iamVjdHN0cnQLAABYEAAAAHB5dGhvbi1pbnRlcmZhY2VydQsAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGltZWl0Lmh0bWwjcHl0aG9uLWludGVyZmFjZVgQAAAAUHl0aG9uIEludGVyZmFjZXRydgsAAFgiAAAAY3R5cGVzLWNhbGxpbmctZnVuY3Rpb25zLWNvbnRpbnVlZHJ3CwAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMtY2FsbGluZy1mdW5jdGlvbnMtY29udGludWVkWBwAAABDYWxsaW5nIGZ1bmN0aW9ucywgY29udGludWVkdHJ4CwAAWBAAAAB3cml0ZXItaW50ZXJmYWNlcnkLAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Zvcm1hdHRlci5odG1sI3dyaXRlci1pbnRlcmZhY2VYFAAAAFRoZSBXcml0ZXIgSW50ZXJmYWNldHJ6CwAAWBEAAABibHRpbi1udWxsLW9iamVjdHJ7CwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2JsdGluLW51bGwtb2JqZWN0WA8AAABUaGUgTnVsbCBPYmplY3R0cnwLAABYDQAAAGRhdGV0aW1lLWRhdGVyfQsAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS1kYXRlWAwAAABkYXRlIE9iamVjdHN0cn4LAABYFwAAAGN0eXBlcy1jdHlwZXMtcmVmZXJlbmNlcn8LAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy1jdHlwZXMtcmVmZXJlbmNlWBAAAABjdHlwZXMgcmVmZXJlbmNldHKACwAAWAoAAABtc2ktZXJyb3JzcoELAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI21zaS1lcnJvcnNYBgAAAEVycm9yc3RyggsAAFgKAAAAc2luZ2xlLWV4dHKDCwAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2V4YW1wbGVzLmh0bWwjc2luZ2xlLWV4dFgXAAAAU2luZ2xlIGV4dGVuc2lvbiBtb2R1bGV0coQLAABYCwAAAGlkZW50aWZpZXJzcoULAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2lkZW50aWZpZXJzWBgAAABJZGVudGlmaWVycyBhbmQga2V5d29yZHN0coYLAABYDAAAAHR1dC1mcC1lcnJvcnKHCwAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvZmxvYXRpbmdwb2ludC5odG1sI3R1dC1mcC1lcnJvclgUAAAAUmVwcmVzZW50YXRpb24gRXJyb3J0cogLAABYJQAAAG9wdHBhcnNlLXVuZGVyc3RhbmRpbmctb3B0aW9uLWFjdGlvbnNyiQsAAChqaQEAAGpqAQAAWFUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS11bmRlcnN0YW5kaW5nLW9wdGlvbi1hY3Rpb25zWBwAAABVbmRlcnN0YW5kaW5nIG9wdGlvbiBhY3Rpb25zdHKKCwAAWA0AAAB0dXQtY3VzdG9taXplcosLAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9hcHBlbmRpeC5odG1sI3R1dC1jdXN0b21pemVYGQAAAFRoZSBDdXN0b21pemF0aW9uIE1vZHVsZXN0cowLAABYFQAAAHR5cGUtc3BlY2lmaWMtbWV0aG9kc3KNCwAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3R5cGUtc3BlY2lmaWMtbWV0aG9kc1gBAAAALXRyjgsAAFgiAAAAb3B0cGFyc2UtY29uZmxpY3RzLWJldHdlZW4tb3B0aW9uc3KPCwAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLWNvbmZsaWN0cy1iZXR3ZWVuLW9wdGlvbnNYGQAAAENvbmZsaWN0cyBiZXR3ZWVuIG9wdGlvbnN0cpALAABYCgAAAHR1dC1vYmplY3RykQsAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2NsYXNzZXMuaHRtbCN0dXQtb2JqZWN0WB4AAABBIFdvcmQgQWJvdXQgTmFtZXMgYW5kIE9iamVjdHN0cpILAABYEAAAAHR1dC1kaWN0aW9uYXJpZXNykwsAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2RhdGFzdHJ1Y3R1cmVzLmh0bWwjdHV0LWRpY3Rpb25hcmllc1gMAAAARGljdGlvbmFyaWVzdHKUCwAAWAkAAABlbmNvZGluZ3NylQsAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjZW5jb2RpbmdzWBUAAABFbmNvZGluZyBkZWNsYXJhdGlvbnN0cpYLAABYGAAAAGRvY3Rlc3Qtd2hpY2gtZG9jc3RyaW5nc3KXCwAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC13aGljaC1kb2NzdHJpbmdzWB4AAABXaGljaCBEb2NzdHJpbmdzIEFyZSBFeGFtaW5lZD90cpgLAABYFQAAAG9wdHBhcnNlLXN0b3JlLWFjdGlvbnKZCwAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLXN0b3JlLWFjdGlvblgQAAAAVGhlIHN0b3JlIGFjdGlvbnRymgsAAFgMAAAAbWFpbGJveC1tbWRmcpsLAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94LW1tZGZYBAAAAE1NREZ0cpwLAABYHQAAAGN0eXBlcy1mdW5kYW1lbnRhbC1kYXRhLXR5cGVzcp0LAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy1mdW5kYW1lbnRhbC1kYXRhLXR5cGVzWBYAAABGdW5kYW1lbnRhbCBkYXRhIHR5cGVzdHKeCwAAWAgAAABhYnN0cmFjdHKfCwAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYWJzdHJhY3QuaHRtbCNhYnN0cmFjdFgWAAAAQWJzdHJhY3QgT2JqZWN0cyBMYXllcnRyoAsAAFgcAAAAY3R5cGVzLXN0cnVjdHVyZWQtZGF0YS10eXBlc3KhCwAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMtc3RydWN0dXJlZC1kYXRhLXR5cGVzWBUAAABTdHJ1Y3R1cmVkIGRhdGEgdHlwZXN0cqILAABYDAAAAHNvcnRpbmdob3d0b3KjCwAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaG93dG8vc29ydGluZy5odG1sI3NvcnRpbmdob3d0b1gOAAAAU29ydGluZyBIT1cgVE90cqQLAABYEwAAAHR1dC1jbGFzc2RlZmluaXRpb25ypQsAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2NsYXNzZXMuaHRtbCN0dXQtY2xhc3NkZWZpbml0aW9uWBcAAABDbGFzcyBEZWZpbml0aW9uIFN5bnRheHRypgsAAFgqAAAAY3R5cGVzLXN0cnVjdHVyZXVuaW9uLWFsaWdubWVudC1ieXRlLW9yZGVycqcLAAAoamkBAABqagEAAFhYAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy1zdHJ1Y3R1cmV1bmlvbi1hbGlnbm1lbnQtYnl0ZS1vcmRlclgBAAAALXRyqAsAAFgJAAAAYXJjaGl2aW5ncqkLAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FyY2hpdmluZy5odG1sI2FyY2hpdmluZ1geAAAARGF0YSBDb21wcmVzc2lvbiBhbmQgQXJjaGl2aW5ndHKqCwAAWA0AAABpbnN0YWxsLWluZGV4cqsLAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9pbnN0YWxsL2luZGV4Lmh0bWwjaW5zdGFsbC1pbmRleFgqAAAASW5zdGFsbGluZyBQeXRob24gTW9kdWxlcyAoTGVnYWN5IHZlcnNpb24pdHKsCwAAWBMAAAB0dXQtaW5zdGFuY2VvYmplY3Rzcq0LAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9jbGFzc2VzLmh0bWwjdHV0LWluc3RhbmNlb2JqZWN0c1gQAAAASW5zdGFuY2UgT2JqZWN0c3RyrgsAAFgZAAAAZG9tLWF0dHJpYnV0ZWxpc3Qtb2JqZWN0c3KvCwAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjZG9tLWF0dHJpYnV0ZWxpc3Qtb2JqZWN0c1gUAAAATmFtZWROb2RlTWFwIE9iamVjdHN0crALAABYCQAAAHJlLXN5bnRheHKxCwAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sI3JlLXN5bnRheFgZAAAAUmVndWxhciBFeHByZXNzaW9uIFN5bnRheHRysgsAAFgRAAAAbWFuaWZlc3RfdGVtcGxhdGVyswsAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9zb3VyY2VkaXN0Lmh0bWwjbWFuaWZlc3QtdGVtcGxhdGVYGAAAAFRoZSBNQU5JRkVTVC5pbiB0ZW1wbGF0ZXRytAsAAFgFAAAAdHlwZXNytQsAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCN0eXBlc1gbAAAAVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5dHK2CwAAWAUAAABhbGxvc3K3CwAAKGppAQAAamoBAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hbGxvcy5odG1sI2FsbG9zWCEAAABHZW5lcmljIE9wZXJhdGluZyBTeXN0ZW0gU2VydmljZXN0crgLAABYDQAAAHByb2ZpbGUtc3RhdHNyuQsAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHJvZmlsZS5odG1sI3Byb2ZpbGUtc3RhdHNYDwAAAFRoZSBTdGF0cyBDbGFzc3RyugsAAFgSAAAAaW5zdC1jb25maWctc3ludGF4crsLAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9pbnN0YWxsL2luZGV4Lmh0bWwjaW5zdC1jb25maWctc3ludGF4WBYAAABTeW50YXggb2YgY29uZmlnIGZpbGVzdHK8CwAAWAwAAAB0dXQtcGFja2FnZXNyvQsAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL21vZHVsZXMuaHRtbCN0dXQtcGFja2FnZXNYCAAAAFBhY2thZ2VzdHK+CwAAWBAAAABjdXJzZXMtZnVuY3Rpb25zcr8LAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy1mdW5jdGlvbnNYCQAAAEZ1bmN0aW9uc3RywAsAAFgMAAAAdHlwZXNtb2R1bGVzcsELAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjdHlwZXNtb2R1bGVzWAcAAABNb2R1bGVzdHLCCwAAWBAAAABhZXNlcnZlci1vYmplY3RzcsMLAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbmlhZWZyYW1lLmh0bWwjYWVzZXJ2ZXItb2JqZWN0c1gQAAAAQUVTZXJ2ZXIgT2JqZWN0c3RyxAsAAFgbAAAAbXVsdGlwcm9jZXNzaW5nLXByb2dyYW1taW5ncsULAAAoamkBAABqagEAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy1wcm9ncmFtbWluZ1gWAAAAUHJvZ3JhbW1pbmcgZ3VpZGVsaW5lc3RyxgsAAFgTAAAAeG1sLXZ1bG5lcmFiaWxpdGllc3LHCwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuaHRtbCN4bWwtdnVsbmVyYWJpbGl0aWVzWBMAAABYTUwgdnVsbmVyYWJpbGl0aWVzdHLICwAAWBsAAABpbmNyZW1lbnRhbC1lbmNvZGVyLW9iamVjdHNyyQsAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjaW5jcmVtZW50YWwtZW5jb2Rlci1vYmplY3RzWBoAAABJbmNyZW1lbnRhbEVuY29kZXIgT2JqZWN0c3RyygsAAFgNAAAAYWNjZXNzLXJpZ2h0c3LLCwAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjYWNjZXNzLXJpZ2h0c1gNAAAAQWNjZXNzIFJpZ2h0c3RyzAsAAFgXAAAAY29udGVudC1oYW5kbGVyLW9iamVjdHNyzQsAAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjY29udGVudC1oYW5kbGVyLW9iamVjdHNYFgAAAENvbnRlbnRIYW5kbGVyIE9iamVjdHN0cs4LAABYEAAAAHVzaW5nLW9uLWNtZGxpbmVyzwsAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL2NtZGxpbmUuaHRtbCN1c2luZy1vbi1jbWRsaW5lWAwAAABDb21tYW5kIGxpbmV0ctALAABYDgAAAGRpZmZlci1vYmplY3RzctELAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RpZmZsaWIuaHRtbCNkaWZmZXItb2JqZWN0c1gOAAAARGlmZmVyIE9iamVjdHN0ctILAABYGwAAAHRpbWVkLXJvdGF0aW5nLWZpbGUtaGFuZGxlcnLTCwAAKGppAQAAamoBAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjdGltZWQtcm90YXRpbmctZmlsZS1oYW5kbGVyWBgAAABUaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXJ0ctQLAABYDAAAAGxvY2stb2JqZWN0c3LVCwAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWRpbmcuaHRtbCNsb2NrLW9iamVjdHNYDAAAAExvY2sgT2JqZWN0c3Ry1gsAAFgIAAAAY29tbWVudHNy1wsAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjY29tbWVudHNYCAAAAENvbW1lbnRzdHLYCwAAWAwAAABjbGFzc29iamVjdHNy2QsAAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NsYXNzLmh0bWwjY2xhc3NvYmplY3RzWBoAAABDbGFzcyBhbmQgSW5zdGFuY2UgT2JqZWN0c3Ry2gsAAFgaAAAAbmV3LXN0eWxlLWF0dHJpYnV0ZS1hY2Nlc3Ny2wsAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNuZXctc3R5bGUtYXR0cmlidXRlLWFjY2Vzc1grAAAATW9yZSBhdHRyaWJ1dGUgYWNjZXNzIGZvciBuZXctc3R5bGUgY2xhc3Nlc3Ry3AsAAFgQAAAAdHV0LWZpcnN0Y2xhc3Nlc3LdCwAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvY2xhc3Nlcy5odG1sI3R1dC1maXJzdGNsYXNzZXNYFwAAAEEgRmlyc3QgTG9vayBhdCBDbGFzc2VzdHLeCwAAWAsAAABsb25nb2JqZWN0c3LfCwAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbG9uZy5odG1sI2xvbmdvYmplY3RzWBQAAABMb25nIEludGVnZXIgT2JqZWN0c3Ry4AsAAFgRAAAAbW9kdWxlLWNvbnRleHRsaWJy4QsAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuNi5odG1sI21vZHVsZS1jb250ZXh0bGliWBUAAABUaGUgY29udGV4dGxpYiBtb2R1bGV0cuILAABYCAAAAHR5cGVzc2VxcuMLAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjdHlwZXNzZXFYRwAAAFNlcXVlbmNlIFR5cGVzIOKAlCBzdHIsIHVuaWNvZGUsIGxpc3QsIHR1cGxlLCBieXRlYXJyYXksIGJ1ZmZlciwgeHJhbmdldHLkCwAAWBAAAABhc3luY2hhdC1leGFtcGxlcuULAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzeW5jaGF0Lmh0bWwjYXN5bmNoYXQtZXhhbXBsZVgQAAAAYXN5bmNoYXQgRXhhbXBsZXRy5gsAAFgSAAAAdHlwZWNvbnRleHRtYW5hZ2VycucLAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjdHlwZWNvbnRleHRtYW5hZ2VyWBUAAABDb250ZXh0IE1hbmFnZXIgVHlwZXN0cugLAABYCwAAADJ0bzMtZml4ZXJzcukLAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5LzJ0bzMuaHRtbCN0bzMtZml4ZXJzWAYAAABGaXhlcnN0cuoLAABYDAAAAG5udHAtb2JqZWN0c3LrCwAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ubnRwbGliLmh0bWwjbm50cC1vYmplY3RzWAwAAABOTlRQIE9iamVjdHN0cuwLAABYDAAAAHB5dGhvbi10ZXJtc3LtCwAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2ludHJvZHVjdGlvbi5odG1sI3B5dGhvbi10ZXJtc1gaAAAAR2VuZXJhbCBQeXRob24gdGVybWlub2xvZ3l0cu4LAABYEgAAAGRlYnVnLXNldHVwLXNjcmlwdHLvCwAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL3NldHVwc2NyaXB0Lmh0bWwjZGVidWctc2V0dXAtc2NyaXB0WBoAAABEZWJ1Z2dpbmcgdGhlIHNldHVwIHNjcmlwdHRy8AsAAFgOAAAAdXRjLWZvcm1hdHRpbmdy8QsAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2hvd3RvL2xvZ2dpbmctY29va2Jvb2suaHRtbCN1dGMtZm9ybWF0dGluZ1gyAAAARm9ybWF0dGluZyB0aW1lcyB1c2luZyBVVEMgKEdNVCkgdmlhIGNvbmZpZ3VyYXRpb250cvILAABYDgAAAHR1dG9yaWFsLWluZGV4cvMLAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9pbmRleC5odG1sI3R1dG9yaWFsLWluZGV4WBMAAABUaGUgUHl0aG9uIFR1dG9yaWFsdHL0CwAAWBcAAABkZXRlcm1pbmlzdGljLXByb2ZpbGluZ3L1CwAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wcm9maWxlLmh0bWwjZGV0ZXJtaW5pc3RpYy1wcm9maWxpbmdYIAAAAFdoYXQgSXMgRGV0ZXJtaW5pc3RpYyBQcm9maWxpbmc/dHL2CwAAWBEAAABmb3JtYXQtY2hhcmFjdGVyc3L3CwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJ1Y3QuaHRtbCNmb3JtYXQtY2hhcmFjdGVyc1gRAAAARm9ybWF0IENoYXJhY3RlcnN0cvgLAABYDgAAAGxpYnJhcnktY29uZmlncvkLAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9ob3d0by9sb2dnaW5nLmh0bWwjbGlicmFyeS1jb25maWdYIQAAAENvbmZpZ3VyaW5nIExvZ2dpbmcgZm9yIGEgTGlicmFyeXRy+gsAAFgNAAAAcGFja2FnZS1pbmRleHL7CwAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL3BhY2thZ2VpbmRleC5odG1sI3BhY2thZ2UtaW5kZXhYHwAAAFRoZSBQeXRob24gUGFja2FnZSBJbmRleCAoUHlQSSl0cvwLAABYFwAAAGJ1aWxkaW5nLXB5dGhvbi1vbi11bml4cv0LAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy91bml4Lmh0bWwjYnVpbGRpbmctcHl0aG9uLW9uLXVuaXhYDwAAAEJ1aWxkaW5nIFB5dGhvbnRy/gsAAFgSAAAAb3RoZXItZ3VpLXBhY2thZ2Vzcv8LAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L290aGVyZ3VpLmh0bWwjb3RoZXItZ3VpLXBhY2thZ2VzWCcAAABPdGhlciBHcmFwaGljYWwgVXNlciBJbnRlcmZhY2UgUGFja2FnZXN0cgAMAABYDwAAAHRhcmluZm8tb2JqZWN0c3IBDAAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyaW5mby1vYmplY3RzWA8AAABUYXJJbmZvIE9iamVjdHN0cgIMAABYDgAAAHdoYXRzbmV3LWluZGV4cgMMAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy9pbmRleC5odG1sI3doYXRzbmV3LWluZGV4WBYAAABXaGF04oCZcyBOZXcgaW4gUHl0aG9udHIEDAAAWBEAAABzY2hlZHVsZXItb2JqZWN0c3IFDAAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zY2hlZC5odG1sI3NjaGVkdWxlci1vYmplY3RzWBEAAABTY2hlZHVsZXIgT2JqZWN0c3RyBgwAAFgHAAAAbXNpLWd1aXIHDAAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2ktZ3VpWAsAAABHVUkgY2xhc3Nlc3RyCAwAAFgQAAAAb3BlcmF0b3Itc3VtbWFyeXIJDAAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjb3BlcmF0b3Itc3VtbWFyeVgTAAAAT3BlcmF0b3IgcHJlY2VkZW5jZXRyCgwAAFgFAAAAcG93ZXJyCwwAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI3Bvd2VyWBIAAABUaGUgcG93ZXIgb3BlcmF0b3J0cgwMAABYFQAAAHRraW50ZXItYmFzaWMtbWFwcGluZ3INDAAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90a2ludGVyLmh0bWwjdGtpbnRlci1iYXNpYy1tYXBwaW5nWB0AAABNYXBwaW5nIEJhc2ljIFRrIGludG8gVGtpbnRlcnRyDgwAAFgDAAAAc2dpcg8MAAAoamkBAABqagEAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NnaS5odG1sI3NnaVgaAAAAU0dJIElSSVggU3BlY2lmaWMgU2VydmljZXN0chAMAABYDwAAAGRlY2ltYWwtY29udGV4dHIRDAAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC1jb250ZXh0WA8AAABDb250ZXh0IG9iamVjdHN0chIMAABYBAAAAGFyZ3NyEwwAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXJncGFyc2UuaHRtbCNhcmdzWA8AAABCZXlvbmQgc3lzLmFyZ3Z0chQMAABYFgAAAHVzaW5nLW9uLW9wdGltaXphdGlvbnNyFQwAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL2NtZGxpbmUuaHRtbCN1c2luZy1vbi1vcHRpbWl6YXRpb25zWAEAAAAtdHIWDAAAWAcAAABtYXBwaW5nchcMAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tYXBwaW5nLmh0bWwjbWFwcGluZ1gQAAAATWFwcGluZyBQcm90b2NvbHRyGAwAAFgLAAAAdHV0LWxvZ2dpbmdyGQwAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL3N0ZGxpYjIuaHRtbCN0dXQtbG9nZ2luZ1gHAAAATG9nZ2luZ3RyGgwAAFgOAAAAcGlja2xlLWV4YW1wbGVyGwwAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGlja2xlLmh0bWwjcGlja2xlLWV4YW1wbGVYBwAAAEV4YW1wbGV0chwMAABYDQAAAHNobGV4LW9iamVjdHNyHQwAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2hsZXguaHRtbCNzaGxleC1vYmplY3RzWA0AAABzaGxleCBPYmplY3RzdHIeDAAAWA8AAAB0dXQtaW50ZXJhY3RpbmdyHwwAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2ludGVyYWN0aXZlLmh0bWwjdHV0LWludGVyYWN0aW5nWDIAAABJbnRlcmFjdGl2ZSBJbnB1dCBFZGl0aW5nIGFuZCBIaXN0b3J5IFN1YnN0aXR1dGlvbnRyIAwAAFgXAAAAc3FsaXRlMy1tb2R1bGUtY29udGVudHNyIQwAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMtbW9kdWxlLWNvbnRlbnRzWB4AAABNb2R1bGUgZnVuY3Rpb25zIGFuZCBjb25zdGFudHN0ciIMAABYGAAAAG5ldy1zdHlsZS1zcGVjaWFsLWxvb2t1cHIjDAAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI25ldy1zdHlsZS1zcGVjaWFsLWxvb2t1cFgrAAAAU3BlY2lhbCBtZXRob2QgbG9va3VwIGZvciBuZXctc3R5bGUgY2xhc3Nlc3RyJAwAAFgNAAAAYnVpbHRpbmNvZGVjc3IlDAAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2J1aWx0aW5jb2RlY3NYDwAAAEJ1aWx0LWluIENvZGVjc3RyJgwAAFgIAAAAdHlwZWl0ZXJyJwwAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCN0eXBlaXRlclgOAAAASXRlcmF0b3IgVHlwZXN0cigMAABYEAAAAGxpc3RpbmctcGFja2FnZXNyKQwAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9zZXR1cHNjcmlwdC5odG1sI2xpc3RpbmctcGFja2FnZXNYFgAAAExpc3Rpbmcgd2hvbGUgcGFja2FnZXN0cioMAABYDwAAAGN1c3RvbS1oYW5kbGVyc3IrDAAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaG93dG8vbG9nZ2luZy1jb29rYm9vay5odG1sI2N1c3RvbS1oYW5kbGVyc1gmAAAAQ3VzdG9taXppbmcgaGFuZGxlcnMgd2l0aCBkaWN0Q29uZmlnKCl0ciwMAABYFwAAAGN1c3RvbS1mb3JtYXQtZXhjZXB0aW9uci0MAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9ob3d0by9sb2dnaW5nLWNvb2tib29rLmh0bWwjY3VzdG9tLWZvcm1hdC1leGNlcHRpb25YHwAAAEN1c3RvbWl6ZWQgZXhjZXB0aW9uIGZvcm1hdHRpbmd0ci4MAABYEAAAAGRhdGFiYXNlLW9iamVjdHNyLwwAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXNpbGliLmh0bWwjZGF0YWJhc2Utb2JqZWN0c1gQAAAARGF0YWJhc2UgT2JqZWN0c3RyMAwAAFgdAAAAZGVmYXVsdC1jb29raWUtcG9saWN5LW9iamVjdHNyMQwAAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llbGliLmh0bWwjZGVmYXVsdC1jb29raWUtcG9saWN5LW9iamVjdHNYGwAAAERlZmF1bHRDb29raWVQb2xpY3kgT2JqZWN0c3RyMgwAAFgXAAAAdW5rbm93bi1oYW5kbGVyLW9iamVjdHNyMwwAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3Vua25vd24taGFuZGxlci1vYmplY3RzWBYAAABVbmtub3duSGFuZGxlciBPYmplY3RzdHI0DAAAWAkAAABwcm9maWxpbmdyNQwAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNwcm9maWxpbmdYFQAAAFByb2ZpbGluZyBhbmQgVHJhY2luZ3RyNgwAAFgQAAAAYWJzdHJhY3QtZ3JhbW1hcnI3DAAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hc3QuaHRtbCNhYnN0cmFjdC1ncmFtbWFyWBAAAABBYnN0cmFjdCBHcmFtbWFydHI4DAAAWBcAAABuZXctMjYtY29udGV4dC1tYW5hZ2Vyc3I5DAAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi42Lmh0bWwjbmV3LTI2LWNvbnRleHQtbWFuYWdlcnNYGAAAAFdyaXRpbmcgQ29udGV4dCBNYW5hZ2Vyc3RyOgwAAFgGAAAAZXhjZXB0cjsMAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCNleGNlcHRYEQAAAFRoZSB0cnkgc3RhdGVtZW50dHI8DAAAWAwAAABvdGhlcm9iamVjdHNyPQwAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvbmNyZXRlLmh0bWwjb3RoZXJvYmplY3RzWA0AAABPdGhlciBPYmplY3RzdHI+DAAAWAkAAABieXRlY29kZXNyPwwAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjYnl0ZWNvZGVzWBwAAABQeXRob24gQnl0ZWNvZGUgSW5zdHJ1Y3Rpb25zdHJADAAAWAwAAABwb3AzLW9iamVjdHNyQQwAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcG9wbGliLmh0bWwjcG9wMy1vYmplY3RzWAwAAABQT1AzIE9iamVjdHN0ckIMAABYEAAAAGR5bmFtaWMtZmVhdHVyZXNyQwwAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leGVjdXRpb25tb2RlbC5odG1sI2R5bmFtaWMtZmVhdHVyZXNYIQAAAEludGVyYWN0aW9uIHdpdGggZHluYW1pYyBmZWF0dXJlc3RyRAwAAFgIAAAAZ2VuaW5kZXgoamkBAABqagEAAFgnAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nZW5pbmRleC5odG1sWAUAAABJbmRleHRyRQwAAFgPAAAAbGlzdGluZy1tb2R1bGVzckYMAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvc2V0dXBzY3JpcHQuaHRtbCNsaXN0aW5nLW1vZHVsZXNYGgAAAExpc3RpbmcgaW5kaXZpZHVhbCBtb2R1bGVzdHJHDAAAWBIAAABibHRpbi1jb2RlLW9iamVjdHNySAwAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNibHRpbi1jb2RlLW9iamVjdHNYDAAAAENvZGUgT2JqZWN0c3RySQwAAFgPAAAAZGF0ZXRpbWVvYmplY3RzckoMAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kYXRldGltZS5odG1sI2RhdGV0aW1lb2JqZWN0c1gQAAAARGF0ZVRpbWUgT2JqZWN0c3RySwwAAFgIAAAAdHV0LW9kZHNyTAwAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2NsYXNzZXMuaHRtbCN0dXQtb2Rkc1gNAAAAT2RkcyBhbmQgRW5kc3RyTQwAAFgaAAAAc3VwcG9ydGluZy1jeWNsZS1kZXRlY3Rpb25yTgwAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2djc3VwcG9ydC5odG1sI3N1cHBvcnRpbmctY3ljbGUtZGV0ZWN0aW9uWCQAAABTdXBwb3J0aW5nIEN5Y2xpYyBHYXJiYWdlIENvbGxlY3Rpb250ck8MAABYJQAAAGN0eXBlcy1sb2FkaW5nLWR5bmFtaWMtbGluay1saWJyYXJpZXNyUAwAAChqaQEAAGpqAQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLWxvYWRpbmctZHluYW1pYy1saW5rLWxpYnJhcmllc1geAAAATG9hZGluZyBkeW5hbWljIGxpbmsgbGlicmFyaWVzdHJRDAAAWAMAAABpZGVyUgwAAChqaQEAAGpqAQAAWCwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL21hYy5odG1sI2lkZVgHAAAAVGhlIElERXRyUwwAAFgQAAAAY29udGV4dC1tYW5hZ2Vyc3JUDAAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI2NvbnRleHQtbWFuYWdlcnNYHwAAAFdpdGggU3RhdGVtZW50IENvbnRleHQgTWFuYWdlcnN0clUMAABYHwAAAG11bHRpcHJvY2Vzc2luZy1hZGRyZXNzLWZvcm1hdHNyVgwAAChqaQEAAGpqAQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLWFkZHJlc3MtZm9ybWF0c1gPAAAAQWRkcmVzcyBGb3JtYXRzdHJXDAAAWBIAAABzZW1hcGhvcmUtZXhhbXBsZXNyWAwAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjc2VtYXBob3JlLWV4YW1wbGVzWBEAAABTZW1hcGhvcmUgRXhhbXBsZXRyWQwAAFgJAAAAYXVnYXNzaWducloMAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWwjYXVnYXNzaWduWB8AAABBdWdtZW50ZWQgYXNzaWdubWVudCBzdGF0ZW1lbnRzdHJbDAAAWAYAAABub3QgaW5yXAwAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI25vdC1pblgaAAAATWVtYmVyc2hpcCB0ZXN0IG9wZXJhdGlvbnN0cl0MAABYFAAAAHVzaW5nLXRoZS1jZ2ktbW9kdWxlcl4MAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NnaS5odG1sI3VzaW5nLXRoZS1jZ2ktbW9kdWxlWBQAAABVc2luZyB0aGUgY2dpIG1vZHVsZXRyXwwAAFgNAAAAZmF1bHQtb2JqZWN0c3JgDAAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWxycGNsaWIuaHRtbCNmYXVsdC1vYmplY3RzWA0AAABGYXVsdCBPYmplY3RzdHJhDAAAWBoAAABzcWxpdGUzLWNvbm5lY3Rpb24tb2JqZWN0c3JiDAAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy1jb25uZWN0aW9uLW9iamVjdHNYEgAAAENvbm5lY3Rpb24gT2JqZWN0c3RyYwwAAFgJAAAAbmFtZXNwYWNlcmQMAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FyZ3BhcnNlLmh0bWwjbmFtZXNwYWNlWBQAAABUaGUgTmFtZXNwYWNlIG9iamVjdHRyZQwAAFgFAAAAc2xvdHNyZgwAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNzbG90c1gJAAAAX19zbG90c19fdHJnDAAAWA8AAABkb2N0ZXN0LXNvYXBib3hyaAwAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3Qtc29hcGJveFgHAAAAU29hcGJveHRyaQwAAFgPAAAAZGlmZmVyLWV4YW1wbGVzcmoMAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RpZmZsaWIuaHRtbCNkaWZmZXItZXhhbXBsZXNYDgAAAERpZmZlciBFeGFtcGxldHJrDAAAWA4AAABpbml0aWFsaXphdGlvbnJsDAAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2luaXRpYWxpemF0aW9uWCkAAABJbml0aWFsaXphdGlvbiwgRmluYWxpemF0aW9uLCBhbmQgVGhyZWFkc3RybQwAAFgYAAAAb3B0cGFyc2UtZ2VuZXJhdGluZy1oZWxwcm4MAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UtZ2VuZXJhdGluZy1oZWxwWA8AAABHZW5lcmF0aW5nIGhlbHB0cm8MAABYEgAAAGV4cGF0ZXJyb3Itb2JqZWN0c3JwDAAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWV4cGF0Lmh0bWwjZXhwYXRlcnJvci1vYmplY3RzWBUAAABFeHBhdEVycm9yIEV4Y2VwdGlvbnN0cnEMAABYDQAAAGVwb2xsLW9iamVjdHNycgwAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2VsZWN0Lmh0bWwjZXBvbGwtb2JqZWN0c1guAAAARWRnZSBhbmQgTGV2ZWwgVHJpZ2dlciBQb2xsaW5nIChlcG9sbCkgT2JqZWN0c3RycwwAAFgNAAAAYXRvbS1saXRlcmFsc3J0DAAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjYXRvbS1saXRlcmFsc1gIAAAATGl0ZXJhbHN0cnUMAABYCwAAAGNvbXBpbGF0aW9ucnYMAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9leHRlbmRpbmcvZXh0ZW5kaW5nLmh0bWwjY29tcGlsYXRpb25YFwAAAENvbXBpbGF0aW9uIGFuZCBMaW5rYWdldHJ3DAAAWA4AAAB0dXQtZ2VuZXJhdG9yc3J4DAAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvY2xhc3Nlcy5odG1sI3R1dC1nZW5lcmF0b3JzWAoAAABHZW5lcmF0b3JzdHJ5DAAAWBoAAABvcHRwYXJzZS1wYXJzaW5nLWFyZ3VtZW50c3J6DAAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLXBhcnNpbmctYXJndW1lbnRzWBEAAABQYXJzaW5nIGFyZ3VtZW50c3RyewwAAFgJAAAAYXBpLXR5cGVzcnwMAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbnRyby5odG1sI2FwaS10eXBlc1gFAAAAVHlwZXN0cn0MAABYDgAAAHR1dC1zdHJ1Y3R1cmVzcn4MAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9kYXRhc3RydWN0dXJlcy5odG1sI3R1dC1zdHJ1Y3R1cmVzWA8AAABEYXRhIFN0cnVjdHVyZXN0cn8MAABYLAAAAG9wdHBhcnNlLXF1ZXJ5aW5nLW1hbmlwdWxhdGluZy1vcHRpb24tcGFyc2VycoAMAAAoamkBAABqagEAAFhcAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UtcXVlcnlpbmctbWFuaXB1bGF0aW5nLW9wdGlvbi1wYXJzZXJYLAAAAFF1ZXJ5aW5nIGFuZCBtYW5pcHVsYXRpbmcgeW91ciBvcHRpb24gcGFyc2VydHKBDAAAWBEAAAB0dXQtYXJiaXRyYXJ5YXJnc3KCDAAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvY29udHJvbGZsb3cuaHRtbCN0dXQtYXJiaXRyYXJ5YXJnc1gYAAAAQXJiaXRyYXJ5IEFyZ3VtZW50IExpc3RzdHKDDAAAWA0AAAB0eXBlc2ludGVybmFscoQMAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjdHlwZXNpbnRlcm5hbFgQAAAASW50ZXJuYWwgT2JqZWN0c3RyhQwAAFgPAAAAZHluYW1pYy1saW5raW5ncoYMAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9leHRlbmRpbmcvd2luZG93cy5odG1sI2R5bmFtaWMtbGlua2luZ1gkAAAARGlmZmVyZW5jZXMgQmV0d2VlbiBVbml4IGFuZCBXaW5kb3dzdHKHDAAAWBAAAABvcmdhbml6aW5nLXRlc3RzcogMAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjb3JnYW5pemluZy10ZXN0c1gUAAAAT3JnYW5pemluZyB0ZXN0IGNvZGV0cokMAABYFAAAAGJhc2UtaGFuZGxlci1vYmplY3RzcooMAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCNiYXNlLWhhbmRsZXItb2JqZWN0c1gTAAAAQmFzZUhhbmRsZXIgT2JqZWN0c3RyiwwAAFgOAAAAbnVtYmVyLXN0cnVjdHNyjAwAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNudW1iZXItc3RydWN0c1gYAAAATnVtYmVyIE9iamVjdCBTdHJ1Y3R1cmVzdHKNDAAAWAwAAABjcmVhdGluZy1zdHNyjgwAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGFyc2VyLmh0bWwjY3JlYXRpbmctc3RzWBMAAABDcmVhdGluZyBTVCBPYmplY3RzdHKPDAAAWA0AAABzZWN0aW9uLW90aGVycpAMAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjMuaHRtbCNzZWN0aW9uLW90aGVyWBcAAABPdGhlciBDaGFuZ2VzIGFuZCBGaXhlc3RykQwAAFgSAAAAY29kZWMtYmFzZS1jbGFzc2VzcpIMAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjLWJhc2UtY2xhc3Nlc1gSAAAAQ29kZWMgQmFzZSBDbGFzc2VzdHKTDAAAWAsAAAB2YWx1ZS10eXBlc3KUDAAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjdmFsdWUtdHlwZXNYCwAAAFZhbHVlIFR5cGVzdHKVDAAAWA4AAABsaW5lLXN0cnVjdHVyZXKWDAAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNsaW5lLXN0cnVjdHVyZVgOAAAATGluZSBzdHJ1Y3R1cmV0cpcMAABYHAAAAGNvbnZlcnRpbmctYXJndW1lbnQtc2VxdWVuY2VymAwAAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI2NvbnZlcnRpbmctYXJndW1lbnQtc2VxdWVuY2VYNgAAAENvbnZlcnRpbmcgYW4gYXJndW1lbnQgc2VxdWVuY2UgdG8gYSBzdHJpbmcgb24gV2luZG93c3RymQwAAFgKAAAAZmlsZS1pbnB1dHKaDAAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL3RvcGxldmVsX2NvbXBvbmVudHMuaHRtbCNmaWxlLWlucHV0WAoAAABGaWxlIGlucHV0dHKbDAAAWBkAAABsb2dnaW5nLWltcG9ydC1yZXNvbHV0aW9ucpwMAAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuY29uZmlnLmh0bWwjbG9nZ2luZy1pbXBvcnQtcmVzb2x1dGlvblgmAAAASW1wb3J0IHJlc29sdXRpb24gYW5kIGN1c3RvbSBpbXBvcnRlcnN0cp0MAABYDAAAAHdyaXRlci1pbXBsc3KeDAAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCN3cml0ZXItaW1wbHNYFgAAAFdyaXRlciBJbXBsZW1lbnRhdGlvbnN0cp8MAABYEgAAAHdhdmUtd3JpdGUtb2JqZWN0c3KgDAAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93YXZlLmh0bWwjd2F2ZS13cml0ZS1vYmplY3RzWBIAAABXYXZlX3dyaXRlIE9iamVjdHN0cqEMAABYJgAAAG9wdHBhcnNlLXdoYXQtcG9zaXRpb25hbC1hcmd1bWVudHMtZm9ycqIMAAAoamkBAABqagEAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2Utd2hhdC1wb3NpdGlvbmFsLWFyZ3VtZW50cy1mb3JYIgAAAFdoYXQgYXJlIHBvc2l0aW9uYWwgYXJndW1lbnRzIGZvcj90cqMMAABYFAAAAGltbXV0YWJsZS10cmFuc2Zvcm1zcqQMAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NldHMuaHRtbCNpbW11dGFibGUtdHJhbnNmb3Jtc1guAAAAUHJvdG9jb2wgZm9yIGF1dG9tYXRpYyBjb252ZXJzaW9uIHRvIGltbXV0YWJsZXRypQwAAFgpAAAAY3R5cGVzLXNwZWNpZnlpbmctcmVxdWlyZWQtYXJndW1lbnQtdHlwZXNypgwAAChqaQEAAGpqAQAAWFcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLXNwZWNpZnlpbmctcmVxdWlyZWQtYXJndW1lbnQtdHlwZXNYPAAAAFNwZWNpZnlpbmcgdGhlIHJlcXVpcmVkIGFyZ3VtZW50IHR5cGVzIChmdW5jdGlvbiBwcm90b3R5cGVzKXRypwwAAFgLAAAAdHV0LXByaXZhdGVyqAwAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2NsYXNzZXMuaHRtbCN0dXQtcHJpdmF0ZVgsAAAAUHJpdmF0ZSBWYXJpYWJsZXMgYW5kIENsYXNzLWxvY2FsIFJlZmVyZW5jZXN0cqkMAABYCwAAAGZ0cC1vYmplY3RzcqoMAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z0cGxpYi5odG1sI2Z0cC1vYmplY3RzWAsAAABGVFAgT2JqZWN0c3RyqwwAAFgFAAAAdW5hcnlyrAwAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI3VuYXJ5WCcAAABVbmFyeSBhcml0aG1ldGljIGFuZCBiaXR3aXNlIG9wZXJhdGlvbnN0cq0MAABYDgAAAHR5cGVzZnVuY3Rpb25zcq4MAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjdHlwZXNmdW5jdGlvbnNYCQAAAEZ1bmN0aW9uc3RyrwwAAFgHAAAAdHV0LWRlbHKwDAAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvZGF0YXN0cnVjdHVyZXMuaHRtbCN0dXQtZGVsWBEAAABUaGUgZGVsIHN0YXRlbWVudHRysQwAAFgTAAAAc3FsaXRlMy1yb3ctb2JqZWN0c3KyDAAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy1yb3ctb2JqZWN0c1gLAAAAUm93IE9iamVjdHN0crMMAABYDgAAAHdlYWtyZWZvYmplY3RzcrQMAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS93ZWFrcmVmLmh0bWwjd2Vha3JlZm9iamVjdHNYFgAAAFdlYWsgUmVmZXJlbmNlIE9iamVjdHN0crUMAABYDAAAAHdpbi1jb29rYm9va3K2DAAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZXh0ZW5kaW5nL3dpbmRvd3MuaHRtbCN3aW4tY29va2Jvb2tYEwAAAEEgQ29va2Jvb2sgQXBwcm9hY2h0crcMAABYDgAAAGVtYWlsLWV4YW1wbGVzcrgMAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLWV4YW1wbGVzLmh0bWwjZW1haWwtZXhhbXBsZXNYDwAAAGVtYWlsOiBFeGFtcGxlc3RyuQwAAFgWAAAAbWFpbGJveC1tYWlsZGlybWVzc2FnZXK6DAAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC1tYWlsZGlybWVzc2FnZVgOAAAATWFpbGRpck1lc3NhZ2V0crsMAABYEAAAAGJ1ZmZlcmVkLWxvZ2dpbmdyvAwAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2hvd3RvL2xvZ2dpbmctY29va2Jvb2suaHRtbCNidWZmZXJlZC1sb2dnaW5nWDwAAABCdWZmZXJpbmcgbG9nZ2luZyBtZXNzYWdlcyBhbmQgb3V0cHV0dGluZyB0aGVtIGNvbmRpdGlvbmFsbHl0cr0MAABYDQAAAGJhY2t0b2V4YW1wbGVyvgwAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2V4dGVuZGluZy9leHRlbmRpbmcuaHRtbCNiYWNrdG9leGFtcGxlWBMAAABCYWNrIHRvIHRoZSBFeGFtcGxldHK/DAAAWA4AAABwdXJlLWVtYmVkZGluZ3LADAAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZXh0ZW5kaW5nL2VtYmVkZGluZy5odG1sI3B1cmUtZW1iZWRkaW5nWA4AAABQdXJlIEVtYmVkZGluZ3RywQwAAFgOAAAAcmVjb3JkLW9iamVjdHNywgwAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXNpbGliLmh0bWwjcmVjb3JkLW9iamVjdHNYDgAAAFJlY29yZCBPYmplY3RzdHLDDAAAWAkAAAB5aWVsZGV4cHJyxAwAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI3lpZWxkZXhwclgRAAAAWWllbGQgZXhwcmVzc2lvbnN0csUMAABYDwAAAG1lc3NhZ2Utb2JqZWN0c3LGDAAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZmM4MjIuaHRtbCNtZXNzYWdlLW9iamVjdHNYDwAAAE1lc3NhZ2UgT2JqZWN0c3RyxwwAAFgPAAAAbG9jYXRvci1vYmplY3RzcsgMAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjbG9jYXRvci1vYmplY3RzWA8AAABMb2NhdG9yIE9iamVjdHN0cskMAABYDAAAAHNldHVwLWNvbmZpZ3LKDAAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2NvbmZpZ2ZpbGUuaHRtbCNzZXR1cC1jb25maWdYJAAAAFdyaXRpbmcgdGhlIFNldHVwIENvbmZpZ3VyYXRpb24gRmlsZXRyywwAAFgUAAAAZG9jdGVzdC1hZHZhbmNlZC1hcGlyzAwAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QtYWR2YW5jZWQtYXBpWAwAAABBZHZhbmNlZCBBUEl0cs0MAABYFAAAAGRvbS1kb2N1bWVudC1vYmplY3Rzcs4MAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCNkb20tZG9jdW1lbnQtb2JqZWN0c1gQAAAARG9jdW1lbnQgT2JqZWN0c3RyzwwAAFgRAAAAY29uZGl0aW9uLW9iamVjdHNy0AwAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjY29uZGl0aW9uLW9iamVjdHNYEQAAAENvbmRpdGlvbiBPYmplY3RzdHLRDAAAWAoAAABmcmFtZXdvcmtzctIMAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZyYW1ld29ya3MuaHRtbCNmcmFtZXdvcmtzWBIAAABQcm9ncmFtIEZyYW1ld29ya3N0ctMMAABYEwAAAGh0bWxwYXJzZXItZXhhbXBsZXNy1AwAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHRtbHBhcnNlci5odG1sI2h0bWxwYXJzZXItZXhhbXBsZXNYCAAAAEV4YW1wbGVzdHLVDAAAWBkAAABmYXEtYXJndW1lbnQtdnMtcGFyYW1ldGVyctYMAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9mYXEvcHJvZ3JhbW1pbmcuaHRtbCNmYXEtYXJndW1lbnQtdnMtcGFyYW1ldGVyWDgAAABXaGF0IGlzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYXJndW1lbnRzIGFuZCBwYXJhbWV0ZXJzP3Ry1wwAAFgNAAAAMjVpbnRlcmFjdGl2ZXLYDAAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi41Lmh0bWwjaW50ZXJhY3RpdmVYHwAAAEludGVyYWN0aXZlIEludGVycHJldGVyIENoYW5nZXN0ctkMAABYEAAAAGluc3QtdHdlYWstZmxhZ3Ny2gwAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2luc3RhbGwvaW5kZXguaHRtbCNpbnN0LXR3ZWFrLWZsYWdzWB4AAABUd2Vha2luZyBjb21waWxlci9saW5rZXIgZmxhZ3N0ctsMAABYEAAAAGRhdGV0aW1lLW9iamVjdHNy3AwAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1scnBjbGliLmh0bWwjZGF0ZXRpbWUtb2JqZWN0c1gQAAAARGF0ZVRpbWUgT2JqZWN0c3Ry3QwAAFgRAAAAdW5pdHRlc3Qtc2tpcHBpbmdy3gwAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC1za2lwcGluZ1gkAAAAU2tpcHBpbmcgdGVzdHMgYW5kIGV4cGVjdGVkIGZhaWx1cmVzdHLfDAAAWBQAAABmaWxlLWhhbmRsZXItb2JqZWN0c3LgDAAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjZmlsZS1oYW5kbGVyLW9iamVjdHNYEwAAAEZpbGVIYW5kbGVyIE9iamVjdHN0cuEMAABYCQAAAHV0aWxpdGllc3LiDAAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdXRpbGl0aWVzLmh0bWwjdXRpbGl0aWVzWAkAAABVdGlsaXRpZXN0cuMMAABYGgAAAHN0cmZ0aW1lLXN0cnB0aW1lLWJlaGF2aW9ycuQMAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjc3RyZnRpbWUtc3RycHRpbWUtYmVoYXZpb3JYIgAAAHN0cmZ0aW1lKCkgYW5kIHN0cnB0aW1lKCkgQmVoYXZpb3J0cuUMAABYFgAAAGN0eXBlcy1jdHlwZXMtdHV0b3JpYWxy5gwAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLWN0eXBlcy10dXRvcmlhbFgPAAAAY3R5cGVzIHR1dG9yaWFsdHLnDAAAWAgAAABwZXAtMDM2NnLoDAAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi42Lmh0bWwjcGVwLTAzNjZYNQAAAFBFUCAzNjY6IEV4cGxpY2l0IFJlbGF0aXZlIEltcG9ydHMgRnJvbSBhIE1haW4gTW9kdWxldHLpDAAAWAoAAABkaWN0LXZpZXdzcuoMAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZGljdC12aWV3c1gXAAAARGljdGlvbmFyeSB2aWV3IG9iamVjdHN0cusMAABYCgAAAGJ1aWxkdmFsdWVy7AwAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2V4dGVuZGluZy9leHRlbmRpbmcuaHRtbCNidWlsZHZhbHVlWBkAAABCdWlsZGluZyBBcmJpdHJhcnkgVmFsdWVzdHLtDAAAWBgAAABtdWx0aXByb2Nlc3NpbmctZXhhbXBsZXNy7gwAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLWV4YW1wbGVzWAgAAABFeGFtcGxlc3Ry7wwAAFgbAAAAb3B0cGFyc2UtZXh0ZW5kaW5nLW9wdHBhcnNlcvAMAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UtZXh0ZW5kaW5nLW9wdHBhcnNlWBIAAABFeHRlbmRpbmcgb3B0cGFyc2V0cvEMAABYEwAAAGludGVycHJldGVyLW9iamVjdHNy8gwAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZS5odG1sI2ludGVycHJldGVyLW9iamVjdHNYHwAAAEludGVyYWN0aXZlIEludGVycHJldGVyIE9iamVjdHN0cvMMAABYJgAAAGN0eXBlcy1iaXQtZmllbGRzLWluLXN0cnVjdHVyZXMtdW5pb25zcvQMAAAoamkBAABqagEAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy1iaXQtZmllbGRzLWluLXN0cnVjdHVyZXMtdW5pb25zWCMAAABCaXQgZmllbGRzIGluIHN0cnVjdHVyZXMgYW5kIHVuaW9uc3Ry9QwAAFgSAAAAZG9jLXhtbHJwYy1zZXJ2ZXJzcvYMAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3htbHJwY3NlcnZlci5odG1sI2RvYy14bWxycGMtc2VydmVyc1gXAAAARG9jWE1MUlBDU2VydmVyIE9iamVjdHN0cvcMAABYEQAAAHNlY3Rpb24tZW51bWVyYXRlcvgMAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjMuaHRtbCNzZWN0aW9uLWVudW1lcmF0ZVgUAAAAUEVQIDI3OTogZW51bWVyYXRlKCl0cvkMAABYFgAAAHN0cmVhbS1yZWNvZGVyLW9iamVjdHNy+gwAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjc3RyZWFtLXJlY29kZXItb2JqZWN0c1gVAAAAU3RyZWFtUmVjb2RlciBPYmplY3RzdHL7DAAAWBsAAABpbmNyZW1lbnRhbC1kZWNvZGVyLW9iamVjdHNy/AwAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjaW5jcmVtZW50YWwtZGVjb2Rlci1vYmplY3RzWBoAAABJbmNyZW1lbnRhbERlY29kZXIgT2JqZWN0c3Ry/QwAAFgPAAAAemlwaW5mby1vYmplY3Rzcv4MAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBpbmZvLW9iamVjdHNYDwAAAFppcEluZm8gT2JqZWN0c3Ry/wwAAFgPAAAAc3NsLW5vbmJsb2NraW5ncgANAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC1ub25ibG9ja2luZ1gdAAAATm90ZXMgb24gbm9uLWJsb2NraW5nIHNvY2tldHN0cgENAABYCgAAAG1oLW9iamVjdHNyAg0AAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWhsaWIuaHRtbCNtaC1vYmplY3RzWAoAAABNSCBPYmplY3RzdHIDDQAAWBEAAABzZWN0aW9uLWVuY29kaW5nc3IEDQAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi4zLmh0bWwjc2VjdGlvbi1lbmNvZGluZ3NYHgAAAFBFUCAyNjM6IFNvdXJjZSBDb2RlIEVuY29kaW5nc3RyBQ0AAFgLAAAAaW5kZW50YXRpb25yBg0AAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjaW5kZW50YXRpb25YCwAAAEluZGVudGF0aW9udHIHDQAAWAcAAABwZXAtMzA4cggNAAAoamkBAABqagEAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjUuaHRtbCNwZXAtMzA4WCAAAABQRVAgMzA4OiBDb25kaXRpb25hbCBFeHByZXNzaW9uc3RyCQ0AAFgHAAAAcGVwLTMwOXIKDQAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi41Lmh0bWwjcGVwLTMwOVglAAAAUEVQIDMwOTogUGFydGlhbCBGdW5jdGlvbiBBcHBsaWNhdGlvbnRyCw0AAFgQAAAAbWFuaWZlc3Qtb3B0aW9uc3IMDQAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL3NvdXJjZWRpc3QuaHRtbCNtYW5pZmVzdC1vcHRpb25zWBgAAABNYW5pZmVzdC1yZWxhdGVkIG9wdGlvbnN0cg0NAABYEAAAAGF1LXdyaXRlLW9iamVjdHNyDg0AAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VuYXUuaHRtbCNhdS13cml0ZS1vYmplY3RzWBAAAABBVV93cml0ZSBPYmplY3RzdHIPDQAAWAgAAABjb2JqZWN0c3IQDQAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29iamVjdC5odG1sI2NvYmplY3RzWAgAAABDT2JqZWN0c3RyEQ0AAFgNAAAAYnVmZmVyb2JqZWN0c3ISDQAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYnVmZmVyLmh0bWwjYnVmZmVyb2JqZWN0c1geAAAAQnVmZmVycyBhbmQgTWVtb3J5dmlldyBPYmplY3RzdHITDQAAWAcAAABvYmplY3RzchQNAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0c1gZAAAAT2JqZWN0cywgdmFsdWVzIGFuZCB0eXBlc3RyFQ0AAFgVAAAAZGVzY3JpYmluZy1leHRlbnNpb25zchYNAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvc2V0dXBzY3JpcHQuaHRtbCNkZXNjcmliaW5nLWV4dGVuc2lvbnNYHAAAAERlc2NyaWJpbmcgZXh0ZW5zaW9uIG1vZHVsZXN0chcNAABYCAAAAGNvbXBvdW5kchgNAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCNjb21wb3VuZFgTAAAAQ29tcG91bmQgc3RhdGVtZW50c3RyGQ0AAFgUAAAAbG9ncmVjb3JkLWF0dHJpYnV0ZXNyGg0AAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ3JlY29yZC1hdHRyaWJ1dGVzWBQAAABMb2dSZWNvcmQgYXR0cmlidXRlc3RyGw0AAFgLAAAAZGVzY3JpcHRvcnNyHA0AAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNkZXNjcmlwdG9yc1gYAAAASW1wbGVtZW50aW5nIERlc2NyaXB0b3JzdHIdDQAAWA4AAABzZWN0aW9uLXNsaWNlc3IeDQAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi4zLmh0bWwjc2VjdGlvbi1zbGljZXNYDwAAAEV4dGVuZGVkIFNsaWNlc3RyHw0AAFgLAAAAb3MtcHJvY2luZm9yIA0AAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy1wcm9jaW5mb1gSAAAAUHJvY2VzcyBQYXJhbWV0ZXJzdHIhDQAAWAkAAAAyNW1vZHVsZXNyIg0AAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuNS5odG1sI21vZHVsZXNYIgAAAE5ldywgSW1wcm92ZWQsIGFuZCBSZW1vdmVkIE1vZHVsZXN0ciMNAABYEAAAAGJsdGluLWV4Y2VwdGlvbnNyJA0AAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI2JsdGluLWV4Y2VwdGlvbnNYEwAAAEJ1aWx0LWluIEV4Y2VwdGlvbnN0ciUNAABYFAAAAGN1cnNlcy1wYW5lbC1vYmplY3RzciYNAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5wYW5lbC5odG1sI2N1cnNlcy1wYW5lbC1vYmplY3RzWA0AAABQYW5lbCBPYmplY3RzdHInDQAAWB8AAABlbGVtZW50dHJlZS10cmVlYnVpbGRlci1vYmplY3RzcigNAAAoamkBAABqagEAAFhcAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI2VsZW1lbnR0cmVlLXRyZWVidWlsZGVyLW9iamVjdHNYEwAAAFRyZWVCdWlsZGVyIE9iamVjdHN0cikNAABYEwAAAHR1dC1kYXRlcy1hbmQtdGltZXNyKg0AAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL3N0ZGxpYi5odG1sI3R1dC1kYXRlcy1hbmQtdGltZXNYDwAAAERhdGVzIGFuZCBUaW1lc3RyKw0AAFgPAAAAd2Vha3JlZi1leGFtcGxlciwNAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dlYWtyZWYuaHRtbCN3ZWFrcmVmLWV4YW1wbGVYBwAAAEV4YW1wbGV0ci0NAABYCwAAAG1ldGFjbGFzc2Vzci4NAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjbWV0YWNsYXNzZXNYGgAAAEN1c3RvbWl6aW5nIGNsYXNzIGNyZWF0aW9udHIvDQAAWAwAAAB0dXQtaW52b2tpbmdyMA0AAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2ludGVycHJldGVyLmh0bWwjdHV0LWludm9raW5nWBgAAABJbnZva2luZyB0aGUgSW50ZXJwcmV0ZXJ0cjENAABYEwAAAGluc3QtY3VzdG9tLWluc3RhbGxyMg0AAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2luc3RhbGwvaW5kZXguaHRtbCNpbnN0LWN1c3RvbS1pbnN0YWxsWBMAAABDdXN0b20gSW5zdGFsbGF0aW9udHIzDQAAWAoAAABkZWxpbWl0ZXJzcjQNAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2RlbGltaXRlcnNYCgAAAERlbGltaXRlcnN0cjUNAABYDwAAAHB5cG9ydGluZy1ob3d0b3I2DQAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaG93dG8vcHlwb3J0aW5nLmh0bWwjcHlwb3J0aW5nLWhvd3RvWCEAAABQb3J0aW5nIFB5dGhvbiAyIENvZGUgdG8gUHl0aG9uIDN0cjcNAABYBwAAAG51bWVyaWNyOA0AAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbnVtZXJpYy5odG1sI251bWVyaWNYIAAAAE51bWVyaWMgYW5kIE1hdGhlbWF0aWNhbCBNb2R1bGVzdHI5DQAAWAoAAAB0dXQtc2NvcGVzcjoNAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9jbGFzc2VzLmh0bWwjdHV0LXNjb3Blc1gcAAAAUHl0aG9uIFNjb3BlcyBhbmQgTmFtZXNwYWNlc3RyOw0AAFgDAAAAZGVmcjwNAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCNkZWZYFAAAAEZ1bmN0aW9uIGRlZmluaXRpb25zdHI9DQAAWA4AAABsb2NhbGUtZ2V0dGV4dHI+DQAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUtZ2V0dGV4dFgaAAAAQWNjZXNzIHRvIG1lc3NhZ2UgY2F0YWxvZ3N0cj8NAABYCQAAAHR1dC1maWxlc3JADQAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvaW5wdXRvdXRwdXQuaHRtbCN0dXQtZmlsZXNYGQAAAFJlYWRpbmcgYW5kIFdyaXRpbmcgRmlsZXN0ckENAABYEQAAAHJlZmNvdW50c2lucHl0aG9uckINAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9leHRlbmRpbmcvZXh0ZW5kaW5nLmh0bWwjcmVmY291bnRzaW5weXRob25YHAAAAFJlZmVyZW5jZSBDb3VudGluZyBpbiBQeXRob250ckMNAABYDAAAAHR5cGUtc3RydWN0c3JEDQAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI3R5cGUtc3RydWN0c1gMAAAAVHlwZSBPYmplY3RzdHJFDQAAWAwAAABzb2NrZXQtaG93dG9yRg0AAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2hvd3RvL3NvY2tldHMuaHRtbCNzb2NrZXQtaG93dG9YGAAAAFNvY2tldCBQcm9ncmFtbWluZyBIT1dUT3RyRw0AAFggAAAAc3FsaXRlMy1jb250cm9sbGluZy10cmFuc2FjdGlvbnNySA0AAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMtY29udHJvbGxpbmctdHJhbnNhY3Rpb25zWBgAAABDb250cm9sbGluZyBUcmFuc2FjdGlvbnN0ckkNAABYDgAAAHBhY2thZ2UtdXBsb2FkckoNAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvcGFja2FnZWluZGV4Lmh0bWwjcGFja2FnZS11cGxvYWRYEgAAAFRoZSB1cGxvYWQgY29tbWFuZHRySw0AAFgcAAAAbm9uLWVzc2VudGlhbC1idWlsdC1pbi1mdW5jc3JMDQAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNub24tZXNzZW50aWFsLWJ1aWx0LWluLWZ1bmNzWCAAAABOb24tZXNzZW50aWFsIEJ1aWx0LWluIEZ1bmN0aW9uc3RyTQ0AAFgNAAAAbW9kdWxlLXNxbGl0ZXJODQAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi41Lmh0bWwjbW9kdWxlLXNxbGl0ZVgTAAAAVGhlIHNxbGl0ZTMgcGFja2FnZXRyTw0AAFgLAAAAc2V0LW9iamVjdHNyUA0AAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2V0cy5odG1sI3NldC1vYmplY3RzWAsAAABTZXQgT2JqZWN0c3RyUQ0AAFgZAAAAcHJveHktZGlnZXN0LWF1dGgtaGFuZGxlcnJSDQAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjcHJveHktZGlnZXN0LWF1dGgtaGFuZGxlclgeAAAAUHJveHlEaWdlc3RBdXRoSGFuZGxlciBPYmplY3RzdHJTDQAAWBIAAABkaXN0cmlidXRpbmctaW5kZXhyVA0AAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3RyaWJ1dGluZy9pbmRleC5odG1sI2Rpc3RyaWJ1dGluZy1pbmRleFgbAAAARGlzdHJpYnV0aW5nIFB5dGhvbiBNb2R1bGVzdHJVDQAAWA0AAABzZWN0LXJlbGxpbmtzclYNAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjIuaHRtbCNzZWN0LXJlbGxpbmtzWA0AAABSZWxhdGVkIExpbmtzdHJXDQAAWA4AAABhc3NlcnQtbWV0aG9kc3JYDQAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI2Fzc2VydC1tZXRob2RzWAEAAAAtdHJZDQAAWAkAAABleHBybGlzdHNyWg0AAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2V4cHJsaXN0c1gQAAAARXhwcmVzc2lvbiBsaXN0c3RyWw0AAFgJAAAAZW1iZWRkaW5nclwNAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9leHRlbmRpbmcvZW1iZWRkaW5nLmh0bWwjZW1iZWRkaW5nWCcAAABFbWJlZGRpbmcgUHl0aG9uIGluIEFub3RoZXIgQXBwbGljYXRpb250cl0NAABYCAAAAHBlcC0zMTI3cl4NAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjYuaHRtbCNwZXAtMzEyN1gsAAAAUEVQIDMxMjc6IEludGVnZXIgTGl0ZXJhbCBTdXBwb3J0IGFuZCBTeW50YXh0cl8NAABYFQAAAGRvY3Rlc3QtZG9jdGVzdHJ1bm5lcnJgDQAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC1kb2N0ZXN0cnVubmVyWBUAAABEb2NUZXN0UnVubmVyIG9iamVjdHN0cmENAABYCgAAAGluc3QtaW50cm9yYg0AAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2luc3RhbGwvaW5kZXguaHRtbCNpbnN0LWludHJvWAwAAABJbnRyb2R1Y3Rpb250cmMNAABYEwAAAGJ1aWxkaW5nLW9uLXdpbmRvd3NyZA0AAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2V4dGVuZGluZy93aW5kb3dzLmh0bWwjYnVpbGRpbmctb24td2luZG93c1goAAAAQnVpbGRpbmcgQyBhbmQgQysrIEV4dGVuc2lvbnMgb24gV2luZG93c3RyZQ0AAFgQAAAAc2VxdWVuY2UtbWF0Y2hlcnJmDQAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaWZmbGliLmh0bWwjc2VxdWVuY2UtbWF0Y2hlclgXAAAAU2VxdWVuY2VNYXRjaGVyIE9iamVjdHN0cmcNAABYEAAAAHNzbC1jZXJ0aWZpY2F0ZXNyaA0AAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLWNlcnRpZmljYXRlc1gMAAAAQ2VydGlmaWNhdGVzdHJpDQAAWA4AAABrZXZlbnQtb2JqZWN0c3JqDQAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZWxlY3QuaHRtbCNrZXZlbnQtb2JqZWN0c1gOAAAAS2V2ZW50IE9iamVjdHN0cmsNAABYGQAAAGxvZ2dpbmctYWR2YW5jZWQtdHV0b3JpYWxybA0AAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2hvd3RvL2xvZ2dpbmcuaHRtbCNsb2dnaW5nLWFkdmFuY2VkLXR1dG9yaWFsWBkAAABBZHZhbmNlZCBMb2dnaW5nIFR1dG9yaWFsdHJtDQAAWA4AAABjb21tb24tc3RydWN0c3JuDQAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3RydWN0dXJlcy5odG1sI2NvbW1vbi1zdHJ1Y3RzWBgAAABDb21tb24gT2JqZWN0IFN0cnVjdHVyZXN0cm8NAABYGgAAAGRpc3R1dGlscy1hZGRpdGlvbmFsLWZpbGVzcnANAAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvc2V0dXBzY3JpcHQuaHRtbCNkaXN0dXRpbHMtYWRkaXRpb25hbC1maWxlc1gbAAAASW5zdGFsbGluZyBBZGRpdGlvbmFsIEZpbGVzdHJxDQAAWBQAAABweWNsYnItY2xhc3Mtb2JqZWN0c3JyDQAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWNsYnIuaHRtbCNweWNsYnItY2xhc3Mtb2JqZWN0c1gNAAAAQ2xhc3MgT2JqZWN0c3Rycw0AAFgSAAAAZGlzdHV0aWxzLWNvbmNlcHRzcnQNAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvaW50cm9kdWN0aW9uLmh0bWwjZGlzdHV0aWxzLWNvbmNlcHRzWBYAAABDb25jZXB0cyAmIFRlcm1pbm9sb2d5dHJ1DQAAWBcAAABleHRlbmRpbmctc2ltcGxlZXhhbXBsZXJ2DQAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZXh0ZW5kaW5nL2V4dGVuZGluZy5odG1sI2V4dGVuZGluZy1zaW1wbGVleGFtcGxlWBAAAABBIFNpbXBsZSBFeGFtcGxldHJ3DQAAWBYAAABzcWxpdGUzLWN1cnNvci1vYmplY3RzcngNAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLWN1cnNvci1vYmplY3RzWA4AAABDdXJzb3IgT2JqZWN0c3RyeQ0AAFgOAAAAcmVwb3J0aW5nLWJ1Z3Nyeg0AAChqaQEAAGpqAQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2J1Z3MuaHRtbCNyZXBvcnRpbmctYnVnc1gOAAAAUmVwb3J0aW5nIEJ1Z3N0cnsNAABYDgAAAG9wZW4tY29uc3RhbnRzcnwNAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3Blbi1jb25zdGFudHNYFQAAAG9wZW4oKSBmbGFnIGNvbnN0YW50c3RyfQ0AAFgcAAAAaW5zdC1hbHQtaW5zdGFsbC1wcmVmaXgtdW5peHJ+DQAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaW5zdGFsbC9pbmRleC5odG1sI2luc3QtYWx0LWluc3RhbGwtcHJlZml4LXVuaXhYMAAAAEFsdGVybmF0ZSBpbnN0YWxsYXRpb246IFVuaXggKHRoZSBwcmVmaXggc2NoZW1lKXRyfw0AAFgNAAAAY29kZWMtb2JqZWN0c3KADQAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlYy1vYmplY3RzWA0AAABDb2RlYyBPYmplY3RzdHKBDQAAWA4AAABzdHJpbmdzZXJ2aWNlc3KCDQAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmdzLmh0bWwjc3RyaW5nc2VydmljZXNYDwAAAFN0cmluZyBTZXJ2aWNlc3Rygw0AAFgOAAAAeGRyLWV4Y2VwdGlvbnNyhA0AAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveGRybGliLmh0bWwjeGRyLWV4Y2VwdGlvbnNYCgAAAEV4Y2VwdGlvbnN0coUNAABYDgAAAGNvbXBvdW5kc2hhcGVzcoYNAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI2NvbXBvdW5kc2hhcGVzWCkAAABFeGN1cnN1cyBhYm91dCB0aGUgdXNlIG9mIGNvbXBvdW5kIHNoYXBlc3Ryhw0AAFgOAAAAdGltZS15Mmtpc3N1ZXNyiA0AAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGltZS5odG1sI3RpbWUteTJraXNzdWVzWAEAAAAtdHKJDQAAWAwAAABmaWxlLWhhbmRsZXJyig0AAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2ZpbGUtaGFuZGxlclgLAAAARmlsZUhhbmRsZXJ0cosNAABYFAAAAG1peGVyLWRldmljZS1vYmplY3RzcowNAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zc2F1ZGlvZGV2Lmh0bWwjbWl4ZXItZGV2aWNlLW9iamVjdHNYFAAAAE1peGVyIERldmljZSBPYmplY3RzdHKNDQAAWA4AAABvd25lcnNoaXBydWxlc3KODQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZXh0ZW5kaW5nL2V4dGVuZGluZy5odG1sI293bmVyc2hpcHJ1bGVzWA8AAABPd25lcnNoaXAgUnVsZXN0co8NAABYDAAAAHR1dC1pbmZvcm1hbHKQDQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvaW50cm9kdWN0aW9uLmh0bWwjdHV0LWluZm9ybWFsWCIAAABBbiBJbmZvcm1hbCBJbnRyb2R1Y3Rpb24gdG8gUHl0aG9udHKRDQAAWBMAAAB0dXQtc291cmNlLWVuY29kaW5ncpINAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9pbnRlcnByZXRlci5odG1sI3R1dC1zb3VyY2UtZW5jb2RpbmdYFAAAAFNvdXJjZSBDb2RlIEVuY29kaW5ndHKTDQAAWBAAAABkb20tYXR0ci1vYmplY3RzcpQNAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCNkb20tYXR0ci1vYmplY3RzWAwAAABBdHRyIE9iamVjdHN0cpUNAABYEgAAAGFzeW5jb3JlLWV4YW1wbGUtMXKWDQAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hc3luY29yZS5odG1sI2FzeW5jb3JlLWV4YW1wbGUtMVgiAAAAYXN5bmNvcmUgRXhhbXBsZSBiYXNpYyBIVFRQIGNsaWVudHRylw0AAFgNAAAAZGVjaW1hbC1ub3Rlc3KYDQAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC1ub3Rlc1gUAAAARmxvYXRpbmcgUG9pbnQgTm90ZXN0cpkNAABYCAAAAGZ1bmN0aW9ucpoNAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCNmdW5jdGlvblgUAAAARnVuY3Rpb24gZGVmaW5pdGlvbnN0cpsNAABYGAAAAGN0eXBlcy1jYWxsaW5nLWZ1bmN0aW9uc3KcDQAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMtY2FsbGluZy1mdW5jdGlvbnNYEQAAAENhbGxpbmcgZnVuY3Rpb25zdHKdDQAAWAwAAABjdXN0b21pbnRlcnByng0AAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3VzdG9taW50ZXJwLmh0bWwjY3VzdG9taW50ZXJwWBoAAABDdXN0b20gUHl0aG9uIEludGVycHJldGVyc3Rynw0AAFgfAAAAaW5zdC1hbHQtaW5zdGFsbC1wcmVmaXgtd2luZG93c3KgDQAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaW5zdGFsbC9pbmRleC5odG1sI2luc3QtYWx0LWluc3RhbGwtcHJlZml4LXdpbmRvd3NYMwAAAEFsdGVybmF0ZSBpbnN0YWxsYXRpb246IFdpbmRvd3MgKHRoZSBwcmVmaXggc2NoZW1lKXRyoQ0AAFgVAAAAbWFjLXNwZWNpZmljLXNlcnZpY2VzcqINAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hYy5odG1sI21hYy1zcGVjaWZpYy1zZXJ2aWNlc1gaAAAATWFjIE9TIFggc3BlY2lmaWMgc2VydmljZXN0cqMNAABYBAAAAGVsaWZypA0AAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2VsaWZYEAAAAFRoZSBpZiBzdGF0ZW1lbnR0cqUNAABYFQAAAHN0cnVjdC1mb3JtYXQtc3RyaW5nc3KmDQAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJ1Y3QuaHRtbCNzdHJ1Y3QtZm9ybWF0LXN0cmluZ3NYDgAAAEZvcm1hdCBTdHJpbmdzdHKnDQAAWA4AAAB0dXQtdGVtcGxhdGluZ3KoDQAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvc3RkbGliMi5odG1sI3R1dC10ZW1wbGF0aW5nWAoAAABUZW1wbGF0aW5ndHKpDQAAWBUAAABkb2N0ZXN0LW91dHB1dGNoZWNrZXJyqg0AAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3Qtb3V0cHV0Y2hlY2tlclgVAAAAT3V0cHV0Q2hlY2tlciBvYmplY3RzdHKrDQAAWAcAAABwZXAtMzQzcqwNAAAoamkBAABqagEAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjUuaHRtbCNwZXAtMzQzWCEAAABQRVAgMzQzOiBUaGUg4oCYd2l0aOKAmSBzdGF0ZW1lbnR0cq0NAABYDwAAAHNwb2tlbi1tZXNzYWdlc3KuDQAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaG93dG8vbG9nZ2luZy1jb29rYm9vay5odG1sI3Nwb2tlbi1tZXNzYWdlc1gZAAAAU3BlYWtpbmcgbG9nZ2luZyBtZXNzYWdlc3Ryrw0AAFgOAAAAcGxheWVyLW9iamVjdHNysA0AAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2QuaHRtbCNwbGF5ZXItb2JqZWN0c1gOAAAAUGxheWVyIE9iamVjdHN0crENAABYGQAAAG1pbWV0b29scy1tZXNzYWdlLW9iamVjdHNysg0AAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWltZXRvb2xzLmh0bWwjbWltZXRvb2xzLW1lc3NhZ2Utb2JqZWN0c1glAAAAQWRkaXRpb25hbCBNZXRob2RzIG9mIE1lc3NhZ2UgT2JqZWN0c3Rysw0AAFgLAAAAZ2VuLW9iamVjdHNytA0AAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2dlbi5odG1sI2dlbi1vYmplY3RzWBEAAABHZW5lcmF0b3IgT2JqZWN0c3RytQ0AAFgOAAAAcG9zaXgtY29udGVudHNytg0AAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcG9zaXguaHRtbCNwb3NpeC1jb250ZW50c1gXAAAATm90YWJsZSBNb2R1bGUgQ29udGVudHN0crcNAABYDQAAAHVzaW5nLW9uLXVuaXhyuA0AAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL3VuaXguaHRtbCN1c2luZy1vbi11bml4WB4AAABVc2luZyBQeXRob24gb24gVW5peCBwbGF0Zm9ybXN0crkNAABYHwAAAGN0eXBlcy1mdW5kYW1lbnRhbC1kYXRhLXR5cGVzLTJyug0AAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLWZ1bmRhbWVudGFsLWRhdGEtdHlwZXMtMlgWAAAARnVuZGFtZW50YWwgZGF0YSB0eXBlc3Ryuw0AAFgXAAAAcmF3Y29uZmlncGFyc2VyLW9iamVjdHNyvA0AAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjcmF3Y29uZmlncGFyc2VyLW9iamVjdHNYFwAAAFJhd0NvbmZpZ1BhcnNlciBPYmplY3RzdHK9DQAAWA0AAABhcGktcmVmY291bnRzcr4NAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbnRyby5odG1sI2FwaS1yZWZjb3VudHNYEAAAAFJlZmVyZW5jZSBDb3VudHN0cr8NAABYEQAAAHdhdmUtcmVhZC1vYmplY3RzcsANAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dhdmUuaHRtbCN3YXZlLXJlYWQtb2JqZWN0c1gRAAAAV2F2ZV9yZWFkIE9iamVjdHN0csENAABYEwAAAGRvbS1jb21tZW50LW9iamVjdHNywg0AAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI2RvbS1jb21tZW50LW9iamVjdHNYDwAAAENvbW1lbnQgT2JqZWN0c3Ryww0AAFgJAAAAZnVuYy1yZXBycsQNAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2Z1bmMtcmVwclgBAAAALXRyxQ0AAFgTAAAAc2hsZXgtcGFyc2luZy1ydWxlc3LGDQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaGxleC5odG1sI3NobGV4LXBhcnNpbmctcnVsZXNYDQAAAFBhcnNpbmcgUnVsZXN0cscNAABYEwAAAGZ0cC1oYW5kbGVyLW9iamVjdHNyyA0AAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI2Z0cC1oYW5kbGVyLW9iamVjdHNYEgAAAEZUUEhhbmRsZXIgT2JqZWN0c3RyyQ0AAFgRAAAAdHJhY2ViYWNrLWV4YW1wbGVyyg0AAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHJhY2ViYWNrLmh0bWwjdHJhY2ViYWNrLWV4YW1wbGVYEgAAAFRyYWNlYmFjayBFeGFtcGxlc3Ryyw0AAFgUAAAAZGlhbG9nd2luZG93LW9iamVjdHNyzA0AAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnJhbWV3b3JrLmh0bWwjZGlhbG9nd2luZG93LW9iamVjdHNYFAAAAERpYWxvZ1dpbmRvdyBPYmplY3RzdHLNDQAAWA4AAABsb2dnZXItYWRhcHRlcnLODQAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2VyLWFkYXB0ZXJYFQAAAExvZ2dlckFkYXB0ZXIgT2JqZWN0c3Ryzw0AAFgPAAAAZ2VuZXJhdG9yLXR5cGVzctANAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZ2VuZXJhdG9yLXR5cGVzWA8AAABHZW5lcmF0b3IgVHlwZXN0ctENAABYDgAAAHNpZ25hbC1leGFtcGxlctINAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NpZ25hbC5odG1sI3NpZ25hbC1leGFtcGxlWAcAAABFeGFtcGxldHLTDQAAWAUAAABsaXN0c3LUDQAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjbGlzdHNYDQAAAExpc3QgZGlzcGxheXN0ctUNAABYCwAAAGZpbGVmb3JtYXRzctYNAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZpbGVmb3JtYXRzLmh0bWwjZmlsZWZvcm1hdHNYDAAAAEZpbGUgRm9ybWF0c3Ry1w0AAFgLAAAAb3MtbWlzY2Z1bmNy2A0AAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy1taXNjZnVuY1gXAAAATWlzY2VsbGFuZW91cyBGdW5jdGlvbnN0ctkNAABYGAAAAHNlcXVlbmNlbWF0Y2hlci1leGFtcGxlc3LaDQAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaWZmbGliLmh0bWwjc2VxdWVuY2VtYXRjaGVyLWV4YW1wbGVzWBgAAABTZXF1ZW5jZU1hdGNoZXIgRXhhbXBsZXN0ctsNAABYEQAAAGluc3QtY29uZmlnLWZpbGVzctwNAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9pbnN0YWxsL2luZGV4Lmh0bWwjaW5zdC1jb25maWctZmlsZXNYHQAAAERpc3R1dGlscyBDb25maWd1cmF0aW9uIEZpbGVzdHLdDQAAWA0AAABtb2R1bGUtY3R5cGVzct4NAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjUuaHRtbCNtb2R1bGUtY3R5cGVzWBIAAABUaGUgY3R5cGVzIHBhY2thZ2V0ct8NAABYCwAAAGJsYW5rLWxpbmVzcuANAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2JsYW5rLWxpbmVzWAsAAABCbGFuayBsaW5lc3Ry4Q0AAFgDAAAAbm90cuINAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNub3RYEgAAAEJvb2xlYW4gb3BlcmF0aW9uc3Ry4w0AAFgLAAAAaW5zdGFsbC1jbWRy5A0AAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9jb21tYW5kcmVmLmh0bWwjaW5zdGFsbC1jbWRYLgAAAEluc3RhbGxpbmcgbW9kdWxlczogdGhlIGluc3RhbGwgY29tbWFuZCBmYW1pbHl0cuUNAABYCgAAAHR1dC1pbnRlcnBy5g0AAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2ludGVycHJldGVyLmh0bWwjdHV0LWludGVycFgjAAAAVGhlIEludGVycHJldGVyIGFuZCBJdHMgRW52aXJvbm1lbnR0cucNAABYDgAAAGNhbGxhYmxlLXR5cGVzcugNAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjY2FsbGFibGUtdHlwZXNYGgAAAEVtdWxhdGluZyBjYWxsYWJsZSBvYmplY3RzdHLpDQAAWBMAAABwcm9maWxlLWNhbGlicmF0aW9ucuoNAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Byb2ZpbGUuaHRtbCNwcm9maWxlLWNhbGlicmF0aW9uWAsAAABDYWxpYnJhdGlvbnRy6w0AAFgUAAAAdHV0LWV4Y2VwdGlvbmNsYXNzZXNy7A0AAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2NsYXNzZXMuaHRtbCN0dXQtZXhjZXB0aW9uY2xhc3Nlc1gaAAAARXhjZXB0aW9ucyBBcmUgQ2xhc3NlcyBUb290cu0NAABYCQAAAHRyYWNlLWNsaXLuDQAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90cmFjZS5odG1sI3RyYWNlLWNsaVgSAAAAQ29tbWFuZC1MaW5lIFVzYWdldHLvDQAAWBUAAABuZXctc3RyaW5nLWZvcm1hdHRpbmdy8A0AAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjbmV3LXN0cmluZy1mb3JtYXR0aW5nWBgAAABDdXN0b20gU3RyaW5nIEZvcm1hdHRpbmd0cvENAABYGQAAAGFyYml0cmFyeS1vYmplY3QtbWVzc2FnZXNy8g0AAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2hvd3RvL2xvZ2dpbmcuaHRtbCNhcmJpdHJhcnktb2JqZWN0LW1lc3NhZ2VzWCMAAABVc2luZyBhcmJpdHJhcnkgb2JqZWN0cyBhcyBtZXNzYWdlc3Ry8w0AAFgSAAAAZGF0ZXRpbWUtdGltZWRlbHRhcvQNAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUtdGltZWRlbHRhWBEAAAB0aW1lZGVsdGEgT2JqZWN0c3Ry9Q0AAFgfAAAAbG9nZ2luZy1jb25maWctZGljdC1leHRlcm5hbG9ianL2DQAAKGppAQAAamoBAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmNvbmZpZy5odG1sI2xvZ2dpbmctY29uZmlnLWRpY3QtZXh0ZXJuYWxvYmpYGgAAAEFjY2VzcyB0byBleHRlcm5hbCBvYmplY3RzdHL3DQAAWA0AAABtc2ktZGlyZWN0b3J5cvgNAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI21zaS1kaXJlY3RvcnlYEQAAAERpcmVjdG9yeSBPYmplY3RzdHL5DQAAWA0AAAB0dXQtbGlzdGNvbXBzcvoNAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9kYXRhc3RydWN0dXJlcy5odG1sI3R1dC1saXN0Y29tcHNYEwAAAExpc3QgQ29tcHJlaGVuc2lvbnN0cvsNAABYCgAAAHR1dC1lcnJvcnNy/A0AAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2Vycm9ycy5odG1sI3R1dC1lcnJvcnNYFQAAAEVycm9ycyBhbmQgRXhjZXB0aW9uc3Ry/Q0AAFghAAAAb3B0cGFyc2UtZGVmaW5pbmctY2FsbGJhY2stb3B0aW9ucv4NAAAoamkBAABqagEAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UtZGVmaW5pbmctY2FsbGJhY2stb3B0aW9uWBoAAABEZWZpbmluZyBhIGNhbGxiYWNrIG9wdGlvbnRy/w0AAFgMAAAAc2V0dXAtc2NyaXB0cgAOAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvc2V0dXBzY3JpcHQuaHRtbCNzZXR1cC1zY3JpcHRYGAAAAFdyaXRpbmcgdGhlIFNldHVwIFNjcmlwdHRyAQ4AAFgEAAAAdW5peHICDgAAKGppAQAAamoBAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml4Lmh0bWwjdW5peFgWAAAAVW5peCBTcGVjaWZpYyBTZXJ2aWNlc3RyAw4AAFgKAAAAdHlwZXNvdGhlcnIEDgAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3R5cGVzb3RoZXJYFAAAAE90aGVyIEJ1aWx0LWluIFR5cGVzdHIFDgAAWAkAAABleHByc3RtdHNyBg4AAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNleHByc3RtdHNYFQAAAEV4cHJlc3Npb24gc3RhdGVtZW50c3RyBw4AAFgIAAAAc2hpZnRpbmdyCA4AAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI3NoaWZ0aW5nWBMAAABTaGlmdGluZyBvcGVyYXRpb25zdHIJDgAAWAgAAABpbnRlZ2Vyc3IKDgAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNpbnRlZ2Vyc1ghAAAASW50ZWdlciBhbmQgbG9uZyBpbnRlZ2VyIGxpdGVyYWxzdHILDgAAWBkAAABpbnNwZWN0LWNsYXNzZXMtZnVuY3Rpb25zcgwOAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LWNsYXNzZXMtZnVuY3Rpb25zWBUAAABDbGFzc2VzIGFuZCBmdW5jdGlvbnN0cg0OAABYGQAAAG9wdHBhcnNlLW9wdGlvbi1jYWxsYmFja3NyDg4AAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS1vcHRpb24tY2FsbGJhY2tzWBAAAABPcHRpb24gQ2FsbGJhY2tzdHIPDgAAWBIAAABibHRpbi1maWxlLW9iamVjdHNyEA4AAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNibHRpbi1maWxlLW9iamVjdHNYDAAAAEZpbGUgT2JqZWN0c3RyEQ4AAFgSAAAAbWFpbGJveC1kZXByZWNhdGVkchIOAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94LWRlcHJlY2F0ZWRYHgAAAERlcHJlY2F0ZWQgY2xhc3NlcyBhbmQgbWV0aG9kc3RyEw4AAFgPAAAAZGVjaW1hbC10aHJlYWRzchQOAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLXRocmVhZHNYFAAAAFdvcmtpbmcgd2l0aCB0aHJlYWRzdHIVDgAAWBAAAAB0dXQtY2xhc3NvYmplY3RzchYOAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9jbGFzc2VzLmh0bWwjdHV0LWNsYXNzb2JqZWN0c1gNAAAAQ2xhc3MgT2JqZWN0c3RyFw4AAFgTAAAAdHV0LXF1YWxpdHktY29udHJvbHIYDgAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvc3RkbGliLmh0bWwjdHV0LXF1YWxpdHktY29udHJvbFgPAAAAUXVhbGl0eSBDb250cm9sdHIZDgAAWAsAAAB0YXItZm9ybWF0c3IaDgAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyLWZvcm1hdHNYFQAAAFN1cHBvcnRlZCB0YXIgZm9ybWF0c3RyGw4AAFgIAAAAcHltYWxsb2NyHA4AAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21lbW9yeS5odG1sI3B5bWFsbG9jWBYAAABUaGUgcHltYWxsb2MgYWxsb2NhdG9ydHIdDgAAWAcAAAB0a2ludGVych4OAAAoamkBAABqagEAAFgxAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RrLmh0bWwjdGtpbnRlclghAAAAR3JhcGhpY2FsIFVzZXIgSW50ZXJmYWNlcyB3aXRoIFRrdHIfDgAAWAcAAAB0dXQtZm9yciAOAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9jb250cm9sZmxvdy5odG1sI3R1dC1mb3JYDgAAAGZvciBTdGF0ZW1lbnRzdHIhDgAAWCEAAABvcHRwYXJzZS1oYW5kbGluZy1ib29sZWFuLW9wdGlvbnNyIg4AAChqaQEAAGpqAQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS1oYW5kbGluZy1ib29sZWFuLW9wdGlvbnNYHwAAAEhhbmRsaW5nIGJvb2xlYW4gKGZsYWcpIG9wdGlvbnN0ciMOAABYAwAAAGRlbHIkDgAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI2RlbFgRAAAAVGhlIGRlbCBzdGF0ZW1lbnR0ciUOAABYFwAAAHRraW50ZXItc2V0dGluZy1vcHRpb25zciYOAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RraW50ZXIuaHRtbCN0a2ludGVyLXNldHRpbmctb3B0aW9uc1gPAAAAU2V0dGluZyBPcHRpb25zdHInDgAAWAsAAABib29sb2JqZWN0c3IoDgAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYm9vbC5odG1sI2Jvb2xvYmplY3RzWA8AAABCb29sZWFuIE9iamVjdHN0cikOAABYAwAAAHRyeXIqDgAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLmh0bWwjdHJ5WBEAAABUaGUgdHJ5IHN0YXRlbWVudHRyKw4AAFgXAAAAcHljbGJyLWZ1bmN0aW9uLW9iamVjdHNyLA4AAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHljbGJyLmh0bWwjcHljbGJyLWZ1bmN0aW9uLW9iamVjdHNYEAAAAEZ1bmN0aW9uIE9iamVjdHN0ci0OAABYEgAAAGVuY29kaW5ncy1vdmVydmlld3IuDgAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNlbmNvZGluZ3Mtb3ZlcnZpZXdYFQAAAEVuY29kaW5ncyBhbmQgVW5pY29kZXRyLw4AAFgNAAAAaW1hcDQtZXhhbXBsZXIwDgAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcDQtZXhhbXBsZVgNAAAASU1BUDQgRXhhbXBsZXRyMQ4AAFgNAAAAY3R5cGVzLWFycmF5c3IyDgAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMtYXJyYXlzWAYAAABBcnJheXN0cjMOAABYBwAAAHBlcC0zNDFyNA4AAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuNS5odG1sI3BlcC0zNDFYIwAAAFBFUCAzNDE6IFVuaWZpZWQgdHJ5L2V4Y2VwdC9maW5hbGx5dHI1DgAAWA8AAAB1cmxsaWItZXhhbXBsZXNyNg4AAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliLmh0bWwjdXJsbGliLWV4YW1wbGVzWAgAAABFeGFtcGxlc3RyNw4AAFgJAAAAZnJhbWV3b3JrcjgOAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9ob3d0by93ZWJzZXJ2ZXJzLmh0bWwjZnJhbWV3b3JrWAoAAABGcmFtZXdvcmtzdHI5DgAAWBUAAABodHRwLXJlZGlyZWN0LWhhbmRsZXJyOg4AAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI2h0dHAtcmVkaXJlY3QtaGFuZGxlclgbAAAASFRUUFJlZGlyZWN0SGFuZGxlciBPYmplY3RzdHI7DgAAWBEAAABzYXgtZXJyb3ItaGFuZGxlcnI8DgAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LmhhbmRsZXIuaHRtbCNzYXgtZXJyb3ItaGFuZGxlclgUAAAARXJyb3JIYW5kbGVyIE9iamVjdHN0cj0OAABYCgAAAHN0LW9iamVjdHNyPg4AAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGFyc2VyLmh0bWwjc3Qtb2JqZWN0c1gKAAAAU1QgT2JqZWN0c3RyPw4AAFgQAAAAdHV0LWJyaWVmdG91cnR3b3JADgAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvc3RkbGliMi5odG1sI3R1dC1icmllZnRvdXJ0d29YLgAAAEJyaWVmIFRvdXIgb2YgdGhlIFN0YW5kYXJkIExpYnJhcnkg4oCUIFBhcnQgSUl0ckEOAABYEwAAAHR1dC13ZWFrLXJlZmVyZW5jZXNyQg4AAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL3N0ZGxpYjIuaHRtbCN0dXQtd2Vhay1yZWZlcmVuY2VzWA8AAABXZWFrIFJlZmVyZW5jZXN0ckMOAABYIwAAAG9wdHBhcnNlLXJhaXNpbmctZXJyb3JzLWluLWNhbGxiYWNrckQOAAAoamkBAABqagEAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UtcmFpc2luZy1lcnJvcnMtaW4tY2FsbGJhY2tYHAAAAFJhaXNpbmcgZXJyb3JzIGluIGEgY2FsbGJhY2t0ckUOAABYEQAAAHB5emlwZmlsZS1vYmplY3RzckYOAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGZpbGUuaHRtbCNweXppcGZpbGUtb2JqZWN0c1gRAAAAUHlaaXBGaWxlIE9iamVjdHN0ckcOAABYCAAAAGZsb2F0aW5nckgOAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2Zsb2F0aW5nWBcAAABGbG9hdGluZyBwb2ludCBsaXRlcmFsc3RySQ4AAFgXAAAAY3R5cGVzLXR5cGUtY29udmVyc2lvbnNySg4AAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLXR5cGUtY29udmVyc2lvbnNYEAAAAFR5cGUgY29udmVyc2lvbnN0cksOAABYEAAAAG9wdHBhcnNlLWNsZWFudXByTA4AAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS1jbGVhbnVwWAcAAABDbGVhbnVwdHJNDgAAWA4AAAB0dXQtY29uZGl0aW9uc3JODgAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvZGF0YXN0cnVjdHVyZXMuaHRtbCN0dXQtY29uZGl0aW9uc1gSAAAATW9yZSBvbiBDb25kaXRpb25zdHJPDgAAWBEAAAB0ZXN0c3VpdGUtb2JqZWN0c3JQDgAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3Rlc3RzdWl0ZS1vYmplY3RzWA4AAABHcm91cGluZyB0ZXN0c3RyUQ4AAFgTAAAAaW5zdGFsbC1zY3JpcHRzLWNtZHJSDgAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2NvbW1hbmRyZWYuaHRtbCNpbnN0YWxsLXNjcmlwdHMtY21kWA8AAABpbnN0YWxsX3NjcmlwdHN0clMOAABYDQAAAGNhbGxpbmdweXRob25yVA4AAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2V4dGVuZGluZy9leHRlbmRpbmcuaHRtbCNjYWxsaW5ncHl0aG9uWB8AAABDYWxsaW5nIFB5dGhvbiBGdW5jdGlvbnMgZnJvbSBDdHJVDgAAWAwAAAB0eXBlc29iamVjdHNyVg4AAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCN0eXBlc29iamVjdHNYGwAAAENsYXNzZXMgYW5kIENsYXNzIEluc3RhbmNlc3RyVw4AAFgMAAAAdHlwZXNudW1lcmljclgOAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjdHlwZXNudW1lcmljWCsAAABOdW1lcmljIFR5cGVzIOKAlCBpbnQsIGZsb2F0LCBsb25nLCBjb21wbGV4dHJZDgAAWA0AAABic2RkYi1vYmplY3RzcloOAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JzZGRiLmh0bWwjYnNkZGItb2JqZWN0c1geAAAASGFzaCwgQlRyZWUgYW5kIFJlY29yZCBPYmplY3RzdHJbDgAAWBIAAAB0dXQtdXNlcmV4Y2VwdGlvbnNyXA4AAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2Vycm9ycy5odG1sI3R1dC11c2VyZXhjZXB0aW9uc1gXAAAAVXNlci1kZWZpbmVkIEV4Y2VwdGlvbnN0cl0OAABYCQAAAGRhdGFtb2RlbHJeDgAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI2RhdGFtb2RlbFgKAAAARGF0YSBtb2RlbHRyXw4AAFgMAAAAb3RoZXItdG9rZW5zcmAOAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI290aGVyLXRva2Vuc1gMAAAAT3RoZXIgdG9rZW5zdHJhDgAAWA8AAABwcmVmaXgtbWF0Y2hpbmdyYg4AAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXJncGFyc2UuaHRtbCNwcmVmaXgtbWF0Y2hpbmdYKAAAAEFyZ3VtZW50IGFiYnJldmlhdGlvbnMgKHByZWZpeCBtYXRjaGluZyl0cmMOAABYEgAAAG5ldy0yNi1pbnRlcnByZXRlcnJkDgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi42Lmh0bWwjbmV3LTI2LWludGVycHJldGVyWBMAAABJbnRlcnByZXRlciBDaGFuZ2VzdHJlDgAAWA8AAAB0dXQtaW50ZXJhY3RpdmVyZg4AAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2ludGVycHJldGVyLmh0bWwjdHV0LWludGVyYWN0aXZlWBAAAABJbnRlcmFjdGl2ZSBNb2RldHJnDgAAWA8AAAB0dXQtbW9yZW1vZHVsZXNyaA4AAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL21vZHVsZXMuaHRtbCN0dXQtbW9yZW1vZHVsZXNYDwAAAE1vcmUgb24gTW9kdWxlc3RyaQ4AAFgGAAAAMjNhY2tzcmoOAAAoamkBAABqagEAAFgwAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjMuaHRtbCNhY2tzWBAAAABBY2tub3dsZWRnZW1lbnRzdHJrDgAAWAsAAAByZWdleC1ob3d0b3JsDgAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaG93dG8vcmVnZXguaHRtbCNyZWdleC1ob3d0b1gYAAAAUmVndWxhciBFeHByZXNzaW9uIEhPV1RPdHJtDgAAWAYAAABweXBpcmNybg4AAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9wYWNrYWdlaW5kZXguaHRtbCNweXBpcmNYEAAAAFRoZSAucHlwaXJjIGZpbGV0cm8OAABYEAAAAGluc3RhbGxpbmctaW5kZXhycA4AAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2luc3RhbGxpbmcvaW5kZXguaHRtbCNpbnN0YWxsaW5nLWluZGV4WBkAAABJbnN0YWxsaW5nIFB5dGhvbiBNb2R1bGVzdHJxDgAAWBsAAABvcHRpb24tZmxhZ3MtYW5kLWRpcmVjdGl2ZXNycg4AAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI29wdGlvbi1mbGFncy1hbmQtZGlyZWN0aXZlc1gMAAAAT3B0aW9uIEZsYWdzdHJzDgAAWAgAAABjb250aW51ZXJ0DgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI2NvbnRpbnVlWBYAAABUaGUgY29udGludWUgc3RhdGVtZW50dHJ1DgAAWBEAAAB1bmljb2RlZXhjZXB0aW9uc3J2DgAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZXhjZXB0aW9ucy5odG1sI3VuaWNvZGVleGNlcHRpb25zWBkAAABVbmljb2RlIEV4Y2VwdGlvbiBPYmplY3RzdHJ3DgAAWBIAAAB0dXQtZmlsZS13aWxkY2FyZHNyeA4AAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL3N0ZGxpYi5odG1sI3R1dC1maWxlLXdpbGRjYXJkc1gOAAAARmlsZSBXaWxkY2FyZHN0cnkOAABYBQAAAGNsYXNzcnoOAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCNjbGFzc1gRAAAAQ2xhc3MgZGVmaW5pdGlvbnN0cnsOAABYEQAAAGN0eXBlcy1kYXRhLXR5cGVzcnwOAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy1kYXRhLXR5cGVzWAoAAABEYXRhIHR5cGVzdHJ9DgAAWAcAAABsYW1iZGFzcn4OAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNsYW1iZGFzWAcAAABMYW1iZGFzdHJ/DgAAWAsAAAB1c2luZy1pbmRleHKADgAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvaW5kZXguaHRtbCN1c2luZy1pbmRleFgWAAAAUHl0aG9uIFNldHVwIGFuZCBVc2FnZXRygQ4AAFgOAAAAY29tcHJlaGVuc2lvbnNygg4AAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2NvbXByZWhlbnNpb25zWCIAAABEaXNwbGF5cyBmb3Igc2V0cyBhbmQgZGljdGlvbmFyaWVzdHKDDgAAWA4AAABwcm9maWxlLXRpbWVyc3KEDgAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wcm9maWxlLmh0bWwjcHJvZmlsZS10aW1lcnNYFAAAAFVzaW5nIGEgY3VzdG9tIHRpbWVydHKFDgAAWBgAAABkaXN0dXRpbHMtc2ltcGxlLWV4YW1wbGVyhg4AAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9pbnRyb2R1Y3Rpb24uaHRtbCNkaXN0dXRpbHMtc2ltcGxlLWV4YW1wbGVYEAAAAEEgU2ltcGxlIEV4YW1wbGV0cocOAABYBAAAAG1pc2NyiA4AAChqaQEAAGpqAQAAWDAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWlzYy5odG1sI21pc2NYFgAAAE1pc2NlbGxhbmVvdXMgU2VydmljZXN0cokOAABYFAAAAGluc3QtdHJpdmlhbC1pbnN0YWxscooOAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9pbnN0YWxsL2luZGV4Lmh0bWwjaW5zdC10cml2aWFsLWluc3RhbGxYHwAAAEJlc3QgY2FzZTogdHJpdmlhbCBpbnN0YWxsYXRpb250cosOAABYDQAAAHN0cmluZ29iamVjdHNyjA4AAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N0cmluZy5odG1sI3N0cmluZ29iamVjdHNYFAAAAFN0cmluZy9CeXRlcyBPYmplY3RzdHKNDgAAWA0AAAByZXhlYy1vYmplY3Rzco4OAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JleGVjLmh0bWwjcmV4ZWMtb2JqZWN0c1gNAAAAUkV4ZWMgT2JqZWN0c3Ryjw4AAFgOAAAAc29ja2V0LWV4YW1wbGVykA4AAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LWV4YW1wbGVYBwAAAEV4YW1wbGV0cpEOAABYCgAAAG9zLXByb2Nlc3Nykg4AAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy1wcm9jZXNzWBIAAABQcm9jZXNzIE1hbmFnZW1lbnR0cpMOAABYBwAAAHRocmVhZHNylA4AAChqaQEAAGpqAQAAWDEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCN0aHJlYWRzWCwAAABUaHJlYWQgU3RhdGUgYW5kIHRoZSBHbG9iYWwgSW50ZXJwcmV0ZXIgTG9ja3RylQ4AAFgOAAAAdHV0LWxpc3QtdG9vbHNylg4AAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL3N0ZGxpYjIuaHRtbCN0dXQtbGlzdC10b29sc1gcAAAAVG9vbHMgZm9yIFdvcmtpbmcgd2l0aCBMaXN0c3Rylw4AAFgUAAAAd2F0Y2hlZC1maWxlLWhhbmRsZXJymA4AAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI3dhdGNoZWQtZmlsZS1oYW5kbGVyWBIAAABXYXRjaGVkRmlsZUhhbmRsZXJ0cpkOAABYBgAAADI0YWNrc3KaDgAAKGppAQAAamoBAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi40Lmh0bWwjYWNrc1gQAAAAQWNrbm93bGVkZ2VtZW50c3Rymw4AAFgPAAAAYWwtcG9ydC1vYmplY3RzcpwOAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FsLmh0bWwjYWwtcG9ydC1vYmplY3RzWAwAAABQb3J0IE9iamVjdHN0cp0OAABYBAAAAGRpY3Ryng4AAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2RpY3RYEwAAAERpY3Rpb25hcnkgZGlzcGxheXN0cp8OAABYEwAAAHNlcnZlcnByb3h5LW9iamVjdHNyoA4AAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1scnBjbGliLmh0bWwjc2VydmVycHJveHktb2JqZWN0c1gTAAAAU2VydmVyUHJveHkgT2JqZWN0c3RyoQ4AAFgPAAAAdHV0LWRlZmF1bHRhcmdzcqIOAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9jb250cm9sZmxvdy5odG1sI3R1dC1kZWZhdWx0YXJnc1gXAAAARGVmYXVsdCBBcmd1bWVudCBWYWx1ZXN0cqMOAAB1KFgSAAAAbWltZXdyaXRlci1vYmplY3RzcqQOAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbWV3cml0ZXIuaHRtbCNtaW1ld3JpdGVyLW9iamVjdHNYEgAAAE1pbWVXcml0ZXIgT2JqZWN0c3RypQ4AAFgYAAAAY3R5cGVzLWZvcmVpZ24tZnVuY3Rpb25zcqYOAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy1mb3JlaWduLWZ1bmN0aW9uc1gRAAAARm9yZWlnbiBmdW5jdGlvbnN0cqcOAABYEQAAAHVuaXR0ZXN0LWNvbnRlbnRzcqgOAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QtY29udGVudHNYFQAAAENsYXNzZXMgYW5kIGZ1bmN0aW9uc3RyqQ4AAFgVAAAAaW5zdC1jb25maWctZmlsZW5hbWVzcqoOAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9pbnN0YWxsL2luZGV4Lmh0bWwjaW5zdC1jb25maWctZmlsZW5hbWVzWCIAAABMb2NhdGlvbiBhbmQgbmFtZXMgb2YgY29uZmlnIGZpbGVzdHKrDgAAWAcAAAB0b29sYm94cqwOAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI3Rvb2xib3hYFgAAAE1hYyBPUyBUb29sYm94IE1vZHVsZXN0cq0OAABYCgAAAHJlc3RyaWN0ZWRyrg4AAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVzdHJpY3RlZC5odG1sI3Jlc3RyaWN0ZWRYFAAAAFJlc3RyaWN0ZWQgRXhlY3V0aW9udHKvDgAAWBUAAAB0a2ludGVyLWZpbGUtaGFuZGxlcnNysA4AAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGtpbnRlci5odG1sI3RraW50ZXItZmlsZS1oYW5kbGVyc1gNAAAARmlsZSBIYW5kbGVyc3RysQ4AAFgSAAAAY29va2llLWphci1vYmplY3RzcrIOAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZS1qYXItb2JqZWN0c1gjAAAAQ29va2llSmFyIGFuZCBGaWxlQ29va2llSmFyIE9iamVjdHN0crMOAABYCwAAAHR1dC1jbGVhbnVwcrQOAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9lcnJvcnMuaHRtbCN0dXQtY2xlYW51cFgZAAAARGVmaW5pbmcgQ2xlYW4tdXAgQWN0aW9uc3RytQ4AAFgNAAAAbnVtZXJpYy10eXBlc3K2DgAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI251bWVyaWMtdHlwZXNYFwAAAEVtdWxhdGluZyBudW1lcmljIHR5cGVzdHK3DgAAWAsAAAB0dXQtd2hhdG5vd3K4DgAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvd2hhdG5vdy5odG1sI3R1dC13aGF0bm93WAkAAABXaGF0IE5vdz90crkOAABYDwAAAGRhdGV0aW1lLXR6aW5mb3K6DgAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLXR6aW5mb1gOAAAAdHppbmZvIE9iamVjdHN0crsOAABYDAAAAG51bGwtaGFuZGxlcnK8DgAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbnVsbC1oYW5kbGVyWAsAAABOdWxsSGFuZGxlcnRyvQ4AAFgGAAAAbG9nZ2Vycr4OAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnZXJYDgAAAExvZ2dlciBPYmplY3RzdHK/DgAAWAgAAABwZXAtMzEwNXLADgAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi42Lmh0bWwjcGVwLTMxMDVYHQAAAFBFUCAzMTA1OiBwcmludCBBcyBhIEZ1bmN0aW9udHLBDgAAWBYAAABkb2N0ZXN0LXNpbXBsZS10ZXN0bW9kcsIOAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LXNpbXBsZS10ZXN0bW9kWC0AAABTaW1wbGUgVXNhZ2U6IENoZWNraW5nIEV4YW1wbGVzIGluIERvY3N0cmluZ3N0csMOAABYEgAAAHBhY2thZ2UtY21kb3B0aW9uc3LEDgAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL3BhY2thZ2VpbmRleC5odG1sI3BhY2thZ2UtY21kb3B0aW9uc1gaAAAAQWRkaXRpb25hbCBjb21tYW5kIG9wdGlvbnN0csUOAABYDwAAAGRvY3Rlc3Qtb3B0aW9uc3LGDgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC1vcHRpb25zWAwAAABPcHRpb24gRmxhZ3N0cscOAABYDgAAAGhrZXktY29uc3RhbnRzcsgOAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNoa2V5LWNvbnN0YW50c1gQAAAASEtFWV8qIENvbnN0YW50c3RyyQ4AAFgQAAAAZGVjb21wcmVzcy13Yml0c3LKDgAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96bGliLmh0bWwjZGVjb21wcmVzcy13Yml0c1gBAAAALXRyyw4AAFgdAAAAb3B0cGFyc2UtaG93LWNhbGxiYWNrcy1jYWxsZWRyzA4AAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS1ob3ctY2FsbGJhY2tzLWNhbGxlZFgYAAAASG93IGNhbGxiYWNrcyBhcmUgY2FsbGVkdHLNDgAAWAgAAABjYXBzdWxlc3LODgAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY2Fwc3VsZS5odG1sI2NhcHN1bGVzWAgAAABDYXBzdWxlc3Ryzw4AAFgVAAAAYXR0cmlidXRlcy1ucy1vYmplY3RzctAOAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjYXR0cmlidXRlcy1ucy1vYmplY3RzWBoAAABUaGUgQXR0cmlidXRlc05TIEludGVyZmFjZXRy0Q4AAFgXAAAAZW50aXR5LXJlc29sdmVyLW9iamVjdHNy0g4AAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjZW50aXR5LXJlc29sdmVyLW9iamVjdHNYFgAAAEVudGl0eVJlc29sdmVyIE9iamVjdHN0ctMOAABYEQAAAHVuZG9jLW1hYy1tb2R1bGVzctQOAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuZG9jLmh0bWwjdW5kb2MtbWFjLW1vZHVsZXNYGwAAAFVuZG9jdW1lbnRlZCBNYWMgT1MgbW9kdWxlc3Ry1Q4AAFgPAAAAdHV0LW1hdGhlbWF0aWNzctYOAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9zdGRsaWIuaHRtbCN0dXQtbWF0aGVtYXRpY3NYCwAAAE1hdGhlbWF0aWNzdHLXDgAAWAsAAABjb252ZXJzaW9uc3LYDgAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjY29udmVyc2lvbnNYFgAAAEFyaXRobWV0aWMgY29udmVyc2lvbnN0ctkOAABYEQAAAHN0cmluZy1jYXRlbmF0aW9uctoOAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI3N0cmluZy1jYXRlbmF0aW9uWBwAAABTdHJpbmcgbGl0ZXJhbCBjb25jYXRlbmF0aW9udHLbDgAAWBkAAABlbGVtZW50dHJlZS1xbmFtZS1vYmplY3RzctwOAAAoamkBAABqagEAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI2VsZW1lbnR0cmVlLXFuYW1lLW9iamVjdHNYDQAAAFFOYW1lIE9iamVjdHN0ct0OAABYDwAAAHBhY2thZ2UtZGlzcGxheXLeDgAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL3BhY2thZ2VpbmRleC5odG1sI3BhY2thZ2UtZGlzcGxheVgUAAAAUHlQSSBwYWNrYWdlIGRpc3BsYXl0ct8OAABYBgAAAGlzIG5vdHLgDgAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjaXMtbm90WBQAAABJZGVudGl0eSBjb21wYXJpc29uc3Ry4Q4AAFgSAAAAbXVsdGlwbGUtcHJvY2Vzc2VzcuIOAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9ob3d0by9sb2dnaW5nLWNvb2tib29rLmh0bWwjbXVsdGlwbGUtcHJvY2Vzc2VzWDAAAABMb2dnaW5nIHRvIGEgc2luZ2xlIGZpbGUgZnJvbSBtdWx0aXBsZSBwcm9jZXNzZXN0cuMOAABYEAAAAHB5LXRvLWpzb24tdGFibGVy5A4AAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvanNvbi5odG1sI3B5LXRvLWpzb24tdGFibGVYAQAAAC10cuUOAABYDAAAAGV4YW1wbGVzLWltcHLmDgAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbXAuaHRtbCNleGFtcGxlcy1pbXBYCAAAAEV4YW1wbGVzdHLnDgAAWB8AAABlbGVtZW50dHJlZS1lbGVtZW50dHJlZS1vYmplY3RzcugOAAAoamkBAABqagEAAFhcAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI2VsZW1lbnR0cmVlLWVsZW1lbnR0cmVlLW9iamVjdHNYEwAAAEVsZW1lbnRUcmVlIE9iamVjdHN0cukOAABYEQAAAGNkLXBhcnNlci1vYmplY3RzcuoOAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NkLmh0bWwjY2QtcGFyc2VyLW9iamVjdHNYDgAAAFBhcnNlciBPYmplY3RzdHLrDgAAWAgAAABnbG9zc2FyeXLsDgAAKGppAQAAamoBAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCNnbG9zc2FyeVgIAAAAR2xvc3Nhcnl0cu0OAABYDAAAAHNwZWNpYWxhdHRyc3LuDgAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3NwZWNpYWxhdHRyc1gSAAAAU3BlY2lhbCBBdHRyaWJ1dGVzdHLvDgAAWBkAAABjb21wYXJpc29uLXRvLWJ1aWx0aW4tc2V0cvAOAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NldHMuaHRtbCNjb21wYXJpc29uLXRvLWJ1aWx0aW4tc2V0WCQAAABDb21wYXJpc29uIHRvIHRoZSBidWlsdC1pbiBzZXQgdHlwZXN0cvEOAABYCAAAAHBlcC0zMTE5cvIOAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjYuaHRtbCNwZXAtMzExOVgfAAAAUEVQIDMxMTk6IEFic3RyYWN0IEJhc2UgQ2xhc3Nlc3Ry8w4AAFgdAAAAZWxlbWVudHRyZWUteG1scGFyc2VyLW9iamVjdHNy9A4AAChqaQEAAGpqAQAAWFoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjZWxlbWVudHRyZWUteG1scGFyc2VyLW9iamVjdHNYEQAAAFhNTFBhcnNlciBPYmplY3RzdHL1DgAAWBYAAAB1bmljb2RlbWV0aG9kc2FuZHNsb3RzcvYOAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjdW5pY29kZW1ldGhvZHNhbmRzbG90c1gaAAAATWV0aG9kcyBhbmQgU2xvdCBGdW5jdGlvbnN0cvcOAABYCwAAAGMtYXBpLWluZGV4cvgOAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbmRleC5odG1sI2MtYXBpLWluZGV4WB0AAABQeXRob24vQyBBUEkgUmVmZXJlbmNlIE1hbnVhbHRy+Q4AAFgFAAAAcmFpc2Vy+g4AAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNyYWlzZVgTAAAAVGhlIHJhaXNlIHN0YXRlbWVudHRy+w4AAFgLAAAAZXhwcmVzc2lvbnNy/A4AAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2V4cHJlc3Npb25zWAsAAABFeHByZXNzaW9uc3Ry/Q4AAFgIAAAAY29uY3JldGVy/g4AAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvbmNyZXRlLmh0bWwjY29uY3JldGVYFgAAAENvbmNyZXRlIE9iamVjdHMgTGF5ZXJ0cv8OAABYBwAAAGZpbGVzeXNyAA8AAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmlsZXN5cy5odG1sI2ZpbGVzeXNYGQAAAEZpbGUgYW5kIERpcmVjdG9yeSBBY2Nlc3N0cgEPAABYEgAAAGMtd3JhcHBlci1zb2Z0d2FyZXICDwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZmFxL2V4dGVuZGluZy5odG1sI2Mtd3JhcHBlci1zb2Z0d2FyZVguAAAAV3JpdGluZyBDIGlzIGhhcmQ7IGFyZSB0aGVyZSBhbnkgYWx0ZXJuYXRpdmVzP3RyAw8AAFgLAAAAcGVyc2lzdGVuY2VyBA8AAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGVyc2lzdGVuY2UuaHRtbCNwZXJzaXN0ZW5jZVgQAAAARGF0YSBQZXJzaXN0ZW5jZXRyBQ8AAFgKAAAAd2hpdGVzcGFjZXIGDwAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCN3aGl0ZXNwYWNlWBkAAABXaGl0ZXNwYWNlIGJldHdlZW4gdG9rZW5zdHIHDwAAWA4AAABzeXNsb2ctaGFuZGxlcnIIDwAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjc3lzbG9nLWhhbmRsZXJYDQAAAFN5c0xvZ0hhbmRsZXJ0cgkPAABYDgAAAG1vZHVsZS13c2dpcmVmcgoPAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjUuaHRtbCNtb2R1bGUtd3NnaXJlZlgTAAAAVGhlIHdzZ2lyZWYgcGFja2FnZXRyCw8AAFgQAAAAdHV0LWNsZWFudXAtd2l0aHIMDwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvZXJyb3JzLmh0bWwjdHV0LWNsZWFudXAtd2l0aFgbAAAAUHJlZGVmaW5lZCBDbGVhbi11cCBBY3Rpb25zdHINDwAAWAYAAABzZWFyY2goamkBAABqagEAAFglAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9zZWFyY2guaHRtbFgLAAAAU2VhcmNoIFBhZ2V0cg4PAABYBgAAAHNpbXBsZXIPDwAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI3NpbXBsZVgRAAAAU2ltcGxlIHN0YXRlbWVudHN0chAPAABYCgAAAHR0a3N0eWxpbmdyEQ8AAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrc3R5bGluZ1gLAAAAVHRrIFN0eWxpbmd0chIPAABYDwAAAHRhcmZpbGUtb2JqZWN0c3ITDwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS1vYmplY3RzWA8AAABUYXJGaWxlIE9iamVjdHN0chQPAABYDQAAAGRhdGV0aW1lLXRpbWVyFQ8AAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS10aW1lWAwAAAB0aW1lIE9iamVjdHN0chYPAABYDQAAAGhhbmRsZXItYmFzaWNyFw8AAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2hvd3RvL2xvZ2dpbmcuaHRtbCNoYW5kbGVyLWJhc2ljWAgAAABIYW5kbGVyc3RyGA8AAFgPAAAAbWVtb3J5aW50ZXJmYWNlchkPAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tZW1vcnkuaHRtbCNtZW1vcnlpbnRlcmZhY2VYEAAAAE1lbW9yeSBJbnRlcmZhY2V0choPAABYFwAAAGN0eXBlcy1wYXNzaW5nLXBvaW50ZXJzchsPAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy1wYXNzaW5nLXBvaW50ZXJzWDYAAABQYXNzaW5nIHBvaW50ZXJzIChvcjogcGFzc2luZyBwYXJhbWV0ZXJzIGJ5IHJlZmVyZW5jZSl0chwPAABYEgAAAGRvY3Rlc3QtZGlyZWN0aXZlc3IdDwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC1kaXJlY3RpdmVzWAoAAABEaXJlY3RpdmVzdHIeDwAAWCQAAABvcHRwYXJzZS1ob3ctb3B0cGFyc2UtaGFuZGxlcy1lcnJvcnNyHw8AAChqaQEAAGpqAQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS1ob3ctb3B0cGFyc2UtaGFuZGxlcy1lcnJvcnNYGwAAAEhvdyBvcHRwYXJzZSBoYW5kbGVzIGVycm9yc3RyIA8AAFgUAAAAaW5zdC1ob3ctYnVpbGQtd29ya3NyIQ8AAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2luc3RhbGwvaW5kZXguaHRtbCNpbnN0LWhvdy1idWlsZC13b3Jrc1gSAAAASG93IGJ1aWxkaW5nIHdvcmtzdHIiDwAAWAsAAAB0dXQtY2xhc3Nlc3IjDwAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvY2xhc3Nlcy5odG1sI3R1dC1jbGFzc2VzWAcAAABDbGFzc2VzdHIkDwAAWBUAAABibHRpbi1lbGxpcHNpcy1vYmplY3RyJQ8AAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNibHRpbi1lbGxpcHNpcy1vYmplY3RYEwAAAFRoZSBFbGxpcHNpcyBPYmplY3R0ciYPAABYDAAAAHR5cGVzbWFwcGluZ3InDwAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3R5cGVzbWFwcGluZ1gWAAAATWFwcGluZyBUeXBlcyDigJQgZGljdHRyKA8AAFgQAAAAYXR0ci10YXJnZXQtbm90ZXIpDwAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI2F0dHItdGFyZ2V0LW5vdGVYAQAAAC10cioPAABYBwAAAG5ldGRhdGFyKw8AAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbmV0ZGF0YS5odG1sI25ldGRhdGFYFgAAAEludGVybmV0IERhdGEgSGFuZGxpbmd0ciwPAABYDgAAAHVzaW5nLWNhcHN1bGVzci0PAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9leHRlbmRpbmcvZXh0ZW5kaW5nLmh0bWwjdXNpbmctY2Fwc3VsZXNYKQAAAFByb3ZpZGluZyBhIEMgQVBJIGZvciBhbiBFeHRlbnNpb24gTW9kdWxldHIuDwAAWAcAAABmaW5hbGx5ci8PAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCNmaW5hbGx5WBEAAABUaGUgdHJ5IHN0YXRlbWVudHRyMA8AAFgEAAAAd2l0aHIxDwAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLmh0bWwjd2l0aFgSAAAAVGhlIHdpdGggc3RhdGVtZW50dHIyDwAAWBkAAABvcHRwYXJzZS1kZWZpbmluZy1vcHRpb25zcjMPAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UtZGVmaW5pbmctb3B0aW9uc1gQAAAARGVmaW5pbmcgb3B0aW9uc3RyNA8AAFgYAAAAb2xkLXN0eWxlLXNwZWNpYWwtbG9va3VwcjUPAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2xkLXN0eWxlLXNwZWNpYWwtbG9va3VwWCsAAABTcGVjaWFsIG1ldGhvZCBsb29rdXAgZm9yIG9sZC1zdHlsZSBjbGFzc2VzdHI2DwAAWBgAAABvcHRwYXJzZS1yZWZlcmVuY2UtZ3VpZGVyNw8AAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS1yZWZlcmVuY2UtZ3VpZGVYDwAAAFJlZmVyZW5jZSBHdWlkZXRyOA8AAFgJAAAAY3BsdXNwbHVzcjkPAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9leHRlbmRpbmcvZXh0ZW5kaW5nLmh0bWwjY3BsdXNwbHVzWBkAAABXcml0aW5nIEV4dGVuc2lvbnMgaW4gQysrdHI6DwAAWBIAAABzdGFuZGFyZC1lbmNvZGluZ3NyOw8AAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjc3RhbmRhcmQtZW5jb2RpbmdzWBIAAABTdGFuZGFyZCBFbmNvZGluZ3N0cjwPAABYDAAAAG1haWxib3gtbWJveHI9DwAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC1tYm94WAQAAABtYm94dHI+DwAAWBcAAABvc3NhdWRpby1kZXZpY2Utb2JqZWN0c3I/DwAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vc3NhdWRpb2Rldi5odG1sI29zc2F1ZGlvLWRldmljZS1vYmplY3RzWBQAAABBdWRpbyBEZXZpY2UgT2JqZWN0c3RyQA8AAFgFAAAAc3Vub3NyQQ8AAChqaQEAAGpqAQAAWDAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VuLmh0bWwjc3Vub3NYFwAAAFN1bk9TIFNwZWNpZmljIFNlcnZpY2VzdHJCDwAAWBEAAABlbWFpbC1wa2ctaGlzdG9yeXJDDwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5odG1sI2VtYWlsLXBrZy1oaXN0b3J5WA8AAABQYWNrYWdlIEhpc3Rvcnl0ckQPAABYFAAAAGFyY2hpdmluZy1vcGVyYXRpb25zckUPAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NodXRpbC5odG1sI2FyY2hpdmluZy1vcGVyYXRpb25zWBQAAABBcmNoaXZpbmcgb3BlcmF0aW9uc3RyRg8AAFgPAAAAaG90c2hvdC1vYmplY3RzckcPAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2hvdHNob3QuaHRtbCNob3RzaG90LW9iamVjdHNYDwAAAFByb2ZpbGUgT2JqZWN0c3RySA8AAFgGAAAAaW1wb3J0ckkPAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWwjaW1wb3J0WBQAAABUaGUgaW1wb3J0IHN0YXRlbWVudHRySg8AAFghAAAAZGlzdHV0aWxzLWluc3RhbGxpbmctcGFja2FnZS1kYXRhcksPAAAoamkBAABqagEAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvc2V0dXBzY3JpcHQuaHRtbCNkaXN0dXRpbHMtaW5zdGFsbGluZy1wYWNrYWdlLWRhdGFYFwAAAEluc3RhbGxpbmcgUGFja2FnZSBEYXRhdHJMDwAAWA8AAABjdHlwZXMtcG9pbnRlcnNyTQ8AAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLXBvaW50ZXJzWAgAAABQb2ludGVyc3RyTg8AAFgUAAAAYXR0cmlidXRlLXJlZmVyZW5jZXNyTw8AAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2F0dHJpYnV0ZS1yZWZlcmVuY2VzWBQAAABBdHRyaWJ1dGUgcmVmZXJlbmNlc3RyUA8AAFgGAAAAcmV0dXJuclEPAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWwjcmV0dXJuWBQAAABUaGUgcmV0dXJuIHN0YXRlbWVudHRyUg8AAFgNAAAAZnJhbWUtb2JqZWN0c3JTDwAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI2ZyYW1lLW9iamVjdHNYAQAAAC10clQPAABYCQAAAGNvbnN0YW50c3JVDwAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjY29uc3RhbnRzWAkAAABDb25zdGFudHN0clYPAABYCgAAADJ0bzMtdXNpbmdyVw8AAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvMnRvMy5odG1sI3RvMy11c2luZ1gKAAAAVXNpbmcgMnRvM3RyWA8AAFgMAAAAbW9kdWxlLWV0cmVlclkPAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjUuaHRtbCNtb2R1bGUtZXRyZWVYFwAAAFRoZSBFbGVtZW50VHJlZSBwYWNrYWdldHJaDwAAWAgAAABwdXJlLXBrZ3JbDwAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2V4YW1wbGVzLmh0bWwjcHVyZS1wa2dYJQAAAFB1cmUgUHl0aG9uIGRpc3RyaWJ1dGlvbiAoYnkgcGFja2FnZSl0clwPAABYCAAAAG1vZGluZGV4KGppAQAAamoBAABYKgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcHktbW9kaW5kZXguaHRtbFgMAAAATW9kdWxlIEluZGV4dHJdDwAAWBsAAABlbGVtZW50dHJlZS1lbGVtZW50LW9iamVjdHNyXg8AAChqaQEAAGpqAQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjZWxlbWVudHRyZWUtZWxlbWVudC1vYmplY3RzWA8AAABFbGVtZW50IE9iamVjdHN0cl8PAABYDgAAAGJ1ZmZlci1zdHJ1Y3RzcmAPAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYnVmZmVyLXN0cnVjdHNYGAAAAEJ1ZmZlciBPYmplY3QgU3RydWN0dXJlc3RyYQ8AAFgNAAAAaW5zcGVjdC1zdGFja3JiDwAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC1zdGFja1gVAAAAVGhlIGludGVycHJldGVyIHN0YWNrdHJjDwAAWA8AAABjb25zb2xlLW9iamVjdHNyZA8AAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZS5odG1sI2NvbnNvbGUtb2JqZWN0c1gbAAAASW50ZXJhY3RpdmUgQ29uc29sZSBPYmplY3RzdHJlDwAAWAsAAABwaWNrbGUtaW5zdHJmDwAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9waWNrbGUuaHRtbCNwaWNrbGUtaW5zdFguAAAAUGlja2xpbmcgYW5kIHVucGlja2xpbmcgbm9ybWFsIGNsYXNzIGluc3RhbmNlc3RyZw8AAFgKAAAAaW50b2JqZWN0c3JoDwAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW50Lmh0bWwjaW50b2JqZWN0c1gVAAAAUGxhaW4gSW50ZWdlciBPYmplY3RzdHJpDwAAWAwAAABwb2xsLW9iamVjdHNyag8AAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2VsZWN0Lmh0bWwjcG9sbC1vYmplY3RzWA8AAABQb2xsaW5nIE9iamVjdHN0cmsPAABYDgAAAHN0cnVjdC1vYmplY3RzcmwPAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cnVjdC5odG1sI3N0cnVjdC1vYmplY3RzWAcAAABDbGFzc2VzdHJtDwAAWBEAAAB1c2luZy10aGUtdHJhY2tlcnJuDwAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYnVncy5odG1sI3VzaW5nLXRoZS10cmFja2VyWB4AAABVc2luZyB0aGUgUHl0aG9uIGlzc3VlIHRyYWNrZXJ0cm8PAABYDQAAAG1haWxib3gtYmFieWxycA8AAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3gtYmFieWxYBQAAAEJhYnlsdHJxDwAAWBUAAABzdHJlYW0td3JpdGVyLW9iamVjdHNycg8AAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjc3RyZWFtLXdyaXRlci1vYmplY3RzWBQAAABTdHJlYW1Xcml0ZXIgT2JqZWN0c3Rycw8AAFgMAAAAdHlwZXNtZXRob2RzcnQPAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjdHlwZXNtZXRob2RzWAcAAABNZXRob2RzdHJ1DwAAWA4AAABzdHJpbmctbWV0aG9kc3J2DwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0cmluZy1tZXRob2RzWA4AAABTdHJpbmcgTWV0aG9kc3Rydw8AAFgUAAAAZG9jdGVzdC1ob3ctaXQtd29ya3NyeA8AAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QtaG93LWl0LXdvcmtzWAwAAABIb3cgSXQgV29ya3N0cnkPAABYDgAAAHRlbG5ldC1vYmplY3RzcnoPAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RlbG5ldGxpYi5odG1sI3RlbG5ldC1vYmplY3RzWA4AAABUZWxuZXQgT2JqZWN0c3Ryew8AAFgMAAAAY291bnRpbmdyZWZzcnwPAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9yZWZjb3VudGluZy5odG1sI2NvdW50aW5ncmVmc1gSAAAAUmVmZXJlbmNlIENvdW50aW5ndHJ9DwAAWAwAAABmbC1mdW5jdGlvbnNyfg8AAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmwuaHRtbCNmbC1mdW5jdGlvbnNYHgAAAEZ1bmN0aW9ucyBEZWZpbmVkIGluIE1vZHVsZSBmbHRyfw8AAFgcAAAAZ2VuZXJpYy1hdHRyaWJ1dGUtbWFuYWdlbWVudHKADwAAKGppAQAAamoBAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZXh0ZW5kaW5nL25ld3R5cGVzLmh0bWwjZ2VuZXJpYy1hdHRyaWJ1dGUtbWFuYWdlbWVudFgcAAAAR2VuZXJpYyBBdHRyaWJ1dGUgTWFuYWdlbWVudHRygQ8AAFgQAAAAaW5zdGFsbC1kYXRhLWNtZHKCDwAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2NvbW1hbmRyZWYuaHRtbCNpbnN0YWxsLWRhdGEtY21kWAwAAABpbnN0YWxsX2RhdGF0coMPAABYEQAAAHhtbHBhcnNlci1vYmplY3RzcoQPAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWxwYXJzZXItb2JqZWN0c1gRAAAAWE1MUGFyc2VyIE9iamVjdHN0coUPAABYCwAAAHNvdXJjZS1kaXN0coYPAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvc291cmNlZGlzdC5odG1sI3NvdXJjZS1kaXN0WB4AAABDcmVhdGluZyBhIFNvdXJjZSBEaXN0cmlidXRpb250cocPAABYEgAAAGZpbHRlcnMtY29udGV4dHVhbHKIDwAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaG93dG8vbG9nZ2luZy1jb29rYm9vay5odG1sI2ZpbHRlcnMtY29udGV4dHVhbFguAAAAVXNpbmcgRmlsdGVycyB0byBpbXBhcnQgY29udGV4dHVhbCBpbmZvcm1hdGlvbnRyiQ8AAFgOAAAAc2NyZWVuc3BlY2lmaWNyig8AAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjc2NyZWVuc3BlY2lmaWNYOwAAAE1ldGhvZHMgc3BlY2lmaWMgdG8gU2NyZWVuLCBub3QgaW5oZXJpdGVkIGZyb20gVHVydGxlU2NyZWVudHKLDwAAWBUAAABkZXNjcmlwdG9yLWludm9jYXRpb25yjA8AAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNkZXNjcmlwdG9yLWludm9jYXRpb25YFAAAAEludm9raW5nIERlc2NyaXB0b3JzdHKNDwAAWA8AAABtaW5pZG9tLWFuZC1kb21yjg8AAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5taW5pZG9tLmh0bWwjbWluaWRvbS1hbmQtZG9tWBwAAABtaW5pZG9tIGFuZCB0aGUgRE9NIHN0YW5kYXJkdHKPDwAAWBUAAABpbnN0LWFsdC1pbnN0YWxsLXVzZXJykA8AAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2luc3RhbGwvaW5kZXguaHRtbCNpbnN0LWFsdC1pbnN0YWxsLXVzZXJYJwAAAEFsdGVybmF0ZSBpbnN0YWxsYXRpb246IHRoZSB1c2VyIHNjaGVtZXRykQ8AAFgGAAAAbW1lZGlhcpIPAAAoamkBAABqagEAAFgwAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21tLmh0bWwjbW1lZGlhWBMAAABNdWx0aW1lZGlhIFNlcnZpY2VzdHKTDwAAWAoAAABidWlsdC1kaXN0cpQPAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYnVpbHRkaXN0Lmh0bWwjYnVpbHQtZGlzdFgcAAAAQ3JlYXRpbmcgQnVpbHQgRGlzdHJpYnV0aW9uc3RylQ8AAFgPAAAAemlwZmlsZS1vYmplY3RzcpYPAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLW9iamVjdHNYDwAAAFppcEZpbGUgT2JqZWN0c3Rylw8AAFgTAAAAcG9wZW4yLWZsb3ctY29udHJvbHKYDwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wb3BlbjIuaHRtbCNwb3BlbjItZmxvdy1jb250cm9sWBMAAABGbG93IENvbnRyb2wgSXNzdWVzdHKZDwAAWA4AAABwcm9jZXNzY29udHJvbHKaDwAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3lzLmh0bWwjcHJvY2Vzc2NvbnRyb2xYDwAAAFByb2Nlc3MgQ29udHJvbHRymw8AAFgKAAAAaWQtY2xhc3Nlc3KcDwAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNpZC1jbGFzc2VzWB8AAABSZXNlcnZlZCBjbGFzc2VzIG9mIGlkZW50aWZpZXJzdHKdDwAAWAUAAAB1bmRvY3KeDwAAKGppAQAAamoBAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bmRvYy5odG1sI3VuZG9jWBQAAABVbmRvY3VtZW50ZWQgTW9kdWxlc3Rynw8AAFgMAAAAc210cC1leGFtcGxlcqAPAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NtdHBsaWIuaHRtbCNzbXRwLWV4YW1wbGVYDAAAAFNNVFAgRXhhbXBsZXRyoQ8AAFgQAAAAYXRvbS1pZGVudGlmaWVyc3KiDwAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjYXRvbS1pZGVudGlmaWVyc1gTAAAASWRlbnRpZmllcnMgKE5hbWVzKXRyow8AAFgPAAAAcGFydGlhbC1vYmplY3RzcqQPAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0b29scy5odG1sI3BhcnRpYWwtb2JqZWN0c1gPAAAAcGFydGlhbCBPYmplY3RzdHKlDwAAWA0AAABiaXRzdHJpbmctb3BzcqYPAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjYml0c3RyaW5nLW9wc1gjAAAAQml0d2lzZSBPcGVyYXRpb25zIG9uIEludGVnZXIgVHlwZXN0cqcPAABYDQAAAGxpYnJhcnktaW50cm9yqA8AAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW50cm8uaHRtbCNsaWJyYXJ5LWludHJvWAwAAABJbnRyb2R1Y3Rpb250cqkPAABYEwAAAGR0ZC1oYW5kbGVyLW9iamVjdHNyqg8AAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjZHRkLWhhbmRsZXItb2JqZWN0c1gSAAAARFRESGFuZGxlciBPYmplY3RzdHKrDwAAWAwAAAB0dXBsZW9iamVjdHNyrA8AAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R1cGxlLmh0bWwjdHVwbGVvYmplY3RzWA0AAABUdXBsZSBPYmplY3RzdHKtDwAAWCEAAABtdWx0aXByb2Nlc3NpbmctbGlzdGVuZXJzLWNsaWVudHNyrg8AAChqaQEAAGpqAQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLWxpc3RlbmVycy1jbGllbnRzWBUAAABMaXN0ZW5lcnMgYW5kIENsaWVudHN0cq8PAABYEwAAAGZvcm1hdHRlci1pbnRlcmZhY2VysA8AAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZm9ybWF0dGVyLmh0bWwjZm9ybWF0dGVyLWludGVyZmFjZVgXAAAAVGhlIEZvcm1hdHRlciBJbnRlcmZhY2V0crEPAABYCAAAAHBlcC0zMTEycrIPAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjYuaHRtbCNwZXAtMzExMlgXAAAAUEVQIDMxMTI6IEJ5dGUgTGl0ZXJhbHN0crMPAABYCAAAAHdoeS1zZWxmcrQPAAAoamkBAABqagEAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9mYXEvZGVzaWduLmh0bWwjd2h5LXNlbGZYRwAAAFdoeSBtdXN0IOKAmHNlbGbigJkgYmUgdXNlZCBleHBsaWNpdGx5IGluIG1ldGhvZCBkZWZpbml0aW9ucyBhbmQgY2FsbHM/dHK1DwAAWAwAAAByZXByLW9iamVjdHNytg8AAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVwci5odG1sI3JlcHItb2JqZWN0c1gMAAAAUmVwciBPYmplY3RzdHK3DwAAWAkAAABsaW5rLXJlcXNyuA8AAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2V4dGVuZGluZy9lbWJlZGRpbmcuaHRtbCNsaW5rLXJlcXNYLQAAAENvbXBpbGluZyBhbmQgTGlua2luZyB1bmRlciBVbml4LWxpa2Ugc3lzdGVtc3RyuQ8AAFgYAAAAdW5pdHRlc3QtbWluaW1hbC1leGFtcGxlcroPAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QtbWluaW1hbC1leGFtcGxlWA0AAABCYXNpYyBleGFtcGxldHK7DwAAWBQAAABoaWdoLWxldmVsLWVtYmVkZGluZ3K8DwAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZXh0ZW5kaW5nL2VtYmVkZGluZy5odG1sI2hpZ2gtbGV2ZWwtZW1iZWRkaW5nWBkAAABWZXJ5IEhpZ2ggTGV2ZWwgRW1iZWRkaW5ndHK9DwAAWBQAAABzdHJlYW0tcmVhZGVyLXdyaXRlcnK+DwAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNzdHJlYW0tcmVhZGVyLXdyaXRlclgaAAAAU3RyZWFtUmVhZGVyV3JpdGVyIE9iamVjdHN0cr8PAABYDgAAAGtxdWV1ZS1vYmplY3RzcsAPAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NlbGVjdC5odG1sI2txdWV1ZS1vYmplY3RzWA4AAABLcXVldWUgT2JqZWN0c3RywQ8AAFgLAAAAdGFyLXVuaWNvZGVywg8AAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFyZmlsZS5odG1sI3Rhci11bmljb2RlWA4AAABVbmljb2RlIGlzc3Vlc3Ryww8AAFgTAAAAdHV0LWludGVybmV0LWFjY2Vzc3LEDwAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvc3RkbGliLmh0bWwjdHV0LWludGVybmV0LWFjY2Vzc1gPAAAASW50ZXJuZXQgQWNjZXNzdHLFDwAAWAYAAABjcnlwdG9yxg8AAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3J5cHRvLmh0bWwjY3J5cHRvWBYAAABDcnlwdG9ncmFwaGljIFNlcnZpY2VzdHLHDwAAWBAAAABleHBsaWNpdC1qb2luaW5ncsgPAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2V4cGxpY2l0LWpvaW5pbmdYFQAAAEV4cGxpY2l0IGxpbmUgam9pbmluZ3RyyQ8AAFgTAAAAbWFjLXBhY2thZ2UtbWFuYWdlcnLKDwAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvbWFjLmh0bWwjbWFjLXBhY2thZ2UtbWFuYWdlclglAAAASW5zdGFsbGluZyBBZGRpdGlvbmFsIFB5dGhvbiBQYWNrYWdlc3Ryyw8AAFgFAAAAcG9ydHNyzA8AAChqaQEAAGpqAQAAWDEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuNS5odG1sI3BvcnRzWBUAAABQb3J0LVNwZWNpZmljIENoYW5nZXN0cs0PAABYDwAAAG9zeC1ndWktc2NyaXB0c3LODwAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvbWFjLmh0bWwjb3N4LWd1aS1zY3JpcHRzWBoAAABSdW5uaW5nIHNjcmlwdHMgd2l0aCBhIEdVSXRyzw8AAFgKAAAAd2l0aC1sb2Nrc3LQDwAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN3aXRoLWxvY2tzWD0AAABVc2luZyBsb2NrcywgY29uZGl0aW9ucywgYW5kIHNlbWFwaG9yZXMgaW4gdGhlIHdpdGggc3RhdGVtZW50dHLRDwAAWA8AAABmb3JtYXR0ZXItaW1wbHNy0g8AAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZm9ybWF0dGVyLmh0bWwjZm9ybWF0dGVyLWltcGxzWBkAAABGb3JtYXR0ZXIgSW1wbGVtZW50YXRpb25zdHLTDwAAWA8AAABleHRlbmRpbmctaW50cm9y1A8AAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2V4dGVuZGluZy9leHRlbmRpbmcuaHRtbCNleHRlbmRpbmctaW50cm9YHgAAAEV4dGVuZGluZyBQeXRob24gd2l0aCBDIG9yIEMrK3Ry1Q8AAFgRAAAAaW1wb3J0bGliLXNlY3Rpb25y1g8AAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuNy5odG1sI2ltcG9ydGxpYi1zZWN0aW9uWBUAAABOZXcgbW9kdWxlOiBpbXBvcnRsaWJ0ctcPAABYDgAAAHNvY2tldC1oYW5kbGVyctgPAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNzb2NrZXQtaGFuZGxlclgNAAAAU29ja2V0SGFuZGxlcnRy2Q8AAFgNAAAAd3JpdGluZy10ZXN0c3LaDwAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZXN0Lmh0bWwjd3JpdGluZy10ZXN0c1gnAAAAV3JpdGluZyBVbml0IFRlc3RzIGZvciB0aGUgdGVzdCBwYWNrYWdldHLbDwAAWAoAAABmb3JtYXRzcGVjctwPAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZy5odG1sI2Zvcm1hdHNwZWNYIgAAAEZvcm1hdCBTcGVjaWZpY2F0aW9uIE1pbmktTGFuZ3VhZ2V0ct0PAABYHwAAAGxvZ2dpbmctY29uZmlnLWRpY3QtaW50ZXJuYWxvYmpy3g8AAChqaQEAAGpqAQAAWFUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5jb25maWcuaHRtbCNsb2dnaW5nLWNvbmZpZy1kaWN0LWludGVybmFsb2JqWBoAAABBY2Nlc3MgdG8gaW50ZXJuYWwgb2JqZWN0c3Ry3w8AAFgKAAAAcmVmbGVjdGlvbnLgDwAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvcmVmbGVjdGlvbi5odG1sI3JlZmxlY3Rpb25YCgAAAFJlZmxlY3Rpb250cuEPAABYFQAAAHR1dC1vdXRwdXQtZm9ybWF0dGluZ3LiDwAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvc3RkbGliMi5odG1sI3R1dC1vdXRwdXQtZm9ybWF0dGluZ1gRAAAAT3V0cHV0IEZvcm1hdHRpbmd0cuMPAABYCAAAAGNvbXBpbGVycuQPAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbXBpbGVyLmh0bWwjY29tcGlsZXJYFwAAAFB5dGhvbiBjb21waWxlciBwYWNrYWdldHLlDwAAWA8AAAB3ZWFrcmVmLW9iamVjdHNy5g8AAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2Vha3JlZi5odG1sI3dlYWtyZWYtb2JqZWN0c1gWAAAAV2VhayBSZWZlcmVuY2UgT2JqZWN0c3Ry5w8AAFgQAAAAZXhwcmVzc2lvbi1pbnB1dHLoDwAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL3RvcGxldmVsX2NvbXBvbmVudHMuaHRtbCNleHByZXNzaW9uLWlucHV0WBAAAABFeHByZXNzaW9uIGlucHV0dHLpDwAAWBAAAABzZXF1ZW5jZS1zdHJ1Y3RzcuoPAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjc2VxdWVuY2Utc3RydWN0c1gaAAAAU2VxdWVuY2UgT2JqZWN0IFN0cnVjdHVyZXN0cusPAABYDQAAAHR1dC1mdW5jdGlvbnNy7A8AAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2NvbnRyb2xmbG93Lmh0bWwjdHV0LWZ1bmN0aW9uc1gSAAAARGVmaW5pbmcgRnVuY3Rpb25zdHLtDwAAWA0AAABmb3Jtcy1vYmplY3Rzcu4PAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZsLmh0bWwjZm9ybXMtb2JqZWN0c1gNAAAARk9STVMgT2JqZWN0c3Ry7w8AAFgNAAAAbWFjLXNjcmlwdGluZ3LwDwAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWNvc2EuaHRtbCNtYWMtc2NyaXB0aW5nWBUAAABNYWNQeXRob24gT1NBIE1vZHVsZXN0cvEPAABYGwAAAG9wdHBhcnNlLWFkZGluZy1uZXctYWN0aW9uc3LyDwAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLWFkZGluZy1uZXctYWN0aW9uc1gSAAAAQWRkaW5nIG5ldyBhY3Rpb25zdHLzDwAAWAcAAABwb3J0aW5ncvQPAAAoamkBAABqagEAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjUuaHRtbCNwb3J0aW5nWBUAAABQb3J0aW5nIHRvIFB5dGhvbiAyLjV0cvUPAABYEAAAAGRhdGFncmFtLWhhbmRsZXJy9g8AAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2RhdGFncmFtLWhhbmRsZXJYDwAAAERhdGFncmFtSGFuZGxlcnRy9w8AAFgaAAAAY3R5cGVzLWZ1bmN0aW9uLXByb3RvdHlwZXNy+A8AAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLWZ1bmN0aW9uLXByb3RvdHlwZXNYEwAAAEZ1bmN0aW9uIHByb3RvdHlwZXN0cvkPAABYEgAAAGZwZWN0bC1saW1pdGF0aW9uc3L6DwAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcGVjdGwuaHRtbCNmcGVjdGwtbGltaXRhdGlvbnNYJAAAAExpbWl0YXRpb25zIGFuZCBvdGhlciBjb25zaWRlcmF0aW9uc3Ry+w8AAFgGAAAAbGFtYmRhcvwPAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNsYW1iZGFYBwAAAExhbWJkYXN0cv0PAABYFwAAAG90aGVyLW1ldGhvZHMtYW5kLWF0dHJzcv4PAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjb3RoZXItbWV0aG9kcy1hbmQtYXR0cnNYAQAAAC10cv8PAABYEQAAAGFsLWNvbmZpZy1vYmplY3RzcgAQAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FsLmh0bWwjYWwtY29uZmlnLW9iamVjdHNYFQAAAENvbmZpZ3VyYXRpb24gT2JqZWN0c3RyARAAAFgGAAAAZ2xvYmFscgIQAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWwjZ2xvYmFsWBQAAABUaGUgZ2xvYmFsIHN0YXRlbWVudHRyAxAAAFgGAAAAdHV0LWlvcgQQAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9pbnB1dG91dHB1dC5odG1sI3R1dC1pb1gQAAAASW5wdXQgYW5kIE91dHB1dHRyBRAAAFgZAAAAZG9jdGVzdC1leGVjdXRpb24tY29udGV4dHIGEAAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC1leGVjdXRpb24tY29udGV4dFgfAAAAV2hhdOKAmXMgdGhlIEV4ZWN1dGlvbiBDb250ZXh0P3RyBxAAAFgSAAAAbmV3LTI3LWludGVycHJldGVycggQAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjcuaHRtbCNuZXctMjctaW50ZXJwcmV0ZXJYEwAAAEludGVycHJldGVyIENoYW5nZXN0cgkQAABYBgAAAGZ1dHVyZXIKEAAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI2Z1dHVyZVgRAAAARnV0dXJlIHN0YXRlbWVudHN0cgsQAABYCQAAAHN0LWVycm9yc3IMEAAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wYXJzZXIuaHRtbCNzdC1lcnJvcnNYHQAAAEV4Y2VwdGlvbnMgYW5kIEVycm9yIEhhbmRsaW5ndHINEAAAWDMAAABjdHlwZXMtY2FsbGluZy1mdW5jdGlvbnMtd2l0aC1vd24tY3VzdG9tLWRhdGEtdHlwZXNyDhAAAChqaQEAAGpqAQAAWGEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLWNhbGxpbmctZnVuY3Rpb25zLXdpdGgtb3duLWN1c3RvbS1kYXRhLXR5cGVzWDEAAABDYWxsaW5nIGZ1bmN0aW9ucyB3aXRoIHlvdXIgb3duIGN1c3RvbSBkYXRhIHR5cGVzdHIPEAAAWBAAAAByZWFkbGluZS1leGFtcGxlchAQAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlYWRsaW5lLmh0bWwjcmVhZGxpbmUtZXhhbXBsZVgHAAAARXhhbXBsZXRyERAAAFgXAAAAbWFpbGJveC1tZXNzYWdlLW9iamVjdHNyEhAAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3gtbWVzc2FnZS1vYmplY3RzWA8AAABNZXNzYWdlIG9iamVjdHN0chMQAABYEQAAAHR1dC1tZXRob2RvYmplY3RzchQQAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9jbGFzc2VzLmh0bWwjdHV0LW1ldGhvZG9iamVjdHNYDgAAAE1ldGhvZCBPYmplY3RzdHIVEAAAWBIAAABhcmdwYXJzZS5yZW1haW5kZXJyFhAAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXJncGFyc2UuaHRtbCNhcmdwYXJzZS1yZW1haW5kZXJYAQAAAC10chcQAABYCQAAAHR1dC1pbnRyb3IYEAAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvYXBwZXRpdGUuaHRtbCN0dXQtaW50cm9YFgAAAFdoZXR0aW5nIFlvdXIgQXBwZXRpdGV0chkQAABYDgAAAHR1dC1jYWxjdWxhdG9ychoQAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9pbnRyb2R1Y3Rpb24uaHRtbCN0dXQtY2FsY3VsYXRvclgcAAAAVXNpbmcgUHl0aG9uIGFzIGEgQ2FsY3VsYXRvcnRyGxAAAFgMAAAAdHV0LWhhbmRsaW5nchwQAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9lcnJvcnMuaHRtbCN0dXQtaGFuZGxpbmdYEwAAAEhhbmRsaW5nIEV4Y2VwdGlvbnN0ch0QAABYEQAAAGluc3Qtc3BsaXR0aW5nLXVwch4QAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9pbnN0YWxsL2luZGV4Lmh0bWwjaW5zdC1zcGxpdHRpbmctdXBYFAAAAFNwbGl0dGluZyB0aGUgam9iIHVwdHIfEAAAWAcAAABudW1iZXJzciAQAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI251bWJlcnNYEAAAAE51bWVyaWMgbGl0ZXJhbHN0ciEQAABYFwAAAGN0eXBlcy1pbmNvbXBsZXRlLXR5cGVzciIQAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy1pbmNvbXBsZXRlLXR5cGVzWBAAAABJbmNvbXBsZXRlIFR5cGVzdHIjEAAAWAkAAAB0b3AtbGV2ZWxyJBAAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS90b3BsZXZlbF9jb21wb25lbnRzLmh0bWwjdG9wLWxldmVsWBQAAABUb3AtbGV2ZWwgY29tcG9uZW50c3RyJRAAAFgSAAAAc3RyaW5nLWNvbnZlcnNpb25zciYQAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNzdHJpbmctY29udmVyc2lvbnNYEgAAAFN0cmluZyBjb252ZXJzaW9uc3RyJxAAAFgUAAAAY29uZmlncGFyc2VyLW9iamVjdHNyKBAAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjY29uZmlncGFyc2VyLW9iamVjdHNYFAAAAENvbmZpZ1BhcnNlciBPYmplY3RzdHIpEAAAWA0AAABsaWJyYXJ5LWluZGV4cioQAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luZGV4Lmh0bWwjbGlicmFyeS1pbmRleFgbAAAAVGhlIFB5dGhvbiBTdGFuZGFyZCBMaWJyYXJ5dHIrEAAAdVgIAAAAYzptZW1iZXJyLBAAAH1yLRAAAChYEgAAAFB5X2J1ZmZlci5yZWFkb25seXIuEAAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYnVmZmVyLmh0bWwjYy5QeV9idWZmZXIucmVhZG9ubHlYAQAAAC10ci8QAABYDwAAAFB5X2J1ZmZlci5zaGFwZXIwEAAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYnVmZmVyLmh0bWwjYy5QeV9idWZmZXIuc2hhcGVYAQAAAC10cjEQAABYEgAAAFB5X2J1ZmZlci5pbnRlcm5hbHIyEAAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYnVmZmVyLmh0bWwjYy5QeV9idWZmZXIuaW50ZXJuYWxYAQAAAC10cjMQAABYIwAAAFB5U2VxdWVuY2VNZXRob2RzLnNxX2lucGxhY2VfcmVwZWF0cjQQAAAoamkBAABqagEAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVNlcXVlbmNlTWV0aG9kcy5zcV9pbnBsYWNlX3JlcGVhdFgBAAAALXRyNRAAAFgZAAAAUHlOdW1iZXJNZXRob2RzLm5iX2NvZXJjZXI2EAAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlOdW1iZXJNZXRob2RzLm5iX2NvZXJjZVgBAAAALXRyNxAAAFgUAAAAUHlUeXBlT2JqZWN0LnRwX2ZyZWVyOBAAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9mcmVlWAEAAAAtdHI5EAAAWBQAAABQeVR5cGVPYmplY3QudHBfcmVwcnI6EAAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX3JlcHJYAQAAAC10cjsQAABYIQAAAFB5TWFwcGluZ01ldGhvZHMubXBfYXNzX3N1YnNjcmlwdHI8EAAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlNYXBwaW5nTWV0aG9kcy5tcF9hc3Nfc3Vic2NyaXB0WAEAAAAtdHI9EAAAWBUAAABQeVR5cGVPYmplY3QudHBfZmxhZ3NyPhAAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9mbGFnc1gBAAAALXRyPxAAAFgTAAAAUHlWYXJPYmplY3Qub2Jfc2l6ZXJAEAAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlWYXJPYmplY3Qub2Jfc2l6ZVgBAAAALXRyQRAAAFgVAAAAUHlUeXBlT2JqZWN0LnRwX3ByaW50ckIQAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfcHJpbnRYAQAAAC10ckMQAABYEQAAAFB5T2JqZWN0Ll9vYl9uZXh0ckQQAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeU9iamVjdC5fb2JfbmV4dFgBAAAALXRyRRAAAFgeAAAAUHlUeXBlT2JqZWN0LnRwX3dlYWtsaXN0b2Zmc2V0ckYQAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfd2Vha2xpc3RvZmZzZXRYAQAAAC10ckcQAABYGQAAAFB5VHlwZU9iamVjdC50cF9hc19idWZmZXJySBAAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9hc19idWZmZXJYAQAAAC10ckkQAABYGQAAAFB5VHlwZU9iamVjdC50cF9kZXNjcl9nZXRyShAAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9kZXNjcl9nZXRYAQAAAC10cksQAABYFAAAAFB5VHlwZU9iamVjdC50cF9pdGVyckwQAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfaXRlclgBAAAALXRyTRAAAFgUAAAAUHlUeXBlT2JqZWN0LnRwX25hbWVyThAAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9uYW1lWAEAAAAtdHJPEAAAWBQAAABQeVR5cGVPYmplY3QudHBfaGFzaHJQEAAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX2hhc2hYAQAAAC10clEQAABYEgAAAFB5T2JqZWN0Lm9iX3JlZmNudHJSEAAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlPYmplY3Qub2JfcmVmY250WAEAAAAtdHJTEAAAWBQAAABQeVR5cGVPYmplY3QudHBfaW5pdHJUEAAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX2luaXRYAQAAAC10clUQAABYFQAAAFB5VHlwZU9iamVjdC50cF9pc19nY3JWEAAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX2lzX2djWAEAAAAtdHJXEAAAWBMAAABQeVR5cGVPYmplY3QudHBfbXJvclgQAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfbXJvWAEAAAAtdHJZEAAAWBgAAABQeVR5cGVPYmplY3QudHBfc2V0YXR0cm9yWhAAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9zZXRhdHRyb1gBAAAALXRyWxAAAFgVAAAAUHlUeXBlT2JqZWN0LnRwX2NsZWFyclwQAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfY2xlYXJYAQAAAC10cl0QAABYGAAAAFB5VHlwZU9iamVjdC50cF9tYXhhbGxvY3JeEAAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX21heGFsbG9jWAEAAAAtdHJfEAAAWBEAAABQeU9iamVjdC5fb2JfcHJldnJgEAAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlPYmplY3QuX29iX3ByZXZYAQAAAC10cmEQAABYFAAAAFB5VHlwZU9iamVjdC50cF9kaWN0cmIQAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfZGljdFgBAAAALXRyYxAAAFgVAAAAUHlUeXBlT2JqZWN0LnRwX2FsbG9jcmQQAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfYWxsb2NYAQAAAC10cmUQAABYFAAAAFB5X2J1ZmZlci5zdWJvZmZzZXRzcmYQAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9idWZmZXIuaHRtbCNjLlB5X2J1ZmZlci5zdWJvZmZzZXRzWAEAAAAtdHJnEAAAWB0AAABQeVNlcXVlbmNlTWV0aG9kcy5zcV9hc3NfaXRlbXJoEAAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlTZXF1ZW5jZU1ldGhvZHMuc3FfYXNzX2l0ZW1YAQAAAC10cmkQAABYFQAAAFB5VHlwZU9iamVjdC50cF9mcmVlc3JqEAAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX2ZyZWVzWAEAAAAtdHJrEAAAWBoAAABQeVR5cGVPYmplY3QudHBfc3ViY2xhc3Nlc3JsEAAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX3N1YmNsYXNzZXNYAQAAAC10cm0QAABYEQAAAFB5X2J1ZmZlci5zdHJpZGVzcm4QAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9idWZmZXIuaHRtbCNjLlB5X2J1ZmZlci5zdHJpZGVzWAEAAAAtdHJvEAAAWCMAAABQeVNlcXVlbmNlTWV0aG9kcy5zcV9pbnBsYWNlX2NvbmNhdHJwEAAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlTZXF1ZW5jZU1ldGhvZHMuc3FfaW5wbGFjZV9jb25jYXRYAQAAAC10cnEQAABYDgAAAHRwX2FzX3NlcXVlbmNlcnIQAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy50cF9hc19zZXF1ZW5jZVgBAAAALXRycxAAAFgXAAAAUHlUeXBlT2JqZWN0LnRwX2NvbXBhcmVydBAAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9jb21wYXJlWAEAAAAtdHJ1EAAAWBAAAABQeU9iamVjdC5vYl90eXBlcnYQAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeU9iamVjdC5vYl90eXBlWAEAAAAtdHJ3EAAAWBQAAABQeVR5cGVPYmplY3QudHBfbmV4dHJ4EAAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX25leHRYAQAAAC10cnkQAABYGAAAAFB5VHlwZU9iamVjdC50cF90cmF2ZXJzZXJ6EAAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX3RyYXZlcnNlWAEAAAAtdHJ7EAAAWBsAAABQeVR5cGVPYmplY3QudHBfcmljaGNvbXBhcmVyfBAAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9yaWNoY29tcGFyZVgBAAAALXRyfRAAAFgOAAAAUHlfYnVmZmVyLm5kaW1yfhAAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2J1ZmZlci5odG1sI2MuUHlfYnVmZmVyLm5kaW1YAQAAAC10cn8QAABYGQAAAFB5U2VxdWVuY2VNZXRob2RzLnNxX2l0ZW1ygBAAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5U2VxdWVuY2VNZXRob2RzLnNxX2l0ZW1YAQAAAC10coEQAABYFwAAAFB5VHlwZU9iamVjdC50cF9tZXRob2RzcoIQAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfbWV0aG9kc1gBAAAALXRygxAAAFgXAAAAUHlUeXBlT2JqZWN0LnRwX2RlYWxsb2NyhBAAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9kZWFsbG9jWAEAAAAtdHKFEAAAWBoAAABQeU1hcHBpbmdNZXRob2RzLm1wX2xlbmd0aHKGEAAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlNYXBwaW5nTWV0aG9kcy5tcF9sZW5ndGhYAQAAAC10cocQAABYEwAAAFB5VHlwZU9iamVjdC50cF9kb2NyiBAAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9kb2NYAQAAAC10cokQAABYFgAAAFB5VHlwZU9iamVjdC50cF9hbGxvY3NyihAAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9hbGxvY3NYAQAAAC10cosQAABYFgAAAFB5VHlwZU9iamVjdC50cF9nZXRzZXRyjBAAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9nZXRzZXRYAQAAAC10co0QAABYGwAAAFB5U2VxdWVuY2VNZXRob2RzLnNxX2NvbmNhdHKOEAAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlTZXF1ZW5jZU1ldGhvZHMuc3FfY29uY2F0WAEAAAAtdHKPEAAAWBQAAABQeVR5cGVPYmplY3QudHBfYmFzZXKQEAAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX2Jhc2VYAQAAAC10cpEQAABYGAAAAFB5VHlwZU9iamVjdC50cF9pdGVtc2l6ZXKSEAAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX2l0ZW1zaXplWAEAAAAtdHKTEAAAWBsAAABQeVNlcXVlbmNlTWV0aG9kcy5zcV9yZXBlYXRylBAAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5U2VxdWVuY2VNZXRob2RzLnNxX3JlcGVhdFgBAAAALXRylRAAAFgdAAAAUHlNYXBwaW5nTWV0aG9kcy5tcF9zdWJzY3JpcHRylhAAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5TWFwcGluZ01ldGhvZHMubXBfc3Vic2NyaXB0WAEAAAAtdHKXEAAAWBIAAABQeV9idWZmZXIuaXRlbXNpemVymBAAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2J1ZmZlci5odG1sI2MuUHlfYnVmZmVyLml0ZW1zaXplWAEAAAAtdHKZEAAAWBcAAABQeVR5cGVPYmplY3QudHBfZ2V0YXR0cnKaEAAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX2dldGF0dHJYAQAAAC10cpsQAABYDQAAAFB5X2J1ZmZlci5idWZynBAAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2J1ZmZlci5odG1sI2MuUHlfYnVmZmVyLmJ1ZlgBAAAALXRynRAAAFgTAAAAUHlUeXBlT2JqZWN0LnRwX25ld3KeEAAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX25ld1gBAAAALXRynxAAAFgYAAAAUHlUeXBlT2JqZWN0LnRwX3dlYWtsaXN0cqAQAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfd2Vha2xpc3RYAQAAAC10cqEQAABYGgAAAFB5VHlwZU9iamVjdC50cF9kaWN0b2Zmc2V0cqIQAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfZGljdG9mZnNldFgBAAAALXRyoxAAAFgNAAAAdHBfYXNfbWFwcGluZ3KkEAAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MudHBfYXNfbWFwcGluZ1gBAAAALXRypRAAAFgZAAAAUHlUeXBlT2JqZWN0LnRwX2Jhc2ljc2l6ZXKmEAAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX2Jhc2ljc2l6ZVgBAAAALXRypxAAAFgVAAAAUHlUeXBlT2JqZWN0LnRwX2Jhc2VzcqgQAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfYmFzZXNYAQAAAC10cqkQAABYDAAAAHRwX2FzX251bWJlcnKqEAAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MudHBfYXNfbnVtYmVyWAEAAAAtdHKrEAAAWBgAAABQeVR5cGVPYmplY3QudHBfaXRlcm5leHRyrBAAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9pdGVybmV4dFgBAAAALXRyrRAAAFgUAAAAUHlUeXBlT2JqZWN0LnRwX2NhbGxyrhAAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9jYWxsWAEAAAAtdHKvEAAAWBUAAABQeVR5cGVPYmplY3QudHBfY2FjaGVysBAAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9jYWNoZVgBAAAALXRysRAAAFgTAAAAUHlUeXBlT2JqZWN0LnRwX3N0cnKyEAAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX3N0clgBAAAALXRysxAAAFgYAAAAUHlUeXBlT2JqZWN0LnRwX2dldGF0dHJvcrQQAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfZ2V0YXR0cm9YAQAAAC10crUQAABYGwAAAFB5U2VxdWVuY2VNZXRob2RzLnNxX2xlbmd0aHK2EAAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlTZXF1ZW5jZU1ldGhvZHMuc3FfbGVuZ3RoWAEAAAAtdHK3EAAAWB0AAABQeVNlcXVlbmNlTWV0aG9kcy5zcV9jb250YWluc3K4EAAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlTZXF1ZW5jZU1ldGhvZHMuc3FfY29udGFpbnNYAQAAAC10crkQAABYGQAAAFB5VHlwZU9iamVjdC50cF9kZXNjcl9zZXRyuhAAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9kZXNjcl9zZXRYAQAAAC10crsQAABYFwAAAFB5VHlwZU9iamVjdC50cF9zZXRhdHRycrwQAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfc2V0YXR0clgBAAAALXRyvRAAAFgXAAAAUHlUeXBlT2JqZWN0LnRwX21lbWJlcnNyvhAAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9tZW1iZXJzWAEAAAAtdHK/EAAAdVgMAAAAcHk6ZXhjZXB0aW9ucsAQAAB9csEQAAAoWAgAAABkbC5lcnJvcnLCEAAAKGppAQAAamoBAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kbC5odG1sI2RsLmVycm9yWAEAAAAtdHLDEAAAWBgAAABodHRwbGliLlJlc3BvbnNlTm90UmVhZHlyxBAAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHR0cGxpYi5odG1sI2h0dHBsaWIuUmVzcG9uc2VOb3RSZWFkeVgBAAAALXRyxRAAAFgUAAAAcGlja2xlLlBpY2tsaW5nRXJyb3JyxhAAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGlja2xlLmh0bWwjcGlja2xlLlBpY2tsaW5nRXJyb3JYAQAAAC10cscQAABYHAAAAGV4Y2VwdGlvbnMuS2V5Ym9hcmRJbnRlcnJ1cHRyyBAAAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI2V4Y2VwdGlvbnMuS2V5Ym9hcmRJbnRlcnJ1cHRYAQAAAC10cskQAABYFgAAAGV4Y2VwdGlvbnMuU3lzdGVtRXJyb3JyyhAAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI2V4Y2VwdGlvbnMuU3lzdGVtRXJyb3JYAQAAAC10cssQAABYEgAAAGZ0cGxpYi5lcnJvcl9wcm90b3LMEAAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuZXJyb3JfcHJvdG9YAQAAAC10cs0QAABYGQAAAGVtYWlsLmVycm9ycy5NZXNzYWdlRXJyb3JyzhAAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwuZXJyb3JzLmh0bWwjZW1haWwuZXJyb3JzLk1lc3NhZ2VFcnJvclgBAAAALXRyzxAAAFgLAAAATWFjT1MuRXJyb3Jy0BAAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFjb3MuaHRtbCNNYWNPUy5FcnJvclgBAAAALXRy0RAAAFgMAAAAeGRybGliLkVycm9yctIQAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3hkcmxpYi5odG1sI3hkcmxpYi5FcnJvclgBAAAALXRy0xAAAFgVAAAAc210cGxpYi5TTVRQSGVsb0Vycm9yctQQAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NtdHBsaWIuaHRtbCNzbXRwbGliLlNNVFBIZWxvRXJyb3JYAQAAAC10ctUQAABYFAAAAHNzbC5TU0xXYW50UmVhZEVycm9yctYQAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xXYW50UmVhZEVycm9yWAEAAAAtdHLXEAAAWBkAAABleGNlcHRpb25zLkF0dHJpYnV0ZUVycm9yctgQAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNleGNlcHRpb25zLkF0dHJpYnV0ZUVycm9yWAEAAAAtdHLZEAAAWAsAAABiZGIuQmRiUXVpdHLaEAAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iZGIuaHRtbCNiZGIuQmRiUXVpdFgBAAAALXRy2xAAAFgfAAAAc210cGxpYi5TTVRQQXV0aGVudGljYXRpb25FcnJvcnLcEAAAKGppAQAAamoBAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zbXRwbGliLmh0bWwjc210cGxpYi5TTVRQQXV0aGVudGljYXRpb25FcnJvclgBAAAALXRy3RAAAFgbAAAAeG1sLmRvbS5JbnZhbGlkQ2hhcmFjdGVyRXJyct4QAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkludmFsaWRDaGFyYWN0ZXJFcnJYAQAAAC10ct8QAABYGAAAAGV4Y2VwdGlvbnMuR2VuZXJhdG9yRXhpdHLgEAAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5HZW5lcmF0b3JFeGl0WAEAAAAtdHLhEAAAWBkAAAB4bWwuc2F4LlNBWFBhcnNlRXhjZXB0aW9ucuIQAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXguaHRtbCN4bWwuc2F4LlNBWFBhcnNlRXhjZXB0aW9uWAEAAAAtdHLjEAAAWAwAAABiaW5oZXguRXJyb3Jy5BAAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmluaGV4Lmh0bWwjYmluaGV4LkVycm9yWAEAAAAtdHLlEAAAWBcAAABpby5VbnN1cHBvcnRlZE9wZXJhdGlvbnLmEAAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pby5odG1sI2lvLlVuc3VwcG9ydGVkT3BlcmF0aW9uWAEAAAAtdHLnEAAAWAgAAABvcy5lcnJvcnLoEAAAKGppAQAAamoBAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLmVycm9yWAEAAAAtdHLpEAAAWBoAAABDb25maWdQYXJzZXIuTm9PcHRpb25FcnJvcnLqEAAAKGppAQAAamoBAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNDb25maWdQYXJzZXIuTm9PcHRpb25FcnJvclgBAAAALXRy6xAAAFgRAAAAbm50cGxpYi5OTlRQRXJyb3Jy7BAAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbm50cGxpYi5odG1sI25udHBsaWIuTk5UUEVycm9yWAEAAAAtdHLtEAAAWBQAAABjdHlwZXMuQXJndW1lbnRFcnJvcnLuEAAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuQXJndW1lbnRFcnJvclgBAAAALXRy7xAAAFgIAAAAdXUuRXJyb3Jy8BAAAChqaQEAAGpqAQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXUuaHRtbCN1dS5FcnJvclgBAAAALXRy8RAAAFgkAAAAQ29uZmlnUGFyc2VyLkludGVycG9sYXRpb25EZXB0aEVycm9ycvIQAAAoamkBAABqagEAAFhYAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbmZpZ3BhcnNlci5odG1sI0NvbmZpZ1BhcnNlci5JbnRlcnBvbGF0aW9uRGVwdGhFcnJvclgBAAAALXRy8xAAAFgZAAAAZXhjZXB0aW9ucy5SdW50aW1lV2FybmluZ3L0EAAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5SdW50aW1lV2FybmluZ1gBAAAALXRy9RAAAFgNAAAAaW1nZmlsZS5lcnJvcnL2EAAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWdmaWxlLmh0bWwjaW1nZmlsZS5lcnJvclgBAAAALXRy9xAAAFgTAAAAc3NsLlNTTFN5c2NhbGxFcnJvcnL4EAAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMU3lzY2FsbEVycm9yWAEAAAAtdHL5EAAAWCEAAAB4bWwuc2F4LlNBWE5vdFJlY29nbml6ZWRFeGNlcHRpb25y+hAAAChqaQEAAGpqAQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5odG1sI3htbC5zYXguU0FYTm90UmVjb2duaXplZEV4Y2VwdGlvblgBAAAALXRy+xAAAFgWAAAAc3NsLlNTTFplcm9SZXR1cm5FcnJvcnL8EAAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMWmVyb1JldHVybkVycm9yWAEAAAAtdHL9EAAAWAwAAABkYmhhc2guZXJyb3Jy/hAAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGJoYXNoLmh0bWwjZGJoYXNoLmVycm9yWAEAAAAtdHL/EAAAWBQAAABleGNlcHRpb25zLkV4Y2VwdGlvbnIAEQAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5FeGNlcHRpb25YAQAAAC10cgERAABYGwAAAHRlc3Quc3VwcG9ydC5SZXNvdXJjZURlbmllZHICEQAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LlJlc291cmNlRGVuaWVkWAEAAAAtdHIDEQAAWBUAAABleGNlcHRpb25zLkluZGV4RXJyb3JyBBEAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI2V4Y2VwdGlvbnMuSW5kZXhFcnJvclgBAAAALXRyBREAAFgKAAAAanBlZy5lcnJvcnIGEQAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9qcGVnLmh0bWwjanBlZy5lcnJvclgBAAAALXRyBxEAAFgQAAAAd2ViYnJvd3Nlci5FcnJvcnIIEQAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93ZWJicm93c2VyLmh0bWwjd2ViYnJvd3Nlci5FcnJvclgBAAAALXRyCREAAFgbAAAAZG9jdGVzdC5VbmV4cGVjdGVkRXhjZXB0aW9ucgoRAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LlVuZXhwZWN0ZWRFeGNlcHRpb25YAQAAAC10cgsRAABYDAAAAHRocmVhZC5lcnJvcnIMEQAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWQuaHRtbCN0aHJlYWQuZXJyb3JYAQAAAC10cg0RAABYFgAAAGV4Y2VwdGlvbnMuQnVmZmVyRXJyb3JyDhEAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI2V4Y2VwdGlvbnMuQnVmZmVyRXJyb3JYAQAAAC10cg8RAABYFgAAAGV4Y2VwdGlvbnMuTWVtb3J5RXJyb3JyEBEAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI2V4Y2VwdGlvbnMuTWVtb3J5RXJyb3JYAQAAAC10chERAABYJQAAAENvbmZpZ1BhcnNlci5JbnRlcnBvbGF0aW9uU3ludGF4RXJyb3JyEhEAAChqaQEAAGpqAQAAWFkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjQ29uZmlnUGFyc2VyLkludGVycG9sYXRpb25TeW50YXhFcnJvclgBAAAALXRyExEAAFgNAAAAaW1hZ2VvcC5lcnJvcnIUEQAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFnZW9wLmh0bWwjaW1hZ2VvcC5lcnJvclgBAAAALXRyFREAAFgbAAAAeG1sLmRvbS5IaWVyYXJjaHlSZXF1ZXN0RXJychYRAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkhpZXJhcmNoeVJlcXVlc3RFcnJYAQAAAC10chcRAABYDwAAAHNzbC5TU0xFT0ZFcnJvcnIYEQAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMRU9GRXJyb3JYAQAAAC10chkRAABYGQAAAGV4Y2VwdGlvbnMuQXNzZXJ0aW9uRXJyb3JyGhEAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI2V4Y2VwdGlvbnMuQXNzZXJ0aW9uRXJyb3JYAQAAAC10chsRAABYEgAAAHNpZ25hbC5JdGltZXJFcnJvcnIcEQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaWduYWwuaHRtbCNzaWduYWwuSXRpbWVyRXJyb3JYAQAAAC10ch0RAABYHgAAAG11bHRpcHJvY2Vzc2luZy5CdWZmZXJUb29TaG9ydHIeEQAAKGppAQAAamoBAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuQnVmZmVyVG9vU2hvcnRYAQAAAC10ch8RAABYIAAAAGV4Y2VwdGlvbnMuVW5pY29kZVRyYW5zbGF0ZUVycm9yciARAAAoamkBAABqagEAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNleGNlcHRpb25zLlVuaWNvZGVUcmFuc2xhdGVFcnJvclgBAAAALXRyIREAAFgaAAAAbm50cGxpYi5OTlRQUGVybWFuZW50RXJyb3JyIhEAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbm50cGxpYi5odG1sI25udHBsaWIuTk5UUFBlcm1hbmVudEVycm9yWAEAAAAtdHIjEQAAWBUAAABodHRwbGliLkJhZFN0YXR1c0xpbmVyJBEAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHR0cGxpYi5odG1sI2h0dHBsaWIuQmFkU3RhdHVzTGluZVgBAAAALXRyJREAAFgbAAAAZXhjZXB0aW9ucy5FbnZpcm9ubWVudEVycm9yciYRAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNleGNlcHRpb25zLkVudmlyb25tZW50RXJyb3JYAQAAAC10cicRAABYEwAAAGJpbmFzY2lpLkluY29tcGxldGVyKBEAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmluYXNjaWkuaHRtbCNiaW5hc2NpaS5JbmNvbXBsZXRlWAEAAAAtdHIpEQAAWBkAAABweV9jb21waWxlLlB5Q29tcGlsZUVycm9ycioRAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5X2NvbXBpbGUuaHRtbCNweV9jb21waWxlLlB5Q29tcGlsZUVycm9yWAEAAAAtdHIrEQAAWBAAAAB1cmxsaWIyLlVSTEVycm9yciwRAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLlVSTEVycm9yWAEAAAAtdHItEQAAWBEAAABmdHBsaWIuZXJyb3JfcGVybXIuEQAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuZXJyb3JfcGVybVgBAAAALXRyLxEAAFgYAAAAdGFyZmlsZS5Db21wcmVzc2lvbkVycm9ycjARAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLkNvbXByZXNzaW9uRXJyb3JYAQAAAC10cjERAABYDAAAAHNzbC5TU0xFcnJvcnIyEQAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMRXJyb3JYAQAAAC10cjMRAABYEwAAAHRhcmZpbGUuU3RyZWFtRXJyb3JyNBEAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuU3RyZWFtRXJyb3JYAQAAAC10cjURAABYHgAAAGV4Y2VwdGlvbnMuTm90SW1wbGVtZW50ZWRFcnJvcnI2EQAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5Ob3RJbXBsZW1lbnRlZEVycm9yWAEAAAAtdHI3EQAAWBIAAABleGNlcHRpb25zLldhcm5pbmdyOBEAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI2V4Y2VwdGlvbnMuV2FybmluZ1gBAAAALXRyOREAAFgZAAAAZXhjZXB0aW9ucy5SZWZlcmVuY2VFcnJvcnI6EQAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5SZWZlcmVuY2VFcnJvclgBAAAALXRyOxEAAFgYAAAAeG1sLmRvbS5Ob0RhdGFBbGxvd2VkRXJycjwRAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLk5vRGF0YUFsbG93ZWRFcnJYAQAAAC10cj0RAABYGQAAAENvbmZpZ1BhcnNlci5QYXJzaW5nRXJyb3JyPhEAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjQ29uZmlnUGFyc2VyLlBhcnNpbmdFcnJvclgBAAAALXRyPxEAAFgSAAAAZXhjZXB0aW9ucy5JT0Vycm9yckARAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNleGNlcHRpb25zLklPRXJyb3JYAQAAAC10ckERAABYEwAAAGZwZm9ybWF0Lk5vdEFOdW1iZXJyQhEAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnBmb3JtYXQuaHRtbCNmcGZvcm1hdC5Ob3RBTnVtYmVyWAEAAAAtdHJDEQAAWBUAAABodHRwbGliLkhUVFBFeGNlcHRpb25yRBEAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHR0cGxpYi5odG1sI2h0dHBsaWIuSFRUUEV4Y2VwdGlvblgBAAAALXRyRREAAFgRAAAAZnRwbGliLmVycm9yX3RlbXByRhEAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnRwbGliLmh0bWwjZnRwbGliLmVycm9yX3RlbXBYAQAAAC10ckcRAABYIgAAAENvbmZpZ1BhcnNlci5EdXBsaWNhdGVTZWN0aW9uRXJyb3JySBEAAChqaQEAAGpqAQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjQ29uZmlnUGFyc2VyLkR1cGxpY2F0ZVNlY3Rpb25FcnJvclgBAAAALXRySREAAFgOAAAAYmluYXNjaWkuRXJyb3JyShEAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmluYXNjaWkuaHRtbCNiaW5hc2NpaS5FcnJvclgBAAAALXRySxEAAFgbAAAAZXhjZXB0aW9ucy5JbmRlbnRhdGlvbkVycm9yckwRAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNleGNlcHRpb25zLkluZGVudGF0aW9uRXJyb3JYAQAAAC10ck0RAABYJgAAAENvbmZpZ1BhcnNlci5NaXNzaW5nU2VjdGlvbkhlYWRlckVycm9yck4RAAAoamkBAABqagEAAFhaAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbmZpZ3BhcnNlci5odG1sI0NvbmZpZ1BhcnNlci5NaXNzaW5nU2VjdGlvbkhlYWRlckVycm9yWAEAAAAtdHJPEQAAWBsAAAB1cmxsaWIuQ29udGVudFRvb1Nob3J0RXJyb3JyUBEAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliLmh0bWwjdXJsbGliLkNvbnRlbnRUb29TaG9ydEVycm9yWAEAAAAtdHJREQAAWB0AAABlbWFpbC5lcnJvcnMuSGVhZGVyUGFyc2VFcnJvcnJSEQAAKGppAQAAamoBAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5lcnJvcnMuaHRtbCNlbWFpbC5lcnJvcnMuSGVhZGVyUGFyc2VFcnJvclgBAAAALXRyUxEAAFgTAAAAaW1hcGxpYi5JTUFQNC5hYm9ydHJUEQAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5hYm9ydFgBAAAALXRyVREAAFgcAAAAZXhjZXB0aW9ucy5aZXJvRGl2aXNpb25FcnJvcnJWEQAAKGppAQAAamoBAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5aZXJvRGl2aXNpb25FcnJvclgBAAAALXRyVxEAAFgWAAAAc2dtbGxpYi5TR01MUGFyc2VFcnJvcnJYEQAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZ21sbGliLmh0bWwjc2dtbGxpYi5TR01MUGFyc2VFcnJvclgBAAAALXRyWREAAFgMAAAAc3RydWN0LmVycm9ycloRAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cnVjdC5odG1sI3N0cnVjdC5lcnJvclgBAAAALXRyWxEAAFgXAAAAeG1sLnBhcnNlcnMuZXhwYXQuZXJyb3JyXBEAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LmVycm9yWAEAAAAtdHJdEQAAWBUAAABzc2wuU1NMV2FudFdyaXRlRXJyb3JyXhEAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTFdhbnRXcml0ZUVycm9yWAEAAAAtdHJfEQAAWBIAAABnZXRvcHQuR2V0b3B0RXJyb3JyYBEAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2V0b3B0Lmh0bWwjZ2V0b3B0LkdldG9wdEVycm9yWAEAAAAtdHJhEQAAWBYAAABwaWNrbGUuVW5waWNrbGluZ0Vycm9ycmIRAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BpY2tsZS5odG1sI3BpY2tsZS5VbnBpY2tsaW5nRXJyb3JYAQAAAC10cmMRAABYGQAAAG5udHBsaWIuTk5UUFByb3RvY29sRXJyb3JyZBEAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbm50cGxpYi5odG1sI25udHBsaWIuTk5UUFByb3RvY29sRXJyb3JYAQAAAC10cmURAABYEwAAAHRhcmZpbGUuSGVhZGVyRXJyb3JyZhEAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuSGVhZGVyRXJyb3JYAQAAAC10cmcRAABYGAAAAGV4Y2VwdGlvbnMuSW1wb3J0V2FybmluZ3JoEQAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5JbXBvcnRXYXJuaW5nWAEAAAAtdHJpEQAAWBsAAABDb25maWdQYXJzZXIuTm9TZWN0aW9uRXJyb3JyahEAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjQ29uZmlnUGFyc2VyLk5vU2VjdGlvbkVycm9yWAEAAAAtdHJrEQAAWBcAAAB4bWwuZG9tLk5vdFN1cHBvcnRlZEVycnJsEQAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Ob3RTdXBwb3J0ZWRFcnJYAQAAAC10cm0RAABYHgAAAHNtdHBsaWIuU01UUFNlcnZlckRpc2Nvbm5lY3RlZHJuEQAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zbXRwbGliLmh0bWwjc210cGxpYi5TTVRQU2VydmVyRGlzY29ubmVjdGVkWAEAAAAtdHJvEQAAWAwAAABzaHV0aWwuRXJyb3JycBEAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2h1dGlsLmh0bWwjc2h1dGlsLkVycm9yWAEAAAAtdHJxEQAAWBEAAABzdW5hdWRpb2Rldi5lcnJvcnJyEQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdW5hdWRpby5odG1sI3N1bmF1ZGlvZGV2LmVycm9yWAEAAAAtdHJzEQAAWBcAAAB4bWwuZG9tLkludmFsaWRTdGF0ZUVycnJ0EQAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5JbnZhbGlkU3RhdGVFcnJYAQAAAC10cnURAABYCQAAAG5pcy5lcnJvcnJ2EQAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9uaXMuaHRtbCNuaXMuZXJyb3JYAQAAAC10cncRAABYCAAAAGNkLmVycm9ycngRAAAoamkBAABqagEAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NkLmh0bWwjY2QuZXJyb3JYAQAAAC10cnkRAABYJwAAAG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLlRpbWVvdXRFcnJvcnJ6EQAAKGppAQAAamoBAABYXgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi5UaW1lb3V0RXJyb3JYAQAAAC10cnsRAABYFAAAAHNzbC5DZXJ0aWZpY2F0ZUVycm9ycnwRAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5DZXJ0aWZpY2F0ZUVycm9yWAEAAAAtdHJ9EQAAWBcAAABleGNlcHRpb25zLlVuaWNvZGVFcnJvcnJ+EQAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5Vbmljb2RlRXJyb3JYAQAAAC10cn8RAABYDAAAAGxvY2FsZS5FcnJvcnKAEQAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUuRXJyb3JYAQAAAC10coERAABYDAAAAHNlbGVjdC5lcnJvcnKCEQAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZWxlY3QuaHRtbCNzZWxlY3QuZXJyb3JYAQAAAC10coMRAABYCgAAAHpsaWIuZXJyb3JyhBEAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemxpYi5odG1sI3psaWIuZXJyb3JYAQAAAC10coURAABYEgAAAHBpY2tsZS5QaWNrbGVFcnJvcnKGEQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9waWNrbGUuaHRtbCNwaWNrbGUuUGlja2xlRXJyb3JYAQAAAC10cocRAABYGgAAAG5udHBsaWIuTk5UUFRlbXBvcmFyeUVycm9ycogRAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L25udHBsaWIuaHRtbCNubnRwbGliLk5OVFBUZW1wb3JhcnlFcnJvclgBAAAALXRyiREAAFgXAAAAZXhjZXB0aW9ucy5SdW50aW1lRXJyb3JyihEAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI2V4Y2VwdGlvbnMuUnVudGltZUVycm9yWAEAAAAtdHKLEQAAWBYAAAB4ZHJsaWIuQ29udmVyc2lvbkVycm9ycowRAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3hkcmxpYi5odG1sI3hkcmxpYi5Db252ZXJzaW9uRXJyb3JYAQAAAC10co0RAABYEgAAAGV4Y2VwdGlvbnMuT1NFcnJvcnKOEQAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5PU0Vycm9yWAEAAAAtdHKPEQAAWA0AAABtYWlsYm94LkVycm9ycpARAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94LkVycm9yWAEAAAAtdHKREQAAWCAAAAB4bWwuc2F4LlNBWE5vdFN1cHBvcnRlZEV4Y2VwdGlvbnKSEQAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4Lmh0bWwjeG1sLnNheC5TQVhOb3RTdXBwb3J0ZWRFeGNlcHRpb25YAQAAAC10cpMRAABYEgAAAHBhcnNlci5QYXJzZXJFcnJvcnKUEQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wYXJzZXIuaHRtbCNwYXJzZXIuUGFyc2VyRXJyb3JYAQAAAC10cpURAABYEQAAAHhtbC5kb20uU3ludGF4RXJycpYRAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLlN5bnRheEVyclgBAAAALXRylxEAAFgdAAAAZXhjZXB0aW9ucy5Vbmljb2RlRGVjb2RlRXJyb3JymBEAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI2V4Y2VwdGlvbnMuVW5pY29kZURlY29kZUVycm9yWAEAAAAtdHKZEQAAWCQAAABleGNlcHRpb25zLlBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmdymhEAAChqaQEAAGpqAQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI2V4Y2VwdGlvbnMuUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZ1gBAAAALXRymxEAAFgNAAAAZHVtYmRibS5lcnJvcnKcEQAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kdW1iZGJtLmh0bWwjZHVtYmRibS5lcnJvclgBAAAALXRynREAAFgeAAAAeG1sLmRvbS5JbnZhbGlkTW9kaWZpY2F0aW9uRXJycp4RAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkludmFsaWRNb2RpZmljYXRpb25FcnJYAQAAAC10cp8RAABYDQAAAHNvY2tldC5oZXJyb3JyoBEAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LmhlcnJvclgBAAAALXRyoREAAFgaAAAAZXhjZXB0aW9ucy5Bcml0aG1ldGljRXJyb3JyohEAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI2V4Y2VwdGlvbnMuQXJpdGhtZXRpY0Vycm9yWAEAAAAtdHKjEQAAWBIAAABwb3BsaWIuZXJyb3JfcHJvdG9ypBEAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcG9wbGliLmh0bWwjcG9wbGliLmVycm9yX3Byb3RvWAEAAAAtdHKlEQAAWCwAAABDb25maWdQYXJzZXIuSW50ZXJwb2xhdGlvbk1pc3NpbmdPcHRpb25FcnJvcnKmEQAAKGppAQAAamoBAABYYAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNDb25maWdQYXJzZXIuSW50ZXJwb2xhdGlvbk1pc3NpbmdPcHRpb25FcnJvclgBAAAALXRypxEAAFgUAAAAeG1sLnNheC5TQVhFeGNlcHRpb25yqBEAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5odG1sI3htbC5zYXguU0FYRXhjZXB0aW9uWAEAAAAtdHKpEQAAWCkAAABtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi5CdWZmZXJUb29TaG9ydHKqEQAAKGppAQAAamoBAABYYAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi5CdWZmZXJUb29TaG9ydFgBAAAALXRyqxEAAFgUAAAAZXhjZXB0aW9ucy5OYW1lRXJyb3JyrBEAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI2V4Y2VwdGlvbnMuTmFtZUVycm9yWAEAAAAtdHKtEQAAWB8AAABodHRwbGliLlVua25vd25UcmFuc2ZlckVuY29kaW5ncq4RAAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0dHBsaWIuaHRtbCNodHRwbGliLlVua25vd25UcmFuc2ZlckVuY29kaW5nWAEAAAAtdHKvEQAAWBgAAABleGNlcHRpb25zLlN0b3BJdGVyYXRpb25ysBEAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI2V4Y2VwdGlvbnMuU3RvcEl0ZXJhdGlvblgBAAAALXRysREAAFgWAAAAZXhjZXB0aW9ucy5Mb29rdXBFcnJvcnKyEQAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5Mb29rdXBFcnJvclgBAAAALXRysxEAAFgWAAAAZXhjZXB0aW9ucy5Vc2VyV2FybmluZ3K0EQAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5Vc2VyV2FybmluZ1gBAAAALXRytREAAFgdAAAAaHR0cGxpYi5VbmltcGxlbWVudGVkRmlsZU1vZGVythEAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHR0cGxpYi5odG1sI2h0dHBsaWIuVW5pbXBsZW1lbnRlZEZpbGVNb2RlWAEAAAAtdHK3EQAAWBQAAAB4bWwuZG9tLkluZGV4U2l6ZUVycnK4EQAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5JbmRleFNpemVFcnJYAQAAAC10crkRAABYGgAAAG1haWxib3guRXh0ZXJuYWxDbGFzaEVycm9ycroRAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94LkV4dGVybmFsQ2xhc2hFcnJvclgBAAAALXRyuxEAAFgSAAAAaHR0cGxpYi5JbnZhbGlkVVJMcrwRAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0dHBsaWIuaHRtbCNodHRwbGliLkludmFsaWRVUkxYAQAAAC10cr0RAABYDQAAAGF1ZGlvb3AuZXJyb3JyvhEAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXVkaW9vcC5odG1sI2F1ZGlvb3AuZXJyb3JYAQAAAC10cr8RAABYEwAAAGV4Y2VwdGlvbnMuVGFiRXJyb3JywBEAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI2V4Y2VwdGlvbnMuVGFiRXJyb3JYAQAAAC10csERAABYFQAAAHRocmVhZGluZy5UaHJlYWRFcnJvcnLCEQAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuVGhyZWFkRXJyb3JYAQAAAC10csMRAABYFQAAAGV4Y2VwdGlvbnMuU3lzdGVtRXhpdHLEEQAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5TeXN0ZW1FeGl0WAEAAAAtdHLFEQAAWB0AAABzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcnLGEQAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3JYAQAAAC10cscRAABYCQAAAGNzdi5FcnJvcnLIEQAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jc3YuaHRtbCNjc3YuRXJyb3JYAQAAAC10cskRAABYGAAAAGV4Y2VwdGlvbnMuT3ZlcmZsb3dFcnJvcnLKEQAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5PdmVyZmxvd0Vycm9yWAEAAAAtdHLLEQAAWB8AAABodHRwbGliLkltcHJvcGVyQ29ubmVjdGlvblN0YXRlcswRAAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0dHBsaWIuaHRtbCNodHRwbGliLkltcHJvcGVyQ29ubmVjdGlvblN0YXRlWAEAAAAtdHLNEQAAWAwAAABhbnlkYm0uZXJyb3JyzhEAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYW55ZGJtLmh0bWwjYW55ZGJtLmVycm9yWAEAAAAtdHLPEQAAWBMAAABleGNlcHRpb25zLktleUVycm9yctARAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNleGNlcHRpb25zLktleUVycm9yWAEAAAAtdHLREQAAWBMAAABjb29raWVsaWIuTG9hZEVycm9yctIRAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5Mb2FkRXJyb3JYAQAAAC10ctMRAABYJwAAAG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLlByb2Nlc3NFcnJvcnLUEQAAKGppAQAAamoBAABYXgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi5Qcm9jZXNzRXJyb3JYAQAAAC10ctURAABYGAAAAGh0dHBsaWIuQ2Fubm90U2VuZEhlYWRlcnLWEQAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odHRwbGliLmh0bWwjaHR0cGxpYi5DYW5ub3RTZW5kSGVhZGVyWAEAAAAtdHLXEQAAWCAAAAB4bWwuZG9tLk5vTW9kaWZpY2F0aW9uQWxsb3dlZEVycnLYEQAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Ob01vZGlmaWNhdGlvbkFsbG93ZWRFcnJYAQAAAC10ctkRAABYGAAAAHhtbC5kb20uRG9tc3RyaW5nU2l6ZUVycnLaEQAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Eb21zdHJpbmdTaXplRXJyWAEAAAAtdHLbEQAAWB0AAABleGNlcHRpb25zLkZsb2F0aW5nUG9pbnRFcnJvcnLcEQAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5GbG9hdGluZ1BvaW50RXJyb3JYAQAAAC10ct0RAABYFAAAAHppcGZpbGUuTGFyZ2VaaXBGaWxlct4RAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLkxhcmdlWmlwRmlsZVgBAAAALXRy3xEAAFgZAAAAZXhjZXB0aW9ucy5Vbmljb2RlV2FybmluZ3LgEQAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5Vbmljb2RlV2FybmluZ1gBAAAALXRy4REAAFgWAAAAbm50cGxpYi5OTlRQUmVwbHlFcnJvcnLiEQAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ubnRwbGliLmh0bWwjbm50cGxpYi5OTlRQUmVwbHlFcnJvclgBAAAALXRy4xEAAFgWAAAAd2Vha3JlZi5SZWZlcmVuY2VFcnJvcnLkEQAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93ZWFrcmVmLmh0bWwjd2Vha3JlZi5SZWZlcmVuY2VFcnJvclgBAAAALXRy5REAAFgWAAAAZXhjZXB0aW9ucy5JbXBvcnRFcnJvcnLmEQAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5JbXBvcnRFcnJvclgBAAAALXRy5xEAAFguAAAAbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24uQXV0aGVudGljYXRpb25FcnJvcnLoEQAAKGppAQAAamoBAABYZQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi5BdXRoZW50aWNhdGlvbkVycm9yWAEAAAAtdHLpEQAAWBMAAAB0b2tlbml6ZS5Ub2tlbkVycm9ycuoRAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuaXplLmh0bWwjdG9rZW5pemUuVG9rZW5FcnJvclgBAAAALXRy6xEAAFgYAAAAc210cGxpYi5TTVRQQ29ubmVjdEVycm9ycuwRAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NtdHBsaWIuaHRtbCNzbXRwbGliLlNNVFBDb25uZWN0RXJyb3JYAQAAAC10cu0RAABYGAAAAGV4Y2VwdGlvbnMuU3ludGF4V2FybmluZ3LuEQAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5TeW50YXhXYXJuaW5nWAEAAAAtdHLvEQAAWBYAAABnZXRwYXNzLkdldFBhc3NXYXJuaW5ncvARAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dldHBhc3MuaHRtbCNnZXRwYXNzLkdldFBhc3NXYXJuaW5nWAEAAAAtdHLxEQAAWBMAAABtYWlsYm94LkZvcm1hdEVycm9ycvIRAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94LkZvcm1hdEVycm9yWAEAAAAtdHLzEQAAWBYAAABodG1sbGliLkhUTUxQYXJzZUVycm9ycvQRAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0bWxsaWIuaHRtbCNodG1sbGliLkhUTUxQYXJzZUVycm9yWAEAAAAtdHL1EQAAWBgAAABleGNlcHRpb25zLkZ1dHVyZVdhcm5pbmdy9hEAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI2V4Y2VwdGlvbnMuRnV0dXJlV2FybmluZ1gBAAAALXRy9xEAAFgIAAAAaWMuZXJyb3Jy+BEAAChqaQEAAGpqAQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaWMuaHRtbCNpYy5lcnJvclgBAAAALXRy+REAAFgVAAAAbmV0cmMuTmV0cmNQYXJzZUVycm9ycvoRAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L25ldHJjLmh0bWwjbmV0cmMuTmV0cmNQYXJzZUVycm9yWAEAAAAtdHL7EQAAWB0AAABzbXRwbGliLlNNVFBSZWNpcGllbnRzUmVmdXNlZHL8EQAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zbXRwbGliLmh0bWwjc210cGxpYi5TTVRQUmVjaXBpZW50c1JlZnVzZWRYAQAAAC10cv0RAABYFQAAAGV4Y2VwdGlvbnMuVmFsdWVFcnJvcnL+EQAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5WYWx1ZUVycm9yWAEAAAAtdHL/EQAAWBMAAABleGNlcHRpb25zLlZNU0Vycm9ycgASAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNleGNlcHRpb25zLlZNU0Vycm9yWAEAAAAtdHIBEgAAWBAAAAB0YXJmaWxlLlRhckVycm9ycgISAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLlRhckVycm9yWAEAAAAtdHIDEgAAWBkAAABmcGVjdGwuRmxvYXRpbmdQb2ludEVycm9ycgQSAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZwZWN0bC5odG1sI2ZwZWN0bC5GbG9hdGluZ1BvaW50RXJyb3JYAQAAAC10cgUSAABYEwAAAGV4Y2VwdGlvbnMuRU9GRXJyb3JyBhIAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI2V4Y2VwdGlvbnMuRU9GRXJyb3JYAQAAAC10cgcSAABYGAAAAHppcGltcG9ydC5aaXBJbXBvcnRFcnJvcnIIEgAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96aXBpbXBvcnQuaHRtbCN6aXBpbXBvcnQuWmlwSW1wb3J0RXJyb3JYAQAAAC10cgkSAABYFQAAAG5udHBsaWIuTk5UUERhdGFFcnJvcnIKEgAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ubnRwbGliLmh0bWwjbm50cGxpYi5OTlRQRGF0YUVycm9yWAEAAAAtdHILEgAAWBEAAAB0YWJuYW5ueS5OYW5ueU5hZ3IMEgAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YWJuYW5ueS5odG1sI3RhYm5hbm55Lk5hbm55TmFnWAEAAAAtdHINEgAAWB4AAABlbWFpbC5lcnJvcnMuTWVzc2FnZVBhcnNlRXJyb3JyDhIAAChqaQEAAGpqAQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwuZXJyb3JzLmh0bWwjZW1haWwuZXJyb3JzLk1lc3NhZ2VQYXJzZUVycm9yWAEAAAAtdHIPEgAAWA4AAAByZXNvdXJjZS5lcnJvcnIQEgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXNvdXJjZS5odG1sI3Jlc291cmNlLmVycm9yWAEAAAAtdHIREgAAWBUAAABzbXRwbGliLlNNVFBEYXRhRXJyb3JyEhIAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc210cGxpYi5odG1sI3NtdHBsaWIuU01UUERhdGFFcnJvclgBAAAALXRyExIAAFgWAAAAZXhjZXB0aW9ucy5TeW50YXhFcnJvcnIUEgAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5TeW50YXhFcnJvclgBAAAALXRyFRIAAFgaAAAAZW1haWwuZXJyb3JzLkJvdW5kYXJ5RXJyb3JyFhIAAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwuZXJyb3JzLmh0bWwjZW1haWwuZXJyb3JzLkJvdW5kYXJ5RXJyb3JYAQAAAC10chcSAABYEgAAAGZ0cGxpYi5lcnJvcl9yZXBseXIYEgAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuZXJyb3JfcmVwbHlYAQAAAC10chkSAABYFAAAAGh0dHBsaWIuTm90Q29ubmVjdGVkchoSAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0dHBsaWIuaHRtbCNodHRwbGliLk5vdENvbm5lY3RlZFgBAAAALXRyGxIAAFgUAAAAZXhjZXB0aW9ucy5UeXBlRXJyb3JyHBIAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI2V4Y2VwdGlvbnMuVHlwZUVycm9yWAEAAAAtdHIdEgAAWBoAAABtYWlsYm94Lk5vU3VjaE1haWxib3hFcnJvcnIeEgAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5Ob1N1Y2hNYWlsYm94RXJyb3JYAQAAAC10ch8SAABYEgAAAENvb2tpZS5Db29raWVFcnJvcnIgEgAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWUuaHRtbCNDb29raWUuQ29va2llRXJyb3JYAQAAAC10ciESAABYFgAAAGltYXBsaWIuSU1BUDQucmVhZG9ubHlyIhIAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQucmVhZG9ubHlYAQAAAC10ciMSAABYGQAAAG9zc2F1ZGlvZGV2Lk9TU0F1ZGlvRXJyb3JyJBIAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3NzYXVkaW9kZXYuaHRtbCNvc3NhdWRpb2Rldi5PU1NBdWRpb0Vycm9yWAEAAAAtdHIlEgAAWAwAAABzb2NrZXQuZXJyb3JyJhIAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LmVycm9yWAEAAAAtdHInEgAAWBkAAAB4bWwuZG9tLkludXNlQXR0cmlidXRlRXJycigSAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkludXNlQXR0cmlidXRlRXJyWAEAAAAtdHIpEgAAWBkAAABzbXRwbGliLlNNVFBTZW5kZXJSZWZ1c2VkcioSAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NtdHBsaWIuaHRtbCNzbXRwbGliLlNNVFBTZW5kZXJSZWZ1c2VkWAEAAAAtdHIrEgAAWBwAAABleGNlcHRpb25zLlVuYm91bmRMb2NhbEVycm9yciwSAAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNleGNlcHRpb25zLlVuYm91bmRMb2NhbEVycm9yWAEAAAAtdHItEgAAWAkAAABkYm0uZXJyb3JyLhIAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGJtLmh0bWwjZGJtLmVycm9yWAEAAAAtdHIvEgAAWAwAAABnZXRvcHQuZXJyb3JyMBIAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2V0b3B0Lmh0bWwjZ2V0b3B0LmVycm9yWAEAAAAtdHIxEgAAWBMAAABpbWFwbGliLklNQVA0LmVycm9ycjISAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LmVycm9yWAEAAAAtdHIzEgAAWBQAAAB4bWwuZG9tLk5hbWVzcGFjZUVycnI0EgAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5OYW1lc3BhY2VFcnJYAQAAAC10cjUSAABYCgAAAHdhdmUuRXJyb3JyNhIAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2F2ZS5odG1sI3dhdmUuRXJyb3JYAQAAAC10cjcSAABYGAAAAGV4Y2VwdGlvbnMuQmFzZUV4Y2VwdGlvbnI4EgAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjZXhjZXB0aW9ucy5CYXNlRXhjZXB0aW9uWAEAAAAtdHI5EgAAWA8AAABzb2NrZXQuZ2FpZXJyb3JyOhIAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LmdhaWVycm9yWAEAAAAtdHI7EgAAWB8AAABDb25maWdQYXJzZXIuSW50ZXJwb2xhdGlvbkVycm9ycjwSAAAoamkBAABqagEAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbmZpZ3BhcnNlci5odG1sI0NvbmZpZ1BhcnNlci5JbnRlcnBvbGF0aW9uRXJyb3JYAQAAAC10cj0SAABYHAAAAHhtbC5wYXJzZXJzLmV4cGF0LkV4cGF0RXJyb3JyPhIAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LkV4cGF0RXJyb3JYAQAAAC10cj8SAABYGAAAAHhtbC5kb20uSW52YWxpZEFjY2Vzc0VycnJAEgAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5JbnZhbGlkQWNjZXNzRXJyWAEAAAAtdHJBEgAAWAsAAABRdWV1ZS5FbXB0eXJCEgAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9xdWV1ZS5odG1sI1F1ZXVlLkVtcHR5WAEAAAAtdHJDEgAAWAoAAABRdWV1ZS5GdWxsckQSAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3F1ZXVlLmh0bWwjUXVldWUuRnVsbFgBAAAALXRyRRIAAFgVAAAAbWFpbGJveC5Ob3RFbXB0eUVycm9yckYSAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk5vdEVtcHR5RXJyb3JYAQAAAC10ckcSAABYFgAAAGRvY3Rlc3QuRG9jVGVzdEZhaWx1cmVySBIAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRG9jVGVzdEZhaWx1cmVYAQAAAC10ckkSAABYFwAAAGV4Y2VwdGlvbnMuV2luZG93c0Vycm9yckoSAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNleGNlcHRpb25zLldpbmRvd3NFcnJvclgBAAAALXRySxIAAFgWAAAAaHR0cGxpYi5JbmNvbXBsZXRlUmVhZHJMEgAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odHRwbGliLmh0bWwjaHR0cGxpYi5JbmNvbXBsZXRlUmVhZFgBAAAALXRyTRIAAFgRAAAAdW5pdHRlc3QuU2tpcFRlc3RyThIAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5Ta2lwVGVzdFgBAAAALXRyTxIAAFgYAAAAZXhjZXB0aW9ucy5TdGFuZGFyZEVycm9yclASAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNleGNlcHRpb25zLlN0YW5kYXJkRXJyb3JYAQAAAC10clESAABYEgAAAGlvLkJsb2NraW5nSU9FcnJvcnJSEgAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pby5odG1sI2lvLkJsb2NraW5nSU9FcnJvclgBAAAALXRyUxIAAFgSAAAAQ29uZmlnUGFyc2VyLkVycm9yclQSAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbmZpZ3BhcnNlci5odG1sI0NvbmZpZ1BhcnNlci5FcnJvclgBAAAALXRyVRIAAFgdAAAAZXhjZXB0aW9ucy5Vbmljb2RlRW5jb2RlRXJyb3JyVhIAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI2V4Y2VwdGlvbnMuVW5pY29kZUVuY29kZUVycm9yWAEAAAAtdHJXEgAAWBQAAABhdXRvR0lMLkF1dG9HSUxFcnJvcnJYEgAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hdXRvZ2lsLmh0bWwjYXV0b0dJTC5BdXRvR0lMRXJyb3JYAQAAAC10clkSAABYJQAAAGVtYWlsLmVycm9ycy5NdWx0aXBhcnRDb252ZXJzaW9uRXJyb3JyWhIAAChqaQEAAGpqAQAAWFkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwuZXJyb3JzLmh0bWwjZW1haWwuZXJyb3JzLk11bHRpcGFydENvbnZlcnNpb25FcnJvclgBAAAALXRyWxIAAFgRAAAAdGFyZmlsZS5SZWFkRXJyb3JyXBIAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuUmVhZEVycm9yWAEAAAAtdHJdEgAAWAoAAABjb3B5LmVycm9ycl4SAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvcHkuaHRtbCNjb3B5LmVycm9yWAEAAAAtdHJfEgAAWBcAAABodHRwbGliLlVua25vd25Qcm90b2NvbHJgEgAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odHRwbGliLmh0bWwjaHR0cGxpYi5Vbmtub3duUHJvdG9jb2xYAQAAAC10cmESAABYEQAAAHVybGxpYjIuSFRUUEVycm9ycmISAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLkhUVFBFcnJvclgBAAAALXRyYxIAAFgVAAAAc210cGxpYi5TTVRQRXhjZXB0aW9ucmQSAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NtdHBsaWIuaHRtbCNzbXRwbGliLlNNVFBFeGNlcHRpb25YAQAAAC10cmUSAABYGAAAAHhtbC5kb20uV3JvbmdEb2N1bWVudEVycnJmEgAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Xcm9uZ0RvY3VtZW50RXJyWAEAAAAtdHJnEgAAWBcAAAB0ZXN0LnN1cHBvcnQuVGVzdEZhaWxlZHJoEgAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LlRlc3RGYWlsZWRYAQAAAC10cmkSAABYDgAAAHNvY2tldC50aW1lb3V0cmoSAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC50aW1lb3V0WAEAAAAtdHJrEgAAWBQAAAB0YXJmaWxlLkV4dHJhY3RFcnJvcnJsEgAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5FeHRyYWN0RXJyb3JYAQAAAC10cm0SAABYCAAAAHJlLmVycm9ycm4SAAAoamkBAABqagEAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlLmh0bWwjcmUuZXJyb3JYAQAAAC10cm8SAABYGQAAAGh0dHBsaWIuQ2Fubm90U2VuZFJlcXVlc3RycBIAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHR0cGxpYi5odG1sI2h0dHBsaWIuQ2Fubm90U2VuZFJlcXVlc3RYAQAAAC10cnESAABYHQAAAGV4Y2VwdGlvbnMuRGVwcmVjYXRpb25XYXJuaW5ncnISAAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNleGNlcHRpb25zLkRlcHJlY2F0aW9uV2FybmluZ1gBAAAALXRycxIAAFgSAAAAemlwZmlsZS5CYWRaaXBmaWxlcnQSAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLkJhZFppcGZpbGVYAQAAAC10cnUSAABYCgAAAGdkYm0uZXJyb3JydhIAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2RibS5odG1sI2dkYm0uZXJyb3JYAQAAAC10cncSAABYGQAAAEhUTUxQYXJzZXIuSFRNTFBhcnNlRXJyb3JyeBIAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHRtbHBhcnNlci5odG1sI0hUTUxQYXJzZXIuSFRNTFBhcnNlRXJyb3JYAQAAAC10cnkSAABYFAAAAHhtbC5kb20uRE9NRXhjZXB0aW9ucnoSAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkRPTUV4Y2VwdGlvblgBAAAALXRyexIAAFgTAAAAeG1sLmRvbS5Ob3RGb3VuZEVycnJ8EgAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Ob3RGb3VuZEVyclgBAAAALXRyfRIAAFgdAAAAc210cGxpYi5TTVRQUmVzcG9uc2VFeGNlcHRpb25yfhIAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc210cGxpYi5odG1sI3NtdHBsaWIuU01UUFJlc3BvbnNlRXhjZXB0aW9uWAEAAAAtdHJ/EgAAWAwAAABjdXJzZXMuZXJyb3JygBIAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLmVycm9yWAEAAAAtdHKBEgAAWAsAAABzdW5hdS5FcnJvcnKCEgAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdW5hdS5odG1sI3N1bmF1LkVycm9yWAEAAAAtdHKDEgAAdVgNAAAAc3RkOmNtZG9wdGlvbnKEEgAAfXKFEgAAKFgMAAAAdHJhY2UuLS1oZWxwcoYSAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RyYWNlLmh0bWwjY21kb3B0aW9uLXRyYWNlLWhlbHBYAQAAAC10cocSAABYDAAAAHRyYWNlLi0tZmlsZXKIEgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90cmFjZS5odG1sI2NtZG9wdGlvbi10cmFjZS1mWAEAAAAtdHKJEgAAWAYAAAAtLWhlbHByihIAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL2NtZGxpbmUuaHRtbCNjbWRvcHRpb24taGVscFgBAAAALXRyixIAAFgOAAAAdHJhY2UuLS10aW1pbmdyjBIAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHJhY2UuaHRtbCNjbWRvcHRpb24tdHJhY2UtZ1gBAAAALXRyjRIAAFgPAAAAdGltZWl0Li0tcmVwZWF0co4SAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpbWVpdC5odG1sI2NtZG9wdGlvbi10aW1laXQtclgBAAAALXRyjxIAAFgnAAAAdW5pdHRlc3QtZGlzY292ZXIuLS10b3AtbGV2ZWwtZGlyZWN0b3J5cpASAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjY21kb3B0aW9uLXVuaXR0ZXN0LWRpc2NvdmVyLXRYAQAAAC10cpESAABYAgAAAC1jcpISAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy9jbWRsaW5lLmh0bWwjY21kb3B0aW9uLWNYAQAAAC10cpMSAABYCgAAAHppcGZpbGUuLXRylBIAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemlwZmlsZS5odG1sI2NtZG9wdGlvbi16aXBmaWxlLXRYAQAAAC10cpUSAABYCAAAAHRyYWNlLi10cpYSAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RyYWNlLmh0bWwjY21kb3B0aW9uLXRyYWNlLXRYAQAAAC10cpcSAABYEwAAAHVuaXR0ZXN0Li0tZmFpbGZhc3RymBIAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCNjbWRvcHRpb24tdW5pdHRlc3QtZlgBAAAALXRymRIAAFgKAAAAemlwZmlsZS4tZXKaEgAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96aXBmaWxlLmh0bWwjY21kb3B0aW9uLXppcGZpbGUtZVgBAAAALXRymxIAAFgKAAAAemlwZmlsZS4tY3KcEgAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96aXBmaWxlLmh0bWwjY21kb3B0aW9uLXppcGZpbGUtY1gBAAAALXRynRIAAFgSAAAAdHJhY2UuLS1pZ25vcmUtZGlycp4SAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RyYWNlLmh0bWwjY21kb3B0aW9uLXRyYWNlLWlnbm9yZS1kaXJYAQAAAC10cp8SAABYCgAAAHppcGZpbGUuLWxyoBIAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemlwZmlsZS5odG1sI2NtZG9wdGlvbi16aXBmaWxlLWxYAQAAAC10cqESAABYDwAAAHRyYWNlLi0tbWlzc2luZ3KiEgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90cmFjZS5odG1sI2NtZG9wdGlvbi10cmFjZS1tWAEAAAAtdHKjEgAAWBAAAAB0aW1laXQuLS12ZXJib3NlcqQSAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpbWVpdC5odG1sI2NtZG9wdGlvbi10aW1laXQtdlgBAAAALXRypRIAAFgNAAAAdHJhY2UuLS10cmFjZXKmEgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90cmFjZS5odG1sI2NtZG9wdGlvbi10cmFjZS10WAEAAAAtdHKnEgAAWBEAAAB1bml0dGVzdC4tLWJ1ZmZlcnKoEgAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI2NtZG9wdGlvbi11bml0dGVzdC1iWAEAAAAtdHKpEgAAWBsAAAB1bml0dGVzdC1kaXNjb3Zlci4tLXBhdHRlcm5yqhIAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCNjbWRvcHRpb24tdW5pdHRlc3QtZGlzY292ZXItcFgBAAAALXRyqxIAAFgCAAAALWJyrBIAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL2NtZGxpbmUuaHRtbCNjbWRvcHRpb24tYlgBAAAALXRyrRIAAFgLAAAAdW5pdHRlc3QuLWJyrhIAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCNjbWRvcHRpb24tdW5pdHRlc3QtYlgBAAAALXRyrxIAAFgLAAAAdW5pdHRlc3QuLWNysBIAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCNjbWRvcHRpb24tdW5pdHRlc3QtY1gBAAAALXRysRIAAFgLAAAAdW5pdHRlc3QuLWZyshIAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCNjbWRvcHRpb24tdW5pdHRlc3QtZlgBAAAALXRysxIAAFgVAAAAdHJhY2UuLS1pZ25vcmUtbW9kdWxlcrQSAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RyYWNlLmh0bWwjY21kb3B0aW9uLXRyYWNlLWlnbm9yZS1tb2R1bGVYAQAAAC10crUSAABYDQAAAHRpbWVpdC4tLXRpbWVythIAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGltZWl0Lmh0bWwjY21kb3B0aW9uLXRpbWVpdC10WAEAAAAtdHK3EgAAWAgAAAB0cmFjZS4tZ3K4EgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90cmFjZS5odG1sI2NtZG9wdGlvbi10cmFjZS1nWAEAAAAtdHK5EgAAWAkAAAB0aW1laXQuLWNyuhIAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGltZWl0Lmh0bWwjY21kb3B0aW9uLXRpbWVpdC1jWAEAAAAtdHK7EgAAWA8AAAB0cmFjZS4tLXZlcnNpb25yvBIAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHJhY2UuaHRtbCNjbWRvcHRpb24tdHJhY2UtdmVyc2lvblgBAAAALXRyvRIAAFgJAAAAdGltZWl0Li1ucr4SAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpbWVpdC5odG1sI2NtZG9wdGlvbi10aW1laXQtblgBAAAALXRyvxIAAFgJAAAAdGltZWl0Li1ocsASAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpbWVpdC5odG1sI2NtZG9wdGlvbi10aW1laXQtaFgBAAAALXRywRIAAFgJAAAAdGltZWl0Li12csISAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpbWVpdC5odG1sI2NtZG9wdGlvbi10aW1laXQtdlgBAAAALXRywxIAAFgJAAAAdGltZWl0Li10csQSAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpbWVpdC5odG1sI2NtZG9wdGlvbi10aW1laXQtdFgBAAAALXRyxRIAAFgJAAAAdGltZWl0Li1ycsYSAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpbWVpdC5odG1sI2NtZG9wdGlvbi10aW1laXQtclgBAAAALXRyxxIAAFgJAAAAdGltZWl0Li1zcsgSAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpbWVpdC5odG1sI2NtZG9wdGlvbi10aW1laXQtc1gBAAAALXRyyRIAAFgSAAAAdHJhY2UuLS10cmFja2NhbGxzcsoSAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RyYWNlLmh0bWwjY21kb3B0aW9uLXRyYWNlLXRyYWNrY2FsbHNYAQAAAC10cssSAABYDwAAAHRpbWVpdC4tLW51bWJlcnLMEgAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aW1laXQuaHRtbCNjbWRvcHRpb24tdGltZWl0LW5YAQAAAC10cs0SAABYEAAAAHRyYWNlLi0tY292ZXJkaXJyzhIAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHJhY2UuaHRtbCNjbWRvcHRpb24tdHJhY2UtY292ZXJkaXJYAQAAAC10cs8SAABYDQAAAHRyYWNlLi0tY291bnRy0BIAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHJhY2UuaHRtbCNjbWRvcHRpb24tdHJhY2UtY1gBAAAALXRy0RIAAFgIAAAAdHJhY2UuLXJy0hIAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHJhY2UuaHRtbCNjbWRvcHRpb24tdHJhY2UtclgBAAAALXRy0xIAAFgIAAAAdHJhY2UuLXNy1BIAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHJhY2UuaHRtbCNjbWRvcHRpb24tdHJhY2Utc1gBAAAALXRy1RIAAFgQAAAAc2l0ZS4tLXVzZXItYmFzZXLWEgAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaXRlLmh0bWwjY21kb3B0aW9uLXNpdGUtdXNlci1iYXNlWAEAAAAtdHLXEgAAWA8AAABjb21waWxlYWxsLmZpbGVy2BIAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29tcGlsZWFsbC5odG1sI2NtZG9wdGlvbi1jb21waWxlYWxsLWFyZy1maWxlWAEAAAAtdHLZEgAAWAIAAAAtRXLaEgAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvY21kbGluZS5odG1sI2NtZG9wdGlvbi1lWAEAAAAtdHLbEgAAWAgAAAB0cmFjZS4tbHLcEgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90cmFjZS5odG1sI2NtZG9wdGlvbi10cmFjZS1sWAEAAAAtdHLdEgAAWAgAAAB0cmFjZS4tbXLeEgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90cmFjZS5odG1sI2NtZG9wdGlvbi10cmFjZS1tWAEAAAAtdHLfEgAAWAgAAAB0cmFjZS4tY3LgEgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90cmFjZS5odG1sI2NtZG9wdGlvbi10cmFjZS1jWAEAAAAtdHLhEgAAWAgAAAB0cmFjZS4tZnLiEgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90cmFjZS5odG1sI2NtZG9wdGlvbi10cmFjZS1mWAEAAAAtdHLjEgAAWBsAAAB1bml0dGVzdC1kaXNjb3Zlci4tLXZlcmJvc2Vy5BIAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCNjbWRvcHRpb24tdW5pdHRlc3QtZGlzY292ZXItdlgBAAAALXRy5RIAAFgOAAAAdGltZWl0Li0tY2xvY2ty5hIAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGltZWl0Lmh0bWwjY21kb3B0aW9uLXRpbWVpdC1jWAEAAAAtdHLnEgAAWAgAAAB0cmFjZS4tUnLoEgAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90cmFjZS5odG1sI2NtZG9wdGlvbi10cmFjZS1uby1yZXBvcnRYAQAAAC10cukSAABYCAAAAHRyYWNlLi1UcuoSAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RyYWNlLmh0bWwjY21kb3B0aW9uLXRyYWNlLXRyYWNrY2FsbHNYAQAAAC10cusSAABYCAAAAHRyYWNlLi1DcuwSAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RyYWNlLmh0bWwjY21kb3B0aW9uLXRyYWNlLWNvdmVyZGlyWAEAAAAtdHLtEgAAWA0AAAB0aW1laXQuLS1oZWxwcu4SAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpbWVpdC5odG1sI2NtZG9wdGlvbi10aW1laXQtaFgBAAAALXRy7xIAAFgUAAAAY29tcGlsZWFsbC5kaXJlY3Rvcnly8BIAAChqaQEAAGpqAQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29tcGlsZWFsbC5odG1sI2NtZG9wdGlvbi1jb21waWxlYWxsLWFyZy1kaXJlY3RvcnlYAQAAAC10cvESAABYCQAAAC0tdmVyc2lvbnLyEgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvY21kbGluZS5odG1sI2NtZG9wdGlvbi12ZXJzaW9uWAEAAAAtdHLzEgAAWBAAAABzaXRlLi0tdXNlci1zaXRlcvQSAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NpdGUuaHRtbCNjbWRvcHRpb24tc2l0ZS11c2VyLXNpdGVYAQAAAC10cvUSAABYDgAAAHRyYWNlLi0tcmVwb3J0cvYSAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RyYWNlLmh0bWwjY21kb3B0aW9uLXRyYWNlLXJYAQAAAC10cvcSAABYDgAAAHRpbWVpdC4tLXNldHVwcvgSAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpbWVpdC5odG1sI2NtZG9wdGlvbi10aW1laXQtc1gBAAAALXRy+RIAAFgNAAAAY29tcGlsZWFsbC4tZnL6EgAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb21waWxlYWxsLmh0bWwjY21kb3B0aW9uLWNvbXBpbGVhbGwtZlgBAAAALXRy+xIAAFgCAAAALT9y/BIAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL2NtZGxpbmUuaHRtbCNjbWRvcHRpb25YAQAAAC10cv0SAABYAgAAAC1kcv4SAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy9jbWRsaW5lLmh0bWwjY21kb3B0aW9uLWRYAQAAAC10cv8SAABYDQAAAGNvbXBpbGVhbGwuLWxyABMAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29tcGlsZWFsbC5odG1sI2NtZG9wdGlvbi1jb21waWxlYWxsLWxYAQAAAC10cgETAABYAgAAAC0zcgITAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy9jbWRsaW5lLmh0bWwjY21kb3B0aW9uLTNYAQAAAC10cgMTAABYDQAAAGNvbXBpbGVhbGwuLWlyBBMAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29tcGlsZWFsbC5odG1sI2NtZG9wdGlvbi1jb21waWxlYWxsLWlYAQAAAC10cgUTAABYDQAAAGNvbXBpbGVhbGwuLXFyBhMAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29tcGlsZWFsbC5odG1sI2NtZG9wdGlvbi1jb21waWxlYWxsLXFYAQAAAC10cgcTAABYDQAAAGNvbXBpbGVhbGwuLXhyCBMAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29tcGlsZWFsbC5odG1sI2NtZG9wdGlvbi1jb21waWxlYWxsLXhYAQAAAC10cgkTAABYAgAAAC1YcgoTAAAoamkBAABqagEAAFgwAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy9jbWRsaW5lLmh0bWwjaWQ1WAEAAAAtdHILEwAAWA8AAAB0cmFjZS4tLXN1bW1hcnlyDBMAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHJhY2UuaHRtbCNjbWRvcHRpb24tdHJhY2Utc1gBAAAALXRyDRMAAFgQAAAAdW5pdHRlc3QuLS1jYXRjaHIOEwAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI2NtZG9wdGlvbi11bml0dGVzdC1jWAEAAAAtdHIPEwAAWAIAAAAtVXIQEwAAKGppAQAAamoBAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvY21kbGluZS5odG1sI2lkNFgBAAAALXRyERMAAFgCAAAALVdyEhMAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL2NtZGxpbmUuaHRtbCNjbWRvcHRpb24td1gBAAAALXRyExMAAFgCAAAALVZyFBMAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL2NtZGxpbmUuaHRtbCNjbWRvcHRpb24tdlgBAAAALXRyFRMAAFgCAAAALVFyFhMAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL2NtZGxpbmUuaHRtbCNjbWRvcHRpb24tcVgBAAAALXRyFxMAAFgNAAAAY29tcGlsZWFsbC4tZHIYEwAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb21waWxlYWxsLmh0bWwjY21kb3B0aW9uLWNvbXBpbGVhbGwtZFgBAAAALXRyGRMAAFgCAAAALVNyGhMAAChqaQEAAGpqAQAAWDAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL2NtZGxpbmUuaHRtbCNpZDJYAQAAAC10chsTAABYAgAAAC1SchwTAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy9jbWRsaW5lLmh0bWwjY21kb3B0aW9uLXJYAQAAAC10ch0TAABYIwAAAHVuaXR0ZXN0LWRpc2NvdmVyLi0tc3RhcnQtZGlyZWN0b3J5ch4TAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjY21kb3B0aW9uLXVuaXR0ZXN0LWRpc2NvdmVyLXNYAQAAAC10ch8TAABYAgAAAC1PciATAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy9jbWRsaW5lLmh0bWwjY21kb3B0aW9uLW9YAQAAAC10ciETAABYAgAAAC1KciITAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy9jbWRsaW5lLmh0bWwjY21kb3B0aW9uLWpYAQAAAC10ciMTAABYEQAAAHRyYWNlLi0tbm8tcmVwb3J0ciQTAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RyYWNlLmh0bWwjY21kb3B0aW9uLXRyYWNlLW5vLXJlcG9ydFgBAAAALXRyJRMAAFgRAAAAdHJhY2UuLS1saXN0ZnVuY3NyJhMAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHJhY2UuaHRtbCNjbWRvcHRpb24tdHJhY2UtbFgBAAAALXRyJxMAAFgCAAAALUJyKBMAAChqaQEAAGpqAQAAWDAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL2NtZGxpbmUuaHRtbCNpZDFYAQAAAC10cikTAABYAgAAAC14cioTAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy9jbWRsaW5lLmh0bWwjY21kb3B0aW9uLXhYAQAAAC10cisTAABYAgAAAC11ciwTAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy9jbWRsaW5lLmh0bWwjY21kb3B0aW9uLXVYAQAAAC10ci0TAABYAgAAAC10ci4TAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy9jbWRsaW5lLmh0bWwjY21kb3B0aW9uLXRYAQAAAC10ci8TAABYAgAAAC12cjATAAAoamkBAABqagEAAFgwAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy9jbWRsaW5lLmh0bWwjaWQzWAEAAAAtdHIxEwAAWAIAAAAtc3IyEwAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvY21kbGluZS5odG1sI2NtZG9wdGlvbi1zWAEAAAAtdHIzEwAAWAIAAAAtbXI0EwAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvY21kbGluZS5odG1sI2NtZG9wdGlvbi1tWAEAAAAtdHI1EwAAWAIAAAAtaXI2EwAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvY21kbGluZS5odG1sI2NtZG9wdGlvbi1pWAEAAAAtdHI3EwAAWAIAAAAtaHI4EwAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvY21kbGluZS5odG1sI2NtZG9wdGlvbi1oWAEAAAAtdHI5EwAAWBQAAAB1bml0dGVzdC1kaXNjb3Zlci4tdnI6EwAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI2NtZG9wdGlvbi11bml0dGVzdC1kaXNjb3Zlci12WAEAAAAtdHI7EwAAWBQAAAB1bml0dGVzdC1kaXNjb3Zlci4tdHI8EwAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI2NtZG9wdGlvbi11bml0dGVzdC1kaXNjb3Zlci10WAEAAAAtdHI9EwAAWBQAAAB1bml0dGVzdC1kaXNjb3Zlci4tc3I+EwAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI2NtZG9wdGlvbi11bml0dGVzdC1kaXNjb3Zlci1zWAEAAAAtdHI/EwAAWAMAAAAtT09yQBMAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL2NtZGxpbmUuaHRtbCNjbWRvcHRpb24tb29YAQAAAC10ckETAABYFAAAAHVuaXR0ZXN0LWRpc2NvdmVyLi1wckITAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjY21kb3B0aW9uLXVuaXR0ZXN0LWRpc2NvdmVyLXBYAQAAAC10ckMTAAB1WAsAAABweTpmdW5jdGlvbn1yRBMAAChYDwAAAHN1YnByb2Nlc3MuY2FsbHJFEwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5jYWxsWAEAAAAtdHJGEwAAWA0AAABjdXJzZXMuc2V0c3l4ckcTAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5zZXRzeXhYAQAAAC10ckgTAABYEQAAAG1zaWxpYi5hZGRfc3RyZWFtckkTAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5hZGRfc3RyZWFtWAEAAAAtdHJKEwAAWAwAAABvcGVyYXRvci5pbnZySxMAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5pbnZYAQAAAC10ckwTAABYEAAAAGN1cnNlcy5oYWxmZGVsYXlyTRMAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLmhhbGZkZWxheVgBAAAALXRyThMAAFgaAAAAeG1sLmV0cmVlLkVsZW1lbnRUcmVlLmR1bXByTxMAAChqaQEAAGpqAQAAWFcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLmR1bXBYAQAAAC10clATAABYDQAAAGN1cnNlcy5nZXR3aW5yURMAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLmdldHdpblgBAAAALXRyUhMAAFgPAAAAZG9jdGVzdC50ZXN0bW9kclMTAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LnRlc3Rtb2RYAQAAAC10clQTAABYDQAAAG9wZXJhdG9yLmFuZF9yVRMAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5hbmRfWAEAAAAtdHJWEwAAWBYAAABvcGVyYXRvci5pc01hcHBpbmdUeXBlclcTAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuaXNNYXBwaW5nVHlwZVgBAAAALXRyWBMAAFgRAAAAc29ja2V0LnNvY2tldHBhaXJyWRMAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LnNvY2tldHBhaXJYAQAAAC10cloTAABYCQAAAHV1LmRlY29kZXJbEwAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91dS5odG1sI3V1LmRlY29kZVgBAAAALXRyXBMAAFgQAAAAaXRlcnRvb2xzLmlzbGljZXJdEwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pdGVydG9vbHMuaHRtbCNpdGVydG9vbHMuaXNsaWNlWAEAAAAtdHJeEwAAWBAAAABhdWRpb29wLnVsYXcybGlucl8TAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2F1ZGlvb3AuaHRtbCNhdWRpb29wLnVsYXcybGluWAEAAAAtdHJgEwAAWA8AAABvcy5wYXRoLmlzbW91bnRyYRMAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MucGF0aC5odG1sI29zLnBhdGguaXNtb3VudFgBAAAALXRyYhMAAFgDAAAAcG93cmMTAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3Bvd1gBAAAALXRyZBMAAFgKAAAAbWF0aC5nYW1tYXJlEwAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5nYW1tYVgBAAAALXRyZhMAAFgNAAAAc3RydWN0LnVucGFja3JnEwAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJ1Y3QuaHRtbCNzdHJ1Y3QudW5wYWNrWAEAAAAtdHJoEwAAWBEAAABvcGVyYXRvci5fX2ltb2RfX3JpEwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9faW1vZF9fWAEAAAAtdHJqEwAAWAsAAABzaHV0aWwuY29weXJrEwAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaHV0aWwuaHRtbCNzaHV0aWwuY29weVgBAAAALXRybBMAAFgYAAAAZW1haWwudXRpbHMuZ2V0YWRkcmVzc2Vzcm0TAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLnV0aWxzLmh0bWwjZW1haWwudXRpbHMuZ2V0YWRkcmVzc2VzWAEAAAAtdHJuEwAAWA4AAABjdHlwZXMubWVtbW92ZXJvEwAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMubWVtbW92ZVgBAAAALXRycBMAAFgQAAAAb3BlcmF0b3IuaXJzaGlmdHJxEwAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLmlyc2hpZnRYAQAAAC10cnITAABYEAAAAGN0eXBlcy5zdHJpbmdfYXRycxMAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLnN0cmluZ19hdFgBAAAALXRydBMAAFgMAAAAc2h1dGlsLmNvcHkycnUTAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NodXRpbC5odG1sI3NodXRpbC5jb3B5MlgBAAAALXRydhMAAFgZAAAAbWltZXR5cGVzLnJlYWRfbWltZV90eXBlc3J3EwAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW1ldHlwZXMuaHRtbCNtaW1ldHlwZXMucmVhZF9taW1lX3R5cGVzWAEAAAAtdHJ4EwAAWBsAAAB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGVyeRMAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGVtcGZpbGUuaHRtbCN0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGVYAQAAAC10cnoTAABYDwAAAG9wZXJhdG9yLmludmVydHJ7EwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLmludmVydFgBAAAALXRyfBMAAFgPAAAAYmluYXNjaWkuYjJhX3V1cn0TAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JpbmFzY2lpLmh0bWwjYmluYXNjaWkuYjJhX3V1WAEAAAAtdHJ+EwAAWA0AAAB0ZXh0d3JhcC53cmFwcn8TAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RleHR3cmFwLmh0bWwjdGV4dHdyYXAud3JhcFgBAAAALXRygBMAAFgUAAAAbWltZXR5cGVzLmd1ZXNzX3R5cGVygRMAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWltZXR5cGVzLmh0bWwjbWltZXR5cGVzLmd1ZXNzX3R5cGVYAQAAAC10coITAABYEAAAAG9wZXJhdG9yLmlsc2hpZnRygxMAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5pbHNoaWZ0WAEAAAAtdHKEEwAAWAYAAABidWZmZXJyhRMAAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjYnVmZmVyWAEAAAAtdHKGEwAAWBIAAAB1cmxwYXJzZS5wYXJzZV9xc2xyhxMAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJscGFyc2UuaHRtbCN1cmxwYXJzZS5wYXJzZV9xc2xYAQAAAC10cogTAABYDQAAAGN0eXBlcy5tZW1zZXRyiRMAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLm1lbXNldFgBAAAALXRyihMAAFgLAAAAc3RyaW5nLmpvaW5yixMAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLmpvaW5YAQAAAC10cowTAABYEwAAAHRva2VuaXplLnVudG9rZW5pemVyjRMAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW5pemUuaHRtbCN0b2tlbml6ZS51bnRva2VuaXplWAEAAAAtdHKOEwAAWBAAAABvcGVyYXRvci50cnVlZGl2co8TAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IudHJ1ZWRpdlgBAAAALXRykBMAAFgTAAAAZnV0dXJlX2J1aWx0aW5zLmhleHKREwAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdXR1cmVfYnVpbHRpbnMuaHRtbCNmdXR1cmVfYnVpbHRpbnMuaGV4WAEAAAAtdHKSEwAAWBoAAABfd2lucmVnLlF1ZXJ5UmVmbGVjdGlvbktleXKTEwAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjX3dpbnJlZy5RdWVyeVJlZmxlY3Rpb25LZXlYAQAAAC10cpQTAABYFQAAAEVhc3lEaWFsb2dzLkFza1N0cmluZ3KVEwAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lYXN5ZGlhbG9ncy5odG1sI0Vhc3lEaWFsb2dzLkFza1N0cmluZ1gBAAAALXRylhMAAFgPAAAAc3RydWN0LmNhbGNzaXplcpcTAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cnVjdC5odG1sI3N0cnVjdC5jYWxjc2l6ZVgBAAAALXRymBMAAFgQAAAAb3MucGF0aC5yZWFscGF0aHKZEwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5wYXRoLmh0bWwjb3MucGF0aC5yZWFscGF0aFgBAAAALXRymhMAAFgUAAAAYWJjLmFic3RyYWN0cHJvcGVydHlymxMAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWJjLmh0bWwjYWJjLmFic3RyYWN0cHJvcGVydHlYAQAAAC10cpwTAABYDAAAAE1hY09TLm9wZW5yZnKdEwAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWNvcy5odG1sI01hY09TLm9wZW5yZlgBAAAALXRynhMAAFgaAAAAZW1haWwuaGVhZGVyLmRlY29kZV9oZWFkZXJynxMAAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwuaGVhZGVyLmh0bWwjZW1haWwuaGVhZGVyLmRlY29kZV9oZWFkZXJYAQAAAC10cqATAABYFAAAAGN1cnNlcy5hc2NpaS5pc3B1bmN0cqETAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5hc2NpaS5odG1sI2N1cnNlcy5hc2NpaS5pc3B1bmN0WAEAAAAtdHKiEwAAWA8AAABzaHV0aWwuY29weXRyZWVyoxMAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2h1dGlsLmh0bWwjc2h1dGlsLmNvcHl0cmVlWAEAAAAtdHKkEwAAWA8AAABwZGIucG9zdF9tb3J0ZW1ypRMAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGRiLmh0bWwjcGRiLnBvc3RfbW9ydGVtWAEAAAAtdHKmEwAAWAcAAABvcy53YWxrcqcTAAAoamkBAABqagEAAFgxAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3Mud2Fsa1gBAAAALXRyqBMAAFgQAAAAc3RydWN0LnBhY2tfaW50b3KpEwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJ1Y3QuaHRtbCNzdHJ1Y3QucGFja19pbnRvWAEAAAAtdHKqEwAAWBQAAABmcGVjdGwudHVybm9uX3NpZ2ZwZXKrEwAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcGVjdGwuaHRtbCNmcGVjdGwudHVybm9uX3NpZ2ZwZVgBAAAALXRyrBMAAFgFAAAAcHJpbnRyrRMAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjcHJpbnRYAQAAAC10cq4TAABYCQAAAG1hdGgudGFuaHKvEwAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC50YW5oWAEAAAAtdHKwEwAAWCsAAAB4bWwuZXRyZWUuRWxlbWVudFRyZWUuUHJvY2Vzc2luZ0luc3RydWN0aW9ucrETAAAoamkBAABqagEAAFhoAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb25YAQAAAC10crITAABYDwAAAHNodXRpbC5jb3B5c3RhdHKzEwAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaHV0aWwuaHRtbCNzaHV0aWwuY29weXN0YXRYAQAAAC10crQTAABYFgAAAGN0eXBlcy5EbGxDYW5VbmxvYWROb3dytRMAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLkRsbENhblVubG9hZE5vd1gBAAAALXRythMAAFgMAAAAc29ja2V0Lm50b2hscrcTAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5udG9obFgBAAAALXRyuBMAAFgMAAAAc29ja2V0Lm50b2hzcrkTAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5udG9oc1gBAAAALXRyuhMAAFgHAAAAaGFzYXR0cnK7EwAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNoYXNhdHRyWAEAAAAtdHK8EwAAWBkAAABiYXNlNjQuc3RhbmRhcmRfYjY0ZW5jb2Rlcr0TAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Jhc2U2NC5odG1sI2Jhc2U2NC5zdGFuZGFyZF9iNjRlbmNvZGVYAQAAAC10cr4TAABYBgAAAHJlLnN1YnK/EwAAKGppAQAAamoBAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sI3JlLnN1YlgBAAAALXRywBMAAFgVAAAAY2FsZW5kYXIuZmlyc3R3ZWVrZGF5csETAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhbGVuZGFyLmh0bWwjY2FsZW5kYXIuZmlyc3R3ZWVrZGF5WAEAAAAtdHLCEwAAWA8AAAB4bWxycGNsaWIubG9hZHNywxMAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1scnBjbGliLmh0bWwjeG1scnBjbGliLmxvYWRzWAEAAAAtdHLEEwAAWBYAAABsb2dnaW5nLnNldExvZ2dlckNsYXNzcsUTAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLnNldExvZ2dlckNsYXNzWAEAAAAtdHLGEwAAWAsAAAB0aW1lLm1rdGltZXLHEwAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aW1lLmh0bWwjdGltZS5ta3RpbWVYAQAAAC10csgTAABYDgAAAGhlYXBxLmhlYXBwdXNocskTAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2hlYXBxLmh0bWwjaGVhcHEuaGVhcHB1c2hYAQAAAC10csoTAABYEwAAAEVhc3lEaWFsb2dzLkdldEFyZ3ZyyxMAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZWFzeWRpYWxvZ3MuaHRtbCNFYXN5RGlhbG9ncy5HZXRBcmd2WAEAAAAtdHLMEwAAWAwAAABmbC5nZXRfbW91c2VyzRMAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmwuaHRtbCNmbC5nZXRfbW91c2VYAQAAAC10cs4TAABYDQAAAG9wZXJhdG9yLmlhbmRyzxMAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5pYW5kWAEAAAAtdHLQEwAAWAoAAABfX2ltcG9ydF9fctETAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI19faW1wb3J0X19YAQAAAC10ctITAABYEQAAAGljLm1hcHR5cGVjcmVhdG9yctMTAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ljLmh0bWwjaWMubWFwdHlwZWNyZWF0b3JYAQAAAC10ctQTAABYCAAAAGV4ZWNmaWxlctUTAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2V4ZWNmaWxlWAEAAAAtdHLWEwAAWBQAAAB0dXJ0bGUub25zY3JlZW5jbGlja3LXEwAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUub25zY3JlZW5jbGlja1gBAAAALXRy2BMAAFgbAAAAY3R5cGVzLmNyZWF0ZV9zdHJpbmdfYnVmZmVyctkTAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5jcmVhdGVfc3RyaW5nX2J1ZmZlclgBAAAALXRy2hMAAFgUAAAAdGhyZWFkLmFsbG9jYXRlX2xvY2ty2xMAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkLmh0bWwjdGhyZWFkLmFsbG9jYXRlX2xvY2tYAQAAAC10ctwTAABYLAAAAG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLmRlbGl2ZXJfY2hhbGxlbmdlct0TAAAoamkBAABqagEAAFhjAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLmRlbGl2ZXJfY2hhbGxlbmdlWAEAAAAtdHLeEwAAWB8AAABnZXR0ZXh0LmJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0ct8TAAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dldHRleHQuaHRtbCNnZXR0ZXh0LmJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0WAEAAAAtdHLgEwAAWBMAAABjb2xvcnN5cy5obHNfdG9fcmdicuETAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbG9yc3lzLmh0bWwjY29sb3JzeXMuaGxzX3RvX3JnYlgBAAAALXRy4hMAAFgaAAAAZGlzdHV0aWxzLnV0aWwuY2hhbmdlX3Jvb3Ry4xMAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMudXRpbC5jaGFuZ2Vfcm9vdFgBAAAALXRy5BMAAFgOAAAAY3Vyc2VzLmtleW5hbWVy5RMAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLmtleW5hbWVYAQAAAC10cuYTAABYEAAAAGN0eXBlcy5DRlVOQ1RZUEVy5xMAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLkNGVU5DVFlQRVgBAAAALXRy6BMAAFgKAAAAcmUuZmluZGFsbHLpEwAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sI3JlLmZpbmRhbGxYAQAAAC10cuoTAABYDgAAAHRhYm5hbm55LmNoZWNrcusTAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RhYm5hbm55Lmh0bWwjdGFibmFubnkuY2hlY2tYAQAAAC10cuwTAABYIQAAAGRpc3R1dGlscy5kZXBfdXRpbC5uZXdlcl9wYWlyd2lzZXLtEwAAKGppAQAAamoBAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5kZXBfdXRpbC5uZXdlcl9wYWlyd2lzZVgBAAAALXRy7hMAAFgZAAAAYXN0LmZpeF9taXNzaW5nX2xvY2F0aW9uc3LvEwAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hc3QuaHRtbCNhc3QuZml4X21pc3NpbmdfbG9jYXRpb25zWAEAAAAtdHLwEwAAWBkAAAB4bWwuc2F4LnNheHV0aWxzLnVuZXNjYXBlcvETAAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXgudXRpbHMuaHRtbCN4bWwuc2F4LnNheHV0aWxzLnVuZXNjYXBlWAEAAAAtdHLyEwAAWAwAAABzdGF0LlNfSU1PREVy8xMAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU19JTU9ERVgBAAAALXRy9BMAAFgPAAAAdHVydGxlLmVuZF9maWxscvUTAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5lbmRfZmlsbFgBAAAALXRy9hMAAFgLAAAAVGtpbnRlci5UY2xy9xMAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGtpbnRlci5odG1sI1RraW50ZXIuVGNsWAEAAAAtdHL4EwAAWBQAAAByZWFkbGluZS5hZGRfaGlzdG9yeXL5EwAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZWFkbGluZS5odG1sI3JlYWRsaW5lLmFkZF9oaXN0b3J5WAEAAAAtdHL6EwAAWAwAAABzeXMuc2V0dHJhY2Vy+xMAAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLnNldHRyYWNlWAEAAAAtdHL8EwAAWAwAAABpbWdmaWxlLnJlYWRy/RMAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1nZmlsZS5odG1sI2ltZ2ZpbGUucmVhZFgBAAAALXRy/hMAAFgLAAAAY3R5cGVzLmNhc3Ry/xMAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLmNhc3RYAQAAAC10cgAUAABYCQAAAG9zLnNldHNpZHIBFAAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLnNldHNpZFgBAAAALXRyAhQAAFgNAAAAbG9jYWxlLmZvcm1hdHIDFAAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUuZm9ybWF0WAEAAAAtdHIEFAAAWAoAAABpc3N1YmNsYXNzcgUUAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2lzc3ViY2xhc3NYAQAAAC10cgYUAABYDAAAAGltYWdlb3AuY3JvcHIHFAAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFnZW9wLmh0bWwjaW1hZ2VvcC5jcm9wWAEAAAAtdHIIFAAAWAwAAABzb2NrZXQuaHRvbnNyCRQAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0Lmh0b25zWAEAAAAtdHIKFAAAWA4AAABtc3ZjcnQudW5nZXRjaHILFAAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc3ZjcnQuaHRtbCNtc3ZjcnQudW5nZXRjaFgBAAAALXRyDBQAAFgRAAAAcHByaW50LmlzcmVhZGFibGVyDRQAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHByaW50Lmh0bWwjcHByaW50LmlzcmVhZGFibGVYAQAAAC10cg4UAABYDgAAAGNhbGVuZGFyLm1vbnRocg8UAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhbGVuZGFyLmh0bWwjY2FsZW5kYXIubW9udGhYAQAAAC10chAUAABYDwAAAHdlYmJyb3dzZXIub3BlbnIRFAAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93ZWJicm93c2VyLmh0bWwjd2ViYnJvd3Nlci5vcGVuWAEAAAAtdHISFAAAWBgAAABiYXNlNjQudXJsc2FmZV9iNjRlbmNvZGVyExQAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmFzZTY0Lmh0bWwjYmFzZTY0LnVybHNhZmVfYjY0ZW5jb2RlWAEAAAAtdHIUFAAAWBgAAABGcmFtZVdvcmsuc2V0YXJyb3djdXJzb3JyFRQAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnJhbWV3b3JrLmh0bWwjRnJhbWVXb3JrLnNldGFycm93Y3Vyc29yWAEAAAAtdHIWFAAAWBMAAABpbnNwZWN0LmlzdHJhY2ViYWNrchcUAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmlzdHJhY2ViYWNrWAEAAAAtdHIYFAAAWBYAAAByYW5kb20udm9ubWlzZXN2YXJpYXRlchkUAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JhbmRvbS5odG1sI3JhbmRvbS52b25taXNlc3ZhcmlhdGVYAQAAAC10choUAABYDAAAAHR1cnRsZS5zcGVlZHIbFAAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuc3BlZWRYAQAAAC10chwUAABYFAAAAGN1cnNlcy5hc2NpaS5pc2JsYW5rch0UAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5hc2NpaS5odG1sI2N1cnNlcy5hc2NpaS5pc2JsYW5rWAEAAAAtdHIeFAAAWBEAAABnZXR0ZXh0LmRuZ2V0dGV4dHIfFAAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZXR0ZXh0Lmh0bWwjZ2V0dGV4dC5kbmdldHRleHRYAQAAAC10ciAUAABYDgAAAEZyYW1lV29yay5NZW51ciEUAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZyYW1ld29yay5odG1sI0ZyYW1lV29yay5NZW51WAEAAAAtdHIiFAAAWAwAAABvcGVyYXRvci5hZGRyIxQAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5hZGRYAQAAAC10ciQUAABYCwAAAG9zLmdldGxvZ2luciUUAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuZ2V0bG9naW5YAQAAAC10ciYUAABYGwAAAHJlYWRsaW5lLmdldF9oaXN0b3J5X2xlbmd0aHInFAAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZWFkbGluZS5odG1sI3JlYWRsaW5lLmdldF9oaXN0b3J5X2xlbmd0aFgBAAAALXRyKBQAAFgNAAAAcmFuZG9tLnNhbXBsZXIpFAAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yYW5kb20uaHRtbCNyYW5kb20uc2FtcGxlWAEAAAAtdHIqFAAAWBAAAABtaW1ldG9vbHMuZW5jb2RlcisUAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbWV0b29scy5odG1sI21pbWV0b29scy5lbmNvZGVYAQAAAC10ciwUAABYHgAAAG11bHRpcHJvY2Vzc2luZy5zZXRfZXhlY3V0YWJsZXItFAAAKGppAQAAamoBAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3Npbmcuc2V0X2V4ZWN1dGFibGVYAQAAAC10ci4UAABYEwAAAGl0ZXJ0b29scy5kcm9wd2hpbGVyLxQAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaXRlcnRvb2xzLmh0bWwjaXRlcnRvb2xzLmRyb3B3aGlsZVgBAAAALXRyMBQAAFgUAAAAaW5zcGVjdC5nZXRjbGFzc3RyZWVyMRQAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QuZ2V0Y2xhc3N0cmVlWAEAAAAtdHIyFAAAWBUAAABpbnNwZWN0LmdldG1vZHVsZW5hbWVyMxQAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QuZ2V0bW9kdWxlbmFtZVgBAAAALXRyNBQAAFgJAAAAY21hdGguY29zcjUUAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NtYXRoLmh0bWwjY21hdGguY29zWAEAAAAtdHI2FAAAWBEAAABfd2lucmVnLkVudW1WYWx1ZXI3FAAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjX3dpbnJlZy5FbnVtVmFsdWVYAQAAAC10cjgUAABYEAAAAGNhbGVuZGFyLndlZWtkYXlyORQAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci53ZWVrZGF5WAEAAAAtdHI6FAAAWBkAAABjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VycjsUAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbnRleHRsaWIuaHRtbCNjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyWAEAAAAtdHI8FAAAWBIAAABweV9jb21waWxlLmNvbXBpbGVyPRQAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlfY29tcGlsZS5odG1sI3B5X2NvbXBpbGUuY29tcGlsZVgBAAAALXRyPhQAAFgeAAAAc2h1dGlsLnJlZ2lzdGVyX2FyY2hpdmVfZm9ybWF0cj8UAAAoamkBAABqagEAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NodXRpbC5odG1sI3NodXRpbC5yZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdFgBAAAALXRyQBQAAFgZAAAAZGlzdHV0aWxzLmRpcl91dGlsLm1rcGF0aHJBFAAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5kaXJfdXRpbC5ta3BhdGhYAQAAAC10ckIUAABYCwAAAG9zLnBhdGhjb25mckMUAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MucGF0aGNvbmZYAQAAAC10ckQUAABYCAAAAG9zLmNsb3NlckUUAAAoamkBAABqagEAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuY2xvc2VYAQAAAC10ckYUAABYBAAAAHZhcnNyRxQAAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjdmFyc1gBAAAALXRySBQAAFgIAAAAb3MuYWJvcnRySRQAAChqaQEAAGpqAQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5hYm9ydFgBAAAALXRyShQAAFgMAAAAc3RhdC5TX0lTQkxLcksUAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNfSVNCTEtYAQAAAC10ckwUAABYEQAAAGF1ZGlvb3AuYWRwY20ybGluck0UAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2F1ZGlvb3AuaHRtbCNhdWRpb29wLmFkcGNtMmxpblgBAAAALXRyThQAAFgeAAAAZG9jdGVzdC5ydW5fZG9jc3RyaW5nX2V4YW1wbGVzck8UAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LnJ1bl9kb2NzdHJpbmdfZXhhbXBsZXNYAQAAAC10clAUAABYDwAAAGN0eXBlcy5XaW5FcnJvcnJRFAAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuV2luRXJyb3JYAQAAAC10clIUAABYBwAAAGZtLmluaXRyUxQAAChqaQEAAGpqAQAAWDEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZm0uaHRtbCNmbS5pbml0WAEAAAAtdHJUFAAAWAoAAABjbWF0aC5zaW5oclUUAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NtYXRoLmh0bWwjY21hdGguc2luaFgBAAAALXRyVhQAAFgYAAAAd3NnaXJlZi51dGlsLnJlcXVlc3RfdXJpclcUAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLnV0aWwucmVxdWVzdF91cmlYAQAAAC10clgUAABYEgAAAGNvbW1hbmRzLmdldG91dHB1dHJZFAAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb21tYW5kcy5odG1sI2NvbW1hbmRzLmdldG91dHB1dFgBAAAALXRyWhQAAFgMAAAAY3R5cGVzLmJ5cmVmclsUAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5ieXJlZlgBAAAALXRyXBQAAFgPAAAAZm5tYXRjaC5mbm1hdGNocl0UAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZubWF0Y2guaHRtbCNmbm1hdGNoLmZubWF0Y2hYAQAAAC10cl4UAABYEAAAAGN1cnNlcy5ub3FpZmx1c2hyXxQAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLm5vcWlmbHVzaFgBAAAALXRyYBQAAFgdAAAAcmVhZGxpbmUuZ2V0X2NvbXBsZXRlcl9kZWxpbXNyYRQAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVhZGxpbmUuaHRtbCNyZWFkbGluZS5nZXRfY29tcGxldGVyX2RlbGltc1gBAAAALXRyYhQAAFgPAAAAbXNpbGliLmdlbl91dWlkcmMUAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5nZW5fdXVpZFgBAAAALXRyZBQAAFgYAAAAZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5ncmUUAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0b29scy5odG1sI2Z1bmN0b29scy50b3RhbF9vcmRlcmluZ1gBAAAALXRyZhQAAFgJAAAAb3MuYWNjZXNzcmcUAAAoamkBAABqagEAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuYWNjZXNzWAEAAAAtdHJoFAAAWBYAAABpdGVydG9vbHMucGVybXV0YXRpb25zcmkUAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2l0ZXJ0b29scy5odG1sI2l0ZXJ0b29scy5wZXJtdXRhdGlvbnNYAQAAAC10cmoUAABYDAAAAHR1cnRsZS5kZWxheXJrFAAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuZGVsYXlYAQAAAC10cmwUAABYIAAAAHRlc3Quc3VwcG9ydC5pc19yZXNvdXJjZV9lbmFibGVkcm0UAAAoamkBAABqagEAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuaXNfcmVzb3VyY2VfZW5hYmxlZFgBAAAALXRybhQAAFgJAAAAZ2RibS5vcGVucm8UAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dkYm0uaHRtbCNnZGJtLm9wZW5YAQAAAC10cnAUAABYDgAAAG9zLnBhdGguaXNmaWxlcnEUAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLnBhdGguaHRtbCNvcy5wYXRoLmlzZmlsZVgBAAAALXRychQAAFgQAAAAdHVydGxlLnNoYXBlc2l6ZXJzFAAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuc2hhcGVzaXplWAEAAAAtdHJ0FAAAWBUAAABvcGVyYXRvci5fX2dldHNsaWNlX19ydRQAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX2dldHNsaWNlX19YAQAAAC10cnYUAABYGwAAAGRpc3R1dGlscy51dGlsLnNwbGl0X3F1b3RlZHJ3FAAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy51dGlsLnNwbGl0X3F1b3RlZFgBAAAALXRyeBQAAFgPAAAAY3Vyc2VzLmRvdXBkYXRlcnkUAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5kb3VwZGF0ZVgBAAAALXRyehQAAFgNAAAAY3Vyc2VzLmVuZHdpbnJ7FAAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMuZW5kd2luWAEAAAAtdHJ8FAAAWA8AAABhdWRpb29wLmZpbmRtYXhyfRQAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXVkaW9vcC5odG1sI2F1ZGlvb3AuZmluZG1heFgBAAAALXRyfhQAAFgMAAAAb3Muc2V0cmVzZ2lkcn8UAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3Muc2V0cmVzZ2lkWAEAAAAtdHKAFAAAWB4AAAB4bWwuZXRyZWUuRWxlbWVudFRyZWUudG9zdHJpbmdygRQAAChqaQEAAGpqAQAAWFsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLnRvc3RyaW5nWAEAAAAtdHKCFAAAWBIAAAB0dXJ0bGUuZXhpdG9uY2xpY2tygxQAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmV4aXRvbmNsaWNrWAEAAAAtdHKEFAAAWBgAAABjdHlwZXMudXRpbC5maW5kX2xpYnJhcnlyhRQAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLnV0aWwuZmluZF9saWJyYXJ5WAEAAAAtdHKGFAAAWAwAAABvcGVyYXRvci5pb3JyhxQAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5pb3JYAQAAAC10cogUAABYCQAAAG1hdGguZmFic3KJFAAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5mYWJzWAEAAAAtdHKKFAAAWBAAAAB6bGliLmNvbXByZXNzb2JqcosUAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3psaWIuaHRtbCN6bGliLmNvbXByZXNzb2JqWAEAAAAtdHKMFAAAWAgAAABhc3Qud2Fsa3KNFAAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hc3QuaHRtbCNhc3Qud2Fsa1gBAAAALXRyjhQAAFgTAAAAbWFjb3N0b29scy5jb3B5dHJlZXKPFAAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWNvc3Rvb2xzLmh0bWwjbWFjb3N0b29scy5jb3B5dHJlZVgBAAAALXRykBQAAFgOAAAAanBlZy5zZXRvcHRpb25ykRQAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvanBlZy5odG1sI2pwZWcuc2V0b3B0aW9uWAEAAAAtdHKSFAAAWCIAAABtdWx0aXByb2Nlc3Npbmcuc2hhcmVkY3R5cGVzLlZhbHVlcpMUAAAoamkBAABqagEAAFhZAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMuVmFsdWVYAQAAAC10cpQUAABYFQAAAG9wZXJhdG9yLl9fZmxvb3JkaXZfX3KVFAAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9fZmxvb3JkaXZfX1gBAAAALXRylhQAAFgRAAAAaW5zcGVjdC5nZXRtb2R1bGVylxQAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QuZ2V0bW9kdWxlWAEAAAAtdHKYFAAAWA4AAABnYy5nZXRfb2JqZWN0c3KZFAAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nYy5odG1sI2djLmdldF9vYmplY3RzWAEAAAAtdHKaFAAAWBAAAABvcGVyYXRvci5fX2lvcl9fcpsUAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuX19pb3JfX1gBAAAALXRynBQAAFgMAAAAc3lzLmV4Y19pbmZvcp0UAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5leGNfaW5mb1gBAAAALXRynhQAAFgVAAAAY29kZWNzLnJlZ2lzdGVyX2Vycm9ycp8UAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5yZWdpc3Rlcl9lcnJvclgBAAAALXRyoBQAAFgIAAAAb3Mucm1kaXJyoRQAAChqaQEAAGpqAQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5ybWRpclgBAAAALXRyohQAAFgRAAAAc3RyaW5nLmpvaW5maWVsZHNyoxQAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLmpvaW5maWVsZHNYAQAAAC10cqQUAABYEQAAAG1zaWxpYi5VdWlkQ3JlYXRlcqUUAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5VdWlkQ3JlYXRlWAEAAAAtdHKmFAAAWCMAAABkaXN0dXRpbHMuY2NvbXBpbGVyLmdlbl9saWJfb3B0aW9uc3KnFAAAKGppAQAAamoBAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jY29tcGlsZXIuZ2VuX2xpYl9vcHRpb25zWAEAAAAtdHKoFAAAWBQAAABsaW5lY2FjaGUuY2xlYXJjYWNoZXKpFAAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9saW5lY2FjaGUuaHRtbCNsaW5lY2FjaGUuY2xlYXJjYWNoZVgBAAAALXRyqhQAAFgPAAAAYmluYXNjaWkuYTJiX3V1cqsUAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JpbmFzY2lpLmh0bWwjYmluYXNjaWkuYTJiX3V1WAEAAAAtdHKsFAAAWAsAAAB0aHJlYWQuZXhpdHKtFAAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWQuaHRtbCN0aHJlYWQuZXhpdFgBAAAALXRyrhQAAFgMAAAAY2dpLnBhcnNlX3Fzcq8UAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NnaS5odG1sI2NnaS5wYXJzZV9xc1gBAAAALXRysBQAAFgXAAAAd2ViYnJvd3Nlci5vcGVuX25ld190YWJysRQAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2ViYnJvd3Nlci5odG1sI3dlYmJyb3dzZXIub3Blbl9uZXdfdGFiWAEAAAAtdHKyFAAAWBEAAABjYWxlbmRhci5sZWFwZGF5c3KzFAAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLmxlYXBkYXlzWAEAAAAtdHK0FAAAWA0AAAB0aW1laXQudGltZWl0crUUAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpbWVpdC5odG1sI3RpbWVpdC50aW1laXRYAQAAAC10crYUAABYCgAAAG9zLmNoZmxhZ3NytxQAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5jaGZsYWdzWAEAAAAtdHK4FAAAWB4AAABtdWx0aXByb2Nlc3NpbmcuZnJlZXplX3N1cHBvcnRyuRQAAChqaQEAAGpqAQAAWFUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLmZyZWV6ZV9zdXBwb3J0WAEAAAAtdHK6FAAAWCgAAAB4bWwuZXRyZWUuRWxlbWVudFRyZWUucmVnaXN0ZXJfbmFtZXNwYWNlcrsUAAAoamkBAABqagEAAFhlAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5yZWdpc3Rlcl9uYW1lc3BhY2VYAQAAAC10crwUAABYFQAAAHRlc3Quc3VwcG9ydC5yZXF1aXJlc3K9FAAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LnJlcXVpcmVzWAEAAAAtdHK+FAAAWBgAAAB0b2tlbml6ZS5nZW5lcmF0ZV90b2tlbnNyvxQAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW5pemUuaHRtbCN0b2tlbml6ZS5nZW5lcmF0ZV90b2tlbnNYAQAAAC10csAUAABYGAAAAHRocmVhZGluZy5jdXJyZW50X3RocmVhZHLBFAAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuY3VycmVudF90aHJlYWRYAQAAAC10csIUAABYCQAAAG9zLnJlbW92ZXLDFAAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLnJlbW92ZVgBAAAALXRyxBQAAFgXAAAAd2FybmluZ3MuZmlsdGVyd2FybmluZ3NyxRQAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2FybmluZ3MuaHRtbCN3YXJuaW5ncy5maWx0ZXJ3YXJuaW5nc1gBAAAALXRyxhQAAFgMAAAAb3BlcmF0b3IucG9zcscUAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IucG9zWAEAAAAtdHLIFAAAWAkAAABvcy5wb3BlbjNyyRQAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5wb3BlbjNYAQAAAC10csoUAABYCQAAAG9zLnBvcGVuMnLLFAAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLnBvcGVuMlgBAAAALXRyzBQAAFgZAAAAZW1haWwuY2hhcnNldC5hZGRfY2hhcnNldHLNFAAAKGppAQAAamoBAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5jaGFyc2V0Lmh0bWwjZW1haWwuY2hhcnNldC5hZGRfY2hhcnNldFgBAAAALXRyzhQAAFgJAAAAb3MucG9wZW40cs8UAAAoamkBAABqagEAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MucG9wZW40WAEAAAAtdHLQFAAAWBgAAABzeXNjb25maWcuZ2V0X2NvbmZpZ192YXJy0RQAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzY29uZmlnLmh0bWwjc3lzY29uZmlnLmdldF9jb25maWdfdmFyWAEAAAAtdHLSFAAAWBMAAAB4bWwuc2F4LnBhcnNlU3RyaW5nctMUAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXguaHRtbCN4bWwuc2F4LnBhcnNlU3RyaW5nWAEAAAAtdHLUFAAAWBkAAABlbWFpbC51dGlscy5kZWNvZGVfcGFyYW1zctUUAAAoamkBAABqagEAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLnV0aWxzLmh0bWwjZW1haWwudXRpbHMuZGVjb2RlX3BhcmFtc1gBAAAALXRy1hQAAFgQAAAAZnVuY3Rvb2xzLnJlZHVjZXLXFAAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdG9vbHMuaHRtbCNmdW5jdG9vbHMucmVkdWNlWAEAAAAtdHLYFAAAWAwAAABjZ2l0Yi5lbmFibGVy2RQAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2dpdGIuaHRtbCNjZ2l0Yi5lbmFibGVYAQAAAC10ctoUAABYCwAAAHR1cnRsZS5kb3ductsUAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5kb3duWAEAAAAtdHLcFAAAWA0AAABpbXAuZ2V0X21hZ2ljct0UAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltcC5odG1sI2ltcC5nZXRfbWFnaWNYAQAAAC10ct4UAABYDgAAAG9zLldJRlNJR05BTEVEct8UAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuV0lGU0lHTkFMRURYAQAAAC10cuAUAABYDgAAAHBvc2l4ZmlsZS5vcGVucuEUAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Bvc2l4ZmlsZS5odG1sI3Bvc2l4ZmlsZS5vcGVuWAEAAAAtdHLiFAAAWA0AAAB0dXJ0bGUuZ2V0cGVucuMUAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5nZXRwZW5YAQAAAC10cuQUAABYGwAAAF93aW5yZWcuRW5hYmxlUmVmbGVjdGlvbktleXLlFAAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjX3dpbnJlZy5FbmFibGVSZWZsZWN0aW9uS2V5WAEAAAAtdHLmFAAAWAIAAABpZHLnFAAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNpZFgBAAAALXRy6BQAAFgJAAAAY3Vyc2VzLm5scukUAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5ubFgBAAAALXRy6hQAAFgLAAAAb3BlcmF0b3IuZXFy6xQAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5lcVgBAAAALXRy7BQAAFgMAAAAY3Vyc2VzLm5vcmF3cu0UAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5ub3Jhd1gBAAAALXRy7hQAAFgcAAAAd3NnaXJlZi51dGlsLnNoaWZ0X3BhdGhfaW5mb3LvFAAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi51dGlsLnNoaWZ0X3BhdGhfaW5mb1gBAAAALXRy8BQAAFgNAAAAZmwuc2hvd19pbnB1dHLxFAAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbC5odG1sI2ZsLnNob3dfaW5wdXRYAQAAAC10cvIUAABYEgAAAHBsYXRmb3JtLndpbjMyX3ZlcnLzFAAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wbGF0Zm9ybS5odG1sI3BsYXRmb3JtLndpbjMyX3ZlclgBAAAALXRy9BQAAFgKAAAAb3MudGVtcG5hbXL1FAAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLnRlbXBuYW1YAQAAAC10cvYUAABYCwAAAGRiaGFzaC5vcGVucvcUAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RiaGFzaC5odG1sI2RiaGFzaC5vcGVuWAEAAAAtdHL4FAAAWA0AAAB0dXJ0bGUuc2V0cG9zcvkUAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5zZXRwb3NYAQAAAC10cvoUAABYFAAAAGJpbmFzY2lpLnJsZWNvZGVfaHF4cvsUAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JpbmFzY2lpLmh0bWwjYmluYXNjaWkucmxlY29kZV9ocXhYAQAAAC10cvwUAABYCQAAAGdkYm0uc3luY3L9FAAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZGJtLmh0bWwjZ2RibS5zeW5jWAEAAAAtdHL+FAAAWA0AAABjb2RlY3MubG9va3Vwcv8UAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5sb29rdXBYAQAAAC10cgAVAABYEAAAAGN1cnNlcy50ZXJtYXR0cnNyARUAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLnRlcm1hdHRyc1gBAAAALXRyAhUAAFgZAAAAbWltaWZ5Lm1pbWVfZGVjb2RlX2hlYWRlcnIDFQAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW1pZnkuaHRtbCNtaW1pZnkubWltZV9kZWNvZGVfaGVhZGVyWAEAAAAtdHIEFQAAWAwAAABnYy5pc2VuYWJsZWRyBRUAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2MuaHRtbCNnYy5pc2VuYWJsZWRYAQAAAC10cgYVAABYDgAAAG9wZXJhdG9yLnRydXRocgcVAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IudHJ1dGhYAQAAAC10cggVAABYCAAAAHJlLnB1cmdlcgkVAAAoamkBAABqagEAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlLmh0bWwjcmUucHVyZ2VYAQAAAC10cgoVAABYCQAAAG1hdGguYXNpbnILFQAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5hc2luWAEAAAAtdHIMFQAAWA0AAABtc3ZjcnQuZ2V0d2Nocg0VAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zdmNydC5odG1sI21zdmNydC5nZXR3Y2hYAQAAAC10cg4VAABYEQAAAGF1ZGlvb3AuZ2V0c2FtcGxlcg8VAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2F1ZGlvb3AuaHRtbCNhdWRpb29wLmdldHNhbXBsZVgBAAAALXRyEBUAAFgTAAAAY3Vyc2VzLnBhaXJfY29udGVudHIRFQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMucGFpcl9jb250ZW50WAEAAAAtdHISFQAAWBIAAABmaWxlaW5wdXQuZmlsZW5hbWVyExUAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmlsZWlucHV0Lmh0bWwjZmlsZWlucHV0LmZpbGVuYW1lWAEAAAAtdHIUFQAAWAwAAAByZmM4MjIucXVvdGVyFRUAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmZjODIyLmh0bWwjcmZjODIyLnF1b3RlWAEAAAAtdHIWFQAAWBAAAAB0aHJlYWQuZ2V0X2lkZW50chcVAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZC5odG1sI3RocmVhZC5nZXRfaWRlbnRYAQAAAC10chgVAABYEgAAAHVybHBhcnNlLnVybGRlZnJhZ3IZFQAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxwYXJzZS5odG1sI3VybHBhcnNlLnVybGRlZnJhZ1gBAAAALXRyGhUAAFgTAAAAaW5zcGVjdC5nZXRjb21tZW50c3IbFQAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5nZXRjb21tZW50c1gBAAAALXRyHBUAAFgXAAAAdHJhY2ViYWNrLmV4dHJhY3Rfc3RhY2tyHRUAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHJhY2ViYWNrLmh0bWwjdHJhY2ViYWNrLmV4dHJhY3Rfc3RhY2tYAQAAAC10ch4VAABYDwAAAGltcC5sb2FkX3NvdXJjZXIfFQAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbXAuaHRtbCNpbXAubG9hZF9zb3VyY2VYAQAAAC10ciAVAABYDwAAAHR1cnRsZS5tYWlubG9vcHIhFQAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUubWFpbmxvb3BYAQAAAC10ciIVAABYCgAAAG9zLnR0eW5hbWVyIxUAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy50dHluYW1lWAEAAAAtdHIkFQAAWBAAAABpbXAucmVsZWFzZV9sb2NrciUVAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltcC5odG1sI2ltcC5yZWxlYXNlX2xvY2tYAQAAAC10ciYVAABYEAAAAG9zc2F1ZGlvZGV2Lm9wZW5yJxUAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3NzYXVkaW9kZXYuaHRtbCNvc3NhdWRpb2Rldi5vcGVuWAEAAAAtdHIoFQAAWA0AAABzZWxlY3Qua3F1ZXVlcikVAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NlbGVjdC5odG1sI3NlbGVjdC5rcXVldWVYAQAAAC10cioVAABYDAAAAHN0cmluZy5yZmluZHIrFQAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNzdHJpbmcucmZpbmRYAQAAAC10ciwVAABYDQAAAGltYWdlb3Auc2NhbGVyLRUAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hZ2VvcC5odG1sI2ltYWdlb3Auc2NhbGVYAQAAAC10ci4VAABYCgAAAG1hdGguaXNpbmZyLxUAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWF0aC5odG1sI21hdGguaXNpbmZYAQAAAC10cjAVAABYAwAAAGNocnIxFQAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNjaHJYAQAAAC10cjIVAABYCQAAAGVudW1lcmF0ZXIzFQAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNlbnVtZXJhdGVYAQAAAC10cjQVAABYBwAAAGdsb2JhbHNyNRUAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjZ2xvYmFsc1gBAAAALXRyNhUAAFgpAAAAZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfY29uZmlnX2hfZmlsZW5hbWVyNxUAAChqaQEAAGpqAQAAWFkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9jb25maWdfaF9maWxlbmFtZVgBAAAALXRyOBUAAFgWAAAAdXJsbGliMi5pbnN0YWxsX29wZW5lcnI5FQAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5pbnN0YWxsX29wZW5lclgBAAAALXRyOhUAAFgQAAAAdW5pY29kZWRhdGEubmFtZXI7FQAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bmljb2RlZGF0YS5odG1sI3VuaWNvZGVkYXRhLm5hbWVYAQAAAC10cjwVAABYCAAAAG9zLnVtYXNrcj0VAAAoamkBAABqagEAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MudW1hc2tYAQAAAC10cj4VAABYFwAAAHRocmVhZC5zdGFydF9uZXdfdGhyZWFkcj8VAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZC5odG1sI3RocmVhZC5zdGFydF9uZXdfdGhyZWFkWAEAAAAtdHJAFQAAWAgAAABtYXRoLmxvZ3JBFQAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5sb2dYAQAAAC10ckIVAABYDQAAAHF1b3ByaS5lbmNvZGVyQxUAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcXVvcHJpLmh0bWwjcXVvcHJpLmVuY29kZVgBAAAALXRyRBUAAFgWAAAAZW5jb2RpbmdzLmlkbmEuVG9BU0NJSXJFFQAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNlbmNvZGluZ3MuaWRuYS5Ub0FTQ0lJWAEAAAAtdHJGFQAAWBEAAAB0aHJlYWQuc3RhY2tfc2l6ZXJHFQAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWQuaHRtbCN0aHJlYWQuc3RhY2tfc2l6ZVgBAAAALXRySBUAAFgKAAAAdHVydGxlLmJ5ZXJJFQAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuYnllWAEAAAAtdHJKFQAAWCYAAABkaXN0dXRpbHMuc3lzY29uZmlnLmN1c3RvbWl6ZV9jb21waWxlcnJLFQAAKGppAQAAamoBAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5zeXNjb25maWcuY3VzdG9taXplX2NvbXBpbGVyWAEAAAAtdHJMFQAAWAoAAAB0dXJ0bGUuZG90ck0VAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5kb3RYAQAAAC10ck4VAABYEgAAAHJlc291cmNlLnNldHJsaW1pdHJPFQAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXNvdXJjZS5odG1sI3Jlc291cmNlLnNldHJsaW1pdFgBAAAALXRyUBUAAFgSAAAAY29udGV4dGxpYi5jbG9zaW5nclEVAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbnRleHRsaWIuaHRtbCNjb250ZXh0bGliLmNsb3NpbmdYAQAAAC10clIVAABYEQAAAHVybGxpYi5xdW90ZV9wbHVzclMVAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYi5odG1sI3VybGxpYi5xdW90ZV9wbHVzWAEAAAAtdHJUFQAAWAwAAABvcy5mcGF0aGNvbmZyVRUAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5mcGF0aGNvbmZYAQAAAC10clYVAABYCwAAAG9zLnN0cmVycm9yclcVAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3Muc3RyZXJyb3JYAQAAAC10clgVAABYIgAAAGVtYWlsLnV0aWxzLmNvbGxhcHNlX3JmYzIyMzFfdmFsdWVyWRUAAChqaQEAAGpqAQAAWFUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwudXRpbHMuaHRtbCNlbWFpbC51dGlscy5jb2xsYXBzZV9yZmMyMjMxX3ZhbHVlWAEAAAAtdHJaFQAAWBUAAABpbnNwZWN0LmdldHNvdXJjZWZpbGVyWxUAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QuZ2V0c291cmNlZmlsZVgBAAAALXRyXBUAAFgKAAAAb3MuZ2V0cGdycHJdFQAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLmdldHBncnBYAQAAAC10cl4VAABYEAAAAGJhc2U2NC5iMzJlbmNvZGVyXxUAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmFzZTY0Lmh0bWwjYmFzZTY0LmIzMmVuY29kZVgBAAAALXRyYBUAAFgYAAAAY29tbWFuZHMuZ2V0c3RhdHVzb3V0cHV0cmEVAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbW1hbmRzLmh0bWwjY29tbWFuZHMuZ2V0c3RhdHVzb3V0cHV0WAEAAAAtdHJiFQAAWA8AAABjdXJzZXMudGVybW5hbWVyYxUAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLnRlcm1uYW1lWAEAAAAtdHJkFQAAWAkAAABhc3QucGFyc2VyZRUAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXN0Lmh0bWwjYXN0LnBhcnNlWAEAAAAtdHJmFQAAWAoAAABvcy5tYWtlZGV2cmcVAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MubWFrZWRldlgBAAAALXRyaBUAAFgLAAAAYW55ZGJtLm9wZW5yaRUAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYW55ZGJtLmh0bWwjYW55ZGJtLm9wZW5YAQAAAC10cmoVAABYFwAAAEVhc3lEaWFsb2dzLlByb2dyZXNzQmFycmsVAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vhc3lkaWFsb2dzLmh0bWwjRWFzeURpYWxvZ3MuUHJvZ3Jlc3NCYXJYAQAAAC10cmwVAABYFAAAAGNvZGVjcy5zdHJpY3RfZXJyb3Jzcm0VAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5zdHJpY3RfZXJyb3JzWAEAAAAtdHJuFQAAWBEAAABzeW10YWJsZS5zeW10YWJsZXJvFQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeW10YWJsZS5odG1sI3N5bXRhYmxlLnN5bXRhYmxlWAEAAAAtdHJwFQAAWCYAAABlbWFpbC5pdGVyYXRvcnMudHlwZWRfc3VicGFydF9pdGVyYXRvcnJxFQAAKGppAQAAamoBAABYXQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5pdGVyYXRvcnMuaHRtbCNlbWFpbC5pdGVyYXRvcnMudHlwZWRfc3VicGFydF9pdGVyYXRvclgBAAAALXRychUAAFgTAAAAdXJsbGliLnVucXVvdGVfcGx1c3JzFQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIuaHRtbCN1cmxsaWIudW5xdW90ZV9wbHVzWAEAAAAtdHJ0FQAAWBMAAABxdW9wcmkuZGVjb2Rlc3RyaW5ncnUVAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3F1b3ByaS5odG1sI3F1b3ByaS5kZWNvZGVzdHJpbmdYAQAAAC10cnYVAABYEAAAAHR1cnRsZS5nZXRjYW52YXNydxUAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmdldGNhbnZhc1gBAAAALXRyeBUAAFgIAAAAb3Mud2FpdDRyeRUAAChqaQEAAGpqAQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy53YWl0NFgBAAAALXRyehUAAFgDAAAAYWJzcnsVAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2Fic1gBAAAALXRyfBUAAFgPAAAAY3Vyc2VzLmJhdWRyYXRlcn0VAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5iYXVkcmF0ZVgBAAAALXRyfhUAAFgHAAAAZGlzLmRpc3J/FQAAKGppAQAAamoBAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNkaXMuZGlzWAEAAAAtdHKAFQAAWAsAAAB0dXJ0bGUubGVmdHKBFQAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUubGVmdFgBAAAALXRyghUAAFgTAAAAb3BlcmF0b3IuX19yc2hpZnRfX3KDFQAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9fcnNoaWZ0X19YAQAAAC10coQVAABYCgAAAHV1aWQudXVpZDNyhRUAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXVpZC5odG1sI3V1aWQudXVpZDNYAQAAAC10coYVAABYCAAAAG1hdGgucG93cocVAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hdGguaHRtbCNtYXRoLnBvd1gBAAAALXRyiBUAAFgTAAAAY3Vyc2VzLmRlbGF5X291dHB1dHKJFQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMuZGVsYXlfb3V0cHV0WAEAAAAtdHKKFQAAWBQAAABjdXJzZXMuYXNjaWkuaXNncmFwaHKLFQAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuYXNjaWkuaHRtbCNjdXJzZXMuYXNjaWkuaXNncmFwaFgBAAAALXRyjBUAAFgbAAAAbW9kdWxlZmluZGVyLlJlcGxhY2VQYWNrYWdlco0VAAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21vZHVsZWZpbmRlci5odG1sI21vZHVsZWZpbmRlci5SZXBsYWNlUGFja2FnZVgBAAAALXRyjhUAAFgGAAAAeHJhbmdlco8VAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3hyYW5nZVgBAAAALXRykBUAAFgUAAAAY3Vyc2VzLmFzY2lpLmlzdXBwZXJykRUAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmFzY2lpLmh0bWwjY3Vyc2VzLmFzY2lpLmlzdXBwZXJYAQAAAC10cpIVAABYDAAAAGdldHRleHQuZmluZHKTFQAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZXR0ZXh0Lmh0bWwjZ2V0dGV4dC5maW5kWAEAAAAtdHKUFQAAWAwAAABwaWNrbGUuZHVtcHNylRUAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGlja2xlLmh0bWwjcGlja2xlLmR1bXBzWAEAAAAtdHKWFQAAWBQAAABjdXJzZXMuYXNjaWkuaXNhc2NpaXKXFQAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuYXNjaWkuaHRtbCNjdXJzZXMuYXNjaWkuaXNhc2NpaVgBAAAALXRymBUAAFgeAAAAZGlzdHV0aWxzLmRlcF91dGlsLm5ld2VyX2dyb3VwcpkVAAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmRlcF91dGlsLm5ld2VyX2dyb3VwWAEAAAAtdHKaFQAAWBQAAABhc3QuaW5jcmVtZW50X2xpbmVub3KbFQAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hc3QuaHRtbCNhc3QuaW5jcmVtZW50X2xpbmVub1gBAAAALXRynBUAAFgJAAAAZGlzLmRpc3Ricp0VAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI2Rpcy5kaXN0YlgBAAAALXRynhUAAFgSAAAAcHByaW50LmlzcmVjdXJzaXZlcp8VAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BwcmludC5odG1sI3BwcmludC5pc3JlY3Vyc2l2ZVgBAAAALXRyoBUAAFgXAAAAbG9nZ2luZy5jYXB0dXJlV2FybmluZ3NyoRUAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuY2FwdHVyZVdhcm5pbmdzWAEAAAAtdHKiFQAAWA0AAABNYWNPUy5TeXNCZWVwcqMVAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hY29zLmh0bWwjTWFjT1MuU3lzQmVlcFgBAAAALXRypBUAAFgSAAAAc2h1dGlsLmNvcHlmaWxlb2JqcqUVAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NodXRpbC5odG1sI3NodXRpbC5jb3B5ZmlsZW9ialgBAAAALXRyphUAAFgLAAAAdHVydGxlLnhjb3JypxUAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnhjb3JYAQAAAC10cqgVAABYEAAAAGNvZGVjcy5nZXR3cml0ZXJyqRUAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLmdldHdyaXRlclgBAAAALXRyqhUAAFgHAAAAb3Mub3BlbnKrFQAAKGppAQAAamoBAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLm9wZW5YAQAAAC10cqwVAABYBgAAAGZsLnRpZXKtFQAAKGppAQAAamoBAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbC5odG1sI2ZsLnRpZVgBAAAALXRyrhUAAFgcAAAAZGlzdHV0aWxzLnV0aWwucmZjODIyX2VzY2FwZXKvFQAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy51dGlsLnJmYzgyMl9lc2NhcGVYAQAAAC10crAVAABYEQAAAGN1cnNlcy5pbml0X2NvbG9ycrEVAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5pbml0X2NvbG9yWAEAAAAtdHKyFQAAWA8AAABpbnNwZWN0LmlzZnJhbWVysxUAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QuaXNmcmFtZVgBAAAALXRytBUAAFgMAAAAZmlsZV9jcmVhdGVkcrUVAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYnVpbHRkaXN0Lmh0bWwjZmlsZV9jcmVhdGVkWAEAAAAtdHK2FQAAWBMAAABpbnNwZWN0LmlzZ2VuZXJhdG9ycrcVAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmlzZ2VuZXJhdG9yWAEAAAAtdHK4FQAAWAwAAABzdHJpbmcudXBwZXJyuRUAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLnVwcGVyWAEAAAAtdHK6FQAAWAwAAABvcGVyYXRvci5vcl9yuxUAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5vcl9YAQAAAC10crwVAABYCAAAAGhtYWMubmV3cr0VAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2htYWMuaHRtbCNobWFjLm5ld1gBAAAALXRyvhUAAFgeAAAAZGlzdHV0aWxzLmRpcl91dGlsLmNyZWF0ZV90cmVlcr8VAAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmRpcl91dGlsLmNyZWF0ZV90cmVlWAEAAAAtdHLAFQAAWBYAAABjb2Rlb3AuY29tcGlsZV9jb21tYW5kcsEVAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVvcC5odG1sI2NvZGVvcC5jb21waWxlX2NvbW1hbmRYAQAAAC10csIVAABYEgAAAGN1cnNlcy5yZXNpemVfdGVybXLDFQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMucmVzaXplX3Rlcm1YAQAAAC10csQVAABYCwAAAGNtYXRoLmxvZzEwcsUVAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NtYXRoLmh0bWwjY21hdGgubG9nMTBYAQAAAC10csYVAABYDAAAAHVybGxpYi5xdW90ZXLHFQAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIuaHRtbCN1cmxsaWIucXVvdGVYAQAAAC10csgVAABYEwAAAGltYWdlb3AuZGl0aGVyMm1vbm9yyRUAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hZ2VvcC5odG1sI2ltYWdlb3AuZGl0aGVyMm1vbm9YAQAAAC10csoVAABYCgAAAG9zLnN5c2NvbmZyyxUAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5zeXNjb25mWAEAAAAtdHLMFQAAWCQAAAB4bWwuZXRyZWUuRWxlbWVudFRyZWUuZnJvbXN0cmluZ2xpc3RyzRUAAChqaQEAAGpqAQAAWGEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLmZyb21zdHJpbmdsaXN0WAEAAAAtdHLOFQAAWA0AAABzdHJpbmcucnNwbGl0cs8VAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZy5odG1sI3N0cmluZy5yc3BsaXRYAQAAAC10ctAVAABYDgAAAGN1cnNlcy53cmFwcGVyctEVAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53cmFwcGVyWAEAAAAtdHLSFQAAWBMAAABzaHV0aWwubWFrZV9hcmNoaXZlctMVAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NodXRpbC5odG1sI3NodXRpbC5tYWtlX2FyY2hpdmVYAQAAAC10ctQVAABYEAAAAG9zLnBhdGguZ2V0Y3RpbWVy1RUAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MucGF0aC5odG1sI29zLnBhdGguZ2V0Y3RpbWVYAQAAAC10ctYVAABYCAAAAG9zLm1rZGlyctcVAAAoamkBAABqagEAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MubWtkaXJYAQAAAC10ctgVAABYEwAAAHRyYWNlYmFjay50Yl9saW5lbm9y2RUAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHJhY2ViYWNrLmh0bWwjdHJhY2ViYWNrLnRiX2xpbmVub1gBAAAALXRy2hUAAFgNAAAAY3R5cGVzLnNpemVvZnLbFQAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuc2l6ZW9mWAEAAAAtdHLcFQAAWAoAAABvcy5leGVjbHBlct0VAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuZXhlY2xwZVgBAAAALXRy3hUAAFgSAAAAcmFuZG9tLmJldGF2YXJpYXRlct8VAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JhbmRvbS5odG1sI3JhbmRvbS5iZXRhdmFyaWF0ZVgBAAAALXRy4BUAAFgQAAAAY2dpLnBhcnNlX2hlYWRlcnLhFQAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jZ2kuaHRtbCNjZ2kucGFyc2VfaGVhZGVyWAEAAAAtdHLiFQAAWBAAAAB0dXJ0bGUudGlsdGFuZ2xlcuMVAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS50aWx0YW5nbGVYAQAAAC10cuQVAABYEQAAAF93aW5yZWcuRGVsZXRlS2V5cuUVAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLkRlbGV0ZUtleVgBAAAALXRy5hUAAFgMAAAAbmV3LmNsYXNzb2JqcucVAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L25ldy5odG1sI25ldy5jbGFzc29ialgBAAAALXRy6BUAAFgTAAAAZnV0dXJlX2J1aWx0aW5zLm9jdHLpFQAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdXR1cmVfYnVpbHRpbnMuaHRtbCNmdXR1cmVfYnVpbHRpbnMub2N0WAEAAAAtdHLqFQAAWBMAAABjdXJzZXMuYXNjaWkuaXNtZXRhcusVAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5hc2NpaS5odG1sI2N1cnNlcy5hc2NpaS5pc21ldGFYAQAAAC10cuwVAABYDwAAAGl0ZXJ0b29scy5jb3VudHLtFQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pdGVydG9vbHMuaHRtbCNpdGVydG9vbHMuY291bnRYAQAAAC10cu4VAABYFwAAAHRhYm5hbm55LnByb2Nlc3NfdG9rZW5zcu8VAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RhYm5hbm55Lmh0bWwjdGFibmFubnkucHJvY2Vzc190b2tlbnNYAQAAAC10cvAVAABYEQAAAGdldG9wdC5nbnVfZ2V0b3B0cvEVAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dldG9wdC5odG1sI2dldG9wdC5nbnVfZ2V0b3B0WAEAAAAtdHLyFQAAWBMAAAByZWFkbGluZS5nZXRfYmVnaWR4cvMVAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlYWRsaW5lLmh0bWwjcmVhZGxpbmUuZ2V0X2JlZ2lkeFgBAAAALXRy9BUAAFgSAAAAaW5zcGVjdC5pc2Fic3RyYWN0cvUVAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmlzYWJzdHJhY3RYAQAAAC10cvYVAABYDwAAAG9zLldJRkNPTlRJTlVFRHL3FQAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLldJRkNPTlRJTlVFRFgBAAAALXRy+BUAAFgTAAAAY2FsZW5kYXIud2Vla2hlYWRlcnL5FQAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLndlZWtoZWFkZXJYAQAAAC10cvoVAABYEwAAAG9wZXJhdG9yLl9fY29uY2F0X19y+xUAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX2NvbmNhdF9fWAEAAAAtdHL8FQAAWB0AAAB4bWwucGFyc2Vycy5leHBhdC5FcnJvclN0cmluZ3L9FQAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQuRXJyb3JTdHJpbmdYAQAAAC10cv4VAABYEAAAAHBhcnNlci5jb21waWxlc3Ry/xUAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGFyc2VyLmh0bWwjcGFyc2VyLmNvbXBpbGVzdFgBAAAALXRyABYAAFgUAAAAY3Vyc2VzLmFzY2lpLmlzbG93ZXJyARYAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmFzY2lpLmh0bWwjY3Vyc2VzLmFzY2lpLmlzbG93ZXJYAQAAAC10cgIWAABYDQAAAG9zLnBhdGguaXNhYnNyAxYAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MucGF0aC5odG1sI29zLnBhdGguaXNhYnNYAQAAAC10cgQWAABYIQAAAHhtbC5kb20ucmVnaXN0ZXJET01JbXBsZW1lbnRhdGlvbnIFFgAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5yZWdpc3RlckRPTUltcGxlbWVudGF0aW9uWAEAAAAtdHIGFgAAWA4AAABzeXMuc2V0dHNjZHVtcHIHFgAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNzeXMuc2V0dHNjZHVtcFgBAAAALXRyCBYAAFgRAAAAZnVuY3Rvb2xzLnBhcnRpYWxyCRYAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rvb2xzLmh0bWwjZnVuY3Rvb2xzLnBhcnRpYWxYAQAAAC10cgoWAABYCgAAAG9zLmV4ZWN2cGVyCxYAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5leGVjdnBlWAEAAAAtdHIMFgAAWBIAAABzeXMuc2V0ZGxvcGVuZmxhZ3NyDRYAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLnNldGRsb3BlbmZsYWdzWAEAAAAtdHIOFgAAWBQAAABsaW5lY2FjaGUuY2hlY2tjYWNoZXIPFgAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9saW5lY2FjaGUuaHRtbCNsaW5lY2FjaGUuY2hlY2tjYWNoZVgBAAAALXRyEBYAAFgRAAAAZ2V0dGV4dC5sbmdldHRleHRyERYAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2V0dGV4dC5odG1sI2dldHRleHQubG5nZXR0ZXh0WAEAAAAtdHISFgAAWBkAAAB4bWwuZXRyZWUuRWxlbWVudFRyZWUuWE1MchMWAAAoamkBAABqagEAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5YTUxYAQAAAC10chQWAABYHwAAAGNvZGVjcy54bWxjaGFycmVmcmVwbGFjZV9lcnJvcnNyFRYAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLnhtbGNoYXJyZWZyZXBsYWNlX2Vycm9yc1gBAAAALXRyFhYAAFgKAAAAbWF0aC5hY29zaHIXFgAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5hY29zaFgBAAAALXRyGBYAAFgLAAAAdHVydGxlLnNldGhyGRYAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnNldGhYAQAAAC10choWAABYFAAAAGN1cnNlcy5jb2xvcl9jb250ZW50chsWAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5jb2xvcl9jb250ZW50WAEAAAAtdHIcFgAAWBUAAABtaW1ldG9vbHMuY29weWxpdGVyYWxyHRYAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWltZXRvb2xzLmh0bWwjbWltZXRvb2xzLmNvcHlsaXRlcmFsWAEAAAAtdHIeFgAAWAoAAABvcy5vcGVucHR5ch8WAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3Mub3BlbnB0eVgBAAAALXRyIBYAAFgZAAAAcmVhZGxpbmUuc2V0X3N0YXJ0dXBfaG9va3IhFgAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZWFkbGluZS5odG1sI3JlYWRsaW5lLnNldF9zdGFydHVwX2hvb2tYAQAAAC10ciIWAABYCQAAAHR1cnRsZS5sdHIjFgAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUubHRYAQAAAC10ciQWAABYEQAAAHVybHBhcnNlLnVybHNwbGl0ciUWAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybHBhcnNlLmh0bWwjdXJscGFyc2UudXJsc3BsaXRYAQAAAC10ciYWAABYFQAAAHRyYWNlYmFjay5mb3JtYXRfbGlzdHInFgAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90cmFjZWJhY2suaHRtbCN0cmFjZWJhY2suZm9ybWF0X2xpc3RYAQAAAC10cigWAABYEAAAAG9wZXJhdG9yLl9fcG93X19yKRYAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX3Bvd19fWAEAAAAtdHIqFgAAWB0AAABkaXN0dXRpbHMuZmlsZV91dGlsLm1vdmVfZmlsZXIrFgAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5maWxlX3V0aWwubW92ZV9maWxlWAEAAAAtdHIsFgAAWBMAAABfd2lucmVnLkRlbGV0ZVZhbHVlci0WAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLkRlbGV0ZVZhbHVlWAEAAAAtdHIuFgAAWBMAAABvcGVyYXRvci5fX2xzaGlmdF9fci8WAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuX19sc2hpZnRfX1gBAAAALXRyMBYAAFgJAAAAY21hdGguc2lucjEWAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NtYXRoLmh0bWwjY21hdGguc2luWAEAAAAtdHIyFgAAWA8AAABmaWxlaW5wdXQuY2xvc2VyMxYAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmlsZWlucHV0Lmh0bWwjZmlsZWlucHV0LmNsb3NlWAEAAAAtdHI0FgAAWAoAAABjdXJzZXMucmF3cjUWAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5yYXdYAQAAAC10cjYWAABYEgAAAGJpbmFzY2lpLnVuaGV4bGlmeXI3FgAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iaW5hc2NpaS5odG1sI2JpbmFzY2lpLnVuaGV4bGlmeVgBAAAALXRyOBYAAFgQAAAAb3BlcmF0b3IuX19wb3NfX3I5FgAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9fcG9zX19YAQAAAC10cjoWAABYEAAAAGdldHRleHQubmdldHRleHRyOxYAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2V0dGV4dC5odG1sI2dldHRleHQubmdldHRleHRYAQAAAC10cjwWAABYEAAAAHRva2VuLklTVEVSTUlOQUxyPRYAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5JU1RFUk1JTkFMWAEAAAAtdHI+FgAAWAoAAABnbC5lbmRwaWNrcj8WAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dsLmh0bWwjZ2wuZW5kcGlja1gBAAAALXRyQBYAAFgUAAAAdW5pY29kZWRhdGEubWlycm9yZWRyQRYAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pY29kZWRhdGEuaHRtbCN1bmljb2RlZGF0YS5taXJyb3JlZFgBAAAALXRyQhYAAFgFAAAAcm91bmRyQxYAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjcm91bmRYAQAAAC10ckQWAABYCwAAAHN0cnVjdC5wYWNrckUWAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cnVjdC5odG1sI3N0cnVjdC5wYWNrWAEAAAAtdHJGFgAAWAkAAABtYXRoLmVyZmNyRxYAAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWF0aC5odG1sI21hdGguZXJmY1gBAAAALXRySBYAAFgLAAAAb3Muc2V0cmVnaWRySRYAAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5zZXRyZWdpZFgBAAAALXRyShYAAFgQAAAAYmluYXNjaWkuYTJiX2hxeHJLFgAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iaW5hc2NpaS5odG1sI2JpbmFzY2lpLmEyYl9ocXhYAQAAAC10ckwWAABYEQAAAGNzdi5saXN0X2RpYWxlY3Rzck0WAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nzdi5odG1sI2Nzdi5saXN0X2RpYWxlY3RzWAEAAAAtdHJOFgAAWBEAAAB1cmxwYXJzZS5wYXJzZV9xc3JPFgAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxwYXJzZS5odG1sI3VybHBhcnNlLnBhcnNlX3FzWAEAAAAtdHJQFgAAWA0AAABvcy5yZW1vdmVkaXJzclEWAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MucmVtb3ZlZGlyc1gBAAAALXRyUhYAAFgdAAAAcGxpc3RsaWIud3JpdGVQbGlzdFRvUmVzb3VyY2VyUxYAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGxpc3RsaWIuaHRtbCNwbGlzdGxpYi53cml0ZVBsaXN0VG9SZXNvdXJjZVgBAAAALXRyVBYAAFgUAAAAY3Vyc2VzLm1vdXNlaW50ZXJ2YWxyVRYAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLm1vdXNlaW50ZXJ2YWxYAQAAAC10clYWAABYCAAAAGZtLnByc3RyclcWAAAoamkBAABqagEAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZtLmh0bWwjZm0ucHJzdHJYAQAAAC10clgWAABYFAAAAHBrZ3V0aWwuZ2V0X2ltcG9ydGVyclkWAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BrZ3V0aWwuaHRtbCNwa2d1dGlsLmdldF9pbXBvcnRlclgBAAAALXRyWhYAAFgMAAAAZ3JwLmdldGdyZ2lkclsWAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dycC5odG1sI2dycC5nZXRncmdpZFgBAAAALXRyXBYAAFgLAAAAYWVwYWNrLnBhY2tyXRYAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWVwYWNrLmh0bWwjYWVwYWNrLnBhY2tYAQAAAC10cl4WAABYFQAAAHhtbC5kb20ubWluaWRvbS5wYXJzZXJfFgAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLm1pbmlkb20uaHRtbCN4bWwuZG9tLm1pbmlkb20ucGFyc2VYAQAAAC10cmAWAABYGAAAAHN5c2NvbmZpZy5wYXJzZV9jb25maWdfaHJhFgAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXNjb25maWcuaHRtbCNzeXNjb25maWcucGFyc2VfY29uZmlnX2hYAQAAAC10cmIWAABYEwAAAG9wZXJhdG9yLmlzQ2FsbGFibGVyYxYAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5pc0NhbGxhYmxlWAEAAAAtdHJkFgAAWAsAAABmY250bC5mY250bHJlFgAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mY250bC5odG1sI2ZjbnRsLmZjbnRsWAEAAAAtdHJmFgAAWAkAAABvcy5sY2htb2RyZxYAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5sY2htb2RYAQAAAC10cmgWAABYCgAAAGdjLmRpc2FibGVyaRYAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2MuaHRtbCNnYy5kaXNhYmxlWAEAAAAtdHJqFgAAWBsAAAByZWFkbGluZS53cml0ZV9oaXN0b3J5X2ZpbGVyaxYAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVhZGxpbmUuaHRtbCNyZWFkbGluZS53cml0ZV9oaXN0b3J5X2ZpbGVYAQAAAC10cmwWAABYHgAAAHNzbC5faHR0cHNfdmVyaWZ5X2NlcnRpZmljYXRlc3JtFgAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuX2h0dHBzX3ZlcmlmeV9jZXJ0aWZpY2F0ZXNYAQAAAC10cm4WAABYHQAAAGVtYWlsLmVuY29kZXJzLmVuY29kZV83b3I4Yml0cm8WAAAoamkBAABqagEAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLmVuY29kZXJzLmh0bWwjZW1haWwuZW5jb2RlcnMuZW5jb2RlXzdvcjhiaXRYAQAAAC10cnAWAABYDQAAAG9wZXJhdG9yLmltb2RycRYAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5pbW9kWAEAAAAtdHJyFgAAWBIAAAB0cmFjZWJhY2sucHJpbnRfdGJycxYAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHJhY2ViYWNrLmh0bWwjdHJhY2ViYWNrLnByaW50X3RiWAEAAAAtdHJ0FgAAWBkAAABiYXNlNjQuc3RhbmRhcmRfYjY0ZGVjb2RlcnUWAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Jhc2U2NC5odG1sI2Jhc2U2NC5zdGFuZGFyZF9iNjRkZWNvZGVYAQAAAC10cnYWAABYDgAAAGhlYXBxLm5sYXJnZXN0cncWAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2hlYXBxLmh0bWwjaGVhcHEubmxhcmdlc3RYAQAAAC10cngWAABYEgAAAG1pbWV0eXBlcy5hZGRfdHlwZXJ5FgAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW1ldHlwZXMuaHRtbCNtaW1ldHlwZXMuYWRkX3R5cGVYAQAAAC10cnoWAABYBAAAAGl0ZXJyexYAAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjaXRlclgBAAAALXRyfBYAAFgZAAAAbWltZXR5cGVzLmd1ZXNzX2V4dGVuc2lvbnJ9FgAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW1ldHlwZXMuaHRtbCNtaW1ldHlwZXMuZ3Vlc3NfZXh0ZW5zaW9uWAEAAAAtdHJ+FgAAWAkAAAB1dS5lbmNvZGVyfxYAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXUuaHRtbCN1dS5lbmNvZGVYAQAAAC10coAWAABYFwAAAHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0coEWAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLmNoZWNrX291dHB1dFgBAAAALXRyghYAAFgNAAAAdGltZWl0LnJlcGVhdHKDFgAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aW1laXQuaHRtbCN0aW1laXQucmVwZWF0WAEAAAAtdHKEFgAAWBMAAABxdW9wcmkuZW5jb2Rlc3RyaW5ncoUWAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3F1b3ByaS5odG1sI3F1b3ByaS5lbmNvZGVzdHJpbmdYAQAAAC10coYWAABYDwAAAGNkLmNyZWF0ZXBhcnNlcnKHFgAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jZC5odG1sI2NkLmNyZWF0ZXBhcnNlclgBAAAALXRyiBYAAFgJAAAAb3MuZ2V0Z2lkcokWAAAoamkBAABqagEAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuZ2V0Z2lkWAEAAAAtdHKKFgAAWBEAAABlbnN1cmVwaXAudmVyc2lvbnKLFgAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbnN1cmVwaXAuaHRtbCNlbnN1cmVwaXAudmVyc2lvblgBAAAALXRyjBYAAFgVAAAAZmwuc2hvd19maWxlX3NlbGVjdG9yco0WAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZsLmh0bWwjZmwuc2hvd19maWxlX3NlbGVjdG9yWAEAAAAtdHKOFgAAWBUAAABsb2NhbGUuYmluZHRleHRkb21haW5yjxYAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLmJpbmR0ZXh0ZG9tYWluWAEAAAAtdHKQFgAAWBAAAABvcGVyYXRvci5fX211bF9fcpEWAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuX19tdWxfX1gBAAAALXRykhYAAFgTAAAAaG1hYy5jb21wYXJlX2RpZ2VzdHKTFgAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9obWFjLmh0bWwjaG1hYy5jb21wYXJlX2RpZ2VzdFgBAAAALXRylBYAAFgQAAAAY3Vyc2VzLmluaXRfcGFpcnKVFgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMuaW5pdF9wYWlyWAEAAAAtdHKWFgAAWBgAAABzcWxpdGUzLnJlZ2lzdGVyX2FkYXB0ZXJylxYAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMucmVnaXN0ZXJfYWRhcHRlclgBAAAALXRymBYAAFgTAAAAZnV0dXJlX2J1aWx0aW5zLnppcHKZFgAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdXR1cmVfYnVpbHRpbnMuaHRtbCNmdXR1cmVfYnVpbHRpbnMuemlwWAEAAAAtdHKaFgAAWAsAAABjbWF0aC5waGFzZXKbFgAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jbWF0aC5odG1sI2NtYXRoLnBoYXNlWAEAAAAtdHKcFgAAWA0AAAByYW5kb20ud2hzZWVkcp0WAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JhbmRvbS5odG1sI3JhbmRvbS53aHNlZWRYAQAAAC10cp4WAABYCwAAAHN0cmluZy5hdG9mcp8WAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZy5odG1sI3N0cmluZy5hdG9mWAEAAAAtdHKgFgAAWBoAAABlbWFpbC51dGlscy5lbmNvZGVfcmZjMjIzMXKhFgAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC51dGlscy5odG1sI2VtYWlsLnV0aWxzLmVuY29kZV9yZmMyMjMxWAEAAAAtdHKiFgAAWBEAAABoZWFwcS5oZWFwcHVzaHBvcHKjFgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9oZWFwcS5odG1sI2hlYXBxLmhlYXBwdXNocG9wWAEAAAAtdHKkFgAAWBUAAAB0ZXN0LnN1cHBvcnQuZmluZGZpbGVypRYAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5maW5kZmlsZVgBAAAALXRyphYAAFgLAAAAc3RyaW5nLmF0b2xypxYAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLmF0b2xYAQAAAC10cqgWAABYGAAAAHNzbC5ERVJfY2VydF90b19QRU1fY2VydHKpFgAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuREVSX2NlcnRfdG9fUEVNX2NlcnRYAQAAAC10cqoWAABYCgAAAG9zLmdldGV1aWRyqxYAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5nZXRldWlkWAEAAAAtdHKsFgAAWA0AAABjdXJzZXMuY2JyZWFrcq0WAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5jYnJlYWtYAQAAAC10cq4WAABYGgAAAHNxbGl0ZTMuY29tcGxldGVfc3RhdGVtZW50cq8WAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLmNvbXBsZXRlX3N0YXRlbWVudFgBAAAALXRysBYAAFgOAAAAb3MucGF0aC5pc2xpbmtysRYAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MucGF0aC5odG1sI29zLnBhdGguaXNsaW5rWAEAAAAtdHKyFgAAWAsAAABjbWF0aC5hY29zaHKzFgAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jbWF0aC5odG1sI2NtYXRoLmFjb3NoWAEAAAAtdHK0FgAAWBAAAABnYy5nZXRfcmVmZXJlbnRzcrUWAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2djLmh0bWwjZ2MuZ2V0X3JlZmVyZW50c1gBAAAALXRythYAAFgSAAAAdHVydGxlLmNsZWFyc2NyZWVucrcWAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5jbGVhcnNjcmVlblgBAAAALXRyuBYAAFgaAAAARWFzeURpYWxvZ3MuQXNrRmlsZUZvclNhdmVyuRYAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZWFzeWRpYWxvZ3MuaHRtbCNFYXN5RGlhbG9ncy5Bc2tGaWxlRm9yU2F2ZVgBAAAALXRyuhYAAFgSAAAAaW1nZmlsZS5yZWFkc2NhbGVkcrsWAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltZ2ZpbGUuaHRtbCNpbWdmaWxlLnJlYWRzY2FsZWRYAQAAAC10crwWAABYDgAAAGluc3BlY3QuZ2V0bXJvcr0WAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmdldG1yb1gBAAAALXRyvhYAAFgHAAAAZ2wucGlja3K/FgAAKGppAQAAamoBAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nbC5odG1sI2dsLnBpY2tYAQAAAC10csAWAABYDgAAAG1zdmNydC5sb2NraW5ncsEWAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zdmNydC5odG1sI21zdmNydC5sb2NraW5nWAEAAAAtdHLCFgAAWBUAAABvcGVyYXRvci5fX2l0cnVlZGl2X19ywxYAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX2l0cnVlZGl2X19YAQAAAC10csQWAABYEgAAAGRvY3Rlc3QudGVzdHNvdXJjZXLFFgAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC50ZXN0c291cmNlWAEAAAAtdHLGFgAAWBAAAABjdXJzZXMudHlwZWFoZWFkcscWAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy50eXBlYWhlYWRYAQAAAC10csgWAABYFAAAAHRyYWNlYmFjay5mb3JtYXRfZXhjcskWAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RyYWNlYmFjay5odG1sI3RyYWNlYmFjay5mb3JtYXRfZXhjWAEAAAAtdHLKFgAAWA8AAABjdXJzZXMuaXNlbmR3aW5yyxYAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLmlzZW5kd2luWAEAAAAtdHLMFgAAWB4AAABtaW1ldHlwZXMuZ3Vlc3NfYWxsX2V4dGVuc2lvbnNyzRYAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWltZXR5cGVzLmh0bWwjbWltZXR5cGVzLmd1ZXNzX2FsbF9leHRlbnNpb25zWAEAAAAtdHLOFgAAWBEAAAB0dXJ0bGUucmVzaXplbW9kZXLPFgAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUucmVzaXplbW9kZVgBAAAALXRy0BYAAFgOAAAAaW1hcGxpYi5JbnQyQVBy0RYAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSW50MkFQWAEAAAAtdHLSFgAAWBEAAAB0b2tlbml6ZS50b2tlbml6ZXLTFgAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90b2tlbml6ZS5odG1sI3Rva2VuaXplLnRva2VuaXplWAEAAAAtdHLUFgAAWAwAAABzdHJpbmcuemZpbGxy1RYAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLnpmaWxsWAEAAAAtdHLWFgAAWA8AAABqcGVnLmRlY29tcHJlc3Ny1xYAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvanBlZy5odG1sI2pwZWcuZGVjb21wcmVzc1gBAAAALXRy2BYAAFgRAAAAb3BlcmF0b3IuX19pYWRkX19y2RYAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX2lhZGRfX1gBAAAALXRy2hYAAFgVAAAAY3R5cGVzLmdldF9sYXN0X2Vycm9yctsWAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5nZXRfbGFzdF9lcnJvclgBAAAALXRy3BYAAFgNAAAAd2luc291bmQuQmVlcHLdFgAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93aW5zb3VuZC5odG1sI3dpbnNvdW5kLkJlZXBYAQAAAC10ct4WAABYDAAAAHN0cmluZy5zcGxpdHLfFgAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNzdHJpbmcuc3BsaXRYAQAAAC10cuAWAABYFAAAAG9wZXJhdG9yLl9faXJlcGVhdF9fcuEWAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuX19pcmVwZWF0X19YAQAAAC10cuIWAABYDwAAAHBsYXRmb3JtLnN5c3RlbXLjFgAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wbGF0Zm9ybS5odG1sI3BsYXRmb3JtLnN5c3RlbVgBAAAALXRy5BYAAFgPAAAAaW5zcGVjdC5nZXRmaWxlcuUWAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmdldGZpbGVYAQAAAC10cuYWAABYEAAAAGl0ZXJ0b29scy5yZXBlYXRy5xYAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaXRlcnRvb2xzLmh0bWwjaXRlcnRvb2xzLnJlcGVhdFgBAAAALXRy6BYAAFgSAAAAemlwZmlsZS5pc196aXBmaWxlcukWAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLmlzX3ppcGZpbGVYAQAAAC10cuoWAABYDAAAAG9wZXJhdG9yLm11bHLrFgAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLm11bFgBAAAALXRy7BYAAFgMAAAAb3BlcmF0b3IuaXNfcu0WAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuaXNfWAEAAAAtdHLuFgAAWAwAAABzdHJpbmcuc3RyaXBy7xYAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLnN0cmlwWAEAAAAtdHLwFgAAWAsAAABzZWxlY3QucG9sbHLxFgAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZWxlY3QuaHRtbCNzZWxlY3QucG9sbFgBAAAALXRy8hYAAFgRAAAAdHVydGxlLnNjcmVlbnNpemVy8xYAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnNjcmVlbnNpemVYAQAAAC10cvQWAABYEAAAAHR1cnRsZS5pc3Zpc2libGVy9RYAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmlzdmlzaWJsZVgBAAAALXRy9hYAAFgRAAAAb3BlcmF0b3IuX19pbXVsX19y9xYAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX2ltdWxfX1gBAAAALXRy+BYAAFgYAAAAZW1haWwuaGVhZGVyLm1ha2VfaGVhZGVycvkWAAAoamkBAABqagEAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLmhlYWRlci5odG1sI2VtYWlsLmhlYWRlci5tYWtlX2hlYWRlclgBAAAALXRy+hYAAFgMAAAAYXVkaW9vcC5iaWFzcvsWAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2F1ZGlvb3AuaHRtbCNhdWRpb29wLmJpYXNYAQAAAC10cvwWAABYJAAAAGRpc3R1dGlscy5zeXNjb25maWcuc2V0X3B5dGhvbl9idWlsZHL9FgAAKGppAQAAamoBAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5zeXNjb25maWcuc2V0X3B5dGhvbl9idWlsZFgBAAAALXRy/hYAAFgOAAAAYXVkaW9vcC5taW5tYXhy/xYAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXVkaW9vcC5odG1sI2F1ZGlvb3AubWlubWF4WAEAAAAtdHIAFwAAWBQAAABjb2RlY3MuaWdub3JlX2Vycm9yc3IBFwAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuaWdub3JlX2Vycm9yc1gBAAAALXRyAhcAAFgRAAAAYXVkaW9vcC5saW4yYWRwY21yAxcAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXVkaW9vcC5odG1sI2F1ZGlvb3AubGluMmFkcGNtWAEAAAAtdHIEFwAAWA8AAABvcGVyYXRvci5pc19ub3RyBRcAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5pc19ub3RYAQAAAC10cgYXAABYCwAAAHNoZWx2ZS5vcGVucgcXAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NoZWx2ZS5odG1sI3NoZWx2ZS5vcGVuWAEAAAAtdHIIFwAAWBcAAAB1bml0dGVzdC5pbnN0YWxsSGFuZGxlcnIJFwAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0Lmluc3RhbGxIYW5kbGVyWAEAAAAtdHIKFwAAWBoAAABzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dHILFwAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dFgBAAAALXRyDBcAAFgbAAAAdGVzdC5zdXBwb3J0LmNoZWNrX3dhcm5pbmdzcg0XAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuY2hlY2tfd2FybmluZ3NYAQAAAC10cg4XAABYCwAAAGNtYXRoLmlzaW5mcg8XAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NtYXRoLmh0bWwjY21hdGguaXNpbmZYAQAAAC10chAXAABYEwAAAHRlc3Quc3VwcG9ydC5mb3JnZXRyERcAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5mb3JnZXRYAQAAAC10chIXAABYFAAAAHJhbmRvbS5wYXJldG92YXJpYXRlchMXAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JhbmRvbS5odG1sI3JhbmRvbS5wYXJldG92YXJpYXRlWAEAAAAtdHIUFwAAWBAAAABkaXJjYWNoZS5vcGVuZGlychUXAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RpcmNhY2hlLmh0bWwjZGlyY2FjaGUub3BlbmRpclgBAAAALXRyFhcAAFgNAAAAaW1wLmlzX2Zyb3plbnIXFwAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbXAuaHRtbCNpbXAuaXNfZnJvemVuWAEAAAAtdHIYFwAAWBwAAABkaXN0dXRpbHMudXRpbC5jaGVja19lbnZpcm9uchkXAAAoamkBAABqagEAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLnV0aWwuY2hlY2tfZW52aXJvblgBAAAALXRyGhcAAFgLAAAAdG9rZW4uSVNFT0ZyGxcAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5JU0VPRlgBAAAALXRyHBcAAFgTAAAAZW5zdXJlcGlwLmJvb3RzdHJhcHIdFwAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbnN1cmVwaXAuaHRtbCNlbnN1cmVwaXAuYm9vdHN0cmFwWAEAAAAtdHIeFwAAWAYAAABvcy5kdXByHxcAAChqaQEAAGpqAQAAWDAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5kdXBYAQAAAC10ciAXAABYIAAAAGRpc3R1dGlscy5jY29tcGlsZXIubmV3X2NvbXBpbGVyciEXAAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNjb21waWxlci5uZXdfY29tcGlsZXJYAQAAAC10ciIXAABYCwAAAGF1ZGlvb3AubWF4ciMXAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2F1ZGlvb3AuaHRtbCNhdWRpb29wLm1heFgBAAAALXRyJBcAAFgUAAAAb3BlcmF0b3IuX19zZXRpdGVtX19yJRcAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX3NldGl0ZW1fX1gBAAAALXRyJhcAAFgOAAAAdHVydGxlLmZvcndhcmRyJxcAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmZvcndhcmRYAQAAAC10cigXAABYDwAAAEJhc3Rpb24uQmFzdGlvbnIpFwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXN0aW9uLmh0bWwjQmFzdGlvbi5CYXN0aW9uWAEAAAAtdHIqFwAAWBoAAABFYXN5RGlhbG9ncy5Bc2tGaWxlRm9yT3BlbnIrFwAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lYXN5ZGlhbG9ncy5odG1sI0Vhc3lEaWFsb2dzLkFza0ZpbGVGb3JPcGVuWAEAAAAtdHIsFwAAWBUAAAB1bmljb2RlZGF0YS5ub3JtYWxpemVyLRcAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pY29kZWRhdGEuaHRtbCN1bmljb2RlZGF0YS5ub3JtYWxpemVYAQAAAC10ci4XAABYDwAAAG1hY29zdG9vbHMuY29weXIvFwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWNvc3Rvb2xzLmh0bWwjbWFjb3N0b29scy5jb3B5WAEAAAAtdHIwFwAAWB0AAAByZWFkbGluZS5yZXBsYWNlX2hpc3RvcnlfaXRlbXIxFwAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZWFkbGluZS5odG1sI3JlYWRsaW5lLnJlcGxhY2VfaGlzdG9yeV9pdGVtWAEAAAAtdHIyFwAAWBcAAABFYXN5RGlhbG9ncy5Bc2tQYXNzd29yZHIzFwAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lYXN5ZGlhbG9ncy5odG1sI0Vhc3lEaWFsb2dzLkFza1Bhc3N3b3JkWAEAAAAtdHI0FwAAWA4AAABNYWNPUy5HZXRUaWNrc3I1FwAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWNvcy5odG1sI01hY09TLkdldFRpY2tzWAEAAAAtdHI2FwAAWBUAAABjdHlwZXMuc2V0X2xhc3RfZXJyb3JyNxcAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLnNldF9sYXN0X2Vycm9yWAEAAAAtdHI4FwAAWBIAAABkaXMuZmluZGxpbmVzdGFydHNyORcAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjZGlzLmZpbmRsaW5lc3RhcnRzWAEAAAAtdHI6FwAAWA4AAAB1cmxsaWIudW5xdW90ZXI7FwAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIuaHRtbCN1cmxsaWIudW5xdW90ZVgBAAAALXRyPBcAAFgQAAAARnJhbWVXb3JrLldpbmRvd3I9FwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcmFtZXdvcmsuaHRtbCNGcmFtZVdvcmsuV2luZG93WAEAAAAtdHI+FwAAWAsAAAB0dXJ0bGUudW5kb3I/FwAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUudW5kb1gBAAAALXRyQBcAAFgaAAAAd3NnaXJlZi52YWxpZGF0ZS52YWxpZGF0b3JyQRcAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd3NnaXJlZi5odG1sI3dzZ2lyZWYudmFsaWRhdGUudmFsaWRhdG9yWAEAAAAtdHJCFwAAWAwAAABvcy5zZXRncm91cHNyQxcAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5zZXRncm91cHNYAQAAAC10ckQXAABYEAAAAGJhc2U2NC5iNjRlbmNvZGVyRRcAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmFzZTY0Lmh0bWwjYmFzZTY0LmI2NGVuY29kZVgBAAAALXRyRhcAAFgJAAAAZ2xvYi5nbG9ickcXAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dsb2IuaHRtbCNnbG9iLmdsb2JYAQAAAC10ckgXAABYFQAAAHR1cnRsZS5yZWdpc3Rlcl9zaGFwZXJJFwAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUucmVnaXN0ZXJfc2hhcGVYAQAAAC10ckoXAABYEgAAAGJpc2VjdC5iaXNlY3RfbGVmdHJLFwAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iaXNlY3QuaHRtbCNiaXNlY3QuYmlzZWN0X2xlZnRYAQAAAC10ckwXAABYCQAAAG1hdGguY2VpbHJNFwAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5jZWlsWAEAAAAtdHJOFwAAWBEAAABpbWFnZW9wLm1vbm8yZ3JleXJPFwAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFnZW9wLmh0bWwjaW1hZ2VvcC5tb25vMmdyZXlYAQAAAC10clAXAABYEgAAAG9wZXJhdG9yLl9faW5kZXhfX3JRFwAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9faW5kZXhfX1gBAAAALXRyUhcAAFgPAAAAY2FsZW5kYXIuaXNsZWFwclMXAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhbGVuZGFyLmh0bWwjY2FsZW5kYXIuaXNsZWFwWAEAAAAtdHJUFwAAWA8AAABhc3QuaXRlcl9maWVsZHNyVRcAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXN0Lmh0bWwjYXN0Lml0ZXJfZmllbGRzWAEAAAAtdHJWFwAAWBYAAAB3YXJuaW5ncy5mb3JtYXR3YXJuaW5nclcXAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dhcm5pbmdzLmh0bWwjd2FybmluZ3MuZm9ybWF0d2FybmluZ1gBAAAALXRyWBcAAFgPAAAAc2h1dGlsLmNvcHlmaWxlclkXAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NodXRpbC5odG1sI3NodXRpbC5jb3B5ZmlsZVgBAAAALXRyWhcAAFgdAAAAdGVtcGZpbGUuU3Bvb2xlZFRlbXBvcmFyeUZpbGVyWxcAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGVtcGZpbGUuaHRtbCN0ZW1wZmlsZS5TcG9vbGVkVGVtcG9yYXJ5RmlsZVgBAAAALXRyXBcAAFgSAAAAcGlja2xldG9vbHMuZ2Vub3Bzcl0XAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BpY2tsZXRvb2xzLmh0bWwjcGlja2xldG9vbHMuZ2Vub3BzWAEAAAAtdHJeFwAAWCIAAABkaXN0dXRpbHMuY2NvbXBpbGVyLnNob3dfY29tcGlsZXJzcl8XAAAoamkBAABqagEAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNjb21waWxlci5zaG93X2NvbXBpbGVyc1gBAAAALXRyYBcAAFgUAAAAQ29sb3JQaWNrZXIuR2V0Q29sb3JyYRcAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sb3JwaWNrZXIuaHRtbCNDb2xvclBpY2tlci5HZXRDb2xvclgBAAAALXRyYhcAAFgIAAAAbmV3LmNvZGVyYxcAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbmV3Lmh0bWwjbmV3LmNvZGVYAQAAAC10cmQXAABYEAAAAGF1ZGlvb3AubGluMmFsYXdyZRcAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXVkaW9vcC5odG1sI2F1ZGlvb3AubGluMmFsYXdYAQAAAC10cmYXAABYEAAAAGN1cnNlcy5lcmFzZWNoYXJyZxcAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLmVyYXNlY2hhclgBAAAALXRyaBcAAFgIAAAAbmlzLm1hcHNyaRcAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbmlzLmh0bWwjbmlzLm1hcHNYAQAAAC10cmoXAABYCwAAAGN1cnNlcy5wdXRwcmsXAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5wdXRwWAEAAAAtdHJsFwAAWBIAAABjU3RyaW5nSU8uU3RyaW5nSU9ybRcAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5naW8uaHRtbCNjU3RyaW5nSU8uU3RyaW5nSU9YAQAAAC10cm4XAABYKwAAAG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLmFuc3dlcl9jaGFsbGVuZ2VybxcAAChqaQEAAGpqAQAAWGIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24uYW5zd2VyX2NoYWxsZW5nZVgBAAAALXRycBcAAFgIAAAAb3MuZnN0YXRycRcAAChqaQEAAGpqAQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5mc3RhdFgBAAAALXRychcAAFgjAAAAd3NnaXJlZi51dGlsLnNldHVwX3Rlc3RpbmdfZGVmYXVsdHNycxcAAChqaQEAAGpqAQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd3NnaXJlZi5odG1sI3dzZ2lyZWYudXRpbC5zZXR1cF90ZXN0aW5nX2RlZmF1bHRzWAEAAAAtdHJ0FwAAWAwAAABuZXcuZnVuY3Rpb25ydRcAAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbmV3Lmh0bWwjbmV3LmZ1bmN0aW9uWAEAAAAtdHJ2FwAAWBoAAAB3c2dpcmVmLnV0aWwuaXNfaG9wX2J5X2hvcHJ3FwAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi51dGlsLmlzX2hvcF9ieV9ob3BYAQAAAC10cngXAABYNAAAAG11bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMubXVsdGlwcm9jZXNzaW5nLk1hbmFnZXJyeRcAAChqaQEAAGpqAQAAWGsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLnNoYXJlZGN0eXBlcy5tdWx0aXByb2Nlc3NpbmcuTWFuYWdlclgBAAAALXRyehcAAFgHAAAAb3MubmljZXJ7FwAAKGppAQAAamoBAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLm5pY2VYAQAAAC10cnwXAABYCgAAAHpsaWIuY3JjMzJyfRcAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemxpYi5odG1sI3psaWIuY3JjMzJYAQAAAC10cn4XAABYDwAAAGNhbGVuZGFyLnRpbWVnbXJ/FwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLnRpbWVnbVgBAAAALXRygBcAAFgKAAAAY21hdGguc3FydHKBFwAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jbWF0aC5odG1sI2NtYXRoLnNxcnRYAQAAAC10coIXAABYDQAAAGNvbXBpbGVyLndhbGtygxcAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29tcGlsZXIuaHRtbCNjb21waWxlci53YWxrWAEAAAAtdHKEFwAAWA0AAABiYXNlNjQuZW5jb2RlcoUXAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Jhc2U2NC5odG1sI2Jhc2U2NC5lbmNvZGVYAQAAAC10coYXAABYBAAAAG9wZW5yhxcAAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjb3BlblgBAAAALXRyiBcAAFgNAAAAcmFuZG9tLnJhbmRvbXKJFwAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yYW5kb20uaHRtbCNyYW5kb20ucmFuZG9tWAEAAAAtdHKKFwAAWBYAAAB3YXJuaW5ncy53YXJuX2V4cGxpY2l0cosXAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dhcm5pbmdzLmh0bWwjd2FybmluZ3Mud2Fybl9leHBsaWNpdFgBAAAALXRyjBcAAFgRAAAAaXRlcnRvb2xzLmlmaWx0ZXJyjRcAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaXRlcnRvb2xzLmh0bWwjaXRlcnRvb2xzLmlmaWx0ZXJYAQAAAC10co4XAABYFQAAAGluc3BlY3QuZ2V0bW9kdWxlaW5mb3KPFwAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5nZXRtb2R1bGVpbmZvWAEAAAAtdHKQFwAAWAwAAABmbC5tYWtlX2Zvcm1ykRcAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmwuaHRtbCNmbC5tYWtlX2Zvcm1YAQAAAC10cpIXAABYFAAAAGRpZmZsaWIuY29udGV4dF9kaWZmcpMXAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RpZmZsaWIuaHRtbCNkaWZmbGliLmNvbnRleHRfZGlmZlgBAAAALXRylBcAAFgNAAAAZHVtYmRibS5jbG9zZXKVFwAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kdW1iZGJtLmh0bWwjZHVtYmRibS5jbG9zZVgBAAAALXRylhcAAFgKAAAAaWMubWFwZmlsZXKXFwAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pYy5odG1sI2ljLm1hcGZpbGVYAQAAAC10cpgXAABYDQAAAG1zdmNydC5wdXR3Y2hymRcAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXN2Y3J0Lmh0bWwjbXN2Y3J0LnB1dHdjaFgBAAAALXRymhcAAFgEAAAAZmlsZXKbFwAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNmaWxlWAEAAAAtdHKcFwAAWBAAAABiYXNlNjQuYjMyZGVjb2Rlcp0XAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Jhc2U2NC5odG1sI2Jhc2U2NC5iMzJkZWNvZGVYAQAAAC10cp4XAABYCwAAAHByb2ZpbGUucnVucp8XAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Byb2ZpbGUuaHRtbCNwcm9maWxlLnJ1blgBAAAALXRyoBcAAFgVAAAAY3Vyc2VzLmFzY2lpLmlzeGRpZ2l0cqEXAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5hc2NpaS5odG1sI2N1cnNlcy5hc2NpaS5pc3hkaWdpdFgBAAAALXRyohcAAFgNAAAAYmRiLnNldF90cmFjZXKjFwAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iZGIuaHRtbCNiZGIuc2V0X3RyYWNlWAEAAAAtdHKkFwAAWAoAAABvcy53YWl0cGlkcqUXAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3Mud2FpdHBpZFgBAAAALXRyphcAAFgNAAAAc3NsLmVudW1fY3Jsc3KnFwAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuZW51bV9jcmxzWAEAAAAtdHKoFwAAWBAAAABfd2lucmVnLkZsdXNoS2V5cqkXAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLkZsdXNoS2V5WAEAAAAtdHKqFwAAWAoAAABtYXRoLmlzbmFucqsXAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hdGguaHRtbCNtYXRoLmlzbmFuWAEAAAAtdHKsFwAAWBkAAABlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5ncq0XAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLnBhcnNlci5odG1sI2VtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmdYAQAAAC10cq4XAABYFgAAAGVtYWlsLnV0aWxzLmZvcm1hdGRhdGVyrxcAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwudXRpbHMuaHRtbCNlbWFpbC51dGlscy5mb3JtYXRkYXRlWAEAAAAtdHKwFwAAWAwAAABtYXJzaGFsLmxvYWRysRcAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFyc2hhbC5odG1sI21hcnNoYWwubG9hZFgBAAAALXRyshcAAFgQAAAAYmFzZTY0LmI2NGRlY29kZXKzFwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXNlNjQuaHRtbCNiYXNlNjQuYjY0ZGVjb2RlWAEAAAAtdHK0FwAAWAQAAABuZXh0crUXAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI25leHRYAQAAAC10crYXAABYCgAAAHJlLmNvbXBpbGVytxcAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmUuaHRtbCNyZS5jb21waWxlWAEAAAAtdHK4FwAAWA0AAABjb2RlLmludGVyYWN0crkXAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGUuaHRtbCNjb2RlLmludGVyYWN0WAEAAAAtdHK6FwAAWA4AAABpbnNwZWN0LmdldGRvY3K7FwAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5nZXRkb2NYAQAAAC10crwXAABYDwAAAGdldHRleHQuZ2V0dGV4dHK9FwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZXR0ZXh0Lmh0bWwjZ2V0dGV4dC5nZXR0ZXh0WAEAAAAtdHK+FwAAWA0AAAB3YXJuaW5ncy53YXJucr8XAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dhcm5pbmdzLmh0bWwjd2FybmluZ3Mud2FyblgBAAAALXRywBcAAFgMAAAAb3MuZnRydW5jYXRlcsEXAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuZnRydW5jYXRlWAEAAAAtdHLCFwAAWAYAAABzb3J0ZWRywxcAAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjc29ydGVkWAEAAAAtdHLEFwAAWA8AAABiaW5hc2NpaS5hMmJfcXByxRcAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmluYXNjaWkuaHRtbCNiaW5hc2NpaS5hMmJfcXBYAQAAAC10csYXAABYGAAAAHNzbC5QRU1fY2VydF90b19ERVJfY2VydHLHFwAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuUEVNX2NlcnRfdG9fREVSX2NlcnRYAQAAAC10csgXAABYFgAAAEZyYW1lV29yay5EaWFsb2dXaW5kb3dyyRcAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnJhbWV3b3JrLmh0bWwjRnJhbWVXb3JrLkRpYWxvZ1dpbmRvd1gBAAAALXRyyhcAAFgXAAAAb3BlcmF0b3IuaXNTZXF1ZW5jZVR5cGVyyxcAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5pc1NlcXVlbmNlVHlwZVgBAAAALXRyzBcAAFgLAAAAZmNudGwuZmxvY2tyzRcAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmNudGwuaHRtbCNmY250bC5mbG9ja1gBAAAALXRyzhcAAFgMAAAAbWFyc2hhbC5kdW1wcs8XAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hcnNoYWwuaHRtbCNtYXJzaGFsLmR1bXBYAQAAAC10ctAXAABYIAAAAF93aW5yZWcuRXhwYW5kRW52aXJvbm1lbnRTdHJpbmdzctEXAAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLkV4cGFuZEVudmlyb25tZW50U3RyaW5nc1gBAAAALXRy0hcAAFgNAAAAb3BlcmF0b3IuaW11bHLTFwAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLmltdWxYAQAAAC10ctQXAABYFAAAAG9wZXJhdG9yLl9faWxzaGlmdF9fctUXAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuX19pbHNoaWZ0X19YAQAAAC10ctYXAABYFAAAAGxvY2FsZS5mb3JtYXRfc3RyaW5nctcXAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvY2FsZS5odG1sI2xvY2FsZS5mb3JtYXRfc3RyaW5nWAEAAAAtdHLYFwAAWBYAAABjdXJzZXMuaXNfdGVybV9yZXNpemVkctkXAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5pc190ZXJtX3Jlc2l6ZWRYAQAAAC10ctoXAABYCwAAAHNuZGhkci53aGF0ctsXAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NuZGhkci5odG1sI3NuZGhkci53aGF0WAEAAAAtdHLcFwAAWBIAAABzdHJpbmcuc3BsaXRmaWVsZHNy3RcAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLnNwbGl0ZmllbGRzWAEAAAAtdHLeFwAAWA4AAABzeXMuZ2V0cHJvZmlsZXLfFwAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNzeXMuZ2V0cHJvZmlsZVgBAAAALXRy4BcAAFgYAAAAZnVuY3Rvb2xzLnVwZGF0ZV93cmFwcGVycuEXAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0b29scy5odG1sI2Z1bmN0b29scy51cGRhdGVfd3JhcHBlclgBAAAALXRy4hcAAFgFAAAAYXBwbHly4xcAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjYXBwbHlYAQAAAC10cuQXAABYCgAAAG9zLnNwYXdudnBy5RcAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5zcGF3bnZwWAEAAAAtdHLmFwAAWAkAAABvcy5leGVjdmVy5xcAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5leGVjdmVYAQAAAC10cugXAABYEAAAAG9zLnBhdGguc3BsaXRleHRy6RcAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MucGF0aC5odG1sI29zLnBhdGguc3BsaXRleHRYAQAAAC10cuoXAABYDAAAAE1hY09TLnNwbGFzaHLrFwAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWNvcy5odG1sI01hY09TLnNwbGFzaFgBAAAALXRy7BcAAFgOAAAAdHVydGxlLmRlZ3JlZXNy7RcAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmRlZ3JlZXNYAQAAAC10cu4XAABYCQAAAG9zLmV4ZWN2cHLvFwAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLmV4ZWN2cFgBAAAALXRy8BcAAFgNAAAAY29weS5kZWVwY29weXLxFwAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb3B5Lmh0bWwjY29weS5kZWVwY29weVgBAAAALXRy8hcAAFgeAAAAY29kZWNzLmJhY2tzbGFzaHJlcGxhY2VfZXJyb3JzcvMXAAAoamkBAABqagEAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5iYWNrc2xhc2hyZXBsYWNlX2Vycm9yc1gBAAAALXRy9BcAAFgRAAAAcmFuZG9tLnRyaWFuZ3VsYXJy9RcAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmFuZG9tLmh0bWwjcmFuZG9tLnRyaWFuZ3VsYXJYAQAAAC10cvYXAABYCgAAAG9zLnRtcGZpbGVy9xcAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy50bXBmaWxlWAEAAAAtdHL4FwAAWAwAAABtc3ZjcnQuZ2V0Y2hy+RcAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXN2Y3J0Lmh0bWwjbXN2Y3J0LmdldGNoWAEAAAAtdHL6FwAAWBUAAAB0cmFjZWJhY2sucHJpbnRfc3RhY2ty+xcAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHJhY2ViYWNrLmh0bWwjdHJhY2ViYWNrLnByaW50X3N0YWNrWAEAAAAtdHL8FwAAWBYAAABjdXJzZXMucGFuZWwubmV3X3BhbmVscv0XAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5wYW5lbC5odG1sI2N1cnNlcy5wYW5lbC5uZXdfcGFuZWxYAQAAAC10cv4XAABYFgAAAHJlYWRsaW5lLmdldF9jb21wbGV0ZXJy/xcAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVhZGxpbmUuaHRtbCNyZWFkbGluZS5nZXRfY29tcGxldGVyWAEAAAAtdHIAGAAAWA0AAABjdXJzZXMubmV3cGFkcgEYAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5uZXdwYWRYAQAAAC10cgIYAABYEQAAAF93aW5yZWcuT3BlbktleUV4cgMYAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLk9wZW5LZXlFeFgBAAAALXRyBBgAAFgPAAAAY3Vyc2VzLm5vY2JyZWFrcgUYAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5ub2NicmVha1gBAAAALXRyBhgAAFgUAAAAbXN2Y3J0LmdldF9vc2ZoYW5kbGVyBxgAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXN2Y3J0Lmh0bWwjbXN2Y3J0LmdldF9vc2ZoYW5kbGVYAQAAAC10cggYAABYDwAAAGdsLm51cmJzc3VyZmFjZXIJGAAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nbC5odG1sI2dsLm51cmJzc3VyZmFjZVgBAAAALXRyChgAAFgMAAAAdGltZS5hc2N0aW1lcgsYAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpbWUuaHRtbCN0aW1lLmFzY3RpbWVYAQAAAC10cgwYAABYDgAAAGN1cnNlcy51bmdldGNocg0YAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy51bmdldGNoWAEAAAAtdHIOGAAAWBQAAABjdXJzZXMuYXNjaWkuaXNhbG51bXIPGAAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuYXNjaWkuaHRtbCNjdXJzZXMuYXNjaWkuaXNhbG51bVgBAAAALXRyEBgAAFgQAAAAYmluYXNjaWkuaGV4bGlmeXIRGAAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iaW5hc2NpaS5odG1sI2JpbmFzY2lpLmhleGxpZnlYAQAAAC10chIYAABYFwAAAGluc3BlY3QuZm9ybWF0YXJndmFsdWVzchMYAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmZvcm1hdGFyZ3ZhbHVlc1gBAAAALXRyFBgAAFgNAAAAb3BlcmF0b3IuaWRpdnIVGAAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLmlkaXZYAQAAAC10chYYAABYGgAAAHRlc3Quc3VwcG9ydC5pbXBvcnRfbW9kdWxlchcYAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuaW1wb3J0X21vZHVsZVgBAAAALXRyGBgAAFgPAAAAb3MucGF0aC5yZWxwYXRochkYAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLnBhdGguaHRtbCNvcy5wYXRoLnJlbHBhdGhYAQAAAC10choYAABYFQAAAGNvZGVjcy5yZXBsYWNlX2Vycm9yc3IbGAAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MucmVwbGFjZV9lcnJvcnNYAQAAAC10chwYAABYDAAAAG1zdmNydC5wdXRjaHIdGAAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc3ZjcnQuaHRtbCNtc3ZjcnQucHV0Y2hYAQAAAC10ch4YAABYBgAAAGRpdm1vZHIfGAAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNkaXZtb2RYAQAAAC10ciAYAABYFwAAAHBsYXRmb3JtLnB5dGhvbl92ZXJzaW9uciEYAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BsYXRmb3JtLmh0bWwjcGxhdGZvcm0ucHl0aG9uX3ZlcnNpb25YAQAAAC10ciIYAABYDgAAAHR1cnRsZS5iZ2NvbG9yciMYAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5iZ2NvbG9yWAEAAAAtdHIkGAAAWBUAAABzeXMuX2NsZWFyX3R5cGVfY2FjaGVyJRgAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLl9jbGVhcl90eXBlX2NhY2hlWAEAAAAtdHImGAAAWBwAAAByZWFkbGluZS5yZW1vdmVfaGlzdG9yeV9pdGVtcicYAAAoamkBAABqagEAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlYWRsaW5lLmh0bWwjcmVhZGxpbmUucmVtb3ZlX2hpc3RvcnlfaXRlbVgBAAAALXRyKBgAAFgPAAAAdHVydGxlLnBlbmNvbG9ycikYAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5wZW5jb2xvclgBAAAALXRyKhgAAFgMAAAAb3BlcmF0b3IubW9kcisYAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IubW9kWAEAAAAtdHIsGAAAWA0AAABiYXNlNjQuZGVjb2Rlci0YAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Jhc2U2NC5odG1sI2Jhc2U2NC5kZWNvZGVYAQAAAC10ci4YAABYCQAAAHR1cnRsZS51cHIvGAAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUudXBYAQAAAC10cjAYAABYCQAAAG9zLnNwYXdudnIxGAAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLnNwYXdudlgBAAAALXRyMhgAAFgTAAAAdW5pY29kZWRhdGEubnVtZXJpY3IzGAAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bmljb2RlZGF0YS5odG1sI3VuaWNvZGVkYXRhLm51bWVyaWNYAQAAAC10cjQYAABYCwAAAGF1ZGlvb3Aucm1zcjUYAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2F1ZGlvb3AuaHRtbCNhdWRpb29wLnJtc1gBAAAALXRyNhgAAFgNAAAAc29ja2V0LnNvY2tldHI3GAAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuc29ja2V0WAEAAAAtdHI4GAAAWAkAAABvcy5zcGF3bmxyORgAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5zcGF3bmxYAQAAAC10cjoYAABYCwAAAG9zLnVuc2V0ZW52cjsYAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MudW5zZXRlbnZYAQAAAC10cjwYAABYCAAAAG9zLmNob3ducj0YAAAoamkBAABqagEAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuY2hvd25YAQAAAC10cj4YAABYEAAAAHNpZ25hbC5nZXRzaWduYWxyPxgAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2lnbmFsLmh0bWwjc2lnbmFsLmdldHNpZ25hbFgBAAAALXRyQBgAAFgRAAAAc3lzbG9nLnNldGxvZ21hc2tyQRgAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzbG9nLmh0bWwjc3lzbG9nLnNldGxvZ21hc2tYAQAAAC10ckIYAABYEwAAAHVybHBhcnNlLnVybHVucGFyc2VyQxgAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJscGFyc2UuaHRtbCN1cmxwYXJzZS51cmx1bnBhcnNlWAEAAAAtdHJEGAAAWBIAAABzdHJ1Y3QudW5wYWNrX2Zyb21yRRgAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RydWN0Lmh0bWwjc3RydWN0LnVucGFja19mcm9tWAEAAAAtdHJGGAAAWBIAAABwb3NpeGZpbGUuZmlsZW9wZW5yRxgAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcG9zaXhmaWxlLmh0bWwjcG9zaXhmaWxlLmZpbGVvcGVuWAEAAAAtdHJIGAAAWBAAAABvcGVyYXRvci5fX2ludl9fckkYAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuX19pbnZfX1gBAAAALXRyShgAAFgSAAAAY3Vyc2VzLnN0YXJ0X2NvbG9ycksYAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5zdGFydF9jb2xvclgBAAAALXRyTBgAAFgWAAAAc3RyaW5ncHJlcC5pbl90YWJsZV9hMXJNGAAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmdwcmVwLmh0bWwjc3RyaW5ncHJlcC5pbl90YWJsZV9hMVgBAAAALXRyThgAAFgXAAAAeG1sLnNheC5zYXh1dGlscy5lc2NhcGVyTxgAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC51dGlscy5odG1sI3htbC5zYXguc2F4dXRpbHMuZXNjYXBlWAEAAAAtdHJQGAAAWBAAAABsb2NhbGUubm9ybWFsaXplclEYAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvY2FsZS5odG1sI2xvY2FsZS5ub3JtYWxpemVYAQAAAC10clIYAABYDwAAAGdkYm0ucmVvcmdhbml6ZXJTGAAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZGJtLmh0bWwjZ2RibS5yZW9yZ2FuaXplWAEAAAAtdHJUGAAAWBAAAABsb2dnaW5nLmNyaXRpY2FsclUYAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLmNyaXRpY2FsWAEAAAAtdHJWGAAAWA8AAABtc2lsaWIuYWRkX2RhdGFyVxgAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLmFkZF9kYXRhWAEAAAAtdHJYGAAAWBUAAABvcGVyYXRvci5fX2RlbHNsaWNlX19yWRgAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX2RlbHNsaWNlX19YAQAAAC10cloYAABYEwAAAHNpZ25hbC5zaWdpbnRlcnJ1cHRyWxgAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2lnbmFsLmh0bWwjc2lnbmFsLnNpZ2ludGVycnVwdFgBAAAALXRyXBgAAFgOAAAAdHVydGxlLm9udGltZXJyXRgAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLm9udGltZXJYAQAAAC10cl4YAABYEAAAAHR1cnRsZS5vbnJlbGVhc2VyXxgAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLm9ucmVsZWFzZVgBAAAALXRyYBgAAFgIAAAAZGJtLm9wZW5yYRgAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGJtLmh0bWwjZGJtLm9wZW5YAQAAAC10cmIYAABYFAAAAHR1cnRsZS53aW5kb3dfaGVpZ2h0cmMYAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS53aW5kb3dfaGVpZ2h0WAEAAAAtdHJkGAAAWBQAAABjb21waWxlci5jb21waWxlRmlsZXJlGAAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb21waWxlci5odG1sI2NvbXBpbGVyLmNvbXBpbGVGaWxlWAEAAAAtdHJmGAAAWAwAAABzb2NrZXQuaHRvbmxyZxgAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0Lmh0b25sWAEAAAAtdHJoGAAAWBQAAAB1bmljb2RlZGF0YS5jYXRlZ29yeXJpGAAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bmljb2RlZGF0YS5odG1sI3VuaWNvZGVkYXRhLmNhdGVnb3J5WAEAAAAtdHJqGAAAWBMAAABzeXNjb25maWcuZ2V0X3BhdGhzcmsYAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5c2NvbmZpZy5odG1sI3N5c2NvbmZpZy5nZXRfcGF0aHNYAQAAAC10cmwYAABYDQAAAGhlYXBxLmhlYXBwb3BybRgAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaGVhcHEuaHRtbCNoZWFwcS5oZWFwcG9wWAEAAAAtdHJuGAAAWAgAAAByZXZlcnNlZHJvGAAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNyZXZlcnNlZFgBAAAALXRycBgAAFgTAAAAd2ViYnJvd3Nlci5vcGVuX25ld3JxGAAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93ZWJicm93c2VyLmh0bWwjd2ViYnJvd3Nlci5vcGVuX25ld1gBAAAALXRychgAAFgTAAAAdGVtcGZpbGUuZ2V0dGVtcGRpcnJzGAAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZW1wZmlsZS5odG1sI3RlbXBmaWxlLmdldHRlbXBkaXJYAQAAAC10cnQYAABYDwAAAGN1cnNlcy5mbHVzaGlucHJ1GAAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMuZmx1c2hpbnBYAQAAAC10cnYYAABYEAAAAHNpdGUuZ2V0dXNlcmJhc2VydxgAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2l0ZS5odG1sI3NpdGUuZ2V0dXNlcmJhc2VYAQAAAC10cngYAABYHQAAAHBsYXRmb3JtLnB5dGhvbl92ZXJzaW9uX3R1cGxlcnkYAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BsYXRmb3JtLmh0bWwjcGxhdGZvcm0ucHl0aG9uX3ZlcnNpb25fdHVwbGVYAQAAAC10cnoYAABYEQAAAF93aW5yZWcuQ3JlYXRlS2V5cnsYAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLkNyZWF0ZUtleVgBAAAALXRyfBgAAFgLAAAAc3RyaW5nLmZpbmRyfRgAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLmZpbmRYAQAAAC10cn4YAABYHwAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS5pdGVycGFyc2VyfxgAAChqaQEAAGpqAQAAWFwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLml0ZXJwYXJzZVgBAAAALXRygBgAAFgYAAAAcmZjODIyLmR1bXBfYWRkcmVzc19wYWlycoEYAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JmYzgyMi5odG1sI3JmYzgyMi5kdW1wX2FkZHJlc3NfcGFpclgBAAAALXRyghgAAFgaAAAAeG1sLnNheC5zYXh1dGlscy5xdW90ZWF0dHJygxgAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC51dGlscy5odG1sI3htbC5zYXguc2F4dXRpbHMucXVvdGVhdHRyWAEAAAAtdHKEGAAAWCAAAABkaXN0dXRpbHMuZmFuY3lfZ2V0b3B0LndyYXBfdGV4dHKFGAAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5mYW5jeV9nZXRvcHQud3JhcF90ZXh0WAEAAAAtdHKGGAAAWBAAAABjdXJzZXMuc2V0dXB0ZXJtcocYAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5zZXR1cHRlcm1YAQAAAC10cogYAABYDAAAAHN0YXRpY21ldGhvZHKJGAAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNzdGF0aWNtZXRob2RYAQAAAC10cooYAABYFwAAAGdldF9zcGVjaWFsX2ZvbGRlcl9wYXRocosYAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYnVpbHRkaXN0Lmh0bWwjZ2V0X3NwZWNpYWxfZm9sZGVyX3BhdGhYAQAAAC10cowYAABYCwAAAGNtYXRoLmF0YW5oco0YAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NtYXRoLmh0bWwjY21hdGguYXRhbmhYAQAAAC10co4YAABYEwAAAGhhc2hsaWIucGJrZGYyX2htYWNyjxgAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaGFzaGxpYi5odG1sI2hhc2hsaWIucGJrZGYyX2htYWNYAQAAAC10cpAYAABYDQAAAGNvZGVjcy5lbmNvZGVykRgAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLmVuY29kZVgBAAAALXRykhgAAFgKAAAAbWF0aC5oeXBvdHKTGAAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5oeXBvdFgBAAAALXRylBgAAFgLAAAAYXVkaW9vcC5hZGRylRgAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXVkaW9vcC5odG1sI2F1ZGlvb3AuYWRkWAEAAAAtdHKWGAAAWBQAAABhc3QuaXRlcl9jaGlsZF9ub2Rlc3KXGAAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hc3QuaHRtbCNhc3QuaXRlcl9jaGlsZF9ub2Rlc1gBAAAALXRymBgAAFgRAAAAYWV0b29scy5wYWNrZXZlbnRymRgAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWV0b29scy5odG1sI2FldG9vbHMucGFja2V2ZW50WAEAAAAtdHKaGAAAWBkAAAB0cmFjZWJhY2sucHJpbnRfZXhjZXB0aW9ucpsYAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RyYWNlYmFjay5odG1sI3RyYWNlYmFjay5wcmludF9leGNlcHRpb25YAQAAAC10cpwYAABYGAAAAGRpc3R1dGlscy5kZXBfdXRpbC5uZXdlcnKdGAAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5kZXBfdXRpbC5uZXdlclgBAAAALXRynhgAAFgRAAAAbXNpbGliLmFkZF90YWJsZXNynxgAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLmFkZF90YWJsZXNYAQAAAC10cqAYAABYGwAAAGRpc3R1dGlscy51dGlsLmJ5dGVfY29tcGlsZXKhGAAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy51dGlsLmJ5dGVfY29tcGlsZVgBAAAALXRyohgAAFgXAAAAZW1haWwuY2hhcnNldC5hZGRfY29kZWNyoxgAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwuY2hhcnNldC5odG1sI2VtYWlsLmNoYXJzZXQuYWRkX2NvZGVjWAEAAAAtdHKkGAAAWBAAAAB0dXJ0bGUuY29sb3Jtb2RlcqUYAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5jb2xvcm1vZGVYAQAAAC10cqYYAABYCAAAAGZsLnFyZWFkcqcYAAAoamkBAABqagEAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZsLmh0bWwjZmwucXJlYWRYAQAAAC10cqgYAABYGgAAAGluc3BlY3QuaXNnZXRzZXRkZXNjcmlwdG9ycqkYAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmlzZ2V0c2V0ZGVzY3JpcHRvclgBAAAALXRyqhgAAFgDAAAAaGV4cqsYAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2hleFgBAAAALXRyrBgAAFgIAAAAbWF0aC50YW5yrRgAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWF0aC5odG1sI21hdGgudGFuWAEAAAAtdHKuGAAAWAoAAAB0aW1lLmN0aW1lcq8YAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpbWUuaHRtbCN0aW1lLmN0aW1lWAEAAAAtdHKwGAAAWBcAAABNYWNPUy5HZXRDcmVhdG9yQW5kVHlwZXKxGAAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWNvcy5odG1sI01hY09TLkdldENyZWF0b3JBbmRUeXBlWAEAAAAtdHKyGAAAWBAAAABvcy5wYXRoLm5vcm1wYXRocrMYAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLnBhdGguaHRtbCNvcy5wYXRoLm5vcm1wYXRoWAEAAAAtdHK0GAAAWAsAAABzaHV0aWwubW92ZXK1GAAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaHV0aWwuaHRtbCNzaHV0aWwubW92ZVgBAAAALXRythgAAFgiAAAAZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYnK3GAAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5zeXNjb25maWcuZ2V0X3B5dGhvbl9saWJYAQAAAC10crgYAABYHwAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS5pc2VsZW1lbnRyuRgAAChqaQEAAGpqAQAAWFwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLmlzZWxlbWVudFgBAAAALXRyuhgAAFgNAAAAY3Vyc2VzLnVuY3RybHK7GAAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMudW5jdHJsWAEAAAAtdHK8GAAAWAcAAABvcy5raWxscr0YAAAoamkBAABqagEAAFgxAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3Mua2lsbFgBAAAALXRyvhgAAFgVAAAAdGhyZWFkLmludGVycnVwdF9tYWlucr8YAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZC5odG1sI3RocmVhZC5pbnRlcnJ1cHRfbWFpblgBAAAALXRywBgAAFgMAAAAbG9nZ2luZy5pbmZvcsEYAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLmluZm9YAQAAAC10csIYAABYDQAAAGF1ZGlvb3AuYXZncHBywxgAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXVkaW9vcC5odG1sI2F1ZGlvb3AuYXZncHBYAQAAAC10csQYAABYCwAAAHN0cmluZy5hdG9pcsUYAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZy5odG1sI3N0cmluZy5hdG9pWAEAAAAtdHLGGAAAWBMAAABzeXMuX2N1cnJlbnRfZnJhbWVzcscYAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5fY3VycmVudF9mcmFtZXNYAQAAAC10csgYAABYEAAAAGltZ2ZpbGUuZ2V0c2l6ZXNyyRgAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1nZmlsZS5odG1sI2ltZ2ZpbGUuZ2V0c2l6ZXNYAQAAAC10csoYAABYEAAAAGltcC5pbml0X2J1aWx0aW5yyxgAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1wLmh0bWwjaW1wLmluaXRfYnVpbHRpblgBAAAALXRyzBgAAFgSAAAAcGxpc3RsaWIucmVhZFBsaXN0cs0YAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BsaXN0bGliLmh0bWwjcGxpc3RsaWIucmVhZFBsaXN0WAEAAAAtdHLOGAAAWBQAAABNYWNPUy5HZXRFcnJvclN0cmluZ3LPGAAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWNvcy5odG1sI01hY09TLkdldEVycm9yU3RyaW5nWAEAAAAtdHLQGAAAWBoAAABpbXB1dGlsLnB5X3N1ZmZpeF9pbXBvcnRlcnLRGAAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbXB1dGlsLmh0bWwjaW1wdXRpbC5weV9zdWZmaXhfaW1wb3J0ZXJYAQAAAC10ctIYAABYDwAAAF93aW5yZWcuTG9hZEtleXLTGAAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjX3dpbnJlZy5Mb2FkS2V5WAEAAAAtdHLUGAAAWAsAAABvcy5tYWtlZGlyc3LVGAAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLm1ha2VkaXJzWAEAAAAtdHLWGAAAWA8AAABwcHJpbnQuc2FmZXJlcHJy1xgAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHByaW50Lmh0bWwjcHByaW50LnNhZmVyZXByWAEAAAAtdHLYGAAAWBEAAAB0dXJ0bGUuY2xlYXJzdGFtcHLZGAAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuY2xlYXJzdGFtcFgBAAAALXRy2hgAAFgVAAAAcGtndXRpbC53YWxrX3BhY2thZ2VzctsYAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BrZ3V0aWwuaHRtbCNwa2d1dGlsLndhbGtfcGFja2FnZXNYAQAAAC10ctwYAABYDAAAAHN0YXQuU19JU0xOS3LdGAAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TX0lTTE5LWAEAAAAtdHLeGAAAWA8AAABjc3YuZ2V0X2RpYWxlY3Ry3xgAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3N2Lmh0bWwjY3N2LmdldF9kaWFsZWN0WAEAAAAtdHLgGAAAWAoAAAB0aW1lLnR6c2V0cuEYAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpbWUuaHRtbCN0aW1lLnR6c2V0WAEAAAAtdHLiGAAAWA8AAABjdXJzZXMudGlnZXRudW1y4xgAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLnRpZ2V0bnVtWAEAAAAtdHLkGAAAWBoAAABlbWFpbC5pdGVyYXRvcnMuX3N0cnVjdHVyZXLlGAAAKGppAQAAamoBAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5pdGVyYXRvcnMuaHRtbCNlbWFpbC5pdGVyYXRvcnMuX3N0cnVjdHVyZVgBAAAALXRy5hgAAFgTAAAAdG9rZW4uSVNOT05URVJNSU5BTHLnGAAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLklTTk9OVEVSTUlOQUxYAQAAAC10cugYAABYDQAAAG1pbWlmeS5taW1pZnly6RgAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWltaWZ5Lmh0bWwjbWltaWZ5Lm1pbWlmeVgBAAAALXRy6hgAAFgYAAAAcGxhdGZvcm0ucHl0aG9uX3JldmlzaW9ucusYAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BsYXRmb3JtLmh0bWwjcGxhdGZvcm0ucHl0aG9uX3JldmlzaW9uWAEAAAAtdHLsGAAAWA0AAABtYXRoLmNvcHlzaWducu0YAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hdGguaHRtbCNtYXRoLmNvcHlzaWduWAEAAAAtdHLuGAAAWA0AAABjdHlwZXMucmVzaXplcu8YAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5yZXNpemVYAQAAAC10cvAYAABYGwAAAGluc3BlY3QuaXNnZW5lcmF0b3JmdW5jdGlvbnLxGAAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5pc2dlbmVyYXRvcmZ1bmN0aW9uWAEAAAAtdHLyGAAAWA4AAABmbC5nZXRfcmdibW9kZXLzGAAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbC5odG1sI2ZsLmdldF9yZ2Jtb2RlWAEAAAAtdHL0GAAAWAsAAABvcGVyYXRvci5uZXL1GAAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLm5lWAEAAAAtdHL2GAAAWAoAAABjbWF0aC5jb3NocvcYAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NtYXRoLmh0bWwjY21hdGguY29zaFgBAAAALXRy+BgAAFgLAAAAdHVydGxlLmdvdG9y+RgAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmdvdG9YAQAAAC10cvoYAABYGgAAAGluc3BlY3QuaXNtZW1iZXJkZXNjcmlwdG9ycvsYAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmlzbWVtYmVyZGVzY3JpcHRvclgBAAAALXRy/BgAAFgTAAAAZnV0dXJlX2J1aWx0aW5zLm1hcHL9GAAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdXR1cmVfYnVpbHRpbnMuaHRtbCNmdXR1cmVfYnVpbHRpbnMubWFwWAEAAAAtdHL+GAAAWAsAAABmbC5kb19mb3Jtc3L/GAAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbC5odG1sI2ZsLmRvX2Zvcm1zWAEAAAAtdHIAGQAAWBQAAABvcGVyYXRvci5fX3RydWVkaXZfX3IBGQAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9fdHJ1ZWRpdl9fWAEAAAAtdHICGQAAWA8AAABwYXJzZXIuc3QydHVwbGVyAxkAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGFyc2VyLmh0bWwjcGFyc2VyLnN0MnR1cGxlWAEAAAAtdHIEGQAAWA0AAABvcy5XSUZTVE9QUEVEcgUZAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuV0lGU1RPUFBFRFgBAAAALXRyBhkAAFgJAAAAdGltZS50aW1lcgcZAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpbWUuaHRtbCN0aW1lLnRpbWVYAQAAAC10cggZAABYBQAAAHN1cGVycgkZAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3N1cGVyWAEAAAAtdHIKGQAAWAwAAABpbWdmaWxlLnR0b2JyCxkAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1nZmlsZS5odG1sI2ltZ2ZpbGUudHRvYlgBAAAALXRyDBkAAFgOAAAAY29tcGlsZXIucGFyc2VyDRkAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29tcGlsZXIuaHRtbCNjb21waWxlci5wYXJzZVgBAAAALXRyDhkAAFgOAAAAYnNkZGIuaGFzaG9wZW5yDxkAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYnNkZGIuaHRtbCNic2RkYi5oYXNob3BlblgBAAAALXRyEBkAAFgQAAAAZmlsZWlucHV0LmZpbGVub3IRGQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9maWxlaW5wdXQuaHRtbCNmaWxlaW5wdXQuZmlsZW5vWAEAAAAtdHISGQAAWB4AAABkaXN0dXRpbHMuZGlyX3V0aWwucmVtb3ZlX3RyZWVyExkAAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuZGlyX3V0aWwucmVtb3ZlX3RyZWVYAQAAAC10chQZAABYEAAAAGRvY3Rlc3QudGVzdGZpbGVyFRkAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QudGVzdGZpbGVYAQAAAC10chYZAABYCgAAAG1hdGgudHJ1bmNyFxkAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWF0aC5odG1sI21hdGgudHJ1bmNYAQAAAC10chgZAABYDgAAAGN1cnNlcy51c2VfZW52chkZAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy51c2VfZW52WAEAAAAtdHIaGQAAWBAAAABzaWduYWwuZ2V0aXRpbWVychsZAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NpZ25hbC5odG1sI3NpZ25hbC5nZXRpdGltZXJYAQAAAC10chwZAABYGQAAAGZpbGVpbnB1dC5ob29rX2NvbXByZXNzZWRyHRkAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmlsZWlucHV0Lmh0bWwjZmlsZWlucHV0Lmhvb2tfY29tcHJlc3NlZFgBAAAALXRyHhkAAFgLAAAAaGVhcHEubWVyZ2VyHxkAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaGVhcHEuaHRtbCNoZWFwcS5tZXJnZVgBAAAALXRyIBkAAFgNAAAAZGlmZmxpYi5uZGlmZnIhGQAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaWZmbGliLmh0bWwjZGlmZmxpYi5uZGlmZlgBAAAALXRyIhkAAFgJAAAAbWF0aC5hdGFuciMZAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hdGguaHRtbCNtYXRoLmF0YW5YAQAAAC10ciQZAABYBgAAAGludGVybnIlGQAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNpbnRlcm5YAQAAAC10ciYZAABYEwAAAHRlcm1pb3MudGNzZW5kYnJlYWtyJxkAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGVybWlvcy5odG1sI3Rlcm1pb3MudGNzZW5kYnJlYWtYAQAAAC10cigZAABYDAAAAHR1cnRsZS53cml0ZXIpGQAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUud3JpdGVYAQAAAC10cioZAABYDAAAAHB3ZC5nZXRwd25hbXIrGQAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wd2QuaHRtbCNwd2QuZ2V0cHduYW1YAQAAAC10ciwZAABYDgAAAGN1cnNlcy5oYXNfa2V5ci0ZAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5oYXNfa2V5WAEAAAAtdHIuGQAAWBEAAABvcGVyYXRvci5kZWxzbGljZXIvGQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLmRlbHNsaWNlWAEAAAAtdHIwGQAAWA8AAABvcy5wYXRoLmdldHNpemVyMRkAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MucGF0aC5odG1sI29zLnBhdGguZ2V0c2l6ZVgBAAAALXRyMhkAAFgOAAAAcmFuZG9tLnJhbmRpbnRyMxkAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmFuZG9tLmh0bWwjcmFuZG9tLnJhbmRpbnRYAQAAAC10cjQZAABYDgAAAHN0cmluZy5yZXBsYWNlcjUZAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZy5odG1sI3N0cmluZy5yZXBsYWNlWAEAAAAtdHI2GQAAWBMAAABFYXN5RGlhbG9ncy5NZXNzYWdlcjcZAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vhc3lkaWFsb2dzLmh0bWwjRWFzeURpYWxvZ3MuTWVzc2FnZVgBAAAALXRyOBkAAFgMAAAAc3RhdC5TX0lTRElScjkZAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNfSVNESVJYAQAAAC10cjoZAABYEQAAAGN1cnNlcy5hc2NpaS5jdHJscjsZAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5hc2NpaS5odG1sI2N1cnNlcy5hc2NpaS5jdHJsWAEAAAAtdHI8GQAAWAwAAABvcy5zZXRyZXN1aWRyPRkAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5zZXRyZXN1aWRYAQAAAC10cj4ZAABYFwAAAGVtYWlsLm1lc3NhZ2VfZnJvbV9maWxlcj8ZAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLnBhcnNlci5odG1sI2VtYWlsLm1lc3NhZ2VfZnJvbV9maWxlWAEAAAAtdHJAGQAAWBIAAABjdXJzZXMuYXNjaWkuYXNjaWlyQRkAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmFzY2lpLmh0bWwjY3Vyc2VzLmFzY2lpLmFzY2lpWAEAAAAtdHJCGQAAWBAAAABvcy5wYXRoLm5vcm1jYXNlckMZAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLnBhdGguaHRtbCNvcy5wYXRoLm5vcm1jYXNlWAEAAAAtdHJEGQAAWBAAAAB0ZW1wZmlsZS5ta2R0ZW1wckUZAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RlbXBmaWxlLmh0bWwjdGVtcGZpbGUubWtkdGVtcFgBAAAALXRyRhkAAFgaAAAAY3Vyc2VzLnBhbmVsLnVwZGF0ZV9wYW5lbHNyRxkAAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLnBhbmVsLmh0bWwjY3Vyc2VzLnBhbmVsLnVwZGF0ZV9wYW5lbHNYAQAAAC10ckgZAABYFwAAAGNvbXBpbGVhbGwuY29tcGlsZV9maWxlckkZAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbXBpbGVhbGwuaHRtbCNjb21waWxlYWxsLmNvbXBpbGVfZmlsZVgBAAAALXRyShkAAFgUAAAAZGVjaW1hbC5sb2NhbGNvbnRleHRySxkAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwubG9jYWxjb250ZXh0WAEAAAAtdHJMGQAAWBQAAABsb2dnaW5nLmdldExldmVsTmFtZXJNGQAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5nZXRMZXZlbE5hbWVYAQAAAC10ck4ZAABYCgAAAGdjLmNvbGxlY3RyTxkAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2MuaHRtbCNnYy5jb2xsZWN0WAEAAAAtdHJQGQAAWBQAAABjc3YucmVnaXN0ZXJfZGlhbGVjdHJRGQAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jc3YuaHRtbCNjc3YucmVnaXN0ZXJfZGlhbGVjdFgBAAAALXRyUhkAAFgRAAAAaXRlcnRvb2xzLnByb2R1Y3RyUxkAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaXRlcnRvb2xzLmh0bWwjaXRlcnRvb2xzLnByb2R1Y3RYAQAAAC10clQZAABYCwAAAGZpbGVjbXAuY21wclUZAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZpbGVjbXAuaHRtbCNmaWxlY21wLmNtcFgBAAAALXRyVhkAAFgWAAAAc3RyaW5ncHJlcC5pbl90YWJsZV9iMXJXGQAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmdwcmVwLmh0bWwjc3RyaW5ncHJlcC5pbl90YWJsZV9iMVgBAAAALXRyWBkAAFgcAAAAbG9nZ2luZy5jb25maWcuc3RvcExpc3RlbmluZ3JZGQAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmNvbmZpZy5odG1sI2xvZ2dpbmcuY29uZmlnLnN0b3BMaXN0ZW5pbmdYAQAAAC10cloZAABYGAAAAGluc3BlY3QuaXNkYXRhZGVzY3JpcHRvcnJbGQAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5pc2RhdGFkZXNjcmlwdG9yWAEAAAAtdHJcGQAAWAoAAABvcy5mb3JrcHR5cl0ZAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuZm9ya3B0eVgBAAAALXRyXhkAAFgTAAAAcGxpc3RsaWIud3JpdGVQbGlzdHJfGQAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wbGlzdGxpYi5odG1sI3BsaXN0bGliLndyaXRlUGxpc3RYAQAAAC10cmAZAABYDwAAAGN1cnNlcy5sb25nbmFtZXJhGQAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMubG9uZ25hbWVYAQAAAC10cmIZAABYFQAAAG11bHRpcHJvY2Vzc2luZy5WYWx1ZXJjGQAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuVmFsdWVYAQAAAC10cmQZAABYEgAAAGluc3BlY3QuaXNmdW5jdGlvbnJlGQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5pc2Z1bmN0aW9uWAEAAAAtdHJmGQAAWBEAAABhZXRvb2xzLmVudW1zdWJzdHJnGQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hZXRvb2xzLmh0bWwjYWV0b29scy5lbnVtc3Vic3RYAQAAAC10cmgZAABYEAAAAGNvZGVjcy5nZXRyZWFkZXJyaRkAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLmdldHJlYWRlclgBAAAALXRyahkAAFgQAAAAYmFzZTY0LmIxNmVuY29kZXJrGQAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXNlNjQuaHRtbCNiYXNlNjQuYjE2ZW5jb2RlWAEAAAAtdHJsGQAAWBEAAABjYWxlbmRhci5jYWxlbmRhcnJtGQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLmNhbGVuZGFyWAEAAAAtdHJuGQAAWBQAAABkaWZmbGliLklTX0xJTkVfSlVOS3JvGQAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaWZmbGliLmh0bWwjZGlmZmxpYi5JU19MSU5FX0pVTktYAQAAAC10cnAZAABYCgAAAGdkYm0uY2xvc2VycRkAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2RibS5odG1sI2dkYm0uY2xvc2VYAQAAAC10cnIZAABYCwAAAGN1cnNlcy5tZXRhcnMZAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5tZXRhWAEAAAAtdHJ0GQAAWBkAAAByZWFkbGluZS5nZXRfaGlzdG9yeV9pdGVtcnUZAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlYWRsaW5lLmh0bWwjcmVhZGxpbmUuZ2V0X2hpc3RvcnlfaXRlbVgBAAAALXRydhkAAFghAAAAbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24uQ2xpZW50cncZAAAoamkBAABqagEAAFhYAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLkNsaWVudFgBAAAALXRyeBkAAFgHAAAAb3MucGlwZXJ5GQAAKGppAQAAamoBAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLnBpcGVYAQAAAC10cnoZAABYFQAAAG9wZXJhdG9yLmlzTnVtYmVyVHlwZXJ7GQAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLmlzTnVtYmVyVHlwZVgBAAAALXRyfBkAAFgUAAAAZnVuY3Rvb2xzLmNtcF90b19rZXlyfRkAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rvb2xzLmh0bWwjZnVuY3Rvb2xzLmNtcF90b19rZXlYAQAAAC10cn4ZAABYDAAAAHN0cmluZy5yanVzdHJ/GQAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNzdHJpbmcucmp1c3RYAQAAAC10coAZAABYBwAAAGNkLm9wZW5ygRkAAChqaQEAAGpqAQAAWDEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2QuaHRtbCNjZC5vcGVuWAEAAAAtdHKCGQAAWB0AAAB4bWwuZXRyZWUuRWxlbWVudFRyZWUuQ29tbWVudHKDGQAAKGppAQAAamoBAABYWgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuQ29tbWVudFgBAAAALXRyhBkAAFgYAAAAc2l0ZS5nZXR1c2Vyc2l0ZXBhY2thZ2VzcoUZAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NpdGUuaHRtbCNzaXRlLmdldHVzZXJzaXRlcGFja2FnZXNYAQAAAC10coYZAABYEAAAAHBsYXRmb3JtLm1hY2hpbmVyhxkAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGxhdGZvcm0uaHRtbCNwbGF0Zm9ybS5tYWNoaW5lWAEAAAAtdHKIGQAAWA8AAABzc2wuUkFORF9zdGF0dXNyiRkAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlJBTkRfc3RhdHVzWAEAAAAtdHKKGQAAWBYAAAB0cmFjZWJhY2suZm9ybWF0X3N0YWNrcosZAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RyYWNlYmFjay5odG1sI3RyYWNlYmFjay5mb3JtYXRfc3RhY2tYAQAAAC10cowZAABYCQAAAHJlLmVzY2FwZXKNGQAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sI3JlLmVzY2FwZVgBAAAALXRyjhkAAFgDAAAAbWFwco8ZAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI21hcFgBAAAALXRykBkAAFgOAAAAaW1wLmlzX2J1aWx0aW5ykRkAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1wLmh0bWwjaW1wLmlzX2J1aWx0aW5YAQAAAC10cpIZAABYFQAAAHVuaXR0ZXN0LnJlbW92ZVJlc3VsdHKTGQAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LnJlbW92ZVJlc3VsdFgBAAAALXRylBkAAFgMAAAAb3BlcmF0b3IuYWJzcpUZAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuYWJzWAEAAAAtdHKWGQAAWAkAAAB0dXJ0bGUuaHRylxkAAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmh0WAEAAAAtdHKYGQAAWBIAAAB3aW5zb3VuZC5QbGF5U291bmRymRkAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2luc291bmQuaHRtbCN3aW5zb3VuZC5QbGF5U291bmRYAQAAAC10cpoZAABYDgAAAGNhbGVuZGFyLnByY2FscpsZAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhbGVuZGFyLmh0bWwjY2FsZW5kYXIucHJjYWxYAQAAAC10cpwZAABYGAAAAHNvY2tldC5zZXRkZWZhdWx0dGltZW91dHKdGQAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXRYAQAAAC10cp4ZAABYGgAAAHR1cnRsZS53cml0ZV9kb2NzdHJpbmdkaWN0cp8ZAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS53cml0ZV9kb2NzdHJpbmdkaWN0WAEAAAAtdHKgGQAAWBYAAABzaHV0aWwuaWdub3JlX3BhdHRlcm5zcqEZAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NodXRpbC5odG1sI3NodXRpbC5pZ25vcmVfcGF0dGVybnNYAQAAAC10cqIZAABYDgAAAHRpbWUubG9jYWx0aW1lcqMZAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpbWUuaHRtbCN0aW1lLmxvY2FsdGltZVgBAAAALXRypBkAAFgSAAAAY3R5cGVzLkZvcm1hdEVycm9ycqUZAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5Gb3JtYXRFcnJvclgBAAAALXRyphkAAFgPAAAAbWFpbGNhcC5nZXRjYXBzcqcZAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxjYXAuaHRtbCNtYWlsY2FwLmdldGNhcHNYAQAAAC10cqgZAABYEwAAAHBrZ3V0aWwuZXh0ZW5kX3BhdGhyqRkAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGtndXRpbC5odG1sI3BrZ3V0aWwuZXh0ZW5kX3BhdGhYAQAAAC10cqoZAABYDgAAAGN1cnNlcy5yZXNldHR5cqsZAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5yZXNldHR5WAEAAAAtdHKsGQAAWBkAAABkaWZmbGliLkh0bWxEaWZmLl9faW5pdF9fcq0ZAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RpZmZsaWIuaHRtbCNkaWZmbGliLkh0bWxEaWZmLl9faW5pdF9fWAEAAAAtdHKuGQAAWBQAAABjdXJzZXMuYXNjaWkuaXNkaWdpdHKvGQAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuYXNjaWkuaHRtbCNjdXJzZXMuYXNjaWkuaXNkaWdpdFgBAAAALXRysBkAAFgMAAAAdHVydGxlLnNldHVwcrEZAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5zZXR1cFgBAAAALXRyshkAAFgYAAAAY2FsZW5kYXIuc2V0Zmlyc3R3ZWVrZGF5crMZAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhbGVuZGFyLmh0bWwjY2FsZW5kYXIuc2V0Zmlyc3R3ZWVrZGF5WAEAAAAtdHK0GQAAWBEAAABweWNsYnIucmVhZG1vZHVsZXK1GQAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWNsYnIuaHRtbCNweWNsYnIucmVhZG1vZHVsZVgBAAAALXRythkAAFgYAAAAcGxhdGZvcm0ucHl0aG9uX2NvbXBpbGVycrcZAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BsYXRmb3JtLmh0bWwjcGxhdGZvcm0ucHl0aG9uX2NvbXBpbGVyWAEAAAAtdHK4GQAAWA0AAABpdGVydG9vbHMudGVlcrkZAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2l0ZXJ0b29scy5odG1sI2l0ZXJ0b29scy50ZWVYAQAAAC10croZAABYEQAAAGluc3BlY3QuZ2V0c291cmNlcrsZAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmdldHNvdXJjZVgBAAAALXRyvBkAAFgXAAAAdW5pdHRlc3QucmVnaXN0ZXJSZXN1bHRyvRkAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5yZWdpc3RlclJlc3VsdFgBAAAALXRyvhkAAFgQAAAAb3BlcmF0b3IuX19hbmRfX3K/GQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9fYW5kX19YAQAAAC10csAZAABYEAAAAGZpbmRlcnRvb2xzLmNvcHlywRkAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFjb3N0b29scy5odG1sI2ZpbmRlcnRvb2xzLmNvcHlYAQAAAC10csIZAABYBwAAAG1kNS5tZDVywxkAAChqaQEAAGpqAQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWQ1Lmh0bWwjbWQ1Lm1kNVgBAAAALXRyxBkAAFgPAAAAc3RyaW5nLmNhcHdvcmRzcsUZAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZy5odG1sI3N0cmluZy5jYXB3b3Jkc1gBAAAALXRyxhkAAFgPAAAAb3BlcmF0b3IubHNoaWZ0cscZAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IubHNoaWZ0WAEAAAAtdHLIGQAAWCkAAABtdWx0aXByb2Nlc3Npbmcuc2hhcmVkY3R5cGVzLnN5bmNocm9uaXplZHLJGQAAKGppAQAAamoBAABYYAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3Npbmcuc2hhcmVkY3R5cGVzLnN5bmNocm9uaXplZFgBAAAALXRyyhkAAFgPAAAAdHVydGxlLmJhY2t3YXJkcssZAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5iYWNrd2FyZFgBAAAALXRyzBkAAFgMAAAAdHVydGxlLmJncGljcs0ZAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5iZ3BpY1gBAAAALXRyzhkAAFgPAAAAdGV4dHdyYXAuZGVkZW50cs8ZAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RleHR3cmFwLmh0bWwjdGV4dHdyYXAuZGVkZW50WAEAAAAtdHLQGQAAWAsAAABjdXJzZXMuZWNob3LRGQAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMuZWNob1gBAAAALXRy0hkAAFgRAAAAY29kZWNzLml0ZXJlbmNvZGVy0xkAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLml0ZXJlbmNvZGVYAQAAAC10ctQZAABYEAAAAGdldHRleHQuZGdldHRleHRy1RkAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2V0dGV4dC5odG1sI2dldHRleHQuZGdldHRleHRYAQAAAC10ctYZAABYEQAAAHN0cmluZy5jYXBpdGFsaXplctcZAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZy5odG1sI3N0cmluZy5jYXBpdGFsaXplWAEAAAAtdHLYGQAAWAYAAAByZWR1Y2Vy2RkAAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjcmVkdWNlWAEAAAAtdHLaGQAAWBgAAABzeXNjb25maWcuZ2V0X3BhdGhfbmFtZXNy2xkAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzY29uZmlnLmh0bWwjc3lzY29uZmlnLmdldF9wYXRoX25hbWVzWAEAAAAtdHLcGQAAWBUAAABsb2dnaW5nLm1ha2VMb2dSZWNvcmRy3RkAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcubWFrZUxvZ1JlY29yZFgBAAAALXRy3hkAAFgOAAAAcmZjODIyLnVucXVvdGVy3xkAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmZjODIyLmh0bWwjcmZjODIyLnVucXVvdGVYAQAAAC10cuAZAABYFgAAAGZsLnNldF9ldmVudF9jYWxsX2JhY2ty4RkAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmwuaHRtbCNmbC5zZXRfZXZlbnRfY2FsbF9iYWNrWAEAAAAtdHLiGQAAWAwAAABmcGZvcm1hdC5maXhy4xkAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnBmb3JtYXQuaHRtbCNmcGZvcm1hdC5maXhYAQAAAC10cuQZAABYEgAAAGZpbmRlcnRvb2xzLmxhdW5jaHLlGQAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWNvc3Rvb2xzLmh0bWwjZmluZGVydG9vbHMubGF1bmNoWAEAAAAtdHLmGQAAWBcAAABjb21waWxlYWxsLmNvbXBpbGVfcGF0aHLnGQAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb21waWxlYWxsLmh0bWwjY29tcGlsZWFsbC5jb21waWxlX3BhdGhYAQAAAC10cugZAABYCgAAAG9zLnNwYXdubGVy6RkAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5zcGF3bmxlWAEAAAAtdHLqGQAAWA0AAABzaHV0aWwucm10cmVlcusZAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NodXRpbC5odG1sI3NodXRpbC5ybXRyZWVYAQAAAC10cuwZAABYFgAAAGZ1dHVyZV9idWlsdGlucy5maWx0ZXJy7RkAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnV0dXJlX2J1aWx0aW5zLmh0bWwjZnV0dXJlX2J1aWx0aW5zLmZpbHRlclgBAAAALXRy7hkAAFgKAAAAb3Muc3Bhd25scHLvGQAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLnNwYXdubHBYAQAAAC10cvAZAABYDgAAAHNuZGhkci53aGF0aGRycvEZAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NuZGhkci5odG1sI3NuZGhkci53aGF0aGRyWAEAAAAtdHLyGQAAWBIAAABwYXJzZXIuc2VxdWVuY2Uyc3Ry8xkAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGFyc2VyLmh0bWwjcGFyc2VyLnNlcXVlbmNlMnN0WAEAAAAtdHL0GQAAWAwAAABtYXRoLmRlZ3JlZXNy9RkAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWF0aC5odG1sI21hdGguZGVncmVlc1gBAAAALXRy9hkAAFgIAAAAbWF0aC5lcmZy9xkAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWF0aC5odG1sI21hdGguZXJmWAEAAAAtdHL4GQAAWAsAAABwdHkub3BlbnB0eXL5GQAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wdHkuaHRtbCNwdHkub3BlbnB0eVgBAAAALXRy+hkAAFgPAAAAcGFyc2VyLnR1cGxlMnN0cvsZAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BhcnNlci5odG1sI3BhcnNlci50dXBsZTJzdFgBAAAALXRy/BkAAFgPAAAAY3Vyc2VzLmdldG1vdXNlcv0ZAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5nZXRtb3VzZVgBAAAALXRy/hkAAFgTAAAAb3BlcmF0b3IuYXR0cmdldHRlcnL/GQAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLmF0dHJnZXR0ZXJYAQAAAC10cgAaAABYCQAAAG9zLm1rZmlmb3IBGgAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLm1rZmlmb1gBAAAALXRyAhoAAFgaAAAAc3FsaXRlMy5yZWdpc3Rlcl9jb252ZXJ0ZXJyAxoAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMucmVnaXN0ZXJfY29udmVydGVyWAEAAAAtdHIEGgAAWAwAAABnYy5zZXRfZGVidWdyBRoAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2MuaHRtbCNnYy5zZXRfZGVidWdYAQAAAC10cgYaAABYEQAAAG9wZXJhdG9yLl9faWFuZF9fcgcaAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuX19pYW5kX19YAQAAAC10cggaAABYFAAAAGluc3BlY3QuZ2V0ZnJhbWVpbmZvcgkaAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmdldGZyYW1laW5mb1gBAAAALXRyChoAAFgQAAAAZGlyY2FjaGUubGlzdGRpcnILGgAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXJjYWNoZS5odG1sI2RpcmNhY2hlLmxpc3RkaXJYAQAAAC10cgwaAABYDQAAAHNlbGVjdC5rZXZlbnRyDRoAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2VsZWN0Lmh0bWwjc2VsZWN0LmtldmVudFgBAAAALXRyDhoAAFgKAAAAb3Muc2V0cGdpZHIPGgAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLnNldHBnaWRYAQAAAC10chAaAABYDAAAAG1hdGgucmFkaWFuc3IRGgAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5yYWRpYW5zWAEAAAAtdHISGgAAWAkAAABjZ2kucGFyc2VyExoAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2dpLmh0bWwjY2dpLnBhcnNlWAEAAAAtdHIUGgAAWA0AAABvcy5wYXRoLnNwbGl0chUaAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLnBhdGguaHRtbCNvcy5wYXRoLnNwbGl0WAEAAAAtdHIWGgAAWBEAAABpYy5zZXR0eXBlY3JlYXRvcnIXGgAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pYy5odG1sI2ljLnNldHR5cGVjcmVhdG9yWAEAAAAtdHIYGgAAWAoAAABvcy5zdGF0dmZzchkaAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3Muc3RhdHZmc1gBAAAALXRyGhoAAFgOAAAAbWltZXR5cGVzLmluaXRyGxoAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWltZXR5cGVzLmh0bWwjbWltZXR5cGVzLmluaXRYAQAAAC10chwaAABYFwAAAE1hY09TLlNldENyZWF0b3JBbmRUeXBlch0aAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hY29zLmh0bWwjTWFjT1MuU2V0Q3JlYXRvckFuZFR5cGVYAQAAAC10ch4aAABYDQAAAG9zLmdldGxvYWRhdmdyHxoAAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5nZXRsb2FkYXZnWAEAAAAtdHIgGgAAWAkAAABtYXRoLmNvc2hyIRoAAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWF0aC5odG1sI21hdGguY29zaFgBAAAALXRyIhoAAFgSAAAAcmVzb3VyY2UuZ2V0cmxpbWl0ciMaAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Jlc291cmNlLmh0bWwjcmVzb3VyY2UuZ2V0cmxpbWl0WAEAAAAtdHIkGgAAWAkAAABhaWZjLm9wZW5yJRoAAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWlmYy5odG1sI2FpZmMub3BlblgBAAAALXRyJhoAAFgaAAAAdGhyZWFkaW5nLkJvdW5kZWRTZW1hcGhvcmVyJxoAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLkJvdW5kZWRTZW1hcGhvcmVYAQAAAC10cigaAABYCgAAAGJhc2VzdHJpbmdyKRoAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjYmFzZXN0cmluZ1gBAAAALXRyKhoAAFgJAAAAY21hdGgudGFucisaAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NtYXRoLmh0bWwjY21hdGgudGFuWAEAAAAtdHIsGgAAWBEAAABjb2RlY3MuaXRlcmRlY29kZXItGgAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuaXRlcmRlY29kZVgBAAAALXRyLhoAAFgIAAAAb3MuY2hkaXJyLxoAAChqaQEAAGpqAQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5jaGRpclgBAAAALXRyMBoAAFgbAAAAeG1sLmRvbS5taW5pZG9tLnBhcnNlU3RyaW5ncjEaAAAoamkBAABqagEAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20ubWluaWRvbS5odG1sI3htbC5kb20ubWluaWRvbS5wYXJzZVN0cmluZ1gBAAAALXRyMhoAAFgUAAAAdHJhY2ViYWNrLnByaW50X2xhc3RyMxoAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHJhY2ViYWNrLmh0bWwjdHJhY2ViYWNrLnByaW50X2xhc3RYAQAAAC10cjQaAABYCwAAAHNobGV4LnNwbGl0cjUaAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NobGV4Lmh0bWwjc2hsZXguc3BsaXRYAQAAAC10cjYaAABYEgAAAHpsaWIuZGVjb21wcmVzc29ianI3GgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96bGliLmh0bWwjemxpYi5kZWNvbXByZXNzb2JqWAEAAAAtdHI4GgAAWAwAAAB0dXJ0bGUub25rZXlyORoAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLm9ua2V5WAEAAAAtdHI6GgAAWBIAAAB0dXJ0bGUucmVzZXRzY3JlZW5yOxoAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnJlc2V0c2NyZWVuWAEAAAAtdHI8GgAAWAQAAABldmFscj0aAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2V2YWxYAQAAAC10cj4aAABYDQAAAHN5c2xvZy5zeXNsb2dyPxoAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzbG9nLmh0bWwjc3lzbG9nLnN5c2xvZ1gBAAAALXRyQBoAAFgNAAAAY2dpLnBhcnNlX3FzbHJBGgAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jZ2kuaHRtbCNjZ2kucGFyc2VfcXNsWAEAAAAtdHJCGgAAWAcAAABkZWxhdHRyckMaAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2RlbGF0dHJYAQAAAC10ckQaAABYBwAAAHNldGF0dHJyRRoAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjc2V0YXR0clgBAAAALXRyRhoAAFgSAAAAaW5zcGVjdC5nZXRtZW1iZXJzckcaAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmdldG1lbWJlcnNYAQAAAC10ckgaAABYEAAAAGZsLmdldF9kaXJlY3RvcnlySRoAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmwuaHRtbCNmbC5nZXRfZGlyZWN0b3J5WAEAAAAtdHJKGgAAWBQAAABkaXN0dXRpbHMuY29yZS5zZXR1cHJLGgAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jb3JlLnNldHVwWAEAAAAtdHJMGgAAWBMAAABjdHlwZXMuR2V0TGFzdEVycm9yck0aAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5HZXRMYXN0RXJyb3JYAQAAAC10ck4aAABYDAAAAG9zLldJRkVYSVRFRHJPGgAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLldJRkVYSVRFRFgBAAAALXRyUBoAAFgQAAAAaW1wLmFjcXVpcmVfbG9ja3JRGgAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbXAuaHRtbCNpbXAuYWNxdWlyZV9sb2NrWAEAAAAtdHJSGgAAWAkAAABvcy5sY2hvd25yUxoAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5sY2hvd25YAQAAAC10clQaAABYEgAAAGxvY2FsZS5ubF9sYW5naW5mb3JVGgAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUubmxfbGFuZ2luZm9YAQAAAC10clYaAABYDAAAAGdjLmdldF9kZWJ1Z3JXGgAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nYy5odG1sI2djLmdldF9kZWJ1Z1gBAAAALXRyWBoAAFgWAAAAc3RyaW5ncHJlcC5pbl90YWJsZV9jNXJZGgAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmdwcmVwLmh0bWwjc3RyaW5ncHJlcC5pbl90YWJsZV9jNVgBAAAALXRyWhoAAFgWAAAAc3RyaW5ncHJlcC5pbl90YWJsZV9jNnJbGgAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmdwcmVwLmh0bWwjc3RyaW5ncHJlcC5pbl90YWJsZV9jNlgBAAAALXRyXBoAAFgWAAAAc3RyaW5ncHJlcC5pbl90YWJsZV9jN3JdGgAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmdwcmVwLmh0bWwjc3RyaW5ncHJlcC5pbl90YWJsZV9jN1gBAAAALXRyXhoAAFgWAAAAc3RyaW5ncHJlcC5pbl90YWJsZV9jM3JfGgAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmdwcmVwLmh0bWwjc3RyaW5ncHJlcC5pbl90YWJsZV9jM1gBAAAALXRyYBoAAFgOAAAAYmluYXNjaWkuY3JjMzJyYRoAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmluYXNjaWkuaHRtbCNiaW5hc2NpaS5jcmMzMlgBAAAALXRyYhoAAFgcAAAAZW1haWwuZW5jb2RlcnMuZW5jb2RlX2Jhc2U2NHJjGgAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5lbmNvZGVycy5odG1sI2VtYWlsLmVuY29kZXJzLmVuY29kZV9iYXNlNjRYAQAAAC10cmQaAABYFgAAAHN0cmluZ3ByZXAuaW5fdGFibGVfYzhyZRoAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5ncHJlcC5odG1sI3N0cmluZ3ByZXAuaW5fdGFibGVfYzhYAQAAAC10cmYaAABYCgAAAG9zLnVyYW5kb21yZxoAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy51cmFuZG9tWAEAAAAtdHJoGgAAWBAAAABvcGVyYXRvci5zZXRpdGVtcmkaAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3Iuc2V0aXRlbVgBAAAALXRyahoAAFgNAAAAc3B3ZC5nZXRzcG5hbXJrGgAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zcHdkLmh0bWwjc3B3ZC5nZXRzcG5hbVgBAAAALXRybBoAAFgLAAAAaW1naGRyLndoYXRybRoAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1naGRyLmh0bWwjaW1naGRyLndoYXRYAQAAAC10cm4aAABYIgAAAG11bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMuQXJyYXlybxoAAChqaQEAAGpqAQAAWFkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLnNoYXJlZGN0eXBlcy5BcnJheVgBAAAALXRycBoAAFgTAAAAcmFuZG9tLmdhbW1hdmFyaWF0ZXJxGgAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yYW5kb20uaHRtbCNyYW5kb20uZ2FtbWF2YXJpYXRlWAEAAAAtdHJyGgAAWA4AAABhdWRpb29wLnRvbW9ub3JzGgAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hdWRpb29wLmh0bWwjYXVkaW9vcC50b21vbm9YAQAAAC10cnQaAABYEQAAAGluc3BlY3QuaXNidWlsdGlucnUaAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmlzYnVpbHRpblgBAAAALXRydhoAAFgQAAAAYXVkaW9vcC50b3N0ZXJlb3J3GgAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hdWRpb29wLmh0bWwjYXVkaW9vcC50b3N0ZXJlb1gBAAAALXRyeBoAAFgMAAAAZ2MuZ2V0X2NvdW50cnkaAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2djLmh0bWwjZ2MuZ2V0X2NvdW50WAEAAAAtdHJ6GgAAWBQAAABkb2N0ZXN0LkRvY1Rlc3RTdWl0ZXJ7GgAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5Eb2NUZXN0U3VpdGVYAQAAAC10cnwaAABYDQAAAHRleHR3cmFwLmZpbGxyfRoAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGV4dHdyYXAuaHRtbCN0ZXh0d3JhcC5maWxsWAEAAAAtdHJ+GgAAWBYAAABjc3YudW5yZWdpc3Rlcl9kaWFsZWN0cn8aAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nzdi5odG1sI2Nzdi51bnJlZ2lzdGVyX2RpYWxlY3RYAQAAAC10coAaAABYEwAAAEZyYW1lV29yay5TZXBhcmF0b3JygRoAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnJhbWV3b3JrLmh0bWwjRnJhbWVXb3JrLlNlcGFyYXRvclgBAAAALXRyghoAAFgQAAAAaW1wLmxvYWRfZHluYW1pY3KDGgAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbXAuaHRtbCNpbXAubG9hZF9keW5hbWljWAEAAAAtdHKEGgAAWBMAAAB0aHJlYWRpbmcuZW51bWVyYXRlcoUaAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5lbnVtZXJhdGVYAQAAAC10coYaAABYCQAAAG9zLnB1dGVudnKHGgAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLnB1dGVudlgBAAAALXRyiBoAAFgUAAAAb3BlcmF0b3IuX19pcnNoaWZ0X19yiRoAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX2lyc2hpZnRfX1gBAAAALXRyihoAAFgRAAAAcGxhdGZvcm0ucGxhdGZvcm1yixoAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGxhdGZvcm0uaHRtbCNwbGF0Zm9ybS5wbGF0Zm9ybVgBAAAALXRyjBoAAFgNAAAAY29kZWNzLmRlY29kZXKNGgAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuZGVjb2RlWAEAAAAtdHKOGgAAWA8AAAB1bml0dGVzdC5za2lwSWZyjxoAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5za2lwSWZYAQAAAC10cpAaAABYDwAAAGZ1bmN0b29scy53cmFwc3KRGgAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdG9vbHMuaHRtbCNmdW5jdG9vbHMud3JhcHNYAQAAAC10cpIaAABYGgAAAHNzbC5nZXRfc2VydmVyX2NlcnRpZmljYXRlcpMaAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5nZXRfc2VydmVyX2NlcnRpZmljYXRlWAEAAAAtdHKUGgAAWBoAAABkaWZmbGliLkh0bWxEaWZmLm1ha2VfZmlsZXKVGgAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaWZmbGliLmh0bWwjZGlmZmxpYi5IdG1sRGlmZi5tYWtlX2ZpbGVYAQAAAC10cpYaAABYDQAAAGltZ2ZpbGUud3JpdGVylxoAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1nZmlsZS5odG1sI2ltZ2ZpbGUud3JpdGVYAQAAAC10cpgaAABYGQAAAG9wZXJhdG9yLnNlcXVlbmNlSW5jbHVkZXNymRoAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5zZXF1ZW5jZUluY2x1ZGVzWAEAAAAtdHKaGgAAWBoAAABjdHlwZXMuc2V0X2NvbnZlcnNpb25fbW9kZXKbGgAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuc2V0X2NvbnZlcnNpb25fbW9kZVgBAAAALXRynBoAAFgKAAAAb3MuZ2V0Y3dkdXKdGgAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLmdldGN3ZHVYAQAAAC10cp4aAABYIQAAAHdzZ2lyZWYuc2ltcGxlX3NlcnZlci5tYWtlX3NlcnZlcnKfGgAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi5zaW1wbGVfc2VydmVyLm1ha2Vfc2VydmVyWAEAAAAtdHKgGgAAWAoAAAB0aW1lLmNsb2NrcqEaAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpbWUuaHRtbCN0aW1lLmNsb2NrWAEAAAAtdHKiGgAAWBEAAABzdHJpbmcuZXhwYW5kdGFic3KjGgAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNzdHJpbmcuZXhwYW5kdGFic1gBAAAALXRypBoAAFgJAAAAbWF0aC5mbW9kcqUaAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hdGguaHRtbCNtYXRoLmZtb2RYAQAAAC10cqYaAABYGAAAAHR1cnRsZS51bmRvYnVmZmVyZW50cmllc3KnGgAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUudW5kb2J1ZmZlcmVudHJpZXNYAQAAAC10cqgaAABYEAAAAG9zLnBhdGguc2FtZXN0YXRyqRoAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MucGF0aC5odG1sI29zLnBhdGguc2FtZXN0YXRYAQAAAC10cqoaAABYDQAAAHNpZ25hbC5zaWduYWxyqxoAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2lnbmFsLmh0bWwjc2lnbmFsLnNpZ25hbFgBAAAALXRyrBoAAFgRAAAAaGVhcHEuaGVhcHJlcGxhY2VyrRoAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaGVhcHEuaHRtbCNoZWFwcS5oZWFwcmVwbGFjZVgBAAAALXRyrhoAAFgNAAAAemxpYi5jb21wcmVzc3KvGgAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96bGliLmh0bWwjemxpYi5jb21wcmVzc1gBAAAALXRysBoAAFgRAAAAdHVydGxlLmhpZGV0dXJ0bGVysRoAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmhpZGV0dXJ0bGVYAQAAAC10crIaAABYDQAAAHN0cmluZy5yc3RyaXBysxoAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLnJzdHJpcFgBAAAALXRytBoAAFgPAAAAcmFuZG9tLnNldHN0YXRlcrUaAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JhbmRvbS5odG1sI3JhbmRvbS5zZXRzdGF0ZVgBAAAALXRythoAAFgVAAAAbG9nZ2luZy5jb25maWcubGlzdGVucrcaAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuY29uZmlnLmh0bWwjbG9nZ2luZy5jb25maWcubGlzdGVuWAEAAAAtdHK4GgAAWBIAAABzc2wubWF0Y2hfaG9zdG5hbWVyuRoAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLm1hdGNoX2hvc3RuYW1lWAEAAAAtdHK6GgAAWBQAAAB0aHJlYWRpbmcuc3RhY2tfc2l6ZXK7GgAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuc3RhY2tfc2l6ZVgBAAAALXRyvBoAAFgUAAAAbWltZXRvb2xzLmNvcHliaW5hcnlyvRoAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWltZXRvb2xzLmh0bWwjbWltZXRvb2xzLmNvcHliaW5hcnlYAQAAAC10cr4aAABYCQAAAG9zLmZjaG93bnK/GgAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLmZjaG93blgBAAAALXRywBoAAFgWAAAAY2FsZW5kYXIubW9udGhjYWxlbmRhcnLBGgAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLm1vbnRoY2FsZW5kYXJYAQAAAC10csIaAABYEAAAAGNvbXBpbGVyLmNvbXBpbGVywxoAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29tcGlsZXIuaHRtbCNjb21waWxlci5jb21waWxlWAEAAAAtdHLEGgAAWA0AAABvcy5wYXRoLmlzZGlycsUaAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLnBhdGguaHRtbCNvcy5wYXRoLmlzZGlyWAEAAAAtdHLGGgAAWAwAAABnZGJtLm5leHRrZXlyxxoAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2RibS5odG1sI2dkYm0ubmV4dGtleVgBAAAALXRyyBoAAFgcAAAAZW1haWwuZW5jb2RlcnMuZW5jb2RlX3F1b3ByaXLJGgAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5lbmNvZGVycy5odG1sI2VtYWlsLmVuY29kZXJzLmVuY29kZV9xdW9wcmlYAQAAAC10csoaAABYCgAAAG9zLmNvbmZzdHJyyxoAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5jb25mc3RyWAEAAAAtdHLMGgAAWA8AAABjb3B5X3JlZy5waWNrbGVyzRoAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29weV9yZWcuaHRtbCNjb3B5X3JlZy5waWNrbGVYAQAAAC10cs4aAABYEwAAAGluc3BlY3QuZ2V0Y2FsbGFyZ3NyzxoAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QuZ2V0Y2FsbGFyZ3NYAQAAAC10ctAaAABYHwAAAHN5c2NvbmZpZy5nZXRfY29uZmlnX2hfZmlsZW5hbWVy0RoAAChqaQEAAGpqAQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzY29uZmlnLmh0bWwjc3lzY29uZmlnLmdldF9jb25maWdfaF9maWxlbmFtZVgBAAAALXRy0hoAAFgJAAAAZmwucXJlc2V0ctMaAAAoamkBAABqagEAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZsLmh0bWwjZmwucXJlc2V0WAEAAAAtdHLUGgAAWAMAAABiaW5y1RoAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjYmluWAEAAAAtdHLWGgAAWBMAAABjYWxlbmRhci5tb250aHJhbmdlctcaAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhbGVuZGFyLmh0bWwjY2FsZW5kYXIubW9udGhyYW5nZVgBAAAALXRy2BoAAFgMAAAAYWwuc2V0cGFyYW1zctkaAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FsLmh0bWwjYWwuc2V0cGFyYW1zWAEAAAAtdHLaGgAAWAUAAAByYW5nZXLbGgAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNyYW5nZVgBAAAALXRy3BoAAFgcAAAAZG9jdGVzdC5zY3JpcHRfZnJvbV9leGFtcGxlc3LdGgAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5zY3JpcHRfZnJvbV9leGFtcGxlc1gBAAAALXRy3hoAAFgYAAAAY3R5cGVzLkRsbEdldENsYXNzT2JqZWN0ct8aAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5EbGxHZXRDbGFzc09iamVjdFgBAAAALXRy4BoAAFgSAAAAdHVydGxlLnNldHBvc2l0aW9ucuEaAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5zZXRwb3NpdGlvblgBAAAALXRy4hoAAFgLAAAAYWwub3BlbnBvcnRy4xoAAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWwuaHRtbCNhbC5vcGVucG9ydFgBAAAALXRy5BoAAFgJAAAAb3MuZ2V0Y3dkcuUaAAAoamkBAABqagEAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuZ2V0Y3dkWAEAAAAtdHLmGgAAWCMAAABkaXN0dXRpbHMuYXJjaGl2ZV91dGlsLm1ha2VfdGFyYmFsbHLnGgAAKGppAQAAamoBAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5hcmNoaXZlX3V0aWwubWFrZV90YXJiYWxsWAEAAAAtdHLoGgAAWAoAAABnbG9iLmlnbG9icukaAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dsb2IuaHRtbCNnbG9iLmlnbG9iWAEAAAAtdHLqGgAAWBYAAABzeXNjb25maWcuZ2V0X3BsYXRmb3JtcusaAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5c2NvbmZpZy5odG1sI3N5c2NvbmZpZy5nZXRfcGxhdGZvcm1YAQAAAC10cuwaAABYCgAAAG9zLmdldHBnaWRy7RoAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5nZXRwZ2lkWAEAAAAtdHLuGgAAWAoAAABjbWF0aC5hY29zcu8aAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NtYXRoLmh0bWwjY21hdGguYWNvc1gBAAAALXRy8BoAAFgMAAAAdGFyZmlsZS5vcGVucvEaAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLm9wZW5YAQAAAC10cvIaAABYFgAAAGxvZ2dpbmcuZ2V0TG9nZ2VyQ2xhc3Ny8xoAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuZ2V0TG9nZ2VyQ2xhc3NYAQAAAC10cvQaAABYJQAAAG11bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMuUmF3QXJyYXly9RoAAChqaQEAAGpqAQAAWFwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLnNoYXJlZGN0eXBlcy5SYXdBcnJheVgBAAAALXRy9hoAAFgOAAAAcnVucHkucnVuX3BhdGhy9xoAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcnVucHkuaHRtbCNydW5weS5ydW5fcGF0aFgBAAAALXRy+BoAAFgLAAAAZmwubWFwY29sb3Jy+RoAAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmwuaHRtbCNmbC5tYXBjb2xvclgBAAAALXRy+hoAAFgMAAAAdHVydGxlLmNvbG9ycvsaAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5jb2xvclgBAAAALXRy/BoAAFgJAAAAb3MuY2hyb290cv0aAAAoamkBAABqagEAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuY2hyb290WAEAAAAtdHL+GgAAWAkAAABvcy5raWxscGdy/xoAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5raWxscGdYAQAAAC10cgAbAABYEQAAAG9wZXJhdG9yLl9faXN1Yl9fcgEbAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuX19pc3ViX19YAQAAAC10cgIbAABYCQAAAG9zLmlzYXR0eXIDGwAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLmlzYXR0eVgBAAAALXRyBBsAAFgQAAAAYWV0b29scy5rZXlzdWJzdHIFGwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hZXRvb2xzLmh0bWwjYWV0b29scy5rZXlzdWJzdFgBAAAALXRyBhsAAFgMAAAAb3BlcmF0b3IucG93cgcbAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IucG93WAEAAAAtdHIIGwAAWBAAAABwbGF0Zm9ybS5tYWNfdmVycgkbAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BsYXRmb3JtLmh0bWwjcGxhdGZvcm0ubWFjX3ZlclgBAAAALXRyChsAAFgaAAAAZW1haWwuZW5jb2RlcnMuZW5jb2RlX25vb3ByCxsAAChqaQEAAGpqAQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwuZW5jb2RlcnMuaHRtbCNlbWFpbC5lbmNvZGVycy5lbmNvZGVfbm9vcFgBAAAALXRyDBsAAFgMAAAAZ3JwLmdldGdyYWxscg0bAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dycC5odG1sI2dycC5nZXRncmFsbFgBAAAALXRyDhsAAFgOAAAAcmFuZG9tLnNodWZmbGVyDxsAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmFuZG9tLmh0bWwjcmFuZG9tLnNodWZmbGVYAQAAAC10chAbAABYIwAAAGRpc3R1dGlscy5zeXNjb25maWcuZ2V0X2NvbmZpZ192YXJzchEbAAAoamkBAABqagEAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcnNYAQAAAC10chIbAABYEgAAAGRlY2ltYWwuZ2V0Y29udGV4dHITGwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5nZXRjb250ZXh0WAEAAAAtdHIUGwAAdShYDwAAAHdoaWNoZGIud2hpY2hkYnIVGwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93aGljaGRiLmh0bWwjd2hpY2hkYi53aGljaGRiWAEAAAAtdHIWGwAAWAsAAABmbS5mb250cGF0aHIXGwAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbS5odG1sI2ZtLmZvbnRwYXRoWAEAAAAtdHIYGwAAWA4AAABsb2NhbGUuZ2V0dGV4dHIZGwAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUuZ2V0dGV4dFgBAAAALXRyGhsAAFgSAAAAaG90c2hvdC5zdGF0cy5sb2FkchsbAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2hvdHNob3QuaHRtbCNob3RzaG90LnN0YXRzLmxvYWRYAQAAAC10chwbAABYFQAAAG9wZXJhdG9yLl9fY29udGFpbnNfX3IdGwAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9fY29udGFpbnNfX1gBAAAALXRyHhsAAFgNAAAAYmlzZWN0LmJpc2VjdHIfGwAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iaXNlY3QuaHRtbCNiaXNlY3QuYmlzZWN0WAEAAAAtdHIgGwAAWAoAAABsb2NhbGUuc3RyciEbAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvY2FsZS5odG1sI2xvY2FsZS5zdHJYAQAAAC10ciIbAABYIQAAAG11bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMuY29weXIjGwAAKGppAQAAamoBAABYWAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3Npbmcuc2hhcmVkY3R5cGVzLmNvcHlYAQAAAC10ciQbAABYCAAAAG1hdGguZXhwciUbAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hdGguaHRtbCNtYXRoLmV4cFgBAAAALXRyJhsAAFgOAAAAcGxhdGZvcm0udW5hbWVyJxsAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGxhdGZvcm0uaHRtbCNwbGF0Zm9ybS51bmFtZVgBAAAALXRyKBsAAFgLAAAAY21hdGguaXNuYW5yKRsAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY21hdGguaHRtbCNjbWF0aC5pc25hblgBAAAALXRyKhsAAFgNAAAAbG9nZ2luZy5kZWJ1Z3IrGwAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5kZWJ1Z1gBAAAALXRyLBsAAFgMAAAAb3BlcmF0b3Iuc3Vici0bAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3Iuc3ViWAEAAAAtdHIuGwAAWAoAAABvcy5zeW1saW5rci8bAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3Muc3ltbGlua1gBAAAALXRyMBsAAFgLAAAAcGFyc2VyLmV4cHJyMRsAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGFyc2VyLmh0bWwjcGFyc2VyLmV4cHJYAQAAAC10cjIbAABYCgAAAG9zLnNldGV1aWRyMxsAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5zZXRldWlkWAEAAAAtdHI0GwAAWAMAAABzdW1yNRsAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjc3VtWAEAAAAtdHI2GwAAWA0AAABzeXMuZXhjX2NsZWFycjcbAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5leGNfY2xlYXJYAQAAAC10cjgbAABYDAAAAG9zLnN0YXJ0ZmlsZXI5GwAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLnN0YXJ0ZmlsZVgBAAAALXRyOhsAAFgSAAAAcGtndXRpbC5nZXRfbG9hZGVycjsbAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BrZ3V0aWwuaHRtbCNwa2d1dGlsLmdldF9sb2FkZXJYAQAAAC10cjwbAABYDwAAAGRpZmZsaWIucmVzdG9yZXI9GwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaWZmbGliLmh0bWwjZGlmZmxpYi5yZXN0b3JlWAEAAAAtdHI+GwAAWBAAAABhc3QubGl0ZXJhbF9ldmFscj8bAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzdC5odG1sI2FzdC5saXRlcmFsX2V2YWxYAQAAAC10ckAbAABYDgAAAGZubWF0Y2guZmlsdGVyckEbAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZubWF0Y2guaHRtbCNmbm1hdGNoLmZpbHRlclgBAAAALXRyQhsAAFgRAAAAYXN0LmdldF9kb2NzdHJpbmdyQxsAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXN0Lmh0bWwjYXN0LmdldF9kb2NzdHJpbmdYAQAAAC10ckQbAABYCwAAAGF1ZGlvb3AuYXZnckUbAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2F1ZGlvb3AuaHRtbCNhdWRpb29wLmF2Z1gBAAAALXRyRhsAAFgLAAAAZm0uZmluZGZvbnRyRxsAAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZm0uaHRtbCNmbS5maW5kZm9udFgBAAAALXRySBsAAFgKAAAAY3N2LndyaXRlcnJJGwAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jc3YuaHRtbCNjc3Yud3JpdGVyWAEAAAAtdHJKGwAAWBsAAABkaXN0dXRpbHMudXRpbC5jb252ZXJ0X3BhdGhySxsAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMudXRpbC5jb252ZXJ0X3BhdGhYAQAAAC10ckwbAABYCQAAAG5pcy5tYXRjaHJNGwAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9uaXMuaHRtbCNuaXMubWF0Y2hYAQAAAC10ck4bAABYEgAAAGdldHRleHQubGRuZ2V0dGV4dHJPGwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZXR0ZXh0Lmh0bWwjZ2V0dGV4dC5sZG5nZXR0ZXh0WAEAAAAtdHJQGwAAWA8AAABtc3ZjcnQudW5nZXR3Y2hyURsAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXN2Y3J0Lmh0bWwjbXN2Y3J0LnVuZ2V0d2NoWAEAAAAtdHJSGwAAWAcAAABvcy5kdXAyclMbAAAoamkBAABqagEAAFgxAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuZHVwMlgBAAAALXRyVBsAAFgOAAAAc29ja2V0LmdldGZxZG5yVRsAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LmdldGZxZG5YAQAAAC10clYbAABYFgAAAEZyYW1lV29yay53aW5kb3dib3VuZHNyVxsAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnJhbWV3b3JrLmh0bWwjRnJhbWVXb3JrLndpbmRvd2JvdW5kc1gBAAAALXRyWBsAAFgNAAAAY3Vyc2VzLm5ld3dpbnJZGwAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMubmV3d2luWAEAAAAtdHJaGwAAWBIAAAB1bmljb2RlZGF0YS5sb29rdXByWxsAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pY29kZWRhdGEuaHRtbCN1bmljb2RlZGF0YS5sb29rdXBYAQAAAC10clwbAABYBwAAAGNvbXBpbGVyXRsAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjY29tcGlsZVgBAAAALXRyXhsAAFgPAAAAbWltaWZ5LnVubWltaWZ5cl8bAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbWlmeS5odG1sI21pbWlmeS51bm1pbWlmeVgBAAAALXRyYBsAAFgTAAAAZmluZGVydG9vbHMucmVzdGFydHJhGwAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWNvc3Rvb2xzLmh0bWwjZmluZGVydG9vbHMucmVzdGFydFgBAAAALXRyYhsAAFgWAAAAYXV0b0dJTC5pbnN0YWxsQXV0b0dJTHJjGwAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hdXRvZ2lsLmh0bWwjYXV0b0dJTC5pbnN0YWxsQXV0b0dJTFgBAAAALXRyZBsAAFgMAAAAaWMubGF1bmNodXJscmUbAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ljLmh0bWwjaWMubGF1bmNodXJsWAEAAAAtdHJmGwAAWBEAAABpdGVydG9vbHMuZ3JvdXBieXJnGwAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pdGVydG9vbHMuaHRtbCNpdGVydG9vbHMuZ3JvdXBieVgBAAAALXRyaBsAAFgSAAAAb3MucGF0aC5leHBhbmR2YXJzcmkbAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLnBhdGguaHRtbCNvcy5wYXRoLmV4cGFuZHZhcnNYAQAAAC10cmobAABYEQAAAG1haWxjYXAuZmluZG1hdGNocmsbAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxjYXAuaHRtbCNtYWlsY2FwLmZpbmRtYXRjaFgBAAAALXRybBsAAFgMAAAAbmV3Lmluc3RhbmNlcm0bAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L25ldy5odG1sI25ldy5pbnN0YW5jZVgBAAAALXRybhsAAFgPAAAAb3MucGF0aC5kaXJuYW1lcm8bAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLnBhdGguaHRtbCNvcy5wYXRoLmRpcm5hbWVYAQAAAC10cnAbAABYEAAAAHBsYXRmb3JtLnJlbGVhc2VycRsAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGxhdGZvcm0uaHRtbCNwbGF0Zm9ybS5yZWxlYXNlWAEAAAAtdHJyGwAAWAwAAAB0dXJ0bGUuc2hhcGVycxsAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnNoYXBlWAEAAAAtdHJ0GwAAWBAAAABnYy5zZXRfdGhyZXNob2xkcnUbAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2djLmh0bWwjZ2Muc2V0X3RocmVzaG9sZFgBAAAALXRydhsAAFgVAAAAc3lzLnNldHJlY3Vyc2lvbmxpbWl0cncbAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5zZXRyZWN1cnNpb25saW1pdFgBAAAALXRyeBsAAFgRAAAAdGVybWlvcy50Y2dldGF0dHJyeRsAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGVybWlvcy5odG1sI3Rlcm1pb3MudGNnZXRhdHRyWAEAAAAtdHJ6GwAAWBMAAABtc2lsaWIuT3BlbkRhdGFiYXNlcnsbAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5PcGVuRGF0YWJhc2VYAQAAAC10cnwbAABYDwAAAHN0cmluZy5zd2FwY2FzZXJ9GwAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNzdHJpbmcuc3dhcGNhc2VYAQAAAC10cn4bAABYGQAAAGN1cnNlcy5wYW5lbC5ib3R0b21fcGFuZWxyfxsAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLnBhbmVsLmh0bWwjY3Vyc2VzLnBhbmVsLmJvdHRvbV9wYW5lbFgBAAAALXRygBsAAFgZAAAAdW5pY29kZWRhdGEuYmlkaXJlY3Rpb25hbHKBGwAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bmljb2RlZGF0YS5odG1sI3VuaWNvZGVkYXRhLmJpZGlyZWN0aW9uYWxYAQAAAC10coIbAABYDwAAAF93aW5yZWcuRW51bUtleXKDGwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjX3dpbnJlZy5FbnVtS2V5WAEAAAAtdHKEGwAAWBcAAAByZWFkbGluZS5yZWFkX2luaXRfZmlsZXKFGwAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZWFkbGluZS5odG1sI3JlYWRsaW5lLnJlYWRfaW5pdF9maWxlWAEAAAAtdHKGGwAAWA0AAABpbnNwZWN0LnN0YWNrcocbAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LnN0YWNrWAEAAAAtdHKIGwAAWAwAAABiejIuY29tcHJlc3NyiRsAAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYnoyLmh0bWwjYnoyLmNvbXByZXNzWAEAAAAtdHKKGwAAWA0AAABoZWFwcS5oZWFwaWZ5cosbAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2hlYXBxLmh0bWwjaGVhcHEuaGVhcGlmeVgBAAAALXRyjBsAAFgOAAAAcHJvZmlsZS5ydW5jdHhyjRsAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHJvZmlsZS5odG1sI3Byb2ZpbGUucnVuY3R4WAEAAAAtdHKOGwAAWA8AAAB0dXJ0bGUuYWRkc2hhcGVyjxsAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmFkZHNoYXBlWAEAAAAtdHKQGwAAWA4AAABpbnNwZWN0LmlzY29kZXKRGwAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5pc2NvZGVYAQAAAC10cpIbAABYGgAAAGluc3BlY3QuaXNtZXRob2RkZXNjcmlwdG9ycpMbAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmlzbWV0aG9kZGVzY3JpcHRvclgBAAAALXRylBsAAFgXAAAAZW1haWwuY2hhcnNldC5hZGRfYWxpYXNylRsAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwuY2hhcnNldC5odG1sI2VtYWlsLmNoYXJzZXQuYWRkX2FsaWFzWAEAAAAtdHKWGwAAWBUAAABwbGF0Zm9ybS5hcmNoaXRlY3R1cmVylxsAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGxhdGZvcm0uaHRtbCNwbGF0Zm9ybS5hcmNoaXRlY3R1cmVYAQAAAC10cpgbAABYEAAAAHNpZ25hbC5zZXRpdGltZXJymRsAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2lnbmFsLmh0bWwjc2lnbmFsLnNldGl0aW1lclgBAAAALXRymhsAAFgQAAAAcmFuZG9tLmp1bXBhaGVhZHKbGwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yYW5kb20uaHRtbCNyYW5kb20uanVtcGFoZWFkWAEAAAAtdHKcGwAAWBsAAAB4bWwuZXRyZWUuRWxlbWVudFRyZWUuWE1MSURynRsAAChqaQEAAGpqAQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLlhNTElEWAEAAAAtdHKeGwAAWA4AAABwbGF0Zm9ybS5wb3BlbnKfGwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wbGF0Zm9ybS5odG1sI3BsYXRmb3JtLnBvcGVuWAEAAAAtdHKgGwAAWA4AAABtYXRoLmZhY3RvcmlhbHKhGwAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5mYWN0b3JpYWxYAQAAAC10cqIbAABYFwAAAHJlYWRsaW5lLnBhcnNlX2FuZF9iaW5kcqMbAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlYWRsaW5lLmh0bWwjcmVhZGxpbmUucGFyc2VfYW5kX2JpbmRYAQAAAC10cqQbAABYCwAAAGNvZGVjcy5vcGVucqUbAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5vcGVuWAEAAAAtdHKmGwAAWAgAAABvcy5sc2Vla3KnGwAAKGppAQAAamoBAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLmxzZWVrWAEAAAAtdHKoGwAAWA4AAABjdHlwZXMuUE9JTlRFUnKpGwAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuUE9JTlRFUlgBAAAALXRyqhsAAFgcAAAAd3NnaXJlZi51dGlsLmFwcGxpY2F0aW9uX3VyaXKrGwAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi51dGlsLmFwcGxpY2F0aW9uX3VyaVgBAAAALXRyrBsAAFgYAAAAZW5jb2RpbmdzLmlkbmEuVG9Vbmljb2Rlcq0bAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVjcy5odG1sI2VuY29kaW5ncy5pZG5hLlRvVW5pY29kZVgBAAAALXRyrhsAAFgIAAAAb3MubHN0YXRyrxsAAChqaQEAAGpqAQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5sc3RhdFgBAAAALXRysBsAAFgQAAAAdGVtcGZpbGUubWtzdGVtcHKxGwAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZW1wZmlsZS5odG1sI3RlbXBmaWxlLm1rc3RlbXBYAQAAAC10crIbAABYCwAAAGxvZ2dpbmcubG9ncrMbAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLmxvZ1gBAAAALXRytBsAAFgPAAAAZGlzLmRpc2Fzc2VtYmxlcrUbAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI2Rpcy5kaXNhc3NlbWJsZVgBAAAALXRythsAAFgJAAAAb3MuZ2V0dWlkcrcbAAAoamkBAABqagEAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuZ2V0dWlkWAEAAAAtdHK4GwAAWBcAAABlbmNvZGluZ3MuaWRuYS5uYW1lcHJlcHK5GwAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNlbmNvZGluZ3MuaWRuYS5uYW1lcHJlcFgBAAAALXRyuhsAAFgNAAAAc3lzLl9nZXRmcmFtZXK7GwAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNzeXMuX2dldGZyYW1lWAEAAAAtdHK8GwAAWBMAAAB1bml0dGVzdC5za2lwVW5sZXNzcr0bAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3Quc2tpcFVubGVzc1gBAAAALXRyvhsAAFgGAAAAbG9jYWxzcr8bAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2xvY2Fsc1gBAAAALXRywBsAAFgQAAAAc29ja2V0LmluZXRfcHRvbnLBGwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuaW5ldF9wdG9uWAEAAAAtdHLCGwAAWBAAAAByZmM4MjIucGFyc2VhZGRycsMbAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JmYzgyMi5odG1sI3JmYzgyMi5wYXJzZWFkZHJYAQAAAC10csQbAABYFwAAAHN0cmluZ3ByZXAuaW5fdGFibGVfYzIycsUbAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZ3ByZXAuaHRtbCNzdHJpbmdwcmVwLmluX3RhYmxlX2MyMlgBAAAALXRyxhsAAFgVAAAAZW1haWwudXRpbHMubWt0aW1lX3R6cscbAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLnV0aWxzLmh0bWwjZW1haWwudXRpbHMubWt0aW1lX3R6WAEAAAAtdHLIGwAAWBIAAABnZXR0ZXh0LnRleHRkb21haW5yyRsAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2V0dGV4dC5odG1sI2dldHRleHQudGV4dGRvbWFpblgBAAAALXRyyhsAAFgGAAAAZmlsdGVycssbAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2ZpbHRlclgBAAAALXRyzBsAAFgLAAAAZmNudGwubG9ja2ZyzRsAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmNudGwuaHRtbCNmY250bC5sb2NrZlgBAAAALXRyzhsAAFgaAAAAdHVydGxlLnNldHdvcmxkY29vcmRpbmF0ZXNyzxsAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnNldHdvcmxkY29vcmRpbmF0ZXNYAQAAAC10ctAbAABYEAAAAG9zLnBhdGguZ2V0YXRpbWVy0RsAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MucGF0aC5odG1sI29zLnBhdGguZ2V0YXRpbWVYAQAAAC10ctIbAABYEAAAAGJpbmFzY2lpLmIyYV9ocXhy0xsAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmluYXNjaWkuaHRtbCNiaW5hc2NpaS5iMmFfaHF4WAEAAAAtdHLUGwAAWBQAAAB0aHJlYWRpbmcuc2V0cHJvZmlsZXLVGwAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuc2V0cHJvZmlsZVgBAAAALXRy1hsAAFgOAAAAYnoyLmRlY29tcHJlc3Ny1xsAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYnoyLmh0bWwjYnoyLmRlY29tcHJlc3NYAQAAAC10ctgbAABYEAAAAHNvY2tldC5pbmV0X2F0b25y2RsAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LmluZXRfYXRvblgBAAAALXRy2hsAAFgPAAAAb3BlcmF0b3IucmVwZWF0ctsbAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IucmVwZWF0WAEAAAAtdHLcGwAAWAkAAABvcy5zZXRnaWRy3RsAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5zZXRnaWRYAQAAAC10ct4bAABYDQAAAGJpbmhleC5oZXhiaW5y3xsAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmluaGV4Lmh0bWwjYmluaGV4LmhleGJpblgBAAAALXRy4BsAAFgKAAAAY21hdGgucmVjdHLhGwAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jbWF0aC5odG1sI2NtYXRoLnJlY3RYAQAAAC10cuIbAABYEQAAAGN1cnNlcy51bmdldG1vdXNlcuMbAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy51bmdldG1vdXNlWAEAAAAtdHLkGwAAWAgAAABvcy5tYWpvcnLlGwAAKGppAQAAamoBAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLm1ham9yWAEAAAAtdHLmGwAAWBoAAABzeXNjb25maWcuZ2V0X3NjaGVtZV9uYW1lc3LnGwAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXNjb25maWcuaHRtbCNzeXNjb25maWcuZ2V0X3NjaGVtZV9uYW1lc1gBAAAALXRy6BsAAFgNAAAAc3RyaW5nLmxzdHJpcHLpGwAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNzdHJpbmcubHN0cmlwWAEAAAAtdHLqGwAAWBQAAAB0cmFjZWJhY2suZXh0cmFjdF90YnLrGwAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90cmFjZWJhY2suaHRtbCN0cmFjZWJhY2suZXh0cmFjdF90YlgBAAAALXRy7BsAAFgQAAAAbG9jYWxlLmdldGxvY2FsZXLtGwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUuZ2V0bG9jYWxlWAEAAAAtdHLuGwAAWBYAAABzeXMuc2V0ZGVmYXVsdGVuY29kaW5ncu8bAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5zZXRkZWZhdWx0ZW5jb2RpbmdYAQAAAC10cvAbAABYCQAAAG9zLmdldHNpZHLxGwAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLmdldHNpZFgBAAAALXRy8hsAAFgNAAAAdHVydGxlLnVwZGF0ZXLzGwAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUudXBkYXRlWAEAAAAtdHL0GwAAWA8AAABpbXAuaW5pdF9mcm96ZW5y9RsAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1wLmh0bWwjaW1wLmluaXRfZnJvemVuWAEAAAAtdHL2GwAAWAgAAAByZS5zcGxpdHL3GwAAKGppAQAAamoBAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sI3JlLnNwbGl0WAEAAAAtdHL4GwAAWBIAAABpbWFnZW9wLmdyZXkyMmdyZXly+RsAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hZ2VvcC5odG1sI2ltYWdlb3AuZ3JleTIyZ3JleVgBAAAALXRy+hsAAFgMAAAAc3RhdC5TX0lTQ0hScvsbAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNfSVNDSFJYAQAAAC10cvwbAABYDwAAAG9wZXJhdG9yLl9fbmVfX3L9GwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9fbmVfX1gBAAAALXRy/hsAAFgSAAAAX3dpbnJlZy5TZXRWYWx1ZUV4cv8bAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLlNldFZhbHVlRXhYAQAAAC10cgAcAABYEAAAAGltcC5nZXRfc3VmZml4ZXNyARwAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1wLmh0bWwjaW1wLmdldF9zdWZmaXhlc1gBAAAALXRyAhwAAFgRAAAAZmlsZWlucHV0Lmlzc3RkaW5yAxwAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmlsZWlucHV0Lmh0bWwjZmlsZWlucHV0Lmlzc3RkaW5YAQAAAC10cgQcAABYCgAAAGNtYXRoLmFzaW5yBRwAAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY21hdGguaHRtbCNjbWF0aC5hc2luWAEAAAAtdHIGHAAAWAkAAABtYXRoLnNxcnRyBxwAAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWF0aC5odG1sI21hdGguc3FydFgBAAAALXRyCBwAAFgSAAAAcmVhZGxpbmUucmVkaXNwbGF5cgkcAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlYWRsaW5lLmh0bWwjcmVhZGxpbmUucmVkaXNwbGF5WAEAAAAtdHIKHAAAWBAAAABhdWRpb29wLmxpbjJ1bGF3cgscAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2F1ZGlvb3AuaHRtbCNhdWRpb29wLmxpbjJ1bGF3WAEAAAAtdHIMHAAAWBQAAABzaWduYWwuc2V0X3dha2V1cF9mZHINHAAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaWduYWwuaHRtbCNzaWduYWwuc2V0X3dha2V1cF9mZFgBAAAALXRyDhwAAFgUAAAAaW1hZ2VvcC5kaXRoZXIyZ3JleTJyDxwAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hZ2VvcC5odG1sI2ltYWdlb3AuZGl0aGVyMmdyZXkyWAEAAAAtdHIQHAAAWA8AAAB0dXJ0bGUuZW5kX3BvbHlyERwAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmVuZF9wb2x5WAEAAAAtdHISHAAAWBIAAABjdHlwZXMuV0lORlVOQ1RZUEVyExwAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLldJTkZVTkNUWVBFWAEAAAAtdHIUHAAAWBQAAABjdXJzZXMuYXNjaWkuaXNzcGFjZXIVHAAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuYXNjaWkuaHRtbCNjdXJzZXMuYXNjaWkuaXNzcGFjZVgBAAAALXRyFhwAAFgQAAAAc3VuYXVkaW9kZXYub3BlbnIXHAAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdW5hdWRpby5odG1sI3N1bmF1ZGlvZGV2Lm9wZW5YAQAAAC10chgcAABYGQAAAHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmdyGRwAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZ1gBAAAALXRyGhwAAFgYAAAAZW1haWwudXRpbHMucGFyc2VkYXRlX3R6chscAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLnV0aWxzLmh0bWwjZW1haWwudXRpbHMucGFyc2VkYXRlX3R6WAEAAAAtdHIcHAAAWAwAAAB0dXJ0bGUud2lkdGhyHRwAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLndpZHRoWAEAAAAtdHIeHAAAWA8AAAB0dXJ0bGUucG9zaXRpb25yHxwAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnBvc2l0aW9uWAEAAAAtdHIgHAAAWA8AAABhdGV4aXQucmVnaXN0ZXJyIRwAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXRleGl0Lmh0bWwjYXRleGl0LnJlZ2lzdGVyWAEAAAAtdHIiHAAAWBcAAABzdHJpbmdwcmVwLmluX3RhYmxlX2MyMXIjHAAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmdwcmVwLmh0bWwjc3RyaW5ncHJlcC5pbl90YWJsZV9jMjFYAQAAAC10ciQcAABYFAAAAGNvcHlfcmVnLmNvbnN0cnVjdG9yciUcAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvcHlfcmVnLmh0bWwjY29weV9yZWcuY29uc3RydWN0b3JYAQAAAC10ciYcAABYCwAAAGN1cnNlcy5ub25sciccAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5ub25sWAEAAAAtdHIoHAAAWA8AAABnZXR0ZXh0Lmluc3RhbGxyKRwAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2V0dGV4dC5odG1sI2dldHRleHQuaW5zdGFsbFgBAAAALXRyKhwAAFgIAAAAbWF0aC5jb3NyKxwAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWF0aC5odG1sI21hdGguY29zWAEAAAAtdHIsHAAAWA8AAABvcy5wYXRoLmxleGlzdHNyLRwAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MucGF0aC5odG1sI29zLnBhdGgubGV4aXN0c1gBAAAALXRyLhwAAFgXAAAAY3Vyc2VzLmNhbl9jaGFuZ2VfY29sb3JyLxwAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLmNhbl9jaGFuZ2VfY29sb3JYAQAAAC10cjAcAABYFgAAAGVtYWlsLnV0aWxzLmZvcm1hdGFkZHJyMRwAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwudXRpbHMuaHRtbCNlbWFpbC51dGlscy5mb3JtYXRhZGRyWAEAAAAtdHIyHAAAWAkAAAB0dXJ0bGUucGRyMxwAAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnBkWAEAAAAtdHI0HAAAWBUAAABwbGF0Zm9ybS5zeXN0ZW1fYWxpYXNyNRwAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGxhdGZvcm0uaHRtbCNwbGF0Zm9ybS5zeXN0ZW1fYWxpYXNYAQAAAC10cjYcAABYCQAAAHR1cnRsZS5wdXI3HAAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUucHVYAQAAAC10cjgcAABYDwAAAGF1ZGlvb3AucmV2ZXJzZXI5HAAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hdWRpb29wLmh0bWwjYXVkaW9vcC5yZXZlcnNlWAEAAAAtdHI6HAAAWAYAAABwZGIucG1yOxwAAChqaQEAAGpqAQAAWDEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGRiLmh0bWwjcGRiLnBtWAEAAAAtdHI8HAAAWBEAAABjdXJzZXMucmVzaXpldGVybXI9HAAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMucmVzaXpldGVybVgBAAAALXRyPhwAAFgRAAAAcGxhdGZvcm0ubGliY192ZXJyPxwAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGxhdGZvcm0uaHRtbCNwbGF0Zm9ybS5saWJjX3ZlclgBAAAALXRyQBwAAFgPAAAAb3BlcmF0b3IuX19vcl9fckEcAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuX19vcl9fWAEAAAAtdHJCHAAAWBQAAABjdXJzZXMuZGVmX3Byb2dfbW9kZXJDHAAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMuZGVmX3Byb2dfbW9kZVgBAAAALXRyRBwAAFgqAAAAZGlzdHV0aWxzLmNjb21waWxlci5nZW5fcHJlcHJvY2Vzc19vcHRpb25zckUcAAAoamkBAABqagEAAFhaAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNjb21waWxlci5nZW5fcHJlcHJvY2Vzc19vcHRpb25zWAEAAAAtdHJGHAAAWA8AAAB0ZXJtaW9zLnRjZmx1c2hyRxwAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGVybWlvcy5odG1sI3Rlcm1pb3MudGNmbHVzaFgBAAAALXRySBwAAFgoAAAAZGlzdHV0aWxzLmNjb21waWxlci5nZXRfZGVmYXVsdF9jb21waWxlcnJJHAAAKGppAQAAamoBAABYWAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jY29tcGlsZXIuZ2V0X2RlZmF1bHRfY29tcGlsZXJYAQAAAC10ckocAABYDgAAAGN0eXBlcy5wb2ludGVyckscAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5wb2ludGVyWAEAAAAtdHJMHAAAWAoAAABvcy5nZXRwcGlkck0cAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuZ2V0cHBpZFgBAAAALXRyThwAAFgHAAAAcmUuc3VibnJPHAAAKGppAQAAamoBAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sI3JlLnN1Ym5YAQAAAC10clAcAABYCwAAAHJlLmZpbmRpdGVyclEcAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlLmh0bWwjcmUuZmluZGl0ZXJYAQAAAC10clIcAABYDwAAAGF1ZGlvb3AubGluMmxpbnJTHAAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hdWRpb29wLmh0bWwjYXVkaW9vcC5saW4ybGluWAEAAAAtdHJUHAAAWBYAAABwa2d1dGlsLml0ZXJfaW1wb3J0ZXJzclUcAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BrZ3V0aWwuaHRtbCNwa2d1dGlsLml0ZXJfaW1wb3J0ZXJzWAEAAAAtdHJWHAAAWBEAAABmaW5kZXJ0b29scy5zbGVlcHJXHAAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWNvc3Rvb2xzLmh0bWwjZmluZGVydG9vbHMuc2xlZXBYAQAAAC10clgcAABYGQAAAGxvZ2dpbmcuY29uZmlnLmZpbGVDb25maWdyWRwAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5jb25maWcuaHRtbCNsb2dnaW5nLmNvbmZpZy5maWxlQ29uZmlnWAEAAAAtdHJaHAAAWA0AAABhdWRpb29wLmNyb3NzclscAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2F1ZGlvb3AuaHRtbCNhdWRpb29wLmNyb3NzWAEAAAAtdHJcHAAAWBAAAAByZmM4MjIubWt0aW1lX3R6cl0cAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JmYzgyMi5odG1sI3JmYzgyMi5ta3RpbWVfdHpYAQAAAC10cl4cAABYCwAAAGN1cnNlcy5iZWVwcl8cAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5iZWVwWAEAAAAtdHJgHAAAWA0AAABzeXMuZ2V0c2l6ZW9mcmEcAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5nZXRzaXplb2ZYAQAAAC10cmIcAABYBwAAAHVuaWNvZGVyYxwAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjdW5pY29kZVgBAAAALXRyZBwAAFgHAAAAbmlzLmNhdHJlHAAAKGppAQAAamoBAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9uaXMuaHRtbCNuaXMuY2F0WAEAAAAtdHJmHAAAWA0AAABwYXJzZXIuaXNleHBycmccAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BhcnNlci5odG1sI3BhcnNlci5pc2V4cHJYAQAAAC10cmgcAABYEAAAAHR1cnRsZS5nZXR0dXJ0bGVyaRwAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmdldHR1cnRsZVgBAAAALXRyahwAAFgUAAAAc3lzLmdldGNoZWNraW50ZXJ2YWxyaxwAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmdldGNoZWNraW50ZXJ2YWxYAQAAAC10cmwcAABYCQAAAGd6aXAub3BlbnJtHAAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nemlwLmh0bWwjZ3ppcC5vcGVuWAEAAAAtdHJuHAAAWAgAAABmbC5xdGVzdHJvHAAAKGppAQAAamoBAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbC5odG1sI2ZsLnF0ZXN0WAEAAAAtdHJwHAAAWBYAAABlbWFpbC51dGlscy5tYWtlX21zZ2lkcnEcAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLnV0aWxzLmh0bWwjZW1haWwudXRpbHMubWFrZV9tc2dpZFgBAAAALXRychwAAFgMAAAAc3RyaW5nLmluZGV4cnMcAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZy5odG1sI3N0cmluZy5pbmRleFgBAAAALXRydBwAAFgJAAAAb3Muc2V0dWlkcnUcAAAoamkBAABqagEAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3Muc2V0dWlkWAEAAAAtdHJ2HAAAWBUAAABmaWxlaW5wdXQuaXNmaXJzdGxpbmVydxwAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmlsZWlucHV0Lmh0bWwjZmlsZWlucHV0LmlzZmlyc3RsaW5lWAEAAAAtdHJ4HAAAWBkAAABkaXN0dXRpbHMudXRpbC5zdWJzdF92YXJzcnkcAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLnV0aWwuc3Vic3RfdmFyc1gBAAAALXRyehwAAFgWAAAAcmVhZGxpbmUuc2V0X2NvbXBsZXRlcnJ7HAAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZWFkbGluZS5odG1sI3JlYWRsaW5lLnNldF9jb21wbGV0ZXJYAQAAAC10cnwcAABYDAAAAHNzbC5SQU5EX2VnZHJ9HAAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuUkFORF9lZ2RYAQAAAC10cn4cAABYGAAAAHVuaXR0ZXN0LmV4cGVjdGVkRmFpbHVyZXJ/HAAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LmV4cGVjdGVkRmFpbHVyZVgBAAAALXRygBwAAFgRAAAAb3BlcmF0b3IuY29udGFpbnNygRwAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5jb250YWluc1gBAAAALXRyghwAAFgMAAAAYWwubmV3Y29uZmlncoMcAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FsLmh0bWwjYWwubmV3Y29uZmlnWAEAAAAtdHKEHAAAWBYAAABjb2xsZWN0aW9ucy5uYW1lZHR1cGxlcoUcAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMubmFtZWR0dXBsZVgBAAAALXRyhhwAAFgeAAAAZGlzdHV0aWxzLmZpbGVfdXRpbC53cml0ZV9maWxlcoccAAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmZpbGVfdXRpbC53cml0ZV9maWxlWAEAAAAtdHKIHAAAWBQAAABweWNsYnIucmVhZG1vZHVsZV9leHKJHAAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWNsYnIuaHRtbCNweWNsYnIucmVhZG1vZHVsZV9leFgBAAAALXRyihwAAFgRAAAAbGluZWNhY2hlLmdldGxpbmVyixwAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbGluZWNhY2hlLmh0bWwjbGluZWNhY2hlLmdldGxpbmVYAQAAAC10cowcAABYCQAAAG9zLnN5c3RlbXKNHAAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLnN5c3RlbVgBAAAALXRyjhwAAFgXAAAAc29ja2V0LmdldGhvc3RieW5hbWVfZXhyjxwAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LmdldGhvc3RieW5hbWVfZXhYAQAAAC10cpAcAABYCQAAAG9zLmZjaG1vZHKRHAAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLmZjaG1vZFgBAAAALXRykhwAAFgKAAAAbWF0aC5mbG9vcnKTHAAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5mbG9vclgBAAAALXRylBwAAFgQAAAAbXNpbGliLkZDSUNyZWF0ZXKVHAAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuRkNJQ3JlYXRlWAEAAAAtdHKWHAAAWBEAAABvcGVyYXRvci5fX2lkaXZfX3KXHAAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9faWRpdl9fWAEAAAAtdHKYHAAAWA8AAABzeXNsb2cuY2xvc2Vsb2dymRwAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzbG9nLmh0bWwjc3lzbG9nLmNsb3NlbG9nWAEAAAAtdHKaHAAAWBYAAABjdXJzZXMucGFuZWwudG9wX3BhbmVscpscAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5wYW5lbC5odG1sI2N1cnNlcy5wYW5lbC50b3BfcGFuZWxYAQAAAC10cpwcAABYEwAAAG9zLnN0YXRfZmxvYXRfdGltZXNynRwAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5zdGF0X2Zsb2F0X3RpbWVzWAEAAAAtdHKeHAAAWA0AAABtc3ZjcnQuZ2V0Y2hlcp8cAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zdmNydC5odG1sI21zdmNydC5nZXRjaGVYAQAAAC10cqAcAABYCwAAAGljLnBhcnNldXJscqEcAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ljLmh0bWwjaWMucGFyc2V1cmxYAQAAAC10cqIcAABYEQAAAGltcC5sb2FkX2NvbXBpbGVkcqMcAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltcC5odG1sI2ltcC5sb2FkX2NvbXBpbGVkWAEAAAAtdHKkHAAAWBwAAAB1bmljb2RlZGF0YS5lYXN0X2FzaWFuX3dpZHRocqUcAAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaWNvZGVkYXRhLmh0bWwjdW5pY29kZWRhdGEuZWFzdF9hc2lhbl93aWR0aFgBAAAALXRyphwAAFgVAAAAcGxhdGZvcm0ucHl0aG9uX2J1aWxkcqccAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BsYXRmb3JtLmh0bWwjcGxhdGZvcm0ucHl0aG9uX2J1aWxkWAEAAAAtdHKoHAAAWBAAAAByYW5kb20ucmFuZHJhbmdlcqkcAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JhbmRvbS5odG1sI3JhbmRvbS5yYW5kcmFuZ2VYAQAAAC10cqocAABYEAAAAGN0eXBlcy5hbGlnbm1lbnRyqxwAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLmFsaWdubWVudFgBAAAALXRyrBwAAFgMAAAAb3MuZ2V0cmVzdWlkcq0cAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuZ2V0cmVzdWlkWAEAAAAtdHKuHAAAWAwAAABvcy5wYXRoLmpvaW5yrxwAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MucGF0aC5odG1sI29zLnBhdGguam9pblgBAAAALXRysBwAAFgGAAAAdW5pY2hycrEcAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3VuaWNoclgBAAAALXRyshwAAFgLAAAAcGRiLnJ1bmNhbGxysxwAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGRiLmh0bWwjcGRiLnJ1bmNhbGxYAQAAAC10crQcAABYFQAAAEVhc3lEaWFsb2dzLkFza0ZvbGRlcnK1HAAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lYXN5ZGlhbG9ncy5odG1sI0Vhc3lEaWFsb2dzLkFza0ZvbGRlclgBAAAALXRythwAAFgPAAAAY3JlYXRlX3Nob3J0Y3V0crccAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYnVpbHRkaXN0Lmh0bWwjY3JlYXRlX3Nob3J0Y3V0WAEAAAAtdHK4HAAAWAkAAAByZXByLnJlcHJyuRwAAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVwci5odG1sI3JlcHIucmVwclgBAAAALXRyuhwAAFgKAAAAZmwucWRldmljZXK7HAAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbC5odG1sI2ZsLnFkZXZpY2VYAQAAAC10crwcAABYDQAAAHN0YXQuU19JU0ZJRk9yvRwAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU19JU0ZJRk9YAQAAAC10cr4cAABYEgAAAG5ldy5pbnN0YW5jZW1ldGhvZHK/HAAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9uZXcuaHRtbCNuZXcuaW5zdGFuY2VtZXRob2RYAQAAAC10csAcAABYLAAAAHJlYWRsaW5lLnNldF9jb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rcsEcAAAoamkBAABqagEAAFhcAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlYWRsaW5lLmh0bWwjcmVhZGxpbmUuc2V0X2NvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2tYAQAAAC10csIcAABYEwAAAGJhc2U2NC5lbmNvZGVzdHJpbmdywxwAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmFzZTY0Lmh0bWwjYmFzZTY0LmVuY29kZXN0cmluZ1gBAAAALXRyxBwAAFgQAAAAY2FsZW5kYXIucHJtb250aHLFHAAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLnBybW9udGhYAQAAAC10csYcAABYEAAAAGJpbmFzY2lpLmEyYl9oZXhyxxwAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmluYXNjaWkuaHRtbCNiaW5hc2NpaS5hMmJfaGV4WAEAAAAtdHLIHAAAWAwAAABmbC51bnFkZXZpY2VyyRwAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmwuaHRtbCNmbC51bnFkZXZpY2VYAQAAAC10csocAABYEwAAAGl0ZXJ0b29scy50YWtld2hpbGVyyxwAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaXRlcnRvb2xzLmh0bWwjaXRlcnRvb2xzLnRha2V3aGlsZVgBAAAALXRyzBwAAFgcAAAAY3R5cGVzLmNyZWF0ZV91bmljb2RlX2J1ZmZlcnLNHAAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuY3JlYXRlX3VuaWNvZGVfYnVmZmVyWAEAAAAtdHLOHAAAWBEAAABsb2NhbGUubG9jYWxlY29udnLPHAAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUubG9jYWxlY29udlgBAAAALXRy0BwAAFgPAAAAY3Vyc2VzLmN1cnNfc2V0ctEcAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5jdXJzX3NldFgBAAAALXRy0hwAAFgXAAAAdGhyZWFkaW5nLmN1cnJlbnRUaHJlYWRy0xwAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLmN1cnJlbnRUaHJlYWRYAQAAAC10ctQcAABYCwAAAGNyeXB0LmNyeXB0ctUcAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NyeXB0Lmh0bWwjY3J5cHQuY3J5cHRYAQAAAC10ctYcAABYEwAAAHdlYmJyb3dzZXIucmVnaXN0ZXJy1xwAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2ViYnJvd3Nlci5odG1sI3dlYmJyb3dzZXIucmVnaXN0ZXJYAQAAAC10ctgcAABYCwAAAGF1ZGlvb3AubXVsctkcAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2F1ZGlvb3AuaHRtbCNhdWRpb29wLm11bFgBAAAALXRy2hwAAFgPAAAAZmlsZWlucHV0LmlucHV0ctscAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZpbGVpbnB1dC5odG1sI2ZpbGVpbnB1dC5pbnB1dFgBAAAALXRy3BwAAFgIAAAAb3MudW5hbWVy3RwAAChqaQEAAGpqAQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy51bmFtZVgBAAAALXRy3hwAAFgUAAAAdHVydGxlLnNldHVuZG9idWZmZXJy3xwAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnNldHVuZG9idWZmZXJYAQAAAC10cuAcAABYHAAAAGNvZGVjcy5nZXRpbmNyZW1lbnRhbGVuY29kZXJy4RwAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLmdldGluY3JlbWVudGFsZW5jb2RlclgBAAAALXRy4hwAAFgIAAAAY2FsbGFibGVy4xwAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjY2FsbGFibGVYAQAAAC10cuQcAABYCgAAAG1hdGguYXRhbjJy5RwAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWF0aC5odG1sI21hdGguYXRhbjJYAQAAAC10cuYcAABYDQAAAHRpbWUuc3RycHRpbWVy5xwAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGltZS5odG1sI3RpbWUuc3RycHRpbWVYAQAAAC10cugcAABYCwAAAG1hdGgubGdhbW1hcukcAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hdGguaHRtbCNtYXRoLmxnYW1tYVgBAAAALXRy6hwAAFgJAAAAZGlzLmRpc2NvcuscAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI2Rpcy5kaXNjb1gBAAAALXRy7BwAAFgVAAAAc29ja2V0LmdldHByb3RvYnluYW1lcu0cAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5nZXRwcm90b2J5bmFtZVgBAAAALXRy7hwAAFgSAAAAc3lzLmdldGRsb3BlbmZsYWdzcu8cAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5nZXRkbG9wZW5mbGFnc1gBAAAALXRy8BwAAFgaAAAAZ2Vuc3VpdGVtb2R1bGUucHJvY2Vzc2ZpbGVy8RwAAChqaQEAAGpqAQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2Vuc3VpdGVtb2R1bGUuaHRtbCNnZW5zdWl0ZW1vZHVsZS5wcm9jZXNzZmlsZVgBAAAALXRy8hwAAFgNAAAAd2Vha3JlZi5wcm94eXLzHAAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93ZWFrcmVmLmh0bWwjd2Vha3JlZi5wcm94eVgBAAAALXRy9BwAAFgRAAAAYXN0LmNvcHlfbG9jYXRpb25y9RwAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXN0Lmh0bWwjYXN0LmNvcHlfbG9jYXRpb25YAQAAAC10cvYcAABYIAAAAGRvY3Rlc3Quc2V0X3VuaXR0ZXN0X3JlcG9ydGZsYWdzcvccAAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LnNldF91bml0dGVzdF9yZXBvcnRmbGFnc1gBAAAALXRy+BwAAFgiAAAAc3FsaXRlMy5lbmFibGVfY2FsbGJhY2tfdHJhY2ViYWNrc3L5HAAAKGppAQAAamoBAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy5lbmFibGVfY2FsbGJhY2tfdHJhY2ViYWNrc1gBAAAALXRy+hwAAFgKAAAAbWF0aC5hdGFuaHL7HAAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5hdGFuaFgBAAAALXRy/BwAAFgWAAAAdGVtcGZpbGUuZ2V0dGVtcHByZWZpeHL9HAAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZW1wZmlsZS5odG1sI3RlbXBmaWxlLmdldHRlbXBwcmVmaXhYAQAAAC10cv4cAABYEwAAAGNnaS5wcmludF9kaXJlY3Rvcnly/xwAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2dpLmh0bWwjY2dpLnByaW50X2RpcmVjdG9yeVgBAAAALXRyAB0AAFgRAAAAdHVydGxlLnNldGhlYWRpbmdyAR0AAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnNldGhlYWRpbmdYAQAAAC10cgIdAABYEQAAAHhtbHJwY2xpYi5ib29sZWFucgMdAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbHJwY2xpYi5odG1sI3htbHJwY2xpYi5ib29sZWFuWAEAAAAtdHIEHQAAWA0AAAByYW5kb20uY2hvaWNlcgUdAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JhbmRvbS5odG1sI3JhbmRvbS5jaG9pY2VYAQAAAC10cgYdAABYDQAAAHR1cnRsZS5saXN0ZW5yBx0AAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmxpc3RlblgBAAAALXRyCB0AAFgZAAAAZGlmZmxpYi5nZXRfY2xvc2VfbWF0Y2hlc3IJHQAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaWZmbGliLmh0bWwjZGlmZmxpYi5nZXRfY2xvc2VfbWF0Y2hlc1gBAAAALXRyCh0AAFgMAAAAYWwuZ2V0cGFyYW1zcgsdAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FsLmh0bWwjYWwuZ2V0cGFyYW1zWAEAAAAtdHIMHQAAWA4AAABkaXJjYWNoZS5yZXNldHINHQAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXJjYWNoZS5odG1sI2RpcmNhY2hlLnJlc2V0WAEAAAAtdHIOHQAAWBcAAABpbXBvcnRsaWIuaW1wb3J0X21vZHVsZXIPHQAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbXBvcnRsaWIuaHRtbCNpbXBvcnRsaWIuaW1wb3J0X21vZHVsZVgBAAAALXRyEB0AAFgRAAAAbG9jYWxlLnRleHRkb21haW5yER0AAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLnRleHRkb21haW5YAQAAAC10chIdAABYCQAAAGNvcHkuY29weXITHQAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb3B5Lmh0bWwjY29weS5jb3B5WAEAAAAtdHIUHQAAWBoAAABpbWFwbGliLkludGVybmFsZGF0ZTJ0dXBsZXIVHQAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JbnRlcm5hbGRhdGUydHVwbGVYAQAAAC10chYdAABYEQAAAGVtYWlsLnV0aWxzLnF1b3RlchcdAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLnV0aWxzLmh0bWwjZW1haWwudXRpbHMucXVvdGVYAQAAAC10chgdAABYDAAAAHB3ZC5nZXRwd2FsbHIZHQAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wd2QuaHRtbCNwd2QuZ2V0cHdhbGxYAQAAAC10chodAABYFQAAAHN1YnByb2Nlc3MuY2hlY2tfY2FsbHIbHQAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5jaGVja19jYWxsWAEAAAAtdHIcHQAAWBAAAABvcGVyYXRvci5fX21vZF9fch0dAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuX19tb2RfX1gBAAAALXRyHh0AAFgQAAAAZmlsZWlucHV0LmxpbmVub3IfHQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9maWxlaW5wdXQuaHRtbCNmaWxlaW5wdXQubGluZW5vWAEAAAAtdHIgHQAAWA8AAABsb2dnaW5nLndhcm5pbmdyIR0AAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcud2FybmluZ1gBAAAALXRyIh0AAFgTAAAAYmluYXNjaWkuYjJhX2Jhc2U2NHIjHQAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iaW5hc2NpaS5odG1sI2JpbmFzY2lpLmIyYV9iYXNlNjRYAQAAAC10ciQdAABYFQAAAGZwZWN0bC50dXJub2ZmX3NpZ2ZwZXIlHQAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcGVjdGwuaHRtbCNmcGVjdGwudHVybm9mZl9zaWdmcGVYAQAAAC10ciYdAABYDgAAAHN5c2xvZy5vcGVubG9ncicdAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5c2xvZy5odG1sI3N5c2xvZy5vcGVubG9nWAEAAAAtdHIoHQAAWCIAAABkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9jb25maWdfdmFycikdAAAoamkBAABqagEAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhclgBAAAALXRyKh0AAFgSAAAAc3lzY29uZmlnLmdldF9wYXRocisdAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5c2NvbmZpZy5odG1sI3N5c2NvbmZpZy5nZXRfcGF0aFgBAAAALXRyLB0AAFgTAAAAb3BlcmF0b3IuX19pbnZlcnRfX3ItHQAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9faW52ZXJ0X19YAQAAAC10ci4dAABYEAAAAHN5cy5jYWxsX3RyYWNpbmdyLx0AAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmNhbGxfdHJhY2luZ1gBAAAALXRyMB0AAFgIAAAAcHR5LmZvcmtyMR0AAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHR5Lmh0bWwjcHR5LmZvcmtYAQAAAC10cjIdAABYDwAAAGNvZGVjcy5yZWdpc3RlcnIzHQAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MucmVnaXN0ZXJYAQAAAC10cjQdAABYDQAAAGN1cnNlcy5maWx0ZXJyNR0AAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLmZpbHRlclgBAAAALXRyNh0AAFgRAAAAZ2V0dGV4dC5sZGdldHRleHRyNx0AAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2V0dGV4dC5odG1sI2dldHRleHQubGRnZXR0ZXh0WAEAAAAtdHI4HQAAWBMAAAByZmM4MjIucGFyc2VkYXRlX3R6cjkdAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JmYzgyMi5odG1sI3JmYzgyMi5wYXJzZWRhdGVfdHpYAQAAAC10cjodAABYDgAAAHBwcmludC5wZm9ybWF0cjsdAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BwcmludC5odG1sI3BwcmludC5wZm9ybWF0WAEAAAAtdHI8HQAAWA8AAABwaWNrbGV0b29scy5kaXNyPR0AAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGlja2xldG9vbHMuaHRtbCNwaWNrbGV0b29scy5kaXNYAQAAAC10cj4dAABYEQAAAGRvY3Rlc3QuZGVidWdfc3Jjcj8dAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LmRlYnVnX3NyY1gBAAAALXRyQB0AAFgFAAAAdHVwbGVyQR0AAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjdHVwbGVYAQAAAC10ckIdAABYDQAAAHhtbC5zYXgucGFyc2VyQx0AAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5odG1sI3htbC5zYXgucGFyc2VYAQAAAC10ckQdAABYFAAAAGZpbGVpbnB1dC5maWxlbGluZW5vckUdAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZpbGVpbnB1dC5odG1sI2ZpbGVpbnB1dC5maWxlbGluZW5vWAEAAAAtdHJGHQAAWA4AAAB3ZWJicm93c2VyLmdldHJHHQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93ZWJicm93c2VyLmh0bWwjd2ViYnJvd3Nlci5nZXRYAQAAAC10ckgdAABYCQAAAHR1cnRsZS5mZHJJHQAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuZmRYAQAAAC10ckodAABYEwAAAG1zaWxpYi5DcmVhdGVSZWNvcmRySx0AAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLkNyZWF0ZVJlY29yZFgBAAAALXRyTB0AAFgKAAAAbWF0aC5sb2cxMHJNHQAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5sb2cxMFgBAAAALXRyTh0AAFgIAAAAb3MudGltZXNyTx0AAChqaQEAAGpqAQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy50aW1lc1gBAAAALXRyUB0AAFgbAAAAeG1sLmRvbS5wdWxsZG9tLnBhcnNlU3RyaW5nclEdAAAoamkBAABqagEAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20ucHVsbGRvbS5odG1sI3htbC5kb20ucHVsbGRvbS5wYXJzZVN0cmluZ1gBAAAALXRyUh0AAFgSAAAAcmFuZG9tLmV4cG92YXJpYXRlclMdAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JhbmRvbS5odG1sI3JhbmRvbS5leHBvdmFyaWF0ZVgBAAAALXRyVB0AAFgUAAAAY3Vyc2VzLmFzY2lpLmlzYWxwaGFyVR0AAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmFzY2lpLmh0bWwjY3Vyc2VzLmFzY2lpLmlzYWxwaGFYAQAAAC10clYdAABYFgAAAGNvbXBpbGVhbGwuY29tcGlsZV9kaXJyVx0AAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29tcGlsZWFsbC5odG1sI2NvbXBpbGVhbGwuY29tcGlsZV9kaXJYAQAAAC10clgdAABYDAAAAG9zLnRjZ2V0cGdycHJZHQAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLnRjZ2V0cGdycFgBAAAALXRyWh0AAFgTAAAAd2Vha3JlZi5nZXR3ZWFrcmVmc3JbHQAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93ZWFrcmVmLmh0bWwjd2Vha3JlZi5nZXR3ZWFrcmVmc1gBAAAALXRyXB0AAFgRAAAAY3R5cGVzLndzdHJpbmdfYXRyXR0AAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLndzdHJpbmdfYXRYAQAAAC10cl4dAABYGwAAAHJlYWRsaW5lLnNldF9wcmVfaW5wdXRfaG9va3JfHQAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZWFkbGluZS5odG1sI3JlYWRsaW5lLnNldF9wcmVfaW5wdXRfaG9va1gBAAAALXRyYB0AAFgTAAAAY29sb3JzeXMuaHN2X3RvX3JnYnJhHQAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2xvcnN5cy5odG1sI2NvbG9yc3lzLmhzdl90b19yZ2JYAQAAAC10cmIdAABYEwAAAHVybHBhcnNlLnVybHVuc3BsaXRyYx0AAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJscGFyc2UuaHRtbCN1cmxwYXJzZS51cmx1bnNwbGl0WAEAAAAtdHJkHQAAWCAAAAB0ZXN0LnN1cHBvcnQuY2hlY2tfcHkza193YXJuaW5nc3JlHQAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3NYAQAAAC10cmYdAABYFAAAAGNvZGUuY29tcGlsZV9jb21tYW5kcmcdAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGUuaHRtbCNjb2RlLmNvbXBpbGVfY29tbWFuZFgBAAAALXRyaB0AAFgYAAAAY3Vyc2VzLnRleHRwYWQucmVjdGFuZ2xlcmkdAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy50ZXh0cGFkLnJlY3RhbmdsZVgBAAAALXRyah0AAFgPAAAAdGVtcGZpbGUubWt0ZW1wcmsdAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RlbXBmaWxlLmh0bWwjdGVtcGZpbGUubWt0ZW1wWAEAAAAtdHJsHQAAWAoAAABtYXRoLmxvZzFwcm0dAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hdGguaHRtbCNtYXRoLmxvZzFwWAEAAAAtdHJuHQAAWA4AAABhbC5xdWVyeXBhcmFtc3JvHQAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hbC5odG1sI2FsLnF1ZXJ5cGFyYW1zWAEAAAAtdHJwHQAAWA8AAABvcy5wYXRoLmFic3BhdGhycR0AAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MucGF0aC5odG1sI29zLnBhdGguYWJzcGF0aFgBAAAALXRych0AAFgSAAAAdHVydGxlLmNsZWFyc3RhbXBzcnMdAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5jbGVhcnN0YW1wc1gBAAAALXRydB0AAFgNAAAAb3MuaW5pdGdyb3Vwc3J1HQAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLmluaXRncm91cHNYAQAAAC10cnYdAABYCgAAAG1hdGguZXhwbTFydx0AAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWF0aC5odG1sI21hdGguZXhwbTFYAQAAAC10cngdAABYDgAAAG9wZXJhdG9yLmluZGV4cnkdAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuaW5kZXhYAQAAAC10cnodAABYIAAAAHRlc3Quc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlcnsdAAAoamkBAABqagEAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZVgBAAAALXRyfB0AAFgLAAAAcGlja2xlLmxvYWRyfR0AAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGlja2xlLmh0bWwjcGlja2xlLmxvYWRYAQAAAC10cn4dAABYGwAAAGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZ3J/HQAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmdYAQAAAC10coAdAABYFAAAAGNzdi5maWVsZF9zaXplX2xpbWl0coEdAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nzdi5odG1sI2Nzdi5maWVsZF9zaXplX2xpbWl0WAEAAAAtdHKCHQAAWA8AAABvcGVyYXRvci5fX2d0X19ygx0AAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX2d0X19YAQAAAC10coQdAABYDQAAAG9wZXJhdG9yLmlwb3dyhR0AAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5pcG93WAEAAAAtdHKGHQAAWCMAAABkaXN0dXRpbHMuYXJjaGl2ZV91dGlsLm1ha2VfemlwZmlsZXKHHQAAKGppAQAAamoBAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5hcmNoaXZlX3V0aWwubWFrZV96aXBmaWxlWAEAAAAtdHKIHQAAWBMAAABiYXNlNjQuZGVjb2Rlc3RyaW5ncokdAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Jhc2U2NC5odG1sI2Jhc2U2NC5kZWNvZGVzdHJpbmdYAQAAAC10coodAABYJQAAAG11bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMuUmF3VmFsdWVyix0AAChqaQEAAGpqAQAAWFwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLnNoYXJlZGN0eXBlcy5SYXdWYWx1ZVgBAAAALXRyjB0AAFgZAAAAdW5pY29kZWRhdGEuZGVjb21wb3NpdGlvbnKNHQAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bmljb2RlZGF0YS5odG1sI3VuaWNvZGVkYXRhLmRlY29tcG9zaXRpb25YAQAAAC10co4dAABYJwAAAGl0ZXJ0b29scy5jb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudHKPHQAAKGppAQAAamoBAABYWAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pdGVydG9vbHMuaHRtbCNpdGVydG9vbHMuY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnRYAQAAAC10cpAdAABYCgAAAGpzb24uZHVtcHNykR0AAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvanNvbi5odG1sI2pzb24uZHVtcHNYAQAAAC10cpIdAABYDQAAAHR1cnRsZS50cmFjZXJykx0AAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnRyYWNlclgBAAAALXRylB0AAFgQAAAAb3MucGF0aC5iYXNlbmFtZXKVHQAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5wYXRoLmh0bWwjb3MucGF0aC5iYXNlbmFtZVgBAAAALXRylh0AAFgNAAAAZ2RibS5maXJzdGtleXKXHQAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZGJtLmh0bWwjZ2RibS5maXJzdGtleVgBAAAALXRymB0AAFgXAAAAY3Vyc2VzLnJlc2V0X3NoZWxsX21vZGVymR0AAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLnJlc2V0X3NoZWxsX21vZGVYAQAAAC10cpodAABYCAAAAGNnaS50ZXN0cpsdAAAoamkBAABqagEAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NnaS5odG1sI2NnaS50ZXN0WAEAAAAtdHKcHQAAWA8AAAB6bGliLmRlY29tcHJlc3NynR0AAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemxpYi5odG1sI3psaWIuZGVjb21wcmVzc1gBAAAALXRynh0AAFgdAAAAcmVhZGxpbmUuc2V0X2NvbXBsZXRlcl9kZWxpbXNynx0AAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVhZGxpbmUuaHRtbCNyZWFkbGluZS5zZXRfY29tcGxldGVyX2RlbGltc1gBAAAALXRyoB0AAFgKAAAAY21hdGguYXRhbnKhHQAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jbWF0aC5odG1sI2NtYXRoLmF0YW5YAQAAAC10cqIdAABYHAAAAGNvZGVjcy5nZXRpbmNyZW1lbnRhbGRlY29kZXJyox0AAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLmdldGluY3JlbWVudGFsZGVjb2RlclgBAAAALXRypB0AAFgMAAAAYnNkZGIucm5vcGVucqUdAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JzZGRiLmh0bWwjYnNkZGIucm5vcGVuWAEAAAAtdHKmHQAAWAwAAABvcGVyYXRvci5kaXZypx0AAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5kaXZYAQAAAC10cqgdAABYCQAAAG9zLmdldHBpZHKpHQAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLmdldHBpZFgBAAAALXRyqh0AAFgSAAAAdGFyZmlsZS5pc190YXJmaWxlcqsdAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLmlzX3RhcmZpbGVYAQAAAC10cqwdAABYEAAAAG9wZXJhdG9yLmNvdW50T2ZyrR0AAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5jb3VudE9mWAEAAAAtdHKuHQAAWA0AAABzZWxlY3Quc2VsZWN0cq8dAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NlbGVjdC5odG1sI3NlbGVjdC5zZWxlY3RYAQAAAC10crAdAABYBgAAAGZvcm1hdHKxHQAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNmb3JtYXRYAQAAAC10crIdAABYDAAAAHR1cnRsZS50aXRsZXKzHQAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUudGl0bGVYAQAAAC10crQdAABYDAAAAG9wZXJhdG9yLm5lZ3K1HQAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLm5lZ1gBAAAALXRyth0AAFgMAAAAdHVydGxlLnJlc2V0crcdAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5yZXNldFgBAAAALXRyuB0AAFgWAAAAaW5zcGVjdC5nZXRzb3VyY2VsaW5lc3K5HQAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5nZXRzb3VyY2VsaW5lc1gBAAAALXRyuh0AAFgWAAAAaXRlcnRvb2xzLmlmaWx0ZXJmYWxzZXK7HQAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pdGVydG9vbHMuaHRtbCNpdGVydG9vbHMuaWZpbHRlcmZhbHNlWAEAAAAtdHK8HQAAWBUAAABzeXMuZ2V0cmVjdXJzaW9ubGltaXRyvR0AAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmdldHJlY3Vyc2lvbmxpbWl0WAEAAAAtdHK+HQAAWAQAAABoYXNocr8dAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2hhc2hYAQAAAC10csAdAABYGgAAAEVhc3lEaWFsb2dzLkFza1llc05vQ2FuY2VscsEdAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vhc3lkaWFsb2dzLmh0bWwjRWFzeURpYWxvZ3MuQXNrWWVzTm9DYW5jZWxYAQAAAC10csIdAABYGAAAAHJlYWRsaW5lLmdldF9saW5lX2J1ZmZlcnLDHQAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZWFkbGluZS5odG1sI3JlYWRsaW5lLmdldF9saW5lX2J1ZmZlclgBAAAALXRyxB0AAFgTAAAAX3dpbnJlZy5EZWxldGVLZXlFeHLFHQAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjX3dpbnJlZy5EZWxldGVLZXlFeFgBAAAALXRyxh0AAFgKAAAAdHVydGxlLnBlbnLHHQAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUucGVuWAEAAAAtdHLIHQAAWA0AAABzdGF0LlNfSVNTT0NLcskdAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNfSVNTT0NLWAEAAAAtdHLKHQAAWBsAAABwbGF0Zm9ybS5saW51eF9kaXN0cmlidXRpb25yyx0AAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGxhdGZvcm0uaHRtbCNwbGF0Zm9ybS5saW51eF9kaXN0cmlidXRpb25YAQAAAC10cswdAABYFgAAAHdhcm5pbmdzLnJlc2V0d2FybmluZ3NyzR0AAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2FybmluZ3MuaHRtbCN3YXJuaW5ncy5yZXNldHdhcm5pbmdzWAEAAAAtdHLOHQAAWAsAAAB0dXJ0bGUuc2V0eXLPHQAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuc2V0eVgBAAAALXRy0B0AAFgLAAAAdHVydGxlLnNldHhy0R0AAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnNldHhYAQAAAC10ctIdAABYEQAAAHR1cnRsZS5iZWdpbl9wb2x5ctMdAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5iZWdpbl9wb2x5WAEAAAAtdHLUHQAAWBIAAABjb21waWxlci5wYXJzZUZpbGVy1R0AAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29tcGlsZXIuaHRtbCNjb21waWxlci5wYXJzZUZpbGVYAQAAAC10ctYdAABYCgAAAG9zLmdldGVnaWRy1x0AAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5nZXRlZ2lkWAEAAAAtdHLYHQAAWBMAAABiaXNlY3QuYmlzZWN0X3JpZ2h0ctkdAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Jpc2VjdC5odG1sI2Jpc2VjdC5iaXNlY3RfcmlnaHRYAQAAAC10ctodAABYBwAAAG9zLmxpbmty2x0AAChqaQEAAGpqAQAAWDEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5saW5rWAEAAAAtdHLcHQAAWBYAAABwbGF0Zm9ybS5weXRob25fYnJhbmNoct0dAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BsYXRmb3JtLmh0bWwjcGxhdGZvcm0ucHl0aG9uX2JyYW5jaFgBAAAALXRy3h0AAFgUAAAAZmwuc2V0X2dyYXBoaWNzX21vZGVy3x0AAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmwuaHRtbCNmbC5zZXRfZ3JhcGhpY3NfbW9kZVgBAAAALXRy4B0AAFgVAAAAdGhyZWFkaW5nLmFjdGl2ZUNvdW50cuEdAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5hY3RpdmVDb3VudFgBAAAALXRy4h0AAFgXAAAAY3R5cGVzLnV0aWwuZmluZF9tc3ZjcnRy4x0AAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLnV0aWwuZmluZF9tc3ZjcnRYAQAAAC10cuQdAABYGwAAAG1vZHVsZWZpbmRlci5BZGRQYWNrYWdlUGF0aHLlHQAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tb2R1bGVmaW5kZXIuaHRtbCNtb2R1bGVmaW5kZXIuQWRkUGFja2FnZVBhdGhYAQAAAC10cuYdAABYDQAAAGpwZWcuY29tcHJlc3Ny5x0AAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvanBlZy5odG1sI2pwZWcuY29tcHJlc3NYAQAAAC10cugdAABYGQAAAHN5c2NvbmZpZy5pc19weXRob25fYnVpbGRy6R0AAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzY29uZmlnLmh0bWwjc3lzY29uZmlnLmlzX3B5dGhvbl9idWlsZFgBAAAALXRy6h0AAFgOAAAAdXJsbGliLnVybG9wZW5y6x0AAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliLmh0bWwjdXJsbGliLnVybG9wZW5YAQAAAC10cuwdAABYCwAAAG9zLldURVJNU0lHcu0dAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuV1RFUk1TSUdYAQAAAC10cu4dAABYGwAAAHJlYWRsaW5lLnNldF9oaXN0b3J5X2xlbmd0aHLvHQAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZWFkbGluZS5odG1sI3JlYWRsaW5lLnNldF9oaXN0b3J5X2xlbmd0aFgBAAAALXRy8B0AAFgNAAAAYXVkaW9vcC5tYXhwcHLxHQAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hdWRpb29wLmh0bWwjYXVkaW9vcC5tYXhwcFgBAAAALXRy8h0AAFgTAAAAdHJhY2ViYWNrLnByaW50X2V4Y3LzHQAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90cmFjZWJhY2suaHRtbCN0cmFjZWJhY2sucHJpbnRfZXhjWAEAAAAtdHL0HQAAWA8AAABzaHV0aWwuY29weW1vZGVy9R0AAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2h1dGlsLmh0bWwjc2h1dGlsLmNvcHltb2RlWAEAAAAtdHL2HQAAWAgAAABvcy5wb3BlbnL3HQAAKGppAQAAamoBAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLnBvcGVuWAEAAAAtdHL4HQAAWBMAAABfd2lucmVnLkNyZWF0ZUtleUV4cvkdAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLkNyZWF0ZUtleUV4WAEAAAAtdHL6HQAAWBMAAABjb2xvcnN5cy5yZ2JfdG9faHN2cvsdAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbG9yc3lzLmh0bWwjY29sb3JzeXMucmdiX3RvX2hzdlgBAAAALXRy/B0AAFgPAAAAaW1wLmZpbmRfbW9kdWxlcv0dAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltcC5odG1sI2ltcC5maW5kX21vZHVsZVgBAAAALXRy/h0AAFgWAAAAaW5zcGVjdC5nZXRpbm5lcmZyYW1lc3L/HQAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5nZXRpbm5lcmZyYW1lc1gBAAAALXRyAB4AAFgMAAAAdHVydGxlLmNsZWFycgEeAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5jbGVhclgBAAAALXRyAh4AAFgMAAAAc3VuYXUub3BlbmZwcgMeAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUub3BlbmZwWAEAAAAtdHIEHgAAWA4AAABsb2NhbGUuc3RyY29sbHIFHgAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUuc3RyY29sbFgBAAAALXRyBh4AAFgUAAAAb3BlcmF0b3IuX19pY29uY2F0X19yBx4AAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX2ljb25jYXRfX1gBAAAALXRyCB4AAFgNAAAAc3RyaW5nLmNlbnRlcnIJHgAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNzdHJpbmcuY2VudGVyWAEAAAAtdHIKHgAAWA0AAABhZXBhY2sudW5wYWNrcgseAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FlcGFjay5odG1sI2FlcGFjay51bnBhY2tYAQAAAC10cgweAABYFAAAAF93aW5yZWcuUXVlcnlJbmZvS2V5cg0eAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLlF1ZXJ5SW5mb0tleVgBAAAALXRyDh4AAFgPAAAAdGhyZWFkaW5nLlJMb2Nrcg8eAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5STG9ja1gBAAAALXRyEB4AAFgRAAAAb3BlcmF0b3IuX19pcG93X19yER4AAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX2lwb3dfX1gBAAAALXRyEh4AAFgJAAAAcmF3X2lucHV0chMeAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3Jhd19pbnB1dFgBAAAALXRyFB4AAFgQAAAAc3RyaW5nLm1ha2V0cmFuc3IVHgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNzdHJpbmcubWFrZXRyYW5zWAEAAAAtdHIWHgAAWAoAAABvcy5zZXRwZ3JwchceAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3Muc2V0cGdycFgBAAAALXRyGB4AAFgWAAAAb3BlcmF0b3IuX19pZmxvb3JkaXZfX3IZHgAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9faWZsb29yZGl2X19YAQAAAC10choeAABYFgAAAGN1cnNlcy5yZXNldF9wcm9nX21vZGVyGx4AAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLnJlc2V0X3Byb2dfbW9kZVgBAAAALXRyHB4AAFgJAAAAb3MuZmNoZGlych0eAAAoamkBAABqagEAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuZmNoZGlyWAEAAAAtdHIeHgAAWBQAAAB3YXJuaW5ncy5zaG93d2FybmluZ3IfHgAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93YXJuaW5ncy5odG1sI3dhcm5pbmdzLnNob3d3YXJuaW5nWAEAAAAtdHIgHgAAWBAAAABfd2lucmVnLkNsb3NlS2V5ciEeAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLkNsb3NlS2V5WAEAAAAtdHIiHgAAWBUAAABzc2wuZW51bV9jZXJ0aWZpY2F0ZXNyIx4AAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLmVudW1fY2VydGlmaWNhdGVzWAEAAAAtdHIkHgAAWAkAAABkYm0uY2xvc2VyJR4AAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGJtLmh0bWwjZGJtLmNsb3NlWAEAAAAtdHImHgAAWA8AAAB0dXJ0bGUuZ2V0X3BvbHlyJx4AAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmdldF9wb2x5WAEAAAAtdHIoHgAAWBMAAAB1cmxsaWIucGF0aG5hbWUydXJscikeAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYi5odG1sI3VybGxpYi5wYXRobmFtZTJ1cmxYAQAAAC10cioeAABYGQAAAGN1cnNlcy51c2VfZGVmYXVsdF9jb2xvcnNyKx4AAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLnVzZV9kZWZhdWx0X2NvbG9yc1gBAAAALXRyLB4AAFgQAAAAcmZjODIyLnBhcnNlZGF0ZXItHgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZmM4MjIuaHRtbCNyZmM4MjIucGFyc2VkYXRlWAEAAAAtdHIuHgAAWBQAAABfd2lucmVnLlF1ZXJ5VmFsdWVFeHIvHgAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjX3dpbnJlZy5RdWVyeVZhbHVlRXhYAQAAAC10cjAeAABYDQAAAHVuaXR0ZXN0LnNraXByMR4AAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5za2lwWAEAAAAtdHIyHgAAWAQAAABoZWxwcjMeAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2hlbHBYAQAAAC10cjQeAABYEgAAAHVybGxpYi51cmxyZXRyaWV2ZXI1HgAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIuaHRtbCN1cmxsaWIudXJscmV0cmlldmVYAQAAAC10cjYeAABYEwAAAGxvZ2dpbmcuYmFzaWNDb25maWdyNx4AAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuYmFzaWNDb25maWdYAQAAAC10cjgeAABYGAAAAEZyYW1lV29yay5zZXR3YXRjaGN1cnNvcnI5HgAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcmFtZXdvcmsuaHRtbCNGcmFtZVdvcmsuc2V0d2F0Y2hjdXJzb3JYAQAAAC10cjoeAABYEQAAAGN1cnNlcy5jb2xvcl9wYWlycjseAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5jb2xvcl9wYWlyWAEAAAAtdHI8HgAAWA8AAABvcGVyYXRvci5fX2dlX19yPR4AAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX2dlX19YAQAAAC10cj4eAABYEQAAAGRpcmVjdG9yeV9jcmVhdGVkcj8eAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYnVpbHRkaXN0Lmh0bWwjZGlyZWN0b3J5X2NyZWF0ZWRYAQAAAC10ckAeAABYDwAAAHNxbGl0ZTMuY29ubmVjdHJBHgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy5jb25uZWN0WAEAAAAtdHJCHgAAWCIAAAB4bWwuZXRyZWUuRWxlbWVudFRyZWUudG9zdHJpbmdsaXN0ckMeAAAoamkBAABqagEAAFhfAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS50b3N0cmluZ2xpc3RYAQAAAC10ckQeAABYFAAAAG9zLnBhdGguc2FtZW9wZW5maWxlckUeAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLnBhdGguaHRtbCNvcy5wYXRoLnNhbWVvcGVuZmlsZVgBAAAALXRyRh4AAFgKAAAAb3MuY3Rlcm1pZHJHHgAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLmN0ZXJtaWRYAQAAAC10ckgeAABYDwAAAGN1cnNlcy50aWdldHN0cnJJHgAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMudGlnZXRzdHJYAQAAAC10ckoeAABYDgAAAHR1cnRsZS5vbmNsaWNrckseAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5vbmNsaWNrWAEAAAAtdHJMHgAAWAsAAABmbC5pc3F1ZXVlZHJNHgAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbC5odG1sI2ZsLmlzcXVldWVkWAEAAAAtdHJOHgAAWA8AAABzeXMuZ2V0cmVmY291bnRyTx4AAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmdldHJlZmNvdW50WAEAAAAtdHJQHgAAWA8AAABweV9jb21waWxlLm1haW5yUR4AAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlfY29tcGlsZS5odG1sI3B5X2NvbXBpbGUubWFpblgBAAAALXRyUh4AAFgSAAAAc29ja2V0LmdldG5hbWVpbmZvclMeAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5nZXRuYW1laW5mb1gBAAAALXRyVB4AAFgaAAAAZW1haWwudXRpbHMuZGVjb2RlX3JmYzIyMzFyVR4AAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwudXRpbHMuaHRtbCNlbWFpbC51dGlscy5kZWNvZGVfcmZjMjIzMVgBAAAALXRyVh4AAFgNAAAAb3MuY2xvc2VyYW5nZXJXHgAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLmNsb3NlcmFuZ2VYAQAAAC10clgeAABYEgAAAGltYWdlb3AuZ3JleTQyZ3JleXJZHgAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFnZW9wLmh0bWwjaW1hZ2VvcC5ncmV5NDJncmV5WAEAAAAtdHJaHgAAWAkAAABvcy5yZW5hbWVyWx4AAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5yZW5hbWVYAQAAAC10clweAABYAwAAAG1heHJdHgAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNtYXhYAQAAAC10cl4eAABYDAAAAHR1cnRsZS5wZW51cHJfHgAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUucGVudXBYAQAAAC10cmAeAABYCgAAAG1hdGguZnJleHByYR4AAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWF0aC5odG1sI21hdGguZnJleHBYAQAAAC10cmIeAABYFAAAAHJhbmRvbS5ub3JtYWx2YXJpYXRlcmMeAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JhbmRvbS5odG1sI3JhbmRvbS5ub3JtYWx2YXJpYXRlWAEAAAAtdHJkHgAAWBYAAABuaXMuZ2V0X2RlZmF1bHRfZG9tYWlucmUeAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L25pcy5odG1sI25pcy5nZXRfZGVmYXVsdF9kb21haW5YAQAAAC10cmYeAABYEAAAAHJ1bnB5LnJ1bl9tb2R1bGVyZx4AAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcnVucHkuaHRtbCNydW5weS5ydW5fbW9kdWxlWAEAAAAtdHJoHgAAWBQAAABwa2d1dGlsLml0ZXJfbW9kdWxlc3JpHgAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wa2d1dGlsLmh0bWwjcGtndXRpbC5pdGVyX21vZHVsZXNYAQAAAC10cmoeAABYDgAAAGN1cnNlcy5xaWZsdXNocmseAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5xaWZsdXNoWAEAAAAtdHJsHgAAWBAAAABiaW5hc2NpaS5jcmNfaHF4cm0eAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JpbmFzY2lpLmh0bWwjYmluYXNjaWkuY3JjX2hxeFgBAAAALXRybh4AAFgNAAAAZ2V0b3B0LmdldG9wdHJvHgAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZXRvcHQuaHRtbCNnZXRvcHQuZ2V0b3B0WAEAAAAtdHJwHgAAWBAAAAB0dXJ0bGUuZ2V0c2hhcGVzcnEeAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5nZXRzaGFwZXNYAQAAAC10cnIeAABYCwAAAG9zLnNldHJldWlkcnMeAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3Muc2V0cmV1aWRYAQAAAC10cnQeAABYCwAAAG9wZXJhdG9yLmx0cnUeAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IubHRYAQAAAC10cnYeAABYDQAAAHBkYi5zZXRfdHJhY2Vydx4AAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGRiLmh0bWwjcGRiLnNldF90cmFjZVgBAAAALXRyeB4AAFgQAAAAY3R5cGVzLmFkZHJlc3NvZnJ5HgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuYWRkcmVzc29mWAEAAAAtdHJ6HgAAWAsAAAB0dXJ0bGUudGlsdHJ7HgAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUudGlsdFgBAAAALXRyfB4AAFgLAAAAb3BlcmF0b3IubGVyfR4AAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5sZVgBAAAALXRyfh4AAFgSAAAAc29ja2V0LmdldGhvc3RuYW1lcn8eAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5nZXRob3N0bmFtZVgBAAAALXRygB4AAFgLAAAAZmNudGwuaW9jdGxygR4AAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmNudGwuaHRtbCNmY250bC5pb2N0bFgBAAAALXRygh4AAFgSAAAAcmVzb3VyY2UuZ2V0cnVzYWdlcoMeAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Jlc291cmNlLmh0bWwjcmVzb3VyY2UuZ2V0cnVzYWdlWAEAAAAtdHKEHgAAWAkAAABvcy50bXBuYW1yhR4AAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy50bXBuYW1YAQAAAC10coYeAABYFAAAAGxvZ2dpbmcuYWRkTGV2ZWxOYW1lcoceAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLmFkZExldmVsTmFtZVgBAAAALXRyiB4AAFgTAAAAZm5tYXRjaC5mbm1hdGNoY2FzZXKJHgAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbm1hdGNoLmh0bWwjZm5tYXRjaC5mbm1hdGNoY2FzZVgBAAAALXRyih4AAFgLAAAAdHVydGxlLmJhY2tyix4AAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmJhY2tYAQAAAC10coweAABYDwAAAHhtbHJwY2xpYi5kdW1wc3KNHgAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWxycGNsaWIuaHRtbCN4bWxycGNsaWIuZHVtcHNYAQAAAC10co4eAABYEwAAAGN1cnNlcy5hc2NpaS51bmN0cmxyjx4AAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmFzY2lpLmh0bWwjY3Vyc2VzLmFzY2lpLnVuY3RybFgBAAAALXRykB4AAFgPAAAAY3Vyc2VzLmtpbGxjaGFycpEeAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5raWxsY2hhclgBAAAALXRykh4AAFgTAAAAZW1haWwudXRpbHMudW5xdW90ZXKTHgAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC51dGlscy5odG1sI2VtYWlsLnV0aWxzLnVucXVvdGVYAQAAAC10cpQeAABYCQAAAG9zLmdldGVudnKVHgAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLmdldGVudlgBAAAALXRylh4AAFgZAAAAdGVzdC5zdXBwb3J0LnJ1bl91bml0dGVzdHKXHgAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LnJ1bl91bml0dGVzdFgBAAAALXRymB4AAFgQAAAAY3Vyc2VzLnRpZ2V0ZmxhZ3KZHgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMudGlnZXRmbGFnWAEAAAAtdHKaHgAAWA0AAABvcGVyYXRvci5pYWRkcpseAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuaWFkZFgBAAAALXRynB4AAFgUAAAAc29ja2V0LmdldHNlcnZieXBvcnRynR4AAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LmdldHNlcnZieXBvcnRYAQAAAC10cp4eAABYEgAAAGJpc2VjdC5pbnNvcnRfbGVmdHKfHgAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iaXNlY3QuaHRtbCNiaXNlY3QuaW5zb3J0X2xlZnRYAQAAAC10cqAeAABYDwAAAGxvZ2dpbmcuZGlzYWJsZXKhHgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5kaXNhYmxlWAEAAAAtdHKiHgAAWBYAAABiaW5hc2NpaS5ybGVkZWNvZGVfaHF4cqMeAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JpbmFzY2lpLmh0bWwjYmluYXNjaWkucmxlZGVjb2RlX2hxeFgBAAAALXRypB4AAFgJAAAAcmUuc2VhcmNocqUeAAAoamkBAABqagEAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlLmh0bWwjcmUuc2VhcmNoWAEAAAAtdHKmHgAAWA8AAABfd2lucmVnLk9wZW5LZXlypx4AAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvX3dpbnJlZy5odG1sI193aW5yZWcuT3BlbktleVgBAAAALXRyqB4AAFgPAAAAaW1wLmxvYWRfbW9kdWxlcqkeAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltcC5odG1sI2ltcC5sb2FkX21vZHVsZVgBAAAALXRyqh4AAFgOAAAAZmwuZ2V0X3BhdHRlcm5yqx4AAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmwuaHRtbCNmbC5nZXRfcGF0dGVyblgBAAAALXRyrB4AAFgLAAAAcmFuZG9tLnNlZWRyrR4AAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmFuZG9tLmh0bWwjcmFuZG9tLnNlZWRYAQAAAC10cq4eAABYGgAAAHJlYWRsaW5lLnJlYWRfaGlzdG9yeV9maWxlcq8eAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlYWRsaW5lLmh0bWwjcmVhZGxpbmUucmVhZF9oaXN0b3J5X2ZpbGVYAQAAAC10crAeAABYCwAAAHBkYi5ydW5ldmFscrEeAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BkYi5odG1sI3BkYi5ydW5ldmFsWAEAAAAtdHKyHgAAWBUAAAB1bmljb2RlZGF0YS5jb21iaW5pbmdysx4AAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pY29kZWRhdGEuaHRtbCN1bmljb2RlZGF0YS5jb21iaW5pbmdYAQAAAC10crQeAABYEQAAAG9wZXJhdG9yLmZsb29yZGl2crUeAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuZmxvb3JkaXZYAQAAAC10crYeAABYCwAAAG9wZXJhdG9yLmdlcrceAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuZ2VYAQAAAC10crgeAABYEQAAAHR1cnRsZS50dXJ0bGVzaXplcrkeAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS50dXJ0bGVzaXplWAEAAAAtdHK6HgAAWAcAAABvcy53YWl0crseAAAoamkBAABqagEAAFgxAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3Mud2FpdFgBAAAALXRyvB4AAFgLAAAAdHVydGxlLm1vZGVyvR4AAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLm1vZGVYAQAAAC10cr4eAABYGAAAAHNvY2tldC5nZXRkZWZhdWx0dGltZW91dHK/HgAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuZ2V0ZGVmYXVsdHRpbWVvdXRYAQAAAC10csAeAABYEQAAAHBsYXRmb3JtLmphdmFfdmVycsEeAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BsYXRmb3JtLmh0bWwjcGxhdGZvcm0uamF2YV92ZXJYAQAAAC10csIeAABYEQAAAGxvZ2dpbmcuZ2V0TG9nZ2VycsMeAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLmdldExvZ2dlclgBAAAALXRyxB4AAFgcAAAAcmVhZGxpbmUuZ2V0X2NvbXBsZXRpb25fdHlwZXLFHgAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZWFkbGluZS5odG1sI3JlYWRsaW5lLmdldF9jb21wbGV0aW9uX3R5cGVYAQAAAC10csYeAABYCwAAAG9wZXJhdG9yLmd0csceAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuZ3RYAQAAAC10csgeAABYDgAAAHBhcnNlci5zdDJsaXN0cskeAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BhcnNlci5odG1sI3BhcnNlci5zdDJsaXN0WAEAAAAtdHLKHgAAWAoAAABuZXcubW9kdWxlcsseAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L25ldy5odG1sI25ldy5tb2R1bGVYAQAAAC10csweAABYDgAAAG1zdmNydC5zZXRtb2Rlcs0eAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zdmNydC5odG1sI21zdmNydC5zZXRtb2RlWAEAAAAtdHLOHgAAWA4AAAB0dXJ0bGUucGVuZG93bnLPHgAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUucGVuZG93blgBAAAALXRy0B4AAFgTAAAAcGtndXRpbC5maW5kX2xvYWRlcnLRHgAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wa2d1dGlsLmh0bWwjcGtndXRpbC5maW5kX2xvYWRlclgBAAAALXRy0h4AAFgOAAAAbXN2Y3J0LmdldHdjaGVy0x4AAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXN2Y3J0Lmh0bWwjbXN2Y3J0LmdldHdjaGVYAQAAAC10ctQeAABYDAAAAHR1cnRsZS5jbG9uZXLVHgAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuY2xvbmVYAQAAAC10ctYeAABYFQAAAHhtbC5kb20ucHVsbGRvbS5wYXJzZXLXHgAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLnB1bGxkb20uaHRtbCN4bWwuZG9tLnB1bGxkb20ucGFyc2VYAQAAAC10ctgeAABYDAAAAG9zLnRjc2V0cGdycHLZHgAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLnRjc2V0cGdycFgBAAAALXRy2h4AAFgJAAAAanNvbi5sb2FkctseAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2pzb24uaHRtbCNqc29uLmxvYWRYAQAAAC10ctweAABYHAAAAGRpc3R1dGlscy5kaXJfdXRpbC5jb3B5X3RyZWVy3R4AAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuZGlyX3V0aWwuY29weV90cmVlWAEAAAAtdHLeHgAAWBUAAAB3YXJuaW5ncy5zaW1wbGVmaWx0ZXJy3x4AAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2FybmluZ3MuaHRtbCN3YXJuaW5ncy5zaW1wbGVmaWx0ZXJYAQAAAC10cuAeAABYEQAAAEZyYW1lV29yay5NZW51QmFycuEeAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZyYW1ld29yay5odG1sI0ZyYW1lV29yay5NZW51QmFyWAEAAAAtdHLiHgAAWAgAAABvcy5jaG1vZHLjHgAAKGppAQAAamoBAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLmNobW9kWAEAAAAtdHLkHgAAWA0AAABiZGIuZWZmZWN0aXZlcuUeAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JkYi5odG1sI2JkYi5lZmZlY3RpdmVYAQAAAC10cuYeAABYDgAAAGZsLmNoZWNrX2Zvcm1zcuceAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZsLmh0bWwjZmwuY2hlY2tfZm9ybXNYAQAAAC10cugeAABYCAAAAG9zLnV0aW1lcukeAAAoamkBAABqagEAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MudXRpbWVYAQAAAC10cuoeAABYEAAAAHVybGxpYi51cmxlbmNvZGVy6x4AAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliLmh0bWwjdXJsbGliLnVybGVuY29kZVgBAAAALXRy7B4AAFgeAAAAcGxhdGZvcm0ucHl0aG9uX2ltcGxlbWVudGF0aW9ucu0eAAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BsYXRmb3JtLmh0bWwjcGxhdGZvcm0ucHl0aG9uX2ltcGxlbWVudGF0aW9uWAEAAAAtdHLuHgAAWAoAAABnbC52bmFycmF5cu8eAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dsLmh0bWwjZ2wudm5hcnJheVgBAAAALXRy8B4AAFgUAAAAZGlmZmxpYi51bmlmaWVkX2RpZmZy8R4AAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlmZmxpYi5odG1sI2RpZmZsaWIudW5pZmllZF9kaWZmWAEAAAAtdHLyHgAAWAcAAABzaGEubmV3cvMeAAAoamkBAABqagEAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NoYS5odG1sI3NoYS5uZXdYAQAAAC10cvQeAABYEAAAAGdjLmdldF9yZWZlcnJlcnNy9R4AAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2MuaHRtbCNnYy5nZXRfcmVmZXJyZXJzWAEAAAAtdHL2HgAAWBEAAABGcmFtZVdvcmsuU3ViTWVudXL3HgAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcmFtZXdvcmsuaHRtbCNGcmFtZVdvcmsuU3ViTWVudVgBAAAALXRy+B4AAFgPAAAAcmFuZG9tLmdldHN0YXRlcvkeAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JhbmRvbS5odG1sI3JhbmRvbS5nZXRzdGF0ZVgBAAAALXRy+h4AAFgQAAAAY3R5cGVzLnNldF9lcnJub3L7HgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuc2V0X2Vycm5vWAEAAAAtdHL8HgAAWA0AAABwcHJpbnQucHByaW50cv0eAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BwcmludC5odG1sI3BwcmludC5wcHJpbnRYAQAAAC10cv4eAABYDAAAAG9zLmdldHJlc2dpZHL/HgAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLmdldHJlc2dpZFgBAAAALXRyAB8AAFgXAAAAX3dpbnJlZy5Db25uZWN0UmVnaXN0cnlyAR8AAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvX3dpbnJlZy5odG1sI193aW5yZWcuQ29ubmVjdFJlZ2lzdHJ5WAEAAAAtdHICHwAAWBkAAABzeXNjb25maWcuZ2V0X2NvbmZpZ192YXJzcgMfAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5c2NvbmZpZy5odG1sI3N5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcnNYAQAAAC10cgQfAABYFQAAAEZyYW1lV29yay5BcHBsaWNhdGlvbnIFHwAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcmFtZXdvcmsuaHRtbCNGcmFtZVdvcmsuQXBwbGljYXRpb25YAQAAAC10cgYfAABYDwAAAGxvY2FsZS5jdXJyZW5jeXIHHwAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUuY3VycmVuY3lYAQAAAC10cggfAABYDAAAAGZtLmVudW1lcmF0ZXIJHwAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbS5odG1sI2ZtLmVudW1lcmF0ZVgBAAAALXRyCh8AAFgRAAAAb3BlcmF0b3IuZ2V0c2xpY2VyCx8AAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5nZXRzbGljZVgBAAAALXRyDB8AAFgVAAAAZW1haWwudXRpbHMucGFyc2VhZGRycg0fAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLnV0aWxzLmh0bWwjZW1haWwudXRpbHMucGFyc2VhZGRyWAEAAAAtdHIOHwAAWB8AAABtdWx0aXByb2Nlc3NpbmcuY3VycmVudF9wcm9jZXNzcg8fAAAoamkBAABqagEAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5jdXJyZW50X3Byb2Nlc3NYAQAAAC10chAfAABYHQAAAGRpc3R1dGlscy5maWxlX3V0aWwuY29weV9maWxlchEfAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmZpbGVfdXRpbC5jb3B5X2ZpbGVYAQAAAC10chIfAABYEQAAAGxvZ2dpbmcuZXhjZXB0aW9uchMfAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLmV4Y2VwdGlvblgBAAAALXRyFB8AAFgUAAAAY3Vyc2VzLmFzY2lpLmlzcHJpbnRyFR8AAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmFzY2lpLmh0bWwjY3Vyc2VzLmFzY2lpLmlzcHJpbnRYAQAAAC10chYfAABYFgAAAHRocmVhZGluZy5hY3RpdmVfY291bnRyFx8AAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLmFjdGl2ZV9jb3VudFgBAAAALXRyGB8AAFgMAAAAY3Vyc2VzLmZsYXNochkfAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5mbGFzaFgBAAAALXRyGh8AAFgSAAAAX3dpbnJlZy5RdWVyeVZhbHVlchsfAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLlF1ZXJ5VmFsdWVYAQAAAC10chwfAABYHAAAAHBsaXN0bGliLnJlYWRQbGlzdEZyb21TdHJpbmdyHR8AAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGxpc3RsaWIuaHRtbCNwbGlzdGxpYi5yZWFkUGxpc3RGcm9tU3RyaW5nWAEAAAAtdHIeHwAAWAMAAABvY3RyHx8AAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjb2N0WAEAAAAtdHIgHwAAWBkAAABtaW1pZnkubWltZV9lbmNvZGVfaGVhZGVyciEfAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbWlmeS5odG1sI21pbWlmeS5taW1lX2VuY29kZV9oZWFkZXJYAQAAAC10ciIfAABYDQAAAGZyYWN0aW9ucy5nY2RyIx8AAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnJhY3Rpb25zLmh0bWwjZnJhY3Rpb25zLmdjZFgBAAAALXRyJB8AAFgPAAAAaW5zcGVjdC5pc2NsYXNzciUfAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmlzY2xhc3NYAQAAAC10ciYfAABYGAAAAGJhc2U2NC51cmxzYWZlX2I2NGRlY29kZXInHwAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXNlNjQuaHRtbCNiYXNlNjQudXJsc2FmZV9iNjRkZWNvZGVYAQAAAC10cigfAABYGQAAAG1pbWV0b29scy5jaG9vc2VfYm91bmRhcnlyKR8AAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWltZXRvb2xzLmh0bWwjbWltZXRvb2xzLmNob29zZV9ib3VuZGFyeVgBAAAALXRyKh8AAFgRAAAAb3BlcmF0b3Iuc2V0c2xpY2VyKx8AAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5zZXRzbGljZVgBAAAALXRyLB8AAFgKAAAAZm0uc2V0cGF0aHItHwAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbS5odG1sI2ZtLnNldHBhdGhYAQAAAC10ci4fAABYEAAAAGZpbmRlcnRvb2xzLm1vdmVyLx8AAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFjb3N0b29scy5odG1sI2ZpbmRlcnRvb2xzLm1vdmVYAQAAAC10cjAfAABYEQAAAHRlcm1pb3MudGNzZXRhdHRycjEfAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rlcm1pb3MuaHRtbCN0ZXJtaW9zLnRjc2V0YXR0clgBAAAALXRyMh8AAFgQAAAAdHVydGxlLmdldHNjcmVlbnIzHwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuZ2V0c2NyZWVuWAEAAAAtdHI0HwAAWBIAAABjb2RlY3MuRW5jb2RlZEZpbGVyNR8AAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLkVuY29kZWRGaWxlWAEAAAAtdHI2HwAAWBAAAABvcGVyYXRvci5kZWxpdGVtcjcfAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuZGVsaXRlbVgBAAAALXRyOB8AAFgOAAAAdGhyZWFkaW5nLkxvY2tyOR8AAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLkxvY2tYAQAAAC10cjofAABYCgAAAG1hdGguYXNpbmhyOx8AAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWF0aC5odG1sI21hdGguYXNpbmhYAQAAAC10cjwfAABYAwAAAGFsbHI9HwAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNhbGxYAQAAAC10cj4fAABYHQAAAG11bHRpcHJvY2Vzc2luZy5sb2dfdG9fc3RkZXJycj8fAAAoamkBAABqagEAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5sb2dfdG9fc3RkZXJyWAEAAAAtdHJAHwAAWA0AAABzcHdkLmdldHNwYWxsckEfAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Nwd2QuaHRtbCNzcHdkLmdldHNwYWxsWAEAAAAtdHJCHwAAWBkAAABtdWx0aXByb2Nlc3NpbmcuY3B1X2NvdW50ckMfAAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5jcHVfY291bnRYAQAAAC10ckQfAABYEAAAAG9wZXJhdG9yLl9fYWRkX19yRR8AAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX2FkZF9fWAEAAAAtdHJGHwAAWA4AAABwYXJzZXIuaXNzdWl0ZXJHHwAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wYXJzZXIuaHRtbCNwYXJzZXIuaXNzdWl0ZVgBAAAALXRySB8AAFgSAAAAaW5zcGVjdC5nZXRhcmdzcGVjckkfAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmdldGFyZ3NwZWNYAQAAAC10ckofAABYEwAAAHhtbC5zYXgubWFrZV9wYXJzZXJySx8AAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5odG1sI3htbC5zYXgubWFrZV9wYXJzZXJYAQAAAC10ckwfAABYEwAAAGNnaS5wYXJzZV9tdWx0aXBhcnRyTR8AAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2dpLmh0bWwjY2dpLnBhcnNlX211bHRpcGFydFgBAAAALXRyTh8AAFgMAAAAY3Vyc2VzLm5hcG1zck8fAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5uYXBtc1gBAAAALXRyUB8AAFgDAAAAbWluclEfAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI21pblgBAAAALXRyUh8AAFgPAAAAbG9jYWxlLmRnZXR0ZXh0clMfAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvY2FsZS5odG1sI2xvY2FsZS5kZ2V0dGV4dFgBAAAALXRyVB8AAFgMAAAAcmFuZG9tLmdhdXNzclUfAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JhbmRvbS5odG1sI3JhbmRvbS5nYXVzc1gBAAAALXRyVh8AAFgbAAAAc3RyaW5ncHJlcC5pbl90YWJsZV9jMTFfYzEyclcfAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZ3ByZXAuaHRtbCNzdHJpbmdwcmVwLmluX3RhYmxlX2MxMV9jMTJYAQAAAC10clgfAABYDwAAAG9wZXJhdG9yLmNvbmNhdHJZHwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLmNvbmNhdFgBAAAALXRyWh8AAFgKAAAAb3MucmVuYW1lc3JbHwAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLnJlbmFtZXNYAQAAAC10clwfAABYCAAAAG9zLm1pbm9ycl0fAAAoamkBAABqagEAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MubWlub3JYAQAAAC10cl4fAABYBgAAAHJlbG9hZHJfHwAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNyZWxvYWRYAQAAAC10cmAfAABYDAAAAHR1cnRsZS5yaWdodHJhHwAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUucmlnaHRYAQAAAC10cmIfAABYCAAAAGZsLmNvbG9ycmMfAAAoamkBAABqagEAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZsLmh0bWwjZmwuY29sb3JYAQAAAC10cmQfAABYFAAAAHRpbWVpdC5kZWZhdWx0X3RpbWVycmUfAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpbWVpdC5odG1sI3RpbWVpdC5kZWZhdWx0X3RpbWVyWAEAAAAtdHJmHwAAWBkAAABkaWZmbGliLklTX0NIQVJBQ1RFUl9KVU5LcmcfAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RpZmZsaWIuaHRtbCNkaWZmbGliLklTX0NIQVJBQ1RFUl9KVU5LWAEAAAAtdHJoHwAAWBIAAABtYWNvc3Rvb2xzLm1rYWxpYXNyaR8AAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFjb3N0b29scy5odG1sI21hY29zdG9vbHMubWthbGlhc1gBAAAALXRyah8AAFgVAAAAcmFuZG9tLmxvZ25vcm12YXJpYXRlcmsfAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JhbmRvbS5odG1sI3JhbmRvbS5sb2dub3JtdmFyaWF0ZVgBAAAALXRybB8AAFgRAAAAdW5pY29kZWRhdGEuZGlnaXRybR8AAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pY29kZWRhdGEuaHRtbCN1bmljb2RlZGF0YS5kaWdpdFgBAAAALXRybh8AAFgTAAAAb3BlcmF0b3IuX19yZXBlYXRfX3JvHwAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9fcmVwZWF0X19YAQAAAC10cnAfAABYDQAAAG1hcnNoYWwuZHVtcHNycR8AAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFyc2hhbC5odG1sI21hcnNoYWwuZHVtcHNYAQAAAC10cnIfAABYDAAAAG9zLnBhdGgud2Fsa3JzHwAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5wYXRoLmh0bWwjb3MucGF0aC53YWxrWAEAAAAtdHJ0HwAAWBMAAABiaW5hc2NpaS5hMmJfYmFzZTY0cnUfAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JpbmFzY2lpLmh0bWwjYmluYXNjaWkuYTJiX2Jhc2U2NFgBAAAALXRydh8AAFgIAAAAb3MubWtub2Rydx8AAChqaQEAAGpqAQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5ta25vZFgBAAAALXRyeB8AAFgLAAAAcGlwZXMucXVvdGVyeR8AAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGlwZXMuaHRtbCNwaXBlcy5xdW90ZVgBAAAALXRyeh8AAFgEAAAAcmVwcnJ7HwAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNyZXByWAEAAAAtdHJ8HwAAWA4AAABpdGVydG9vbHMuaW1hcHJ9HwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pdGVydG9vbHMuaHRtbCNpdGVydG9vbHMuaW1hcFgBAAAALXRyfh8AAFgNAAAAcGxhdGZvcm0ubm9kZXJ/HwAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wbGF0Zm9ybS5odG1sI3BsYXRmb3JtLm5vZGVYAQAAAC10coAfAABYCwAAAG9zLldTVE9QU0lHcoEfAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuV1NUT1BTSUdYAQAAAC10coIfAABYCwAAAG9zLnNwYXdubHBlcoMfAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3Muc3Bhd25scGVYAQAAAC10coQfAABYEAAAAGZsLnNob3dfcXVlc3Rpb25yhR8AAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmwuaHRtbCNmbC5zaG93X3F1ZXN0aW9uWAEAAAAtdHKGHwAAWAkAAABjbWF0aC5sb2dyhx8AAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY21hdGguaHRtbCNjbWF0aC5sb2dYAQAAAC10cogfAABYGAAAAHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbnKJHwAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb25YAQAAAC10coofAABYEAAAAHNvY2tldC5pbmV0X250b2Fyix8AAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LmluZXRfbnRvYVgBAAAALXRyjB8AAFgMAAAAYW55ZGJtLmNsb3Nlco0fAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FueWRibS5odG1sI2FueWRibS5jbG9zZVgBAAAALXRyjh8AAFgUAAAAcmVhZGxpbmUuaW5zZXJ0X3RleHRyjx8AAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVhZGxpbmUuaHRtbCNyZWFkbGluZS5pbnNlcnRfdGV4dFgBAAAALXRykB8AAFglAAAAeG1sLnNheC5zYXh1dGlscy5wcmVwYXJlX2lucHV0X3NvdXJjZXKRHwAAKGppAQAAamoBAABYWgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnV0aWxzLmh0bWwjeG1sLnNheC5zYXh1dGlscy5wcmVwYXJlX2lucHV0X3NvdXJjZVgBAAAALXRykh8AAFgQAAAAc29ja2V0LmluZXRfbnRvcHKTHwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuaW5ldF9udG9wWAEAAAAtdHKUHwAAWAwAAABncnAuZ2V0Z3JuYW1ylR8AAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ3JwLmh0bWwjZ3JwLmdldGdybmFtWAEAAAAtdHKWHwAAWBAAAABzdHJpbmcudHJhbnNsYXRlcpcfAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZy5odG1sI3N0cmluZy50cmFuc2xhdGVYAQAAAC10cpgfAABYGwAAAGRpc3R1dGlscy51dGlsLmdldF9wbGF0Zm9ybXKZHwAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy51dGlsLmdldF9wbGF0Zm9ybVgBAAAALXRymh8AAFgLAAAAb3MuZnN0YXR2ZnNymx8AAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5mc3RhdHZmc1gBAAAALXRynB8AAFgKAAAAdGltZS5zbGVlcHKdHwAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aW1lLmh0bWwjdGltZS5zbGVlcFgBAAAALXRynh8AAFgcAAAAeG1sLmRvbS5nZXRET01JbXBsZW1lbnRhdGlvbnKfHwAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5nZXRET01JbXBsZW1lbnRhdGlvblgBAAAALXRyoB8AAFgOAAAAZmwuc2hvd19jaG9pY2VyoR8AAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmwuaHRtbCNmbC5zaG93X2Nob2ljZVgBAAAALXRyoh8AAFgSAAAAaW1hZ2VvcC5ncmV5MmdyZXk0cqMfAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYWdlb3AuaHRtbCNpbWFnZW9wLmdyZXkyZ3JleTRYAQAAAC10cqQfAABYDwAAAGJpbmFzY2lpLmIyYV9xcHKlHwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iaW5hc2NpaS5odG1sI2JpbmFzY2lpLmIyYV9xcFgBAAAALXRyph8AAFgOAAAAc3lzLnNldHByb2ZpbGVypx8AAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLnNldHByb2ZpbGVYAQAAAC10cqgfAABYEQAAAGRpcmNhY2hlLmFubm90YXRlcqkfAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RpcmNhY2hlLmh0bWwjZGlyY2FjaGUuYW5ub3RhdGVYAQAAAC10cqofAABYDQAAAGN1cnNlcy5nZXRzeXhyqx8AAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLmdldHN5eFgBAAAALXRyrB8AAFgSAAAAYWJjLmFic3RyYWN0bWV0aG9kcq0fAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FiYy5odG1sI2FiYy5hYnN0cmFjdG1ldGhvZFgBAAAALXRyrh8AAFgTAAAAdHVydGxlLnNldHRpbHRhbmdsZXKvHwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuc2V0dGlsdGFuZ2xlWAEAAAAtdHKwHwAAWAoAAABvcy5zZXRlZ2lkcrEfAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3Muc2V0ZWdpZFgBAAAALXRysh8AAFgHAAAAb3MucmVhZHKzHwAAKGppAQAAamoBAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLnJlYWRYAQAAAC10crQfAABYDwAAAGdldHBhc3MuZ2V0dXNlcnK1HwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZXRwYXNzLmh0bWwjZ2V0cGFzcy5nZXR1c2VyWAEAAAAtdHK2HwAAWBAAAABvcy5wYXRoLmdldG10aW1lcrcfAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLnBhdGguaHRtbCNvcy5wYXRoLmdldG10aW1lWAEAAAAtdHK4HwAAWAYAAABjb2VyY2VyuR8AAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjY29lcmNlWAEAAAAtdHK6HwAAWBMAAABnZXR0ZXh0LnRyYW5zbGF0aW9ucrsfAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dldHRleHQuaHRtbCNnZXR0ZXh0LnRyYW5zbGF0aW9uWAEAAAAtdHK8HwAAWBQAAABpbnNwZWN0LmN1cnJlbnRmcmFtZXK9HwAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5jdXJyZW50ZnJhbWVYAQAAAC10cr4fAABYCgAAAHR0eS5zZXRyYXdyvx8AAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHR5Lmh0bWwjdHR5LnNldHJhd1gBAAAALXRywB8AAFgRAAAAdXJsbGliLmdldHByb3hpZXNywR8AAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliLmh0bWwjdXJsbGliLmdldHByb3hpZXNYAQAAAC10csIfAABYBwAAAGdldGF0dHJywx8AAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjZ2V0YXR0clgBAAAALXRyxB8AAFgPAAAAX3dpbnJlZy5TYXZlS2V5csUfAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLlNhdmVLZXlYAQAAAC10csYfAABYDQAAAHBsYXRmb3JtLmRpc3Ryxx8AAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGxhdGZvcm0uaHRtbCNwbGF0Zm9ybS5kaXN0WAEAAAAtdHLIHwAAWCIAAABlbWFpbC5pdGVyYXRvcnMuYm9keV9saW5lX2l0ZXJhdG9ycskfAAAoamkBAABqagEAAFhZAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLml0ZXJhdG9ycy5odG1sI2VtYWlsLml0ZXJhdG9ycy5ib2R5X2xpbmVfaXRlcmF0b3JYAQAAAC10csofAABYIAAAAHNodXRpbC51bnJlZ2lzdGVyX2FyY2hpdmVfZm9ybWF0cssfAAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NodXRpbC5odG1sI3NodXRpbC51bnJlZ2lzdGVyX2FyY2hpdmVfZm9ybWF0WAEAAAAtdHLMHwAAWA8AAABoZWFwcS5uc21hbGxlc3RyzR8AAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaGVhcHEuaHRtbCNoZWFwcS5uc21hbGxlc3RYAQAAAC10cs4fAABYFAAAAHNvY2tldC5nZXRob3N0YnlhZGRycs8fAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5nZXRob3N0YnlhZGRyWAEAAAAtdHLQHwAAWBMAAABjb2xvcnN5cy5yZ2JfdG9faGxzctEfAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbG9yc3lzLmh0bWwjY29sb3JzeXMucmdiX3RvX2hsc1gBAAAALXRy0h8AAFgRAAAATWFjT1MuV01BdmFpbGFibGVy0x8AAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFjb3MuaHRtbCNNYWNPUy5XTUF2YWlsYWJsZVgBAAAALXRy1B8AAFgJAAAAanNvbi5kdW1wctUfAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2pzb24uaHRtbCNqc29uLmR1bXBYAQAAAC10ctYfAABYAwAAAGRpcnLXHwAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNkaXJYAQAAAC10ctgfAABYDQAAAG1hcnNoYWwubG9hZHNy2R8AAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFyc2hhbC5odG1sI21hcnNoYWwubG9hZHNYAQAAAC10ctofAABYDgAAAGl0ZXJ0b29scy5pemlwctsfAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2l0ZXJ0b29scy5odG1sI2l0ZXJ0b29scy5pemlwWAEAAAAtdHLcHwAAWBEAAAB0dXJ0bGUuYmVnaW5fZmlsbHLdHwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuYmVnaW5fZmlsbFgBAAAALXRy3h8AAFgMAAAAc2lnbmFsLnBhdXNlct8fAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NpZ25hbC5odG1sI3NpZ25hbC5wYXVzZVgBAAAALXRy4B8AAFgTAAAAYmlzZWN0Lmluc29ydF9yaWdodHLhHwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iaXNlY3QuaHRtbCNiaXNlY3QuaW5zb3J0X3JpZ2h0WAEAAAAtdHLiHwAAWAUAAABpbnB1dHLjHwAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNpbnB1dFgBAAAALXRy5B8AAFgKAAAAaXNpbnN0YW5jZXLlHwAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNpc2luc3RhbmNlWAEAAAAtdHLmHwAAWBEAAABiZGIuY2hlY2tmdW5jbmFtZXLnHwAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iZGIuaHRtbCNiZGIuY2hlY2tmdW5jbmFtZVgBAAAALXRy6B8AAFgVAAAAZnV0dXJlX2J1aWx0aW5zLmFzY2lpcukfAAAoamkBAABqagEAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1dHVyZV9idWlsdGlucy5odG1sI2Z1dHVyZV9idWlsdGlucy5hc2NpaVgBAAAALXRy6h8AAFgNAAAAY3Vyc2VzLmhhc19pY3LrHwAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMuaGFzX2ljWAEAAAAtdHLsHwAAWAwAAABvcy5nZXRncm91cHNy7R8AAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5nZXRncm91cHNYAQAAAC10cu4fAABYDgAAAG1zdmNydC5oZWFwbWlucu8fAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zdmNydC5odG1sI21zdmNydC5oZWFwbWluWAEAAAAtdHLwHwAAWAkAAABnYy5lbmFibGVy8R8AAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2MuaHRtbCNnYy5lbmFibGVYAQAAAC10cvIfAABYDQAAAGN1cnNlcy5oYXNfaWxy8x8AAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLmhhc19pbFgBAAAALXRy9B8AAFgJAAAAdHVydGxlLmJrcvUfAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5ia1gBAAAALXRy9h8AAFgSAAAAb3MucGF0aC5zcGxpdGRyaXZlcvcfAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLnBhdGguaHRtbCNvcy5wYXRoLnNwbGl0ZHJpdmVYAQAAAC10cvgfAABYGQAAAGxvZ2dpbmcuY29uZmlnLmRpY3RDb25maWdy+R8AAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5jb25maWcuaHRtbCNsb2dnaW5nLmNvbmZpZy5kaWN0Q29uZmlnWAEAAAAtdHL6HwAAWBMAAAByZWFkbGluZS5nZXRfZW5kaWR4cvsfAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlYWRsaW5lLmh0bWwjcmVhZGxpbmUuZ2V0X2VuZGlkeFgBAAAALXRy/B8AAFgRAAAAZmluZGVydG9vbHMuUHJpbnRy/R8AAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFjb3N0b29scy5odG1sI2ZpbmRlcnRvb2xzLlByaW50WAEAAAAtdHL+HwAAWBYAAAByZWFkbGluZS5jbGVhcl9oaXN0b3J5cv8fAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlYWRsaW5lLmh0bWwjcmVhZGxpbmUuY2xlYXJfaGlzdG9yeVgBAAAALXRyACAAAFgOAAAATWFjT1MuRGVidWdTdHJyASAAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFjb3MuaHRtbCNNYWNPUy5EZWJ1Z1N0clgBAAAALXRyAiAAAFgPAAAAZmwuc2hvd19tZXNzYWdlcgMgAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZsLmh0bWwjZmwuc2hvd19tZXNzYWdlWAEAAAAtdHIEIAAAWAsAAABwaWNrbGUuZHVtcHIFIAAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9waWNrbGUuaHRtbCNwaWNrbGUuZHVtcFgBAAAALXRyBiAAAFgSAAAAYXVkaW9vcC5maW5kZmFjdG9ycgcgAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2F1ZGlvb3AuaHRtbCNhdWRpb29wLmZpbmRmYWN0b3JYAQAAAC10cgggAABYEQAAAHR1cnRsZS5zaG93dHVydGxlcgkgAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5zaG93dHVydGxlWAEAAAAtdHIKIAAAWAkAAABwdHkuc3Bhd25yCyAAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHR5Lmh0bWwjcHR5LnNwYXduWAEAAAAtdHIMIAAAWBEAAAB1cmxsaWIudXJsY2xlYW51cHINIAAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIuaHRtbCN1cmxsaWIudXJsY2xlYW51cFgBAAAALXRyDiAAAFgWAAAAc3RyaW5ncHJlcC5pbl90YWJsZV9jNHIPIAAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmdwcmVwLmh0bWwjc3RyaW5ncHJlcC5pbl90YWJsZV9jNFgBAAAALXRyECAAAFgpAAAAZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfbWFrZWZpbGVfZmlsZW5hbWVyESAAAChqaQEAAGpqAQAAWFkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9tYWtlZmlsZV9maWxlbmFtZVgBAAAALXRyEiAAAFgXAAAAY2dpLnByaW50X2Vudmlyb25fdXNhZ2VyEyAAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2dpLmh0bWwjY2dpLnByaW50X2Vudmlyb25fdXNhZ2VYAQAAAC10chQgAABYFgAAAHVuaXR0ZXN0LnJlbW92ZUhhbmRsZXJyFSAAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5yZW1vdmVIYW5kbGVyWAEAAAAtdHIWIAAAWA0AAABvcGVyYXRvci5ub3RfchcgAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3Iubm90X1gBAAAALXRyGCAAAFgUAAAAb3BlcmF0b3IuX19kZWxpdGVtX19yGSAAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX2RlbGl0ZW1fX1gBAAAALXRyGiAAAFgRAAAAY29kZWNzLmdldGRlY29kZXJyGyAAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLmdldGRlY29kZXJYAQAAAC10chwgAABYHAAAAHNzbC5nZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHNyHSAAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLmdldF9kZWZhdWx0X3ZlcmlmeV9wYXRoc1gBAAAALXRyHiAAAFgJAAAAZ2wudmFycmF5ch8gAAAoamkBAABqagEAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dsLmh0bWwjZ2wudmFycmF5WAEAAAAtdHIgIAAAWBQAAAByZXNvdXJjZS5nZXRwYWdlc2l6ZXIhIAAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXNvdXJjZS5odG1sI3Jlc291cmNlLmdldHBhZ2VzaXplWAEAAAAtdHIiIAAAWA8AAABpbWFnZW9wLnRvdmlkZW9yIyAAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hZ2VvcC5odG1sI2ltYWdlb3AudG92aWRlb1gBAAAALXRyJCAAAFgDAAAAb3JkciUgAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI29yZFgBAAAALXRyJiAAAFgSAAAAaXRlcnRvb2xzLmNvbXByZXNzcicgAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2l0ZXJ0b29scy5odG1sI2l0ZXJ0b29scy5jb21wcmVzc1gBAAAALXRyKCAAAFgMAAAAb3BlcmF0b3IueG9ycikgAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IueG9yWAEAAAAtdHIqIAAAWBYAAABzdHJpbmdwcmVwLmluX3RhYmxlX2M5cisgAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZ3ByZXAuaHRtbCNzdHJpbmdwcmVwLmluX3RhYmxlX2M5WAEAAAAtdHIsIAAAWAgAAABvcy53cml0ZXItIAAAKGppAQAAamoBAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLndyaXRlWAEAAAAtdHIuIAAAWAcAAABkbC5vcGVuci8gAAAoamkBAABqagEAAFgxAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RsLmh0bWwjZGwub3BlblgBAAAALXRyMCAAAFgNAAAAaW5zcGVjdC50cmFjZXIxIAAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC50cmFjZVgBAAAALXRyMiAAAFgPAAAAc2l0ZS5hZGRzaXRlZGlycjMgAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NpdGUuaHRtbCNzaXRlLmFkZHNpdGVkaXJYAQAAAC10cjQgAABYCgAAAGdsLm52YXJyYXlyNSAAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2wuaHRtbCNnbC5udmFycmF5WAEAAAAtdHI2IAAAWCcAAABnZW5zdWl0ZW1vZHVsZS5wcm9jZXNzZmlsZV9mcm9tcmVzb3VyY2VyNyAAAChqaQEAAGpqAQAAWF0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2Vuc3VpdGVtb2R1bGUuaHRtbCNnZW5zdWl0ZW1vZHVsZS5wcm9jZXNzZmlsZV9mcm9tcmVzb3VyY2VYAQAAAC10cjggAABYFgAAAHN0cmluZ3ByZXAuaW5fdGFibGVfZDFyOSAAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5ncHJlcC5odG1sI3N0cmluZ3ByZXAuaW5fdGFibGVfZDFYAQAAAC10cjogAABYCgAAAHV1aWQudXVpZDFyOyAAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXVpZC5odG1sI3V1aWQudXVpZDFYAQAAAC10cjwgAABYCgAAAHV1aWQudXVpZDRyPSAAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXVpZC5odG1sI3V1aWQudXVpZDRYAQAAAC10cj4gAABYCgAAAHV1aWQudXVpZDVyPyAAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXVpZC5odG1sI3V1aWQudXVpZDVYAQAAAC10ckAgAABYDQAAAGNnaXRiLmhhbmRsZXJyQSAAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2dpdGIuaHRtbCNjZ2l0Yi5oYW5kbGVyWAEAAAAtdHJCIAAAWBAAAABjdHlwZXMuZ2V0X2Vycm5vckMgAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5nZXRfZXJybm9YAQAAAC10ckQgAABYFAAAAGZpbmRlcnRvb2xzLnNodXRkb3duckUgAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hY29zdG9vbHMuaHRtbCNmaW5kZXJ0b29scy5zaHV0ZG93blgBAAAALXRyRiAAAFgPAAAAb3BlcmF0b3IuX19sdF9fckcgAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuX19sdF9fWAEAAAAtdHJIIAAAWBMAAAB1bmljb2RlZGF0YS5kZWNpbWFsckkgAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaWNvZGVkYXRhLmh0bWwjdW5pY29kZWRhdGEuZGVjaW1hbFgBAAAALXRySiAAAFgYAAAAc3NsLmNlcnRfdGltZV90b19zZWNvbmRzcksgAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5jZXJ0X3RpbWVfdG9fc2Vjb25kc1gBAAAALXRyTCAAAFgRAAAAY29udGV4dGxpYi5uZXN0ZWRyTSAAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29udGV4dGxpYi5odG1sI2NvbnRleHRsaWIubmVzdGVkWAEAAAAtdHJOIAAAWBYAAABmaWxlaW5wdXQuaG9va19lbmNvZGVkck8gAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZpbGVpbnB1dC5odG1sI2ZpbGVpbnB1dC5ob29rX2VuY29kZWRYAQAAAC10clAgAABYFAAAAHNpdGUuZ2V0c2l0ZXBhY2thZ2VzclEgAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NpdGUuaHRtbCNzaXRlLmdldHNpdGVwYWNrYWdlc1gBAAAALXRyUiAAAFgNAAAAc29ja2V0LmZyb21mZHJTIAAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuZnJvbWZkWAEAAAAtdHJUIAAAWBQAAABzb2NrZXQuZ2V0c2VydmJ5bmFtZXJVIAAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuZ2V0c2VydmJ5bmFtZVgBAAAALXRyViAAAFgQAAAAb3MucGF0aC5zcGxpdHVuY3JXIAAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5wYXRoLmh0bWwjb3MucGF0aC5zcGxpdHVuY1gBAAAALXRyWCAAAFgQAAAAYXVkaW9vcC5hbGF3MmxpbnJZIAAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hdWRpb29wLmh0bWwjYXVkaW9vcC5hbGF3MmxpblgBAAAALXRyWiAAAFgMAAAAcGFyc2VyLnN1aXRlclsgAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BhcnNlci5odG1sI3BhcnNlci5zdWl0ZVgBAAAALXRyXCAAAFgHAAAAb3Muc3RhdHJdIAAAKGppAQAAamoBAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLnN0YXRYAQAAAC10cl4gAABYEAAAAG9zLnBhdGguc2FtZWZpbGVyXyAAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MucGF0aC5odG1sI29zLnBhdGguc2FtZWZpbGVYAQAAAC10cmAgAABYFQAAAG9wZXJhdG9yLl9fc2V0c2xpY2VfX3JhIAAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9fc2V0c2xpY2VfX1gBAAAALXRyYiAAAFgWAAAAaXRlcnRvb2xzLmNvbWJpbmF0aW9uc3JjIAAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pdGVydG9vbHMuaHRtbCNpdGVydG9vbHMuY29tYmluYXRpb25zWAEAAAAtdHJkIAAAWBsAAABkaWZmbGliLkh0bWxEaWZmLm1ha2VfdGFibGVyZSAAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlmZmxpYi5odG1sI2RpZmZsaWIuSHRtbERpZmYubWFrZV90YWJsZVgBAAAALXRyZiAAAFgIAAAAb3MuZnN5bmNyZyAAAChqaQEAAGpqAQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5mc3luY1gBAAAALXRyaCAAAFgQAAAAb3BlcmF0b3IuaWNvbmNhdHJpIAAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLmljb25jYXRYAQAAAC10cmogAABYEAAAAG9wZXJhdG9yLl9fbmVnX19yayAAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX25lZ19fWAEAAAAtdHJsIAAAWA8AAABvcGVyYXRvci5yc2hpZnRybSAAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5yc2hpZnRYAQAAAC10cm4gAABYDgAAAHR1cnRsZS5oZWFkaW5ncm8gAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5oZWFkaW5nWAEAAAAtdHJwIAAAWBkAAABpbWFwbGliLlRpbWUySW50ZXJuYWxkYXRlcnEgAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLlRpbWUySW50ZXJuYWxkYXRlWAEAAAAtdHJyIAAAWB8AAABzeXNjb25maWcuZ2V0X21ha2VmaWxlX2ZpbGVuYW1lcnMgAAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5c2NvbmZpZy5odG1sI3N5c2NvbmZpZy5nZXRfbWFrZWZpbGVfZmlsZW5hbWVYAQAAAC10cnQgAABYDAAAAHN5cy5nZXR0cmFjZXJ1IAAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNzeXMuZ2V0dHJhY2VYAQAAAC10cnYgAABYEwAAAGFldG9vbHMudW5wYWNrZXZlbnRydyAAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWV0b29scy5odG1sI2FldG9vbHMudW5wYWNrZXZlbnRYAQAAAC10cnggAABYCwAAAGdsLnB3bGN1cnZlcnkgAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dsLmh0bWwjZ2wucHdsY3VydmVYAQAAAC10cnogAABYCAAAAG9zLnBsb2NrcnsgAAAoamkBAABqagEAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MucGxvY2tYAQAAAC10cnwgAABYIwAAAGRpc3R1dGlscy5mYW5jeV9nZXRvcHQuZmFuY3lfZ2V0b3B0cn0gAAAoamkBAABqagEAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmZhbmN5X2dldG9wdC5mYW5jeV9nZXRvcHRYAQAAAC10cn4gAABYCgAAAG9zLnNwYXdudmVyfyAAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5zcGF3bnZlWAEAAAAtdHKAIAAAWA0AAAB0dXJ0bGUub25kcmFncoEgAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5vbmRyYWdYAQAAAC10coIgAABYDgAAAGF1ZGlvb3AucmF0ZWN2coMgAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2F1ZGlvb3AuaHRtbCNhdWRpb29wLnJhdGVjdlgBAAAALXRyhCAAAFgMAAAAcHdkLmdldHB3dWlkcoUgAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B3ZC5odG1sI3B3ZC5nZXRwd3VpZFgBAAAALXRyhiAAAFgXAAAAc3RyaW5ncHJlcC5pbl90YWJsZV9jMTFyhyAAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5ncHJlcC5odG1sI3N0cmluZ3ByZXAuaW5fdGFibGVfYzExWAEAAAAtdHKIIAAAWBcAAABzdHJpbmdwcmVwLmluX3RhYmxlX2MxMnKJIAAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmdwcmVwLmh0bWwjc3RyaW5ncHJlcC5pbl90YWJsZV9jMTJYAQAAAC10coogAABYDAAAAGdsLmVuZHNlbGVjdHKLIAAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nbC5odG1sI2dsLmVuZHNlbGVjdFgBAAAALXRyjCAAAFgHAAAAb3MuZm9ya3KNIAAAKGppAQAAamoBAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLmZvcmtYAQAAAC10co4gAABYDAAAAGR1bWJkYm0ub3BlbnKPIAAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kdW1iZGJtLmh0bWwjZHVtYmRibS5vcGVuWAEAAAAtdHKQIAAAWAoAAABjc3YucmVhZGVycpEgAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nzdi5odG1sI2Nzdi5yZWFkZXJYAQAAAC10cpIgAABYFAAAAG9zLnBhdGguY29tbW9ucHJlZml4cpMgAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLnBhdGguaHRtbCNvcy5wYXRoLmNvbW1vbnByZWZpeFgBAAAALXRylCAAAFgUAAAAY3Vyc2VzLmFzY2lpLmlzY250cmxylSAAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmFzY2lpLmh0bWwjY3Vyc2VzLmFzY2lpLmlzY250cmxYAQAAAC10cpYgAABYCQAAAG1hdGguYWNvc3KXIAAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5hY29zWAEAAAAtdHKYIAAAWBcAAABzdHJpbmdwcmVwLm1hcF90YWJsZV9iM3KZIAAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmdwcmVwLmh0bWwjc3RyaW5ncHJlcC5tYXBfdGFibGVfYjNYAQAAAC10cpogAABYFwAAAHN0cmluZ3ByZXAubWFwX3RhYmxlX2IycpsgAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZ3ByZXAuaHRtbCNzdHJpbmdwcmVwLm1hcF90YWJsZV9iMlgBAAAALXRynCAAAFgQAAAAb3BlcmF0b3IuX19zdWJfX3KdIAAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9fc3ViX19YAQAAAC10cp4gAABYEQAAAHVybHBhcnNlLnVybHBhcnNlcp8gAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybHBhcnNlLmh0bWwjdXJscGFyc2UudXJscGFyc2VYAQAAAC10cqAgAABYAwAAAHppcHKhIAAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCN6aXBYAQAAAC10cqIgAABYDwAAAGl0ZXJ0b29scy5jeWNsZXKjIAAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pdGVydG9vbHMuaHRtbCNpdGVydG9vbHMuY3ljbGVYAQAAAC10cqQgAABYEwAAAHRyYWNlYmFjay5mb3JtYXRfdGJypSAAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHJhY2ViYWNrLmh0bWwjdHJhY2ViYWNrLmZvcm1hdF90YlgBAAAALXRypiAAAFggAAAAeG1sLmV0cmVlLkVsZW1lbnRUcmVlLmZyb21zdHJpbmdypyAAAChqaQEAAGpqAQAAWF0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLmZyb21zdHJpbmdYAQAAAC10cqggAABYEAAAAGdldHRleHQubGdldHRleHRyqSAAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2V0dGV4dC5odG1sI2dldHRleHQubGdldHRleHRYAQAAAC10cqogAABYFQAAAG1zdmNydC5vcGVuX29zZmhhbmRsZXKrIAAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc3ZjcnQuaHRtbCNtc3ZjcnQub3Blbl9vc2ZoYW5kbGVYAQAAAC10cqwgAABYDQAAAG9wZXJhdG9yLmlzdWJyrSAAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5pc3ViWAEAAAAtdHKuIAAAWBYAAABDYXJib24uU2NyYXAuSW5mb1NjcmFwcq8gAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI0NhcmJvbi5TY3JhcC5JbmZvU2NyYXBYAQAAAC10crAgAABYDAAAAHR1cnRsZS5zdGFtcHKxIAAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuc3RhbXBYAQAAAC10crIgAABYDQAAAGxvZ2dpbmcuZXJyb3JysyAAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuZXJyb3JYAQAAAC10crQgAABYCgAAAHR1cnRsZS5wb3NytSAAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnBvc1gBAAAALXRytiAAAFgHAAAAcGRiLnJ1bnK3IAAAKGppAQAAamoBAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wZGIuaHRtbCNwZGIucnVuWAEAAAAtdHK4IAAAWBAAAABvcGVyYXRvci5nZXRpdGVtcrkgAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuZ2V0aXRlbVgBAAAALXRyuiAAAFgSAAAAcGxhdGZvcm0ucHJvY2Vzc29ycrsgAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BsYXRmb3JtLmh0bWwjcGxhdGZvcm0ucHJvY2Vzc29yWAEAAAAtdHK8IAAAWAkAAABvcy5mZG9wZW5yvSAAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5mZG9wZW5YAQAAAC10cr4gAABYEwAAAGNvbG9yc3lzLnlpcV90b19yZ2JyvyAAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sb3JzeXMuaHRtbCNjb2xvcnN5cy55aXFfdG9fcmdiWAEAAAAtdHLAIAAAWBYAAABpdGVydG9vbHMuaXppcF9sb25nZXN0csEgAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2l0ZXJ0b29scy5odG1sI2l0ZXJ0b29scy5pemlwX2xvbmdlc3RYAQAAAC10csIgAABYEAAAAHBrZ3V0aWwuZ2V0X2RhdGFywyAAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGtndXRpbC5odG1sI3BrZ3V0aWwuZ2V0X2RhdGFYAQAAAC10csQgAABYCQAAAHdhdmUub3BlbnLFIAAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93YXZlLmh0bWwjd2F2ZS5vcGVuWAEAAAAtdHLGIAAAWBIAAABjdXJzZXMucGFpcl9udW1iZXJyxyAAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLnBhaXJfbnVtYmVyWAEAAAAtdHLIIAAAWBYAAABkaXN0dXRpbHMudXRpbC5leGVjdXRlcskgAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLnV0aWwuZXhlY3V0ZVgBAAAALXRyyiAAAFgUAAAAdXJsbGliMi5idWlsZF9vcGVuZXJyyyAAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuYnVpbGRfb3BlbmVyWAEAAAAtdHLMIAAAWAwAAABwaWNrbGUubG9hZHNyzSAAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGlja2xlLmh0bWwjcGlja2xlLmxvYWRzWAEAAAAtdHLOIAAAWAwAAABzdHJpbmcubGp1c3RyzyAAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLmxqdXN0WAEAAAAtdHLQIAAAWBsAAABzdHJpbmdwcmVwLmluX3RhYmxlX2MyMV9jMjJy0SAAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5ncHJlcC5odG1sI3N0cmluZ3ByZXAuaW5fdGFibGVfYzIxX2MyMlgBAAAALXRy0iAAAFgJAAAAdHVydGxlLnN0ctMgAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5zdFgBAAAALXRy1CAAAFgJAAAAb3MuZXhlY2xlctUgAAAoamkBAABqagEAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuZXhlY2xlWAEAAAAtdHLWIAAAWA8AAABhdWRpb29wLmZpbmRmaXRy1yAAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXVkaW9vcC5odG1sI2F1ZGlvb3AuZmluZGZpdFgBAAAALXRy2CAAAFgJAAAAb3MuZXhlY2xwctkgAAAoamkBAABqagEAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuZXhlY2xwWAEAAAAtdHLaIAAAWBUAAABvcGVyYXRvci5tZXRob2RjYWxsZXJy2yAAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5tZXRob2RjYWxsZXJYAQAAAC10ctwgAABYDQAAAHR0eS5zZXRjYnJlYWty3SAAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHR5Lmh0bWwjdHR5LnNldGNicmVha1gBAAAALXRy3iAAAFgOAAAAY3Vyc2VzLnNhdmV0dHly3yAAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLnNhdmV0dHlYAQAAAC10cuAgAABYEAAAAG9wZXJhdG9yLmlyZXBlYXRy4SAAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5pcmVwZWF0WAEAAAAtdHLiIAAAWAwAAABzc2wuUkFORF9hZGRy4yAAAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlJBTkRfYWRkWAEAAAAtdHLkIAAAWA0AAABjZC5tc2Z0b2ZyYW1lcuUgAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NkLmh0bWwjY2QubXNmdG9mcmFtZVgBAAAALXRy5iAAAFgQAAAAZmlsZWNtcC5jbXBmaWxlc3LnIAAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9maWxlY21wLmh0bWwjZmlsZWNtcC5jbXBmaWxlc1gBAAAALXRy6CAAAFgKAAAAanNvbi5sb2Fkc3LpIAAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9qc29uLmh0bWwjanNvbi5sb2Fkc1gBAAAALXRy6iAAAFgNAAAAYmlzZWN0Lmluc29ydHLrIAAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iaXNlY3QuaHRtbCNiaXNlY3QuaW5zb3J0WAEAAAAtdHLsIAAAWA4AAABsb2NhbGUuc3RyeGZybXLtIAAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUuc3RyeGZybVgBAAAALXRy7iAAAFgPAAAAdHVydGxlLmRpc3RhbmNlcu8gAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5kaXN0YW5jZVgBAAAALXRy8CAAAFgQAAAAcGxhdGZvcm0udmVyc2lvbnLxIAAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wbGF0Zm9ybS5odG1sI3BsYXRmb3JtLnZlcnNpb25YAQAAAC10cvIgAABYEwAAAGNvZGVjcy5sb29rdXBfZXJyb3Jy8yAAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLmxvb2t1cF9lcnJvclgBAAAALXRy9CAAAFgRAAAAd2FybmluZ3Mud2FybnB5M2ty9SAAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2FybmluZ3MuaHRtbCN3YXJuaW5ncy53YXJucHkza1gBAAAALXRy9iAAAFgLAAAAdHVydGxlLmhvbWVy9yAAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmhvbWVYAQAAAC10cvggAABYEQAAAGNvZGVjcy5nZXRlbmNvZGVycvkgAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5nZXRlbmNvZGVyWAEAAAAtdHL6IAAAWAoAAABjbWF0aC50YW5ocvsgAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NtYXRoLmh0bWwjY21hdGgudGFuaFgBAAAALXRy/CAAAFgSAAAAc29ja2V0LmdldGFkZHJpbmZvcv0gAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5nZXRhZGRyaW5mb1gBAAAALXRy/iAAAFgNAAAAcXVvcHJpLmRlY29kZXL/IAAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9xdW9wcmkuaHRtbCNxdW9wcmkuZGVjb2RlWAEAAAAtdHIAIQAAWBYAAABzeXMuZ2V0ZGVmYXVsdGVuY29kaW5ncgEhAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5nZXRkZWZhdWx0ZW5jb2RpbmdYAQAAAC10cgIhAABYDwAAAG9wZXJhdG9yLl9fbGVfX3IDIQAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9fbGVfX1gBAAAALXRyBCEAAFgUAAAAc3lzLnNldGNoZWNraW50ZXJ2YWxyBSEAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLnNldGNoZWNraW50ZXJ2YWxYAQAAAC10cgYhAABYBwAAAGlvLm9wZW5yByEAAChqaQEAAGpqAQAAWDEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW8uaHRtbCNpby5vcGVuWAEAAAAtdHIIIQAAWA8AAAB0ZXJtaW9zLnRjZHJhaW5yCSEAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGVybWlvcy5odG1sI3Rlcm1pb3MudGNkcmFpblgBAAAALXRyCiEAAFgQAAAAbG9jYWxlLnNldGxvY2FsZXILIQAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUuc2V0bG9jYWxlWAEAAAAtdHIMIQAAWBIAAABpbWFwbGliLlBhcnNlRmxhZ3NyDSEAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuUGFyc2VGbGFnc1gBAAAALXRyDiEAAFgTAAAAdHVydGxlLndpbmRvd193aWR0aHIPIQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUud2luZG93X3dpZHRoWAEAAAAtdHIQIQAAWAkAAABjbWF0aC5leHByESEAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY21hdGguaHRtbCNjbWF0aC5leHBYAQAAAC10chIhAABYFwAAAHdlYWtyZWYuZ2V0d2Vha3JlZmNvdW50chMhAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dlYWtyZWYuaHRtbCN3ZWFrcmVmLmdldHdlYWtyZWZjb3VudFgBAAAALXRyFCEAAFgLAAAAb3Muc3Bhd252cGVyFSEAAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5zcGF3bnZwZVgBAAAALXRyFiEAAFgIAAAAcmUubWF0Y2hyFyEAAChqaQEAAGpqAQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmUuaHRtbCNyZS5tYXRjaFgBAAAALXRyGCEAAFgbAAAAeG1sLmV0cmVlLkVsZW1lbnRUcmVlLnBhcnNlchkhAAAoamkBAABqagEAAFhYAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5wYXJzZVgBAAAALXRyGiEAAFgQAAAAYmluYXNjaWkuYjJhX2hleHIbIQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iaW5hc2NpaS5odG1sI2JpbmFzY2lpLmIyYV9oZXhYAQAAAC10chwhAABYCAAAAGFzdC5kdW1wch0hAAAoamkBAABqagEAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzdC5odG1sI2FzdC5kdW1wWAEAAAAtdHIeIQAAWAMAAABsZW5yHyEAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjbGVuWAEAAAAtdHIgIQAAWBAAAABvcGVyYXRvci5pbmRleE9mciEhAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuaW5kZXhPZlgBAAAALXRyIiEAAFgQAAAAaW5zcGVjdC5pc21ldGhvZHIjIQAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5pc21ldGhvZFgBAAAALXRyJCEAAFgVAAAAY3Vyc2VzLmRlZl9zaGVsbF9tb2RlciUhAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5kZWZfc2hlbGxfbW9kZVgBAAAALXRyJiEAAFgJAAAAbWF0aC5zaW5ocichAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hdGguaHRtbCNtYXRoLnNpbmhYAQAAAC10cighAABYDgAAAHR1cnRsZS50b3dhcmRzcikhAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS50b3dhcmRzWAEAAAAtdHIqIQAAWB8AAAB0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbl9vbmx5cishAAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RyYWNlYmFjay5odG1sI3RyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uX29ubHlYAQAAAC10ciwhAABYCwAAAHdhdmUub3BlbmZwci0hAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dhdmUuaHRtbCN3YXZlLm9wZW5mcFgBAAAALXRyLiEAAFgLAAAAdHVydGxlLnljb3JyLyEAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnljb3JYAQAAAC10cjAhAABYDAAAAGJzZGRiLmJ0b3BlbnIxIQAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ic2RkYi5odG1sI2JzZGRiLmJ0b3BlblgBAAAALXRyMiEAAFgSAAAAaW1hZ2VvcC5ncmV5MmdyZXkycjMhAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYWdlb3AuaHRtbCNpbWFnZW9wLmdyZXkyZ3JleTJYAQAAAC10cjQhAABYEAAAAG9wZXJhdG9yLl9fbm90X19yNSEAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX25vdF9fWAEAAAAtdHI2IQAAWAwAAAB1dWlkLmdldG5vZGVyNyEAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXVpZC5odG1sI3V1aWQuZ2V0bm9kZVgBAAAALXRyOCEAAFgNAAAAdGltZS5zdHJmdGltZXI5IQAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aW1lLmh0bWwjdGltZS5zdHJmdGltZVgBAAAALXRyOiEAAFgPAAAAc3NsLndyYXBfc29ja2V0cjshAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC53cmFwX3NvY2tldFgBAAAALXRyPCEAAFgcAAAAZ2Vuc3VpdGVtb2R1bGUuaXNfc2NyaXB0YWJsZXI9IQAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZW5zdWl0ZW1vZHVsZS5odG1sI2dlbnN1aXRlbW9kdWxlLmlzX3NjcmlwdGFibGVYAQAAAC10cj4hAABYDgAAAGN1cnNlcy5pbml0c2Nycj8hAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5pbml0c2NyWAEAAAAtdHJAIQAAWBoAAABzaHV0aWwuZ2V0X2FyY2hpdmVfZm9ybWF0c3JBIQAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaHV0aWwuaHRtbCNzaHV0aWwuZ2V0X2FyY2hpdmVfZm9ybWF0c1gBAAAALXRyQiEAAFgSAAAAZmlsZWlucHV0Lm5leHRmaWxlckMhAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZpbGVpbnB1dC5odG1sI2ZpbGVpbnB1dC5uZXh0ZmlsZVgBAAAALXRyRCEAAFgVAAAAcmFuZG9tLndlaWJ1bGx2YXJpYXRlckUhAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JhbmRvbS5odG1sI3JhbmRvbS53ZWlidWxsdmFyaWF0ZVgBAAAALXRyRiEAAFgQAAAAdXJscGFyc2UudXJsam9pbnJHIQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxwYXJzZS5odG1sI3VybHBhcnNlLnVybGpvaW5YAQAAAC10ckghAABYEQAAAGtleXdvcmQuaXNrZXl3b3JkckkhAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2tleXdvcmQuaHRtbCNrZXl3b3JkLmlza2V5d29yZFgBAAAALXRySiEAAFgeAAAAcGxpc3RsaWIucmVhZFBsaXN0RnJvbVJlc291cmNlckshAAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BsaXN0bGliLmh0bWwjcGxpc3RsaWIucmVhZFBsaXN0RnJvbVJlc291cmNlWAEAAAAtdHJMIQAAWA0AAABnYy5pc190cmFja2Vkck0hAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2djLmh0bWwjZ2MuaXNfdHJhY2tlZFgBAAAALXRyTiEAAFgRAAAAaW1hZ2VvcC5ncmV5Mm1vbm9yTyEAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hZ2VvcC5odG1sI2ltYWdlb3AuZ3JleTJtb25vWAEAAAAtdHJQIQAAWAwAAABzdHJpbmcubG93ZXJyUSEAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLmxvd2VyWAEAAAAtdHJSIQAAWBAAAABjdXJzZXMubW91c2VtYXNrclMhAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5tb3VzZW1hc2tYAQAAAC10clQhAABYIwAAAGRpc3R1dGlscy5hcmNoaXZlX3V0aWwubWFrZV9hcmNoaXZlclUhAAAoamkBAABqagEAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmFyY2hpdmVfdXRpbC5tYWtlX2FyY2hpdmVYAQAAAC10clYhAABYFQAAAGluc3BlY3QuZm9ybWF0YXJnc3BlY3JXIQAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5mb3JtYXRhcmdzcGVjWAEAAAAtdHJYIQAAWA4AAABkaXMuZmluZGxhYmVsc3JZIQAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNkaXMuZmluZGxhYmVsc1gBAAAALXRyWiEAAFgQAAAAX3dpbnJlZy5TZXRWYWx1ZXJbIQAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjX3dpbnJlZy5TZXRWYWx1ZVgBAAAALXRyXCEAAFgIAAAAb3Mud2FpdDNyXSEAAChqaQEAAGpqAQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy53YWl0M1gBAAAALXRyXiEAAFgNAAAAYXN5bmNvcmUubG9vcHJfIQAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hc3luY29yZS5odG1sI2FzeW5jb3JlLmxvb3BYAQAAAC10cmAhAABYDQAAAGN1cnNlcy5ub2VjaG9yYSEAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLm5vZWNob1gBAAAALXRyYiEAAFgNAAAAZG9jdGVzdC5kZWJ1Z3JjIQAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5kZWJ1Z1gBAAAALXRyZCEAAFgKAAAAc3VuYXUub3BlbnJlIQAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdW5hdS5odG1sI3N1bmF1Lm9wZW5YAQAAAC10cmYhAABYEQAAAGluc3BlY3QuaXNyb3V0aW5lcmchAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0Lmlzcm91dGluZVgBAAAALXRyaCEAAFgNAAAAaW1wLmxvY2tfaGVsZHJpIQAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbXAuaHRtbCNpbXAubG9ja19oZWxkWAEAAAAtdHJqIQAAWAMAAABhbnlyayEAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjYW55WAEAAAAtdHJsIQAAWAwAAABmcGZvcm1hdC5zY2lybSEAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnBmb3JtYXQuaHRtbCNmcGZvcm1hdC5zY2lYAQAAAC10cm4hAABYEwAAAHVybGxpYi51cmwycGF0aG5hbWVybyEAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliLmh0bWwjdXJsbGliLnVybDJwYXRobmFtZVgBAAAALXRycCEAAFgOAAAAdHVydGxlLnJhZGlhbnNycSEAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnJhZGlhbnNYAQAAAC10cnIhAABYCwAAAGNtYXRoLmFzaW5ocnMhAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NtYXRoLmh0bWwjY21hdGguYXNpbmhYAQAAAC10cnQhAABYHAAAAF93aW5yZWcuRGlzYWJsZVJlZmxlY3Rpb25LZXlydSEAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvX3dpbnJlZy5odG1sI193aW5yZWcuRGlzYWJsZVJlZmxlY3Rpb25LZXlYAQAAAC10cnYhAABYEgAAAHJhbmRvbS5nZXRyYW5kYml0c3J3IQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yYW5kb20uaHRtbCNyYW5kb20uZ2V0cmFuZGJpdHNYAQAAAC10cnghAABYIAAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS5TdWJFbGVtZW50cnkhAAAoamkBAABqagEAAFhdAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5TdWJFbGVtZW50WAEAAAAtdHJ6IQAAWAsAAABzdGF0LlNfSUZNVHJ7IQAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TX0lGTVRYAQAAAC10cnwhAABYCwAAAG9zLmxjaGZsYWdzcn0hAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MubGNoZmxhZ3NYAQAAAC10cn4hAABYEAAAAHR1cnRsZS5maWxsY29sb3JyfyEAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmZpbGxjb2xvclgBAAAALXRygCEAAFgSAAAAbG9jYWxlLnJlc2V0bG9jYWxlcoEhAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvY2FsZS5odG1sI2xvY2FsZS5yZXNldGxvY2FsZVgBAAAALXRygiEAAFgPAAAAZmwuZ2V0X2ZpbGVuYW1lcoMhAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZsLmh0bWwjZmwuZ2V0X2ZpbGVuYW1lWAEAAAAtdHKEIQAAWB4AAAB4bWwucGFyc2Vycy5leHBhdC5QYXJzZXJDcmVhdGVyhSEAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LlBhcnNlckNyZWF0ZVgBAAAALXRyhiEAAFgjAAAAcmVhZGxpbmUuZ2V0X2N1cnJlbnRfaGlzdG9yeV9sZW5ndGhyhyEAAChqaQEAAGpqAQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVhZGxpbmUuaHRtbCNyZWFkbGluZS5nZXRfY3VycmVudF9oaXN0b3J5X2xlbmd0aFgBAAAALXRyiCEAAFgSAAAARnJhbWVXb3JrLk1lbnVJdGVtcokhAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZyYW1ld29yay5odG1sI0ZyYW1lV29yay5NZW51SXRlbVgBAAAALXRyiiEAAFgMAAAAc3RhdC5TX0lTUkVHcoshAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNfSVNSRUdYAQAAAC10cowhAABYGgAAAG11bHRpcHJvY2Vzc2luZy5nZXRfbG9nZ2Vyco0hAAAoamkBAABqagEAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5nZXRfbG9nZ2VyWAEAAAAtdHKOIQAAWAsAAAB0dXJ0bGUuZmlsbHKPIQAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuZmlsbFgBAAAALXRykCEAAFgNAAAAb3BlcmF0b3IuaXhvcnKRIQAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLml4b3JYAQAAAC10cpIhAABYDAAAAG9zLmZkYXRhc3luY3KTIQAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLmZkYXRhc3luY1gBAAAALXRylCEAAFgUAAAAZG9jdGVzdC5Eb2NGaWxlU3VpdGVylSEAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRG9jRmlsZVN1aXRlWAEAAAAtdHKWIQAAWAsAAABjbGFzc21ldGhvZHKXIQAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNjbGFzc21ldGhvZFgBAAAALXRymCEAAFgQAAAAb3BlcmF0b3IuX194b3JfX3KZIQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9feG9yX19YAQAAAC10cpohAABYEgAAAHRocmVhZGluZy5zZXR0cmFjZXKbIQAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuc2V0dHJhY2VYAQAAAC10cpwhAABYEgAAAGNvbW1hbmRzLmdldHN0YXR1c3KdIQAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb21tYW5kcy5odG1sI2NvbW1hbmRzLmdldHN0YXR1c1gBAAAALXRyniEAAFgMAAAAY3Vyc2VzLnRwYXJtcp8hAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy50cGFybVgBAAAALXRyoCEAAFgSAAAAZGVjaW1hbC5zZXRjb250ZXh0cqEhAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLnNldGNvbnRleHRYAQAAAC10cqIhAABYDQAAAHVuaXR0ZXN0Lm1haW5yoyEAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5tYWluWAEAAAAtdHKkIQAAWAoAAABvcy5saXN0ZGlycqUhAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MubGlzdGRpclgBAAAALXRypiEAAFgSAAAAb3BlcmF0b3IuaWZsb29yZGl2cqchAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuaWZsb29yZGl2WAEAAAAtdHKoIQAAWAsAAABjbWF0aC5wb2xhcnKpIQAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jbWF0aC5odG1sI2NtYXRoLnBvbGFyWAEAAAAtdHKqIQAAWA8AAABzeXMuZGlzcGxheWhvb2tyqyEAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmRpc3BsYXlob29rWAEAAAAtdHKsIQAAWBAAAABpbnNwZWN0LmNsZWFuZG9jcq0hAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmNsZWFuZG9jWAEAAAAtdHKuIQAAWBEAAABjdHlwZXMuUFlGVU5DVFlQRXKvIQAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuUFlGVU5DVFlQRVgBAAAALXRysCEAAFgMAAAAc2lnbmFsLmFsYXJtcrEhAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NpZ25hbC5odG1sI3NpZ25hbC5hbGFybVgBAAAALXRysiEAAFgJAAAAdHVydGxlLnJ0crMhAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5ydFgBAAAALXRytCEAAFgLAAAAb3MucmVhZGxpbmtytSEAAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5yZWFkbGlua1gBAAAALXRytiEAAFgPAAAAaXRlcnRvb2xzLmNoYWlucrchAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2l0ZXJ0b29scy5odG1sI2l0ZXJ0b29scy5jaGFpblgBAAAALXRyuCEAAFgUAAAAaW5zcGVjdC5nZXRhcmd2YWx1ZXNyuSEAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QuZ2V0YXJndmFsdWVzWAEAAAAtdHK6IQAAWA8AAAB1cmxsaWIyLnVybG9wZW5yuyEAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIudXJsb3BlblgBAAAALXRyvCEAAFgWAAAAdGVtcGZpbGUuVGVtcG9yYXJ5RmlsZXK9IQAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZW1wZmlsZS5odG1sI3RlbXBmaWxlLlRlbXBvcmFyeUZpbGVYAQAAAC10cr4hAABYEAAAAGJhc2U2NC5iMTZkZWNvZGVyvyEAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmFzZTY0Lmh0bWwjYmFzZTY0LmIxNmRlY29kZVgBAAAALXRywCEAAFgMAAAAemxpYi5hZGxlcjMycsEhAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3psaWIuaHRtbCN6bGliLmFkbGVyMzJYAQAAAC10csIhAABYEAAAAGxvZ2dpbmcuc2h1dGRvd25ywyEAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuc2h1dGRvd25YAQAAAC10csQhAABYDgAAAHR1cnRsZS5wZW5zaXplcsUhAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5wZW5zaXplWAEAAAAtdHLGIQAAWBAAAABsb2NhbGUuZGNnZXR0ZXh0cschAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvY2FsZS5odG1sI2xvY2FsZS5kY2dldHRleHRYAQAAAC10csghAABYEQAAAGN1cnNlcy5oYXNfY29sb3JzcskhAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5oYXNfY29sb3JzWAEAAAAtdHLKIQAAWBIAAABvcy5wYXRoLmV4cGFuZHVzZXJyyyEAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MucGF0aC5odG1sI29zLnBhdGguZXhwYW5kdXNlclgBAAAALXRyzCEAAFgMAAAAZmwuZ2V0bWNvbG9ycs0hAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZsLmh0bWwjZmwuZ2V0bWNvbG9yWAEAAAAtdHLOIQAAWA4AAAB0dXJ0bGUudHVydGxlc3LPIQAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUudHVydGxlc1gBAAAALXRy0CEAAFgHAAAAbWQ1Lm5ld3LRIQAAKGppAQAAamoBAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tZDUuaHRtbCNtZDUubmV3WAEAAAAtdHLSIQAAWBEAAABvcGVyYXRvci5fX2l4b3JfX3LTIQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9faXhvcl9fWAEAAAAtdHLUIQAAWAwAAABzZWxlY3QuZXBvbGxy1SEAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2VsZWN0Lmh0bWwjc2VsZWN0LmVwb2xsWAEAAAAtdHLWIQAAWAgAAABtYXRoLnNpbnLXIQAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5zaW5YAQAAAC10ctghAABYDQAAAHN0cmluZy5yaW5kZXhy2SEAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLnJpbmRleFgBAAAALXRy2iEAAFgUAAAAcGlja2xldG9vbHMub3B0aW1pemVy2yEAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGlja2xldG9vbHMuaHRtbCNwaWNrbGV0b29scy5vcHRpbWl6ZVgBAAAALXRy3CEAAFgUAAAAb3BlcmF0b3IuX19nZXRpdGVtX19y3SEAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX2dldGl0ZW1fX1gBAAAALXRy3iEAAFgUAAAAc29ja2V0LmdldGhvc3RieW5hbWVy3yEAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LmdldGhvc3RieW5hbWVYAQAAAC10cuAhAABYFQAAAGVtYWlsLnV0aWxzLnBhcnNlZGF0ZXLhIQAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC51dGlscy5odG1sI2VtYWlsLnV0aWxzLnBhcnNlZGF0ZVgBAAAALXRy4iEAAFgTAAAAY3Vyc2VzLmFzY2lpLmlzY3RybHLjIQAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuYXNjaWkuaHRtbCNjdXJzZXMuYXNjaWkuaXNjdHJsWAEAAAAtdHLkIQAAWBQAAABtc2lsaWIuaW5pdF9kYXRhYmFzZXLlIQAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuaW5pdF9kYXRhYmFzZVgBAAAALXRy5iEAAFgWAAAAaW5zcGVjdC5nZXRvdXRlcmZyYW1lc3LnIQAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5nZXRvdXRlcmZyYW1lc1gBAAAALXRy6CEAAFgLAAAAbG9jYWxlLmF0b2ly6SEAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLmF0b2lYAQAAAC10cuohAABYIgAAAGRpc3R1dGlscy5zeXNjb25maWcuZ2V0X3B5dGhvbl9pbmNy6yEAAChqaQEAAGpqAQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9weXRob25faW5jWAEAAAAtdHLsIQAAWAsAAABsb2NhbGUuYXRvZnLtIQAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUuYXRvZlgBAAAALXRy7iEAAFgUAAAAbXVsdGlwcm9jZXNzaW5nLlBpcGVy7yEAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLlBpcGVYAQAAAC10cvAhAABYDgAAAG9zLnBhdGguZXhpc3RzcvEhAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLnBhdGguaHRtbCNvcy5wYXRoLmV4aXN0c1gBAAAALXRy8iEAAFgWAAAAZ2V0dGV4dC5iaW5kdGV4dGRvbWFpbnLzIQAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZXR0ZXh0Lmh0bWwjZ2V0dGV4dC5iaW5kdGV4dGRvbWFpblgBAAAALXRy9CEAAFgQAAAAY3Vyc2VzLmFzY2lpLmFsdHL1IQAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuYXNjaWkuaHRtbCNjdXJzZXMuYXNjaWkuYWx0WAEAAAAtdHL2IQAAWAkAAABnbC5zZWxlY3Ry9yEAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2wuaHRtbCNnbC5zZWxlY3RYAQAAAC10cvghAABYEwAAAG9wZXJhdG9yLml0ZW1nZXR0ZXJy+SEAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5pdGVtZ2V0dGVyWAEAAAAtdHL6IQAAWA8AAABvcGVyYXRvci5fX2VxX19y+yEAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX2VxX19YAQAAAC10cvwhAABYCgAAAG1hdGgubGRleHBy/SEAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWF0aC5odG1sI21hdGgubGRleHBYAQAAAC10cv4hAABYFQAAAG9zc2F1ZGlvZGV2Lm9wZW5taXhlcnL/IQAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vc3NhdWRpb2Rldi5odG1sI29zc2F1ZGlvZGV2Lm9wZW5taXhlclgBAAAALXRyACIAAFgNAAAAYmluaGV4LmJpbmhleHIBIgAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iaW5oZXguaHRtbCNiaW5oZXguYmluaGV4WAEAAAAtdHICIgAAWBAAAABtaW1ldG9vbHMuZGVjb2RlcgMiAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbWV0b29scy5odG1sI21pbWV0b29scy5kZWNvZGVYAQAAAC10cgQiAABYDgAAAG9zLldFWElUU1RBVFVTcgUiAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuV0VYSVRTVEFUVVNYAQAAAC10cgYiAABYEAAAAG9wZXJhdG9yLl9fYWJzX19yByIAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX2Fic19fWAEAAAAtdHIIIgAAWAkAAABtYXRoLmZzdW1yCSIAAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWF0aC5odG1sI21hdGguZnN1bVgBAAAALXRyCiIAAFgYAAAAZGlzdHV0aWxzLmNvcmUucnVuX3NldHVwcgsiAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNvcmUucnVuX3NldHVwWAEAAAAtdHIMIgAAWBEAAABvcGVyYXRvci5pdHJ1ZWRpdnINIgAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLml0cnVlZGl2WAEAAAAtdHIOIgAAWAMAAABjbXByDyIAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjY21wWAEAAAAtdHIQIgAAWBMAAABjb2xvcnN5cy5yZ2JfdG9feWlxchEiAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbG9yc3lzLmh0bWwjY29sb3JzeXMucmdiX3RvX3lpcVgBAAAALXRyEiIAAFgNAAAAdHVydGxlLmlzZG93bnITIgAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuaXNkb3duWAEAAAAtdHIUIgAAWBAAAABnYy5nZXRfdGhyZXNob2xkchUiAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2djLmh0bWwjZ2MuZ2V0X3RocmVzaG9sZFgBAAAALXRyFiIAAFgVAAAAbXVsdGlwcm9jZXNzaW5nLkFycmF5chciAAAoamkBAABqagEAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5BcnJheVgBAAAALXRyGCIAAFgbAAAAZG9jdGVzdC5yZWdpc3Rlcl9vcHRpb25mbGFnchkiAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LnJlZ2lzdGVyX29wdGlvbmZsYWdYAQAAAC10choiAABYFgAAAHN0cmluZ3ByZXAuaW5fdGFibGVfZDJyGyIAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5ncHJlcC5odG1sI3N0cmluZ3ByZXAuaW5fdGFibGVfZDJYAQAAAC10chwiAABYCAAAAG9zLmV4ZWN2ch0iAAAoamkBAABqagEAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuZXhlY3ZYAQAAAC10ch4iAABYEQAAAGNnaS5wcmludF9lbnZpcm9uch8iAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NnaS5odG1sI2NnaS5wcmludF9lbnZpcm9uWAEAAAAtdHIgIgAAWBgAAABkaXN0dXRpbHMudXRpbC5zdHJ0b2Jvb2xyISIAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMudXRpbC5zdHJ0b2Jvb2xYAQAAAC10ciIiAABYFQAAAHN5cy5nZXR3aW5kb3dzdmVyc2lvbnIjIgAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNzeXMuZ2V0d2luZG93c3ZlcnNpb25YAQAAAC10ciQiAABYEQAAAGZubWF0Y2gudHJhbnNsYXRlciUiAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZubWF0Y2guaHRtbCNmbm1hdGNoLnRyYW5zbGF0ZVgBAAAALXRyJiIAAFgIAAAAb3MuZXhlY2xyJyIAAChqaQEAAGpqAQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5leGVjbFgBAAAALXRyKCIAAFgOAAAAY2dpLnByaW50X2Zvcm1yKSIAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2dpLmh0bWwjY2dpLnByaW50X2Zvcm1YAQAAAC10cioiAABYFAAAAHdpbnNvdW5kLk1lc3NhZ2VCZWVwcisiAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dpbnNvdW5kLmh0bWwjd2luc291bmQuTWVzc2FnZUJlZXBYAQAAAC10ciwiAABYHgAAAHdzZ2lyZWYuc2ltcGxlX3NlcnZlci5kZW1vX2FwcHItIgAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi5zaW1wbGVfc2VydmVyLmRlbW9fYXBwWAEAAAAtdHIuIgAAWA0AAAB0dXJ0bGUuY2lyY2xlci8iAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5jaXJjbGVYAQAAAC10cjAiAABYDQAAAGdsLm51cmJzY3VydmVyMSIAAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2wuaHRtbCNnbC5udXJic2N1cnZlWAEAAAAtdHIyIgAAWA4AAAB0ZXJtaW9zLnRjZmxvd3IzIgAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZXJtaW9zLmh0bWwjdGVybWlvcy50Y2Zsb3dYAQAAAC10cjQiAABYCwAAAHRpbWUuZ210aW1lcjUiAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpbWUuaHRtbCN0aW1lLmdtdGltZVgBAAAALXRyNiIAAFgQAAAAb3BlcmF0b3IuX19kaXZfX3I3IgAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9fZGl2X19YAQAAAC10cjgiAABYHAAAAHN5c2NvbmZpZy5nZXRfcHl0aG9uX3ZlcnNpb25yOSIAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzY29uZmlnLmh0bWwjc3lzY29uZmlnLmdldF9weXRob25fdmVyc2lvblgBAAAALXRyOiIAAFgMAAAAc3RyaW5nLmNvdW50cjsiAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZy5odG1sI3N0cmluZy5jb3VudFgBAAAALXRyPCIAAFgJAAAAbWF0aC5tb2Rmcj0iAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hdGguaHRtbCNtYXRoLm1vZGZYAQAAAC10cj4iAABYEAAAAGluc3BlY3QuaXNtb2R1bGVyPyIAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QuaXNtb2R1bGVYAQAAAC10ckAiAABYCgAAAGNnaS5lc2NhcGVyQSIAAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2dpLmh0bWwjY2dpLmVzY2FwZVgBAAAALXRyQiIAAFgPAAAAZ2V0cGFzcy5nZXRwYXNzckMiAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dldHBhc3MuaHRtbCNnZXRwYXNzLmdldHBhc3NYAQAAAC10ckQiAABYEQAAAGl0ZXJ0b29scy5zdGFybWFwckUiAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2l0ZXJ0b29scy5odG1sI2l0ZXJ0b29scy5zdGFybWFwWAEAAAAtdHJGIgAAWBoAAAB0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbnJHIgAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90cmFjZWJhY2suaHRtbCN0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvblgBAAAALXRySCIAAFgOAAAAaW1wLm5ld19tb2R1bGVySSIAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1wLmh0bWwjaW1wLm5ld19tb2R1bGVYAQAAAC10ckoiAABYGwAAAHBsaXN0bGliLndyaXRlUGxpc3RUb1N0cmluZ3JLIgAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wbGlzdGxpYi5odG1sI3BsaXN0bGliLndyaXRlUGxpc3RUb1N0cmluZ1gBAAAALXRyTCIAAFgcAAAAdGVzdC5zdXBwb3J0LmNhcHR1cmVkX3N0ZG91dHJNIgAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LmNhcHR1cmVkX3N0ZG91dFgBAAAALXRyTiIAAFgJAAAAb3MudW5saW5rck8iAAAoamkBAABqagEAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MudW5saW5rWAEAAAAtdHJQIgAAWBcAAABsb2NhbGUuZ2V0ZGVmYXVsdGxvY2FsZXJRIgAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUuZ2V0ZGVmYXVsdGxvY2FsZVgBAAAALXRyUiIAAFgMAAAAbXN2Y3J0LmtiaGl0clMiAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zdmNydC5odG1sI21zdmNydC5rYmhpdFgBAAAALXRyVCIAAFgIAAAAc3lzLmV4aXRyVSIAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmV4aXRYAQAAAC10clYiAABYCwAAAHR1cnRsZS5kb25lclciAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5kb25lWAEAAAAtdHJYIgAAWBUAAABjb21waWxlci52aXNpdG9yLndhbGtyWSIAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29tcGlsZXIuaHRtbCNjb21waWxlci52aXNpdG9yLndhbGtYAQAAAC10cloiAABYDgAAAHJhbmRvbS51bmlmb3JtclsiAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JhbmRvbS5odG1sI3JhbmRvbS51bmlmb3JtWAEAAAAtdHJcIgAAWAkAAABmbC5xZW50ZXJyXSIAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmwuaHRtbCNmbC5xZW50ZXJYAQAAAC10cl4iAABYDgAAAHN5cy5leGNlcHRob29rcl8iAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5leGNlcHRob29rWAEAAAAtdHJgIgAAWBIAAABtYWNvc3Rvb2xzLnRvdWNoZWRyYSIAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFjb3N0b29scy5odG1sI21hY29zdG9vbHMudG91Y2hlZFgBAAAALXRyYiIAAFgIAAAAb3MuX2V4aXRyYyIAAChqaQEAAGpqAQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5fZXhpdFgBAAAALXRyZCIAAFgMAAAAb3MuV0NPUkVEVU1QcmUiAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuV0NPUkVEVU1QWAEAAAAtdHJmIgAAWA0AAABwb3BlbjIucG9wZW4zcmciAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BvcGVuMi5odG1sI3BvcGVuMi5wb3BlbjNYAQAAAC10cmgiAABYDQAAAHBvcGVuMi5wb3BlbjJyaSIAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcG9wZW4yLmh0bWwjcG9wZW4yLnBvcGVuMlgBAAAALXRyaiIAAFgZAAAAd3NnaXJlZi51dGlsLmd1ZXNzX3NjaGVtZXJrIgAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi51dGlsLmd1ZXNzX3NjaGVtZVgBAAAALXRybCIAAFgNAAAAcG9wZW4yLnBvcGVuNHJtIgAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wb3BlbjIuaHRtbCNwb3BlbjIucG9wZW40WAEAAAAtdHJuIgAAWB8AAABtdWx0aXByb2Nlc3NpbmcuYWN0aXZlX2NoaWxkcmVucm8iAAAoamkBAABqagEAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5hY3RpdmVfY2hpbGRyZW5YAQAAAC10cnAiAAB1WAoAAABjOmZ1bmN0aW9ucnEiAAB9cnIiAAAoWBYAAABQeURlc2NyX05ld0NsYXNzTWV0aG9kcnMiAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kZXNjcmlwdG9yLmh0bWwjYy5QeURlc2NyX05ld0NsYXNzTWV0aG9kWAEAAAAtdHJ0IgAAWBEAAABQeU51bWJlcl9Qb3NpdGl2ZXJ1IgAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbnVtYmVyLmh0bWwjYy5QeU51bWJlcl9Qb3NpdGl2ZVgBAAAALXRydiIAAFgMAAAAUHlPYmplY3RfRGlycnciAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X0RpclgBAAAALXRyeCIAAFgPAAAAUHlPYmplY3RfR0NfTmV3cnkiAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9nY3N1cHBvcnQuaHRtbCNjLlB5T2JqZWN0X0dDX05ld1gBAAAALXRyeiIAAFgUAAAAUHlDb2RlY19JZ25vcmVFcnJvcnNyeyIAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvZGVjLmh0bWwjYy5QeUNvZGVjX0lnbm9yZUVycm9yc1gBAAAALXRyfCIAAFgRAAAAUHlEaWN0X0NoZWNrRXhhY3RyfSIAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2RpY3QuaHRtbCNjLlB5RGljdF9DaGVja0V4YWN0WAEAAAAtdHJ+IgAAWA8AAABQeVNlcXVlbmNlX0xpc3RyfyIAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3NlcXVlbmNlLmh0bWwjYy5QeVNlcXVlbmNlX0xpc3RYAQAAAC10coAiAABYEwAAAFB5QnVmZmVyX0Zyb21NZW1vcnlygSIAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2J1ZmZlci5odG1sI2MuUHlCdWZmZXJfRnJvbU1lbW9yeVgBAAAALXRygiIAAFgVAAAAUHlfQ29tcGlsZVN0cmluZ0ZsYWdzcoMiAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlfQ29tcGlsZVN0cmluZ0ZsYWdzWAEAAAAtdHKEIgAAWBkAAABQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5ncoUiAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nWAEAAAAtdHKGIgAAWA8AAABQeVN0cmluZ19FbmNvZGVyhyIAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N0cmluZy5odG1sI2MuUHlTdHJpbmdfRW5jb2RlWAEAAAAtdHKIIgAAWBIAAABQeUZsb2F0X0Zyb21TdHJpbmdyiSIAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2Zsb2F0Lmh0bWwjYy5QeUZsb2F0X0Zyb21TdHJpbmdYAQAAAC10cooiAABYGAAAAFB5U3RyaW5nX0FzU3RyaW5nQW5kU2l6ZXKLIgAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3RyaW5nLmh0bWwjYy5QeVN0cmluZ19Bc1N0cmluZ0FuZFNpemVYAQAAAC10cowiAABYFQAAAFB5Q09iamVjdF9Gcm9tVm9pZFB0cnKNIgAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29iamVjdC5odG1sI2MuUHlDT2JqZWN0X0Zyb21Wb2lkUHRyWAEAAAAtdHKOIgAAWA8AAABQeU9TX2FzY2lpX2F0b2ZyjyIAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvbnZlcnNpb24uaHRtbCNjLlB5T1NfYXNjaWlfYXRvZlgBAAAALXRykCIAAFgYAAAAUHlEYXRlVGltZV9EQVRFX0dFVF9IT1VScpEiAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kYXRldGltZS5odG1sI2MuUHlEYXRlVGltZV9EQVRFX0dFVF9IT1VSWAEAAAAtdHKSIgAAWBAAAABQeUxvbmdfQXNWb2lkUHRycpMiAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9sb25nLmh0bWwjYy5QeUxvbmdfQXNWb2lkUHRyWAEAAAAtdHKUIgAAWA8AAABQeVR5cGVfTW9kaWZpZWRylSIAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGUuaHRtbCNjLlB5VHlwZV9Nb2RpZmllZFgBAAAALXRyliIAAFgTAAAAUHlDT2JqZWN0X0FzVm9pZFB0cnKXIgAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29iamVjdC5odG1sI2MuUHlDT2JqZWN0X0FzVm9pZFB0clgBAAAALXRymCIAAFgRAAAAUHlOdW1iZXJfTXVsdGlwbHlymSIAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfTXVsdGlwbHlYAQAAAC10cpoiAABYDwAAAFB5VGltZV9Gcm9tVGltZXKbIgAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZGF0ZXRpbWUuaHRtbCNjLlB5VGltZV9Gcm9tVGltZVgBAAAALXRynCIAAFgOAAAAUHlPU19BZnRlckZvcmtynSIAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N5cy5odG1sI2MuUHlPU19BZnRlckZvcmtYAQAAAC10cp4iAABYEgAAAFB5VHVwbGVfQ2hlY2tFeGFjdHKfIgAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHVwbGUuaHRtbCNjLlB5VHVwbGVfQ2hlY2tFeGFjdFgBAAAALXRyoCIAAFgTAAAAUHlEYXRlVGltZV9HRVRfWUVBUnKhIgAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZGF0ZXRpbWUuaHRtbCNjLlB5RGF0ZVRpbWVfR0VUX1lFQVJYAQAAAC10cqIiAABYFQAAAFB5VGhyZWFkU3RhdGVfR2V0RGljdHKjIgAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlUaHJlYWRTdGF0ZV9HZXREaWN0WAEAAAAtdHKkIgAAWBMAAABQeVNlcXVlbmNlX0RlbFNsaWNlcqUiAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zZXF1ZW5jZS5odG1sI2MuUHlTZXF1ZW5jZV9EZWxTbGljZVgBAAAALXRypiIAAFgRAAAAUHlTZXF1ZW5jZV9MZW5ndGhypyIAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3NlcXVlbmNlLmh0bWwjYy5QeVNlcXVlbmNlX0xlbmd0aFgBAAAALXRyqCIAAFgdAAAAUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0U3RhcnRyqSIAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5VW5pY29kZURlY29kZUVycm9yX1NldFN0YXJ0WAEAAAAtdHKqIgAAWBAAAABQeU9iamVjdF9HZXRJdGVycqsiAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X0dldEl0ZXJYAQAAAC10cqwiAABYDgAAAFB5VFpJbmZvX0NoZWNrcq0iAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kYXRldGltZS5odG1sI2MuUHlUWkluZm9fQ2hlY2tYAQAAAC10cq4iAABYFQAAAFB5U2VxdWVuY2VfRmFzdF9JVEVNU3KvIgAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc2VxdWVuY2UuaHRtbCNjLlB5U2VxdWVuY2VfRmFzdF9JVEVNU1gBAAAALXRysCIAAFgSAAAAUHlFcnJfU2V0RnJvbUVycm5vcrEiAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeUVycl9TZXRGcm9tRXJybm9YAQAAAC10crIiAABYDAAAAFB5QnVmZmVyX05ld3KzIgAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYnVmZmVyLmh0bWwjYy5QeUJ1ZmZlcl9OZXdYAQAAAC10crQiAABYEAAAAFB5VHVwbGVfR2V0U2xpY2VytSIAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R1cGxlLmh0bWwjYy5QeVR1cGxlX0dldFNsaWNlWAEAAAAtdHK2IgAAWBAAAABQeUZsb2F0X0FzRG91YmxlcrciAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9mbG9hdC5odG1sI2MuUHlGbG9hdF9Bc0RvdWJsZVgBAAAALXRyuCIAAFgSAAAAUHlNZW1vcnlWaWV3X0NoZWNrcrkiAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9idWZmZXIuaHRtbCNjLlB5TWVtb3J5Vmlld19DaGVja1gBAAAALXRyuiIAAFgTAAAAUHlPYmplY3RfR0NfVW5UcmFja3K7IgAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZ2NzdXBwb3J0Lmh0bWwjYy5QeU9iamVjdF9HQ19VblRyYWNrWAEAAAAtdHK8IgAAWB0AAABQeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3Jkc3K9IgAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYXJnLmh0bWwjYy5QeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3Jkc1gBAAAALXRyviIAAFgiAAAAUHlVbmljb2RlX0FzUmF3VW5pY29kZUVzY2FwZVN0cmluZ3K/IgAAKGppAQAAamoBAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0FzUmF3VW5pY29kZUVzY2FwZVN0cmluZ1gBAAAALXRywCIAAFgQAAAAUHlPYmplY3RfR2V0SXRlbXLBIgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvb2JqZWN0Lmh0bWwjYy5QeU9iamVjdF9HZXRJdGVtWAEAAAAtdHLCIgAAWBsAAABQeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRFbmRywyIAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5VW5pY29kZUVuY29kZUVycm9yX1NldEVuZFgBAAAALXRyxCIAAFgPAAAAUHlOdW1iZXJfSW52ZXJ0csUiAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9udW1iZXIuaHRtbCNjLlB5TnVtYmVyX0ludmVydFgBAAAALXRyxiIAAFgOAAAAUHlCdWZmZXJfQ2hlY2tyxyIAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2J1ZmZlci5odG1sI2MuUHlCdWZmZXJfQ2hlY2tYAQAAAC10csgiAABYGwAAAFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jkc3LJIgAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYXJnLmh0bWwjYy5QeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHNYAQAAAC10csoiAABYEQAAAFB5RGVzY3JfTmV3R2V0U2V0cssiAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kZXNjcmlwdG9yLmh0bWwjYy5QeURlc2NyX05ld0dldFNldFgBAAAALXRyzCIAAFgPAAAAUHlJbXBvcnRfSW1wb3J0cs0iAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbXBvcnQuaHRtbCNjLlB5SW1wb3J0X0ltcG9ydFgBAAAALXRyziIAAFgVAAAAUHlGdW5jdGlvbl9HZXRHbG9iYWxzcs8iAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9mdW5jdGlvbi5odG1sI2MuUHlGdW5jdGlvbl9HZXRHbG9iYWxzWAEAAAAtdHLQIgAAWBwAAABQeVVuaWNvZGVfRGVjb2RlTUJDU1N0YXRlZnVsctEiAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRGVjb2RlTUJDU1N0YXRlZnVsWAEAAAAtdHLSIgAAWBQAAABQeVdlYWtyZWZfR0VUX09CSkVDVHLTIgAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvd2Vha3JlZi5odG1sI2MuUHlXZWFrcmVmX0dFVF9PQkpFQ1RYAQAAAC10ctQiAABYEAAAAFB5V2Vha3JlZl9OZXdSZWZy1SIAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3dlYWtyZWYuaHRtbCNjLlB5V2Vha3JlZl9OZXdSZWZYAQAAAC10ctYiAABYEQAAAFB5X05ld0ludGVycHJldGVyctciAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbml0Lmh0bWwjYy5QeV9OZXdJbnRlcnByZXRlclgBAAAALXRy2CIAAFgSAAAAUHlUaHJlYWRTdGF0ZV9Td2FwctkiAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbml0Lmh0bWwjYy5QeVRocmVhZFN0YXRlX1N3YXBYAQAAAC10ctoiAABYDgAAAFB5T1NfdnNucHJpbnRmctsiAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jb252ZXJzaW9uLmh0bWwjYy5QeU9TX3ZzbnByaW50ZlgBAAAALXRy3CIAAFgLAAAAUHlEaWN0X0NvcHly3SIAAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2RpY3QuaHRtbCNjLlB5RGljdF9Db3B5WAEAAAAtdHLeIgAAWAkAAABQeUdlbl9OZXdy3yIAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2dlbi5odG1sI2MuUHlHZW5fTmV3WAEAAAAtdHLgIgAAWBwAAABQeUltcG9ydF9JbXBvcnRNb2R1bGVOb0Jsb2NrcuEiAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbXBvcnQuaHRtbCNjLlB5SW1wb3J0X0ltcG9ydE1vZHVsZU5vQmxvY2tYAQAAAC10cuIiAABYFwAAAFB5TW9kdWxlX0FkZEludENvbnN0YW50cuMiAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tb2R1bGUuaHRtbCNjLlB5TW9kdWxlX0FkZEludENvbnN0YW50WAEAAAAtdHLkIgAAWBQAAABQeUNhcHN1bGVfR2V0UG9pbnRlcnLlIgAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY2Fwc3VsZS5odG1sI2MuUHlDYXBzdWxlX0dldFBvaW50ZXJYAQAAAC10cuYiAABYFgAAAFB5T2JqZWN0X1NldEF0dHJTdHJpbmdy5yIAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfU2V0QXR0clN0cmluZ1gBAAAALXRy6CIAAFgNAAAAUHlMaXN0X0FwcGVuZHLpIgAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbGlzdC5odG1sI2MuUHlMaXN0X0FwcGVuZFgBAAAALXRy6iIAAFgYAAAAUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9ucusiAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeUVycl9Ob3JtYWxpemVFeGNlcHRpb25YAQAAAC10cuwiAABYEgAAAFB5RmlsZV9Xcml0ZVN0cmluZ3LtIgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZmlsZS5odG1sI2MuUHlGaWxlX1dyaXRlU3RyaW5nWAEAAAAtdHLuIgAAWBUAAABQeVVuaWNvZGVfRGVjb2RlVVRGMTZy7yIAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9EZWNvZGVVVEYxNlgBAAAALXRy8CIAAFgUAAAAUHlCeXRlQXJyYXlfQXNTdHJpbmdy8SIAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2J5dGVhcnJheS5odG1sI2MuUHlCeXRlQXJyYXlfQXNTdHJpbmdYAQAAAC10cvIiAABYEQAAAFB5SW5zdGFuY2VfTmV3UmF3cvMiAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jbGFzcy5odG1sI2MuUHlJbnN0YW5jZV9OZXdSYXdYAQAAAC10cvQiAABYEQAAAFB5RXZhbF9HZXRHbG9iYWxzcvUiAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9yZWZsZWN0aW9uLmh0bWwjYy5QeUV2YWxfR2V0R2xvYmFsc1gBAAAALXRy9iIAAFgPAAAAUHlfR2V0Q29weXJpZ2h0cvciAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbml0Lmh0bWwjYy5QeV9HZXRDb3B5cmlnaHRYAQAAAC10cvgiAABYEwAAAFB5TG9uZ19Gcm9tTG9uZ0xvbmdy+SIAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2xvbmcuaHRtbCNjLlB5TG9uZ19Gcm9tTG9uZ0xvbmdYAQAAAC10cvoiAABYDAAAAFB5TW9kdWxlX05ld3L7IgAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbW9kdWxlLmh0bWwjYy5QeU1vZHVsZV9OZXdYAQAAAC10cvwiAABYFgAAAFB5VW5pY29kZV9Bc01CQ1NTdHJpbmdy/SIAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9Bc01CQ1NTdHJpbmdYAQAAAC10cv4iAABYFQAAAFB5RmxvYXRfQ2xlYXJGcmVlTGlzdHL/IgAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZmxvYXQuaHRtbCNjLlB5RmxvYXRfQ2xlYXJGcmVlTGlzdFgBAAAALXRyACMAAFgSAAAAUHlDbGFzc19Jc1N1YmNsYXNzcgEjAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jbGFzcy5odG1sI2MuUHlDbGFzc19Jc1N1YmNsYXNzWAEAAAAtdHICIwAAWBIAAABQeUltcG9ydF9BZGRNb2R1bGVyAyMAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ltcG9ydC5odG1sI2MuUHlJbXBvcnRfQWRkTW9kdWxlWAEAAAAtdHIEIwAAWBMAAABQeU51bWJlcl9JblBsYWNlWG9ycgUjAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9udW1iZXIuaHRtbCNjLlB5TnVtYmVyX0luUGxhY2VYb3JYAQAAAC10cgYjAABYEwAAAFB5U3RyaW5nX0Zyb21TdHJpbmdyByMAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N0cmluZy5odG1sI2MuUHlTdHJpbmdfRnJvbVN0cmluZ1gBAAAALXRyCCMAAFgNAAAAUHlFcnJfUHJpbnRFeHIJIwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlFcnJfUHJpbnRFeFgBAAAALXRyCiMAAFgPAAAAUHlTeXNfU2V0QXJndkV4cgsjAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbml0Lmh0bWwjYy5QeVN5c19TZXRBcmd2RXhYAQAAAC10cgwjAABYFQAAAFB5SW1wb3J0X1JlbG9hZE1vZHVsZXINIwAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW1wb3J0Lmh0bWwjYy5QeUltcG9ydF9SZWxvYWRNb2R1bGVYAQAAAC10cg4jAABYFQAAAFB5Q29tcGxleF9Gcm9tRG91Ymxlc3IPIwAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29tcGxleC5odG1sI2MuUHlDb21wbGV4X0Zyb21Eb3VibGVzWAEAAAAtdHIQIwAAWBgAAABQeVNlcXVlbmNlX0Zhc3RfR0VUX1NJWkVyESMAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3NlcXVlbmNlLmh0bWwjYy5QeVNlcXVlbmNlX0Zhc3RfR0VUX1NJWkVYAQAAAC10chIjAABYDwAAAFB5Q29kZV9OZXdFbXB0eXITIwAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29kZS5odG1sI2MuUHlDb2RlX05ld0VtcHR5WAEAAAAtdHIUIwAAWAcAAABQeV9NYWluchUjAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlfTWFpblgBAAAALXRyFiMAAFgPAAAAUHlPYmplY3RfTWFsbG9jchcjAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tZW1vcnkuaHRtbCNjLlB5T2JqZWN0X01hbGxvY1gBAAAALXRyGCMAAFgUAAAAUHlfVU5JQ09ERV9UT05VTUVSSUNyGSMAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5X1VOSUNPREVfVE9OVU1FUklDWAEAAAAtdHIaIwAAWB4AAABQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRSZWFzb25yGyMAAChqaQEAAGpqAQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5VW5pY29kZUVuY29kZUVycm9yX0dldFJlYXNvblgBAAAALXRyHCMAAFgOAAAAUHlOdW1iZXJfRmxvYXRyHSMAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfRmxvYXRYAQAAAC10ch4jAABYDwAAAFB5VHVwbGVfU2V0SXRlbXIfIwAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHVwbGUuaHRtbCNjLlB5VHVwbGVfU2V0SXRlbVgBAAAALXRyICMAAFgUAAAAUHlEaWN0X01lcmdlRnJvbVNlcTJyISMAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2RpY3QuaHRtbCNjLlB5RGljdF9NZXJnZUZyb21TZXEyWAEAAAAtdHIiIwAAWA4AAABQeUZpbGVfR2V0TGluZXIjIwAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZmlsZS5odG1sI2MuUHlGaWxlX0dldExpbmVYAQAAAC10ciQjAABYEgAAAFB5RGF0ZVRpbWVfR0VUX0RBWXIlIwAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZGF0ZXRpbWUuaHRtbCNjLlB5RGF0ZVRpbWVfR0VUX0RBWVgBAAAALXRyJiMAAFgWAAAAUHlDb21wbGV4X1JlYWxBc0RvdWJsZXInIwAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29tcGxleC5odG1sI2MuUHlDb21wbGV4X1JlYWxBc0RvdWJsZVgBAAAALXRyKCMAAFgWAAAAUHlNZXRob2RfQ2xlYXJGcmVlTGlzdHIpIwAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbWV0aG9kLmh0bWwjYy5QeU1ldGhvZF9DbGVhckZyZWVMaXN0WAEAAAAtdHIqIwAAWA8AAABQeUNvbXBsZXhfQ2hlY2tyKyMAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvbXBsZXguaHRtbCNjLlB5Q29tcGxleF9DaGVja1gBAAAALXRyLCMAAFgSAAAAUHlfVU5JQ09ERV9JU0xPV0VSci0jAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeV9VTklDT0RFX0lTTE9XRVJYAQAAAC10ci4jAABYDQAAAFB5T2JqZWN0X0NhbGxyLyMAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfQ2FsbFgBAAAALXRyMCMAAFgVAAAAUHlVbmljb2RlX0RlY29kZUFTQ0lJcjEjAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRGVjb2RlQVNDSUlYAQAAAC10cjIjAABYDwAAAFB5TG9uZ19Bc0RvdWJsZXIzIwAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbG9uZy5odG1sI2MuUHlMb25nX0FzRG91YmxlWAEAAAAtdHI0IwAAWBYAAABQeUJ5dGVBcnJheV9Gcm9tT2JqZWN0cjUjAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9ieXRlYXJyYXkuaHRtbCNjLlB5Qnl0ZUFycmF5X0Zyb21PYmplY3RYAQAAAC10cjYjAABYFwAAAFB5SW50ZXJwcmV0ZXJTdGF0ZV9OZXh0cjcjAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbml0Lmh0bWwjYy5QeUludGVycHJldGVyU3RhdGVfTmV4dFgBAAAALXRyOCMAAFgYAAAAUHlQYXJzZXJfU2ltcGxlUGFyc2VGaWxlcjkjAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlQYXJzZXJfU2ltcGxlUGFyc2VGaWxlWAEAAAAtdHI6IwAAWBUAAABQeU9TX2RvdWJsZV90b19zdHJpbmdyOyMAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvbnZlcnNpb24uaHRtbCNjLlB5T1NfZG91YmxlX3RvX3N0cmluZ1gBAAAALXRyPCMAAFgRAAAAUHlMb25nX0FzTG9uZ0xvbmdyPSMAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2xvbmcuaHRtbCNjLlB5TG9uZ19Bc0xvbmdMb25nWAEAAAAtdHI+IwAAWB0AAABQeVBhcnNlcl9TaW1wbGVQYXJzZUZpbGVGbGFnc3I/IwAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdmVyeWhpZ2guaHRtbCNjLlB5UGFyc2VyX1NpbXBsZVBhcnNlRmlsZUZsYWdzWAEAAAAtdHJAIwAAWBUAAABQeU51bWJlcl9JblBsYWNlUG93ZXJyQSMAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfSW5QbGFjZVBvd2VyWAEAAAAtdHJCIwAAWAsAAABQeUdlbl9DaGVja3JDIwAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZ2VuLmh0bWwjYy5QeUdlbl9DaGVja1gBAAAALXRyRCMAAFgVAAAAUHlDb2RlY19SZXBsYWNlRXJyb3JzckUjAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jb2RlYy5odG1sI2MuUHlDb2RlY19SZXBsYWNlRXJyb3JzWAEAAAAtdHJGIwAAWBIAAABQeVJ1bl9TaW1wbGVGaWxlRXhyRyMAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3ZlcnloaWdoLmh0bWwjYy5QeVJ1bl9TaW1wbGVGaWxlRXhYAQAAAC10ckgjAABYEAAAAF9QeVN0cmluZ19SZXNpemVySSMAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N0cmluZy5odG1sI2MuX1B5U3RyaW5nX1Jlc2l6ZVgBAAAALXRySiMAAFgXAAAAUHlPYmplY3RfR2VuZXJpY1NldEF0dHJySyMAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfR2VuZXJpY1NldEF0dHJYAQAAAC10ckwjAABYDgAAAFB5TGlzdF9SZXZlcnNlck0jAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9saXN0Lmh0bWwjYy5QeUxpc3RfUmV2ZXJzZVgBAAAALXRyTiMAAFgPAAAAUHlNYXBwaW5nX0NoZWNrck8jAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tYXBwaW5nLmh0bWwjYy5QeU1hcHBpbmdfQ2hlY2tYAQAAAC10clAjAABYDQAAAFB5T1Nfc25wcmludGZyUSMAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvbnZlcnNpb24uaHRtbCNjLlB5T1Nfc25wcmludGZYAQAAAC10clIjAABYIAAAAFB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuY29kaW5nclMjAAAoamkBAABqagEAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRFbmNvZGluZ1gBAAAALXRyVCMAAFgOAAAAUHlDb2RlY19FbmNvZGVyVSMAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvZGVjLmh0bWwjYy5QeUNvZGVjX0VuY29kZVgBAAAALXRyViMAAFgZAAAAUHlJbnRlcnByZXRlclN0YXRlX0RlbGV0ZXJXIwAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlJbnRlcnByZXRlclN0YXRlX0RlbGV0ZVgBAAAALXRyWCMAAFgNAAAAUHlTZXRfRGlzY2FyZHJZIwAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc2V0Lmh0bWwjYy5QeVNldF9EaXNjYXJkWAEAAAAtdHJaIwAAWA4AAABQeV9HZXRQbGF0Zm9ybXJbIwAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlfR2V0UGxhdGZvcm1YAQAAAC10clwjAABYEgAAAFB5X1VOSUNPREVfSVNBTFBIQXJdIwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlfVU5JQ09ERV9JU0FMUEhBWAEAAAAtdHJeIwAAWBQAAABQeURpY3RfR2V0SXRlbVN0cmluZ3JfIwAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZGljdC5odG1sI2MuUHlEaWN0X0dldEl0ZW1TdHJpbmdYAQAAAC10cmAjAABYFgAAAFB5VW5pY29kZV9EZWNvZGVMYXRpbjFyYSMAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9EZWNvZGVMYXRpbjFYAQAAAC10cmIjAABYDQAAAF9QeU9iamVjdF9OZXdyYyMAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2FsbG9jYXRpb24uaHRtbCNjLl9QeU9iamVjdF9OZXdYAQAAAC10cmQjAABYEQAAAFB5RmxvYXRfQVNfRE9VQkxFcmUjAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9mbG9hdC5odG1sI2MuUHlGbG9hdF9BU19ET1VCTEVYAQAAAC10cmYjAABYDAAAAFB5VHlwZV9JU19HQ3JnIwAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZS5odG1sI2MuUHlUeXBlX0lTX0dDWAEAAAAtdHJoIwAAWA8AAABQeUJvb2xfRnJvbUxvbmdyaSMAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2Jvb2wuaHRtbCNjLlB5Qm9vbF9Gcm9tTG9uZ1gBAAAALXRyaiMAAFgYAAAAUHlJbnRfQXNVbnNpZ25lZExvbmdNYXNrcmsjAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbnQuaHRtbCNjLlB5SW50X0FzVW5zaWduZWRMb25nTWFza1gBAAAALXRybCMAAFgNAAAAUHlfRmluZE1ldGhvZHJtIwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3RydWN0dXJlcy5odG1sI2MuUHlfRmluZE1ldGhvZFgBAAAALXRybiMAAFgYAAAAUHlEYXRlVGltZV9USU1FX0dFVF9IT1VScm8jAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kYXRldGltZS5odG1sI2MuUHlEYXRlVGltZV9USU1FX0dFVF9IT1VSWAEAAAAtdHJwIwAAWBAAAABQeUFyZ19QYXJzZVR1cGxlcnEjAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9hcmcuaHRtbCNjLlB5QXJnX1BhcnNlVHVwbGVYAQAAAC10cnIjAABYEgAAAFB5TnVtYmVyX0luUGxhY2VPcnJzIwAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbnVtYmVyLmh0bWwjYy5QeU51bWJlcl9JblBsYWNlT3JYAQAAAC10cnQjAABYKQAAAFB5RXJyX1NldEZyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lT2JqZWN0cnUjAAAoamkBAABqagEAAFhbAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeUVycl9TZXRGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZU9iamVjdFgBAAAALXRydiMAAFgsAAAAUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3RydyMAAChqaQEAAGpqAQAAWF4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lT2JqZWN0WAEAAAAtdHJ4IwAAWAsAAABQeU9TX3NldHNpZ3J5IwAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3lzLmh0bWwjYy5QeU9TX3NldHNpZ1gBAAAALXRyeiMAAFgTAAAAUHlPYmplY3RfSXNJbnN0YW5jZXJ7IwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvb2JqZWN0Lmh0bWwjYy5QeU9iamVjdF9Jc0luc3RhbmNlWAEAAAAtdHJ8IwAAWBsAAABQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmdyfSMAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2xvbmcuaHRtbCNjLlB5TG9uZ19Gcm9tVW5zaWduZWRMb25nTG9uZ1gBAAAALXRyfiMAAFgSAAAAUHlFdmFsX0dldEJ1aWx0aW5zcn8jAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9yZWZsZWN0aW9uLmh0bWwjYy5QeUV2YWxfR2V0QnVpbHRpbnNYAQAAAC10coAjAABYEAAAAFB5X0NvbXBpbGVTdHJpbmdygSMAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3ZlcnloaWdoLmh0bWwjYy5QeV9Db21waWxlU3RyaW5nWAEAAAAtdHKCIwAAWBEAAABQeVN0cmluZ19Bc1N0cmluZ3KDIwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3RyaW5nLmh0bWwjYy5QeVN0cmluZ19Bc1N0cmluZ1gBAAAALXRyhCMAAFgRAAAAUHlJbnRfRnJvbVNzaXplX3RyhSMAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ludC5odG1sI2MuUHlJbnRfRnJvbVNzaXplX3RYAQAAAC10coYjAABYGAAAAFB5U3RyaW5nX0FzRW5jb2RlZE9iamVjdHKHIwAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3RyaW5nLmh0bWwjYy5QeVN0cmluZ19Bc0VuY29kZWRPYmplY3RYAQAAAC10cogjAABYHQAAAFB5VW5pY29kZV9EZWNvZGVVVEYzMlN0YXRlZnVscokjAAAoamkBAABqagEAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRGVjb2RlVVRGMzJTdGF0ZWZ1bFgBAAAALXRyiiMAAFgPAAAAUHlOdW1iZXJfRGl2bW9kcosjAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9udW1iZXIuaHRtbCNjLlB5TnVtYmVyX0Rpdm1vZFgBAAAALXRyjCMAAFgQAAAAUHlGaWxlX1NvZnRTcGFjZXKNIwAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZmlsZS5odG1sI2MuUHlGaWxlX1NvZnRTcGFjZVgBAAAALXRyjiMAAFgPAAAAUHlfSW5pdGlhbGl6ZUV4co8jAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbml0Lmh0bWwjYy5QeV9Jbml0aWFsaXplRXhYAQAAAC10cpAjAABYFwAAAFB5VW5pY29kZV9Bc0FTQ0lJU3RyaW5ncpEjAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfQXNBU0NJSVN0cmluZ1gBAAAALXRykiMAAFgcAAAAUHlCdWZmZXJfRnJvbVJlYWRXcml0ZU9iamVjdHKTIwAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYnVmZmVyLmh0bWwjYy5QeUJ1ZmZlcl9Gcm9tUmVhZFdyaXRlT2JqZWN0WAEAAAAtdHKUIwAAWBYAAABQeUltcG9ydF9HZXRNb2R1bGVEaWN0cpUjAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbXBvcnQuaHRtbCNjLlB5SW1wb3J0X0dldE1vZHVsZURpY3RYAQAAAC10cpYjAABYDgAAAFB5TW9kdWxlX0NoZWNrcpcjAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tb2R1bGUuaHRtbCNjLlB5TW9kdWxlX0NoZWNrWAEAAAAtdHKYIwAAWAwAAABQeUludF9Bc0xvbmdymSMAAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ludC5odG1sI2MuUHlJbnRfQXNMb25nWAEAAAAtdHKaIwAAWA4AAABQeURpY3RfRGVsSXRlbXKbIwAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZGljdC5odG1sI2MuUHlEaWN0X0RlbEl0ZW1YAQAAAC10cpwjAABYCwAAAFB5U2V0X0NsZWFycp0jAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zZXQuaHRtbCNjLlB5U2V0X0NsZWFyWAEAAAAtdHKeIwAAWBoAAABQeURhdGVUaW1lX0RBVEVfR0VUX1NFQ09ORHKfIwAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZGF0ZXRpbWUuaHRtbCNjLlB5RGF0ZVRpbWVfREFURV9HRVRfU0VDT05EWAEAAAAtdHKgIwAAWBwAAABQeUxvbmdfQXNMb25nTG9uZ0FuZE92ZXJmbG93cqEjAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9sb25nLmh0bWwjYy5QeUxvbmdfQXNMb25nTG9uZ0FuZE92ZXJmbG93WAEAAAAtdHKiIwAAWB0AAABQeVVuaWNvZGVfRGVjb2RlVVRGMTZTdGF0ZWZ1bHKjIwAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0RlY29kZVVURjE2U3RhdGVmdWxYAQAAAC10cqQjAABYEQAAAFB5TnVtYmVyX1N1YnRyYWN0cqUjAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9udW1iZXIuaHRtbCNjLlB5TnVtYmVyX1N1YnRyYWN0WAEAAAAtdHKmIwAAWAoAAABQeU1lbV9GcmVlcqcjAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tZW1vcnkuaHRtbCNjLlB5TWVtX0ZyZWVYAQAAAC10cqgjAABYFAAAAFB5VW5pY29kZV9Bc1dpZGVDaGFycqkjAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfQXNXaWRlQ2hhclgBAAAALXRyqiMAAFgRAAAAUHlfU2V0UHJvZ3JhbU5hbWVyqyMAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNjLlB5X1NldFByb2dyYW1OYW1lWAEAAAAtdHKsIwAAWA4AAABQeU1hcHBpbmdfS2V5c3KtIwAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbWFwcGluZy5odG1sI2MuUHlNYXBwaW5nX0tleXNYAQAAAC10cq4jAABYHwAAAFB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nRmxhZ3NyryMAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3ZlcnloaWdoLmh0bWwjYy5QeVBhcnNlcl9TaW1wbGVQYXJzZVN0cmluZ0ZsYWdzWAEAAAAtdHKwIwAAWA8AAABQeVNlcXVlbmNlX0Zhc3RysSMAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3NlcXVlbmNlLmh0bWwjYy5QeVNlcXVlbmNlX0Zhc3RYAQAAAC10crIjAABYFwAAAFB5TWFwcGluZ19HZXRJdGVtU3RyaW5ncrMjAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tYXBwaW5nLmh0bWwjYy5QeU1hcHBpbmdfR2V0SXRlbVN0cmluZ1gBAAAALXRytCMAAFgeAAAAUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lcrUjAAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVYAQAAAC10crYjAABYDAAAAFB5SW50X0dldE1heHK3IwAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW50Lmh0bWwjYy5QeUludF9HZXRNYXhYAQAAAC10crgjAABYDQAAAFB5U3lzX0dldEZpbGVyuSMAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N5cy5odG1sI2MuUHlTeXNfR2V0RmlsZVgBAAAALXRyuiMAAFgUAAAAUHlCeXRlQXJyYXlfR0VUX1NJWkVyuyMAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2J5dGVhcnJheS5odG1sI2MuUHlCeXRlQXJyYXlfR0VUX1NJWkVYAQAAAC10crwjAABYEgAAAFB5VGhyZWFkU3RhdGVfTmV4dHK9IwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlUaHJlYWRTdGF0ZV9OZXh0WAEAAAAtdHK+IwAAWBEAAABQeVRpbWVfQ2hlY2tFeGFjdHK/IwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZGF0ZXRpbWUuaHRtbCNjLlB5VGltZV9DaGVja0V4YWN0WAEAAAAtdHLAIwAAWBAAAABQeUludF9DaGVja0V4YWN0csEjAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbnQuaHRtbCNjLlB5SW50X0NoZWNrRXhhY3RYAQAAAC10csIjAABYEgAAAFB5RGVsdGFfQ2hlY2tFeGFjdHLDIwAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZGF0ZXRpbWUuaHRtbCNjLlB5RGVsdGFfQ2hlY2tFeGFjdFgBAAAALXRyxCMAAFgMAAAAUHlUdXBsZV9QYWNrcsUjAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90dXBsZS5odG1sI2MuUHlUdXBsZV9QYWNrWAEAAAAtdHLGIwAAWA8AAABQeUNvZGVjX0VuY29kZXJyxyMAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvZGVjLmh0bWwjYy5QeUNvZGVjX0VuY29kZXJYAQAAAC10csgjAABYFQAAAFB5QnVmZmVyX0lzQ29udGlndW91c3LJIwAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYnVmZmVyLmh0bWwjYy5QeUJ1ZmZlcl9Jc0NvbnRpZ3VvdXNYAQAAAC10csojAABYEAAAAFB5QnVmZmVyX1JlbGVhc2VyyyMAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2J1ZmZlci5odG1sI2MuUHlCdWZmZXJfUmVsZWFzZVgBAAAALXRyzCMAAFgRAAAAUHlFcnJfQmFkQXJndW1lbnRyzSMAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5RXJyX0JhZEFyZ3VtZW50WAEAAAAtdHLOIwAAWBEAAABQeURlc2NyX05ld01ldGhvZHLPIwAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZGVzY3JpcHRvci5odG1sI2MuUHlEZXNjcl9OZXdNZXRob2RYAQAAAC10ctAjAABYIQAAAFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldFJlYXNvbnLRIwAAKGppAQAAamoBAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0UmVhc29uWAEAAAAtdHLSIwAAWAsAAABQeUl0ZXJfTmV4dHLTIwAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaXRlci5odG1sI2MuUHlJdGVyX05leHRYAQAAAC10ctQjAABYEAAAAFB5T2JqZWN0X1JlYWxsb2Ny1SMAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21lbW9yeS5odG1sI2MuUHlPYmplY3RfUmVhbGxvY1gBAAAALXRy1iMAAFgUAAAAUHlDb2RlY19TdHJlYW1Xcml0ZXJy1yMAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvZGVjLmh0bWwjYy5QeUNvZGVjX1N0cmVhbVdyaXRlclgBAAAALXRy2CMAAFgRAAAAUHlGcm96ZW5TZXRfQ2hlY2ty2SMAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3NldC5odG1sI2MuUHlGcm96ZW5TZXRfQ2hlY2tYAQAAAC10ctojAABYEgAAAFB5Qnl0ZUFycmF5X0NvbmNhdHLbIwAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYnl0ZWFycmF5Lmh0bWwjYy5QeUJ5dGVBcnJheV9Db25jYXRYAQAAAC10ctwjAABYGQAAAFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ01hc2ty3SMAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2xvbmcuaHRtbCNjLlB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ01hc2tYAQAAAC10ct4jAABYCgAAAFB5RXJyX1dhcm5y3yMAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5RXJyX1dhcm5YAQAAAC10cuAjAABYDAAAAFB5VHlwZV9DaGVja3LhIwAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZS5odG1sI2MuUHlUeXBlX0NoZWNrWAEAAAAtdHLiIwAAWA0AAABQeV9CdWlsZFZhbHVlcuMjAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9hcmcuaHRtbCNjLlB5X0J1aWxkVmFsdWVYAQAAAC10cuQjAABYDQAAAFB5RGVsdGFfQ2hlY2ty5SMAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2RhdGV0aW1lLmh0bWwjYy5QeURlbHRhX0NoZWNrWAEAAAAtdHLmIwAAWBoAAABQeUltcG9ydF9JbXBvcnRNb2R1bGVMZXZlbHLnIwAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW1wb3J0Lmh0bWwjYy5QeUltcG9ydF9JbXBvcnRNb2R1bGVMZXZlbFgBAAAALXRy6CMAAFgXAAAAUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmdy6SMAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21hcHBpbmcuaHRtbCNjLlB5TWFwcGluZ19TZXRJdGVtU3RyaW5nWAEAAAAtdHLqIwAAWBcAAABQeVJ1bl9TaW1wbGVGaWxlRXhGbGFnc3LrIwAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdmVyeWhpZ2guaHRtbCNjLlB5UnVuX1NpbXBsZUZpbGVFeEZsYWdzWAEAAAAtdHLsIwAAWBYAAABQeU9iamVjdF9EZWxBdHRyU3RyaW5ncu0jAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X0RlbEF0dHJTdHJpbmdYAQAAAC10cu4jAABYEQAAAFB5VHlwZV9IYXNGZWF0dXJlcu8jAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlLmh0bWwjYy5QeVR5cGVfSGFzRmVhdHVyZVgBAAAALXRy8CMAAFgWAAAAUHlGdW5jdGlvbl9HZXREZWZhdWx0c3LxIwAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZnVuY3Rpb24uaHRtbCNjLlB5RnVuY3Rpb25fR2V0RGVmYXVsdHNYAQAAAC10cvIjAABYFQAAAFB5RXJyX0JhZEludGVybmFsQ2FsbHLzIwAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlFcnJfQmFkSW50ZXJuYWxDYWxsWAEAAAAtdHL0IwAAWBMAAABQeU51bWJlcl9UcnVlRGl2aWRlcvUjAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9udW1iZXIuaHRtbCNjLlB5TnVtYmVyX1RydWVEaXZpZGVYAQAAAC10cvYjAABYCgAAAFB5UnVuX0ZpbGVy9yMAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3ZlcnloaWdoLmh0bWwjYy5QeVJ1bl9GaWxlWAEAAAAtdHL4IwAAWBUAAABQeVVuaWNvZGVfRnJvbUZvcm1hdFZy+SMAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9Gcm9tRm9ybWF0VlgBAAAALXRy+iMAAFgKAAAAUHlDZWxsX0dldHL7IwAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY2VsbC5odG1sI2MuUHlDZWxsX0dldFgBAAAALXRy/CMAAFgJAAAAX1B5X2NfbmVncv0jAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jb21wbGV4Lmh0bWwjYy5fUHlfY19uZWdYAQAAAC10cv4jAABYDQAAAFB5RXJyX1NldE5vbmVy/yMAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5RXJyX1NldE5vbmVYAQAAAC10cgAkAABYGQAAAFB5RXJyX05ld0V4Y2VwdGlvbldpdGhEb2NyASQAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5RXJyX05ld0V4Y2VwdGlvbldpdGhEb2NYAQAAAC10cgIkAABYFAAAAFB5UnVuX0ludGVyYWN0aXZlT25lcgMkAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlSdW5fSW50ZXJhY3RpdmVPbmVYAQAAAC10cgQkAABYFQAAAFB5T2JqZWN0X0NhbGxGdW5jdGlvbnIFJAAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvb2JqZWN0Lmh0bWwjYy5QeU9iamVjdF9DYWxsRnVuY3Rpb25YAQAAAC10cgYkAABYGgAAAFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplcgckAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zdHJpbmcuaHRtbCNjLlB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplWAEAAAAtdHIIJAAAWBgAAABQeVVuaWNvZGVfQXNMYXRpbjFTdHJpbmdyCSQAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9Bc0xhdGluMVN0cmluZ1gBAAAALXRyCiQAAFgLAAAAUHlEaWN0X1NpemVyCyQAAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2RpY3QuaHRtbCNjLlB5RGljdF9TaXplWAEAAAAtdHIMJAAAWA0AAABQeU9iamVjdF9TaXplcg0kAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X1NpemVYAQAAAC10cg4kAABYEQAAAFB5RXZhbF9FdmFsQ29kZUV4cg8kAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlFdmFsX0V2YWxDb2RlRXhYAQAAAC10chAkAABYFAAAAFB5SW1wb3J0X0dldEltcG9ydGVychEkAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbXBvcnQuaHRtbCNjLlB5SW1wb3J0X0dldEltcG9ydGVyWAEAAAAtdHISJAAAWBQAAABfUHlPYmplY3RfR0NfVU5UUkFDS3ITJAAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZ2NzdXBwb3J0Lmh0bWwjYy5fUHlPYmplY3RfR0NfVU5UUkFDS1gBAAAALXRyFCQAAFgYAAAAUHlPYmplY3RfUmljaENvbXBhcmVCb29schUkAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbFgBAAAALXRyFiQAAFgRAAAAUHlGaWxlX0Zyb21TdHJpbmdyFyQAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ZpbGUuaHRtbCNjLlB5RmlsZV9Gcm9tU3RyaW5nWAEAAAAtdHIYJAAAWBIAAABQeU9iamVjdF9HZXRCdWZmZXJyGSQAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2J1ZmZlci5odG1sI2MuUHlPYmplY3RfR2V0QnVmZmVyWAEAAAAtdHIaJAAAWBEAAABQeVR5cGVfQ2xlYXJDYWNoZXIbJAAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZS5odG1sI2MuUHlUeXBlX0NsZWFyQ2FjaGVYAQAAAC10chwkAABYHwAAAFB5RGF0ZVRpbWVfREFURV9HRVRfTUlDUk9TRUNPTkRyHSQAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2RhdGV0aW1lLmh0bWwjYy5QeURhdGVUaW1lX0RBVEVfR0VUX01JQ1JPU0VDT05EWAEAAAAtdHIeJAAAWBQAAABQeUNvZGVjX1N0cmVhbVJlYWRlcnIfJAAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29kZWMuaHRtbCNjLlB5Q29kZWNfU3RyZWFtUmVhZGVyWAEAAAAtdHIgJAAAWBAAAABQeVR1cGxlX0dFVF9TSVpFciEkAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90dXBsZS5odG1sI2MuUHlUdXBsZV9HRVRfU0laRVgBAAAALXRyIiQAAFgSAAAAUHlGaWxlX0RlY1VzZUNvdW50ciMkAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9maWxlLmh0bWwjYy5QeUZpbGVfRGVjVXNlQ291bnRYAQAAAC10ciQkAABYFQAAAFB5Q29kZWNfUmVnaXN0ZXJFcnJvcnIlJAAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29kZWMuaHRtbCNjLlB5Q29kZWNfUmVnaXN0ZXJFcnJvclgBAAAALXRyJiQAAFgSAAAAUHlFdmFsX1JlbGVhc2VMb2NrcickAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbml0Lmh0bWwjYy5QeUV2YWxfUmVsZWFzZUxvY2tYAQAAAC10cigkAABYHgAAAFB5VW5pY29kZUVuY29kZUVycm9yX0dldE9iamVjdHIpJAAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0T2JqZWN0WAEAAAAtdHIqJAAAWAsAAABQeUFyZ19QYXJzZXIrJAAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYXJnLmh0bWwjYy5QeUFyZ19QYXJzZVgBAAAALXRyLCQAAFgVAAAAUHlEYXRlVGltZV9DaGVja0V4YWN0ci0kAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kYXRldGltZS5odG1sI2MuUHlEYXRlVGltZV9DaGVja0V4YWN0WAEAAAAtdHIuJAAAWBIAAABQeVdlYWtyZWZfQ2hlY2tSZWZyLyQAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3dlYWtyZWYuaHRtbCNjLlB5V2Vha3JlZl9DaGVja1JlZlgBAAAALXRyMCQAAFgRAAAAUHlVbmljb2RlX0NvbXBhcmVyMSQAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9Db21wYXJlWAEAAAAtdHIyJAAAWBYAAABQeUZ1bmN0aW9uX1NldERlZmF1bHRzcjMkAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9mdW5jdGlvbi5odG1sI2MuUHlGdW5jdGlvbl9TZXREZWZhdWx0c1gBAAAALXRyNCQAAFgPAAAAUHlTeXNfR2V0T2JqZWN0cjUkAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zeXMuaHRtbCNjLlB5U3lzX0dldE9iamVjdFgBAAAALXRyNiQAAFgQAAAAUHlDYWxsSXRlcl9DaGVja3I3JAAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaXRlcmF0b3IuaHRtbCNjLlB5Q2FsbEl0ZXJfQ2hlY2tYAQAAAC10cjgkAABYFgAAAFB5T2JqZWN0X0hhc0F0dHJTdHJpbmdyOSQAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfSGFzQXR0clN0cmluZ1gBAAAALXRyOiQAAFgYAAAAUHlEYXRlVGltZV9Gcm9tVGltZXN0YW1wcjskAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kYXRldGltZS5odG1sI2MuUHlEYXRlVGltZV9Gcm9tVGltZXN0YW1wWAEAAAAtdHI8JAAAWA0AAABQeU51bWJlcl9Mb25ncj0kAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9udW1iZXIuaHRtbCNjLlB5TnVtYmVyX0xvbmdYAQAAAC10cj4kAABYFgAAAFB5TWFwcGluZ19IYXNLZXlTdHJpbmdyPyQAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21hcHBpbmcuaHRtbCNjLlB5TWFwcGluZ19IYXNLZXlTdHJpbmdYAQAAAC10ckAkAABYEAAAAFB5RXZhbF9FdmFsRnJhbWVyQSQAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3ZlcnloaWdoLmh0bWwjYy5QeUV2YWxfRXZhbEZyYW1lWAEAAAAtdHJCJAAAWBIAAABQeUZpbGVfU2V0RW5jb2RpbmdyQyQAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ZpbGUuaHRtbCNjLlB5RmlsZV9TZXRFbmNvZGluZ1gBAAAALXRyRCQAAFgZAAAAUHlUaHJlYWRTdGF0ZV9TZXRBc3luY0V4Y3JFJAAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlUaHJlYWRTdGF0ZV9TZXRBc3luY0V4Y1gBAAAALXRyRiQAAFgVAAAAUHlGdW5jdGlvbl9HZXRDbG9zdXJlckckAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9mdW5jdGlvbi5odG1sI2MuUHlGdW5jdGlvbl9HZXRDbG9zdXJlWAEAAAAtdHJIJAAAWBcAAABQeUVycl9TZXRGcm9tV2luZG93c0VycnJJJAAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJYAQAAAC10ckokAABYHAAAAFB5SW50X0FzVW5zaWduZWRMb25nTG9uZ01hc2tySyQAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ludC5odG1sI2MuUHlJbnRfQXNVbnNpZ25lZExvbmdMb25nTWFza1gBAAAALXRyTCQAAFgbAAAAUHlNYXJzaGFsX1dyaXRlT2JqZWN0VG9GaWxlck0kAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tYXJzaGFsLmh0bWwjYy5QeU1hcnNoYWxfV3JpdGVPYmplY3RUb0ZpbGVYAQAAAC10ck4kAABYFAAAAFB5RGF0ZV9Gcm9tVGltZXN0YW1wck8kAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kYXRldGltZS5odG1sI2MuUHlEYXRlX0Zyb21UaW1lc3RhbXBYAQAAAC10clAkAABYHwAAAFB5RGF0ZVRpbWVfVElNRV9HRVRfTUlDUk9TRUNPTkRyUSQAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2RhdGV0aW1lLmh0bWwjYy5QeURhdGVUaW1lX1RJTUVfR0VUX01JQ1JPU0VDT05EWAEAAAAtdHJSJAAAWBcAAABQeUNhcHN1bGVfR2V0RGVzdHJ1Y3RvcnJTJAAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY2Fwc3VsZS5odG1sI2MuUHlDYXBzdWxlX0dldERlc3RydWN0b3JYAQAAAC10clQkAABYEQAAAFB5VW5pY29kZV9SZXBsYWNlclUkAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfUmVwbGFjZVgBAAAALXRyViQAAFgNAAAAUHlSdW5fQW55RmlsZXJXJAAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdmVyeWhpZ2guaHRtbCNjLlB5UnVuX0FueUZpbGVYAQAAAC10clgkAABYCgAAAFB5Q2VsbF9HRVRyWSQAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NlbGwuaHRtbCNjLlB5Q2VsbF9HRVRYAQAAAC10clokAABYDQAAAFB5SW50X0FTX0xPTkdyWyQAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ludC5odG1sI2MuUHlJbnRfQVNfTE9OR1gBAAAALXRyXCQAAFgnAAAAUHlQYXJzZXJfU2ltcGxlUGFyc2VTdHJpbmdGbGFnc0ZpbGVuYW1lcl0kAAAoamkBAABqagEAAFhXAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlQYXJzZXJfU2ltcGxlUGFyc2VTdHJpbmdGbGFnc0ZpbGVuYW1lWAEAAAAtdHJeJAAAWA4AAABQeU51bWJlcl9JbmRleHJfJAAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbnVtYmVyLmh0bWwjYy5QeU51bWJlcl9JbmRleFgBAAAALXRyYCQAAFgOAAAAUHlPYmplY3RfUHJpbnRyYSQAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfUHJpbnRYAQAAAC10cmIkAABYEAAAAFB5VW5pY29kZV9Gb3JtYXRyYyQAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9Gb3JtYXRYAQAAAC10cmQkAABYGwAAAFB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZXJlJAAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW1wb3J0Lmh0bWwjYy5QeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGVYAQAAAC10cmYkAABYCQAAAF9QeV9jX3N1bXJnJAAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29tcGxleC5odG1sI2MuX1B5X2Nfc3VtWAEAAAAtdHJoJAAAWBIAAABQeUVycl9OZXdFeGNlcHRpb25yaSQAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5RXJyX05ld0V4Y2VwdGlvblgBAAAALXRyaiQAAFgWAAAAUHlfVU5JQ09ERV9JU0xJTkVCUkVBS3JrJAAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlfVU5JQ09ERV9JU0xJTkVCUkVBS1gBAAAALXRybCQAAFghAAAAUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0UmVhc29ucm0kAAAoamkBAABqagEAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRSZWFzb25YAQAAAC10cm4kAABYGwAAAFB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdHJvJAAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0Zyb21FbmNvZGVkT2JqZWN0WAEAAAAtdHJwJAAAWBIAAABQeU1ldGhvZF9HRVRfQ0xBU1NycSQAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21ldGhvZC5odG1sI2MuUHlNZXRob2RfR0VUX0NMQVNTWAEAAAAtdHJyJAAAWBYAAABQeUNvbXBsZXhfSW1hZ0FzRG91YmxlcnMkAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jb21wbGV4Lmh0bWwjYy5QeUNvbXBsZXhfSW1hZ0FzRG91YmxlWAEAAAAtdHJ0JAAAWAkAAABQeV9ERUNSRUZydSQAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3JlZmNvdW50aW5nLmh0bWwjYy5QeV9ERUNSRUZYAQAAAC10cnYkAABYCwAAAFB5U2xpY2VfTmV3cnckAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zbGljZS5odG1sI2MuUHlTbGljZV9OZXdYAQAAAC10cngkAABYDwAAAFB5U2VxdWVuY2VfU2l6ZXJ5JAAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc2VxdWVuY2UuaHRtbCNjLlB5U2VxdWVuY2VfU2l6ZVgBAAAALXRyeiQAAFgVAAAAUHlSdW5fSW50ZXJhY3RpdmVMb29wcnskAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlSdW5fSW50ZXJhY3RpdmVMb29wWAEAAAAtdHJ8JAAAWBMAAABQeUFueVNldF9DaGVja0V4YWN0cn0kAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zZXQuaHRtbCNjLlB5QW55U2V0X0NoZWNrRXhhY3RYAQAAAC10cn4kAABYCQAAAFB5U2V0X05ld3J/JAAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc2V0Lmh0bWwjYy5QeVNldF9OZXdYAQAAAC10coAkAABYEAAAAFB5SW50X0Zyb21TaXplX3RygSQAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ludC5odG1sI2MuUHlJbnRfRnJvbVNpemVfdFgBAAAALXRygiQAAFgSAAAAUHlPYmplY3RfR0NfUmVzaXplcoMkAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9nY3N1cHBvcnQuaHRtbCNjLlB5T2JqZWN0X0dDX1Jlc2l6ZVgBAAAALXRyhCQAAFgOAAAAUHlEaWN0X0dldEl0ZW1yhSQAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2RpY3QuaHRtbCNjLlB5RGljdF9HZXRJdGVtWAEAAAAtdHKGJAAAWBMAAABQeVNlcXVlbmNlX1NldFNsaWNlcockAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zZXF1ZW5jZS5odG1sI2MuUHlTZXF1ZW5jZV9TZXRTbGljZVgBAAAALXRyiCQAAFgSAAAAUHlfVU5JQ09ERV9UT1RJVExFcokkAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeV9VTklDT0RFX1RPVElUTEVYAQAAAC10cookAABYEAAAAFB5T2JqZWN0X0hhc0F0dHJyiyQAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfSGFzQXR0clgBAAAALXRyjCQAAFgRAAAAUHlFdmFsX1NldFByb2ZpbGVyjSQAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNjLlB5RXZhbF9TZXRQcm9maWxlWAEAAAAtdHKOJAAAWBcAAABfUHlJbXBvcnRfRmluZEV4dGVuc2lvbnKPJAAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW1wb3J0Lmh0bWwjYy5fUHlJbXBvcnRfRmluZEV4dGVuc2lvblgBAAAALXRykCQAAFgJAAAAUHlNZW1fRGVscpEkAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tZW1vcnkuaHRtbCNjLlB5TWVtX0RlbFgBAAAALXRykiQAAFgQAAAAUHlMb25nX0FzU3NpemVfdHKTJAAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbG9uZy5odG1sI2MuUHlMb25nX0FzU3NpemVfdFgBAAAALXRylCQAAFgMAAAAUHlPU19zdHJpY21wcpUkAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jb252ZXJzaW9uLmh0bWwjYy5QeU9TX3N0cmljbXBYAQAAAC10cpYkAABYBwAAAFB5X0V4aXRylyQAAChqaQEAAGpqAQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N5cy5odG1sI2MuUHlfRXhpdFgBAAAALXRymCQAAFgVAAAAUHlVbmljb2RlX1JpY2hDb21wYXJlcpkkAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfUmljaENvbXBhcmVYAQAAAC10cpokAABYFQAAAFB5RnVuY3Rpb25fU2V0Q2xvc3VyZXKbJAAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZnVuY3Rpb24uaHRtbCNjLlB5RnVuY3Rpb25fU2V0Q2xvc3VyZVgBAAAALXRynCQAAFgPAAAAUHlXZWFrcmVmX0NoZWNrcp0kAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS93ZWFrcmVmLmh0bWwjYy5QeVdlYWtyZWZfQ2hlY2tYAQAAAC10cp4kAABYEAAAAFB5X1NldFB5dGhvbkhvbWVynyQAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNjLlB5X1NldFB5dGhvbkhvbWVYAQAAAC10cqAkAABYEAAAAFB5T2JqZWN0X0RlbEF0dHJyoSQAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfRGVsQXR0clgBAAAALXRyoiQAAFgMAAAAUHlPYmplY3RfU3RycqMkAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X1N0clgBAAAALXRypCQAAFgQAAAAUHlFdmFsX0dldExvY2Fsc3KlJAAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvcmVmbGVjdGlvbi5odG1sI2MuUHlFdmFsX0dldExvY2Fsc1gBAAAALXRypiQAAFgPAAAAUHlMaXN0X0dFVF9JVEVNcqckAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9saXN0Lmh0bWwjYy5QeUxpc3RfR0VUX0lURU1YAQAAAC10cqgkAABYFAAAAFB5RGljdF9EZWxJdGVtU3RyaW5ncqkkAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kaWN0Lmh0bWwjYy5QeURpY3RfRGVsSXRlbVN0cmluZ1gBAAAALXRyqiQAAFgMAAAAUHlMb25nX0NoZWNrcqskAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9sb25nLmh0bWwjYy5QeUxvbmdfQ2hlY2tYAQAAAC10cqwkAABYDgAAAFB5RXJyX1dhcm5QeTNrcq0kAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeUVycl9XYXJuUHkza1gBAAAALXRyriQAAFgeAAAAUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0UmVhc29ucq8kAAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRSZWFzb25YAQAAAC10crAkAABYEQAAAFB5U3lzX1dyaXRlU3Rkb3V0crEkAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zeXMuaHRtbCNjLlB5U3lzX1dyaXRlU3Rkb3V0WAEAAAAtdHKyJAAAWBQAAABQeU51bWJlcl9GbG9vckRpdmlkZXKzJAAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbnVtYmVyLmh0bWwjYy5QeU51bWJlcl9GbG9vckRpdmlkZVgBAAAALXRytCQAAFgRAAAAUHlOdW1iZXJfTmVnYXRpdmVytSQAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfTmVnYXRpdmVYAQAAAC10crYkAABYDgAAAFB5RGVzY3JfSXNEYXRhcrckAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kZXNjcmlwdG9yLmh0bWwjYy5QeURlc2NyX0lzRGF0YVgBAAAALXRyuCQAAFgQAAAAUHlPYmplY3RfVW5pY29kZXK5JAAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvb2JqZWN0Lmh0bWwjYy5QeU9iamVjdF9Vbmljb2RlWAEAAAAtdHK6JAAAWBMAAABQeU51bWJlcl9JblBsYWNlQW5kcrskAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9udW1iZXIuaHRtbCNjLlB5TnVtYmVyX0luUGxhY2VBbmRYAQAAAC10crwkAABYEwAAAFB5U3RyaW5nX0NoZWNrRXhhY3RyvSQAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N0cmluZy5odG1sI2MuUHlTdHJpbmdfQ2hlY2tFeGFjdFgBAAAALXRyviQAAFgPAAAAUHlFcnJfU2V0T2JqZWN0cr8kAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeUVycl9TZXRPYmplY3RYAQAAAC10csAkAABYEwAAAFB5T2JqZWN0X0lzU3ViY2xhc3NywSQAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfSXNTdWJjbGFzc1gBAAAALXRywiQAAFgOAAAAUHlGbG9hdF9HZXRNYXhywyQAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2Zsb2F0Lmh0bWwjYy5QeUZsb2F0X0dldE1heFgBAAAALXRyxCQAAFgQAAAAUHlfSXNJbml0aWFsaXplZHLFJAAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlfSXNJbml0aWFsaXplZFgBAAAALXRyxiQAAFgUAAAAUHlEaWN0X1NldEl0ZW1TdHJpbmdyxyQAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2RpY3QuaHRtbCNjLlB5RGljdF9TZXRJdGVtU3RyaW5nWAEAAAAtdHLIJAAAWBgAAABQeU51bWJlcl9JblBsYWNlTXVsdGlwbHlyySQAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfSW5QbGFjZU11bHRpcGx5WAEAAAAtdHLKJAAAWBIAAABQeUZsb2F0X0NoZWNrRXhhY3RyyyQAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2Zsb2F0Lmh0bWwjYy5QeUZsb2F0X0NoZWNrRXhhY3RYAQAAAC10cswkAABYHAAAAFB5VW5pY29kZV9EZWNvZGVVVEY3U3RhdGVmdWxyzSQAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9EZWNvZGVVVEY3U3RhdGVmdWxYAQAAAC10cs4kAABYDQAAAF9QeU9iamVjdF9EZWxyzyQAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2FsbG9jYXRpb24uaHRtbCNjLl9QeU9iamVjdF9EZWxYAQAAAC10ctAkAABYFAAAAFB5T2JqZWN0X1JpY2hDb21wYXJlctEkAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X1JpY2hDb21wYXJlWAEAAAAtdHLSJAAAWBMAAABQeUludF9DbGVhckZyZWVMaXN0ctMkAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbnQuaHRtbCNjLlB5SW50X0NsZWFyRnJlZUxpc3RYAQAAAC10ctQkAABYFAAAAFB5RXZhbF9SZUluaXRUaHJlYWRzctUkAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbml0Lmh0bWwjYy5QeUV2YWxfUmVJbml0VGhyZWFkc1gBAAAALXRy1iQAAFgTAAAAUHlUeXBlX0dlbmVyaWNBbGxvY3LXJAAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZS5odG1sI2MuUHlUeXBlX0dlbmVyaWNBbGxvY1gBAAAALXRy2CQAAFgQAAAAUHlNYXBwaW5nX0hhc0tleXLZJAAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbWFwcGluZy5odG1sI2MuUHlNYXBwaW5nX0hhc0tleVgBAAAALXRy2iQAAFgMAAAAUHlPYmplY3RfTmV3ctskAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9hbGxvY2F0aW9uLmh0bWwjYy5QeU9iamVjdF9OZXdYAQAAAC10ctwkAABYFQAAAFB5T2JqZWN0X0FzUmVhZEJ1ZmZlcnLdJAAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvb2JqYnVmZmVyLmh0bWwjYy5QeU9iamVjdF9Bc1JlYWRCdWZmZXJYAQAAAC10ct4kAABYFQAAAFB5UnVuX1NpbXBsZUZpbGVGbGFnc3LfJAAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdmVyeWhpZ2guaHRtbCNjLlB5UnVuX1NpbXBsZUZpbGVGbGFnc1gBAAAALXRy4CQAAFgPAAAAX1B5VHVwbGVfUmVzaXplcuEkAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90dXBsZS5odG1sI2MuX1B5VHVwbGVfUmVzaXplWAEAAAAtdHLiJAAAWBQAAABQeUNPYmplY3RfU2V0Vm9pZFB0cnLjJAAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29iamVjdC5odG1sI2MuUHlDT2JqZWN0X1NldFZvaWRQdHJYAQAAAC10cuQkAABYFAAAAFB5VW5pY29kZV9FbmNvZGVVVEY3cuUkAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRW5jb2RlVVRGN1gBAAAALXRy5iQAAFgRAAAAUHlEZXNjcl9OZXdNZW1iZXJy5yQAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2Rlc2NyaXB0b3IuaHRtbCNjLlB5RGVzY3JfTmV3TWVtYmVyWAEAAAAtdHLoJAAAWBMAAABQeVN5c19BZGRXYXJuT3B0aW9ucukkAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zeXMuaHRtbCNjLlB5U3lzX0FkZFdhcm5PcHRpb25YAQAAAC10cuokAABYFAAAAFB5VW5pY29kZV9FbmNvZGVVVEY4cuskAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRW5jb2RlVVRGOFgBAAAALXRy7CQAAFgdAAAAUHlNYXJzaGFsX1dyaXRlT2JqZWN0VG9TdHJpbmdy7SQAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21hcnNoYWwuaHRtbCNjLlB5TWFyc2hhbF9Xcml0ZU9iamVjdFRvU3RyaW5nWAEAAAAtdHLuJAAAWA8AAABQeUV2YWxfU2V0VHJhY2Vy7yQAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNjLlB5RXZhbF9TZXRUcmFjZVgBAAAALXRy8CQAAFgPAAAAUHlGaWxlX0Zyb21GaWxlcvEkAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9maWxlLmh0bWwjYy5QeUZpbGVfRnJvbUZpbGVYAQAAAC10cvIkAABYHQAAAFB5VW5pY29kZUVuY29kZUVycm9yX1NldFN0YXJ0cvMkAAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRTdGFydFgBAAAALXRy9CQAAFgMAAAAUHlPYmplY3RfQ21wcvUkAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X0NtcFgBAAAALXRy9iQAAFgUAAAAUHlNb2R1bGVfQWRkSW50TWFjcm9y9yQAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21vZHVsZS5odG1sI2MuUHlNb2R1bGVfQWRkSW50TWFjcm9YAQAAAC10cvgkAABYDAAAAFB5UnVuX0ZpbGVFeHL5JAAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdmVyeWhpZ2guaHRtbCNjLlB5UnVuX0ZpbGVFeFgBAAAALXRy+iQAAFgaAAAAUHlDb2RlY19JbmNyZW1lbnRhbERlY29kZXJy+yQAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvZGVjLmh0bWwjYy5QeUNvZGVjX0luY3JlbWVudGFsRGVjb2RlclgBAAAALXRy/CQAAFgRAAAAUHlTZXF1ZW5jZV9SZXBlYXRy/SQAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3NlcXVlbmNlLmh0bWwjYy5QeVNlcXVlbmNlX1JlcGVhdFgBAAAALXRy/iQAAFgSAAAAUHlTZXF1ZW5jZV9HZXRJdGVtcv8kAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zZXF1ZW5jZS5odG1sI2MuUHlTZXF1ZW5jZV9HZXRJdGVtWAEAAAAtdHIAJQAAWA4AAABQeUluc3RhbmNlX05ld3IBJQAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY2xhc3MuaHRtbCNjLlB5SW5zdGFuY2VfTmV3WAEAAAAtdHICJQAAWA8AAABQeVN0cmluZ19EZWNvZGVyAyUAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N0cmluZy5odG1sI2MuUHlTdHJpbmdfRGVjb2RlWAEAAAAtdHIEJQAAWBAAAABQeUNhcHN1bGVfSW1wb3J0cgUlAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jYXBzdWxlLmh0bWwjYy5QeUNhcHN1bGVfSW1wb3J0WAEAAAAtdHIGJQAAWBAAAABQeVVuaWNvZGVfQ29uY2F0cgclAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfQ29uY2F0WAEAAAAtdHIIJQAAWAwAAABQeU9iamVjdF9EZWxyCSUAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2FsbG9jYXRpb24uaHRtbCNjLlB5T2JqZWN0X0RlbFgBAAAALXRyCiUAAFgQAAAAUHlPYmplY3RfQ29tcGFyZXILJQAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvb2JqZWN0Lmh0bWwjYy5QeU9iamVjdF9Db21wYXJlWAEAAAAtdHIMJQAAWBEAAABQeUNhcHN1bGVfR2V0TmFtZXINJQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY2Fwc3VsZS5odG1sI2MuUHlDYXBzdWxlX0dldE5hbWVYAQAAAC10cg4lAABYDwAAAFB5U2VxdWVuY2VfSVRFTXIPJQAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc2VxdWVuY2UuaHRtbCNjLlB5U2VxdWVuY2VfSVRFTVgBAAAALXRyECUAAFgRAAAAUHlNZXRob2RfRnVuY3Rpb25yESUAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21ldGhvZC5odG1sI2MuUHlNZXRob2RfRnVuY3Rpb25YAQAAAC10chIlAABYHgAAAFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldEVuZHITJQAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0RW5kWAEAAAAtdHIUJQAAWA0AAABQeVN0cmluZ19TaXplchUlAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zdHJpbmcuaHRtbCNjLlB5U3RyaW5nX1NpemVYAQAAAC10chYlAABYGAAAAFB5U2VxdWVuY2VfSW5QbGFjZVJlcGVhdHIXJQAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc2VxdWVuY2UuaHRtbCNjLlB5U2VxdWVuY2VfSW5QbGFjZVJlcGVhdFgBAAAALXRyGCUAAFgRAAAAUHlDT2JqZWN0X0dldERlc2NyGSUAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvYmplY3QuaHRtbCNjLlB5Q09iamVjdF9HZXREZXNjWAEAAAAtdHIaJQAAWAsAAABQeUxpc3RfU29ydHIbJQAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbGlzdC5odG1sI2MuUHlMaXN0X1NvcnRYAQAAAC10chwlAABYHwAAAFB5Q29kZWNfWE1MQ2hhclJlZlJlcGxhY2VFcnJvcnNyHSUAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvZGVjLmh0bWwjYy5QeUNvZGVjX1hNTENoYXJSZWZSZXBsYWNlRXJyb3JzWAEAAAAtdHIeJQAAWBgAAABQeU51bWJlcl9JblBsYWNlU3VidHJhY3RyHyUAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfSW5QbGFjZVN1YnRyYWN0WAEAAAAtdHIgJQAAWA0AAABQeUNhcHN1bGVfTmV3ciElAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jYXBzdWxlLmh0bWwjYy5QeUNhcHN1bGVfTmV3WAEAAAAtdHIiJQAAWBsAAABQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRFbmRyIyUAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuZFgBAAAALXRyJCUAAFgKAAAAUHlDZWxsX1NFVHIlJQAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY2VsbC5odG1sI2MuUHlDZWxsX1NFVFgBAAAALXRyJiUAAFgaAAAAUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJyJyUAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyWAEAAAAtdHIoJQAAWA4AAABQeUxpc3RfQXNUdXBsZXIpJQAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbGlzdC5odG1sI2MuUHlMaXN0X0FzVHVwbGVYAQAAAC10ciolAABYIAAAAFB5VW5pY29kZV9FbmNvZGVSYXdVbmljb2RlRXNjYXBlcislAAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRW5jb2RlUmF3VW5pY29kZUVzY2FwZVgBAAAALXRyLCUAAFgPAAAAUHlEYXRlX0Zyb21EYXRlci0lAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kYXRldGltZS5odG1sI2MuUHlEYXRlX0Zyb21EYXRlWAEAAAAtdHIuJQAAWBIAAABQeUdJTFN0YXRlX1JlbGVhc2VyLyUAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNjLlB5R0lMU3RhdGVfUmVsZWFzZVgBAAAALXRyMCUAAFgVAAAAUHlVbmljb2RlX0VuY29kZUFTQ0lJcjElAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRW5jb2RlQVNDSUlYAQAAAC10cjIlAABYEgAAAFB5X1VOSUNPREVfSVNTUEFDRXIzJQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlfVU5JQ09ERV9JU1NQQUNFWAEAAAAtdHI0JQAAWBwAAABQeUNPYmplY3RfRnJvbVZvaWRQdHJBbmREZXNjcjUlAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jb2JqZWN0Lmh0bWwjYy5QeUNPYmplY3RfRnJvbVZvaWRQdHJBbmREZXNjWAEAAAAtdHI2JQAAWBYAAABQeVVuaWNvZGVfRW5jb2RlTGF0aW4xcjclAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRW5jb2RlTGF0aW4xWAEAAAAtdHI4JQAAWBUAAABQeVVuaWNvZGVfRGVjb2RlVVRGMzJyOSUAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9EZWNvZGVVVEYzMlgBAAAALXRyOiUAAFgPAAAAUHlPYmplY3RfTmV3VmFycjslAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9hbGxvY2F0aW9uLmh0bWwjYy5QeU9iamVjdF9OZXdWYXJYAQAAAC10cjwlAABYCwAAAFB5TGlzdF9TaXplcj0lAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9saXN0Lmh0bWwjYy5QeUxpc3RfU2l6ZVgBAAAALXRyPiUAAFgUAAAAUHlfVU5JQ09ERV9JU05VTUVSSUNyPyUAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5X1VOSUNPREVfSVNOVU1FUklDWAEAAAAtdHJAJQAAWB4AAABQeUNvZGVjX0JhY2tzbGFzaFJlcGxhY2VFcnJvcnNyQSUAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvZGVjLmh0bWwjYy5QeUNvZGVjX0JhY2tzbGFzaFJlcGxhY2VFcnJvcnNYAQAAAC10ckIlAABYFAAAAFB5RXZhbF9SZXN0b3JlVGhyZWFkckMlAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbml0Lmh0bWwjYy5QeUV2YWxfUmVzdG9yZVRocmVhZFgBAAAALXRyRCUAAFgSAAAAUHlfVU5JQ09ERV9JU1VQUEVSckUlAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeV9VTklDT0RFX0lTVVBQRVJYAQAAAC10ckYlAABYDgAAAFB5X0luaXRNb2R1bGUzckclAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9hbGxvY2F0aW9uLmh0bWwjYy5QeV9Jbml0TW9kdWxlM1gBAAAALXRySCUAAFgRAAAAUHlfQWRkUGVuZGluZ0NhbGxySSUAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNjLlB5X0FkZFBlbmRpbmdDYWxsWAEAAAAtdHJKJQAAWBAAAABQeU1hcHBpbmdfTGVuZ3RockslAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tYXBwaW5nLmh0bWwjYy5QeU1hcHBpbmdfTGVuZ3RoWAEAAAAtdHJMJQAAWBsAAABQeU51bWJlcl9JblBsYWNlRmxvb3JEaXZpZGVyTSUAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfSW5QbGFjZUZsb29yRGl2aWRlWAEAAAAtdHJOJQAAWBQAAABQeUNvbXBsZXhfQXNDQ29tcGxleHJPJQAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29tcGxleC5odG1sI2MuUHlDb21wbGV4X0FzQ0NvbXBsZXhYAQAAAC10clAlAABYDgAAAFB5TWV0aG9kX0NsYXNzclElAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tZXRob2QuaHRtbCNjLlB5TWV0aG9kX0NsYXNzWAEAAAAtdHJSJQAAWBAAAABQeVR5cGVfSXNTdWJ0eXBlclMlAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlLmh0bWwjYy5QeVR5cGVfSXNTdWJ0eXBlWAEAAAAtdHJUJQAAWBQAAABQeUNvbXBsZXhfQ2hlY2tFeGFjdHJVJQAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29tcGxleC5odG1sI2MuUHlDb21wbGV4X0NoZWNrRXhhY3RYAQAAAC10clYlAABYEQAAAFB5UnVuX0ZpbGVFeEZsYWdzclclAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlSdW5fRmlsZUV4RmxhZ3NYAQAAAC10clglAABYFAAAAFB5Q2Fwc3VsZV9TZXRDb250ZXh0clklAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jYXBzdWxlLmh0bWwjYy5QeUNhcHN1bGVfU2V0Q29udGV4dFgBAAAALXRyWiUAAFgJAAAAUHlNZW1fTmV3clslAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tZW1vcnkuaHRtbCNjLlB5TWVtX05ld1gBAAAALXRyXCUAAFgPAAAAUHlFcnJfU2V0U3RyaW5ncl0lAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeUVycl9TZXRTdHJpbmdYAQAAAC10cl4lAABYEAAAAFB5UnVuX1NpbXBsZUZpbGVyXyUAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3ZlcnloaWdoLmh0bWwjYy5QeVJ1bl9TaW1wbGVGaWxlWAEAAAAtdHJgJQAAWAwAAABQeUxpc3RfQ2hlY2tyYSUAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2xpc3QuaHRtbCNjLlB5TGlzdF9DaGVja1gBAAAALXRyYiUAAFgOAAAAUHlTZXRfQ29udGFpbnNyYyUAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3NldC5odG1sI2MuUHlTZXRfQ29udGFpbnNYAQAAAC10cmQlAABYGAAAAFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvd3JlJQAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbG9uZy5odG1sI2MuUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93WAEAAAAtdHJmJQAAWBQAAABQeUNvZGVjX1N0cmljdEVycm9yc3JnJQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29kZWMuaHRtbCNjLlB5Q29kZWNfU3RyaWN0RXJyb3JzWAEAAAAtdHJoJQAAWA4AAABQeU51bWJlcl9Qb3dlcnJpJQAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbnVtYmVyLmh0bWwjYy5QeU51bWJlcl9Qb3dlclgBAAAALXRyaiUAAFgbAAAAUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzcmslAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXNYAQAAAC10cmwlAABYFgAAAFB5SW1wb3J0X0FwcGVuZEluaXR0YWJybSUAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ltcG9ydC5odG1sI2MuUHlJbXBvcnRfQXBwZW5kSW5pdHRhYlgBAAAALXRybiUAAFgPAAAAUHlEaWN0UHJveHlfTmV3cm8lAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kaWN0Lmh0bWwjYy5QeURpY3RQcm94eV9OZXdYAQAAAC10cnAlAABYDQAAAFB5U2xpY2VfQ2hlY2tycSUAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3NsaWNlLmh0bWwjYy5QeVNsaWNlX0NoZWNrWAEAAAAtdHJyJQAAWAsAAABQeURpY3RfTmV4dHJzJQAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZGljdC5odG1sI2MuUHlEaWN0X05leHRYAQAAAC10cnQlAABYEwAAAFB5TnVtYmVyX0luUGxhY2VBZGRydSUAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfSW5QbGFjZUFkZFgBAAAALXRydiUAAFgMAAAAUHlGaWxlX0NoZWNrcnclAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9maWxlLmh0bWwjYy5QeUZpbGVfQ2hlY2tYAQAAAC10cnglAABYDwAAAFB5UnVuX0ZpbGVGbGFnc3J5JQAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdmVyeWhpZ2guaHRtbCNjLlB5UnVuX0ZpbGVGbGFnc1gBAAAALXRyeiUAAFgVAAAAUHlfR2V0UHJvZ3JhbUZ1bGxQYXRocnslAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbml0Lmh0bWwjYy5QeV9HZXRQcm9ncmFtRnVsbFBhdGhYAQAAAC10cnwlAABYDwAAAFB5TG9uZ19Gcm9tTG9uZ3J9JQAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbG9uZy5odG1sI2MuUHlMb25nX0Zyb21Mb25nWAEAAAAtdHJ+JQAAWBUAAABQeV9FbnRlclJlY3Vyc2l2ZUNhbGxyfyUAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5X0VudGVyUmVjdXJzaXZlQ2FsbFgBAAAALXRygCUAAFgTAAAAUHlTdHJpbmdfRnJvbUZvcm1hdHKBJQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3RyaW5nLmh0bWwjYy5QeVN0cmluZ19Gcm9tRm9ybWF0WAEAAAAtdHKCJQAAWBEAAABQeUNhcHN1bGVfU2V0TmFtZXKDJQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY2Fwc3VsZS5odG1sI2MuUHlDYXBzdWxlX1NldE5hbWVYAQAAAC10coQlAABYEAAAAFB5VHVwbGVfU0VUX0lURU1yhSUAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R1cGxlLmh0bWwjYy5QeVR1cGxlX1NFVF9JVEVNWAEAAAAtdHKGJQAAWBkAAABQeVJ1bl9JbnRlcmFjdGl2ZU9uZUZsYWdzcoclAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlSdW5fSW50ZXJhY3RpdmVPbmVGbGFnc1gBAAAALXRyiCUAAFgUAAAAUHlXZWFrcmVmX0NoZWNrUHJveHlyiSUAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3dlYWtyZWYuaHRtbCNjLlB5V2Vha3JlZl9DaGVja1Byb3h5WAEAAAAtdHKKJQAAWA8AAABQeV9HZXRCdWlsZEluZm9yiyUAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNjLlB5X0dldEJ1aWxkSW5mb1gBAAAALXRyjCUAAFgOAAAAUHlDYWxsSXRlcl9OZXdyjSUAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2l0ZXJhdG9yLmh0bWwjYy5QeUNhbGxJdGVyX05ld1gBAAAALXRyjiUAAFgaAAAAUHlOdW1iZXJfSW5QbGFjZVRydWVEaXZpZGVyjyUAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfSW5QbGFjZVRydWVEaXZpZGVYAQAAAC10cpAlAABYFwAAAFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlcpElAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbXBvcnQuaHRtbCNjLlB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlWAEAAAAtdHKSJQAAWBQAAABQeUZsb2F0X0FzUmVwclN0cmluZ3KTJQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZmxvYXQuaHRtbCNjLlB5RmxvYXRfQXNSZXByU3RyaW5nWAEAAAAtdHKUJQAAWA0AAABQeVN5c19TZXRBcmd2cpUlAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbml0Lmh0bWwjYy5QeVN5c19TZXRBcmd2WAEAAAAtdHKWJQAAWA0AAABQeUluZGV4X0NoZWNrcpclAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9udW1iZXIuaHRtbCNjLlB5SW5kZXhfQ2hlY2tYAQAAAC10cpglAABYEgAAAFB5UnVuX1NpbXBsZVN0cmluZ3KZJQAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdmVyeWhpZ2guaHRtbCNjLlB5UnVuX1NpbXBsZVN0cmluZ1gBAAAALXRymiUAAFgQAAAAUHlPYmplY3RfSW5pdFZhcnKbJQAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYWxsb2NhdGlvbi5odG1sI2MuUHlPYmplY3RfSW5pdFZhclgBAAAALXRynCUAAFgPAAAAUHlMaXN0X0dldFNsaWNlcp0lAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9saXN0Lmh0bWwjYy5QeUxpc3RfR2V0U2xpY2VYAQAAAC10cp4lAABYDgAAAFB5VW5pY29kZV9Kb2lucp8lAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfSm9pblgBAAAALXRyoCUAAFgSAAAAUHlGaWxlX1dyaXRlT2JqZWN0cqElAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9maWxlLmh0bWwjYy5QeUZpbGVfV3JpdGVPYmplY3RYAQAAAC10cqIlAABYEgAAAFB5RXZhbF9Jbml0VGhyZWFkc3KjJQAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlFdmFsX0luaXRUaHJlYWRzWAEAAAAtdHKkJQAAWA4AAABQeVVuaWNvZGVfRmluZHKlJQAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0ZpbmRYAQAAAC10cqYlAABYFwAAAFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRycqclAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyWAEAAAAtdHKoJQAAWCAAAABQeVVuaWNvZGVfRGVjb2RlUmF3VW5pY29kZUVzY2FwZXKpJQAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0RlY29kZVJhd1VuaWNvZGVFc2NhcGVYAQAAAC10cqolAABYHQAAAFB5SW50ZXJwcmV0ZXJTdGF0ZV9UaHJlYWRIZWFkcqslAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbml0Lmh0bWwjYy5QeUludGVycHJldGVyU3RhdGVfVGhyZWFkSGVhZFgBAAAALXRyrCUAAFgSAAAAUHlTZXF1ZW5jZV9EZWxJdGVtcq0lAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zZXF1ZW5jZS5odG1sI2MuUHlTZXF1ZW5jZV9EZWxJdGVtWAEAAAAtdHKuJQAAWBAAAABQeU1vZHVsZV9HZXREaWN0cq8lAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tb2R1bGUuaHRtbCNjLlB5TW9kdWxlX0dldERpY3RYAQAAAC10crAlAABYEgAAAFB5VW5pY29kZV9HRVRfU0laRXKxJQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0dFVF9TSVpFWAEAAAAtdHKyJQAAWBUAAABQeVVuaWNvZGVfRnJvbVVuaWNvZGVysyUAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9Gcm9tVW5pY29kZVgBAAAALXRytCUAAFgPAAAAUHlGbG9hdF9HZXRJbmZvcrUlAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9mbG9hdC5odG1sI2MuUHlGbG9hdF9HZXRJbmZvWAEAAAAtdHK2JQAAWBUAAABQeU9TX3N0cmluZ190b19kb3VibGVytyUAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvbnZlcnNpb24uaHRtbCNjLlB5T1Nfc3RyaW5nX3RvX2RvdWJsZVgBAAAALXRyuCUAAFgXAAAAUHlMb25nX0Zyb21VbnNpZ25lZExvbmdyuSUAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2xvbmcuaHRtbCNjLlB5TG9uZ19Gcm9tVW5zaWduZWRMb25nWAEAAAAtdHK6JQAAWBEAAABQeU51bWJlcl9Db2VyY2VFeHK7JQAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbnVtYmVyLmh0bWwjYy5QeU51bWJlcl9Db2VyY2VFeFgBAAAALXRyvCUAAFgSAAAAUHlGdW5jdGlvbl9HZXRDb2Rlcr0lAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9mdW5jdGlvbi5odG1sI2MuUHlGdW5jdGlvbl9HZXRDb2RlWAEAAAAtdHK+JQAAWA8AAABQeU51bWJlcl9Db2VyY2VyvyUAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfQ29lcmNlWAEAAAAtdHLAJQAAWBQAAABQeVVuaWNvZGVfQVNfVU5JQ09ERXLBJQAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0FTX1VOSUNPREVYAQAAAC10csIlAABYFAAAAFB5Q2Fwc3VsZV9DaGVja0V4YWN0csMlAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jYXBzdWxlLmh0bWwjYy5QeUNhcHN1bGVfQ2hlY2tFeGFjdFgBAAAALXRyxCUAAFgMAAAAUHlEaWN0X0NsZWFycsUlAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kaWN0Lmh0bWwjYy5QeURpY3RfQ2xlYXJYAQAAAC10csYlAABYDAAAAFB5RXJyX1dhcm5FeHLHJQAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlFcnJfV2FybkV4WAEAAAAtdHLIJQAAWA4AAABfUHlJbXBvcnRfSW5pdHLJJQAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW1wb3J0Lmh0bWwjYy5fUHlJbXBvcnRfSW5pdFgBAAAALXRyyiUAAFgRAAAAUHlGaWxlX0NoZWNrRXhhY3RyyyUAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ZpbGUuaHRtbCNjLlB5RmlsZV9DaGVja0V4YWN0WAEAAAAtdHLMJQAAWAwAAABQeUNvZGVfQ2hlY2tyzSUAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvZGUuaHRtbCNjLlB5Q29kZV9DaGVja1gBAAAALXRyziUAAFgRAAAAUHlfR2V0UHJvZ3JhbU5hbWVyzyUAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNjLlB5X0dldFByb2dyYW1OYW1lWAEAAAAtdHLQJQAAWA8AAABQeUZyb3plblNldF9OZXdy0SUAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3NldC5odG1sI2MuUHlGcm96ZW5TZXRfTmV3WAEAAAAtdHLSJQAAWBAAAABQeVNlcXVlbmNlX0luZGV4ctMlAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zZXF1ZW5jZS5odG1sI2MuUHlTZXF1ZW5jZV9JbmRleFgBAAAALXRy1CUAAFgJAAAAUHlfSU5DUkVGctUlAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9yZWZjb3VudGluZy5odG1sI2MuUHlfSU5DUkVGWAEAAAAtdHLWJQAAWBoAAABQeU1hcnNoYWxfUmVhZExvbmdGcm9tRmlsZXLXJQAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbWFyc2hhbC5odG1sI2MuUHlNYXJzaGFsX1JlYWRMb25nRnJvbUZpbGVYAQAAAC10ctglAABYDAAAAFB5RGljdF9DaGVja3LZJQAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZGljdC5odG1sI2MuUHlEaWN0X0NoZWNrWAEAAAAtdHLaJQAAWBkAAABQeUV2YWxfTWVyZ2VDb21waWxlckZsYWdzctslAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlFdmFsX01lcmdlQ29tcGlsZXJGbGFnc1gBAAAALXRy3CUAAFgMAAAAUHlJdGVyX0NoZWNrct0lAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pdGVyLmh0bWwjYy5QeUl0ZXJfQ2hlY2tYAQAAAC10ct4lAABYEwAAAFB5VW5pY29kZV9UYWlsbWF0Y2hy3yUAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9UYWlsbWF0Y2hYAQAAAC10cuAlAABYFQAAAFB5Qnl0ZUFycmF5X0FTX1NUUklOR3LhJQAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYnl0ZWFycmF5Lmh0bWwjYy5QeUJ5dGVBcnJheV9BU19TVFJJTkdYAQAAAC10cuIlAABYEAAAAFB5VHVwbGVfR0VUX0lURU1y4yUAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R1cGxlLmh0bWwjYy5QeVR1cGxlX0dFVF9JVEVNWAEAAAAtdHLkJQAAWBUAAABQeUZyYW1lX0dldExpbmVOdW1iZXJy5SUAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3JlZmxlY3Rpb24uaHRtbCNjLlB5RnJhbWVfR2V0TGluZU51bWJlclgBAAAALXRy5iUAAFgRAAAAUHlHSUxTdGF0ZV9FbnN1cmVy5yUAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNjLlB5R0lMU3RhdGVfRW5zdXJlWAEAAAAtdHLoJQAAWBIAAABQeVNsaWNlX0dldEluZGljZXNy6SUAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3NsaWNlLmh0bWwjYy5QeVNsaWNlX0dldEluZGljZXNYAQAAAC10cuolAABYFwAAAFB5SW50ZXJwcmV0ZXJTdGF0ZV9IZWFkcuslAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbml0Lmh0bWwjYy5QeUludGVycHJldGVyU3RhdGVfSGVhZFgBAAAALXRy7CUAAFgNAAAAUHlfRmF0YWxFcnJvcnLtJQAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3lzLmh0bWwjYy5QeV9GYXRhbEVycm9yWAEAAAAtdHLuJQAAWA0AAABQeU9iamVjdF9UeXBlcu8lAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X1R5cGVYAQAAAC10cvAlAABYGgAAAFB5RGF0ZVRpbWVfREFURV9HRVRfTUlOVVRFcvElAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kYXRldGltZS5odG1sI2MuUHlEYXRlVGltZV9EQVRFX0dFVF9NSU5VVEVYAQAAAC10cvIlAABYEQAAAFB5RGF0ZV9DaGVja0V4YWN0cvMlAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kYXRldGltZS5odG1sI2MuUHlEYXRlX0NoZWNrRXhhY3RYAQAAAC10cvQlAABYDQAAAFB5TWVtX1JlYWxsb2Ny9SUAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21lbW9yeS5odG1sI2MuUHlNZW1fUmVhbGxvY1gBAAAALXRy9iUAAFgNAAAAUHlPYmplY3RfUmVwcnL3JQAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvb2JqZWN0Lmh0bWwjYy5QeU9iamVjdF9SZXByWAEAAAAtdHL4JQAAWBUAAABQeUVycl9Xcml0ZVVucmFpc2FibGVy+SUAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5RXJyX1dyaXRlVW5yYWlzYWJsZVgBAAAALXRy+iUAAFgXAAAAUHlCdWZmZXJfU2l6ZUZyb21Gb3JtYXRy+yUAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2J1ZmZlci5odG1sI2MuUHlCdWZmZXJfU2l6ZUZyb21Gb3JtYXRYAQAAAC10cvwlAABYEgAAAFB5V2Vha3JlZl9OZXdQcm94eXL9JQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvd2Vha3JlZi5odG1sI2MuUHlXZWFrcmVmX05ld1Byb3h5WAEAAAAtdHL+JQAAWA8AAABQeURlbHRhX0Zyb21EU1Vy/yUAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2RhdGV0aW1lLmh0bWwjYy5QeURlbHRhX0Zyb21EU1VYAQAAAC10cgAmAABYEgAAAFB5TnVtYmVyX0FzU3NpemVfdHIBJgAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbnVtYmVyLmh0bWwjYy5QeU51bWJlcl9Bc1NzaXplX3RYAQAAAC10cgImAABYEgAAAFB5RmxvYXRfRnJvbURvdWJsZXIDJgAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZmxvYXQuaHRtbCNjLlB5RmxvYXRfRnJvbURvdWJsZVgBAAAALXRyBCYAAFgTAAAAUHlTZXF1ZW5jZV9HZXRTbGljZXIFJgAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc2VxdWVuY2UuaHRtbCNjLlB5U2VxdWVuY2VfR2V0U2xpY2VYAQAAAC10cgYmAABYDQAAAFB5VHVwbGVfQ2hlY2tyByYAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R1cGxlLmh0bWwjYy5QeVR1cGxlX0NoZWNrWAEAAAAtdHIIJgAAWAwAAABQeU51bWJlcl9BZGRyCSYAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfQWRkWAEAAAAtdHIKJgAAWB0AAABQeVVuaWNvZGVfRGVjb2RlVW5pY29kZUVzY2FwZXILJgAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0RlY29kZVVuaWNvZGVFc2NhcGVYAQAAAC10cgwmAABYGAAAAFB5SW50ZXJwcmV0ZXJTdGF0ZV9DbGVhcnINJgAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlJbnRlcnByZXRlclN0YXRlX0NsZWFyWAEAAAAtdHIOJgAAWBMAAABQeUNvZGVjX0xvb2t1cEVycm9ycg8mAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jb2RlYy5odG1sI2MuUHlDb2RlY19Mb29rdXBFcnJvclgBAAAALXRyECYAAFgSAAAAUHlTZXF1ZW5jZV9TZXRJdGVtchEmAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zZXF1ZW5jZS5odG1sI2MuUHlTZXF1ZW5jZV9TZXRJdGVtWAEAAAAtdHISJgAAWBMAAABQeU9iamVjdF9DYWxsTWV0aG9kchMmAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X0NhbGxNZXRob2RYAQAAAC10chQmAABYFwAAAFB5VW5pY29kZV9FbmNvZGVDaGFybWFwchUmAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRW5jb2RlQ2hhcm1hcFgBAAAALXRyFiYAAFggAAAAUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0U3RhcnRyFyYAAChqaQEAAGpqAQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldFN0YXJ0WAEAAAAtdHIYJgAAWBgAAABQeU9iamVjdF9DaGVja1JlYWRCdWZmZXJyGSYAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL29iamJ1ZmZlci5odG1sI2MuUHlPYmplY3RfQ2hlY2tSZWFkQnVmZmVyWAEAAAAtdHIaJgAAWA4AAABQeV9Jbml0TW9kdWxlNHIbJgAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYWxsb2NhdGlvbi5odG1sI2MuUHlfSW5pdE1vZHVsZTRYAQAAAC10chwmAABYFAAAAFB5VW5pY29kZV9EZWNvZGVNQkNTch0mAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRGVjb2RlTUJDU1gBAAAALXRyHiYAAFgOAAAAUHlBbnlTZXRfQ2hlY2tyHyYAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3NldC5odG1sI2MuUHlBbnlTZXRfQ2hlY2tYAQAAAC10ciAmAABYDgAAAFB5RXJyX09jY3VycmVkciEmAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeUVycl9PY2N1cnJlZFgBAAAALXRyIiYAAFgNAAAAUHlEaWN0X1VwZGF0ZXIjJgAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZGljdC5odG1sI2MuUHlEaWN0X1VwZGF0ZVgBAAAALXRyJCYAAFgTAAAAUHlNb2R1bGVfQ2hlY2tFeGFjdHIlJgAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbW9kdWxlLmh0bWwjYy5QeU1vZHVsZV9DaGVja0V4YWN0WAEAAAAtdHImJgAAWA8AAABQeU51bWJlcl9Sc2hpZnRyJyYAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfUnNoaWZ0WAEAAAAtdHIoJgAAWA0AAABQeUZpbGVfQXNGaWxlcikmAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9maWxlLmh0bWwjYy5QeUZpbGVfQXNGaWxlWAEAAAAtdHIqJgAAWBYAAABQeUJ5dGVBcnJheV9DaGVja0V4YWN0cismAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9ieXRlYXJyYXkuaHRtbCNjLlB5Qnl0ZUFycmF5X0NoZWNrRXhhY3RYAQAAAC10ciwmAABYEgAAAFB5X1VOSUNPREVfSVNUSVRMRXItJgAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlfVU5JQ09ERV9JU1RJVExFWAEAAAAtdHIuJgAAWBYAAABQeUludGVycHJldGVyU3RhdGVfTmV3ci8mAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbml0Lmh0bWwjYy5QeUludGVycHJldGVyU3RhdGVfTmV3WAEAAAAtdHIwJgAAWA8AAABQeU9iamVjdF9Jc1RydWVyMSYAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfSXNUcnVlWAEAAAAtdHIyJgAAWA4AAABQeUxpc3RfU2V0SXRlbXIzJgAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbGlzdC5odG1sI2MuUHlMaXN0X1NldEl0ZW1YAQAAAC10cjQmAABYEQAAAFB5VW5pY29kZV9HZXRTaXplcjUmAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfR2V0U2l6ZVgBAAAALXRyNiYAAFgaAAAAUHlDb2RlY19JbmNyZW1lbnRhbEVuY29kZXJyNyYAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvZGVjLmh0bWwjYy5QeUNvZGVjX0luY3JlbWVudGFsRW5jb2RlclgBAAAALXRyOCYAAFgMAAAAUHlOdW1iZXJfSW50cjkmAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9udW1iZXIuaHRtbCNjLlB5TnVtYmVyX0ludFgBAAAALXRyOiYAAFgRAAAAUHlNYXBwaW5nX0RlbEl0ZW1yOyYAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21hcHBpbmcuaHRtbCNjLlB5TWFwcGluZ19EZWxJdGVtWAEAAAAtdHI8JgAAWBQAAABQeVN0cmluZ19Gcm9tRm9ybWF0VnI9JgAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3RyaW5nLmh0bWwjYy5QeVN0cmluZ19Gcm9tRm9ybWF0VlgBAAAALXRyPiYAAFgVAAAAUHlUdXBsZV9DbGVhckZyZWVMaXN0cj8mAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90dXBsZS5odG1sI2MuUHlUdXBsZV9DbGVhckZyZWVMaXN0WAEAAAAtdHJAJgAAWAwAAABQeU51bWJlcl9BbmRyQSYAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfQW5kWAEAAAAtdHJCJgAAWA4AAABQeUVycl9Ob01lbW9yeXJDJgAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlFcnJfTm9NZW1vcnlYAQAAAC10ckQmAABYEgAAAFB5RXZhbF9BY3F1aXJlTG9ja3JFJgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlFdmFsX0FjcXVpcmVMb2NrWAEAAAAtdHJGJgAAWBQAAABQeVJ1bl9BbnlGaWxlRXhGbGFnc3JHJgAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdmVyeWhpZ2guaHRtbCNjLlB5UnVuX0FueUZpbGVFeEZsYWdzWAEAAAAtdHJIJgAAWAsAAABQeVR1cGxlX05ld3JJJgAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHVwbGUuaHRtbCNjLlB5VHVwbGVfTmV3WAEAAAAtdHJKJgAAWBQAAABQeVNpZ25hbF9TZXRXYWtldXBGZHJLJgAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlTaWduYWxfU2V0V2FrZXVwRmRYAQAAAC10ckwmAABYFwAAAFB5TWVtb3J5Vmlld19Gcm9tT2JqZWN0ck0mAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9idWZmZXIuaHRtbCNjLlB5TWVtb3J5Vmlld19Gcm9tT2JqZWN0WAEAAAAtdHJOJgAAWBQAAABQeVVuaWNvZGVfRnJvbUZvcm1hdHJPJgAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0Zyb21Gb3JtYXRYAQAAAC10clAmAABYDQAAAFB5TWV0aG9kX1NlbGZyUSYAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21ldGhvZC5odG1sI2MuUHlNZXRob2RfU2VsZlgBAAAALXRyUiYAAFgRAAAAUHlFdmFsX1NhdmVUaHJlYWRyUyYAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNjLlB5RXZhbF9TYXZlVGhyZWFkWAEAAAAtdHJUJgAAWA0AAABQeVN5c19TZXRQYXRoclUmAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zeXMuaHRtbCNjLlB5U3lzX1NldFBhdGhYAQAAAC10clYmAABYDQAAAFB5V3JhcHBlcl9OZXdyVyYAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2Rlc2NyaXB0b3IuaHRtbCNjLlB5V3JhcHBlcl9OZXdYAQAAAC10clgmAABYGQAAAFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXhyWSYAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ltcG9ydC5odG1sI2MuUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeFgBAAAALXRyWiYAAFgOAAAAUHlOdW1iZXJfQ2hlY2tyWyYAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfQ2hlY2tYAQAAAC10clwmAABYEgAAAFB5RXZhbF9HZXRGdW5jTmFtZXJdJgAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvcmVmbGVjdGlvbi5odG1sI2MuUHlFdmFsX0dldEZ1bmNOYW1lWAEAAAAtdHJeJgAAWBIAAABQeUxvbmdfRnJvbVVuaWNvZGVyXyYAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2xvbmcuaHRtbCNjLlB5TG9uZ19Gcm9tVW5pY29kZVgBAAAALXRyYCYAAFgUAAAAUHlNb2R1bGVfR2V0RmlsZW5hbWVyYSYAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21vZHVsZS5odG1sI2MuUHlNb2R1bGVfR2V0RmlsZW5hbWVYAQAAAC10cmImAABYFwAAAFB5VW5pY29kZV9DbGVhckZyZWVMaXN0cmMmAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfQ2xlYXJGcmVlTGlzdFgBAAAALXRyZCYAAFgdAAAAUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZ01hc2tyZSYAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2xvbmcuaHRtbCNjLlB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmdNYXNrWAEAAAAtdHJmJgAAWBUAAABQeUNvZGVjX0tub3duRW5jb2RpbmdyZyYAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvZGVjLmh0bWwjYy5QeUNvZGVjX0tub3duRW5jb2RpbmdYAQAAAC10cmgmAABYEQAAAFB5TG9uZ19Gcm9tU2l6ZV90cmkmAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9sb25nLmh0bWwjYy5QeUxvbmdfRnJvbVNpemVfdFgBAAAALXRyaiYAAFgZAAAAUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZ3JrJgAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbG9uZy5odG1sI2MuUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZ1gBAAAALXRybCYAAFgSAAAAUHlFdmFsX0dldEZ1bmNEZXNjcm0mAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9yZWZsZWN0aW9uLmh0bWwjYy5QeUV2YWxfR2V0RnVuY0Rlc2NYAQAAAC10cm4mAABYGgAAAFB5RGF0ZVRpbWVfVElNRV9HRVRfTUlOVVRFcm8mAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kYXRldGltZS5odG1sI2MuUHlEYXRlVGltZV9USU1FX0dFVF9NSU5VVEVYAQAAAC10cnAmAABYIwAAAFB5RXJyX1NldEZyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lcnEmAAAoamkBAABqagEAAFhVAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeUVycl9TZXRGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZVgBAAAALXRyciYAAFghAAAAUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0T2JqZWN0cnMmAAAoamkBAABqagEAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRPYmplY3RYAQAAAC10cnQmAABYEwAAAFB5VFpJbmZvX0NoZWNrRXhhY3RydSYAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2RhdGV0aW1lLmh0bWwjYy5QeVRaSW5mb19DaGVja0V4YWN0WAEAAAAtdHJ2JgAAWCAAAABQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmNvZGluZ3J3JgAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5jb2RpbmdYAQAAAC10cngmAABYEAAAAFB5TW9kdWxlX0dldE5hbWVyeSYAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21vZHVsZS5odG1sI2MuUHlNb2R1bGVfR2V0TmFtZVgBAAAALXRyeiYAAFgbAAAAUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5kcnsmAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmRYAQAAAC10cnwmAABYGwAAAFB5VW5pY29kZURlY29kZUVycm9yX0NyZWF0ZXJ9JgAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlVbmljb2RlRGVjb2RlRXJyb3JfQ3JlYXRlWAEAAAAtdHJ+JgAAWAwAAABQeVR5cGVfUmVhZHlyfyYAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGUuaHRtbCNjLlB5VHlwZV9SZWFkeVgBAAAALXRygCYAAFgRAAAAUHlUaHJlYWRTdGF0ZV9HZXRygSYAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNjLlB5VGhyZWFkU3RhdGVfR2V0WAEAAAAtdHKCJgAAWCAAAABQeU1hcnNoYWxfUmVhZExhc3RPYmplY3RGcm9tRmlsZXKDJgAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbWFyc2hhbC5odG1sI2MuUHlNYXJzaGFsX1JlYWRMYXN0T2JqZWN0RnJvbUZpbGVYAQAAAC10coQmAABYDgAAAFB5T2JqZWN0X0J5dGVzcoUmAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X0J5dGVzWAEAAAAtdHKGJgAAWA4AAABQeUNvZGVjX0RlY29kZXKHJgAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29kZWMuaHRtbCNjLlB5Q29kZWNfRGVjb2RlWAEAAAAtdHKIJgAAWAwAAABQeU51bWJlcl9Yb3JyiSYAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfWG9yWAEAAAAtdHKKJgAAWBEAAABQeUNhcHN1bGVfSXNWYWxpZHKLJgAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY2Fwc3VsZS5odG1sI2MuUHlDYXBzdWxlX0lzVmFsaWRYAQAAAC10cowmAABYGwAAAFB5VW5pY29kZURlY29kZUVycm9yX1NldEVuZHKNJgAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0RW5kWAEAAAAtdHKOJgAAWBEAAABQeVRocmVhZFN0YXRlX05ld3KPJgAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlUaHJlYWRTdGF0ZV9OZXdYAQAAAC10cpAmAABYFwAAAFB5VW5pY29kZV9Bc1VURjE2U3RyaW5ncpEmAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfQXNVVEYxNlN0cmluZ1gBAAAALXRykiYAAFgUAAAAUHlEYXRlVGltZV9HRVRfTU9OVEhykyYAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2RhdGV0aW1lLmh0bWwjYy5QeURhdGVUaW1lX0dFVF9NT05USFgBAAAALXRylCYAAFgZAAAAUHlNYXJzaGFsX1dyaXRlTG9uZ1RvRmlsZXKVJgAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbWFyc2hhbC5odG1sI2MuUHlNYXJzaGFsX1dyaXRlTG9uZ1RvRmlsZVgBAAAALXRyliYAAFgWAAAAUHlJbXBvcnRfRXh0ZW5kSW5pdHRhYnKXJgAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW1wb3J0Lmh0bWwjYy5QeUltcG9ydF9FeHRlbmRJbml0dGFiWAEAAAAtdHKYJgAAWBAAAABQeUZsb2F0X0FzU3RyaW5ncpkmAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9mbG9hdC5odG1sI2MuUHlGbG9hdF9Bc1N0cmluZ1gBAAAALXRymiYAAFgMAAAAUHlNZW1fTWFsbG9jcpsmAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tZW1vcnkuaHRtbCNjLlB5TWVtX01hbGxvY1gBAAAALXRynCYAAFgRAAAAUHlDb2RlX0dldE51bUZyZWVynSYAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvZGUuaHRtbCNjLlB5Q29kZV9HZXROdW1GcmVlWAEAAAAtdHKeJgAAWAwAAABQeU1ldGhvZF9OZXdynyYAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21ldGhvZC5odG1sI2MuUHlNZXRob2RfTmV3WAEAAAAtdHKgJgAAWBoAAABQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJnc3KhJgAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvb2JqZWN0Lmh0bWwjYy5QeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJnc1gBAAAALXRyoiYAAFgKAAAAUHlEaWN0X05ld3KjJgAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZGljdC5odG1sI2MuUHlEaWN0X05ld1gBAAAALXRypCYAAFgMAAAAUHlSdW5fU3RyaW5ncqUmAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlSdW5fU3RyaW5nWAEAAAAtdHKmJgAAWAoAAABQeUxpc3RfTmV3cqcmAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9saXN0Lmh0bWwjYy5QeUxpc3RfTmV3WAEAAAAtdHKoJgAAWA0AAABQeU9iamVjdF9GcmVlcqkmAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tZW1vcnkuaHRtbCNjLlB5T2JqZWN0X0ZyZWVYAQAAAC10cqomAABYGgAAAFB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5ncqsmAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlQYXJzZXJfU2ltcGxlUGFyc2VTdHJpbmdYAQAAAC10cqwmAABYHgAAAFB5VW5pY29kZURlY29kZUVycm9yX0dldFJlYXNvbnKtJgAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0UmVhc29uWAEAAAAtdHKuJgAAWBEAAABQeVR5cGVfR2VuZXJpY05ld3KvJgAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZS5odG1sI2MuUHlUeXBlX0dlbmVyaWNOZXdYAQAAAC10crAmAABYCgAAAF9QeV9jX3F1b3RysSYAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvbXBsZXguaHRtbCNjLl9QeV9jX3F1b3RYAQAAAC10crImAABYFQAAAFB5SW1wb3J0X0ltcG9ydE1vZHVsZXKzJgAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW1wb3J0Lmh0bWwjYy5QeUltcG9ydF9JbXBvcnRNb2R1bGVYAQAAAC10crQmAABYEAAAAFB5SW50X0Zyb21TdHJpbmdytSYAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ludC5odG1sI2MuUHlJbnRfRnJvbVN0cmluZ1gBAAAALXRytiYAAFgQAAAAUHlJbXBvcnRfQ2xlYW51cHK3JgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW1wb3J0Lmh0bWwjYy5QeUltcG9ydF9DbGVhbnVwWAEAAAAtdHK4JgAAWBAAAABQeUZ1bmN0aW9uX0NoZWNrcrkmAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9mdW5jdGlvbi5odG1sI2MuUHlGdW5jdGlvbl9DaGVja1gBAAAALXRyuiYAAFgTAAAAUHlVbmljb2RlX0FzVW5pY29kZXK7JgAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0FzVW5pY29kZVgBAAAALXRyvCYAAFgRAAAAUHlSdW5fU3RyaW5nRmxhZ3NyvSYAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3ZlcnloaWdoLmh0bWwjYy5QeVJ1bl9TdHJpbmdGbGFnc1gBAAAALXRyviYAAFgMAAAAUHlPYmplY3RfTm90cr8mAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X05vdFgBAAAALXRywCYAAFgPAAAAUHlMaXN0X1NFVF9JVEVNcsEmAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9saXN0Lmh0bWwjYy5QeUxpc3RfU0VUX0lURU1YAQAAAC10csImAABYDgAAAFB5X0dldENvbXBpbGVycsMmAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbml0Lmh0bWwjYy5QeV9HZXRDb21waWxlclgBAAAALXRyxCYAAFgMAAAAUHlEaWN0X01lcmdlcsUmAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kaWN0Lmh0bWwjYy5QeURpY3RfTWVyZ2VYAQAAAC10csYmAABYCwAAAFB5RXJyX0ZldGNocscmAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeUVycl9GZXRjaFgBAAAALXRyyCYAAFgTAAAAUHlUaHJlYWRTdGF0ZV9DbGVhcnLJJgAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlUaHJlYWRTdGF0ZV9DbGVhclgBAAAALXRyyiYAAFgSAAAAUHlMb25nX0Zyb21Wb2lkUHRycssmAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9sb25nLmh0bWwjYy5QeUxvbmdfRnJvbVZvaWRQdHJYAQAAAC10cswmAABYFAAAAFB5VW5pY29kZV9EZWNvZGVVVEY3cs0mAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRGVjb2RlVVRGN1gBAAAALXRyziYAAFgPAAAAUHlUdXBsZV9HZXRJdGVtcs8mAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90dXBsZS5odG1sI2MuUHlUdXBsZV9HZXRJdGVtWAEAAAAtdHLQJgAAWB4AAABQeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRSZWFzb25y0SYAAChqaQEAAGpqAQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5VW5pY29kZURlY29kZUVycm9yX1NldFJlYXNvblgBAAAALXRy0iYAAFgRAAAAUHlNZXRob2RfR0VUX1NFTEZy0yYAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21ldGhvZC5odG1sI2MuUHlNZXRob2RfR0VUX1NFTEZYAQAAAC10ctQmAABYDwAAAFB5U3RyaW5nX0NvbmNhdHLVJgAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3RyaW5nLmh0bWwjYy5QeVN0cmluZ19Db25jYXRYAQAAAC10ctYmAABYDwAAAFB5U3lzX1NldE9iamVjdHLXJgAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3lzLmh0bWwjYy5QeVN5c19TZXRPYmplY3RYAQAAAC10ctgmAABYFwAAAFB5TWVtb3J5Vmlld19HRVRfQlVGRkVSctkmAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9idWZmZXIuaHRtbCNjLlB5TWVtb3J5Vmlld19HRVRfQlVGRkVSWAEAAAAtdHLaJgAAWBYAAABQeVN5c19SZXNldFdhcm5PcHRpb25zctsmAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zeXMuaHRtbCNjLlB5U3lzX1Jlc2V0V2Fybk9wdGlvbnNYAQAAAC10ctwmAABYCgAAAFB5X1hERUNSRUZy3SYAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3JlZmNvdW50aW5nLmh0bWwjYy5QeV9YREVDUkVGWAEAAAAtdHLeJgAAWB0AAABQeVVuaWNvZGVfRW5jb2RlVW5pY29kZUVzY2FwZXLfJgAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0VuY29kZVVuaWNvZGVFc2NhcGVYAQAAAC10cuAmAABYCQAAAFB5U2V0X0FkZHLhJgAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc2V0Lmh0bWwjYy5QeVNldF9BZGRYAQAAAC10cuImAABYEAAAAFB5U2VxdWVuY2VfQ2hlY2ty4yYAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3NlcXVlbmNlLmh0bWwjYy5QeVNlcXVlbmNlX0NoZWNrWAEAAAAtdHLkJgAAWA4AAABQeURpY3RfU2V0SXRlbXLlJgAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZGljdC5odG1sI2MuUHlEaWN0X1NldEl0ZW1YAQAAAC10cuYmAABYDQAAAFB5RGljdF9WYWx1ZXNy5yYAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2RpY3QuaHRtbCNjLlB5RGljdF9WYWx1ZXNYAQAAAC10cugmAABYCgAAAFB5Q2VsbF9TZXRy6SYAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NlbGwuaHRtbCNjLlB5Q2VsbF9TZXRYAQAAAC10cuomAABYDQAAAFB5U2VxSXRlcl9OZXdy6yYAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2l0ZXJhdG9yLmh0bWwjYy5QeVNlcUl0ZXJfTmV3WAEAAAAtdHLsJgAAWB0AAABQeUdJTFN0YXRlX0dldFRoaXNUaHJlYWRTdGF0ZXLtJgAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlHSUxTdGF0ZV9HZXRUaGlzVGhyZWFkU3RhdGVYAQAAAC10cu4mAABYFAAAAFB5RXZhbF9BY3F1aXJlVGhyZWFkcu8mAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbml0Lmh0bWwjYy5QeUV2YWxfQWNxdWlyZVRocmVhZFgBAAAALXRy8CYAAFgWAAAAUHlOdW1iZXJfSW5QbGFjZURpdmlkZXLxJgAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbnVtYmVyLmh0bWwjYy5QeU51bWJlcl9JblBsYWNlRGl2aWRlWAEAAAAtdHLyJgAAWA8AAABQeU51bWJlcl9EaXZpZGVy8yYAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfRGl2aWRlWAEAAAAtdHL0JgAAWBYAAABQeU9iamVjdF9HZXRBdHRyU3RyaW5ncvUmAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X0dldEF0dHJTdHJpbmdYAQAAAC10cvYmAABYCwAAAFB5RmlsZV9OYW1lcvcmAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9maWxlLmh0bWwjYy5QeUZpbGVfTmFtZVgBAAAALXRy+CYAAFgMAAAAUHlEaWN0X0l0ZW1zcvkmAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kaWN0Lmh0bWwjYy5QeURpY3RfSXRlbXNYAQAAAC10cvomAABYEgAAAFB5RXJyX0NoZWNrU2lnbmFsc3L7JgAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlFcnJfQ2hlY2tTaWduYWxzWAEAAAAtdHL8JgAAWBcAAABQeUNhcHN1bGVfU2V0RGVzdHJ1Y3RvcnL9JgAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY2Fwc3VsZS5odG1sI2MuUHlDYXBzdWxlX1NldERlc3RydWN0b3JYAQAAAC10cv4mAABYFwAAAFB5TWFwcGluZ19EZWxJdGVtU3RyaW5ncv8mAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tYXBwaW5nLmh0bWwjYy5QeU1hcHBpbmdfRGVsSXRlbVN0cmluZ1gBAAAALXRyACcAAFgRAAAAUHlMb25nX0Zyb21Eb3VibGVyAScAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2xvbmcuaHRtbCNjLlB5TG9uZ19Gcm9tRG91YmxlWAEAAAAtdHICJwAAWB4AAABQeUJ1ZmZlcl9GaWxsQ29udGlndW91c1N0cmlkZXNyAycAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2J1ZmZlci5odG1sI2MuUHlCdWZmZXJfRmlsbENvbnRpZ3VvdXNTdHJpZGVzWAEAAAAtdHIEJwAAWBoAAABQeURhdGVUaW1lX1RJTUVfR0VUX1NFQ09ORHIFJwAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZGF0ZXRpbWUuaHRtbCNjLlB5RGF0ZVRpbWVfVElNRV9HRVRfU0VDT05EWAEAAAAtdHIGJwAAWBEAAABQeVR5cGVfQ2hlY2tFeGFjdHIHJwAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZS5odG1sI2MuUHlUeXBlX0NoZWNrRXhhY3RYAQAAAC10cggnAABYEgAAAFB5T1NfYXNjaWlfZm9ybWF0ZHIJJwAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29udmVyc2lvbi5odG1sI2MuUHlPU19hc2NpaV9mb3JtYXRkWAEAAAAtdHIKJwAAWBIAAABQeV9VTklDT0RFX1RPRElHSVRyCycAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5X1VOSUNPREVfVE9ESUdJVFgBAAAALXRyDCcAAFgPAAAAUHlTdHJpbmdfRm9ybWF0cg0nAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zdHJpbmcuaHRtbCNjLlB5U3RyaW5nX0Zvcm1hdFgBAAAALXRyDicAAFgKAAAAUHlDZWxsX05ld3IPJwAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY2VsbC5odG1sI2MuUHlDZWxsX05ld1gBAAAALXRyECcAAFgbAAAAUHlNYXJzaGFsX1JlYWRTaG9ydEZyb21GaWxlchEnAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tYXJzaGFsLmh0bWwjYy5QeU1hcnNoYWxfUmVhZFNob3J0RnJvbUZpbGVYAQAAAC10chInAABYEgAAAFB5RXZhbF9FdmFsRnJhbWVFeHITJwAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdmVyeWhpZ2guaHRtbCNjLlB5RXZhbF9FdmFsRnJhbWVFeFgBAAAALXRyFCcAAFgSAAAAUHlCeXRlQXJyYXlfUmVzaXplchUnAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9ieXRlYXJyYXkuaHRtbCNjLlB5Qnl0ZUFycmF5X1Jlc2l6ZVgBAAAALXRyFicAAFgUAAAAUHlVbmljb2RlX1NwbGl0bGluZXNyFycAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9TcGxpdGxpbmVzWAEAAAAtdHIYJwAAWA0AAABQeU9iamVjdF9Jbml0chknAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9hbGxvY2F0aW9uLmh0bWwjYy5QeU9iamVjdF9Jbml0WAEAAAAtdHIaJwAAWBEAAABQeUFyZ19VbnBhY2tUdXBsZXIbJwAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYXJnLmh0bWwjYy5QeUFyZ19VbnBhY2tUdXBsZVgBAAAALXRyHCcAAFgQAAAAUHlVbmljb2RlX0VuY29kZXIdJwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0VuY29kZVgBAAAALXRyHicAAFgPAAAAUHlfVmFCdWlsZFZhbHVlch8nAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9hcmcuaHRtbCNjLlB5X1ZhQnVpbGRWYWx1ZVgBAAAALXRyICcAAFgRAAAAUHlPYmplY3RfR0NfVHJhY2tyIScAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2djc3VwcG9ydC5odG1sI2MuUHlPYmplY3RfR0NfVHJhY2tYAQAAAC10ciInAABYEAAAAFB5X0dldFB5dGhvbkhvbWVyIycAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNjLlB5X0dldFB5dGhvbkhvbWVYAQAAAC10ciQnAABYCAAAAFB5X1ZJU0lUciUnAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9nY3N1cHBvcnQuaHRtbCNjLlB5X1ZJU0lUWAEAAAAtdHImJwAAWBIAAABQeVVuaWNvZGVfQ29udGFpbnNyJycAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9Db250YWluc1gBAAAALXRyKCcAAFgTAAAAUHlVbmljb2RlX1RyYW5zbGF0ZXIpJwAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX1RyYW5zbGF0ZVgBAAAALXRyKicAAFgRAAAAUHlMaXN0X0NoZWNrRXhhY3RyKycAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2xpc3QuaHRtbCNjLlB5TGlzdF9DaGVja0V4YWN0WAEAAAAtdHIsJwAAWAwAAABQeVR1cGxlX1NpemVyLScAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R1cGxlLmh0bWwjYy5QeVR1cGxlX1NpemVYAQAAAC10ci4nAABYFAAAAFB5VW5pY29kZV9EZWNvZGVVVEY4ci8nAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRGVjb2RlVVRGOFgBAAAALXRyMCcAAFgVAAAAUHlVbmljb2RlX0VuY29kZVVURjMycjEnAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRW5jb2RlVVRGMzJYAQAAAC10cjInAABYEgAAAFB5RGVzY3JfTmV3V3JhcHBlcnIzJwAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZGVzY3JpcHRvci5odG1sI2MuUHlEZXNjcl9OZXdXcmFwcGVyWAEAAAAtdHI0JwAAWAoAAABQeUNvZGVfTmV3cjUnAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jb2RlLmh0bWwjYy5QeUNvZGVfTmV3WAEAAAAtdHI2JwAAWAwAAABQeUNlbGxfQ2hlY2tyNycAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NlbGwuaHRtbCNjLlB5Q2VsbF9DaGVja1gBAAAALXRyOCcAAFgSAAAAUHlTdHJpbmdfQVNfU1RSSU5HcjknAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zdHJpbmcuaHRtbCNjLlB5U3RyaW5nX0FTX1NUUklOR1gBAAAALXRyOicAAFgmAAAAUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVyOycAAChqaQEAAGpqAQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lWAEAAAAtdHI8JwAAWA0AAABQeV9Jbml0TW9kdWxlcj0nAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9hbGxvY2F0aW9uLmh0bWwjYy5QeV9Jbml0TW9kdWxlWAEAAAAtdHI+JwAAWAoAAABQeVNldF9TaXplcj8nAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zZXQuaHRtbCNjLlB5U2V0X1NpemVYAQAAAC10ckAnAABYEgAAAFB5TG9uZ19Gcm9tU3NpemVfdHJBJwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbG9uZy5odG1sI2MuUHlMb25nX0Zyb21Tc2l6ZV90WAEAAAAtdHJCJwAAWBYAAABQeUZyb3plblNldF9DaGVja0V4YWN0ckMnAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zZXQuaHRtbCNjLlB5RnJvemVuU2V0X0NoZWNrRXhhY3RYAQAAAC10ckQnAABYGAAAAFB5U2VxdWVuY2VfRmFzdF9HRVRfSVRFTXJFJwAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc2VxdWVuY2UuaHRtbCNjLlB5U2VxdWVuY2VfRmFzdF9HRVRfSVRFTVgBAAAALXRyRicAAFgUAAAAUHlDYXBzdWxlX1NldFBvaW50ZXJyRycAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NhcHN1bGUuaHRtbCNjLlB5Q2Fwc3VsZV9TZXRQb2ludGVyWAEAAAAtdHJIJwAAWBYAAABQeUNvbXBsZXhfRnJvbUNDb21wbGV4ckknAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jb21wbGV4Lmh0bWwjYy5QeUNvbXBsZXhfRnJvbUNDb21wbGV4WAEAAAAtdHJKJwAAWBMAAABQeVNlcXVlbmNlX0NvbnRhaW5zcksnAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zZXF1ZW5jZS5odG1sI2MuUHlTZXF1ZW5jZV9Db250YWluc1gBAAAALXRyTCcAAFgQAAAAUHlPYmplY3RfU2V0SXRlbXJNJwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvb2JqZWN0Lmh0bWwjYy5QeU9iamVjdF9TZXRJdGVtWAEAAAAtdHJOJwAAWBkAAABQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nck8nAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zdHJpbmcuaHRtbCNjLlB5U3RyaW5nX0ludGVybkZyb21TdHJpbmdYAQAAAC10clAnAABYFAAAAFB5T2JqZWN0X0NoZWNrQnVmZmVyclEnAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9idWZmZXIuaHRtbCNjLlB5T2JqZWN0X0NoZWNrQnVmZmVyWAEAAAAtdHJSJwAAWAsAAABQeURpY3RfS2V5c3JTJwAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZGljdC5odG1sI2MuUHlEaWN0X0tleXNYAQAAAC10clQnAABYEQAAAFB5VW5pY29kZV9BU19EQVRBclUnAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfQVNfREFUQVgBAAAALXRyVicAAFgeAAAAUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tU3RyaW5nclcnAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tYXJzaGFsLmh0bWwjYy5QeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmdYAQAAAC10clgnAABYGgAAAFB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50clknAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tb2R1bGUuaHRtbCNjLlB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50WAEAAAAtdHJaJwAAWAsAAABQeV9GaW5hbGl6ZXJbJwAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlfRmluYWxpemVYAQAAAC10clwnAABYCwAAAFB5RXJyX1ByaW50cl0nAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeUVycl9QcmludFgBAAAALXRyXicAAFgTAAAAUHlXZWFrcmVmX0dldE9iamVjdHJfJwAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvd2Vha3JlZi5odG1sI2MuUHlXZWFrcmVmX0dldE9iamVjdFgBAAAALXRyYCcAAFgaAAAAUHlVbmljb2RlX1RyYW5zbGF0ZUNoYXJtYXByYScAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9UcmFuc2xhdGVDaGFybWFwWAEAAAAtdHJiJwAAWBcAAABQeVVuaWNvZGVfQXNVVEYzMlN0cmluZ3JjJwAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0FzVVRGMzJTdHJpbmdYAQAAAC10cmQnAABYEgAAAF9QeU9iamVjdF9HQ19UUkFDS3JlJwAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZ2NzdXBwb3J0Lmh0bWwjYy5fUHlPYmplY3RfR0NfVFJBQ0tYAQAAAC10cmYnAABYEgAAAFB5X1VOSUNPREVfVE9MT1dFUnJnJwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlfVU5JQ09ERV9UT0xPV0VSWAEAAAAtdHJoJwAAWA4AAABQeVN0cmluZ19DaGVja3JpJwAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3RyaW5nLmh0bWwjYy5QeVN0cmluZ19DaGVja1gBAAAALXRyaicAAFgSAAAAUHlFcnJfU2V0SW50ZXJydXB0cmsnAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeUVycl9TZXRJbnRlcnJ1cHRYAQAAAC10cmwnAABYFgAAAFB5VW5pY29kZV9Bc1VURjhTdHJpbmdybScAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9Bc1VURjhTdHJpbmdYAQAAAC10cm4nAABYEQAAAFB5U3lzX1dyaXRlU3RkZXJycm8nAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zeXMuaHRtbCNjLlB5U3lzX1dyaXRlU3RkZXJyWAEAAAAtdHJwJwAAWBwAAABQeUJ1ZmZlcl9Gcm9tUmVhZFdyaXRlTWVtb3J5cnEnAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9idWZmZXIuaHRtbCNjLlB5QnVmZmVyX0Zyb21SZWFkV3JpdGVNZW1vcnlYAQAAAC10cnInAABYEAAAAFB5VW5pY29kZV9EZWNvZGVycycAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9EZWNvZGVYAQAAAC10cnQnAABYCwAAAFB5T1NfZ2V0c2lncnUnAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zeXMuaHRtbCNjLlB5T1NfZ2V0c2lnWAEAAAAtdHJ2JwAAWA8AAABQeU9iamVjdF9MZW5ndGhydycAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfTGVuZ3RoWAEAAAAtdHJ4JwAAWBIAAABQeV9VTklDT0RFX1RPVVBQRVJyeScAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5X1VOSUNPREVfVE9VUFBFUlgBAAAALXRyeicAAFgPAAAAUHlFdmFsX0V2YWxDb2RlcnsnAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlFdmFsX0V2YWxDb2RlWAEAAAAtdHJ8JwAAWBEAAABQeUxvbmdfQ2hlY2tFeGFjdHJ9JwAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbG9uZy5odG1sI2MuUHlMb25nX0NoZWNrRXhhY3RYAQAAAC10cn4nAABYDwAAAFB5U2VxSXRlcl9DaGVja3J/JwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaXRlcmF0b3IuaHRtbCNjLlB5U2VxSXRlcl9DaGVja1gBAAAALXRygCcAAFgYAAAAUHlTdHJpbmdfQXNEZWNvZGVkT2JqZWN0coEnAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zdHJpbmcuaHRtbCNjLlB5U3RyaW5nX0FzRGVjb2RlZE9iamVjdFgBAAAALXRygicAAFgcAAAAUHlVbmljb2RlX0RlY29kZVVURjhTdGF0ZWZ1bHKDJwAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0RlY29kZVVURjhTdGF0ZWZ1bFgBAAAALXRyhCcAAFgXAAAAUHlVbmljb2RlX0dFVF9EQVRBX1NJWkVyhScAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9HRVRfREFUQV9TSVpFWAEAAAAtdHKGJwAAWBkAAABQeVVuaWNvZGVfQXNDaGFybWFwU3RyaW5ncocnAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfQXNDaGFybWFwU3RyaW5nWAEAAAAtdHKIJwAAWA8AAABQeUxpc3RfU2V0U2xpY2VyiScAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2xpc3QuaHRtbCNjLlB5TGlzdF9TZXRTbGljZVgBAAAALXRyiicAAFgTAAAAUHlPYmplY3RfQ2FsbE9iamVjdHKLJwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvb2JqZWN0Lmh0bWwjYy5QeU9iamVjdF9DYWxsT2JqZWN0WAEAAAAtdHKMJwAAWBEAAABQeUZpbGVfU2V0QnVmU2l6ZXKNJwAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZmlsZS5odG1sI2MuUHlGaWxlX1NldEJ1ZlNpemVYAQAAAC10co4nAABYGgAAAFB5UnVuX0ludGVyYWN0aXZlTG9vcEZsYWdzco8nAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlSdW5fSW50ZXJhY3RpdmVMb29wRmxhZ3NYAQAAAC10cpAnAABYEgAAAFB5X1VOSUNPREVfSVNBTE5VTXKRJwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlfVU5JQ09ERV9JU0FMTlVNWAEAAAAtdHKSJwAAWBkAAABQeU9iamVjdF9Bc0ZpbGVEZXNjcmlwdG9ycpMnAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X0FzRmlsZURlc2NyaXB0b3JYAQAAAC10cpQnAABYDgAAAFB5RnVuY3Rpb25fTmV3cpUnAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9mdW5jdGlvbi5odG1sI2MuUHlGdW5jdGlvbl9OZXdYAQAAAC10cpYnAABYEQAAAFB5U3RyaW5nX0dFVF9TSVpFcpcnAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zdHJpbmcuaHRtbCNjLlB5U3RyaW5nX0dFVF9TSVpFWAEAAAAtdHKYJwAAWBQAAABQeUV2YWxfUmVsZWFzZVRocmVhZHKZJwAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlFdmFsX1JlbGVhc2VUaHJlYWRYAQAAAC10cponAABYHgAAAFB5VW5pY29kZURlY29kZUVycm9yX0dldE9iamVjdHKbJwAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0T2JqZWN0WAEAAAAtdHKcJwAAWA8AAABQeUxpc3RfR0VUX1NJWkVynScAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2xpc3QuaHRtbCNjLlB5TGlzdF9HRVRfU0laRVgBAAAALXRynicAAFgNAAAAUHlPU19zdHJuaWNtcHKfJwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29udmVyc2lvbi5odG1sI2MuUHlPU19zdHJuaWNtcFgBAAAALXRyoCcAAFgNAAAAUHlDbGFzc19DaGVja3KhJwAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY2xhc3MuaHRtbCNjLlB5Q2xhc3NfQ2hlY2tYAQAAAC10cqInAABYFwAAAFB5UnVuX1NpbXBsZVN0cmluZ0ZsYWdzcqMnAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlSdW5fU2ltcGxlU3RyaW5nRmxhZ3NYAQAAAC10cqQnAABYDQAAAFB5X0dldFZlcnNpb25ypScAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNjLlB5X0dldFZlcnNpb25YAQAAAC10cqYnAABYEwAAAFB5RXZhbF9HZXRDYWxsU3RhdHNypycAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNjLlB5RXZhbF9HZXRDYWxsU3RhdHNYAQAAAC10cqgnAABYGAAAAF9QeUltcG9ydF9GaXh1cEV4dGVuc2lvbnKpJwAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW1wb3J0Lmh0bWwjYy5fUHlJbXBvcnRfRml4dXBFeHRlbnNpb25YAQAAAC10cqonAABYEQAAAFB5Qnl0ZUFycmF5X0NoZWNrcqsnAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9ieXRlYXJyYXkuaHRtbCNjLlB5Qnl0ZUFycmF5X0NoZWNrWAEAAAAtdHKsJwAAWBUAAABQeU1ldGhvZF9HRVRfRlVOQ1RJT05yrScAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21ldGhvZC5odG1sI2MuUHlNZXRob2RfR0VUX0ZVTkNUSU9OWAEAAAAtdHKuJwAAWA0AAABQeUxvbmdfQXNMb25ncq8nAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9sb25nLmh0bWwjYy5QeUxvbmdfQXNMb25nWAEAAAAtdHKwJwAAWBsAAABQeUZpbGVfU2V0RW5jb2RpbmdBbmRFcnJvcnNysScAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ZpbGUuaHRtbCNjLlB5RmlsZV9TZXRFbmNvZGluZ0FuZEVycm9yc1gBAAAALXRysicAAFgSAAAAUHlNb2R1bGVfQWRkT2JqZWN0crMnAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tb2R1bGUuaHRtbCNjLlB5TW9kdWxlX0FkZE9iamVjdFgBAAAALXRytCcAAFgSAAAAUHlSdW5fQW55RmlsZUZsYWdzcrUnAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlSdW5fQW55RmlsZUZsYWdzWAEAAAAtdHK2JwAAWBEAAABQeVNlcXVlbmNlX0NvbmNhdHK3JwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc2VxdWVuY2UuaHRtbCNjLlB5U2VxdWVuY2VfQ29uY2F0WAEAAAAtdHK4JwAAWBQAAABQeVVuaWNvZGVfRW5jb2RlTUJDU3K5JwAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0VuY29kZU1CQ1NYAQAAAC10cronAABYDAAAAFB5TWVtX1Jlc2l6ZXK7JwAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbWVtb3J5Lmh0bWwjYy5QeU1lbV9SZXNpemVYAQAAAC10crwnAABYFQAAAFB5U3RyaW5nX0NvbmNhdEFuZERlbHK9JwAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3RyaW5nLmh0bWwjYy5QeVN0cmluZ19Db25jYXRBbmREZWxYAQAAAC10cr4nAABYCgAAAF9QeV9jX3Byb2RyvycAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvbXBsZXguaHRtbCNjLl9QeV9jX3Byb2RYAQAAAC10csAnAABYFAAAAFB5X1VOSUNPREVfVE9ERUNJTUFMcsEnAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeV9VTklDT0RFX1RPREVDSU1BTFgBAAAALXRywicAAFgVAAAAUHlVbmljb2RlX0VuY29kZVVURjE2csMnAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRW5jb2RlVVRGMTZYAQAAAC10csQnAABYGQAAAFB5RXZhbF9UaHJlYWRzSW5pdGlhbGl6ZWRyxScAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNjLlB5RXZhbF9UaHJlYWRzSW5pdGlhbGl6ZWRYAQAAAC10csYnAABYFAAAAFB5VGhyZWFkU3RhdGVfRGVsZXRlcscnAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbml0Lmh0bWwjYy5QeVRocmVhZFN0YXRlX0RlbGV0ZVgBAAAALXRyyCcAAFgJAAAAUHlfQXRFeGl0csknAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zeXMuaHRtbCNjLlB5X0F0RXhpdFgBAAAALXRyyicAAFgRAAAAUHlOdW1iZXJfQWJzb2x1dGVyyycAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfQWJzb2x1dGVYAQAAAC10cswnAABYEAAAAFB5Qnl0ZUFycmF5X1NpemVyzScAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2J5dGVhcnJheS5odG1sI2MuUHlCeXRlQXJyYXlfU2l6ZVgBAAAALXRyzicAAFgMAAAAUHlFcnJfRm9ybWF0cs8nAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeUVycl9Gb3JtYXRYAQAAAC10ctAnAABYHQAAAFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplctEnAAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9ieXRlYXJyYXkuaHRtbCNjLlB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplWAEAAAAtdHLSJwAAWBIAAABQeUVycl9XYXJuRXhwbGljaXRy0ycAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5RXJyX1dhcm5FeHBsaWNpdFgBAAAALXRy1CcAAFgZAAAAUHlOdW1iZXJfSW5QbGFjZVJlbWFpbmRlcnLVJwAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbnVtYmVyLmh0bWwjYy5QeU51bWJlcl9JblBsYWNlUmVtYWluZGVyWAEAAAAtdHLWJwAAWBgAAABQeVNlcXVlbmNlX0luUGxhY2VDb25jYXRy1ycAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3NlcXVlbmNlLmh0bWwjYy5QeVNlcXVlbmNlX0luUGxhY2VDb25jYXRYAQAAAC10ctgnAABYEAAAAFB5Q29kZWNfUmVnaXN0ZXJy2ScAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvZGVjLmh0bWwjYy5QeUNvZGVjX1JlZ2lzdGVyWAEAAAAtdHLaJwAAWBcAAABQeU1vZHVsZV9BZGRTdHJpbmdNYWNyb3LbJwAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbW9kdWxlLmh0bWwjYy5QeU1vZHVsZV9BZGRTdHJpbmdNYWNyb1gBAAAALXRy3CcAAFgcAAAAUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tRmlsZXLdJwAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbWFyc2hhbC5odG1sI2MuUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tRmlsZVgBAAAALXRy3icAAFgOAAAAUHlJbnRfRnJvbUxvbmdy3ycAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ludC5odG1sI2MuUHlJbnRfRnJvbUxvbmdYAQAAAC10cuAnAABYGgAAAFB5TWVtb3J5Vmlld19HZXRDb250aWd1b3VzcuEnAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9idWZmZXIuaHRtbCNjLlB5TWVtb3J5Vmlld19HZXRDb250aWd1b3VzWAEAAAAtdHLiJwAAWBAAAABQeU9iamVjdF9TZXRBdHRycuMnAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X1NldEF0dHJYAQAAAC10cuQnAABYDwAAAFB5VW5pY29kZV9DaGVja3LlJwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0NoZWNrWAEAAAAtdHLmJwAAWBIAAABQeU9iamVjdF9HQ19OZXdWYXJy5ycAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2djc3VwcG9ydC5odG1sI2MuUHlPYmplY3RfR0NfTmV3VmFyWAEAAAAtdHLoJwAAWBUAAABQeV9MZWF2ZVJlY3Vyc2l2ZUNhbGxy6ScAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5X0xlYXZlUmVjdXJzaXZlQ2FsbFgBAAAALXRy6icAAFgTAAAAUHlCdWZmZXJfRnJvbU9iamVjdHLrJwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYnVmZmVyLmh0bWwjYy5QeUJ1ZmZlcl9Gcm9tT2JqZWN0WAEAAAAtdHLsJwAAWAsAAABQeUludF9DaGVja3LtJwAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW50Lmh0bWwjYy5QeUludF9DaGVja1gBAAAALXRy7icAAFgSAAAAUHlPYmplY3RfVHlwZUNoZWNrcu8nAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X1R5cGVDaGVja1gBAAAALXRy8CcAAFgXAAAAUHlVbmljb2RlX0RlY29kZUNoYXJtYXBy8ScAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9EZWNvZGVDaGFybWFwWAEAAAAtdHLyJwAAWA8AAABQeVJ1bl9BbnlGaWxlRXhy8ycAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3ZlcnloaWdoLmh0bWwjYy5QeVJ1bl9BbnlGaWxlRXhYAQAAAC10cvQnAABYEAAAAFB5U2VxdWVuY2VfVHVwbGVy9ScAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3NlcXVlbmNlLmh0bWwjYy5QeVNlcXVlbmNlX1R1cGxlWAEAAAAtdHL2JwAAWAwAAABQeUJvb2xfQ2hlY2ty9ycAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2Jvb2wuaHRtbCNjLlB5Qm9vbF9DaGVja1gBAAAALXRy+CcAAFgKAAAAUHlfWElOQ1JFRnL5JwAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvcmVmY291bnRpbmcuaHRtbCNjLlB5X1hJTkNSRUZYAQAAAC10cvonAABYEgAAAFB5TnVtYmVyX1JlbWFpbmRlcnL7JwAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbnVtYmVyLmh0bWwjYy5QeU51bWJlcl9SZW1haW5kZXJYAQAAAC10cvwnAABYEgAAAFB5X1VOSUNPREVfSVNESUdJVHL9JwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlfVU5JQ09ERV9JU0RJR0lUWAEAAAAtdHL+JwAAWBYAAABQeU51bWJlcl9JblBsYWNlTHNoaWZ0cv8nAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9udW1iZXIuaHRtbCNjLlB5TnVtYmVyX0luUGxhY2VMc2hpZnRYAQAAAC10cgAoAABYDwAAAFB5TnVtYmVyX0xzaGlmdHIBKAAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbnVtYmVyLmh0bWwjYy5QeU51bWJlcl9Mc2hpZnRYAQAAAC10cgIoAABYHQAAAFB5VW5pY29kZUVuY29kZUVycm9yX0dldFN0YXJ0cgMoAAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRTdGFydFgBAAAALXRyBCgAAFgPAAAAUHlJbnRfQXNTc2l6ZV90cgUoAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbnQuaHRtbCNjLlB5SW50X0FzU3NpemVfdFgBAAAALXRyBigAAFgPAAAAUHlEaWN0X0NvbnRhaW5zcgcoAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kaWN0Lmh0bWwjYy5QeURpY3RfQ29udGFpbnNYAQAAAC10cggoAABYDwAAAFB5T1NfQ2hlY2tTdGFja3IJKAAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3lzLmh0bWwjYy5QeU9TX0NoZWNrU3RhY2tYAQAAAC10cgooAABYEAAAAFB5X0dldEV4ZWNQcmVmaXhyCygAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNjLlB5X0dldEV4ZWNQcmVmaXhYAQAAAC10cgwoAABYDQAAAFB5RmxvYXRfQ2hlY2tyDSgAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2Zsb2F0Lmh0bWwjYy5QeUZsb2F0X0NoZWNrWAEAAAAtdHIOKAAAWBEAAABQeV9FbmRJbnRlcnByZXRlcnIPKAAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlfRW5kSW50ZXJwcmV0ZXJYAQAAAC10chAoAABYFgAAAFB5TnVtYmVyX0luUGxhY2VSc2hpZnRyESgAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfSW5QbGFjZVJzaGlmdFgBAAAALXRyEigAAFgeAAAAUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfQ3JlYXRlchMoAAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9DcmVhdGVYAQAAAC10chQoAABYDwAAAFB5TnVtYmVyX1RvQmFzZXIVKAAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbnVtYmVyLmh0bWwjYy5QeU51bWJlcl9Ub0Jhc2VYAQAAAC10chYoAABYDgAAAFB5U2V0X0dFVF9TSVpFchcoAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zZXQuaHRtbCNjLlB5U2V0X0dFVF9TSVpFWAEAAAAtdHIYKAAAWBQAAABQeUNhcHN1bGVfR2V0Q29udGV4dHIZKAAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY2Fwc3VsZS5odG1sI2MuUHlDYXBzdWxlX0dldENvbnRleHRYAQAAAC10chooAABYFgAAAFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXNyGygAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5RXJyX0V4Y2VwdGlvbk1hdGNoZXNYAQAAAC10chwoAABYDwAAAFB5TWFwcGluZ19JdGVtc3IdKAAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbWFwcGluZy5odG1sI2MuUHlNYXBwaW5nX0l0ZW1zWAEAAAAtdHIeKAAAWBQAAABQeVVuaWNvZGVfRnJvbVN0cmluZ3IfKAAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0Zyb21TdHJpbmdYAQAAAC10ciAoAABYCgAAAF9QeV9jX2RpZmZyISgAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvbXBsZXguaHRtbCNjLl9QeV9jX2RpZmZYAQAAAC10ciIoAABYEAAAAFB5R2VuX0NoZWNrRXhhY3RyIygAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2dlbi5odG1sI2MuUHlHZW5fQ2hlY2tFeGFjdFgBAAAALXRyJCgAAFgNAAAAUHlfSW5pdGlhbGl6ZXIlKAAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlfSW5pdGlhbGl6ZVgBAAAALXRyJigAAFgJAAAAX1B5X2NfcG93cicoAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jb21wbGV4Lmh0bWwjYy5fUHlfY19wb3dYAQAAAC10cigoAABYFwAAAFB5TWVtb3J5Vmlld19Gcm9tQnVmZmVycikoAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9idWZmZXIuaHRtbCNjLlB5TWVtb3J5Vmlld19Gcm9tQnVmZmVyWAEAAAAtdHIqKAAAWBcAAABQeUltcG9ydF9JbXBvcnRNb2R1bGVFeHIrKAAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW1wb3J0Lmh0bWwjYy5QeUltcG9ydF9JbXBvcnRNb2R1bGVFeFgBAAAALXRyLCgAAFgQAAAAUHlNYXBwaW5nX1ZhbHVlc3ItKAAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbWFwcGluZy5odG1sI2MuUHlNYXBwaW5nX1ZhbHVlc1gBAAAALXRyLigAAFgkAAAAUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0ci8oAAAoamkBAABqagEAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3RYAQAAAC10cjAoAABYHQAAAFB5VW5pY29kZURlY29kZUVycm9yX0dldFN0YXJ0cjEoAAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRTdGFydFgBAAAALXRyMigAAFgOAAAAUHlNZXRob2RfQ2hlY2tyMygAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21ldGhvZC5odG1sI2MuUHlNZXRob2RfQ2hlY2tYAQAAAC10cjQoAABYDgAAAFB5TGlzdF9HZXRJdGVtcjUoAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9saXN0Lmh0bWwjYy5QeUxpc3RfR2V0SXRlbVgBAAAALXRyNigAAFgPAAAAUHlDT2JqZWN0X0NoZWNrcjcoAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jb2JqZWN0Lmh0bWwjYy5QeUNPYmplY3RfQ2hlY2tYAQAAAC10cjgoAABYEgAAAFB5RmlsZV9JbmNVc2VDb3VudHI5KAAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZmlsZS5odG1sI2MuUHlGaWxlX0luY1VzZUNvdW50WAEAAAAtdHI6KAAAWA4AAABQeU1hcHBpbmdfU2l6ZXI7KAAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbWFwcGluZy5odG1sI2MuUHlNYXBwaW5nX1NpemVYAQAAAC10cjwoAABYEAAAAFB5Q2FsbGFibGVfQ2hlY2tyPSgAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL29iamVjdC5odG1sI2MuUHlDYWxsYWJsZV9DaGVja1gBAAAALXRyPigAAFgPAAAAUHlVbmljb2RlX1NwbGl0cj8oAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfU3BsaXRYAQAAAC10ckAoAABYDQAAAFB5T2JqZWN0X0hhc2hyQSgAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfSGFzaFgBAAAALXRyQigAAFgQAAAAUHlEYXRlVGltZV9DaGVja3JDKAAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZGF0ZXRpbWUuaHRtbCNjLlB5RGF0ZVRpbWVfQ2hlY2tYAQAAAC10ckQoAABYEQAAAFB5TG9uZ19Gcm9tU3RyaW5nckUoAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9sb25nLmh0bWwjYy5QeUxvbmdfRnJvbVN0cmluZ1gBAAAALXRyRigAAFgQAAAAUHlPYmplY3RfRGVsSXRlbXJHKAAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvb2JqZWN0Lmh0bWwjYy5QeU9iamVjdF9EZWxJdGVtWAEAAAAtdHJIKAAAWAwAAABQeURhdGVfQ2hlY2tySSgAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2RhdGV0aW1lLmh0bWwjYy5QeURhdGVfQ2hlY2tYAQAAAC10ckooAABYGwAAAFB5VW5pY29kZUVuY29kZUVycm9yX0NyZWF0ZXJLKAAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlVbmljb2RlRW5jb2RlRXJyb3JfQ3JlYXRlWAEAAAAtdHJMKAAAWBsAAABQeU9iamVjdF9IYXNoTm90SW1wbGVtZW50ZWRyTSgAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfSGFzaE5vdEltcGxlbWVudGVkWAEAAAAtdHJOKAAAWAsAAABQeVNldF9DaGVja3JPKAAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc2V0Lmh0bWwjYy5QeVNldF9DaGVja1gBAAAALXRyUCgAAFgaAAAAUHlEYXRlVGltZV9Gcm9tRGF0ZUFuZFRpbWVyUSgAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2RhdGV0aW1lLmh0bWwjYy5QeURhdGVUaW1lX0Zyb21EYXRlQW5kVGltZVgBAAAALXRyUigAAFgQAAAAX1B5T2JqZWN0X05ld1ZhcnJTKAAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYWxsb2NhdGlvbi5odG1sI2MuX1B5T2JqZWN0X05ld1ZhclgBAAAALXRyVCgAAFgNAAAAUHlBcmdfVmFQYXJzZXJVKAAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYXJnLmh0bWwjYy5QeUFyZ19WYVBhcnNlWAEAAAAtdHJWKAAAWA0AAABQeUxpc3RfSW5zZXJ0clcoAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9saXN0Lmh0bWwjYy5QeUxpc3RfSW5zZXJ0WAEAAAAtdHJYKAAAWBQAAABQeV9VTklDT0RFX0lTREVDSU1BTHJZKAAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlfVU5JQ09ERV9JU0RFQ0lNQUxYAQAAAC10clooAABYFgAAAFB5VW5pY29kZV9Gcm9tV2lkZUNoYXJyWygAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9Gcm9tV2lkZUNoYXJYAQAAAC10clwoAABYEQAAAFB5T1NfYXNjaWlfc3RydG9kcl0oAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jb252ZXJzaW9uLmh0bWwjYy5QeU9TX2FzY2lpX3N0cnRvZFgBAAAALXRyXigAAFgOAAAAUHlGbG9hdF9HZXRNaW5yXygAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2Zsb2F0Lmh0bWwjYy5QeUZsb2F0X0dldE1pblgBAAAALXRyYCgAAFgbAAAAUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplcmEoAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemVYAQAAAC10cmIoAABYHAAAAFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3NyYygAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJnc1gBAAAALXRyZCgAAFgRAAAAUHlCdWZmZXJfRmlsbEluZm9yZSgAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2J1ZmZlci5odG1sI2MuUHlCdWZmZXJfRmlsbEluZm9YAQAAAC10cmYoAABYDAAAAFB5VGltZV9DaGVja3JnKAAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZGF0ZXRpbWUuaHRtbCNjLlB5VGltZV9DaGVja1gBAAAALXRyaCgAAFgUAAAAUHlTbGljZV9HZXRJbmRpY2VzRXhyaSgAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3NsaWNlLmh0bWwjYy5QeVNsaWNlX0dldEluZGljZXNFeFgBAAAALXRyaigAAFgWAAAAUHlPYmplY3RfQXNXcml0ZUJ1ZmZlcnJrKAAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvb2JqYnVmZmVyLmh0bWwjYy5QeU9iamVjdF9Bc1dyaXRlQnVmZmVyWAEAAAAtdHJsKAAAWBAAAABQeVNlcXVlbmNlX0NvdW50cm0oAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zZXF1ZW5jZS5odG1sI2MuUHlTZXF1ZW5jZV9Db3VudFgBAAAALXRybigAAFgUAAAAUHlVbmljb2RlX0NoZWNrRXhhY3RybygAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9DaGVja0V4YWN0WAEAAAAtdHJwKAAAWA8AAABQeUV2YWxfR2V0RnJhbWVycSgAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3JlZmxlY3Rpb24uaHRtbCNjLlB5RXZhbF9HZXRGcmFtZVgBAAAALXRycigAAFgPAAAAUHlDb2RlY19EZWNvZGVycnMoAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jb2RlYy5odG1sI2MuUHlDb2RlY19EZWNvZGVyWAEAAAAtdHJ0KAAAWA8AAABQeU9iamVjdF9HQ19EZWxydSgAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2djc3VwcG9ydC5odG1sI2MuUHlPYmplY3RfR0NfRGVsWAEAAAAtdHJ2KAAAWAgAAABQeV9DTEVBUnJ3KAAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvcmVmY291bnRpbmcuaHRtbCNjLlB5X0NMRUFSWAEAAAAtdHJ4KAAAWBQAAABQeUZ1bmN0aW9uX0dldE1vZHVsZXJ5KAAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZnVuY3Rpb24uaHRtbCNjLlB5RnVuY3Rpb25fR2V0TW9kdWxlWAEAAAAtdHJ6KAAAWA4AAABfUHlJbXBvcnRfRmluaXJ7KAAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW1wb3J0Lmh0bWwjYy5fUHlJbXBvcnRfRmluaVgBAAAALXRyfCgAAFgLAAAAUHlOdW1iZXJfT3JyfSgAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfT3JYAQAAAC10cn4oAABYHgAAAFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldEVuZHJ/KAAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0RW5kWAEAAAAtdHKAKAAAWAsAAABQeUVycl9DbGVhcnKBKAAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlFcnJfQ2xlYXJYAQAAAC10coIoAABYFAAAAFB5VW5pY29kZV9Gcm9tT2JqZWN0coMoAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRnJvbU9iamVjdFgBAAAALXRyhCgAAFgUAAAAUHlFdmFsX0dldFJlc3RyaWN0ZWRyhSgAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3JlZmxlY3Rpb24uaHRtbCNjLlB5RXZhbF9HZXRSZXN0cmljdGVkWAEAAAAtdHKGKAAAWA8AAABQeVVuaWNvZGVfQ291bnRyhygAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9Db3VudFgBAAAALXRyiCgAAFgWAAAAUHlTdHJpbmdfSW50ZXJuSW5QbGFjZXKJKAAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3RyaW5nLmh0bWwjYy5QeVN0cmluZ19JbnRlcm5JblBsYWNlWAEAAAAtdHKKKAAAWBUAAABQeUxvbmdfQXNVbnNpZ25lZExvbmdyiygAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2xvbmcuaHRtbCNjLlB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ1gBAAAALXRyjCgAAFgQAAAAUHlPYmplY3RfR2V0QXR0cnKNKAAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvb2JqZWN0Lmh0bWwjYy5QeU9iamVjdF9HZXRBdHRyWAEAAAAtdHKOKAAAWAwAAABQeV9HZXRQcmVmaXhyjygAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNjLlB5X0dldFByZWZpeFgBAAAALXRykCgAAFgNAAAAUHlFcnJfUmVzdG9yZXKRKAAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlFcnJfUmVzdG9yZVgBAAAALXRykigAAFgJAAAAUHlTZXRfUG9wcpMoAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zZXQuaHRtbCNjLlB5U2V0X1BvcFgBAAAALXRylCgAAFgKAAAAUHlfR2V0UGF0aHKVKAAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlfR2V0UGF0aFgBAAAALXRyligAAFgQAAAAUHlJbnN0YW5jZV9DaGVja3KXKAAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY2xhc3MuaHRtbCNjLlB5SW5zdGFuY2VfQ2hlY2tYAQAAAC10cpgoAABYFQAAAFB5T2JqZWN0X0FzQ2hhckJ1ZmZlcnKZKAAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvb2JqYnVmZmVyLmh0bWwjYy5QeU9iamVjdF9Bc0NoYXJCdWZmZXJYAQAAAC10cpooAABYIAAAAFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldFN0YXJ0cpsoAAAoamkBAABqagEAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRTdGFydFgBAAAALXRynCgAAFgXAAAAUHlJbXBvcnRfR2V0TWFnaWNOdW1iZXJynSgAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ltcG9ydC5odG1sI2MuUHlJbXBvcnRfR2V0TWFnaWNOdW1iZXJYAQAAAC10cp4oAABYEgAAAFB5X0ZkSXNJbnRlcmFjdGl2ZXKfKAAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3lzLmh0bWwjYy5QeV9GZElzSW50ZXJhY3RpdmVYAQAAAC10cqAoAABYHwAAAFB5VW5pY29kZV9Bc1VuaWNvZGVFc2NhcGVTdHJpbmdyoSgAAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9Bc1VuaWNvZGVFc2NhcGVTdHJpbmdYAQAAAC10cqIoAAB1WAkAAABweTptb2R1bGV9cqMoAAAoWAwAAABDb25maWdQYXJzZXJypCgAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjbW9kdWxlLUNvbmZpZ1BhcnNlclgBAAAALXRypSgAAFgEAAAAdGVzdHKmKAAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZXN0Lmh0bWwjbW9kdWxlLXRlc3RYAQAAAC10cqcoAABYBQAAAGVtYWlscqgoAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLmh0bWwjbW9kdWxlLWVtYWlsWAEAAAAtdHKpKAAAWAsAAABmaW5kZXJ0b29sc3KqKAAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWNvc3Rvb2xzLmh0bWwjbW9kdWxlLWZpbmRlcnRvb2xzWAEAAAAtdHKrKAAAWAgAAABhcmdwYXJzZXKsKAAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hcmdwYXJzZS5odG1sI21vZHVsZS1hcmdwYXJzZVgBAAAALXRyrSgAAFgMAAAAQ2FyYm9uLkxpc3Rzcq4oAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uTGlzdHNYAQAAAC10cq8oAABYBQAAAHNobGV4crAoAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NobGV4Lmh0bWwjbW9kdWxlLXNobGV4WAEAAAAtdHKxKAAAWAsAAAB1bmljb2RlZGF0YXKyKAAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bmljb2RlZGF0YS5odG1sI21vZHVsZS11bmljb2RlZGF0YVgBAAAALXRysygAAFgHAAAAemlwZmlsZXK0KAAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96aXBmaWxlLmh0bWwjbW9kdWxlLXppcGZpbGVYAQAAAC10crUoAABYDwAAAG11bHRpcHJvY2Vzc2luZ3K2KAAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtb2R1bGUtbXVsdGlwcm9jZXNzaW5nWAEAAAAtdHK3KAAAWAoAAABDYXJib24uUmVzcrgoAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uUmVzWAEAAAAtdHK5KAAAWAIAAABnY3K6KAAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nYy5odG1sI21vZHVsZS1nY1gBAAAALXRyuygAAFghAAAAZGlzdHV0aWxzLmNvbW1hbmQuaW5zdGFsbF9zY3JpcHRzcrwoAAAoamkBAABqagEAAFhYAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjbW9kdWxlLWRpc3R1dGlscy5jb21tYW5kLmluc3RhbGxfc2NyaXB0c1gBAAAALXRyvSgAAFgGAAAAc3lzbG9ncr4oAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5c2xvZy5odG1sI21vZHVsZS1zeXNsb2dYAQAAAC10cr8oAABYDAAAAHRlc3Quc3VwcG9ydHLAKAAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZXN0Lmh0bWwjbW9kdWxlLXRlc3Quc3VwcG9ydFgBAAAALXRywSgAAFgEAAAAc3RhdHLCKAAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0Lmh0bWwjbW9kdWxlLXN0YXRYAQAAAC10csMoAABYAgAAAGdscsQoAAAoamkBAABqagEAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dsLmh0bWwjbW9kdWxlLWdsWAEAAAAtdHLFKAAAWAkAAABwb3NpeGZpbGVyxigAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcG9zaXhmaWxlLmh0bWwjbW9kdWxlLXBvc2l4ZmlsZVgBAAAALXRyxygAAFgLAAAAQ2FyYm9uLk1lbnVyyCgAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FyYm9uLmh0bWwjbW9kdWxlLUNhcmJvbi5NZW51WAEAAAAtdHLJKAAAWAUAAABzY2hlZHLKKAAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zY2hlZC5odG1sI21vZHVsZS1zY2hlZFgBAAAALXRyyygAAFgGAAAAdXJsbGlicswoAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYi5odG1sI21vZHVsZS11cmxsaWJYAQAAAC10cs0oAABYBAAAAGNvZGVyzigAAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZS5odG1sI21vZHVsZS1jb2RlWAEAAAAtdHLPKAAAWBAAAABkaXN0dXRpbHMuZXJyb3JzctAoAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjbW9kdWxlLWRpc3R1dGlscy5lcnJvcnNYAQAAAC10ctEoAABYDgAAAENhcmJvbi5XaW5kb3dzctIoAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uV2luZG93c1gBAAAALXRy0ygAAFgWAAAAQ2FyYm9uLklCQ2FyYm9uUnVudGltZXLUKAAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYXJib24uaHRtbCNtb2R1bGUtQ2FyYm9uLklCQ2FyYm9uUnVudGltZVgBAAAALXRy1SgAAFgEAAAAemxpYnLWKAAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96bGliLmh0bWwjbW9kdWxlLXpsaWJYAQAAAC10ctcoAABYBwAAAG1haWxjYXBy2CgAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGNhcC5odG1sI21vZHVsZS1tYWlsY2FwWAEAAAAtdHLZKAAAWAgAAABfX21haW5fX3LaKAAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fX21haW5fXy5odG1sI21vZHVsZS1fX21haW5fX1gBAAAALXRy2ygAAFgMAAAAZW1haWwuZXJyb3JzctwoAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLmVycm9ycy5odG1sI21vZHVsZS1lbWFpbC5lcnJvcnNYAQAAAC10ct0oAABYBwAAAGxpYjJ0bzNy3igAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvMnRvMy5odG1sI21vZHVsZS1saWIydG8zWAEAAAAtdHLfKAAAWAQAAAB0aW1lcuAoAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpbWUuaHRtbCNtb2R1bGUtdGltZVgBAAAALXRy4SgAAFgDAAAAY3N2cuIoAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nzdi5odG1sI21vZHVsZS1jc3ZYAQAAAC10cuMoAABYBQAAAHRva2VucuQoAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuLmh0bWwjbW9kdWxlLXRva2VuWAEAAAAtdHLlKAAAWAcAAABzbXRwbGlicuYoAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NtdHBsaWIuaHRtbCNtb2R1bGUtc210cGxpYlgBAAAALXRy5ygAAFgCAAAAR0xy6CgAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2wuaHRtbCNtb2R1bGUtR0xYAQAAAC10cukoAABYHwAAAGRpc3R1dGlscy5jb21tYW5kLmJkaXN0X3dpbmluc3Ry6igAAChqaQEAAGpqAQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmNvbW1hbmQuYmRpc3Rfd2luaW5zdFgBAAAALXRy6ygAAFgNAAAAZW1haWwuY2hhcnNldHLsKAAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5jaGFyc2V0Lmh0bWwjbW9kdWxlLWVtYWlsLmNoYXJzZXRYAQAAAC10cu0oAABYCwAAAENhcmJvbi5EcmFncu4oAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uRHJhZ1gBAAAALXRy7ygAAFgEAAAAc2l0ZXLwKAAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaXRlLmh0bWwjbW9kdWxlLXNpdGVYAQAAAC10cvEoAABYBgAAAHR1cnRsZXLyKAAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCNtb2R1bGUtdHVydGxlWAEAAAAtdHLzKAAAWAoAAABleGNlcHRpb25zcvQoAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNtb2R1bGUtZXhjZXB0aW9uc1gBAAAALXRy9SgAAFgFAAAAY21hdGhy9igAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY21hdGguaHRtbCNtb2R1bGUtY21hdGhYAQAAAC10cvcoAABYFgAAAGRpc3R1dGlscy5tc3ZjY29tcGlsZXJy+CgAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLm1zdmNjb21waWxlclgBAAAALXRy+SgAAFgDAAAAbmlzcvooAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L25pcy5odG1sI21vZHVsZS1uaXNYAQAAAC10cvsoAABYCgAAAENhcmJvbi5DdGxy/CgAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FyYm9uLmh0bWwjbW9kdWxlLUNhcmJvbi5DdGxYAQAAAC10cv0oAABYGwAAAGRpc3R1dGlscy5jb21tYW5kLmJkaXN0X21zaXL+KAAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMuY29tbWFuZC5iZGlzdF9tc2lYAQAAAC10cv8oAABYCQAAAGNvb2tpZWxpYnIAKQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNtb2R1bGUtY29va2llbGliWAEAAAAtdHIBKQAAWAUAAABuZXRyY3ICKQAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9uZXRyYy5odG1sI21vZHVsZS1uZXRyY1gBAAAALXRyAykAAFgBAAAAVyhqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5kb2MuaHRtbCNtb2R1bGUtV1gBAAAALXRyBCkAAFgFAAAAZXJybm9yBSkAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNtb2R1bGUtZXJybm9YAQAAAC10cgYpAABYBgAAAGdldG9wdHIHKQAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZXRvcHQuaHRtbCNtb2R1bGUtZ2V0b3B0WAEAAAAtdHIIKQAAWAsAAABhcHBsZXNpbmdsZXIJKQAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bmRvYy5odG1sI21vZHVsZS1hcHBsZXNpbmdsZVgBAAAALXRyCikAAFgLAAAAQ29sb3JQaWNrZXJyCykAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sb3JwaWNrZXIuaHRtbCNtb2R1bGUtQ29sb3JQaWNrZXJYAQAAAC10cgwpAABYCwAAAEVhc3lEaWFsb2dzcg0pAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vhc3lkaWFsb2dzLmh0bWwjbW9kdWxlLUVhc3lEaWFsb2dzWAEAAAAtdHIOKQAAWAQAAABhaWZjcg8pAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FpZmMuaHRtbCNtb2R1bGUtYWlmY1gBAAAALXRyECkAAFgLAAAAQ2FyYm9uLkZpbGVyESkAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FyYm9uLmh0bWwjbW9kdWxlLUNhcmJvbi5GaWxlWAEAAAAtdHISKQAAWAcAAABob3RzaG90chMpAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2hvdHNob3QuaHRtbCNtb2R1bGUtaG90c2hvdFgBAAAALXRyFCkAAFgHAAAAQmFzdGlvbnIVKQAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXN0aW9uLmh0bWwjbW9kdWxlLUJhc3Rpb25YAQAAAC10chYpAABYFwAAAGRpc3R1dGlscy5jb21tYW5kLmNsZWFuchcpAAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjbW9kdWxlLWRpc3R1dGlscy5jb21tYW5kLmNsZWFuWAEAAAAtdHIYKQAAWAwAAABTY3JvbGxlZFRleHRyGSkAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2Nyb2xsZWR0ZXh0Lmh0bWwjbW9kdWxlLVNjcm9sbGVkVGV4dFgBAAAALXRyGikAAFgIAAAAd2luc291bmRyGykAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2luc291bmQuaHRtbCNtb2R1bGUtd2luc291bmRYAQAAAC10chwpAABYEAAAAENhcmJvbi5RdWlja0RyYXdyHSkAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FyYm9uLmh0bWwjbW9kdWxlLUNhcmJvbi5RdWlja0RyYXdYAQAAAC10ch4pAABYAgAAAGRsch8pAAAoamkBAABqagEAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RsLmh0bWwjbW9kdWxlLWRsWAEAAAAtdHIgKQAAWBAAAABjb21waWxlci52aXNpdG9yciEpAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbXBpbGVyLmh0bWwjbW9kdWxlLWNvbXBpbGVyLnZpc2l0b3JYAQAAAC10ciIpAABYBwAAAGR1bWJkYm1yIykAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZHVtYmRibS5odG1sI21vZHVsZS1kdW1iZGJtWAEAAAAtdHIkKQAAWA0AAABlbWFpbC5tZXNzYWdlciUpAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNtb2R1bGUtZW1haWwubWVzc2FnZVgBAAAALXRyJikAAFgaAAAAZGlzdHV0aWxzLmNvbW1hbmQucmVnaXN0ZXJyJykAAChqaQEAAGpqAQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmNvbW1hbmQucmVnaXN0ZXJYAQAAAC10cigpAABYCAAAAGZwZm9ybWF0cikpAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZwZm9ybWF0Lmh0bWwjbW9kdWxlLWZwZm9ybWF0WAEAAAAtdHIqKQAAWAwAAABDYXJib24uU291bmRyKykAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FyYm9uLmh0bWwjbW9kdWxlLUNhcmJvbi5Tb3VuZFgBAAAALXRyLCkAAFgGAAAAZnRwbGlici0pAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z0cGxpYi5odG1sI21vZHVsZS1mdHBsaWJYAQAAAC10ci4pAABYAwAAAHB0eXIvKQAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wdHkuaHRtbCNtb2R1bGUtcHR5WAEAAAAtdHIwKQAAWAYAAABzaHV0aWxyMSkAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2h1dGlsLmh0bWwjbW9kdWxlLXNodXRpbFgBAAAALXRyMikAAFgcAAAAbXVsdGlwcm9jZXNzaW5nLnNoYXJlZGN0eXBlc3IzKQAAKGppAQAAamoBAABYWgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtb2R1bGUtbXVsdGlwcm9jZXNzaW5nLnNoYXJlZGN0eXBlc1gBAAAALXRyNCkAAFgLAAAAQ2FyYm9uLkhlbHByNSkAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FyYm9uLmh0bWwjbW9kdWxlLUNhcmJvbi5IZWxwWAEAAAAtdHI2KQAAWAcAAABnZXR0ZXh0cjcpAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dldHRleHQuaHRtbCNtb2R1bGUtZ2V0dGV4dFgBAAAALXRyOCkAAFgQAAAAQ2FyYm9uLlJlc291cmNlc3I5KQAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYXJib24uaHRtbCNtb2R1bGUtQ2FyYm9uLlJlc291cmNlc1gBAAAALXRyOikAAFgCAAAAcmVyOykAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmUuaHRtbCNtb2R1bGUtcmVYAQAAAC10cjwpAABYEQAAAGRpc3R1dGlscy52ZXJzaW9ucj0pAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjbW9kdWxlLWRpc3R1dGlscy52ZXJzaW9uWAEAAAAtdHI+KQAAWBUAAAB4bWwuZXRyZWUuRWxlbWVudFRyZWVyPykAAChqaQEAAGpqAQAAWFkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjbW9kdWxlLXhtbC5ldHJlZS5FbGVtZW50VHJlZVgBAAAALXRyQCkAAFgHAAAAZmlsZWNtcHJBKQAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9maWxlY21wLmh0bWwjbW9kdWxlLWZpbGVjbXBYAQAAAC10ckIpAABYCwAAAHN1bmF1ZGlvZGV2ckMpAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1bmF1ZGlvLmh0bWwjbW9kdWxlLXN1bmF1ZGlvZGV2WAEAAAAtdHJEKQAAWBUAAABtdWx0aXByb2Nlc3NpbmcuZHVtbXlyRSkAAChqaQEAAGpqAQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbW9kdWxlLW11bHRpcHJvY2Vzc2luZy5kdW1teVgBAAAALXRyRikAAFgJAAAAZnJhY3Rpb25zckcpAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZyYWN0aW9ucy5odG1sI21vZHVsZS1mcmFjdGlvbnNYAQAAAC10ckgpAABYCgAAAHdlYmJyb3dzZXJySSkAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2ViYnJvd3Nlci5odG1sI21vZHVsZS13ZWJicm93c2VyWAEAAAAtdHJKKQAAWAcAAABtYWNwYXRockspAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hY3BhdGguaHRtbCNtb2R1bGUtbWFjcGF0aFgBAAAALXRyTCkAAFgQAAAAQ2FyYm9uLkNhcmJvbkV2dHJNKQAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYXJib24uaHRtbCNtb2R1bGUtQ2FyYm9uLkNhcmJvbkV2dFgBAAAALXRyTikAAFgFAAAAY2dpdGJyTykAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2dpdGIuaHRtbCNtb2R1bGUtY2dpdGJYAQAAAC10clApAABYCAAAAG9wdHBhcnNlclEpAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjbW9kdWxlLW9wdHBhcnNlWAEAAAAtdHJSKQAAWA0AAABDYXJib24uUWRvZmZzclMpAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uUWRvZmZzWAEAAAAtdHJUKQAAWAsAAABDYXJib24uSWNuc3JVKQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYXJib24uaHRtbCNtb2R1bGUtQ2FyYm9uLkljbnNYAQAAAC10clYpAABYCgAAAENhcmJvbi5PU0FyVykAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FyYm9uLmh0bWwjbW9kdWxlLUNhcmJvbi5PU0FYAQAAAC10clgpAABYCQAAAHRyYWNlYmFja3JZKQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90cmFjZWJhY2suaHRtbCNtb2R1bGUtdHJhY2ViYWNrWAEAAAAtdHJaKQAAWAQAAABzcHdkclspAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Nwd2QuaHRtbCNtb2R1bGUtc3B3ZFgBAAAALXRyXCkAAFgEAAAAdXVpZHJdKQAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91dWlkLmh0bWwjbW9kdWxlLXV1aWRYAQAAAC10cl4pAABYFwAAAGRpc3R1dGlscy5jb21tYW5kLmJkaXN0cl8pAAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjbW9kdWxlLWRpc3R1dGlscy5jb21tYW5kLmJkaXN0WAEAAAAtdHJgKQAAWAcAAAB0ZXJtaW9zcmEpAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rlcm1pb3MuaHRtbCNtb2R1bGUtdGVybWlvc1gBAAAALXRyYikAAFgPAAAAZnV0dXJlX2J1aWx0aW5zcmMpAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1dHVyZV9idWlsdGlucy5odG1sI21vZHVsZS1mdXR1cmVfYnVpbHRpbnNYAQAAAC10cmQpAABYBQAAAHBvc2l4cmUpAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Bvc2l4Lmh0bWwjbW9kdWxlLXBvc2l4WAEAAAAtdHJmKQAAWAkAAAB0ZWxuZXRsaWJyZykAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGVsbmV0bGliLmh0bWwjbW9kdWxlLXRlbG5ldGxpYlgBAAAALXRyaCkAAFgOAAAAQmFzZUhUVFBTZXJ2ZXJyaSkAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmFzZWh0dHBzZXJ2ZXIuaHRtbCNtb2R1bGUtQmFzZUhUVFBTZXJ2ZXJYAQAAAC10cmopAABYDwAAAGRpc3R1dGlscy5kZWJ1Z3JrKQAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMuZGVidWdYAQAAAC10cmwpAABYBgAAAHBwcmludHJtKQAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wcHJpbnQuaHRtbCNtb2R1bGUtcHByaW50WAEAAAAtdHJuKQAAWAwAAABkdW1teV90aHJlYWRybykAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZHVtbXlfdGhyZWFkLmh0bWwjbW9kdWxlLWR1bW15X3RocmVhZFgBAAAALXRycCkAAFgHAAAAcGtndXRpbHJxKQAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wa2d1dGlsLmh0bWwjbW9kdWxlLXBrZ3V0aWxYAQAAAC10cnIpAABYCgAAAGJ1aWxkdG9vbHNycykAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5kb2MuaHRtbCNtb2R1bGUtYnVpbGR0b29sc1gBAAAALXRydCkAAFgDAAAAeG1scnUpAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5odG1sI21vZHVsZS14bWxYAQAAAC10cnYpAABYEwAAAGRpc3R1dGlscy5jY29tcGlsZXJydykAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmNjb21waWxlclgBAAAALXRyeCkAAFgGAAAAYmluaGV4cnkpAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JpbmhleC5odG1sI21vZHVsZS1iaW5oZXhYAQAAAC10cnopAABYDgAAAENhcmJvbi5EaWFsb2dzcnspAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uRGlhbG9nc1gBAAAALXRyfCkAAFgCAAAAQUxyfSkAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWwuaHRtbCNtb2R1bGUtQUxYAQAAAC10cn4pAABYBwAAAGh0dHBsaWJyfykAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHR0cGxpYi5odG1sI21vZHVsZS1odHRwbGliWAEAAAAtdHKAKQAAWAUAAABzbXRwZHKBKQAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zbXRwZC5odG1sI21vZHVsZS1zbXRwZFgBAAAALXRygikAAFgIAAAAY2FsZW5kYXJygykAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNtb2R1bGUtY2FsZW5kYXJYAQAAAC10coQpAABYBQAAAGNyeXB0coUpAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NyeXB0Lmh0bWwjbW9kdWxlLWNyeXB0WAEAAAAtdHKGKQAAWAYAAAB0aHJlYWRyhykAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkLmh0bWwjbW9kdWxlLXRocmVhZFgBAAAALXRyiCkAAFgJAAAAaXRlcnRvb2xzcokpAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2l0ZXJ0b29scy5odG1sI21vZHVsZS1pdGVydG9vbHNYAQAAAC10coopAABYBwAAAHdoaWNoZGJyiykAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2hpY2hkYi5odG1sI21vZHVsZS13aGljaGRiWAEAAAAtdHKMKQAAWBAAAABsb2dnaW5nLmhhbmRsZXJzco0pAAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNtb2R1bGUtbG9nZ2luZy5oYW5kbGVyc1gBAAAALXRyjikAAFgCAAAAb3NyjykAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNtb2R1bGUtb3NYAQAAAC10cpApAABYBwAAAG9zLnBhdGhykSkAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MucGF0aC5odG1sI21vZHVsZS1vcy5wYXRoWAEAAAAtdHKSKQAAWBMAAABkaXN0dXRpbHMuc3lzY29uZmlncpMpAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjbW9kdWxlLWRpc3R1dGlscy5zeXNjb25maWdYAQAAAC10cpQpAABYBgAAAHRpbWVpdHKVKQAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aW1laXQuaHRtbCNtb2R1bGUtdGltZWl0WAEAAAAtdHKWKQAAWAoAAABzdWJwcm9jZXNzcpcpAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNtb2R1bGUtc3VicHJvY2Vzc1gBAAAALXRymCkAAFgDAAAAc3lzcpkpAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI21vZHVsZS1zeXNYAQAAAC10cpopAABYDwAAAGVtYWlsLml0ZXJhdG9yc3KbKQAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5pdGVyYXRvcnMuaHRtbCNtb2R1bGUtZW1haWwuaXRlcmF0b3JzWAEAAAAtdHKcKQAAWAIAAABhbHKdKQAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hbC5odG1sI21vZHVsZS1hbFgBAAAALXRynikAAFghAAAAZGlzdHV0aWxzLmNvbW1hbmQuaW5zdGFsbF9oZWFkZXJzcp8pAAAoamkBAABqagEAAFhYAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjbW9kdWxlLWRpc3R1dGlscy5jb21tYW5kLmluc3RhbGxfaGVhZGVyc1gBAAAALXRyoCkAAFgHAAAAa2V5d29yZHKhKQAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9rZXl3b3JkLmh0bWwjbW9kdWxlLWtleXdvcmRYAQAAAC10cqIpAABYBwAAAGltYWdlb3ByoykAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hZ2VvcC5odG1sI21vZHVsZS1pbWFnZW9wWAEAAAAtdHKkKQAAWAcAAABUa2ludGVycqUpAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RraW50ZXIuaHRtbCNtb2R1bGUtVGtpbnRlclgBAAAALXRypikAAFgMAAAAQ2FyYm9uLkZvbnRzcqcpAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uRm9udHNYAQAAAC10cqgpAABYCQAAAGxpbmVjYWNoZXKpKQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9saW5lY2FjaGUuaHRtbCNtb2R1bGUtbGluZWNhY2hlWAEAAAAtdHKqKQAAWAgAAABhc3luY29yZXKrKQAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hc3luY29yZS5odG1sI21vZHVsZS1hc3luY29yZVgBAAAALXRyrCkAAFgQAAAAd3NnaXJlZi5oYW5kbGVyc3KtKQAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93c2dpcmVmLmh0bWwjbW9kdWxlLXdzZ2lyZWYuaGFuZGxlcnNYAQAAAC10cq4pAABYCgAAAFVzZXJTdHJpbmdyrykAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXNlcmRpY3QuaHRtbCNtb2R1bGUtVXNlclN0cmluZ1gBAAAALXRysCkAAFgLAAAATWluaUFFRnJhbWVysSkAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWluaWFlZnJhbWUuaHRtbCNtb2R1bGUtTWluaUFFRnJhbWVYAQAAAC10crIpAABYCgAAAG1hY29zdG9vbHNysykAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFjb3N0b29scy5odG1sI21vZHVsZS1tYWNvc3Rvb2xzWAEAAAAtdHK0KQAAWAkAAABDYXJib24uQ21ytSkAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FyYm9uLmh0bWwjbW9kdWxlLUNhcmJvbi5DbVgBAAAALXRytikAAFgXAAAAZGlzdHV0aWxzLnVuaXhjY29tcGlsZXJytykAAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLnVuaXhjY29tcGlsZXJYAQAAAC10crgpAABYDwAAAERvY1hNTFJQQ1NlcnZlcnK5KQAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N4bWxycGNzZXJ2ZXIuaHRtbCNtb2R1bGUtRG9jWE1MUlBDU2VydmVyWAEAAAAtdHK6KQAAWA4AAABodG1sZW50aXR5ZGVmc3K7KQAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odG1sbGliLmh0bWwjbW9kdWxlLWh0bWxlbnRpdHlkZWZzWAEAAAAtdHK8KQAAWAQAAABnbG9icr0pAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dsb2IuaHRtbCNtb2R1bGUtZ2xvYlgBAAAALXRyvikAAFgJAAAARnJhbWVXb3Jrcr8pAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZyYW1ld29yay5odG1sI21vZHVsZS1GcmFtZVdvcmtYAQAAAC10csApAABYBgAAAHBpY2tsZXLBKQAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9waWNrbGUuaHRtbCNtb2R1bGUtcGlja2xlWAEAAAAtdHLCKQAAWAMAAABkYm1ywykAAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGJtLmh0bWwjbW9kdWxlLWRibVgBAAAALXRyxCkAAFgLAAAAcm9ib3RwYXJzZXJyxSkAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcm9ib3RwYXJzZXIuaHRtbCNtb2R1bGUtcm9ib3RwYXJzZXJYAQAAAC10csYpAABYBgAAAGNvZGVvcHLHKQAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2Rlb3AuaHRtbCNtb2R1bGUtY29kZW9wWAEAAAAtdHLIKQAAWAQAAABqc29ucskpAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2pzb24uaHRtbCNtb2R1bGUtanNvblgBAAAALXRyyikAAFgJAAAAQ2FyYm9uLkNHcsspAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uQ0dYAQAAAC10cswpAABYCQAAAENhcmJvbi5DRnLNKQAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYXJib24uaHRtbCNtb2R1bGUtQ2FyYm9uLkNGWAEAAAAtdHLOKQAAWAQAAABtYXRocs8pAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hdGguaHRtbCNtb2R1bGUtbWF0aFgBAAAALXRy0CkAAFgDAAAAZGlzctEpAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI21vZHVsZS1kaXNYAQAAAC10ctIpAABYCAAAAHRleHR3cmFwctMpAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RleHR3cmFwLmh0bWwjbW9kdWxlLXRleHR3cmFwWAEAAAAtdHLUKQAAWAsAAABybGNvbXBsZXRlcnLVKQAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ybGNvbXBsZXRlci5odG1sI21vZHVsZS1ybGNvbXBsZXRlclgBAAAALXRy1ikAAFgXAAAAZGlzdHV0aWxzLmNvbW1hbmQuY2hlY2ty1ykAAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmNvbW1hbmQuY2hlY2tYAQAAAC10ctgpAABYEAAAAENhcmJvbi5EcmFnY29uc3Ry2SkAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FyYm9uLmh0bWwjbW9kdWxlLUNhcmJvbi5EcmFnY29uc3RYAQAAAC10ctopAABYAwAAAHB3ZHLbKQAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wd2QuaHRtbCNtb2R1bGUtcHdkWAEAAAAtdHLcKQAAWBEAAABDYXJib24uTWVkaWFEZXNjcnLdKQAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYXJib24uaHRtbCNtb2R1bGUtQ2FyYm9uLk1lZGlhRGVzY3JYAQAAAC10ct4pAABYBgAAAHB5Y2xicnLfKQAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWNsYnIuaHRtbCNtb2R1bGUtcHljbGJyWAEAAAAtdHLgKQAAWAQAAABqcGVncuEpAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2pwZWcuaHRtbCNtb2R1bGUtanBlZ1gBAAAALXRy4ikAAFgMAAAAQ2FyYm9uLlNjcmFwcuMpAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uU2NyYXBYAQAAAC10cuQpAABYCAAAAGNvbW1hbmRzcuUpAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbW1hbmRzLmh0bWwjbW9kdWxlLWNvbW1hbmRzWAEAAAAtdHLmKQAAWBYAAABkaXN0dXRpbHMuZmFuY3lfZ2V0b3B0cucpAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjbW9kdWxlLWRpc3R1dGlscy5mYW5jeV9nZXRvcHRYAQAAAC10cugpAABYCQAAAG1hY2Vycm9yc3LpKQAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bmRvYy5odG1sI21vZHVsZS1tYWNlcnJvcnNYAQAAAC10cuopAABYCAAAAHVybHBhcnNlcuspAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybHBhcnNlLmh0bWwjbW9kdWxlLXVybHBhcnNlWAEAAAAtdHLsKQAAWA4AAABkaXN0dXRpbHMuZGlzdHLtKQAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMuZGlzdFgBAAAALXRy7ikAAFgHAAAAd3NnaXJlZnLvKQAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93c2dpcmVmLmh0bWwjbW9kdWxlLXdzZ2lyZWZYAQAAAC10cvApAABYBgAAAENvb2tpZXLxKQAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWUuaHRtbCNtb2R1bGUtQ29va2llWAEAAAAtdHLyKQAAWBMAAABkaXN0dXRpbHMuZmlsZV91dGlscvMpAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjbW9kdWxlLWRpc3R1dGlscy5maWxlX3V0aWxYAQAAAC10cvQpAABYBwAAAHByb2ZpbGVy9SkAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHJvZmlsZS5odG1sI21vZHVsZS1wcm9maWxlWAEAAAAtdHL2KQAAWAYAAABkYmhhc2hy9ykAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGJoYXNoLmh0bWwjbW9kdWxlLWRiaGFzaFgBAAAALXRy+CkAAFgIAAAAcmVhZGxpbmVy+SkAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVhZGxpbmUuaHRtbCNtb2R1bGUtcmVhZGxpbmVYAQAAAC10cvopAABYBQAAAGNodW5rcvspAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NodW5rLmh0bWwjbW9kdWxlLWNodW5rWAEAAAAtdHL8KQAAWAoAAABweV9jb21waWxlcv0pAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5X2NvbXBpbGUuaHRtbCNtb2R1bGUtcHlfY29tcGlsZVgBAAAALXRy/ikAAFgGAAAAc3ltYm9scv8pAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5bWJvbC5odG1sI21vZHVsZS1zeW1ib2xYAQAAAC10cgAqAABYEAAAAHhtbC5zYXguc2F4dXRpbHNyASoAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC51dGlscy5odG1sI21vZHVsZS14bWwuc2F4LnNheHV0aWxzWAEAAAAtdHICKgAAWAkAAAB0aHJlYWRpbmdyAyoAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjbW9kdWxlLXRocmVhZGluZ1gBAAAALXRyBCoAAFgHAAAAaW1hcGxpYnIFKgAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFwbGliLmh0bWwjbW9kdWxlLWltYXBsaWJYAQAAAC10cgYqAABYBwAAAGxvZ2dpbmdyByoAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI21vZHVsZS1sb2dnaW5nWAEAAAAtdHIIKgAAWAYAAABtc3ZjcnRyCSoAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXN2Y3J0Lmh0bWwjbW9kdWxlLW1zdmNydFgBAAAALXRyCioAAFgNAAAAZGlzdHV0aWxzLmxvZ3ILKgAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMubG9nWAEAAAAtdHIMKgAAWAUAAABtdXRleHINKgAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdXRleC5odG1sI21vZHVsZS1tdXRleFgBAAAALXRyDioAAFgfAAAAZGlzdHV0aWxzLmNvbW1hbmQuYnVpbGRfc2NyaXB0c3IPKgAAKGppAQAAamoBAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMuY29tbWFuZC5idWlsZF9zY3JpcHRzWAEAAAAtdHIQKgAAWAQAAABnZGJtchEqAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dkYm0uaHRtbCNtb2R1bGUtZ2RibVgBAAAALXRyEioAAFgSAAAAZGlzdHV0aWxzLmRlcF91dGlschMqAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjbW9kdWxlLWRpc3R1dGlscy5kZXBfdXRpbFgBAAAALXRyFCoAAFgPAAAAd3NnaXJlZi5oZWFkZXJzchUqAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dzZ2lyZWYuaHRtbCNtb2R1bGUtd3NnaXJlZi5oZWFkZXJzWAEAAAAtdHIWKgAAWAwAAAB3c2dpcmVmLnV0aWxyFyoAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd3NnaXJlZi5odG1sI21vZHVsZS13c2dpcmVmLnV0aWxYAQAAAC10chgqAABYAwAAAFRpeHIZKgAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aXguaHRtbCNtb2R1bGUtVGl4WAEAAAAtdHIaKgAAWAkAAABDYXJib24uUWRyGyoAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FyYm9uLmh0bWwjbW9kdWxlLUNhcmJvbi5RZFgBAAAALXRyHCoAAFgDAAAAZ3Jwch0qAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dycC5odG1sI21vZHVsZS1ncnBYAQAAAC10ch4qAABYDQAAAENhcmJvbi5MYXVuY2hyHyoAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FyYm9uLmh0bWwjbW9kdWxlLUNhcmJvbi5MYXVuY2hYAQAAAC10ciAqAABYAwAAAGJ6MnIhKgAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iejIuaHRtbCNtb2R1bGUtYnoyWAEAAAAtdHIiKgAAWAMAAABhc3RyIyoAAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXN0Lmh0bWwjbW9kdWxlLWFzdFgBAAAALXRyJCoAAFgGAAAAc3RydWN0ciUqAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cnVjdC5odG1sI21vZHVsZS1zdHJ1Y3RYAQAAAC10ciYqAABYCQAAAENhcmJvbi5RdHInKgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYXJib24uaHRtbCNtb2R1bGUtQ2FyYm9uLlF0WAEAAAAtdHIoKgAAWAYAAABpY29wZW5yKSoAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5kb2MuaHRtbCNtb2R1bGUtaWNvcGVuWAEAAAAtdHIqKgAAWAYAAABwc3RhdHNyKyoAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHJvZmlsZS5odG1sI21vZHVsZS1wc3RhdHNYAQAAAC10ciwqAABYCQAAAG1pbWV0b29sc3ItKgAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW1ldG9vbHMuaHRtbCNtb2R1bGUtbWltZXRvb2xzWAEAAAAtdHIuKgAAWA4AAABjdXJzZXMudGV4dHBhZHIvKgAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNtb2R1bGUtY3Vyc2VzLnRleHRwYWRYAQAAAC10cjAqAABYFgAAAGRpc3R1dGlscy5hcmNoaXZlX3V0aWxyMSoAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmFyY2hpdmVfdXRpbFgBAAAALXRyMioAAFgJAAAAY1N0cmluZ0lPcjMqAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZ2lvLmh0bWwjbW9kdWxlLWNTdHJpbmdJT1gBAAAALXRyNCoAAFgDAAAAc2hhcjUqAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NoYS5odG1sI21vZHVsZS1zaGFYAQAAAC10cjYqAABYBgAAAGJpc2VjdHI3KgAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iaXNlY3QuaHRtbCNtb2R1bGUtYmlzZWN0WAEAAAAtdHI4KgAAWAMAAABuZXdyOSoAAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbmV3Lmh0bWwjbW9kdWxlLW5ld1gBAAAALXRyOioAAFgCAAAAaWNyOyoAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaWMuaHRtbCNtb2R1bGUtaWNYAQAAAC10cjwqAABYAgAAAGlvcj0qAAAoamkBAABqagEAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjbW9kdWxlLWlvWAEAAAAtdHI+KgAAWAMAAAB0dGtyPyoAAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjbW9kdWxlLXR0a1gBAAAALXRyQCoAAFgGAAAAc25kaGRyckEqAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NuZGhkci5odG1sI21vZHVsZS1zbmRoZHJYAQAAAC10ckIqAABYAwAAAHR0eXJDKgAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dHkuaHRtbCNtb2R1bGUtdHR5WAEAAAAtdHJEKgAAWA8AAABDYXJib24uVGV4dEVkaXRyRSoAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FyYm9uLmh0bWwjbW9kdWxlLUNhcmJvbi5UZXh0RWRpdFgBAAAALXRyRioAAFgIAAAAVXNlckRpY3RyRyoAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXNlcmRpY3QuaHRtbCNtb2R1bGUtVXNlckRpY3RYAQAAAC10ckgqAABYDgAAAGdlbnN1aXRlbW9kdWxlckkqAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dlbnN1aXRlbW9kdWxlLmh0bWwjbW9kdWxlLWdlbnN1aXRlbW9kdWxlWAEAAAAtdHJKKgAAWAsAAABvc3NhdWRpb2RldnJLKgAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vc3NhdWRpb2Rldi5odG1sI21vZHVsZS1vc3NhdWRpb2RldlgBAAAALXRyTCoAAFgDAAAAYmRick0qAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JkYi5odG1sI21vZHVsZS1iZGJYAQAAAC10ck4qAABYCQAAAGZvcm1hdHRlcnJPKgAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNtb2R1bGUtZm9ybWF0dGVyWAEAAAAtdHJQKgAAWA4AAABDYXJib24uRm9sZGVyc3JRKgAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYXJib24uaHRtbCNtb2R1bGUtQ2FyYm9uLkZvbGRlcnNYAQAAAC10clIqAABYEgAAAGRpc3R1dGlscy5maWxlbGlzdHJTKgAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMuZmlsZWxpc3RYAQAAAC10clQqAABYEwAAAENhcmJvbi5Db3JlR3JhcGhpY3NyVSoAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FyYm9uLmh0bWwjbW9kdWxlLUNhcmJvbi5Db3JlR3JhcGhpY3NYAQAAAC10clYqAABYFgAAAGRpc3R1dGlscy5iY3BwY29tcGlsZXJyVyoAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmJjcHBjb21waWxlclgBAAAALXRyWCoAAFgTAAAAZGlzdHV0aWxzLmV4dGVuc2lvbnJZKgAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMuZXh0ZW5zaW9uWAEAAAAtdHJaKgAAWAoAAABDYXJib24uRXZ0clsqAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uRXZ0WAEAAAAtdHJcKgAAWBIAAABDYXJib24uUURPZmZzY3JlZW5yXSoAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FyYm9uLmh0bWwjbW9kdWxlLUNhcmJvbi5RRE9mZnNjcmVlblgBAAAALXRyXioAAFgHAAAAYWV0b29sc3JfKgAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hZXRvb2xzLmh0bWwjbW9kdWxlLWFldG9vbHNYAQAAAC10cmAqAABYBgAAAHF1b3ByaXJhKgAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9xdW9wcmkuaHRtbCNtb2R1bGUtcXVvcHJpWAEAAAAtdHJiKgAAWBAAAABDYXJib24uUXVpY2tUaW1lcmMqAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uUXVpY2tUaW1lWAEAAAAtdHJkKgAAWAsAAABfX2J1aWx0aW5fX3JlKgAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fX2J1aWx0aW5fXy5odG1sI21vZHVsZS1fX2J1aWx0aW5fX1gBAAAALXRyZioAAFgIAAAAc3ltdGFibGVyZyoAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3ltdGFibGUuaHRtbCNtb2R1bGUtc3ltdGFibGVYAQAAAC10cmgqAABYBwAAAGhhc2hsaWJyaSoAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaGFzaGxpYi5odG1sI21vZHVsZS1oYXNobGliWAEAAAAtdHJqKgAAWAkAAAB4bWxycGNsaWJyayoAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1scnBjbGliLmh0bWwjbW9kdWxlLXhtbHJwY2xpYlgBAAAALXRybCoAAFgMAAAAZW1haWwucGFyc2Vycm0qAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLnBhcnNlci5odG1sI21vZHVsZS1lbWFpbC5wYXJzZXJYAQAAAC10cm4qAABYBQAAAHR5cGVzcm8qAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R5cGVzLmh0bWwjbW9kdWxlLXR5cGVzWAEAAAAtdHJwKgAAWAMAAABOYXZycSoAAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5kb2MuaHRtbCNtb2R1bGUtTmF2WAEAAAAtdHJyKgAAWAgAAABwbGlzdGxpYnJzKgAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wbGlzdGxpYi5odG1sI21vZHVsZS1wbGlzdGxpYlgBAAAALXRydCoAAFgLAAAAQ2FyYm9uLk1sdGVydSoAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FyYm9uLmh0bWwjbW9kdWxlLUNhcmJvbi5NbHRlWAEAAAAtdHJ2KgAAWAoAAABDYXJib24uQXBwcncqAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uQXBwWAEAAAAtdHJ4KgAAWAgAAAB0b2tlbml6ZXJ5KgAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90b2tlbml6ZS5odG1sI21vZHVsZS10b2tlbml6ZVgBAAAALXRyeioAAFgIAAAAb3BlcmF0b3JyeyoAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNtb2R1bGUtb3BlcmF0b3JYAQAAAC10cnwqAABYDwAAAENhcmJvbi5Db250cm9sc3J9KgAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYXJib24uaHRtbCNtb2R1bGUtQ2FyYm9uLkNvbnRyb2xzWAEAAAAtdHJ+KgAAWAYAAABsb2NhbGVyfyoAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9jYWxlLmh0bWwjbW9kdWxlLWxvY2FsZVgBAAAALXRygCoAAFgLAAAAZW1haWwudXRpbHNygSoAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwudXRpbHMuaHRtbCNtb2R1bGUtZW1haWwudXRpbHNYAQAAAC10coIqAABYCgAAAGNvbnRleHRsaWJygyoAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29udGV4dGxpYi5odG1sI21vZHVsZS1jb250ZXh0bGliWAEAAAAtdHKEKgAAWBMAAABlbmNvZGluZ3MudXRmXzhfc2lncoUqAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVjcy5odG1sI21vZHVsZS1lbmNvZGluZ3MudXRmXzhfc2lnWAEAAAAtdHKGKgAAWBUAAABDYXJib24uTGF1bmNoU2VydmljZXNyhyoAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FyYm9uLmh0bWwjbW9kdWxlLUNhcmJvbi5MYXVuY2hTZXJ2aWNlc1gBAAAALXRyiCoAAFgIAAAAYXN5bmNoYXRyiSoAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXN5bmNoYXQuaHRtbCNtb2R1bGUtYXN5bmNoYXRYAQAAAC10cooqAABYBwAAAHhtbC5zYXhyiyoAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5odG1sI21vZHVsZS14bWwuc2F4WAEAAAAtdHKMKgAAWBcAAABkaXN0dXRpbHMuY29tbWFuZC5idWlsZHKNKgAAKGppAQAAamoBAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMuY29tbWFuZC5idWlsZFgBAAAALXRyjioAAFgEAAAAd2F2ZXKPKgAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93YXZlLmh0bWwjbW9kdWxlLXdhdmVYAQAAAC10cpAqAABYDAAAAGNvbXBpbGVyLmFzdHKRKgAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb21waWxlci5odG1sI21vZHVsZS1jb21waWxlci5hc3RYAQAAAC10cpIqAABYBgAAAHJhbmRvbXKTKgAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yYW5kb20uaHRtbCNtb2R1bGUtcmFuZG9tWAEAAAAtdHKUKgAAWA0AAABQaXhNYXBXcmFwcGVycpUqAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuZG9jLmh0bWwjbW9kdWxlLVBpeE1hcFdyYXBwZXJYAQAAAC10cpYqAABYAwAAAGltcHKXKgAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbXAuaHRtbCNtb2R1bGUtaW1wWAEAAAAtdHKYKgAAWAUAAABmY250bHKZKgAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mY250bC5odG1sI21vZHVsZS1mY250bFgBAAAALXRymioAAFgGAAAAYWVwYWNrcpsqAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FlcGFjay5odG1sI21vZHVsZS1hZXBhY2tYAQAAAC10cpwqAABYCQAAAGVuc3VyZXBpcHKdKgAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbnN1cmVwaXAuaHRtbCNtb2R1bGUtZW5zdXJlcGlwWAEAAAAtdHKeKgAAWBgAAABtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnNynyoAAChqaQEAAGpqAQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbW9kdWxlLW11bHRpcHJvY2Vzc2luZy5tYW5hZ2Vyc1gBAAAALXRyoCoAAFgHAAAAc3RhdHZmc3KhKgAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0dmZzLmh0bWwjbW9kdWxlLXN0YXR2ZnNYAQAAAC10cqIqAABYHAAAAGRpc3R1dGlscy5jb21tYW5kLmJkaXN0X2R1bWJyoyoAAChqaQEAAGpqAQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmNvbW1hbmQuYmRpc3RfZHVtYlgBAAAALXRypCoAAFgaAAAAbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb25ypSoAAChqaQEAAGpqAQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbW9kdWxlLW11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uWAEAAAAtdHKmKgAAWAcAAABpbXB1dGlscqcqAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltcHV0aWwuaHRtbCNtb2R1bGUtaW1wdXRpbFgBAAAALXRyqCoAAFgOAAAAZW5jb2RpbmdzLmlkbmFyqSoAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjbW9kdWxlLWVuY29kaW5ncy5pZG5hWAEAAAAtdHKqKgAAWAoAAABNaW1lV3JpdGVycqsqAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbWV3cml0ZXIuaHRtbCNtb2R1bGUtTWltZVdyaXRlclgBAAAALXRyrCoAAFgOAAAAZW1haWwuZW5jb2RlcnNyrSoAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwuZW5jb2RlcnMuaHRtbCNtb2R1bGUtZW1haWwuZW5jb2RlcnNYAQAAAC10cq4qAABYBgAAAGF0ZXhpdHKvKgAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hdGV4aXQuaHRtbCNtb2R1bGUtYXRleGl0WAEAAAAtdHKwKgAAWAcAAABjZm1maWxlcrEqAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuZG9jLmh0bWwjbW9kdWxlLWNmbWZpbGVYAQAAAC10crIqAABYBgAAAGN0eXBlc3KzKgAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNtb2R1bGUtY3R5cGVzWAEAAAAtdHK0KgAAWA0AAABDYXJib24uRXZlbnRzcrUqAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uRXZlbnRzWAEAAAAtdHK2KgAAWAgAAABVc2VyTGlzdHK3KgAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91c2VyZGljdC5odG1sI21vZHVsZS1Vc2VyTGlzdFgBAAAALXRyuCoAAFgaAAAAZGlzdHV0aWxzLmNvbW1hbmQuYnVpbGRfcHlyuSoAAChqaQEAAGpqAQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmNvbW1hbmQuYnVpbGRfcHlYAQAAAC10croqAABYAwAAAGFiY3K7KgAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hYmMuaHRtbCNtb2R1bGUtYWJjWAEAAAAtdHK8KgAAWAYAAABiYXNlNjRyvSoAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmFzZTY0Lmh0bWwjbW9kdWxlLWJhc2U2NFgBAAAALXRyvioAAFgFAAAAbWhsaWJyvyoAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWhsaWIuaHRtbCNtb2R1bGUtbWhsaWJYAQAAAC10csAqAABYCQAAAGZ1bmN0b29sc3LBKgAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdG9vbHMuaHRtbCNtb2R1bGUtZnVuY3Rvb2xzWAEAAAAtdHLCKgAAWAUAAABweWRvY3LDKgAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWRvYy5odG1sI21vZHVsZS1weWRvY1gBAAAALXRyxCoAAFgQAAAAU2ltcGxlSFRUUFNlcnZlcnLFKgAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaW1wbGVodHRwc2VydmVyLmh0bWwjbW9kdWxlLVNpbXBsZUhUVFBTZXJ2ZXJYAQAAAC10csYqAABYDQAAAENHSUhUVFBTZXJ2ZXJyxyoAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2dpaHR0cHNlcnZlci5odG1sI21vZHVsZS1DR0lIVFRQU2VydmVyWAEAAAAtdHLIKgAAWAYAAABwb3BsaWJyySoAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcG9wbGliLmh0bWwjbW9kdWxlLXBvcGxpYlgBAAAALXRyyioAAFgFAAAAYnNkZGJyyyoAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYnNkZGIuaHRtbCNtb2R1bGUtYnNkZGJYAQAAAC10cswqAABYAwAAAHBkYnLNKgAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wZGIuaHRtbCNtb2R1bGUtcGRiWAEAAAAtdHLOKgAAWAcAAABhZXR5cGVzcs8qAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FldHlwZXMuaHRtbCNtb2R1bGUtYWV0eXBlc1gBAAAALXRy0CoAAFgHAAAAX3dpbnJlZ3LRKgAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjbW9kdWxlLV93aW5yZWdYAQAAAC10ctIqAABYBgAAAHhkcmxpYnLTKgAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94ZHJsaWIuaHRtbCNtb2R1bGUteGRybGliWAEAAAAtdHLUKgAAWAkAAABzeXNjb25maWdy1SoAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzY29uZmlnLmh0bWwjbW9kdWxlLXN5c2NvbmZpZ1gBAAAALXRy1ioAAFgUAAAAQ2FyYm9uLkNvcmVGb3VuYXRpb25y1yoAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FyYm9uLmh0bWwjbW9kdWxlLUNhcmJvbi5Db3JlRm91bmF0aW9uWAEAAAAtdHLYKgAAWAoAAABzdHJpbmdwcmVwctkqAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZ3ByZXAuaHRtbCNtb2R1bGUtc3RyaW5ncHJlcFgBAAAALXRy2ioAAFgDAAAAY2dpctsqAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NnaS5odG1sI21vZHVsZS1jZ2lYAQAAAC10ctwqAABYBwAAAG51bWJlcnNy3SoAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbnVtYmVycy5odG1sI21vZHVsZS1udW1iZXJzWAEAAAAtdHLeKgAAWAQAAAB1c2Vyct8qAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VzZXIuaHRtbCNtb2R1bGUtdXNlclgBAAAALXRy4CoAAFgEAAAAbW1hcHLhKgAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tbWFwLmh0bWwjbW9kdWxlLW1tYXBYAQAAAC10cuIqAABYIAAAAGRpc3R1dGlscy5jb21tYW5kLmJkaXN0X3BhY2thZ2VycuMqAAAoamkBAABqagEAAFhXAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjbW9kdWxlLWRpc3R1dGlscy5jb21tYW5kLmJkaXN0X3BhY2thZ2VyWAEAAAAtdHLkKgAAWAcAAABhdWRpb29wcuUqAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2F1ZGlvb3AuaHRtbCNtb2R1bGUtYXVkaW9vcFgBAAAALXRy5ioAAFgYAAAAZGlzdHV0aWxzLmNvbW1hbmQuY29uZmlncucqAAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjbW9kdWxlLWRpc3R1dGlscy5jb21tYW5kLmNvbmZpZ1gBAAAALXRy6CoAAFgFAAAAUXVldWVy6SoAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcXVldWUuaHRtbCNtb2R1bGUtUXVldWVYAQAAAC10cuoqAABYDgAAAENhcmJvbi5NYWNIZWxwcusqAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uTWFjSGVscFgBAAAALXRy7CoAAFgcAAAAZGlzdHV0aWxzLmNvbW1hbmQuYnVpbGRfY2xpYnLtKgAAKGppAQAAamoBAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMuY29tbWFuZC5idWlsZF9jbGliWAEAAAAtdHLuKgAAWAUAAABydW5weXLvKgAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ydW5weS5odG1sI21vZHVsZS1ydW5weVgBAAAALXRy8CoAAFgHAAAAZG9jdGVzdHLxKgAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjbW9kdWxlLWRvY3Rlc3RYAQAAAC10cvIqAABYEgAAAFNpbXBsZVhNTFJQQ1NlcnZlcnLzKgAAKGppAQAAamoBAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaW1wbGV4bWxycGNzZXJ2ZXIuaHRtbCNtb2R1bGUtU2ltcGxlWE1MUlBDU2VydmVyWAEAAAAtdHL0KgAAWBMAAABkaXN0dXRpbHMudGV4dF9maWxlcvUqAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjbW9kdWxlLWRpc3R1dGlscy50ZXh0X2ZpbGVYAQAAAC10cvYqAABYBAAAAGhtYWNy9yoAAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaG1hYy5odG1sI21vZHVsZS1obWFjWAEAAAAtdHL4KgAAWAIAAABGTHL5KgAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbC5odG1sI21vZHVsZS1GTFgBAAAALXRy+ioAAFgIAAAAZGF0ZXRpbWVy+yoAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNtb2R1bGUtZGF0ZXRpbWVYAQAAAC10cvwqAABYDAAAAGN1cnNlcy5hc2NpaXL9KgAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuYXNjaWkuaHRtbCNtb2R1bGUtY3Vyc2VzLmFzY2lpWAEAAAAtdHL+KgAAWAgAAABiaW5hc2NpaXL/KgAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iaW5hc2NpaS5odG1sI21vZHVsZS1iaW5hc2NpaVgBAAAALXRyACsAAFgGAAAAaW1naGRycgErAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltZ2hkci5odG1sI21vZHVsZS1pbWdoZHJYAQAAAC10cgIrAABYEQAAAENhcmJvbi5Db21wb25lbnRzcgMrAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uQ29tcG9uZW50c1gBAAAALXRyBCsAAFgPAAAAeG1sLmRvbS5wdWxsZG9tcgUrAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20ucHVsbGRvbS5odG1sI21vZHVsZS14bWwuZG9tLnB1bGxkb21YAQAAAC10cgYrAABYCgAAAGNvbXBpbGVhbGxyBysAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29tcGlsZWFsbC5odG1sI21vZHVsZS1jb21waWxlYWxsWAEAAAAtdHIIKwAAWAcAAABodG1sbGlicgkrAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0bWxsaWIuaHRtbCNtb2R1bGUtaHRtbGxpYlgBAAAALXRyCisAAFgIAAAAZGlyY2FjaGVyCysAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlyY2FjaGUuaHRtbCNtb2R1bGUtZGlyY2FjaGVYAQAAAC10cgwrAABYBAAAAGNvcHlyDSsAAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29weS5odG1sI21vZHVsZS1jb3B5WAEAAAAtdHIOKwAAWAgAAAB1bml0dGVzdHIPKwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI21vZHVsZS11bml0dGVzdFgBAAAALXRyECsAAFgGAAAAZnBlY3RschErAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZwZWN0bC5odG1sI21vZHVsZS1mcGVjdGxYAQAAAC10chIrAABYBwAAAGRpZmZsaWJyEysAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlmZmxpYi5odG1sI21vZHVsZS1kaWZmbGliWAEAAAAtdHIUKwAAWBEAAAB4bWwuc2F4LnhtbHJlYWRlcnIVKwAAKGppAQAAamoBAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI21vZHVsZS14bWwuc2F4LnhtbHJlYWRlclgBAAAALXRyFisAAFgGAAAAc2hlbHZlchcrAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NoZWx2ZS5odG1sI21vZHVsZS1zaGVsdmVYAQAAAC10chgrAABYCAAAAHJlc291cmNlchkrAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Jlc291cmNlLmh0bWwjbW9kdWxlLXJlc291cmNlWAEAAAAtdHIaKwAAWAIAAABmbHIbKwAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbC5odG1sI21vZHVsZS1mbFgBAAAALXRyHCsAAFgCAAAAZm1yHSsAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZm0uaHRtbCNtb2R1bGUtZm1YAQAAAC10ch4rAABYCQAAAG1pbWV0eXBlc3IfKwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW1ldHlwZXMuaHRtbCNtb2R1bGUtbWltZXR5cGVzWAEAAAAtdHIgKwAAWBkAAABkaXN0dXRpbHMuY29tbWFuZC5pbnN0YWxsciErAAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjbW9kdWxlLWRpc3R1dGlscy5jb21tYW5kLmluc3RhbGxYAQAAAC10ciIrAABYBwAAAHhtbC5kb21yIysAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI21vZHVsZS14bWwuZG9tWAEAAAAtdHIkKwAAWAcAAABpbnNwZWN0ciUrAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luc3BlY3QuaHRtbCNtb2R1bGUtaW5zcGVjdFgBAAAALXRyJisAAFgGAAAAc2lnbmFscicrAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NpZ25hbC5odG1sI21vZHVsZS1zaWduYWxYAQAAAC10cigrAABYFAAAAG11bHRpcHJvY2Vzc2luZy5wb29scikrAAAoamkBAABqagEAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI21vZHVsZS1tdWx0aXByb2Nlc3NpbmcucG9vbFgBAAAALXRyKisAAFgMAAAAZW1haWwuaGVhZGVycisrAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLmhlYWRlci5odG1sI21vZHVsZS1lbWFpbC5oZWFkZXJYAQAAAC10ciwrAABYCwAAAG1hY3Jlc291cmNlci0rAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuZG9jLmh0bWwjbW9kdWxlLW1hY3Jlc291cmNlWAEAAAAtdHIuKwAAWAcAAABzZ21sbGlici8rAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NnbWxsaWIuaHRtbCNtb2R1bGUtc2dtbGxpYlgBAAAALXRyMCsAAFgIAAAAdGVtcGZpbGVyMSsAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGVtcGZpbGUuaHRtbCNtb2R1bGUtdGVtcGZpbGVYAQAAAC10cjIrAABYBwAAAGF1dG9HSUxyMysAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXV0b2dpbC5odG1sI21vZHVsZS1hdXRvR0lMWAEAAAAtdHI0KwAAWAgAAABTdHJpbmdJT3I1KwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmdpby5odG1sI21vZHVsZS1TdHJpbmdJT1gBAAAALXRyNisAAFgHAAAAaW1nZmlsZXI3KwAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWdmaWxlLmh0bWwjbW9kdWxlLWltZ2ZpbGVYAQAAAC10cjgrAABYBgAAAGNvZGVjc3I5KwAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNtb2R1bGUtY29kZWNzWAEAAAAtdHI6KwAAWAwAAABtb2R1bGVmaW5kZXJyOysAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbW9kdWxlZmluZGVyLmh0bWwjbW9kdWxlLW1vZHVsZWZpbmRlclgBAAAALXRyPCsAAFgJAAAAaW1wb3J0bGlicj0rAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI21vZHVsZS1pbXBvcnRsaWJYAQAAAC10cj4rAABYFgAAAGRpc3R1dGlscy5lbXhjY29tcGlsZXJyPysAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmVteGNjb21waWxlclgBAAAALXRyQCsAAFgLAAAAcGlja2xldG9vbHNyQSsAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGlja2xldG9vbHMuaHRtbCNtb2R1bGUtcGlja2xldG9vbHNYAQAAAC10ckIrAABYBgAAAHJmYzgyMnJDKwAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZmM4MjIuaHRtbCNtb2R1bGUtcmZjODIyWAEAAAAtdHJEKwAAWAcAAAB3ZWFrcmVmckUrAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dlYWtyZWYuaHRtbCNtb2R1bGUtd2Vha3JlZlgBAAAALXRyRisAAFgGAAAAcGFyc2VyckcrAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BhcnNlci5odG1sI21vZHVsZS1wYXJzZXJYAQAAAC10ckgrAABYCwAAAENhcmJvbi5MaXN0ckkrAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uTGlzdFgBAAAALXRySisAAFgOAAAAZGlzdHV0aWxzLmNvcmVySysAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmNvcmVYAQAAAC10ckwrAABYAwAAAG1kNXJNKwAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tZDUuaHRtbCNtb2R1bGUtbWQ1WAEAAAAtdHJOKwAAWAkAAABkaXN0dXRpbHNyTysAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzdHV0aWxzLmh0bWwjbW9kdWxlLWRpc3R1dGlsc1gBAAAALXRyUCsAAFgMAAAAQ2FyYm9uLk1lbnVzclErAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uTWVudXNYAQAAAC10clIrAABYHQAAAGRpc3R1dGlscy5jb21tYW5kLmluc3RhbGxfbGliclMrAAAoamkBAABqagEAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjbW9kdWxlLWRpc3R1dGlscy5jb21tYW5kLmluc3RhbGxfbGliWAEAAAAtdHJUKwAAWAkAAAB6aXBpbXBvcnRyVSsAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemlwaW1wb3J0Lmh0bWwjbW9kdWxlLXppcGltcG9ydFgBAAAALXRyVisAAFgMAAAAQ2FyYm9uLkZpbGVzclcrAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uRmlsZXNYAQAAAC10clgrAABYBwAAAG5udHBsaWJyWSsAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbm50cGxpYi5odG1sI21vZHVsZS1ubnRwbGliWAEAAAAtdHJaKwAAWAcAAABnZXRwYXNzclsrAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dldHBhc3MuaHRtbCNtb2R1bGUtZ2V0cGFzc1gBAAAALXRyXCsAAFgTAAAAQ2FyYm9uLkNhcmJvbkV2ZW50c3JdKwAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYXJib24uaHRtbCNtb2R1bGUtQ2FyYm9uLkNhcmJvbkV2ZW50c1gBAAAALXRyXisAAFgFAAAAaGVhcHFyXysAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaGVhcHEuaHRtbCNtb2R1bGUtaGVhcHFYAQAAAC10cmArAABYEQAAAENhcmJvbi5BcHBlYXJhbmNlcmErAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uQXBwZWFyYW5jZVgBAAAALXRyYisAAFgGAAAAREVWSUNFcmMrAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dsLmh0bWwjbW9kdWxlLURFVklDRVgBAAAALXRyZCsAAFgJAAAAbXVsdGlmaWxlcmUrAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpZmlsZS5odG1sI21vZHVsZS1tdWx0aWZpbGVYAQAAAC10cmYrAABYBwAAAGRlY2ltYWxyZysAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI21vZHVsZS1kZWNpbWFsWAEAAAAtdHJoKwAAWBsAAABkaXN0dXRpbHMuY29tbWFuZC5idWlsZF9leHRyaSsAAChqaQEAAGpqAQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmNvbW1hbmQuYnVpbGRfZXh0WAEAAAAtdHJqKwAAWAcAAABtYWlsYm94cmsrAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtb2R1bGUtbWFpbGJveFgBAAAALXRybCsAAFgNAAAAQ2FyYm9uLkZvbGRlcnJtKwAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYXJib24uaHRtbCNtb2R1bGUtQ2FyYm9uLkZvbGRlclgBAAAALXRybisAAFgDAAAAc3Nscm8rAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI21vZHVsZS1zc2xYAQAAAC10cnArAABYCAAAAGNQcm9maWxlcnErAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Byb2ZpbGUuaHRtbCNtb2R1bGUtY1Byb2ZpbGVYAQAAAC10cnIrAABYGwAAAGRpc3R1dGlscy5jb21tYW5kLmJkaXN0X3JwbXJzKwAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMuY29tbWFuZC5iZGlzdF9ycG1YAQAAAC10cnQrAABYBgAAAHNlbGVjdHJ1KwAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZWxlY3QuaHRtbCNtb2R1bGUtc2VsZWN0WAEAAAAtdHJ2KwAAWAoAAABIVE1MUGFyc2VycncrAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0bWxwYXJzZXIuaHRtbCNtb2R1bGUtSFRNTFBhcnNlclgBAAAALXRyeCsAAFgKAAAAQ2FyYm9uLlNuZHJ5KwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYXJib24uaHRtbCNtb2R1bGUtQ2FyYm9uLlNuZFgBAAAALXRyeisAAFgFAAAAcGlwZXNyeysAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGlwZXMuaHRtbCNtb2R1bGUtcGlwZXNYAQAAAC10cnwrAABYHgAAAGRpc3R1dGlscy5jb21tYW5kLmluc3RhbGxfZGF0YXJ9KwAAKGppAQAAamoBAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMuY29tbWFuZC5pbnN0YWxsX2RhdGFYAQAAAC10cn4rAABYFgAAAENhcmJvbi5Db250cm9sQWNjZXNzb3JyfysAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FyYm9uLmh0bWwjbW9kdWxlLUNhcmJvbi5Db250cm9sQWNjZXNzb3JYAQAAAC10coArAABYCQAAAGZpbGVpbnB1dHKBKwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9maWxlaW5wdXQuaHRtbCNtb2R1bGUtZmlsZWlucHV0WAEAAAAtdHKCKwAAWAYAAABtc2lsaWJygysAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXNpbGliLmh0bWwjbW9kdWxlLW1zaWxpYlgBAAAALXRyhCsAAFgOAAAAZGlzdHV0aWxzLnV0aWxyhSsAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLnV0aWxYAQAAAC10coYrAABYBwAAAHNxbGl0ZTNyhysAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3FsaXRlMy5odG1sI21vZHVsZS1zcWxpdGUzWAEAAAAtdHKIKwAAWAUAAABzdW5hdXKJKwAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdW5hdS5odG1sI21vZHVsZS1zdW5hdVgBAAAALXRyiisAAFgHAAAAbWFyc2hhbHKLKwAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYXJzaGFsLmh0bWwjbW9kdWxlLW1hcnNoYWxYAQAAAC10cowrAABYCgAAAF9fZnV0dXJlX19yjSsAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvX19mdXR1cmVfXy5odG1sI21vZHVsZS1fX2Z1dHVyZV9fWAEAAAAtdHKOKwAAWBUAAAB3c2dpcmVmLnNpbXBsZV9zZXJ2ZXJyjysAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd3NnaXJlZi5odG1sI21vZHVsZS13c2dpcmVmLnNpbXBsZV9zZXJ2ZXJYAQAAAC10cpArAABYBgAAAHBvcGVuMnKRKwAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wb3BlbjIuaHRtbCNtb2R1bGUtcG9wZW4yWAEAAAAtdHKSKwAAWBIAAABkaXN0dXRpbHMuZGlyX3V0aWxykysAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmRpcl91dGlsWAEAAAAtdHKUKwAAWAkAAABDYXJib24uQUVylSsAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FyYm9uLmh0bWwjbW9kdWxlLUNhcmJvbi5BRVgBAAAALXRylisAAFgZAAAAZGlzdHV0aWxzLmN5Z3dpbmNjb21waWxlcnKXKwAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMuY3lnd2luY2NvbXBpbGVyWAEAAAAtdHKYKwAAWAcAAABjUGlja2xlcpkrAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BpY2tsZS5odG1sI21vZHVsZS1jUGlja2xlWAEAAAAtdHKaKwAAWAkAAABDYXJib24uQUhymysAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FyYm9uLmh0bWwjbW9kdWxlLUNhcmJvbi5BSFgBAAAALXRynCsAAFgHAAAAdGFyZmlsZXKdKwAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjbW9kdWxlLXRhcmZpbGVYAQAAAC10cp4rAABYEAAAAHdzZ2lyZWYudmFsaWRhdGVynysAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd3NnaXJlZi5odG1sI21vZHVsZS13c2dpcmVmLnZhbGlkYXRlWAEAAAAtdHKgKwAAWA8AAABDYXJib24uT1NBY29uc3RyoSsAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FyYm9uLmh0bWwjbW9kdWxlLUNhcmJvbi5PU0Fjb25zdFgBAAAALXRyoisAAFgEAAAAZ3ppcHKjKwAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nemlwLmh0bWwjbW9kdWxlLWd6aXBYAQAAAC10cqQrAABYAwAAAGNtZHKlKwAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jbWQuaHRtbCNtb2R1bGUtY21kWAEAAAAtdHKmKwAAWAUAAAB0cmFjZXKnKwAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90cmFjZS5odG1sI21vZHVsZS10cmFjZVgBAAAALXRyqCsAAFgPAAAAQ2FyYm9uLklCQ2FyYm9ucqkrAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uSUJDYXJib25YAQAAAC10cqorAABYCwAAAHZpZGVvcmVhZGVycqsrAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuZG9jLmh0bWwjbW9kdWxlLXZpZGVvcmVhZGVyWAEAAAAtdHKsKwAAWAUAAABNYWNPU3KtKwAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWNvcy5odG1sI21vZHVsZS1NYWNPU1gBAAAALXRyrisAAFgFAAAAcmV4ZWNyrysAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmV4ZWMuaHRtbCNtb2R1bGUtcmV4ZWNYAQAAAC10crArAABYBgAAAGFueWRibXKxKwAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hbnlkYm0uaHRtbCNtb2R1bGUtYW55ZGJtWAEAAAAtdHKyKwAAWAgAAAB3YXJuaW5nc3KzKwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93YXJuaW5ncy5odG1sI21vZHVsZS13YXJuaW5nc1gBAAAALXRytCsAAFgLAAAAY29sbGVjdGlvbnNytSsAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNtb2R1bGUtY29sbGVjdGlvbnNYAQAAAC10crYrAABYEQAAAGRpc3R1dGlscy5jb21tYW5kcrcrAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjbW9kdWxlLWRpc3R1dGlscy5jb21tYW5kWAEAAAAtdHK4KwAAWAgAAAB0YWJuYW5ueXK5KwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YWJuYW5ueS5odG1sI21vZHVsZS10YWJuYW5ueVgBAAAALXRyuisAAFgMAAAAY3Vyc2VzLnBhbmVscrsrAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5wYW5lbC5odG1sI21vZHVsZS1jdXJzZXMucGFuZWxYAQAAAC10crwrAABYAgAAAHV1cr0rAAAoamkBAABqagEAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3V1Lmh0bWwjbW9kdWxlLXV1WAEAAAAtdHK+KwAAWA8AAABkaXN0dXRpbHMuc3Bhd25yvysAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLnNwYXduWAEAAAAtdHLAKwAAWAoAAABlbWFpbC5taW1lcsErAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLm1pbWUuaHRtbCNtb2R1bGUtZW1haWwubWltZVgBAAAALXRywisAAFgRAAAAeG1sLnBhcnNlcnMuZXhwYXRywysAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlleHBhdC5odG1sI21vZHVsZS14bWwucGFyc2Vycy5leHBhdFgBAAAALXRyxCsAAFgGAAAAc3RyaW5ncsUrAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZy5odG1sI21vZHVsZS1zdHJpbmdYAQAAAC10csYrAABYDAAAAFNvY2tldFNlcnZlcnLHKwAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXRzZXJ2ZXIuaHRtbCNtb2R1bGUtU29ja2V0U2VydmVyWAEAAAAtdHLIKwAAWAoAAABDYXJib24uV2lucskrAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uV2luWAEAAAAtdHLKKwAAWAgAAABwbGF0Zm9ybXLLKwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wbGF0Zm9ybS5odG1sI21vZHVsZS1wbGF0Zm9ybVgBAAAALXRyzCsAAFgDAAAAZmxwcs0rAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZsLmh0bWwjbW9kdWxlLWZscFgBAAAALXRyzisAAFgLAAAAU1VOQVVESU9ERVZyzysAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VuYXVkaW8uaHRtbCNtb2R1bGUtU1VOQVVESU9ERVZYAQAAAC10ctArAABYDgAAAGxvZ2dpbmcuY29uZmlnctErAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuY29uZmlnLmh0bWwjbW9kdWxlLWxvZ2dpbmcuY29uZmlnWAEAAAAtdHLSKwAAWA8AAABkdW1teV90aHJlYWRpbmdy0ysAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZHVtbXlfdGhyZWFkaW5nLmh0bWwjbW9kdWxlLWR1bW15X3RocmVhZGluZ1gBAAAALXRy1CsAAFgJAAAAQ2FyYm9uLlRFctUrAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uVEVYAQAAAC10ctYrAABYFwAAAGRpc3R1dGlscy5jb21tYW5kLnNkaXN0ctcrAAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjbW9kdWxlLWRpc3R1dGlscy5jb21tYW5kLnNkaXN0WAEAAAAtdHLYKwAAWA8AAAB4bWwuZG9tLm1pbmlkb21y2SsAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5taW5pZG9tLmh0bWwjbW9kdWxlLXhtbC5kb20ubWluaWRvbVgBAAAALXRy2isAAFgPAAAAeG1sLnNheC5oYW5kbGVyctsrAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5odG1sI21vZHVsZS14bWwuc2F4LmhhbmRsZXJYAQAAAC10ctwrAABYCgAAAENhcmJvbi5EbGdy3SsAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FyYm9uLmh0bWwjbW9kdWxlLUNhcmJvbi5EbGdYAQAAAC10ct4rAABYBwAAAGZubWF0Y2hy3ysAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZm5tYXRjaC5odG1sI21vZHVsZS1mbm1hdGNoWAEAAAAtdHLgKwAAWAgAAABjb21waWxlcnLhKwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb21waWxlci5odG1sI21vZHVsZS1jb21waWxlclgBAAAALXRy4isAAFgGAAAAc29ja2V0cuMrAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldC5odG1sI21vZHVsZS1zb2NrZXRYAQAAAC10cuQrAABYDQAAAGRpc3R1dGlscy5jbWRy5SsAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmNtZFgBAAAALXRy5isAAFgJAAAAQ2FyYm9uLkZtcucrAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhcmJvbi5odG1sI21vZHVsZS1DYXJib24uRm1YAQAAAC10cugrAABYAgAAAGNkcukrAAAoamkBAABqagEAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NkLmh0bWwjbW9kdWxlLWNkWAEAAAAtdHLqKwAAWAYAAABtaW1pZnly6ysAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWltaWZ5Lmh0bWwjbW9kdWxlLW1pbWlmeVgBAAAALXRy7CsAAFgPAAAAZW1haWwuZ2VuZXJhdG9ycu0rAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLmdlbmVyYXRvci5odG1sI21vZHVsZS1lbWFpbC5nZW5lcmF0b3JYAQAAAC10cu4rAABYBwAAAHVybGxpYjJy7ysAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI21vZHVsZS11cmxsaWIyWAEAAAAtdHLwKwAAWAgAAABjb2xvcnN5c3LxKwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2xvcnN5cy5odG1sI21vZHVsZS1jb2xvcnN5c1gBAAAALXRy8isAAFgIAAAAY29weV9yZWdy8ysAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29weV9yZWcuaHRtbCNtb2R1bGUtY29weV9yZWdYAQAAAC10cvQrAABYDQAAAGhvdHNob3Quc3RhdHNy9SsAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaG90c2hvdC5odG1sI21vZHVsZS1ob3RzaG90LnN0YXRzWAEAAAAtdHL2KwAAWAUAAABhcnJheXL3KwAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hcnJheS5odG1sI21vZHVsZS1hcnJheVgBAAAALXRy+CsAAFgEAAAAc2V0c3L5KwAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZXRzLmh0bWwjbW9kdWxlLXNldHNYAQAAAC10cvorAABYBgAAAGN1cnNlc3L7KwAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNtb2R1bGUtY3Vyc2VzWAEAAAAtdHL8KwAAWAwAAABDYXJib24uSWNvbnNy/SsAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FyYm9uLmh0bWwjbW9kdWxlLUNhcmJvbi5JY29uc1gBAAAALXRy/isAAHVYBwAAAHB5OmRhdGFy/ysAAH1yACwAAChYKAAAAHhtbC5zYXguaGFuZGxlci5wcm9wZXJ0eV9sZXhpY2FsX2hhbmRsZXJyASwAAChqaQEAAGpqAQAAWF8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLnByb3BlcnR5X2xleGljYWxfaGFuZGxlclgBAAAALXRyAiwAAFgkAAAAc3VuYXUuQVVESU9fRklMRV9FTkNPRElOR19BRFBDTV9HNzIxcgMsAAAoamkBAABqagEAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUuQVVESU9fRklMRV9FTkNPRElOR19BRFBDTV9HNzIxWAEAAAAtdHIELAAAWAkAAABvcy5PX1JEV1JyBSwAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5PX1JEV1JYAQAAAC10cgYsAABYCAAAAGNkLmlkZW50cgcsAAAoamkBAABqagEAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NkLmh0bWwjY2QuaWRlbnRYAQAAAC10cggsAABYCwAAAHRva2VuLkVRVUFMcgksAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uRVFVQUxYAQAAAC10cgosAABYIgAAAHN1bmF1LkFVRElPX0ZJTEVfRU5DT0RJTkdfTElORUFSXzhyCywAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VuYXUuaHRtbCNzdW5hdS5BVURJT19GSUxFX0VOQ09ESU5HX0xJTkVBUl84WAEAAAAtdHIMLAAAWBAAAABzdGF0dmZzLkZfQkFWQUlMcg0sAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXR2ZnMuaHRtbCNzdGF0dmZzLkZfQkFWQUlMWAEAAAAtdHIOLAAAWBIAAABzdGF0LlVGX0NPTVBSRVNTRURyDywAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuVUZfQ09NUFJFU1NFRFgBAAAALXRyECwAAFgUAAAAc3lzLmZsb2F0X3JlcHJfc3R5bGVyESwAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmZsb2F0X3JlcHJfc3R5bGVYAQAAAC10chIsAABYDAAAAGVycm5vLkVTUElQRXITLAAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVTUElQRVgBAAAALXRyFCwAAFgMAAAAc3RhdC5TX0lSRUFEchUsAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNfSVJFQURYAQAAAC10chYsAABYDwAAAGVycm5vLkVIT1NURE9XTnIXLAAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVIT1NURE9XTlgBAAAALXRyGCwAAFgNAAAAZXJybm8uRU5PREFUQXIZLAAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVOT0RBVEFYAQAAAC10chosAABYDAAAAHRva2VuLlNUUklOR3IbLAAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLlNUUklOR1gBAAAALXRyHCwAAFgNAAAAc3RhdC5TVF9DVElNRXIdLAAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TVF9DVElNRVgBAAAALXRyHiwAAFgKAAAAb3MuZW52aXJvbnIfLAAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLmVudmlyb25YAQAAAC10ciAsAABYDQAAAHR5cGVzLkludFR5cGVyISwAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHlwZXMuaHRtbCN0eXBlcy5JbnRUeXBlWAEAAAAtdHIiLAAAWA0AAAByZS5JR05PUkVDQVNFciMsAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlLmh0bWwjcmUuSUdOT1JFQ0FTRVgBAAAALXRyJCwAAFgQAAAAZ2MuREVCVUdfU0FWRUFMTHIlLAAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nYy5odG1sI2djLkRFQlVHX1NBVkVBTExYAQAAAC10ciYsAABYFAAAAHNzbC5QUk9UT0NPTF9UTFN2MV8xcicsAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5QUk9UT0NPTF9UTFN2MV8xWAEAAAAtdHIoLAAAWBQAAABzc2wuUFJPVE9DT0xfVExTdjFfMnIpLAAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuUFJPVE9DT0xfVExTdjFfMlgBAAAALXRyKiwAAFgfAAAAZG9jdGVzdC5JR05PUkVfRVhDRVBUSU9OX0RFVEFJTHIrLAAAKGppAQAAamoBAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5JR05PUkVfRVhDRVBUSU9OX0RFVEFJTFgBAAAALXRyLCwAAFgXAAAAc3FsaXRlMy5QQVJTRV9ERUNMVFlQRVNyLSwAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuUEFSU0VfREVDTFRZUEVTWAEAAAAtdHIuLAAAWAgAAABzeXMuYXJndnIvLAAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNzeXMuYXJndlgBAAAALXRyMCwAAFgZAAAAX3dpbnJlZy5SRUdfUkVTT1VSQ0VfTElTVHIxLAAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjX3dpbnJlZy5SRUdfUkVTT1VSQ0VfTElTVFgBAAAALXRyMiwAAFgkAAAAeG1sLnNheC5oYW5kbGVyLmZlYXR1cmVfZXh0ZXJuYWxfZ2VzcjMsAAAoamkBAABqagEAAFhbAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5odG1sI3htbC5zYXguaGFuZGxlci5mZWF0dXJlX2V4dGVybmFsX2dlc1gBAAAALXRyNCwAAFgOAAAAZXJybm8uRU5FVERPV05yNSwAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTkVURE9XTlgBAAAALXRyNiwAAFgTAAAAbWltZXR5cGVzLnR5cGVzX21hcHI3LAAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW1ldHlwZXMuaHRtbCNtaW1ldHlwZXMudHlwZXNfbWFwWAEAAAAtdHI4LAAAWBQAAABjU3RyaW5nSU8uT3V0cHV0VHlwZXI5LAAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmdpby5odG1sI2NTdHJpbmdJTy5PdXRwdXRUeXBlWAEAAAAtdHI6LAAAWBcAAABfd2lucmVnLktFWV9XT1c2NF82NEtFWXI7LAAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjX3dpbnJlZy5LRVlfV09XNjRfNjRLRVlYAQAAAC10cjwsAABYJgAAAHN1bmF1LkFVRElPX0ZJTEVfRU5DT0RJTkdfQURQQ01fRzcyM181cj0sAAAoamkBAABqagEAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUuQVVESU9fRklMRV9FTkNPRElOR19BRFBDTV9HNzIzXzVYAQAAAC10cj4sAABYDQAAAGVycm5vLkVSRU1PVEVyPywAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FUkVNT1RFWAEAAAAtdHJALAAAWAwAAAB0b2tlbi5JTkRFTlRyQSwAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5JTkRFTlRYAQAAAC10ckIsAABYDQAAAGNvZGVjcy5CT01fTEVyQywAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLkJPTV9MRVgBAAAALXRyRCwAAFgXAAAAeG1sLmRvbS5YTUxOU19OQU1FU1BBQ0VyRSwAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uWE1MTlNfTkFNRVNQQUNFWAEAAAAtdHJGLAAAWAwAAABlcnJuby5FTk9TUENyRywAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTk9TUENYAQAAAC10ckgsAABYEgAAAHNzbC5WRVJJRllfREVGQVVMVHJJLAAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuVkVSSUZZX0RFRkFVTFRYAQAAAC10ckosAABYHgAAAGRvY3Rlc3QuRE9OVF9BQ0NFUFRfVFJVRV9GT1JfMXJLLAAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5ET05UX0FDQ0VQVF9UUlVFX0ZPUl8xWAEAAAAtdHJMLAAAWAwAAABlcnJuby5FTk9UVFlyTSwAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTk9UVFlYAQAAAC10ck4sAABYDQAAAHN5cy5jb3B5cmlnaHRyTywAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmNvcHlyaWdodFgBAAAALXRyUCwAAFgQAAAAX3dpbnJlZy5LRVlfUkVBRHJRLAAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjX3dpbnJlZy5LRVlfUkVBRFgBAAAALXRyUiwAAFgMAAAAZXJybm8uRU5PREVWclMsAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRU5PREVWWAEAAAAtdHJULAAAWA8AAABzb2NrZXQuaGFzX2lwdjZyVSwAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0Lmhhc19pcHY2WAEAAAAtdHJWLAAAWA4AAABzdGF0LlVGX0hJRERFTnJXLAAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5VRl9ISURERU5YAQAAAC10clgsAABYDQAAAGVycm5vLkVOQVZBSUxyWSwAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTkFWQUlMWAEAAAAtdHJaLAAAWAsAAABkaXMuaGFzbmFtZXJbLAAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNkaXMuaGFzbmFtZVgBAAAALXRyXCwAAFgLAAAAZGlzLmhhc2pyZWxyXSwAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjZGlzLmhhc2pyZWxYAQAAAC10cl4sAABYEAAAAHN0YXQuU0ZfTk9VTkxJTktyXywAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU0ZfTk9VTkxJTktYAQAAAC10cmAsAABYEAAAAHN0cmluZy51cHBlcmNhc2VyYSwAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLnVwcGVyY2FzZVgBAAAALXRyYiwAAFgNAAAAZXJybm8uRU5PVERJUnJjLAAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVOT1RESVJYAQAAAC10cmQsAABYCwAAAHRva2VuLkFNUEVScmUsAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uQU1QRVJYAQAAAC10cmYsAABYCQAAAHN5cy5mbGFnc3JnLAAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNzeXMuZmxhZ3NYAQAAAC10cmgsAABYFAAAAHNzbC5PUF9TSU5HTEVfREhfVVNFcmksAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5PUF9TSU5HTEVfREhfVVNFWAEAAAAtdHJqLAAAWA8AAABzcWxpdGUzLnZlcnNpb25yaywAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMudmVyc2lvblgBAAAALXRybCwAAFgKAAAAZGlzLmNtcF9vcHJtLAAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNkaXMuY21wX29wWAEAAAAtdHJuLAAAWBoAAABzc2wuT1BFTlNTTF9WRVJTSU9OX05VTUJFUnJvLAAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuT1BFTlNTTF9WRVJTSU9OX05VTUJFUlgBAAAALXRycCwAAFgYAAAAc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzcnEsAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5idWlsdGluX21vZHVsZV9uYW1lc1gBAAAALXRyciwAAFgSAAAAZXJybm8uRUNPTk5SRUZVU0VEcnMsAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUNPTk5SRUZVU0VEWAEAAAAtdHJ0LAAAWA4AAABlcnJuby5FU1RSUElQRXJ1LAAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVTVFJQSVBFWAEAAAAtdHJ2LAAAWBIAAAB0eXBlcy5FbGxpcHNpc1R5cGVydywAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHlwZXMuaHRtbCN0eXBlcy5FbGxpcHNpc1R5cGVYAQAAAC10cngsAABYFAAAAG1pbWV0eXBlcy5rbm93bmZpbGVzcnksAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbWV0eXBlcy5odG1sI21pbWV0eXBlcy5rbm93bmZpbGVzWAEAAAAtdHJ6LAAAWA8AAAB0b2tlbi5MRUZUU0hJRlRyeywAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5MRUZUU0hJRlRYAQAAAC10cnwsAABYDQAAAGxvY2FsZS5OT0VYUFJyfSwAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLk5PRVhQUlgBAAAALXRyfiwAAFgSAAAAbG9jYWxlLkxDX01PTkVUQVJZcn8sAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvY2FsZS5odG1sI2xvY2FsZS5MQ19NT05FVEFSWVgBAAAALXRygCwAAFgLAAAAZXJybm8uRVJPRlNygSwAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FUk9GU1gBAAAALXRygiwAAFgTAAAAUHlfVFBGTEFHU19IRUFQVFlQRXKDLAAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI1B5X1RQRkxBR1NfSEVBUFRZUEVYAQAAAC10coQsAABYDgAAAHR5cGVzLlR5cGVUeXBlcoUsAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R5cGVzLmh0bWwjdHlwZXMuVHlwZVR5cGVYAQAAAC10coYsAABYDgAAAGVycm5vLkVSRVNUQVJUcocsAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRVJFU1RBUlRYAQAAAC10cogsAABYEAAAAGdjLkRFQlVHX09CSkVDVFNyiSwAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2MuaHRtbCNnYy5ERUJVR19PQkpFQ1RTWAEAAAAtdHKKLAAAWAcAAABvcy5YX09LcossAAAoamkBAABqagEAAFgxAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuWF9PS1gBAAAALXRyjCwAAFgVAAAAc2lnbmFsLklUSU1FUl9WSVJUVUFMco0sAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NpZ25hbC5odG1sI3NpZ25hbC5JVElNRVJfVklSVFVBTFgBAAAALXRyjiwAAFgOAAAAb3MuT19ESVJFQ1RPUllyjywAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5PX0RJUkVDVE9SWVgBAAAALXRykCwAAFgQAAAAZGF0ZXRpbWUuTUlOWUVBUnKRLAAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLk1JTllFQVJYAQAAAC10cpIsAABYCgAAAHRva2VuLlBMVVNykywAAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5QTFVTWAEAAAAtdHKULAAAWAwAAABlcnJuby5FRFFVT1RylSwAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FRFFVT1RYAQAAAC10cpYsAABYHQAAAGh0bWxlbnRpdHlkZWZzLmNvZGVwb2ludDJuYW1lcpcsAAAoamkBAABqagEAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0bWxsaWIuaHRtbCNodG1sZW50aXR5ZGVmcy5jb2RlcG9pbnQybmFtZVgBAAAALXRymCwAAFgdAAAAaHRtbGVudGl0eWRlZnMubmFtZTJjb2RlcG9pbnRymSwAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHRtbGxpYi5odG1sI2h0bWxlbnRpdHlkZWZzLm5hbWUyY29kZXBvaW50WAEAAAAtdHKaLAAAWAkAAABvcy5hbHRzZXBymywAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5hbHRzZXBYAQAAAC10cpwsAABYDgAAAGxvY2FsZS5EX1RfRk1Ucp0sAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvY2FsZS5odG1sI2xvY2FsZS5EX1RfRk1UWAEAAAAtdHKeLAAAWBYAAABzcWxpdGUzLlBBUlNFX0NPTE5BTUVTcp8sAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLlBBUlNFX0NPTE5BTUVTWAEAAAAtdHKgLAAAWBgAAAB3aW5zb3VuZC5NQl9JQ09OUVVFU1RJT05yoSwAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2luc291bmQuaHRtbCN3aW5zb3VuZC5NQl9JQ09OUVVFU1RJT05YAQAAAC10cqIsAABYEwAAAGNvZGVjcy5CT01fVVRGMzJfTEVyoywAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLkJPTV9VVEYzMl9MRVgBAAAALXRypCwAAFgMAAAAZXJybm8uRVNUQUxFcqUsAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRVNUQUxFWAEAAAAtdHKmLAAAWBgAAABoYXNobGliLmhhc2guZGlnZXN0X3NpemVypywAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaGFzaGxpYi5odG1sI2hhc2hsaWIuaGFzaC5kaWdlc3Rfc2l6ZVgBAAAALXRyqCwAAFgQAAAAVGtpbnRlci5SRUFEQUJMRXKpLAAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90a2ludGVyLmh0bWwjVGtpbnRlci5SRUFEQUJMRVgBAAAALXRyqiwAAFgTAAAAdHlwZXMuRGljdFByb3h5VHlwZXKrLAAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90eXBlcy5odG1sI3R5cGVzLkRpY3RQcm94eVR5cGVYAQAAAC10cqwsAABYFQAAAHNvY2tldC5TT0NLX1NFUVBBQ0tFVHKtLAAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuU09DS19TRVFQQUNLRVRYAQAAAC10cq4sAABYDAAAAHNzbC5IQVNfRUNESHKvLAAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuSEFTX0VDREhYAQAAAC10crAsAABYCQAAAG9zLmN1cmRpcnKxLAAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLmN1cmRpclgBAAAALXRysiwAAFgfAAAAZGlzdHV0aWxzLnN5c2NvbmZpZy5FWEVDX1BSRUZJWHKzLAAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5zeXNjb25maWcuRVhFQ19QUkVGSVhYAQAAAC10crQsAABYDQAAAG9zLkVYX05PSU5QVVRytSwAAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5FWF9OT0lOUFVUWAEAAAAtdHK2LAAAWAkAAAB0b2tlbi5ET1RytywAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5ET1RYAQAAAC10crgsAABYEQAAAGVycm5vLkVJTlBST0dSRVNTcrksAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUlOUFJPR1JFU1NYAQAAAC10crosAABYGgAAAF93aW5yZWcuSEtFWV9MT0NBTF9NQUNISU5FcrssAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLkhLRVlfTE9DQUxfTUFDSElORVgBAAAALXRyvCwAAFgSAAAAcmVzb3VyY2UuUkxJTUlUX0FTcr0sAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Jlc291cmNlLmh0bWwjcmVzb3VyY2UuUkxJTUlUX0FTWAEAAAAtdHK+LAAAWBwAAAB4bWwuc2F4LmhhbmRsZXIuYWxsX2ZlYXR1cmVzcr8sAAAoamkBAABqagEAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5odG1sI3htbC5zYXguaGFuZGxlci5hbGxfZmVhdHVyZXNYAQAAAC10csAsAABYHAAAAGhhc2hsaWIuYWxnb3JpdGhtc19hdmFpbGFibGVywSwAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaGFzaGxpYi5odG1sI2hhc2hsaWIuYWxnb3JpdGhtc19hdmFpbGFibGVYAQAAAC10csIsAABYCAAAAGNtYXRoLnBpcsMsAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NtYXRoLmh0bWwjY21hdGgucGlYAQAAAC10csQsAABYCwAAAG9zLlBfTk9XQUlUcsUsAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuUF9OT1dBSVRYAQAAAC10csYsAABYDQAAAG9zLk9fTk9GT0xMT1dyxywAAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5PX05PRk9MTE9XWAEAAAAtdHLILAAAWA4AAABzeXMuaGV4dmVyc2lvbnLJLAAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNzeXMuaGV4dmVyc2lvblgBAAAALXRyyiwAAFgMAAAAZXJybm8uRU5PTVNHcsssAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRU5PTVNHWAEAAAAtdHLMLAAAWAYAAABNRVRIX09yzSwAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N0cnVjdHVyZXMuaHRtbCNNRVRIX09YAQAAAC10cs4sAABYDgAAAHRva2VuLk5PVEVRVUFMcs8sAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uTk9URVFVQUxYAQAAAC10ctAsAABYEgAAAHNpZ25hbC5JVElNRVJfUkVBTHLRLAAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaWduYWwuaHRtbCNzaWduYWwuSVRJTUVSX1JFQUxYAQAAAC10ctIsAABYHwAAAHN1bmF1LkFVRElPX0ZJTEVfRU5DT0RJTkdfRkxPQVRy0ywAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VuYXUuaHRtbCNzdW5hdS5BVURJT19GSUxFX0VOQ09ESU5HX0ZMT0FUWAEAAAAtdHLULAAAWCAAAABzdW5hdS5BVURJT19GSUxFX0VOQ09ESU5HX0RPVUJMRXLVLAAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdW5hdS5odG1sI3N1bmF1LkFVRElPX0ZJTEVfRU5DT0RJTkdfRE9VQkxFWAEAAAAtdHLWLAAAWAsAAABvcy5PX0JJTkFSWXLXLAAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLk9fQklOQVJZWAEAAAAtdHLYLAAAWA8AAABtc3ZjcnQuTEtfVU5MQ0ty2SwAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXN2Y3J0Lmh0bWwjbXN2Y3J0LkxLX1VOTENLWAEAAAAtdHLaLAAAWCoAAAB4bWwuc2F4LmhhbmRsZXIuZmVhdHVyZV9uYW1lc3BhY2VfcHJlZml4ZXNy2ywAAChqaQEAAGpqAQAAWGEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLmZlYXR1cmVfbmFtZXNwYWNlX3ByZWZpeGVzWAEAAAAtdHLcLAAAWBIAAABlcnJuby5FSE9TVFVOUkVBQ0hy3SwAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FSE9TVFVOUkVBQ0hYAQAAAC10ct4sAABYCgAAAHN5cy5zdGRlcnJy3ywAAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLnN0ZGVyclgBAAAALXRy4CwAAFgLAAAAZXJybm8uRUxPT1By4SwAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTE9PUFgBAAAALXRy4iwAAFgSAAAAZXJybm8uRUNPTk5BQk9SVEVEcuMsAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUNPTk5BQk9SVEVEWAEAAAAtdHLkLAAAWCYAAABfd2lucmVnLlJFR19SRVNPVVJDRV9SRVFVSVJFTUVOVFNfTElTVHLlLAAAKGppAQAAamoBAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjX3dpbnJlZy5SRUdfUkVTT1VSQ0VfUkVRVUlSRU1FTlRTX0xJU1RYAQAAAC10cuYsAABYEAAAAFRraW50ZXIuV1JJVEFCTEVy5ywAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGtpbnRlci5odG1sI1RraW50ZXIuV1JJVEFCTEVYAQAAAC10cugsAABYDgAAAGNzdi5RVU9URV9OT05FcuksAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nzdi5odG1sI2Nzdi5RVU9URV9OT05FWAEAAAAtdHLqLAAAWA0AAABpbXAuUFlfRlJPWkVOcussAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltcC5odG1sI2ltcC5QWV9GUk9aRU5YAQAAAC10cuwsAABYFgAAAHNxbGl0ZTMuc3FsaXRlX3ZlcnNpb25y7SwAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuc3FsaXRlX3ZlcnNpb25YAQAAAC10cu4sAABYDAAAAHN0YXQuU19JUlVTUnLvLAAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TX0lSVVNSWAEAAAAtdHLwLAAAWBoAAABQeV9UUEZMQUdTX0hBVkVfSU5QTEFDRU9QU3LxLAAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI1B5X1RQRkxBR1NfSEFWRV9JTlBMQUNFT1BTWAEAAAAtdHLyLAAAWBkAAAB0ZXN0LnN1cHBvcnQuaGF2ZV91bmljb2RlcvMsAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuaGF2ZV91bmljb2RlWAEAAAAtdHL0LAAAWAsAAABlcnJuby5FVElNRXL1LAAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVUSU1FWAEAAAAtdHL2LAAAWB8AAABzdWJwcm9jZXNzLlNUQVJURl9VU0VTVERIQU5ETEVTcvcsAAAoamkBAABqagEAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLlNUQVJURl9VU0VTVERIQU5ETEVTWAEAAAAtdHL4LAAAWBIAAAB0YXJmaWxlLkdOVV9GT1JNQVRy+SwAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuR05VX0ZPUk1BVFgBAAAALXRy+iwAAFgKAAAAY2QuY29udHJvbHL7LAAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jZC5odG1sI2NkLmNvbnRyb2xYAQAAAC10cvwsAABYDwAAAHRocmVhZC5Mb2NrVHlwZXL9LAAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWQuaHRtbCN0aHJlYWQuTG9ja1R5cGVYAQAAAC10cv4sAABYDgAAAHN0YXQuVUZfT1BBUVVFcv8sAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlVGX09QQVFVRVgBAAAALXRyAC0AAFgLAAAAc3lzLnZlcnNpb25yAS0AAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLnZlcnNpb25YAQAAAC10cgItAABYDQAAAGVycm5vLkVMSUJNQVhyAy0AAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTElCTUFYWAEAAAAtdHIELQAAWA8AAABzc2wuT1BfTk9fU1NMdjNyBS0AAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLk9QX05PX1NTTHYzWAEAAAAtdHIGLQAAWA8AAABzc2wuT1BfTk9fU1NMdjJyBy0AAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLk9QX05PX1NTTHYyWAEAAAAtdHIILQAAWA0AAABlcnJuby5FQkFEU0xUcgktAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUJBRFNMVFgBAAAALXRyCi0AAFgSAAAAdHlwZXMuRnVuY3Rpb25UeXBlcgstAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R5cGVzLmh0bWwjdHlwZXMuRnVuY3Rpb25UeXBlWAEAAAAtdHIMLQAAWAwAAABlcnJuby5FTk9TVFJyDS0AAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTk9TVFJYAQAAAC10cg4tAABYDAAAAG9zLlBfT1ZFUkxBWXIPLQAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLlBfT1ZFUkxBWVgBAAAALXRyEC0AAFgQAAAAdG9rZW4uRE9VQkxFU1RBUnIRLQAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLkRPVUJMRVNUQVJYAQAAAC10chItAABYDAAAAGVycm5vLkVVU0VSU3ITLQAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVVU0VSU1gBAAAALXRyFC0AAFgPAAAAY29kZWNzLkJPTV9VVEY4chUtAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5CT01fVVRGOFgBAAAALXRyFi0AAFgIAAAAY2QuaW5kZXhyFy0AAChqaQEAAGpqAQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2QuaHRtbCNjZC5pbmRleFgBAAAALXRyGC0AAFgQAAAAdHlwZXMuU3RyaW5nVHlwZXIZLQAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90eXBlcy5odG1sI3R5cGVzLlN0cmluZ1R5cGVYAQAAAC10chotAABYDAAAAHN0YXQuU19JV09USHIbLQAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TX0lXT1RIWAEAAAAtdHIcLQAAWAoAAAB0b2tlbi5TRU1Jch0tAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uU0VNSVgBAAAALXRyHi0AAFgKAAAAb3MuZGV2bnVsbHIfLQAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLmRldm51bGxYAQAAAC10ciAtAABYEQAAAGNhbGVuZGFyLmRheV9hYmJyciEtAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhbGVuZGFyLmh0bWwjY2FsZW5kYXIuZGF5X2FiYnJYAQAAAC10ciItAABYDQAAAHBhcnNlci5TVFR5cGVyIy0AAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGFyc2VyLmh0bWwjcGFyc2VyLlNUVHlwZVgBAAAALXRyJC0AAFgbAAAAd2luc291bmQuTUJfSUNPTkVYQ0xBTUFUSU9OciUtAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dpbnNvdW5kLmh0bWwjd2luc291bmQuTUJfSUNPTkVYQ0xBTUFUSU9OWAEAAAAtdHImLQAAWCEAAAB0YXJmaWxlLlRhckZpbGVDb21wYXQuVEFSX0daSVBQRURyJy0AAChqaQEAAGpqAQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuVGFyRmlsZUNvbXBhdC5UQVJfR1pJUFBFRFgBAAAALXRyKC0AAFgUAAAAcmVzb3VyY2UuUkxJTUlUX0RBVEFyKS0AAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVzb3VyY2UuaHRtbCNyZXNvdXJjZS5STElNSVRfREFUQVgBAAAALXRyKi0AAFgIAAAAdG9rZW4uQVRyKy0AAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5BVFgBAAAALXRyLC0AAFgUAAAAcmVzb3VyY2UuUlVTQUdFX0JPVEhyLS0AAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVzb3VyY2UuaHRtbCNyZXNvdXJjZS5SVVNBR0VfQk9USFgBAAAALXRyLi0AAFgkAAAAQ29uZmlnUGFyc2VyLk1BWF9JTlRFUlBPTEFUSU9OX0RFUFRIci8tAAAoamkBAABqagEAAFhYAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbmZpZ3BhcnNlci5odG1sI0NvbmZpZ1BhcnNlci5NQVhfSU5URVJQT0xBVElPTl9ERVBUSFgBAAAALXRyMC0AAFgPAAAAdG9rZW4uU1RBUkVRVUFMcjEtAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uU1RBUkVRVUFMWAEAAAAtdHIyLQAAWCMAAABzdW5hdS5BVURJT19GSUxFX0VOQ09ESU5HX0xJTkVBUl8xNnIzLQAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdW5hdS5odG1sI3N1bmF1LkFVRElPX0ZJTEVfRU5DT0RJTkdfTElORUFSXzE2WAEAAAAtdHI0LQAAWAgAAABjZC5DRFJPTXI1LQAAKGppAQAAamoBAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jZC5odG1sI2NkLkNEUk9NWAEAAAAtdHI2LQAAWAwAAABzdGF0LlNfSUZSRUdyNy0AAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU19JRlJFR1gBAAAALXRyOC0AAFgRAAAAbG9jYWxlLkxDX05VTUVSSUNyOS0AAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLkxDX05VTUVSSUNYAQAAAC10cjotAABYHwAAAHhtbC5wYXJzZXJzLmV4cGF0LlhNTFBhcnNlclR5cGVyOy0AAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LlhNTFBhcnNlclR5cGVYAQAAAC10cjwtAABYDwAAAHR5cGVzLkZsb2F0VHlwZXI9LQAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90eXBlcy5odG1sI3R5cGVzLkZsb2F0VHlwZVgBAAAALXRyPi0AAFgLAAAAZXJybm8uRUNPTU1yPy0AAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FQ09NTVgBAAAALXRyQC0AAFgUAAAAZG9jdGVzdC5SRVBPUlRfVURJRkZyQS0AAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuUkVQT1JUX1VESUZGWAEAAAAtdHJCLQAAWBUAAABfd2lucmVnLktFWV9TRVRfVkFMVUVyQy0AAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvX3dpbnJlZy5odG1sI193aW5yZWcuS0VZX1NFVF9WQUxVRVgBAAAALXRyRC0AAFgLAAAAc3RhdC5TVF9JTk9yRS0AAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU1RfSU5PWAEAAAAtdHJGLQAAWBAAAABfd2lucmVnLlJFR19MSU5LckctAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLlJFR19MSU5LWAEAAAAtdHJILQAAWBMAAABjb2RlY3MuQk9NX1VURjE2X0JFckktAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5CT01fVVRGMTZfQkVYAQAAAC10ckotAABYDQAAAHN5cy5sYXN0X3R5cGVySy0AAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmxhc3RfdHlwZVgBAAAALXRyTC0AAFgVAAAAc2l0ZS5FTkFCTEVfVVNFUl9TSVRFck0tAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NpdGUuaHRtbCNzaXRlLkVOQUJMRV9VU0VSX1NJVEVYAQAAAC10ck4tAABYFwAAAHhtbC5kb20uRU1QVFlfTkFNRVNQQUNFck8tAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkVNUFRZX05BTUVTUEFDRVgBAAAALXRyUC0AAFgMAAAAc3RhdC5TX0lTVlRYclEtAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNfSVNWVFhYAQAAAC10clItAABYEQAAAGNzdi5RVU9URV9NSU5JTUFMclMtAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nzdi5odG1sI2Nzdi5RVU9URV9NSU5JTUFMWAEAAAAtdHJULQAAWAcAAABvcy5GX09LclUtAAAoamkBAABqagEAAFgxAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuRl9PS1gBAAAALXRyVi0AAFgQAAAAc3RyaW5nLmhleGRpZ2l0c3JXLQAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNzdHJpbmcuaGV4ZGlnaXRzWAEAAAAtdHJYLQAAWAwAAABNRVRIX09MREFSR1NyWS0AAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N0cnVjdHVyZXMuaHRtbCNNRVRIX09MREFSR1NYAQAAAC10clotAABYFQAAAFB5X1RQRkxBR1NfSEFWRV9DTEFTU3JbLQAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI1B5X1RQRkxBR1NfSEFWRV9DTEFTU1gBAAAALXRyXC0AAFgMAAAAbG9jYWxlLlRfRk1Ucl0tAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvY2FsZS5odG1sI2xvY2FsZS5UX0ZNVFgBAAAALXRyXi0AAFgRAAAAd2Vha3JlZi5Qcm94eVR5cGVyXy0AAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2Vha3JlZi5odG1sI3dlYWtyZWYuUHJveHlUeXBlWAEAAAAtdHJgLQAAWAwAAABzdGF0LlNfSVhPVEhyYS0AAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU19JWE9USFgBAAAALXRyYi0AAFgMAAAAb3MuT19OT0FUSU1FcmMtAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuT19OT0FUSU1FWAEAAAAtdHJkLQAAWAgAAABjZC5wdGltZXJlLQAAKGppAQAAamoBAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jZC5odG1sI2NkLnB0aW1lWAEAAAAtdHJmLQAAWAsAAABNRVRIX1NUQVRJQ3JnLQAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3RydWN0dXJlcy5odG1sI01FVEhfU1RBVElDWAEAAAAtdHJoLQAAWBAAAABzdGF0dmZzLkZfRkFWQUlMcmktAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXR2ZnMuaHRtbCNzdGF0dmZzLkZfRkFWQUlMWAEAAAAtdHJqLQAAWA0AAABvcy5FWF9EQVRBRVJScmstAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuRVhfREFUQUVSUlgBAAAALXRybC0AAFgMAAAAZXJybm8uRU5PTUVNcm0tAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRU5PTUVNWAEAAAAtdHJuLQAAWAoAAABjZC5QTEFZSU5Hcm8tAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NkLmh0bWwjY2QuUExBWUlOR1gBAAAALXRycC0AAFgMAAAAZXJybm8uRU5PRU5UcnEtAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRU5PRU5UWAEAAAAtdHJyLQAAWA4AAABvcy5PX05PSU5IRVJJVHJzLQAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLk9fTk9JTkhFUklUWAEAAAAtdHJ0LQAAWBEAAABsb2NhbGUuVF9GTVRfQU1QTXJ1LQAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUuVF9GTVRfQU1QTVgBAAAALXRydi0AAFgEAAAAcmUuSXJ3LQAAKGppAQAAamoBAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sI3JlLklYAQAAAC10cngtAABYEAAAAHN0cmluZy5wcmludGFibGVyeS0AAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLnByaW50YWJsZVgBAAAALXRyei0AAFgHAAAAb3MuUl9PS3J7LQAAKGppAQAAamoBAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLlJfT0tYAQAAAC10cnwtAABYCgAAAGNkLmNhdGFsb2dyfS0AAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2QuaHRtbCNjZC5jYXRhbG9nWAEAAAAtdHJ+LQAAWAQAAAByZS5Mcn8tAAAoamkBAABqagEAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlLmh0bWwjcmUuTFgBAAAALXRygC0AAFgMAAAAZXJybm8uRU5PQU5PcoEtAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRU5PQU5PWAEAAAAtdHKCLQAAWBEAAABzeXMuZXhjX3RyYWNlYmFja3KDLQAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNzeXMuZXhjX3RyYWNlYmFja1gBAAAALXRyhC0AAFgPAAAAZXJybm8uRU9WRVJGTE9XcoUtAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRU9WRVJGTE9XWAEAAAAtdHKGLQAAWBsAAABpbWFnZW9wLmJhY2t3YXJkX2NvbXBhdGlibGVyhy0AAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hZ2VvcC5odG1sI2ltYWdlb3AuYmFja3dhcmRfY29tcGF0aWJsZVgBAAAALXRyiC0AAFgPAAAAb3MuT19TRVFVRU5USUFMcoktAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuT19TRVFVRU5USUFMWAEAAAAtdHKKLQAAWAcAAABtYXRoLnBpcostAAAoamkBAABqagEAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hdGguaHRtbCNtYXRoLnBpWAEAAAAtdHKMLQAAWAQAAAByZS5Yco0tAAAoamkBAABqagEAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlLmh0bWwjcmUuWFgBAAAALXRyji0AAFgXAAAAc3NsLlB1cnBvc2UuQ0xJRU5UX0FVVEhyjy0AAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlB1cnBvc2UuQ0xJRU5UX0FVVEhYAQAAAC10cpAtAABYCQAAAGNkLlBBVVNFRHKRLQAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jZC5odG1sI2NkLlBBVVNFRFgBAAAALXRyki0AAFgQAAAAX3dpbnJlZy5SRUdfTk9ORXKTLQAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjX3dpbnJlZy5SRUdfTk9ORVgBAAAALXRylC0AAFgVAAAAdG9rZW4uUklHSFRTSElGVEVRVUFMcpUtAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uUklHSFRTSElGVEVRVUFMWAEAAAAtdHKWLQAAWBUAAABfd2lucmVnLkhLRVlfRFlOX0RBVEFyly0AAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvX3dpbnJlZy5odG1sI193aW5yZWcuSEtFWV9EWU5fREFUQVgBAAAALXRymC0AAFgEAAAAcmUuVXKZLQAAKGppAQAAamoBAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sI3JlLlVYAQAAAC10cpotAABYCgAAAHRva2VuLkxQQVJymy0AAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5MUEFSWAEAAAAtdHKcLQAAWAwAAABlcnJuby5FUkFOR0VynS0AAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FUkFOR0VYAQAAAC10cp4tAABYDwAAAGFycmF5LkFycmF5VHlwZXKfLQAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hcnJheS5odG1sI2FycmF5LkFycmF5VHlwZVgBAAAALXRyoC0AAFgSAAAAZ2MuREVCVUdfSU5TVEFOQ0VTcqEtAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2djLmh0bWwjZ2MuREVCVUdfSU5TVEFOQ0VTWAEAAAAtdHKiLQAAWBIAAAB0b2tlbi5HUkVBVEVSRVFVQUxyoy0AAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5HUkVBVEVSRVFVQUxYAQAAAC10cqQtAABYFQAAAHdpbnNvdW5kLlNORF9GSUxFTkFNRXKlLQAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93aW5zb3VuZC5odG1sI3dpbnNvdW5kLlNORF9GSUxFTkFNRVgBAAAALXRypi0AAFgKAAAAdG9rZW4uTkFNRXKnLQAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLk5BTUVYAQAAAC10cqgtAABYHwAAAHhtbC5kb20ucHVsbGRvbS5kZWZhdWx0X2J1ZnNpemVyqS0AAChqaQEAAGpqAQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5wdWxsZG9tLmh0bWwjeG1sLmRvbS5wdWxsZG9tLmRlZmF1bHRfYnVmc2l6ZVgBAAAALXRyqi0AAFgLAAAAbXNpbGliLnRleHRyqy0AAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLnRleHRYAQAAAC10cqwtAABYDAAAAGVycm5vLkVORklMRXKtLQAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVORklMRVgBAAAALXRyri0AAFgXAAAAX3dpbnJlZy5LRVlfV09XNjRfMzJLRVlyry0AAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvX3dpbnJlZy5odG1sI193aW5yZWcuS0VZX1dPVzY0XzMyS0VZWAEAAAAtdHKwLQAAWA8AAABtZDUuZGlnZXN0X3NpemVysS0AAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWQ1Lmh0bWwjbWQ1LmRpZ2VzdF9zaXplWAEAAAAtdHKyLQAAWBsAAABzcWxpdGUzLnNxbGl0ZV92ZXJzaW9uX2luZm9ysy0AAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuc3FsaXRlX3ZlcnNpb25faW5mb1gBAAAALXRytC0AAFgIAAAAY2QuYXVkaW9ytS0AAChqaQEAAGpqAQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2QuaHRtbCNjZC5hdWRpb1gBAAAALXRyti0AAFgOAAAAdHlwZXMuRmlsZVR5cGVyty0AAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHlwZXMuaHRtbCN0eXBlcy5GaWxlVHlwZVgBAAAALXRyuC0AAFgsAAAAeG1sLnNheC5oYW5kbGVyLnByb3BlcnR5X2RlY2xhcmF0aW9uX2hhbmRsZXJyuS0AAChqaQEAAGpqAQAAWGMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLnByb3BlcnR5X2RlY2xhcmF0aW9uX2hhbmRsZXJYAQAAAC10crotAABYDgAAAF93aW5yZWcuUkVHX1NacrstAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLlJFR19TWlgBAAAALXRyvC0AAFgQAAAAZXJybm8uRUFERFJJTlVTRXK9LQAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVBRERSSU5VU0VYAQAAAC10cr4tAABYDwAAAGxvY2FsZS5DSEFSX01BWHK/LQAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUuQ0hBUl9NQVhYAQAAAC10csAtAABYEAAAAHR5cGVzLlhSYW5nZVR5cGVywS0AAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHlwZXMuaHRtbCN0eXBlcy5YUmFuZ2VUeXBlWAEAAAAtdHLCLQAAWA8AAAB0b2tlbi5MRVNTRVFVQUxywy0AAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5MRVNTRVFVQUxYAQAAAC10csQtAABYEQAAAHN0YXR2ZnMuRl9OQU1FTUFYcsUtAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXR2ZnMuaHRtbCNzdGF0dmZzLkZfTkFNRU1BWFgBAAAALXRyxi0AAFgKAAAAb3MuT19DUkVBVHLHLQAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLk9fQ1JFQVRYAQAAAC10csgtAABYBAAAAHJlLlNyyS0AAChqaQEAAGpqAQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmUuaHRtbCNyZS5TWAEAAAAtdHLKLQAAWA4AAABzdGF0LlNGX0FQUEVORHLLLQAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TRl9BUFBFTkRYAQAAAC10cswtAABYCwAAAG9zLk9fRVhMT0NLcs0tAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuT19FWExPQ0tYAQAAAC10cs4tAABYDQAAAGVycm5vLkVOT0VYRUNyzy0AAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTk9FWEVDWAEAAAAtdHLQLQAAWAwAAABzdGF0LlNfSVhVU1Jy0S0AAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU19JWFVTUlgBAAAALXRy0i0AAFgeAAAAX3dpbnJlZy5LRVlfRU5VTUVSQVRFX1NVQl9LRVlTctMtAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLktFWV9FTlVNRVJBVEVfU1VCX0tFWVNYAQAAAC10ctQtAABYDwAAAE1hY09TLmxpbmttb2RlbHLVLQAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWNvcy5odG1sI01hY09TLmxpbmttb2RlbFgBAAAALXRy1i0AAFgQAAAAdGFyZmlsZS5FTkNPRElOR3LXLQAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5FTkNPRElOR1gBAAAALXRy2C0AAFgXAAAAdXVpZC5SRVNFUlZFRF9NSUNST1NPRlRy2S0AAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXVpZC5odG1sI3V1aWQuUkVTRVJWRURfTUlDUk9TT0ZUWAEAAAAtdHLaLQAAWA0AAABfX21ldGFjbGFzc19fctstAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjX19tZXRhY2xhc3NfX1gBAAAALXRy3C0AAFgTAAAAY29kZWNzLkJPTV9VVEYxNl9MRXLdLQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuQk9NX1VURjE2X0xFWAEAAAAtdHLeLQAAWAoAAABvcy5PX0FTWU5Dct8tAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuT19BU1lOQ1gBAAAALXRy4C0AAFgIAAAAY2QuUkVBRFly4S0AAChqaQEAAGpqAQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2QuaHRtbCNjZC5SRUFEWVgBAAAALXRy4i0AAFgKAAAAc3lzLm1heGludHLjLQAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNzeXMubWF4aW50WAEAAAAtdHLkLQAAWBAAAAB0b2tlbi5BTVBFUkVRVUFMcuUtAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uQU1QRVJFUVVBTFgBAAAALXRy5i0AAFgSAAAAdXVpZC5OQU1FU1BBQ0VfVVJMcuctAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3V1aWQuaHRtbCN1dWlkLk5BTUVTUEFDRV9VUkxYAQAAAC10cugtAABYDQAAAHN5cy5leGNfdmFsdWVy6S0AAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmV4Y192YWx1ZVgBAAAALXRy6i0AAFgNAAAAdG9rZW4uRVFFUVVBTHLrLQAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLkVRRVFVQUxYAQAAAC10cuwtAABYEAAAAHR5cGVzLk1ldGhvZFR5cGVy7S0AAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHlwZXMuaHRtbCN0eXBlcy5NZXRob2RUeXBlWAEAAAAtdHLuLQAAWA8AAABzaGEuZGlnZXN0X3NpemVy7y0AAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2hhLmh0bWwjc2hhLmRpZ2VzdF9zaXplWAEAAAAtdHLwLQAAWBwAAABkb2N0ZXN0Lk5PUk1BTElaRV9XSElURVNQQUNFcvEtAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0Lk5PUk1BTElaRV9XSElURVNQQUNFWAEAAAAtdHLyLQAAWA8AAABzdGF0dmZzLkZfQlNJWkVy8y0AAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdHZmcy5odG1sI3N0YXR2ZnMuRl9CU0laRVgBAAAALXRy9C0AAFgNAAAAb3MuT19OT05CTE9DS3L1LQAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLk9fTk9OQkxPQ0tYAQAAAC10cvYtAABYDwAAAGVycm5vLmVycm9yY29kZXL3LQAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLmVycm9yY29kZVgBAAAALXRy+C0AAFgfAAAAX3dpbnJlZy5SRUdfRFdPUkRfTElUVExFX0VORElBTnL5LQAAKGppAQAAamoBAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjX3dpbnJlZy5SRUdfRFdPUkRfTElUVExFX0VORElBTlgBAAAALXRy+i0AAFgVAAAAd2Vha3JlZi5SZWZlcmVuY2VUeXBlcvstAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dlYWtyZWYuaHRtbCN3ZWFrcmVmLlJlZmVyZW5jZVR5cGVYAQAAAC10cvwtAABYCwAAAHN0YXQuU1RfR0lEcv0tAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNUX0dJRFgBAAAALXRy/i0AAFgHAAAAc3lzLnBzMXL/LQAAKGppAQAAamoBAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNzeXMucHMxWAEAAAAtdHIALgAAWA4AAAB0eXBlcy5Ob25lVHlwZXIBLgAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90eXBlcy5odG1sI3R5cGVzLk5vbmVUeXBlWAEAAAAtdHICLgAAWAcAAABzeXMucHMycgMuAAAoamkBAABqagEAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5wczJYAQAAAC10cgQuAABYEQAAAG1hY29zdG9vbHMuQlVGU0lacgUuAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hY29zdG9vbHMuaHRtbCNtYWNvc3Rvb2xzLkJVRlNJWlgBAAAALXRyBi4AAFgMAAAAc3lzLmV4aXRmdW5jcgcuAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5leGl0ZnVuY1gBAAAALXRyCC4AAFgNAAAAc3RhdC5TVF9BVElNRXIJLgAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TVF9BVElNRVgBAAAALXRyCi4AAFgLAAAAc3RhdC5TVF9VSURyCy4AAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU1RfVUlEWAEAAAAtdHIMLgAAWBIAAAB3ZWFrcmVmLlByb3h5VHlwZXNyDS4AAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2Vha3JlZi5odG1sI3dlYWtyZWYuUHJveHlUeXBlc1gBAAAALXRyDi4AAFgSAAAAZXJybm8uRVBGTk9TVVBQT1JUcg8uAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRVBGTk9TVVBQT1JUWAEAAAAtdHIQLgAAWCQAAAB4bWwuc2F4LmhhbmRsZXIuZmVhdHVyZV9leHRlcm5hbF9wZXNyES4AAChqaQEAAGpqAQAAWFsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLmZlYXR1cmVfZXh0ZXJuYWxfcGVzWAEAAAAtdHISLgAAWBAAAAB0eXBlcy5Nb2R1bGVUeXBlchMuAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R5cGVzLmh0bWwjdHlwZXMuTW9kdWxlVHlwZVgBAAAALXRyFC4AAFgLAAAAZXJybm8uRUJVU1lyFS4AAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FQlVTWVgBAAAALXRyFi4AAFgNAAAAc3RyaW5nLmRpZ2l0c3IXLgAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNzdHJpbmcuZGlnaXRzWAEAAAAtdHIYLgAAWBYAAAB3aW5zb3VuZC5TTkRfTk9ERUZBVUxUchkuAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dpbnNvdW5kLmh0bWwjd2luc291bmQuU05EX05PREVGQVVMVFgBAAAALXRyGi4AAFgXAAAAc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGVyGy4AAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGVYAQAAAC10chwuAABYIwAAAHN1bmF1LkFVRElPX0ZJTEVfRU5DT0RJTkdfTElORUFSXzI0ch0uAAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUuQVVESU9fRklMRV9FTkNPRElOR19MSU5FQVJfMjRYAQAAAC10ch4uAABYCQAAAG9zLk9fU1lOQ3IfLgAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLk9fU1lOQ1gBAAAALXRyIC4AAFgLAAAAc3lzLm1heHNpemVyIS4AAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLm1heHNpemVYAQAAAC10ciIuAABYDgAAAHRva2VuLk5fVE9LRU5TciMuAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uTl9UT0tFTlNYAQAAAC10ciQuAABYEgAAAGh0dHBsaWIuSFRUUFNfUE9SVHIlLgAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odHRwbGliLmh0bWwjaHR0cGxpYi5IVFRQU19QT1JUWAEAAAAtdHImLgAAWA4AAAB0eXBlcy5MaXN0VHlwZXInLgAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90eXBlcy5odG1sI3R5cGVzLkxpc3RUeXBlWAEAAAAtdHIoLgAAWA8AAABsb2NhbGUuTENfQ1RZUEVyKS4AAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLkxDX0NUWVBFWAEAAAAtdHIqLgAAWBAAAABQeV9UUEZMQUdTX1JFQURZcisuAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjUHlfVFBGTEFHU19SRUFEWVgBAAAALXRyLC4AAFgMAAAAc3RhdC5TVF9NT0RFci0uAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNUX01PREVYAQAAAC10ci4uAABYCwAAAG9zLk9fUkRPTkxZci8uAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuT19SRE9OTFlYAQAAAC10cjAuAABYDwAAAHN0YXR2ZnMuRl9GSUxFU3IxLgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0dmZzLmh0bWwjc3RhdHZmcy5GX0ZJTEVTWAEAAAAtdHIyLgAAWAQAAABUcnVlcjMuAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbnN0YW50cy5odG1sI1RydWVYAQAAAC10cjQuAABYEAAAAHRva2VuLkVSUk9SVE9LRU5yNS4AAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5FUlJPUlRPS0VOWAEAAAAtdHI2LgAAWA8AAAB0b2tlbi5CQUNLUVVPVEVyNy4AAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5CQUNLUVVPVEVYAQAAAC10cjguAABYDgAAAHNvY2tldC5BRl9JTkVUcjkuAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5BRl9JTkVUWAEAAAAtdHI6LgAAWCQAAABzc2wuQUxFUlRfREVTQ1JJUFRJT05fSU5URVJOQUxfRVJST1JyOy4AAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLkFMRVJUX0RFU0NSSVBUSU9OX0lOVEVSTkFMX0VSUk9SWAEAAAAtdHI8LgAAWA0AAABlcnJuby5FTk9CVUZTcj0uAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRU5PQlVGU1gBAAAALXRyPi4AAFgQAAAAc3lzLnZlcnNpb25faW5mb3I/LgAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNzeXMudmVyc2lvbl9pbmZvWAEAAAAtdHJALgAAWA0AAABjc3YuUVVPVEVfQUxMckEuAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nzdi5odG1sI2Nzdi5RVU9URV9BTExYAQAAAC10ckIuAABYEgAAAHNpZ25hbC5JVElNRVJfUFJPRnJDLgAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaWduYWwuaHRtbCNzaWduYWwuSVRJTUVSX1BST0ZYAQAAAC10ckQuAABYFgAAAHNzbC5PUF9TSU5HTEVfRUNESF9VU0VyRS4AAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLk9QX1NJTkdMRV9FQ0RIX1VTRVgBAAAALXRyRi4AAFgkAAAAc3VuYXUuQVVESU9fRklMRV9FTkNPRElOR19BRFBDTV9HNzIyckcuAAAoamkBAABqagEAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUuQVVESU9fRklMRV9FTkNPRElOR19BRFBDTV9HNzIyWAEAAAAtdHJILgAAWBQAAAB1dWlkLlJFU0VSVkVEX0ZVVFVSRXJJLgAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91dWlkLmh0bWwjdXVpZC5SRVNFUlZFRF9GVVRVUkVYAQAAAC10ckouAABYDQAAAGVycm5vLkVET1RET1RySy4AAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FRE9URE9UWAEAAAAtdHJMLgAAWAwAAABvcy5XVU5UUkFDRURyTS4AAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5XVU5UUkFDRURYAQAAAC10ck4uAABYGAAAAHJlc291cmNlLlJVU0FHRV9DSElMRFJFTnJPLgAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXNvdXJjZS5odG1sI3Jlc291cmNlLlJVU0FHRV9DSElMRFJFTlgBAAAALXRyUC4AAFgMAAAAb3MuRVhfTk9IT1NUclEuAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuRVhfTk9IT1NUWAEAAAAtdHJSLgAAWBUAAABQeV9UUEZMQUdTX0NIRUNLVFlQRVNyUy4AAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNQeV9UUEZMQUdTX0NIRUNLVFlQRVNYAQAAAC10clQuAABYDAAAAGVycm5vLkVMM1JTVHJVLgAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVMM1JTVFgBAAAALXRyVi4AAFgcAAAAX3dpbnJlZy5SRUdfRFdPUkRfQklHX0VORElBTnJXLgAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjX3dpbnJlZy5SRUdfRFdPUkRfQklHX0VORElBTlgBAAAALXRyWC4AAFgPAAAAc29ja2V0LlNPQ0tfUkRNclkuAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5TT0NLX1JETVgBAAAALXRyWi4AAFgdAAAAZG9jdGVzdC5ET05UX0FDQ0VQVF9CTEFOS0xJTkVyWy4AAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRE9OVF9BQ0NFUFRfQkxBTktMSU5FWAEAAAAtdHJcLgAAWBAAAABzdGF0LlNGX0FSQ0hJVkVEcl0uAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNGX0FSQ0hJVkVEWAEAAAAtdHJeLgAAWBQAAAB3aW5zb3VuZC5NQl9JQ09OSEFORHJfLgAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93aW5zb3VuZC5odG1sI3dpbnNvdW5kLk1CX0lDT05IQU5EWAEAAAAtdHJgLgAAWAwAAABzdGF0LlNfSUZCTEtyYS4AAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU19JRkJMS1gBAAAALXRyYi4AAFgXAAAAcGlja2xlLkhJR0hFU1RfUFJPVE9DT0xyYy4AAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGlja2xlLmh0bWwjcGlja2xlLkhJR0hFU1RfUFJPVE9DT0xYAQAAAC10cmQuAABYBgAAAG1hdGguZXJlLgAAKGppAQAAamoBAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5lWAEAAAAtdHJmLgAAWA4AAABkaXMuaGFzY29tcGFyZXJnLgAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNkaXMuaGFzY29tcGFyZVgBAAAALXRyaC4AAFgKAAAAb3MuT19EU1lOQ3JpLgAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLk9fRFNZTkNYAQAAAC10cmouAABYEQAAAHRlbXBmaWxlLnRlbXBsYXRlcmsuAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RlbXBmaWxlLmh0bWwjdGVtcGZpbGUudGVtcGxhdGVYAQAAAC10cmwuAABYCgAAAHN5cy53aW52ZXJybS4AAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLndpbnZlclgBAAAALXRybi4AAFgJAAAAY2QuTk9ESVNDcm8uAAAoamkBAABqagEAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NkLmh0bWwjY2QuTk9ESVNDWAEAAAAtdHJwLgAAWCcAAABzc2wuQUxFUlRfREVTQ1JJUFRJT05fSEFORFNIQUtFX0ZBSUxVUkVycS4AAChqaQEAAGpqAQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLkFMRVJUX0RFU0NSSVBUSU9OX0hBTkRTSEFLRV9GQUlMVVJFWAEAAAAtdHJyLgAAWA8AAABzb2NrZXQuQUZfSU5FVDZycy4AAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LkFGX0lORVQ2WAEAAAAtdHJ0LgAAWAwAAABkaXMuaGFzY29uc3RydS4AAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjZGlzLmhhc2NvbnN0WAEAAAAtdHJ2LgAAWAsAAABkbC5SVExEX05PV3J3LgAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kbC5odG1sI2RsLlJUTERfTk9XWAEAAAAtdHJ4LgAAWA0AAAB1dWlkLlJGQ180MTIycnkuAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3V1aWQuaHRtbCN1dWlkLlJGQ180MTIyWAEAAAAtdHJ6LgAAWB0AAABQeV9UUEZMQUdTX0hBVkVfR0VUQ0hBUkJVRkZFUnJ7LgAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI1B5X1RQRkxBR1NfSEFWRV9HRVRDSEFSQlVGRkVSWAEAAAAtdHJ8LgAAWA4AAABzaWduYWwuU0lHX0RGTHJ9LgAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaWduYWwuaHRtbCNzaWduYWwuU0lHX0RGTFgBAAAALXRyfi4AAFgaAAAAdHlwZXMuR2V0U2V0RGVzY3JpcHRvclR5cGVyfy4AAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHlwZXMuaHRtbCN0eXBlcy5HZXRTZXREZXNjcmlwdG9yVHlwZVgBAAAALXRygC4AAFgOAAAATm90SW1wbGVtZW50ZWRygS4AAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uc3RhbnRzLmh0bWwjTm90SW1wbGVtZW50ZWRYAQAAAC10coIuAABYDwAAAGVycm5vLkVERUFETE9DS3KDLgAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVERUFETE9DS1gBAAAALXRyhC4AAFgZAAAAdHlwZXMuQnVpbHRpbkZ1bmN0aW9uVHlwZXKFLgAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90eXBlcy5odG1sI3R5cGVzLkJ1aWx0aW5GdW5jdGlvblR5cGVYAQAAAC10coYuAABYEQAAAHRva2VuLkRPVUJMRVNMQVNIcocuAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uRE9VQkxFU0xBU0hYAQAAAC10coguAABYBwAAAG9zLldfT0tyiS4AAChqaQEAAGpqAQAAWDEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5XX09LWAEAAAAtdHKKLgAAWBAAAABtc3ZjcnQuTEtfTkJSTENLcosuAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zdmNydC5odG1sI21zdmNydC5MS19OQlJMQ0tYAQAAAC10cowuAABYDQAAAGVycm5vLkVOT1RCTEtyjS4AAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTk9UQkxLWAEAAAAtdHKOLgAAWB0AAABzc2wuVkVSSUZZX1g1MDlfVFJVU1RFRF9GSVJTVHKPLgAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuVkVSSUZZX1g1MDlfVFJVU1RFRF9GSVJTVFgBAAAALXRykC4AAFgMAAAAZXJybm8uRUxOUk5HcpEuAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUxOUk5HWAEAAAAtdHKSLgAAWA4AAABvcy5FWF9URU1QRkFJTHKTLgAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLkVYX1RFTVBGQUlMWAEAAAAtdHKULgAAWA0AAABzeXMubG9uZ19pbmZvcpUuAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5sb25nX2luZm9YAQAAAC10cpYuAABYDAAAAGVycm5vLkVFWElTVHKXLgAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVFWElTVFgBAAAALXRymC4AAFgQAAAAZXJybm8uRVBST1RPVFlQRXKZLgAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVQUk9UT1RZUEVYAQAAAC10cpouAABYFAAAAHNxbGl0ZTMudmVyc2lvbl9pbmZvcpsuAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLnZlcnNpb25faW5mb1gBAAAALXRynC4AAFgMAAAAZGwuUlRMRF9MQVpZcp0uAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RsLmh0bWwjZGwuUlRMRF9MQVpZWAEAAAAtdHKeLgAAWA4AAABlcnJuby5FTk9UVU5JUXKfLgAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVOT1RVTklRWAEAAAAtdHKgLgAAWAoAAABNRVRIX0NMQVNTcqEuAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zdHJ1Y3R1cmVzLmh0bWwjTUVUSF9DTEFTU1gBAAAALXRyoi4AAFgEAAAATm9uZXKjLgAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb25zdGFudHMuaHRtbCNOb25lWAEAAAAtdHKkLgAAWAgAAABzeXMucGF0aHKlLgAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNzeXMucGF0aFgBAAAALXRypi4AAFgLAAAAc3NsLkhBU19TTklypy4AAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLkhBU19TTklYAQAAAC10cqguAABYCgAAAHRva2VuLlJTUUJyqS4AAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5SU1FCWAEAAAAtdHKqLgAAWBUAAABlcnJuby5FUFJPVE9OT1NVUFBPUlRyqy4AAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FUFJPVE9OT1NVUFBPUlRYAQAAAC10cqwuAABYDAAAAHN0YXQuU1RfU0laRXKtLgAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TVF9TSVpFWAEAAAAtdHKuLgAAWA8AAABsb2NhbGUuQ1JOQ1lTVFJyry4AAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLkNSTkNZU1RSWAEAAAAtdHKwLgAAWBUAAAB0b2tlbi5ET1VCTEVTVEFSRVFVQUxysS4AAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5ET1VCTEVTVEFSRVFVQUxYAQAAAC10crIuAABYGQAAAHNzbC5DSEFOTkVMX0JJTkRJTkdfVFlQRVNysy4AAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLkNIQU5ORUxfQklORElOR19UWVBFU1gBAAAALXRytC4AAFgOAAAAc3RhdC5VRl9OT0RVTVBytS4AAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuVUZfTk9EVU1QWAEAAAAtdHK2LgAAWAoAAABkaXMub3BuYW1lcrcuAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI2Rpcy5vcG5hbWVYAQAAAC10crguAABYFAAAAHJlc291cmNlLlJMSU1JVF9DT1JFcrkuAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Jlc291cmNlLmh0bWwjcmVzb3VyY2UuUkxJTUlUX0NPUkVYAQAAAC10crouAABYDQAAAGVycm5vLkVSRU1DSEdyuy4AAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FUkVNQ0hHWAEAAAAtdHK8LgAAWA8AAAB0b2tlbi5OVF9PRkZTRVRyvS4AAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5OVF9PRkZTRVRYAQAAAC10cr4uAABYEwAAAGNhbGVuZGFyLm1vbnRoX25hbWVyvy4AAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci5tb250aF9uYW1lWAEAAAAtdHLALgAAWA0AAAB0aW1lLmRheWxpZ2h0csEuAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpbWUuaHRtbCN0aW1lLmRheWxpZ2h0WAEAAAAtdHLCLgAAWBIAAABzeXMudHJhY2ViYWNrbGltaXRywy4AAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLnRyYWNlYmFja2xpbWl0WAEAAAAtdHLELgAAWA0AAABzaGEuYmxvY2tzaXplcsUuAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NoYS5odG1sI3NoYS5ibG9ja3NpemVYAQAAAC10csYuAABYCQAAAF9fc2xvdHNfX3LHLgAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI19fc2xvdHNfX1gBAAAALXRyyC4AAFgKAAAAdG9rZW4uTEVTU3LJLgAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLkxFU1NYAQAAAC10csouAABYGAAAAHNzbC5PUEVOU1NMX1ZFUlNJT05fSU5GT3LLLgAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuT1BFTlNTTF9WRVJTSU9OX0lORk9YAQAAAC10cswuAABYCgAAAG9zLk9fUlNZTkNyzS4AAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5PX1JTWU5DWAEAAAAtdHLOLgAAWBUAAAB1bmljb2RlZGF0YS51Y2RfM18yXzByzy4AAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pY29kZWRhdGEuaHRtbCN1bmljb2RlZGF0YS51Y2RfM18yXzBYAQAAAC10ctAuAABYDAAAAGVycm5vLkVCQURGRHLRLgAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVCQURGRFgBAAAALXRy0i4AAFgOAAAAc3lzLnN1YnZlcnNpb25y0y4AAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLnN1YnZlcnNpb25YAQAAAC10ctQuAABYCwAAAE1FVEhfTk9BUkdTctUuAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zdHJ1Y3R1cmVzLmh0bWwjTUVUSF9OT0FSR1NYAQAAAC10ctYuAABYEwAAAGVycm5vLkVBRERSTk9UQVZBSUxy1y4AAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FQUREUk5PVEFWQUlMWAEAAAAtdHLYLgAAWCgAAAB4bWwuc2F4LmhhbmRsZXIuZmVhdHVyZV9zdHJpbmdfaW50ZXJuaW5nctkuAAAoamkBAABqagEAAFhfAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5odG1sI3htbC5zYXguaGFuZGxlci5mZWF0dXJlX3N0cmluZ19pbnRlcm5pbmdYAQAAAC10ctouAABYCQAAAG9zLnBhcmRpcnLbLgAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLnBhcmRpclgBAAAALXRy3C4AAFgLAAAAZXJybm8uRUlEUk1y3S4AAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FSURSTVgBAAAALXRy3i4AAFgdAAAAaGFzaGxpYi5hbGdvcml0aG1zX2d1YXJhbnRlZWRy3y4AAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaGFzaGxpYi5odG1sI2hhc2hsaWIuYWxnb3JpdGhtc19ndWFyYW50ZWVkWAEAAAAtdHLgLgAAWAoAAABvcy5saW5lc2VwcuEuAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MubGluZXNlcFgBAAAALXRy4i4AAFgYAAAAUHlfVFBGTEFHU19IQVZFX1dFQUtSRUZTcuMuAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjUHlfVFBGTEFHU19IQVZFX1dFQUtSRUZTWAEAAAAtdHLkLgAAWBAAAABtaW1ldHlwZXMuaW5pdGVkcuUuAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbWV0eXBlcy5odG1sI21pbWV0eXBlcy5pbml0ZWRYAQAAAC10cuYuAABYFQAAAHNzbC5PUF9OT19DT01QUkVTU0lPTnLnLgAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuT1BfTk9fQ09NUFJFU1NJT05YAQAAAC10cuguAABYCgAAAG9zLldOT0hBTkdy6S4AAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5XTk9IQU5HWAEAAAAtdHLqLgAAWBkAAABodG1sZW50aXR5ZGVmcy5lbnRpdHlkZWZzcusuAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0bWxsaWIuaHRtbCNodG1sZW50aXR5ZGVmcy5lbnRpdHlkZWZzWAEAAAAtdHLsLgAAWA0AAABzc2wuQ0VSVF9OT05Fcu0uAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5DRVJUX05PTkVYAQAAAC10cu4uAABYFAAAAHJlc291cmNlLlJMSU1JVF9WTUVNcu8uAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Jlc291cmNlLmh0bWwjcmVzb3VyY2UuUkxJTUlUX1ZNRU1YAQAAAC10cvAuAABYBgAAAG9zLnNlcHLxLgAAKGppAQAAamoBAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLnNlcFgBAAAALXRy8i4AAFgPAAAAaW1wLlBZX0NPTVBJTEVEcvMuAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltcC5odG1sI2ltcC5QWV9DT01QSUxFRFgBAAAALXRy9C4AAFgKAAAAY29kZWNzLkJPTXL1LgAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuQk9NWAEAAAAtdHL2LgAAWA8AAAB0eXBlcy5GcmFtZVR5cGVy9y4AAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHlwZXMuaHRtbCN0eXBlcy5GcmFtZVR5cGVYAQAAAC10cvguAABYGgAAAHVuaXR0ZXN0LmRlZmF1bHRUZXN0TG9hZGVycvkuAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuZGVmYXVsdFRlc3RMb2FkZXJYAQAAAC10cvouAABYCAAAAGNkLkVSUk9ScvsuAAAoamkBAABqagEAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NkLmh0bWwjY2QuRVJST1JYAQAAAC10cvwuAABYEgAAAHdpbnNvdW5kLlNORF9QVVJHRXL9LgAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93aW5zb3VuZC5odG1sI3dpbnNvdW5kLlNORF9QVVJHRVgBAAAALXRy/i4AAFgjAAAAeG1sLnNheC5oYW5kbGVyLnByb3BlcnR5X3htbF9zdHJpbmdy/y4AAChqaQEAAGpqAQAAWFoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLnByb3BlcnR5X3htbF9zdHJpbmdYAQAAAC10cgAvAABYDwAAAHRva2VuLkVORE1BUktFUnIBLwAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLkVORE1BUktFUlgBAAAALXRyAi8AAFgRAAAAaW1wLlBLR19ESVJFQ1RPUllyAy8AAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1wLmh0bWwjaW1wLlBLR19ESVJFQ1RPUllYAQAAAC10cgQvAABYDgAAAHN0YXQuVUZfQVBQRU5EcgUvAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlVGX0FQUEVORFgBAAAALXRyBi8AAFgTAAAAd2luc291bmQuU05EX01FTU9SWXIHLwAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93aW5zb3VuZC5odG1sI3dpbnNvdW5kLlNORF9NRU1PUllYAQAAAC10cggvAABYEQAAAHNvY2tldC5TT0NLX0RHUkFNcgkvAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5TT0NLX0RHUkFNWAEAAAAtdHIKLwAAWA4AAABzeXMubGFzdF92YWx1ZXILLwAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNzeXMubGFzdF92YWx1ZVgBAAAALXRyDC8AAFgPAAAAZm9ybWF0dGVyLkFTX0lTcg0vAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Zvcm1hdHRlci5odG1sI2Zvcm1hdHRlci5BU19JU1gBAAAALXRyDi8AAFgSAAAAemlwZmlsZS5aSVBfU1RPUkVEcg8vAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLlpJUF9TVE9SRURYAQAAAC10chAvAABYIAAAAHN1bmF1LkFVRElPX0ZJTEVfRU5DT0RJTkdfQUxBV184chEvAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUuQVVESU9fRklMRV9FTkNPRElOR19BTEFXXzhYAQAAAC10chIvAABYFAAAAGRvY3Rlc3QuUkVQT1JUX0NESUZGchMvAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LlJFUE9SVF9DRElGRlgBAAAALXRyFC8AAFgNAAAAc2l0ZS5QUkVGSVhFU3IVLwAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaXRlLmh0bWwjc2l0ZS5QUkVGSVhFU1gBAAAALXRyFi8AAFgSAAAAdXVpZC5OQU1FU1BBQ0VfRE5TchcvAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3V1aWQuaHRtbCN1dWlkLk5BTUVTUEFDRV9ETlNYAQAAAC10chgvAABYEgAAAHR5cGVzLkluc3RhbmNlVHlwZXIZLwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90eXBlcy5odG1sI3R5cGVzLkluc3RhbmNlVHlwZVgBAAAALXRyGi8AAFgbAAAAUHlfVFBGTEFHU19IQVZFX1JJQ0hDT01QQVJFchsvAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjUHlfVFBGTEFHU19IQVZFX1JJQ0hDT01QQVJFWAEAAAAtdHIcLwAAWBIAAABzc2wuUFJPVE9DT0xfVExTdjFyHS8AAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlBST1RPQ09MX1RMU3YxWAEAAAAtdHIeLwAAWBUAAABfd2lucmVnLlJFR19FWFBBTkRfU1pyHy8AAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvX3dpbnJlZy5odG1sI193aW5yZWcuUkVHX0VYUEFORF9TWlgBAAAALXRyIC8AAFgMAAAAb3MuRVhfTk9QRVJNciEvAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuRVhfTk9QRVJNWAEAAAAtdHIiLwAAWA0AAABzeXMuYnl0ZW9yZGVyciMvAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5ieXRlb3JkZXJYAQAAAC10ciQvAABYEAAAAGVycm5vLkVDT05OUkVTRVRyJS8AAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FQ09OTlJFU0VUWAEAAAAtdHImLwAAWBAAAABvcy5jb25mc3RyX25hbWVzcicvAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuY29uZnN0cl9uYW1lc1gBAAAALXRyKC8AAFgXAAAAc3NsLlB1cnBvc2UuU0VSVkVSX0FVVEhyKS8AAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlB1cnBvc2UuU0VSVkVSX0FVVEhYAQAAAC10ciovAABYDQAAAHN0YXQuU1RfTVRJTUVyKy8AAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU1RfTVRJTUVYAQAAAC10ciwvAABYCwAAAGVycm5vLkVOWElPci0vAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRU5YSU9YAQAAAC10ci4vAABYBAAAAGV4aXRyLy8AAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uc3RhbnRzLmh0bWwjZXhpdFgBAAAALXRyMC8AAFgOAAAAbG9jYWxlLlRIT1VTRVByMS8AAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLlRIT1VTRVBYAQAAAC10cjIvAABYFgAAAHRhYm5hbm55LmZpbGVuYW1lX29ubHlyMy8AAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFibmFubnkuaHRtbCN0YWJuYW5ueS5maWxlbmFtZV9vbmx5WAEAAAAtdHI0LwAAWBAAAABzdHJpbmcub2N0ZGlnaXRzcjUvAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZy5odG1sI3N0cmluZy5vY3RkaWdpdHNYAQAAAC10cjYvAABYEQAAAHN0cmluZy53aGl0ZXNwYWNlcjcvAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZy5odG1sI3N0cmluZy53aGl0ZXNwYWNlWAEAAAAtdHI4LwAAWBAAAABsb2NhbGUuUkFESVhDSEFScjkvAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvY2FsZS5odG1sI2xvY2FsZS5SQURJWENIQVJYAQAAAC10cjovAABYEwAAAHJlc291cmNlLlJMSU1JVF9SU1NyOy8AAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVzb3VyY2UuaHRtbCNyZXNvdXJjZS5STElNSVRfUlNTWAEAAAAtdHI8LwAAWBEAAABzdGF0LlVGX0lNTVVUQUJMRXI9LwAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5VRl9JTU1VVEFCTEVYAQAAAC10cj4vAABYDAAAAGVycm5vLkVBR0FJTnI/LwAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVBR0FJTlgBAAAALXRyQC8AAFgTAAAAY2FsZW5kYXIubW9udGhfYWJicnJBLwAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLm1vbnRoX2FiYnJYAQAAAC10ckIvAABYCwAAAGVycm5vLkVGQklHckMvAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUZCSUdYAQAAAC10ckQvAABYDgAAAGxvY2FsZS5DT0RFU0VUckUvAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvY2FsZS5odG1sI2xvY2FsZS5DT0RFU0VUWAEAAAAtdHJGLwAAWBUAAABlcnJuby5FU09DS1ROT1NVUFBPUlRyRy8AAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FU09DS1ROT1NVUFBPUlRYAQAAAC10ckgvAABYDAAAAGVycm5vLkVMM0hMVHJJLwAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVMM0hMVFgBAAAALXRySi8AAFgLAAAAZGlzLmhhc2phYnNySy8AAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjZGlzLmhhc2phYnNYAQAAAC10ckwvAABYDAAAAGVycm5vLkVGQVVMVHJNLwAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVGQVVMVFgBAAAALXRyTi8AAFgNAAAAZXJybm8uRURFQURMS3JPLwAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVERUFETEtYAQAAAC10clAvAABYEAAAAGltcC5TRUFSQ0hfRVJST1JyUS8AAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1wLmh0bWwjaW1wLlNFQVJDSF9FUlJPUlgBAAAALXRyUi8AAFgQAAAAY29kZWNzLkJPTV9VVEYzMnJTLwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuQk9NX1VURjMyWAEAAAAtdHJULwAAWA8AAABzeXMuZXhlY19wcmVmaXhyVS8AAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmV4ZWNfcHJlZml4WAEAAAAtdHJWLwAAWAkAAABfX2RlYnVnX19yVy8AAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uc3RhbnRzLmh0bWwjX19kZWJ1Z19fWAEAAAAtdHJYLwAAWA8AAABpbXAuQ19FWFRFTlNJT05yWS8AAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1wLmh0bWwjaW1wLkNfRVhURU5TSU9OWAEAAAAtdHJaLwAAWBgAAAB0eXBlcy5Ob3RJbXBsZW1lbnRlZFR5cGVyWy8AAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHlwZXMuaHRtbCN0eXBlcy5Ob3RJbXBsZW1lbnRlZFR5cGVYAQAAAC10clwvAABYFgAAAGdjLkRFQlVHX1VOQ09MTEVDVEFCTEVyXS8AAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2MuaHRtbCNnYy5ERUJVR19VTkNPTExFQ1RBQkxFWAEAAAAtdHJeLwAAWBUAAAByZXNvdXJjZS5STElNSVRfTlBST0NyXy8AAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVzb3VyY2UuaHRtbCNyZXNvdXJjZS5STElNSVRfTlBST0NYAQAAAC10cmAvAABYDwAAAHN1YnByb2Nlc3MuUElQRXJhLwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5QSVBFWAEAAAAtdHJiLwAAWAwAAABvcy5QX05PV0FJVE9yYy8AAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5QX05PV0FJVE9YAQAAAC10cmQvAABYCwAAAGNkLkRBVEFTSVpFcmUvAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NkLmh0bWwjY2QuREFUQVNJWkVYAQAAAC10cmYvAABYDQAAAHRva2VuLkdSRUFURVJyZy8AAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5HUkVBVEVSWAEAAAAtdHJoLwAAWBEAAABzc2wuQ0VSVF9SRVFVSVJFRHJpLwAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuQ0VSVF9SRVFVSVJFRFgBAAAALXRyai8AAFgKAAAAZXJybm8uRUFEVnJrLwAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVBRFZYAQAAAC10cmwvAABYEwAAAHNzbC5QUk9UT0NPTF9TU0x2MjNybS8AAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlBST1RPQ09MX1NTTHYyM1gBAAAALXRybi8AAFgKAAAAbG9jYWxlLkVSQXJvLwAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUuRVJBWAEAAAAtdHJwLwAAWA4AAABlcnJuby5FTVNHU0laRXJxLwAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVNU0dTSVpFWAEAAAAtdHJyLwAAWAwAAABvcy5FWF9DT05GSUdycy8AAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5FWF9DT05GSUdYAQAAAC10cnQvAABYDgAAAHRva2VuLk1JTkVRVUFMcnUvAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uTUlORVFVQUxYAQAAAC10cnYvAABYFAAAAG1pbWV0eXBlcy5zdWZmaXhfbWFwcncvAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbWV0eXBlcy5odG1sI21pbWV0eXBlcy5zdWZmaXhfbWFwWAEAAAAtdHJ4LwAAWBEAAABzc2wuT1BfTk9fVExTdjFfMnJ5LwAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuT1BfTk9fVExTdjFfMlgBAAAALXRyei8AAFgRAAAAc3NsLk9QX05PX1RMU3YxXzNyey8AAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLk9QX05PX1RMU3YxXzNYAQAAAC10cnwvAABYFwAAAGRvY3Rlc3QuUkVQT1JUSU5HX0ZMQUdTcn0vAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LlJFUE9SVElOR19GTEFHU1gBAAAALXRyfi8AAFgMAAAAc3NsLkhBU19BTFBOcn8vAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5IQVNfQUxQTlgBAAAALXRygC8AAFgLAAAAb3MuT19BUFBFTkRygS8AAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5PX0FQUEVORFgBAAAALXRygi8AAFgMAAAAc3RhdC5TX0lTVUlEcoMvAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNfSVNVSURYAQAAAC10coQvAABYEAAAAHRva2VuLkNJUkNVTUZMRVhyhS8AAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5DSVJDVU1GTEVYWAEAAAAtdHKGLwAAWAwAAABlcnJuby5FTk9QS0dyhy8AAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTk9QS0dYAQAAAC10cogvAABYHAAAAHN1YnByb2Nlc3MuU1REX09VVFBVVF9IQU5ETEVyiS8AAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI3N1YnByb2Nlc3MuU1REX09VVFBVVF9IQU5ETEVYAQAAAC10coovAABYEQAAAHN1YnByb2Nlc3MuU1RET1VUcosvAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLlNURE9VVFgBAAAALXRyjC8AAFgTAAAAdHlwZXMuVHJhY2ViYWNrVHlwZXKNLwAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90eXBlcy5odG1sI3R5cGVzLlRyYWNlYmFja1R5cGVYAQAAAC10co4vAABYDAAAAHN0YXQuU19JWEdSUHKPLwAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TX0lYR1JQWAEAAAAtdHKQLwAAWA0AAABNRVRIX0tFWVdPUkRTcpEvAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zdHJ1Y3R1cmVzLmh0bWwjTUVUSF9LRVlXT1JEU1gBAAAALXRyki8AAFgUAAAAdG9rZW4uTEVGVFNISUZURVFVQUxyky8AAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5MRUZUU0hJRlRFUVVBTFgBAAAALXRylC8AAFgQAAAAdG9rZW4uUklHSFRTSElGVHKVLwAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLlJJR0hUU0hJRlRYAQAAAC10cpYvAABYJgAAAGFzeW5jaGF0LmFzeW5jX2NoYXQuYWNfb3V0X2J1ZmZlcl9zaXplcpcvAAAoamkBAABqagEAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzeW5jaGF0Lmh0bWwjYXN5bmNoYXQuYXN5bmNfY2hhdC5hY19vdXRfYnVmZmVyX3NpemVYAQAAAC10cpgvAABYCwAAAHNpZ25hbC5OU0lHcpkvAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NpZ25hbC5odG1sI3NpZ25hbC5OU0lHWAEAAAAtdHKaLwAAWBMAAAB0eXBlcy5HZW5lcmF0b3JUeXBlcpsvAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R5cGVzLmh0bWwjdHlwZXMuR2VuZXJhdG9yVHlwZVgBAAAALXRynC8AAFgMAAAAcmUuTVVMVElMSU5Fcp0vAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlLmh0bWwjcmUuTVVMVElMSU5FWAEAAAAtdHKeLwAAWA8AAABlcnJuby5FUkVNT1RFSU9yny8AAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FUkVNT1RFSU9YAQAAAC10cqAvAABYEgAAAGVycm5vLkVERVNUQUREUlJFUXKhLwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVERVNUQUREUlJFUVgBAAAALXRyoi8AAFgQAAAAb3Muc3lzY29uZl9uYW1lc3KjLwAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLnN5c2NvbmZfbmFtZXNYAQAAAC10cqQvAABYEgAAAF93aW5yZWcuUkVHX0JJTkFSWXKlLwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjX3dpbnJlZy5SRUdfQklOQVJZWAEAAAAtdHKmLwAAWAsAAABlcnJuby5FQkFERXKnLwAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVCQURFWAEAAAAtdHKoLwAAWAsAAABlcnJuby5FQkFERnKpLwAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVCQURGWAEAAAAtdHKqLwAAWA0AAABnYy5ERUJVR19MRUFLcqsvAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2djLmh0bWwjZ2MuREVCVUdfTEVBS1gBAAAALXRyrC8AAFgMAAAAZXJybm8uRUNISUxEcq0vAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUNISUxEWAEAAAAtdHKuLwAAWAwAAABzdGF0LlNfRU5GTVRyry8AAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU19FTkZNVFgBAAAALXRysC8AAFgUAAAAc3RyaW5nLmFzY2lpX2xldHRlcnNysS8AAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLmFzY2lpX2xldHRlcnNYAQAAAC10crIvAABYCwAAAHRva2VuLkNPTE9OcrMvAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uQ09MT05YAQAAAC10crQvAABYFgAAAHN1bmF1LkFVRElPX0ZJTEVfTUFHSUNytS8AAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VuYXUuaHRtbCNzdW5hdS5BVURJT19GSUxFX01BR0lDWAEAAAAtdHK2LwAAWAsAAABlcnJuby5FQkFEUnK3LwAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVCQURSWAEAAAAtdHK4LwAAWAsAAABlcnJuby5FU1JDSHK5LwAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVTUkNIWAEAAAAtdHK6LwAAWBMAAAByZXNvdXJjZS5STElNSVRfQ1BVcrsvAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Jlc291cmNlLmh0bWwjcmVzb3VyY2UuUkxJTUlUX0NQVVgBAAAALXRyvC8AAFgaAAAAaGFzaGxpYi5oYXNobGliLmFsZ29yaXRobXNyvS8AAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaGFzaGxpYi5odG1sI2hhc2hsaWIuaGFzaGxpYi5hbGdvcml0aG1zWAEAAAAtdHK+LwAAWA4AAABvcy5FWF9OT1RGT1VORHK/LwAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLkVYX05PVEZPVU5EWAEAAAAtdHLALwAAWA8AAAB0eXBlcy5TbGljZVR5cGVywS8AAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHlwZXMuaHRtbCN0eXBlcy5TbGljZVR5cGVYAQAAAC10csIvAABYEAAAAHRva2VuaXplLkNPTU1FTlRywy8AAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW5pemUuaHRtbCN0b2tlbml6ZS5DT01NRU5UWAEAAAAtdHLELwAAWAsAAABlcnJuby5FWERFVnLFLwAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVYREVWWAEAAAAtdHLGLwAAWAgAAABvcy5FWF9PS3LHLwAAKGppAQAAamoBAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLkVYX09LWAEAAAAtdHLILwAAWA8AAABtc2lsaWIuc2VxdWVuY2VyyS8AAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLnNlcXVlbmNlWAEAAAAtdHLKLwAAWAcAAABjcmVkaXRzcssvAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbnN0YW50cy5odG1sI2NyZWRpdHNYAQAAAC10cswvAABYDAAAAHN0YXQuU19JRkxOS3LNLwAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TX0lGTE5LWAEAAAAtdHLOLwAAWA4AAAB0eXBlcy5Db2RlVHlwZXLPLwAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90eXBlcy5odG1sI3R5cGVzLkNvZGVUeXBlWAEAAAAtdHLQLwAAWAkAAABvcy5PX0VYQ0xy0S8AAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5PX0VYQ0xYAQAAAC10ctIvAABYDAAAAHN0YXQuU19JUk9USHLTLwAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TX0lST1RIWAEAAAAtdHLULwAAWBEAAABzdGF0LlNGX0lNTVVUQUJMRXLVLwAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TRl9JTU1VVEFCTEVYAQAAAC10ctYvAABYBwAAAGNkLnBudW1y1y8AAChqaQEAAGpqAQAAWDEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2QuaHRtbCNjZC5wbnVtWAEAAAAtdHLYLwAAWAwAAAB0b2tlbi5MQlJBQ0Vy2S8AAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5MQlJBQ0VYAQAAAC10ctovAABYDwAAAHN5bWJvbC5zeW1fbmFtZXLbLwAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeW1ib2wuaHRtbCNzeW1ib2wuc3ltX25hbWVYAQAAAC10ctwvAABYDgAAAHRva2VuLnRva19uYW1lct0vAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4udG9rX25hbWVYAQAAAC10ct4vAABYIQAAAHN1bmF1LkFVRElPX0ZJTEVfRU5DT0RJTkdfTVVMQVdfOHLfLwAAKGppAQAAamoBAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdW5hdS5odG1sI3N1bmF1LkFVRElPX0ZJTEVfRU5DT0RJTkdfTVVMQVdfOFgBAAAALXRy4C8AAFgTAAAAd2luc291bmQuU05EX05PV0FJVHLhLwAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93aW5zb3VuZC5odG1sI3dpbnNvdW5kLlNORF9OT1dBSVRYAQAAAC10cuIvAABYDQAAAFB5X1RQRkxBR1NfR0Ny4y8AAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNQeV9UUEZMQUdTX0dDWAEAAAAtdHLkLwAAWBIAAABzeXMubGFzdF90cmFjZWJhY2ty5S8AAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmxhc3RfdHJhY2ViYWNrWAEAAAAtdHLmLwAAWBEAAAB3aW5zb3VuZC5TTkRfTE9PUHLnLwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93aW5zb3VuZC5odG1sI3dpbnNvdW5kLlNORF9MT09QWAEAAAAtdHLoLwAAWA4AAABzeXMubWF4dW5pY29kZXLpLwAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNzeXMubWF4dW5pY29kZVgBAAAALXRy6i8AAFgLAAAAb3MuU0VFS19FTkRy6y8AAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5TRUVLX0VORFgBAAAALXRy7C8AAFgKAAAAb3MuT19UUlVOQ3LtLwAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLk9fVFJVTkNYAQAAAC10cu4vAABYDgAAAGVycm5vLkVOT1RDT05Ocu8vAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRU5PVENPTk5YAQAAAC10cvAvAABYDAAAAGVycm5vLkVQUk9UT3LxLwAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVQUk9UT1gBAAAALXRy8i8AAFgFAAAARmFsc2Vy8y8AAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uc3RhbnRzLmh0bWwjRmFsc2VYAQAAAC10cvQvAABYEgAAAHN0cmluZy5wdW5jdHVhdGlvbnL1LwAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNzdHJpbmcucHVuY3R1YXRpb25YAQAAAC10cvYvAABYEgAAAHV1aWQuTkFNRVNQQUNFX09JRHL3LwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91dWlkLmh0bWwjdXVpZC5OQU1FU1BBQ0VfT0lEWAEAAAAtdHL4LwAAWAwAAABzeXMucGxhdGZvcm1y+S8AAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLnBsYXRmb3JtWAEAAAAtdHL6LwAAWAsAAABkYm0ubGlicmFyeXL7LwAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYm0uaHRtbCNkYm0ubGlicmFyeVgBAAAALXRy/C8AAFgSAAAAcG9zaXhmaWxlLlNFRUtfQ1VScv0vAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Bvc2l4ZmlsZS5odG1sI3Bvc2l4ZmlsZS5TRUVLX0NVUlgBAAAALXRy/i8AAFgRAAAAb3MuRVhfVU5BVkFJTEFCTEVy/y8AAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5FWF9VTkFWQUlMQUJMRVgBAAAALXRyADAAAFgRAAAAZXJybm8uRU5PUFJPVE9PUFRyATAAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTk9QUk9UT09QVFgBAAAALXRyAjAAAFgRAAAAb3MucGF0aGNvbmZfbmFtZXNyAzAAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5wYXRoY29uZl9uYW1lc1gBAAAALXRyBDAAAFgUAAAAemlwZmlsZS5aSVBfREVGTEFURURyBTAAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGZpbGUuWklQX0RFRkxBVEVEWAEAAAAtdHIGMAAAWBcAAABzaWduYWwuQ1RSTF9CUkVBS19FVkVOVHIHMAAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaWduYWwuaHRtbCNzaWduYWwuQ1RSTF9CUkVBS19FVkVOVFgBAAAALXRyCDAAAFgOAAAAbG9jYWxlLllFU0VYUFJyCTAAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLllFU0VYUFJYAQAAAC10cgowAABYEgAAAHdpbnNvdW5kLlNORF9BTElBU3ILMAAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93aW5zb3VuZC5odG1sI3dpbnNvdW5kLlNORF9BTElBU1gBAAAALXRyDDAAAFgKAAAAcmUuVkVSQk9TRXINMAAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sI3JlLlZFUkJPU0VYAQAAAC10cg4wAABYDQAAAG1zaWxpYi5zY2hlbWFyDzAAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLnNjaGVtYVgBAAAALXRyEDAAAFgOAAAAd2luc291bmQuTUJfT0tyETAAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2luc291bmQuaHRtbCN3aW5zb3VuZC5NQl9PS1gBAAAALXRyEjAAAFgSAAAAc3lzLl9fZXhjZXB0aG9va19fchMwAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5fX2V4Y2VwdGhvb2tfX1gBAAAALXRyFDAAAFgSAAAAc3VicHJvY2Vzcy5TV19ISURFchUwAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLlNXX0hJREVYAQAAAC10chYwAABYDAAAAHRpbWUuYWx0em9uZXIXMAAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aW1lLmh0bWwjdGltZS5hbHR6b25lWAEAAAAtdHIYMAAAWAwAAABlcnJuby5FSVNOQU1yGTAAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FSVNOQU1YAQAAAC10chowAABYCgAAAHN5cy5wcmVmaXhyGzAAAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLnByZWZpeFgBAAAALXRyHDAAAFgLAAAAZXJybm8uRVBFUk1yHTAAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FUEVSTVgBAAAALXRyHjAAAFgjAAAAc3VuYXUuQVVESU9fRklMRV9FTkNPRElOR19MSU5FQVJfMzJyHzAAAChqaQEAAGpqAQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VuYXUuaHRtbCNzdW5hdS5BVURJT19GSUxFX0VOQ09ESU5HX0xJTkVBUl8zMlgBAAAALXRyIDAAAFgIAAAAdG9rZW4uT1ByITAAAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5PUFgBAAAALXRyIjAAAFgOAAAAdHlwZXMuRGljdFR5cGVyIzAAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHlwZXMuaHRtbCN0eXBlcy5EaWN0VHlwZVgBAAAALXRyJDAAAFgMAAAAZXJybm8uRU5PU1lTciUwAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRU5PU1lTWAEAAAAtdHImMAAAWAwAAABlcnJuby5FQUNDRVNyJzAAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FQUNDRVNYAQAAAC10cigwAABYEAAAAHN0YXQuVUZfTk9VTkxJTktyKTAAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuVUZfTk9VTkxJTktYAQAAAC10ciowAABYCwAAAG9zLkVYX0lPRVJSciswAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuRVhfSU9FUlJYAQAAAC10ciwwAABYDwAAAHRva2VuLlBMVVNFUVVBTHItMAAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLlBMVVNFUVVBTFgBAAAALXRyLjAAAFgXAAAAc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVyLzAAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVYAQAAAC10cjAwAABYHwAAAHNzbC5PUF9DSVBIRVJfU0VSVkVSX1BSRUZFUkVOQ0VyMTAAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLk9QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRVgBAAAALXRyMjAAAFgNAAAAbWltaWZ5Lk1BWExFTnIzMAAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW1pZnkuaHRtbCNtaW1pZnkuTUFYTEVOWAEAAAAtdHI0MAAAWAcAAABvcy5uYW1lcjUwAAAoamkBAABqagEAAFgxAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MubmFtZVgBAAAALXRyNjAAAFgZAAAAc3NsLlZFUklGWV9DUkxfQ0hFQ0tfTEVBRnI3MAAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuVkVSSUZZX0NSTF9DSEVDS19MRUFGWAEAAAAtdHI4MAAAWBMAAABjU3RyaW5nSU8uSW5wdXRUeXBlcjkwAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZ2lvLmh0bWwjY1N0cmluZ0lPLklucHV0VHlwZVgBAAAALXRyOjAAAFgUAAAAZG9jdGVzdC5SRVBPUlRfTkRJRkZyOzAAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuUkVQT1JUX05ESUZGWAEAAAAtdHI8MAAAWAsAAAB0aW1lLnR6bmFtZXI9MAAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aW1lLmh0bWwjdGltZS50em5hbWVYAQAAAC10cj4wAABYCQAAAG9zLk9fVEVYVHI/MAAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLk9fVEVYVFgBAAAALXRyQDAAAFgMAAAAc3RhdC5TX0lXR1JQckEwAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNfSVdHUlBYAQAAAC10ckIwAABYDgAAAG1zdmNydC5MS19MT0NLckMwAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zdmNydC5odG1sI21zdmNydC5MS19MT0NLWAEAAAAtdHJEMAAAWBIAAAB0YXJmaWxlLlBBWF9GT1JNQVRyRTAAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuUEFYX0ZPUk1BVFgBAAAALXRyRjAAAFgLAAAAZGlzLmhhc2ZyZWVyRzAAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjZGlzLmhhc2ZyZWVYAQAAAC10ckgwAABYDQAAAGVycm5vLkVUWFRCU1lySTAAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FVFhUQlNZWAEAAAAtdHJKMAAAWA4AAABzeXMuX19zdGRlcnJfX3JLMAAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNzeXMuX19zdGRlcnJfX1gBAAAALXRyTDAAAFgRAAAAZnRwbGliLmFsbF9lcnJvcnNyTTAAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnRwbGliLmh0bWwjZnRwbGliLmFsbF9lcnJvcnNYAQAAAC10ck4wAABYEQAAAGVycm5vLkVXT1VMREJMT0NLck8wAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRVdPVUxEQkxPQ0tYAQAAAC10clAwAABYEwAAAF93aW5yZWcuS0VZX0VYRUNVVEVyUTAAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvX3dpbnJlZy5odG1sI193aW5yZWcuS0VZX0VYRUNVVEVYAQAAAC10clIwAABYEwAAAHN5cy5fX2Rpc3BsYXlob29rX19yUzAAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLl9fZGlzcGxheWhvb2tfX1gBAAAALXRyVDAAAFgJAAAAc3lzLnN0ZGluclUwAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5zdGRpblgBAAAALXRyVjAAAFgTAAAAUHlfVFBGTEFHU19SRUFEWUlOR3JXMAAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI1B5X1RQRkxBR1NfUkVBRFlJTkdYAQAAAC10clgwAABYDgAAAHNpdGUuVVNFUl9TSVRFclkwAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NpdGUuaHRtbCNzaXRlLlVTRVJfU0lURVgBAAAALXRyWjAAAFgLAAAAc3lzLm1vZHVsZXNyWzAAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLm1vZHVsZXNYAQAAAC10clwwAABYHwAAAHN1YnByb2Nlc3MuU1RBUlRGX1VTRVNIT1dXSU5ET1dyXTAAAChqaQEAAGpqAQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI3N1YnByb2Nlc3MuU1RBUlRGX1VTRVNIT1dXSU5ET1dYAQAAAC10cl4wAABYEQAAAHVybGxpYi5fdXJsb3BlbmVycl8wAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYi5odG1sI3VybGxpYi5fdXJsb3BlbmVyWAEAAAAtdHJgMAAAWBIAAABQeV9UUEZMQUdTX0RFRkFVTFRyYTAAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNQeV9UUEZMQUdTX0RFRkFVTFRYAQAAAC10cmIwAABYDwAAAHN5cy5weTNrd2FybmluZ3JjMAAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNzeXMucHkza3dhcm5pbmdYAQAAAC10cmQwAABYDQAAAGNvZGVjcy5CT01fQkVyZTAAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLkJPTV9CRVgBAAAALXRyZjAAAFgWAAAAdG9rZW4uRE9VQkxFU0xBU0hFUVVBTHJnMAAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLkRPVUJMRVNMQVNIRVFVQUxYAQAAAC10cmgwAABYDwAAAHR5cGVzLkNsYXNzVHlwZXJpMAAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90eXBlcy5odG1sI3R5cGVzLkNsYXNzVHlwZVgBAAAALXRyajAAAFgQAAAAdHlwZXMuQnVmZmVyVHlwZXJrMAAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90eXBlcy5odG1sI3R5cGVzLkJ1ZmZlclR5cGVYAQAAAC10cmwwAABYDwAAAGVycm5vLkVUSU1FRE9VVHJtMAAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVUSU1FRE9VVFgBAAAALXRybjAAAFgMAAAAb3MuRVhfTk9VU0VScm8wAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuRVhfTk9VU0VSWAEAAAAtdHJwMAAAWA0AAABlcnJuby5FTElCU0NOcnEwAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUxJQlNDTlgBAAAALXRycjAAAFgKAAAAY3Vyc2VzLkVSUnJzMAAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMuRVJSWAEAAAAtdHJ0MAAAWAkAAABlcnJuby5FSU9ydTAAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FSU9YAQAAAC10cnYwAABYDwAAAHN5cy53YXJub3B0aW9uc3J3MAAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNzeXMud2Fybm9wdGlvbnNYAQAAAC10cngwAABYDgAAAHR5cGVzLkxvbmdUeXBlcnkwAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R5cGVzLmh0bWwjdHlwZXMuTG9uZ1R5cGVYAQAAAC10cnowAABYEAAAAGRhdGV0aW1lLk1BWFlFQVJyezAAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5NQVhZRUFSWAEAAAAtdHJ8MAAAWBQAAAB0eXBlcy5EaWN0aW9uYXJ5VHlwZXJ9MAAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90eXBlcy5odG1sI3R5cGVzLkRpY3Rpb25hcnlUeXBlWAEAAAAtdHJ+MAAAWA0AAABsb2NhbGUuTENfQUxMcn8wAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvY2FsZS5odG1sI2xvY2FsZS5MQ19BTExYAQAAAC10coAwAABYGwAAAFB5X1RQRkxBR1NfSEFWRV9TRVFVRU5DRV9JTnKBMAAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI1B5X1RQRkxBR1NfSEFWRV9TRVFVRU5DRV9JTlgBAAAALXRygjAAAFgOAAAAbWltaWZ5LkNIQVJTRVRygzAAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWltaWZ5Lmh0bWwjbWltaWZ5LkNIQVJTRVRYAQAAAC10coQwAABYFgAAAHRlc3Quc3VwcG9ydC5pc19qeXRob25yhTAAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5pc19qeXRob25YAQAAAC10coYwAABYCQAAAG9zLlBfV0FJVHKHMAAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLlBfV0FJVFgBAAAALXRyiDAAAFgOAAAAb3MuRVhfUFJPVE9DT0xyiTAAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5FWF9QUk9UT0NPTFgBAAAALXRyijAAAFgQAAAAbG9jYWxlLkVSQV9UX0ZNVHKLMAAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUuRVJBX1RfRk1UWAEAAAAtdHKMMAAAWAwAAABzeXMuZXhjX3R5cGVyjTAAAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmV4Y190eXBlWAEAAAAtdHKOMAAAWBoAAABkaXN0dXRpbHMuc3lzY29uZmlnLlBSRUZJWHKPMAAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5zeXNjb25maWcuUFJFRklYWAEAAAAtdHKQMAAAWBcAAABoYXNobGliLmhhc2guYmxvY2tfc2l6ZXKRMAAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9oYXNobGliLmh0bWwjaGFzaGxpYi5oYXNoLmJsb2NrX3NpemVYAQAAAC10cpIwAABYCgAAAHRva2VuLlJQQVJykzAAAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5SUEFSWAEAAAAtdHKUMAAAWA0AAAB0aW1lLnRpbWV6b25lcpUwAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpbWUuaHRtbCN0aW1lLnRpbWV6b25lWAEAAAAtdHKWMAAAWCQAAABfd2lucmVnLlJFR19GVUxMX1JFU09VUkNFX0RFU0NSSVBUT1JylzAAAChqaQEAAGpqAQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvX3dpbnJlZy5odG1sI193aW5yZWcuUkVHX0ZVTExfUkVTT1VSQ0VfREVTQ1JJUFRPUlgBAAAALXRymDAAAFgKAAAAb3MuZGVmcGF0aHKZMAAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLmRlZnBhdGhYAQAAAC10cpowAABYEQAAAF93aW5yZWcuS0VZX1dSSVRFcpswAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLktFWV9XUklURVgBAAAALXRynDAAAFgQAAAAc29ja2V0LlNPTUFYQ09OTnKdMAAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuU09NQVhDT05OWAEAAAAtdHKeMAAAWAwAAABlcnJuby5FQkZPTlRynzAAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FQkZPTlRYAQAAAC10cqAwAABYCwAAAG9zLk9fTk9DVFRZcqEwAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuT19OT0NUVFlYAQAAAC10cqIwAABYDgAAAHN0cmluZy5sZXR0ZXJzcqMwAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZy5odG1sI3N0cmluZy5sZXR0ZXJzWAEAAAAtdHKkMAAAWAoAAABvcy5UTVBfTUFYcqUwAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuVE1QX01BWFgBAAAALXRypjAAAFgWAAAAc3RyaW5nLmFzY2lpX3VwcGVyY2FzZXKnMAAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNzdHJpbmcuYXNjaWlfdXBwZXJjYXNlWAEAAAAtdHKoMAAAWA0AAABzeXMuX19zdGRpbl9fcqkwAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5fX3N0ZGluX19YAQAAAC10cqowAABYDAAAAHN0YXQuU19JU0dJRHKrMAAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TX0lTR0lEWAEAAAAtdHKsMAAAWA8AAABlcnJuby5FTk9URU1QVFlyrTAAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTk9URU1QVFlYAQAAAC10cq4wAABYEgAAAHNzbC5QUk9UT0NPTF9TU0x2M3KvMAAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuUFJPVE9DT0xfU1NMdjNYAQAAAC10crAwAABYCwAAAGVycm5vLkVQSVBFcrEwAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRVBJUEVYAQAAAC10crIwAABYEgAAAHNzbC5QUk9UT0NPTF9TU0x2MnKzMAAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuUFJPVE9DT0xfU1NMdjJYAQAAAC10crQwAABYEwAAAFB5X1RQRkxBR1NfQkFTRVRZUEVytTAAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNQeV9UUEZMQUdTX0JBU0VUWVBFWAEAAAAtdHK2MAAAWAoAAAB0b2tlbi5MU1FCcrcwAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uTFNRQlgBAAAALXRyuDAAAFgWAAAAc3RyaW5nLmFzY2lpX2xvd2VyY2FzZXK5MAAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNzdHJpbmcuYXNjaWlfbG93ZXJjYXNlWAEAAAAtdHK6MAAAWB8AAAB0YXJmaWxlLlRhckZpbGVDb21wYXQuVEFSX1BMQUlOcrswAAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLlRhckZpbGVDb21wYXQuVEFSX1BMQUlOWAEAAAAtdHK8MAAAWA4AAABrZXl3b3JkLmt3bGlzdHK9MAAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9rZXl3b3JkLmh0bWwja2V5d29yZC5rd2xpc3RYAQAAAC10cr4wAABYDwAAAGVycm5vLkVORVRSRVNFVHK/MAAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVORVRSRVNFVFgBAAAALXRywDAAAFgOAAAAc2lnbmFsLlNJR19JR05ywTAAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2lnbmFsLmh0bWwjc2lnbmFsLlNJR19JR05YAQAAAC10csIwAABYCQAAAGN1cnNlcy5PS3LDMAAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMuT0tYAQAAAC10csQwAABYEQAAAHR5cGVzLkJvb2xlYW5UeXBlcsUwAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R5cGVzLmh0bWwjdHlwZXMuQm9vbGVhblR5cGVYAQAAAC10csYwAABYCgAAAHNzbC5PUF9BTExyxzAAAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLk9QX0FMTFgBAAAALXRyyDAAAFgXAAAAeG1sLmRvbS5YSFRNTF9OQU1FU1BBQ0VyyTAAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uWEhUTUxfTkFNRVNQQUNFWAEAAAAtdHLKMAAAWAwAAABlcnJuby5FU1JNTlRyyzAAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FU1JNTlRYAQAAAC10cswwAABYDAAAAGVycm5vLkVYRlVMTHLNMAAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVYRlVMTFgBAAAALXRyzjAAAFgLAAAAb3MuT19XUk9OTFlyzzAAAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5PX1dST05MWVgBAAAALXRy0DAAAFgYAAAAZG9jdGVzdC5DT01QQVJJU09OX0ZMQUdTctEwAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LkNPTVBBUklTT05fRkxBR1NYAQAAAC10ctIwAABYDgAAAHN0YXR2ZnMuRl9GTEFHctMwAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXR2ZnMuaHRtbCNzdGF0dmZzLkZfRkxBR1gBAAAALXRy1DAAAFgMAAAAZXJybm8uRUNIUk5HctUwAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUNIUk5HWAEAAAAtdHLWMAAAWBEAAABsb2NhbGUuTENfQ09MTEFURXLXMAAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUuTENfQ09MTEFURVgBAAAALXRy2DAAAFgVAAAAdG9rZW4uQ0lSQ1VNRkxFWEVRVUFMctkwAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uQ0lSQ1VNRkxFWEVRVUFMWAEAAAAtdHLaMAAAWBkAAABfd2lucmVnLkhLRVlfQ0xBU1NFU19ST09UctswAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLkhLRVlfQ0xBU1NFU19ST09UWAEAAAAtdHLcMAAAWA4AAABlcnJuby5FTDJOU1lOQ3LdMAAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVMMk5TWU5DWAEAAAAtdHLeMAAAWBIAAABsb2NhbGUuTENfTUVTU0FHRVNy3zAAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLkxDX01FU1NBR0VTWAEAAAAtdHLgMAAAWA0AAABzdGF0LlNUX05MSU5LcuEwAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNUX05MSU5LWAEAAAAtdHLiMAAAWBQAAAByZXNvdXJjZS5SVVNBR0VfU0VMRnLjMAAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXNvdXJjZS5odG1sI3Jlc291cmNlLlJVU0FHRV9TRUxGWAEAAAAtdHLkMAAAWAwAAABlcnJuby5FTUxJTkty5TAAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTUxJTktYAQAAAC10cuYwAABYEAAAAHN0cmluZy5sb3dlcmNhc2Vy5zAAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLmxvd2VyY2FzZVgBAAAALXRy6DAAAFgKAAAAZ2MuZ2FyYmFnZXLpMAAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nYy5odG1sI2djLmdhcmJhZ2VYAQAAAC10cuowAABYGwAAAHVuaWNvZGVkYXRhLnVuaWRhdGFfdmVyc2lvbnLrMAAAKGppAQAAamoBAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bmljb2RlZGF0YS5odG1sI3VuaWNvZGVkYXRhLnVuaWRhdGFfdmVyc2lvblgBAAAALXRy7DAAAFgNAAAAZXJybm8uRUxJQkJBRHLtMAAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVMSUJCQURYAQAAAC10cu4wAABYGQAAAHdlYWtyZWYuQ2FsbGFibGVQcm94eVR5cGVy7zAAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2Vha3JlZi5odG1sI3dlYWtyZWYuQ2FsbGFibGVQcm94eVR5cGVYAQAAAC10cvAwAABYEQAAAHR5cGVzLlN0cmluZ1R5cGVzcvEwAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R5cGVzLmh0bWwjdHlwZXMuU3RyaW5nVHlwZXNYAQAAAC10cvIwAABYCwAAAG9zLkVYX1VTQUdFcvMwAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuRVhfVVNBR0VYAQAAAC10cvQwAABYCgAAAHJlLlVOSUNPREVy9TAAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmUuaHRtbCNyZS5VTklDT0RFWAEAAAAtdHL2MAAAWA0AAABvcy5XQ09OVElOVUVEcvcwAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuV0NPTlRJTlVFRFgBAAAALXRy+DAAAFgNAAAAaW1wLkNfQlVJTFRJTnL5MAAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbXAuaHRtbCNpbXAuQ19CVUlMVElOWAEAAAAtdHL6MAAAWAsAAABvcy5PX05ERUxBWXL7MAAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLk9fTkRFTEFZWAEAAAAtdHL8MAAAWAsAAAB0b2tlbi5DT01NQXL9MAAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLkNPTU1BWAEAAAAtdHL+MAAAWBQAAAB0YXJmaWxlLlVTVEFSX0ZPUk1BVHL/MAAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5VU1RBUl9GT1JNQVRYAQAAAC10cgAxAABYEAAAAHN0YXR2ZnMuRl9GUlNJWkVyATEAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdHZmcy5odG1sI3N0YXR2ZnMuRl9GUlNJWkVYAQAAAC10cgIxAABYDgAAAHN5cy5mbG9hdF9pbmZvcgMxAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5mbG9hdF9pbmZvWAEAAAAtdHIEMQAAWAoAAAByZXByLmFSZXBycgUxAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlcHIuaHRtbCNyZXByLmFSZXByWAEAAAAtdHIGMQAAWBMAAABzaWduYWwuQ1RSTF9DX0VWRU5UcgcxAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NpZ25hbC5odG1sI3NpZ25hbC5DVFJMX0NfRVZFTlRYAQAAAC10cggxAABYCwAAAHN0YXQuU1RfREVWcgkxAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNUX0RFVlgBAAAALXRyCjEAAFgTAAAAdGVzdC5zdXBwb3J0LlRFU1RGTnILMQAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LlRFU1RGTlgBAAAALXRyDDEAAFgZAAAAY3Vyc2VzLmFzY2lpLmNvbnRyb2xuYW1lc3INMQAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuYXNjaWkuaHRtbCNjdXJzZXMuYXNjaWkuY29udHJvbG5hbWVzWAEAAAAtdHIOMQAAWCUAAABhc3luY2hhdC5hc3luY19jaGF0LmFjX2luX2J1ZmZlcl9zaXplcg8xAAAoamkBAABqagEAAFhVAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzeW5jaGF0Lmh0bWwjYXN5bmNoYXQuYXN5bmNfY2hhdC5hY19pbl9idWZmZXJfc2l6ZVgBAAAALXRyEDEAAFgOAAAAb3MuRVhfU09GVFdBUkVyETEAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5FWF9TT0ZUV0FSRVgBAAAALXRyEjEAAFgSAAAAd2luc291bmQuU05EX0FTWU5DchMxAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dpbnNvdW5kLmh0bWwjd2luc291bmQuU05EX0FTWU5DWAEAAAAtdHIUMQAAWAwAAABvcy5FWF9PU0ZJTEVyFTEAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5FWF9PU0ZJTEVYAQAAAC10chYxAABYEwAAAHV1aWQuTkFNRVNQQUNFX1g1MDByFzEAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXVpZC5odG1sI3V1aWQuTkFNRVNQQUNFX1g1MDBYAQAAAC10chgxAABYCAAAAEVsbGlwc2lzchkxAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbnN0YW50cy5odG1sI0VsbGlwc2lzWAEAAAAtdHIaMQAAWAsAAABzc2wuSEFTX05QTnIbMQAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuSEFTX05QTlgBAAAALXRyHDEAAFgPAAAAc3RhdHZmcy5GX0JGUkVFch0xAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXR2ZnMuaHRtbCNzdGF0dmZzLkZfQkZSRUVYAQAAAC10ch4xAABYCwAAAG9zLk9fU0hMT0NLch8xAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuT19TSExPQ0tYAQAAAC10ciAxAABYCgAAAHRva2VuLlZCQVJyITEAAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5WQkFSWAEAAAAtdHIiMQAAWBAAAABzdGF0LlNGX1NOQVBTSE9UciMxAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNGX1NOQVBTSE9UWAEAAAAtdHIkMQAAWA8AAABzc2wuSEFTX1RMU3YxXzNyJTEAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLkhBU19UTFN2MV8zWAEAAAAtdHImMQAAWBQAAABnYy5ERUJVR19DT0xMRUNUQUJMRXInMQAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nYy5odG1sI2djLkRFQlVHX0NPTExFQ1RBQkxFWAEAAAAtdHIoMQAAWA0AAABlcnJuby5FTk9MSU5LcikxAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRU5PTElOS1gBAAAALXRyKjEAAFgOAAAAc3lzLl9fc3Rkb3V0X19yKzEAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLl9fc3Rkb3V0X19YAQAAAC10ciwxAABYFAAAAF93aW5yZWcuUkVHX01VTFRJX1Naci0xAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLlJFR19NVUxUSV9TWlgBAAAALXRyLjEAAFgMAAAAbG9jYWxlLkRfRk1Uci8xAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvY2FsZS5odG1sI2xvY2FsZS5EX0ZNVFgBAAAALXRyMDEAAFgLAAAAZXJybm8uRTJCSUdyMTEAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FMkJJR1gBAAAALXRyMjEAAFgRAAAAdXVpZC5SRVNFUlZFRF9OQ1NyMzEAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXVpZC5odG1sI3V1aWQuUkVTRVJWRURfTkNTWAEAAAAtdHI0MQAAWBYAAABtaW1ldHlwZXMuY29tbW9uX3R5cGVzcjUxAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbWV0eXBlcy5odG1sI21pbWV0eXBlcy5jb21tb25fdHlwZXNYAQAAAC10cjYxAABYEQAAAHR5cGVzLkNvbXBsZXhUeXBlcjcxAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R5cGVzLmh0bWwjdHlwZXMuQ29tcGxleFR5cGVYAQAAAC10cjgxAABYGwAAAF93aW5yZWcuSEtFWV9DVVJSRU5UX0NPTkZJR3I5MQAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjX3dpbnJlZy5IS0VZX0NVUlJFTlRfQ09ORklHWAEAAAAtdHI6MQAAWBoAAAB0eXBlcy5NZW1iZXJEZXNjcmlwdG9yVHlwZXI7MQAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90eXBlcy5odG1sI3R5cGVzLk1lbWJlckRlc2NyaXB0b3JUeXBlWAEAAAAtdHI8MQAAWBAAAABzc2wuUFJPVE9DT0xfVExTcj0xAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5QUk9UT0NPTF9UTFNYAQAAAC10cj4xAABYBwAAAGNtYXRoLmVyPzEAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY21hdGguaHRtbCNjbWF0aC5lWAEAAAAtdHJAMQAAWBEAAABzc2wuT1BfTk9fVExTdjFfMXJBMQAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuT1BfTk9fVExTdjFfMVgBAAAALXRyQjEAAFgMAAAAc3RhdC5TX0lSV1hVckMxAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNfSVJXWFVYAQAAAC10ckQxAABYDQAAAGVycm5vLkVOT1ROQU1yRTEAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTk9UTkFNWAEAAAAtdHJGMQAAWAwAAABkb2N0ZXN0LlNLSVByRzEAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuU0tJUFgBAAAALXRySDEAAFgJAAAAY29weXJpZ2h0ckkxAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbnN0YW50cy5odG1sI2NvcHlyaWdodFgBAAAALXRySjEAAFgMAAAAZGlzLmhhc2xvY2FscksxAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI2Rpcy5oYXNsb2NhbFgBAAAALXRyTDEAAFgPAAAAZXJybm8uRVNIVVRET1dOck0xAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRVNIVVRET1dOWAEAAAAtdHJOMQAAWAwAAABzdGF0LlNfSVJXWEdyTzEAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU19JUldYR1gBAAAALXRyUDEAAFgOAAAAbG9jYWxlLkxDX1RJTUVyUTEAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLkxDX1RJTUVYAQAAAC10clIxAABYDwAAAHN0YXR2ZnMuRl9GRlJFRXJTMQAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0dmZzLmh0bWwjc3RhdHZmcy5GX0ZGUkVFWAEAAAAtdHJUMQAAWA0AAABlcnJuby5FQkFEUlFDclUxAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUJBRFJRQ1gBAAAALXRyVjEAAFgPAAAAb3MuRVhfQ0FOVENSRUFUclcxAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuRVhfQ0FOVENSRUFUWAEAAAAtdHJYMQAAWA0AAABwb3NpeC5lbnZpcm9uclkxAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Bvc2l4Lmh0bWwjcG9zaXguZW52aXJvblgBAAAALXRyWjEAAFgbAAAAc3VicHJvY2Vzcy5TVERfSU5QVVRfSEFORExFclsxAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLlNURF9JTlBVVF9IQU5ETEVYAQAAAC10clwxAABYEAAAAGxvY2FsZS5FUkFfRF9GTVRyXTEAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLkVSQV9EX0ZNVFgBAAAALXRyXjEAAFgQAAAAdGFibmFubnkudmVyYm9zZXJfMQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YWJuYW5ueS5odG1sI3RhYm5hbm55LnZlcmJvc2VYAQAAAC10cmAxAABYDQAAAHN5cy5kbGxoYW5kbGVyYTEAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmRsbGhhbmRsZVgBAAAALXRyYjEAAFgPAAAAZXJybm8uRU1VTFRJSE9QcmMxAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRU1VTFRJSE9QWAEAAAAtdHJkMQAAWAwAAABNRVRIX0NPRVhJU1RyZTEAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N0cnVjdHVyZXMuaHRtbCNNRVRIX0NPRVhJU1RYAQAAAC10cmYxAABYCwAAAHRva2VuLlNMQVNIcmcxAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uU0xBU0hYAQAAAC10cmgxAABYDAAAAHN0YXQuU19JRkRJUnJpMQAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TX0lGRElSWAEAAAAtdHJqMQAAWAoAAABvcy5wYXRoc2VwcmsxAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MucGF0aHNlcFgBAAAALXRybDEAAFgMAAAAc3RhdC5TX0lSV1hPcm0xAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNfSVJXWE9YAQAAAC10cm4xAABYEgAAAF93aW5yZWcuS0VZX05PVElGWXJvMQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjX3dpbnJlZy5LRVlfTk9USUZZWAEAAAAtdHJwMQAAWCYAAABzdW5hdS5BVURJT19GSUxFX0VOQ09ESU5HX0FEUENNX0c3MjNfM3JxMQAAKGppAQAAamoBAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdW5hdS5odG1sI3N1bmF1LkFVRElPX0ZJTEVfRU5DT0RJTkdfQURQQ01fRzcyM18zWAEAAAAtdHJyMQAAWA4AAABlcnJuby5FQUxSRUFEWXJzMQAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVBTFJFQURZWAEAAAAtdHJ0MQAAWBAAAAB0b2tlbi5TTEFTSEVRVUFMcnUxAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uU0xBU0hFUVVBTFgBAAAALXRydjEAAFgMAAAAZXJybm8uRUlOVkFMcncxAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUlOVkFMWAEAAAAtdHJ4MQAAWCEAAABkb2N0ZXN0LlJFUE9SVF9PTkxZX0ZJUlNUX0ZBSUxVUkVyeTEAAChqaQEAAGpqAQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuUkVQT1JUX09OTFlfRklSU1RfRkFJTFVSRVgBAAAALXRyejEAAFgLAAAAb3MuT19SQU5ET01yezEAAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MuaHRtbCNvcy5PX1JBTkRPTVgBAAAALXRyfDEAAFgMAAAAZXJybm8uRU5PTENLcn0xAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRU5PTENLWAEAAAAtdHJ+MQAAWAgAAAByZS5ERUJVR3J/MQAAKGppAQAAamoBAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sI3JlLkRFQlVHWAEAAAAtdHKAMQAAWBYAAAByZXNvdXJjZS5STElNSVRfTk9GSUxFcoExAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Jlc291cmNlLmh0bWwjcmVzb3VyY2UuUkxJTUlUX05PRklMRVgBAAAALXRygjEAAFgRAAAAZXJybm8uRU5FVFVOUkVBQ0hygzEAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTkVUVU5SRUFDSFgBAAAALXRyhDEAAFgQAAAAdHlwZXMuTGFtYmRhVHlwZXKFMQAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90eXBlcy5odG1sI3R5cGVzLkxhbWJkYVR5cGVYAQAAAC10coYxAABYFQAAAHJlc291cmNlLlJMSU1JVF9TVEFDS3KHMQAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXNvdXJjZS5odG1sI3Jlc291cmNlLlJMSU1JVF9TVEFDS1gBAAAALXRyiDEAAFgYAAAAd2luc291bmQuTUJfSUNPTkFTVEVSSVNLcokxAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dpbnNvdW5kLmh0bWwjd2luc291bmQuTUJfSUNPTkFTVEVSSVNLWAEAAAAtdHKKMQAAWAwAAABNRVRIX1ZBUkFSR1NyizEAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N0cnVjdHVyZXMuaHRtbCNNRVRIX1ZBUkFSR1NYAQAAAC10cowxAABYDgAAAG1zdmNydC5MS19STENLco0xAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zdmNydC5odG1sI21zdmNydC5MS19STENLWAEAAAAtdHKOMQAAWA8AAAB0eXBlcy5UdXBsZVR5cGVyjzEAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHlwZXMuaHRtbCN0eXBlcy5UdXBsZVR5cGVYAQAAAC10cpAxAABYDwAAAG1hcnNoYWwudmVyc2lvbnKRMQAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYXJzaGFsLmh0bWwjbWFyc2hhbC52ZXJzaW9uWAEAAAAtdHKSMQAAWA0AAABzdGF0LlNfSVdSSVRFcpMxAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNfSVdSSVRFWAEAAAAtdHKUMQAAWBEAAABodHRwbGliLnJlc3BvbnNlc3KVMQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odHRwbGliLmh0bWwjaHR0cGxpYi5yZXNwb25zZXNYAQAAAC10cpYxAABYFgAAAHNzbC5WRVJJRllfWDUwOV9TVFJJQ1RylzEAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlZFUklGWV9YNTA5X1NUUklDVFgBAAAALXRymDEAAFgRAAAAX3dpbnJlZy5SRUdfRFdPUkRymTEAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvX3dpbnJlZy5odG1sI193aW5yZWcuUkVHX0RXT1JEWAEAAAAtdHKaMQAAWAwAAABpbWdoZHIudGVzdHNymzEAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1naGRyLmh0bWwjaW1naGRyLnRlc3RzWAEAAAAtdHKcMQAAWAwAAABjZC5CTE9DS1NJWkVynTEAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2QuaHRtbCNjZC5CTE9DS1NJWkVYAQAAAC10cp4xAABYFQAAAHhtbC5kb20uWE1MX05BTUVTUEFDRXKfMQAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5YTUxfTkFNRVNQQUNFWAEAAAAtdHKgMQAAWAcAAABsaWNlbnNlcqExAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbnN0YW50cy5odG1sI2xpY2Vuc2VYAQAAAC10cqIxAABYIwAAAHN1YnByb2Nlc3MuQ1JFQVRFX05FV19QUk9DRVNTX0dST1VQcqMxAAAoamkBAABqagEAAFhVAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLkNSRUFURV9ORVdfUFJPQ0VTU19HUk9VUFgBAAAALXRypDEAAFgQAAAAc3RhdHZmcy5GX0JMT0NLU3KlMQAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0dmZzLmh0bWwjc3RhdHZmcy5GX0JMT0NLU1gBAAAALXRypjEAAFgJAAAAb3MuZXh0c2VwcqcxAAAoamkBAABqagEAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuZXh0c2VwWAEAAAAtdHKoMQAAWAQAAABxdWl0cqkxAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbnN0YW50cy5odG1sI3F1aXRYAQAAAC10cqoxAABYCwAAAG9zLlNFRUtfQ1VScqsxAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuU0VFS19DVVJYAQAAAC10cqwxAABYGwAAAHN1YnByb2Nlc3MuU1REX0VSUk9SX0hBTkRMRXKtMQAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5TVERfRVJST1JfSEFORExFWAEAAAAtdHKuMQAAWBcAAABfd2lucmVnLktFWV9RVUVSWV9WQUxVRXKvMQAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjX3dpbnJlZy5LRVlfUVVFUllfVkFMVUVYAQAAAC10crAxAABYDAAAAGVycm5vLkVOT0NTSXKxMQAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVOT0NTSVgBAAAALXRysjEAAFgLAAAAZXJybm8uRU5PU1JyszEAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTk9TUlgBAAAALXRytDEAAFgWAAAAaW8uREVGQVVMVF9CVUZGRVJfU0laRXK1MQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pby5odG1sI2lvLkRFRkFVTFRfQlVGRkVSX1NJWkVYAQAAAC10crYxAABYEgAAAE1hY09TLnJ1bnRpbWVtb2RlbHK3MQAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWNvcy5odG1sI01hY09TLnJ1bnRpbWVtb2RlbFgBAAAALXRyuDEAAFgMAAAAc3RhdC5TX0lFWEVDcrkxAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNfSUVYRUNYAQAAAC10croxAABYEAAAAGRvY3Rlc3QuRUxMSVBTSVNyuzEAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRUxMSVBTSVNYAQAAAC10crwxAABYDgAAAG9zLk9fVEVNUE9SQVJZcr0xAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuT19URU1QT1JBUllYAQAAAC10cr4xAABYCwAAAHRva2VuaXplLk5Mcr8xAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuaXplLmh0bWwjdG9rZW5pemUuTkxYAQAAAC10csAxAABYDgAAAHNvY2tldC5BRl9VTklYcsExAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5BRl9VTklYWAEAAAAtdHLCMQAAWAwAAAB0b2tlbi5OVU1CRVJywzEAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5OVU1CRVJYAQAAAC10csQxAABYDgAAAGdjLkRFQlVHX1NUQVRTcsUxAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2djLmh0bWwjZ2MuREVCVUdfU1RBVFNYAQAAAC10csYxAABYDwAAAHNvY2tldC5TT0NLX1JBV3LHMQAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuU09DS19SQVdYAQAAAC10csgxAABYFwAAAHJlc291cmNlLlJMSU1JVF9NRU1MT0NLcskxAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Jlc291cmNlLmh0bWwjcmVzb3VyY2UuUkxJTUlUX01FTUxPQ0tYAQAAAC10csoxAABYCgAAAHRva2VuLlNUQVJyyzEAAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5TVEFSWAEAAAAtdHLMMQAAWAsAAAB0b2tlbi5USUxERXLNMQAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLlRJTERFWAEAAAAtdHLOMQAAWBQAAABjc3YuUVVPVEVfTk9OTlVNRVJJQ3LPMQAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jc3YuaHRtbCNjc3YuUVVPVEVfTk9OTlVNRVJJQ1gBAAAALXRy0DEAAFgSAAAAbG9jYWxlLkVSQV9EX1RfRk1UctExAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvY2FsZS5odG1sI2xvY2FsZS5FUkFfRF9UX0ZNVFgBAAAALXRy0jEAAFgRAAAAc3NsLkNFUlRfT1BUSU9OQUxy0zEAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLkNFUlRfT1BUSU9OQUxYAQAAAC10ctQxAABYCwAAAG9zLlBfREVUQUNIctUxAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuUF9ERVRBQ0hYAQAAAC10ctYxAABYIgAAAHhtbC5zYXguaGFuZGxlci5mZWF0dXJlX25hbWVzcGFjZXNy1zEAAChqaQEAAGpqAQAAWFkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLmZlYXR1cmVfbmFtZXNwYWNlc1gBAAAALXRy2DEAAFgUAAAAdGVzdC5zdXBwb3J0LnZlcmJvc2Vy2TEAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC52ZXJib3NlWAEAAAAtdHLaMQAAWA0AAABlcnJuby5FSVNDT05OctsxAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUlTQ09OTlgBAAAALXRy3DEAAFgNAAAAZXJybm8uRVVOQVRDSHLdMQAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVVTkFUQ0hYAQAAAC10ct4xAABYIgAAAG9zLnBhdGguc3VwcG9ydHNfdW5pY29kZV9maWxlbmFtZXNy3zEAAChqaQEAAGpqAQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MucGF0aC5odG1sI29zLnBhdGguc3VwcG9ydHNfdW5pY29kZV9maWxlbmFtZXNYAQAAAC10cuAxAABYDAAAAGVycm5vLkVJTFNFUXLhMQAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVJTFNFUVgBAAAALXRy4jEAAFgPAAAAc3lzLmFwaV92ZXJzaW9ucuMxAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5cy5odG1sI3N5cy5hcGlfdmVyc2lvblgBAAAALXRy5DEAAFgSAAAAZXJybm8uRUFGTk9TVVBQT1JUcuUxAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUFGTk9TVVBQT1JUWAEAAAAtdHLmMQAAWA4AAABlcnJuby5FTElCRVhFQ3LnMQAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVMSUJFWEVDWAEAAAAtdHLoMQAAWAsAAAB0b2tlbi5NSU5VU3LpMQAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLk1JTlVTWAEAAAAtdHLqMQAAWAwAAAB0b2tlbi5ERURFTlRy6zEAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5ERURFTlRYAQAAAC10cuwxAABYEwAAAHNzbC5PUEVOU1NMX1ZFUlNJT05y7TEAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLk9QRU5TU0xfVkVSU0lPTlgBAAAALXRy7jEAAFgMAAAAZXJybm8uRU5PTkVUcu8xAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRU5PTkVUWAEAAAAtdHLwMQAAWBMAAABjb2RlY3MuQk9NX1VURjMyX0JFcvExAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5CT01fVVRGMzJfQkVYAQAAAC10cvIxAABYFwAAAHR5cGVzLlVuYm91bmRNZXRob2RUeXBlcvMxAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R5cGVzLmh0bWwjdHlwZXMuVW5ib3VuZE1ldGhvZFR5cGVYAQAAAC10cvQxAABYCwAAAGVycm5vLkVJTlRScvUxAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUlOVFJYAQAAAC10cvYxAABYDAAAAGVycm5vLkVJU0RJUnL3MQAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVJU0RJUlgBAAAALXRy+DEAAFgXAAAAbWltZXR5cGVzLmVuY29kaW5nc19tYXBy+TEAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWltZXR5cGVzLmh0bWwjbWltZXR5cGVzLmVuY29kaW5nc19tYXBYAQAAAC10cvoxAABYDQAAAHRva2VuLk5FV0xJTkVy+zEAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5ORVdMSU5FWAEAAAAtdHL8MQAAWBYAAAB0YXJmaWxlLkRFRkFVTFRfRk9STUFUcv0xAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLkRFRkFVTFRfRk9STUFUWAEAAAAtdHL+MQAAWA4AAABzeXMuZXhlY3V0YWJsZXL/MQAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNzeXMuZXhlY3V0YWJsZVgBAAAALXRyADIAAFgXAAAAX3dpbnJlZy5LRVlfQ1JFQVRFX0xJTktyATIAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvX3dpbnJlZy5odG1sI193aW5yZWcuS0VZX0NSRUFURV9MSU5LWAEAAAAtdHICMgAAWAwAAABzdGF0LlNfSVJHUlByAzIAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU19JUkdSUFgBAAAALXRyBDIAAFgRAAAAdGltZS5hY2NlcHQyZHllYXJyBTIAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGltZS5odG1sI3RpbWUuYWNjZXB0MmR5ZWFyWAEAAAAtdHIGMgAAWAwAAABlcnJuby5FTUZJTEVyBzIAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTUZJTEVYAQAAAC10cggyAABYDwAAAHRva2VuLlZCQVJFUVVBTHIJMgAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLlZCQVJFUVVBTFgBAAAALXRyCjIAAFgOAAAAc2l0ZS5VU0VSX0JBU0VyCzIAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2l0ZS5odG1sI3NpdGUuVVNFUl9CQVNFWAEAAAAtdHIMMgAAWAoAAABlcnJuby5FRE9Ncg0yAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRURPTVgBAAAALXRyDjIAAFgiAAAAeG1sLnNheC5oYW5kbGVyLmZlYXR1cmVfdmFsaWRhdGlvbnIPMgAAKGppAQAAamoBAABYWQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LmhhbmRsZXIuaHRtbCN4bWwuc2F4LmhhbmRsZXIuZmVhdHVyZV92YWxpZGF0aW9uWAEAAAAtdHIQMgAAWBAAAABjb2RlY3MuQk9NX1VURjE2chEyAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5CT01fVVRGMTZYAQAAAC10chIyAABYEQAAAGNhbGVuZGFyLmRheV9uYW1lchMyAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhbGVuZGFyLmh0bWwjY2FsZW5kYXIuZGF5X25hbWVYAQAAAC10chQyAABYCwAAAG9zLlNFRUtfU0VUchUyAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuU0VFS19TRVRYAQAAAC10chYyAABYGgAAAHNzbC5WRVJJRllfQ1JMX0NIRUNLX0NIQUlOchcyAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5WRVJJRllfQ1JMX0NIRUNLX0NIQUlOWAEAAAAtdHIYMgAAWAsAAABvcy5FWF9PU0VSUnIZMgAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLkVYX09TRVJSWAEAAAAtdHIaMgAAWBkAAABfd2lucmVnLkhLRVlfQ1VSUkVOVF9VU0VSchsyAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L193aW5yZWcuaHRtbCNfd2lucmVnLkhLRVlfQ1VSUkVOVF9VU0VSWAEAAAAtdHIcMgAAWBoAAABfd2lucmVnLktFWV9DUkVBVEVfU1VCX0tFWXIdMgAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjX3dpbnJlZy5LRVlfQ1JFQVRFX1NVQl9LRVlYAQAAAC10ch4yAABYHQAAAHN1YnByb2Nlc3MuQ1JFQVRFX05FV19DT05TT0xFch8yAAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLkNSRUFURV9ORVdfQ09OU09MRVgBAAAALXRyIDIAAFgMAAAAc3RhdC5TX0lGSUZPciEyAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNfSUZJRk9YAQAAAC10ciIyAABYEgAAAF93aW5yZWcuSEtFWV9VU0VSU3IjMgAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjX3dpbnJlZy5IS0VZX1VTRVJTWAEAAAAtdHIkMgAAWBUAAAByZXNvdXJjZS5STElNSVRfRlNJWkVyJTIAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVzb3VyY2UuaHRtbCNyZXNvdXJjZS5STElNSVRfRlNJWkVYAQAAAC10ciYyAABYEgAAAHNvY2tldC5TT0NLX1NUUkVBTXInMgAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuU09DS19TVFJFQU1YAQAAAC10cigyAABYBAAAAHJlLk1yKTIAAChqaQEAAGpqAQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmUuaHRtbCNyZS5NWAEAAAAtdHIqMgAAWB0AAABfd2lucmVnLkhLRVlfUEVSRk9STUFOQ0VfREFUQXIrMgAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjX3dpbnJlZy5IS0VZX1BFUkZPUk1BTkNFX0RBVEFYAQAAAC10ciwyAABYEQAAAGh0dHBsaWIuSFRUUF9QT1JUci0yAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0dHBsaWIuaHRtbCNodHRwbGliLkhUVFBfUE9SVFgBAAAALXRyLjIAAFgRAAAAc29ja2V0LlNvY2tldFR5cGVyLzIAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LlNvY2tldFR5cGVYAQAAAC10cjAyAABYDQAAAGVycm5vLkVVQ0xFQU5yMTIAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FVUNMRUFOWAEAAAAtdHIyMgAAWA0AAAB0b2tlbi5QRVJDRU5UcjMyAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uUEVSQ0VOVFgBAAAALXRyNDIAAFgXAAAAdHlwZXMuQnVpbHRpbk1ldGhvZFR5cGVyNTIAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHlwZXMuaHRtbCN0eXBlcy5CdWlsdGluTWV0aG9kVHlwZVgBAAAALXRyNjIAAFgTAAAAd2luc291bmQuU05EX05PU1RPUHI3MgAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93aW5zb3VuZC5odG1sI3dpbnNvdW5kLlNORF9OT1NUT1BYAQAAAC10cjgyAABYDQAAAGVycm5vLkVCQURNU0dyOTIAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FQkFETVNHWAEAAAAtdHI6MgAAWAsAAABvcy5PX0RJUkVDVHI7MgAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcy5odG1sI29zLk9fRElSRUNUWAEAAAAtdHI8MgAAWA4AAABlcnJuby5FTk9UU09DS3I9MgAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVOT1RTT0NLWAEAAAAtdHI+MgAAWBEAAABsb2NhbGUuQUxUX0RJR0lUU3I/MgAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUuQUxUX0RJR0lUU1gBAAAALXRyQDIAAFgSAAAAZXJybm8uRVRPT01BTllSRUZTckEyAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRVRPT01BTllSRUZTWAEAAAAtdHJCMgAAWBIAAABlcnJuby5FTkFNRVRPT0xPTkdyQzIAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTkFNRVRPT0xPTkdYAQAAAC10ckQyAABYFgAAAF93aW5yZWcuS0VZX0FMTF9BQ0NFU1NyRTIAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvX3dpbnJlZy5odG1sI193aW5yZWcuS0VZX0FMTF9BQ0NFU1NYAQAAAC10ckYyAABYDAAAAHN0YXQuU19JRkNIUnJHMgAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TX0lGQ0hSWAEAAAAtdHJIMgAAWBAAAABvcy5PX1NIT1JUX0xJVkVEckkyAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWwjb3MuT19TSE9SVF9MSVZFRFgBAAAALXRySjIAAFgNAAAAaW1wLlBZX1NPVVJDRXJLMgAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbXAuaHRtbCNpbXAuUFlfU09VUkNFWAEAAAAtdHJMMgAAWBAAAABlcnJuby5FT1BOT1RTVVBQck0yAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRU9QTk9UU1VQUFgBAAAALXRyTjIAAFghAAAAeG1sLnNheC5oYW5kbGVyLnByb3BlcnR5X2RvbV9ub2Rlck8yAAAoamkBAABqagEAAFhYAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5odG1sI3htbC5zYXguaGFuZGxlci5wcm9wZXJ0eV9kb21fbm9kZVgBAAAALXRyUDIAAFgNAAAAc3lzLm1ldGFfcGF0aHJRMgAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNzeXMubWV0YV9wYXRoWAEAAAAtdHJSMgAAWA4AAABjdXJzZXMudmVyc2lvbnJTMgAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMudmVyc2lvblgBAAAALXRyVDIAAFgIAAAAY2QuYXRpbWVyVTIAAChqaQEAAGpqAQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2QuaHRtbCNjZC5hdGltZVgBAAAALXRyVjIAAFgSAAAAUHlfVFBGTEFHU19IQVZFX0dDclcyAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjUHlfVFBGTEFHU19IQVZFX0dDWAEAAAAtdHJYMgAAWBEAAAB0eXBlcy5Vbmljb2RlVHlwZXJZMgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90eXBlcy5odG1sI3R5cGVzLlVuaWNvZGVUeXBlWAEAAAAtdHJaMgAAWAwAAABzdGF0LlNfSVdVU1JyWzIAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU19JV1VTUlgBAAAALXRyXDIAAFgUAAAAUHlfVFBGTEFHU19IQVZFX0lURVJyXTIAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNQeV9UUEZMQUdTX0hBVkVfSVRFUlgBAAAALXRyXjIAAFgRAAAAVGtpbnRlci5FWENFUFRJT05yXzIAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGtpbnRlci5odG1sI1RraW50ZXIuRVhDRVBUSU9OWAEAAAAtdHJgMgAAWA8AAABzc2wuT1BfTk9fVExTdjFyYTIAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLk9QX05PX1RMU3YxWAEAAAAtdHJiMgAAWAkAAAByZS5ET1RBTExyYzIAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmUuaHRtbCNyZS5ET1RBTExYAQAAAC10cmQyAABYDQAAAHN0YXQuU19JRlNPQ0tyZTIAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU19JRlNPQ0tYAQAAAC10cmYyAABYEAAAAHRlbXBmaWxlLnRlbXBkaXJyZzIAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGVtcGZpbGUuaHRtbCN0ZW1wZmlsZS50ZW1wZGlyWAEAAAAtdHJoMgAAWBIAAABwb3NpeGZpbGUuU0VFS19TRVRyaTIAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcG9zaXhmaWxlLmh0bWwjcG9zaXhmaWxlLlNFRUtfU0VUWAEAAAAtdHJqMgAAWB4AAAB4bWwuc2F4LmhhbmRsZXIuYWxsX3Byb3BlcnRpZXNyazIAAChqaQEAAGpqAQAAWFUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLmFsbF9wcm9wZXJ0aWVzWAEAAAAtdHJsMgAAWBIAAABwb3NpeGZpbGUuU0VFS19FTkRybTIAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcG9zaXhmaWxlLmh0bWwjcG9zaXhmaWxlLlNFRUtfRU5EWAEAAAAtdHJuMgAAWAwAAAB0b2tlbi5SQlJBQ0VybzIAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5SQlJBQ0VYAQAAAC10cnAyAABYDAAAAGVycm5vLkVMMkhMVHJxMgAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVMMkhMVFgBAAAALXRycjIAAFgJAAAAZGlzLm9wbWFwcnMyAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI2Rpcy5vcG1hcFgBAAAALXRydDIAAFgSAAAAdG9rZW4uUEVSQ0VOVEVRVUFMcnUyAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uUEVSQ0VOVEVRVUFMWAEAAAAtdHJ2MgAAWA4AAABzeXMucGF0aF9ob29rc3J3MgAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbCNzeXMucGF0aF9ob29rc1gBAAAALXRyeDIAAFgWAAAAcmVzb3VyY2UuUkxJTV9JTkZJTklUWXJ5MgAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXNvdXJjZS5odG1sI3Jlc291cmNlLlJMSU1fSU5GSU5JVFlYAQAAAC10cnoyAABYCgAAAHN5cy5zdGRvdXRyezIAAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3lzLmh0bWwjc3lzLnN0ZG91dFgBAAAALXRyfDIAAFgIAAAAY2QuU1RJTExyfTIAAChqaQEAAGpqAQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2QuaHRtbCNjZC5TVElMTFgBAAAALXRyfjIAAFgVAAAAcmVzb3VyY2UuUkxJTUlUX09GSUxFcn8yAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Jlc291cmNlLmh0bWwjcmVzb3VyY2UuUkxJTUlUX09GSUxFWAEAAAAtdHKAMgAAWA0AAABlcnJuby5FTElCQUNDcoEyAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUxJQkFDQ1gBAAAALXRygjIAAFgJAAAAcmUuTE9DQUxFcoMyAAAoamkBAABqagEAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlLmh0bWwjcmUuTE9DQUxFWAEAAAAtdHKEMgAAWA8AAABtc3ZjcnQuTEtfTkJMQ0tyhTIAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXN2Y3J0Lmh0bWwjbXN2Y3J0LkxLX05CTENLWAEAAAAtdHKGMgAAdVgFAAAAYzp2YXJyhzIAAH1yiDIAAChYCwAAAFB5X0VsbGlwc2lzcokyAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zbGljZS5odG1sI2MuUHlfRWxsaXBzaXNYAQAAAC10cooyAABYDAAAAFB5VHJhY2VfTElORXKLMgAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlUcmFjZV9MSU5FWAEAAAAtdHKMMgAAWA0AAABQeVN0cmluZ19UeXBlco0yAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zdHJpbmcuaHRtbCNjLlB5U3RyaW5nX1R5cGVYAQAAAC10co4yAABYCgAAAFB5SW50X1R5cGVyjzIAAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ludC5odG1sI2MuUHlJbnRfVHlwZVgBAAAALXRykDIAAFgPAAAAUHlGdW5jdGlvbl9UeXBlcpEyAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9mdW5jdGlvbi5odG1sI2MuUHlGdW5jdGlvbl9UeXBlWAEAAAAtdHKSMgAAWAwAAABQeVRyYWNlX0NBTExykzIAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNjLlB5VHJhY2VfQ0FMTFgBAAAALXRylDIAAFgLAAAAUHlGaWxlX1R5cGVylTIAAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ZpbGUuaHRtbCNjLlB5RmlsZV9UeXBlWAEAAAAtdHKWMgAAWA0AAABQeU1ldGhvZF9UeXBlcpcyAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tZXRob2QuaHRtbCNjLlB5TWV0aG9kX1R5cGVYAQAAAC10cpgyAABYDAAAAFB5U2xpY2VfVHlwZXKZMgAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc2xpY2UuaHRtbCNjLlB5U2xpY2VfVHlwZVgBAAAALXRymjIAAFgHAAAAUHlfVHJ1ZXKbMgAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYm9vbC5odG1sI2MuUHlfVHJ1ZVgBAAAALXRynDIAAFgLAAAAUHlUeXBlX1R5cGVynTIAAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGUuaHRtbCNjLlB5VHlwZV9UeXBlWAEAAAAtdHKeMgAAWBAAAABQeUJ5dGVBcnJheV9UeXBlcp8yAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9ieXRlYXJyYXkuaHRtbCNjLlB5Qnl0ZUFycmF5X1R5cGVYAQAAAC10cqAyAABYDwAAAFB5X3NpbmdsZV9pbnB1dHKhMgAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdmVyeWhpZ2guaHRtbCNjLlB5X3NpbmdsZV9pbnB1dFgBAAAALXRyojIAAFgNAAAAUHlNb2R1bGVfVHlwZXKjMgAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbW9kdWxlLmh0bWwjYy5QeU1vZHVsZV9UeXBlWAEAAAAtdHKkMgAAWA4AAABQeUNvbXBsZXhfVHlwZXKlMgAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29tcGxleC5odG1sI2MuUHlDb21wbGV4X1R5cGVYAQAAAC10cqYyAABYDgAAAFB5U2VxSXRlcl9UeXBlcqcyAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pdGVyYXRvci5odG1sI2MuUHlTZXFJdGVyX1R5cGVYAQAAAC10cqgyAABYCwAAAFB5TG9uZ19UeXBlcqkyAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9sb25nLmh0bWwjYy5QeUxvbmdfVHlwZVgBAAAALXRyqjIAAFgKAAAAUHlHZW5fVHlwZXKrMgAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZ2VuLmh0bWwjYy5QeUdlbl9UeXBlWAEAAAAtdHKsMgAAWBEAAABQeVRyYWNlX0VYQ0VQVElPTnKtMgAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlUcmFjZV9FWENFUFRJT05YAQAAAC10cq4yAABYEwAAAFB5VHJhY2VfQ19FWENFUFRJT05yrzIAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNjLlB5VHJhY2VfQ19FWENFUFRJT05YAQAAAC10crAyAABYDQAAAFB5X2V2YWxfaW5wdXRysTIAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3ZlcnloaWdoLmh0bWwjYy5QeV9ldmFsX2lucHV0WAEAAAAtdHKyMgAAWA8AAABQeVByb3BlcnR5X1R5cGVyszIAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2Rlc2NyaXB0b3IuaHRtbCNjLlB5UHJvcGVydHlfVHlwZVgBAAAALXRytDIAAFgNAAAAUHlCdWZmZXJfVHlwZXK1MgAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYnVmZmVyLmh0bWwjYy5QeUJ1ZmZlcl9UeXBlWAEAAAAtdHK2MgAAWA8AAABQeUNhbGxJdGVyX1R5cGVytzIAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2l0ZXJhdG9yLmh0bWwjYy5QeUNhbGxJdGVyX1R5cGVYAQAAAC10crgyAABYDQAAAFB5X2ZpbGVfaW5wdXRyuTIAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3ZlcnloaWdoLmh0bWwjYy5QeV9maWxlX2lucHV0WAEAAAAtdHK6MgAAWA4AAABQeVVuaWNvZGVfVHlwZXK7MgAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX1R5cGVYAQAAAC10crwyAABYBwAAAFB5X05vbmVyvTIAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL25vbmUuaHRtbCNjLlB5X05vbmVYAQAAAC10cr4yAABYCwAAAFB5Q29kZV9UeXBlcr8yAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jb2RlLmh0bWwjYy5QeUNvZGVfVHlwZVgBAAAALXRywDIAAFgLAAAAUHlDZWxsX1R5cGVywTIAAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NlbGwuaHRtbCNjLlB5Q2VsbF9UeXBlWAEAAAAtdHLCMgAAWA4AAABQeVRyYWNlX0NfQ0FMTHLDMgAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlUcmFjZV9DX0NBTExYAQAAAC10csQyAABYCwAAAFB5RGljdF9UeXBlcsUyAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9kaWN0Lmh0bWwjYy5QeURpY3RfVHlwZVgBAAAALXRyxjIAAFgQAAAAUHlUcmFjZV9DX1JFVFVSTnLHMgAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5pdC5odG1sI2MuUHlUcmFjZV9DX1JFVFVSTlgBAAAALXRyyDIAAFgWAAAAUHlJbXBvcnRfRnJvemVuTW9kdWxlc3LJMgAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW1wb3J0Lmh0bWwjYy5QeUltcG9ydF9Gcm96ZW5Nb2R1bGVzWAEAAAAtdHLKMgAAWAoAAABQeVNldF9UeXBlcssyAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zZXQuaHRtbCNjLlB5U2V0X1R5cGVYAQAAAC10cswyAABYDgAAAFB5VHJhY2VfUkVUVVJOcs0yAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbml0Lmh0bWwjYy5QeVRyYWNlX1JFVFVSTlgBAAAALXRyzjIAAFgIAAAAUHlfRmFsc2VyzzIAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2Jvb2wuaHRtbCNjLlB5X0ZhbHNlWAEAAAAtdHLQMgAAWBAAAABQeUZyb3plblNldF9UeXBlctEyAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zZXQuaHRtbCNjLlB5RnJvemVuU2V0X1R5cGVYAQAAAC10ctIyAABYDgAAAF9QeV9Ob25lU3RydWN0ctMyAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9hbGxvY2F0aW9uLmh0bWwjYy5fUHlfTm9uZVN0cnVjdFgBAAAALXRy1DIAAFgLAAAAUHlMaXN0X1R5cGVy1TIAAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2xpc3QuaHRtbCNjLlB5TGlzdF9UeXBlWAEAAAAtdHLWMgAAWAwAAABQeVR1cGxlX1R5cGVy1zIAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R1cGxlLmh0bWwjYy5QeVR1cGxlX1R5cGVYAQAAAC10ctgyAABYEgAAAENPX0ZVVFVSRV9ESVZJU0lPTnLZMgAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdmVyeWhpZ2guaHRtbCNjLkNPX0ZVVFVSRV9ESVZJU0lPTlgBAAAALXRy2jIAAFgQAAAAUHlfRU5EX09GX0JVRkZFUnLbMgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYnVmZmVyLmh0bWwjYy5QeV9FTkRfT0ZfQlVGRkVSWAEAAAAtdHLcMgAAWAwAAABQeUZsb2F0X1R5cGVy3TIAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2Zsb2F0Lmh0bWwjYy5QeUZsb2F0X1R5cGVYAQAAAC10ct4yAABYDwAAAFB5SW5zdGFuY2VfVHlwZXLfMgAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY2xhc3MuaHRtbCNjLlB5SW5zdGFuY2VfVHlwZVgBAAAALXRy4DIAAFgMAAAAUHlDbGFzc19UeXBlcuEyAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jbGFzcy5odG1sI2MuUHlDbGFzc19UeXBlWAEAAAAtdHLiMgAAdVgGAAAAYzp0eXBlcuMyAAB9cuQyAAAoWAkAAABQeUNhcHN1bGVy5TIAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NhcHN1bGUuaHRtbCNjLlB5Q2Fwc3VsZVgBAAAALXRy5jIAAFgJAAAAUHlfYnVmZmVycucyAAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9idWZmZXIuaHRtbCNjLlB5X2J1ZmZlclgBAAAALXRy6DIAAFgMAAAAUHlDZWxsT2JqZWN0cukyAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jZWxsLmh0bWwjYy5QeUNlbGxPYmplY3RYAQAAAC10cuoyAABYDgAAAFB5U3RyaW5nT2JqZWN0cusyAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zdHJpbmcuaHRtbCNjLlB5U3RyaW5nT2JqZWN0WAEAAAAtdHLsMgAAWAgAAABQeU9iamVjdHLtMgAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3RydWN0dXJlcy5odG1sI2MuUHlPYmplY3RYAQAAAC10cu4yAABYEQAAAFB5U2VxdWVuY2VNZXRob2Rzcu8yAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVNlcXVlbmNlTWV0aG9kc1gBAAAALXRy8DIAAFgMAAAAc2VnY291bnRwcm9jcvEyAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy5zZWdjb3VudHByb2NYAQAAAC10cvIyAABYEQAAAFB5Qnl0ZUFycmF5T2JqZWN0cvMyAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9ieXRlYXJyYXkuaHRtbCNjLlB5Qnl0ZUFycmF5T2JqZWN0WAEAAAAtdHL0MgAAWAgAAABfaW5pdHRhYnL1MgAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW1wb3J0Lmh0bWwjYy5faW5pdHRhYlgBAAAALXRy9jIAAFgPAAAAd3JpdGVidWZmZXJwcm9jcvcyAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy53cml0ZWJ1ZmZlcnByb2NYAQAAAC10cvgyAABYFAAAAFB5Q2Fwc3VsZV9EZXN0cnVjdG9ycvkyAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jYXBzdWxlLmh0bWwjYy5QeUNhcHN1bGVfRGVzdHJ1Y3RvclgBAAAALXRy+jIAAFgQAAAAUHlGdW5jdGlvbk9iamVjdHL7MgAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZnVuY3Rpb24uaHRtbCNjLlB5RnVuY3Rpb25PYmplY3RYAQAAAC10cvwyAABYCgAAAFB5X2NvbXBsZXhy/TIAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvbXBsZXguaHRtbCNjLlB5X2NvbXBsZXhYAQAAAC10cv4yAABYDQAAAFB5VGhyZWFkU3RhdGVy/zIAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNjLlB5VGhyZWFkU3RhdGVYAQAAAC10cgAzAABYDAAAAFB5TGlzdE9iamVjdHIBMwAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbGlzdC5odG1sI2MuUHlMaXN0T2JqZWN0WAEAAAAtdHICMwAAWBIAAABQeUludGVycHJldGVyU3RhdGVyAzMAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbCNjLlB5SW50ZXJwcmV0ZXJTdGF0ZVgBAAAALXRyBDMAAFgMAAAAUHlGaWxlT2JqZWN0cgUzAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9maWxlLmh0bWwjYy5QeUZpbGVPYmplY3RYAQAAAC10cgYzAABYDwAAAFB5Q29tcGlsZXJGbGFnc3IHMwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdmVyeWhpZ2guaHRtbCNjLlB5Q29tcGlsZXJGbGFnc1gBAAAALXRyCDMAAFgOAAAAUHlCdWZmZXJPYmplY3RyCTMAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2J1ZmZlci5odG1sI2MuUHlCdWZmZXJPYmplY3RYAQAAAC10cgozAABYCwAAAFB5VmFyT2JqZWN0cgszAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zdHJ1Y3R1cmVzLmh0bWwjYy5QeVZhck9iamVjdFgBAAAALXRyDDMAAFgKAAAAUHlfVU5JQ09ERXINMwAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlfVU5JQ09ERVgBAAAALXRyDjMAAFgOAAAAcmVhZGJ1ZmZlcnByb2NyDzMAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLnJlYWRidWZmZXJwcm9jWAEAAAAtdHIQMwAAWBAAAABQeU1hcHBpbmdNZXRob2RzchEzAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeU1hcHBpbmdNZXRob2RzWAEAAAAtdHISMwAAWAsAAABQeUdlbk9iamVjdHITMwAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZ2VuLmh0bWwjYy5QeUdlbk9iamVjdFgBAAAALXRyFDMAAFgLAAAAUHlNZXRob2REZWZyFTMAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N0cnVjdHVyZXMuaHRtbCNjLlB5TWV0aG9kRGVmWAEAAAAtdHIWMwAAWAwAAABQeVR5cGVPYmplY3RyFzMAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGUuaHRtbCNjLlB5VHlwZU9iamVjdFgBAAAALXRyGDMAAFgMAAAAdHJhdmVyc2Vwcm9jchkzAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9nY3N1cHBvcnQuaHRtbCNjLnRyYXZlcnNlcHJvY1gBAAAALXRyGjMAAFgLAAAAUHlJbnRPYmplY3RyGzMAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ludC5odG1sI2MuUHlJbnRPYmplY3RYAQAAAC10chwzAABYCwAAAFB5Q0Z1bmN0aW9uch0zAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zdHJ1Y3R1cmVzLmh0bWwjYy5QeUNGdW5jdGlvblgBAAAALXRyHjMAAFgLAAAAUHlNZW1iZXJEZWZyHzMAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N0cnVjdHVyZXMuaHRtbCNjLlB5TWVtYmVyRGVmWAEAAAAtdHIgMwAAWAwAAABQeUxvbmdPYmplY3RyITMAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2xvbmcuaHRtbCNjLlB5TG9uZ09iamVjdFgBAAAALXRyIjMAAFgLAAAAUHlHZXRTZXREZWZyIzMAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N0cnVjdHVyZXMuaHRtbCNjLlB5R2V0U2V0RGVmWAEAAAAtdHIkMwAAWA0AAABQeUZsb2F0T2JqZWN0ciUzAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9mbG9hdC5odG1sI2MuUHlGbG9hdE9iamVjdFgBAAAALXRyJjMAAFgHAAAAX2Zyb3plbnInMwAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW1wb3J0Lmh0bWwjYy5fZnJvemVuWAEAAAAtdHIoMwAAWA0AAABQeVR1cGxlT2JqZWN0cikzAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90dXBsZS5odG1sI2MuUHlUdXBsZU9iamVjdFgBAAAALXRyKjMAAFgMAAAAUHlfdHJhY2VmdW5jciszAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pbml0Lmh0bWwjYy5QeV90cmFjZWZ1bmNYAQAAAC10ciwzAABYCwAAAFB5U2V0T2JqZWN0ci0zAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zZXQuaHRtbCNjLlB5U2V0T2JqZWN0WAEAAAAtdHIuMwAAWA8AAABQeUNvbXBsZXhPYmplY3RyLzMAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvbXBsZXguaHRtbCNjLlB5Q29tcGxleE9iamVjdFgBAAAALXRyMDMAAFgNAAAAUHlCdWZmZXJQcm9jc3IxMwAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlCdWZmZXJQcm9jc1gBAAAALXRyMjMAAFgJAAAAdmlzaXRwcm9jcjMzAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9nY3N1cHBvcnQuaHRtbCNjLnZpc2l0cHJvY1gBAAAALXRyNDMAAFgNAAAAUHlDbGFzc09iamVjdHI1MwAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY2xhc3MuaHRtbCNjLlB5Q2xhc3NPYmplY3RYAQAAAC10cjYzAABYBwAAAGlucXVpcnlyNzMAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2djc3VwcG9ydC5odG1sI2MuaW5xdWlyeVgBAAAALXRyODMAAFgMAAAAUHlDb2RlT2JqZWN0cjkzAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jb2RlLmh0bWwjYy5QeUNvZGVPYmplY3RYAQAAAC10cjozAABYCQAAAFB5Q09iamVjdHI7MwAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29iamVjdC5odG1sI2MuUHlDT2JqZWN0WAEAAAAtdHI8MwAAWA4AAABjaGFyYnVmZmVycHJvY3I9MwAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHlwZW9iai5odG1sI2MuY2hhcmJ1ZmZlcnByb2NYAQAAAC10cj4zAABYDAAAAFB5RGljdE9iamVjdHI/MwAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZGljdC5odG1sI2MuUHlEaWN0T2JqZWN0WAEAAAAtdHJAMwAAWA8AAABQeU51bWJlck1ldGhvZHNyQTMAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5TnVtYmVyTWV0aG9kc1gBAAAALXRyQjMAAFgPAAAAUHlVbmljb2RlT2JqZWN0ckMzAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVPYmplY3RYAQAAAC10ckQzAAB1WAcAAABzdGQ6ZG9jckUzAAB9ckYzAAAoWAwAAABjLWFwaS9idWZmZXJyRzMAAChqaQEAAGpqAQAAWCsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2J1ZmZlci5odG1sWB4AAABCdWZmZXJzIGFuZCBNZW1vcnl2aWV3IE9iamVjdHN0ckgzAABYCwAAAGxpYnJhcnkvdHR5ckkzAAAoamkBAABqagEAAFgqAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0eS5odG1sWCIAAAB0dHkg4oCUIFRlcm1pbmFsIGNvbnRyb2wgZnVuY3Rpb25zdHJKMwAAWA4AAABsaWJyYXJ5L3hkcmxpYnJLMwAAKGppAQAAamoBAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94ZHJsaWIuaHRtbFglAAAAeGRybGliIOKAlCBFbmNvZGUgYW5kIGRlY29kZSBYRFIgZGF0YXRyTDMAAFgOAAAAbGlicmFyeS9iaXNlY3RyTTMAAChqaQEAAGpqAQAAWC0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmlzZWN0Lmh0bWxYJAAAAGJpc2VjdCDigJQgQXJyYXkgYmlzZWN0aW9uIGFsZ29yaXRobXRyTjMAAFgPAAAAbGlicmFyeS9tYWlsY2Fwck8zAAAoamkBAABqagEAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxjYXAuaHRtbFghAAAAbWFpbGNhcCDigJQgTWFpbGNhcCBmaWxlIGhhbmRsaW5ndHJQMwAAWAsAAABsaWJyYXJ5L3R0a3JRMwAAKGppAQAAamoBAABYKgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbFgZAAAAdHRrIOKAlCBUayB0aGVtZWQgd2lkZ2V0c3RyUjMAAFgPAAAAbGlicmFyeS9pbnNwZWN0clMzAAAoamkBAABqagEAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luc3BlY3QuaHRtbFggAAAAaW5zcGVjdCDigJQgSW5zcGVjdCBsaXZlIG9iamVjdHN0clQzAABYEQAAAGxpYnJhcnkvc3lzY29uZmlnclUzAAAoamkBAABqagEAAFgwAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5c2NvbmZpZy5odG1sWEQAAABzeXNjb25maWcg4oCUIFByb3ZpZGUgYWNjZXNzIHRvIFB5dGhvbuKAmXMgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbnRyVjMAAFgOAAAAd2hhdHNuZXcvaW5kZXhyVzMAAChqaQEAAGpqAQAAWC0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3L2luZGV4Lmh0bWxYFgAAAFdoYXTigJlzIE5ldyBpbiBQeXRob250clgzAABYCwAAAHVzaW5nL2luZGV4clkzAAAoamkBAABqagEAAFgqAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy9pbmRleC5odG1sWBYAAABQeXRob24gU2V0dXAgYW5kIFVzYWdldHJaMwAAWBEAAAByZWZlcmVuY2UvZ3JhbW1hcnJbMwAAKGppAQAAamoBAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2dyYW1tYXIuaHRtbFgaAAAARnVsbCBHcmFtbWFyIHNwZWNpZmljYXRpb250clwzAABYEgAAAGxpYnJhcnkvc3VicHJvY2Vzc3JdMwAAKGppAQAAamoBAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWxYJAAAAHN1YnByb2Nlc3Mg4oCUIFN1YnByb2Nlc3MgbWFuYWdlbWVudHRyXjMAAFgRAAAAdHV0b3JpYWwvYXBwZXRpdGVyXzMAAChqaQEAAGpqAQAAWDAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2FwcGV0aXRlLmh0bWxYFgAAAFdoZXR0aW5nIFlvdXIgQXBwZXRpdGV0cmAzAABYDwAAAGxpYnJhcnkvYmFzdGlvbnJhMwAAKGppAQAAamoBAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXN0aW9uLmh0bWxYKQAAAEJhc3Rpb24g4oCUIFJlc3RyaWN0aW5nIGFjY2VzcyB0byBvYmplY3RzdHJiMwAAWBUAAAB0dXRvcmlhbC9pbnRyb2R1Y3Rpb25yYzMAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2ludHJvZHVjdGlvbi5odG1sWCIAAABBbiBJbmZvcm1hbCBJbnRyb2R1Y3Rpb24gdG8gUHl0aG9udHJkMwAAWBAAAABsaWJyYXJ5L29wdHBhcnNlcmUzAAAoamkBAABqagEAAFgvAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWxYLAAAAG9wdHBhcnNlIOKAlCBQYXJzZXIgZm9yIGNvbW1hbmQgbGluZSBvcHRpb25zdHJmMwAAWBMAAABsaWJyYXJ5L29zc2F1ZGlvZGV2cmczAAAoamkBAABqagEAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zc2F1ZGlvZGV2Lmh0bWxYNgAAAG9zc2F1ZGlvZGV2IOKAlCBBY2Nlc3MgdG8gT1NTLWNvbXBhdGlibGUgYXVkaW8gZGV2aWNlc3RyaDMAAFgMAAAAYy1hcGkvbWVtb3J5cmkzAAAoamkBAABqagEAAFgrAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tZW1vcnkuaHRtbFgRAAAATWVtb3J5IE1hbmFnZW1lbnR0cmozAABYFwAAAGxpYnJhcnkvZG9jeG1scnBjc2VydmVycmszAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3htbHJwY3NlcnZlci5odG1sWDMAAABEb2NYTUxSUENTZXJ2ZXIg4oCUIFNlbGYtZG9jdW1lbnRpbmcgWE1MLVJQQyBzZXJ2ZXJ0cmwzAABYDAAAAGMtYXBpL3N0cmluZ3JtMwAAKGppAQAAamoBAABYKwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvc3RyaW5nLmh0bWxYFAAAAFN0cmluZy9CeXRlcyBPYmplY3RzdHJuMwAAWBEAAABjLWFwaS9yZWZjb3VudGluZ3JvMwAAKGppAQAAamoBAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvcmVmY291bnRpbmcuaHRtbFgSAAAAUmVmZXJlbmNlIENvdW50aW5ndHJwMwAAWA8AAABsaWJyYXJ5L3ppcGZpbGVycTMAAChqaQEAAGpqAQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemlwZmlsZS5odG1sWCIAAAB6aXBmaWxlIOKAlCBXb3JrIHdpdGggWklQIGFyY2hpdmVzdHJyMwAAWBgAAABsaWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnNyczMAAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sWCUAAABsb2dnaW5nLmhhbmRsZXJzIOKAlCBMb2dnaW5nIGhhbmRsZXJzdHJ0MwAAWBAAAABsaWJyYXJ5L2NhbGVuZGFycnUzAAAoamkBAABqagEAAFgvAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhbGVuZGFyLmh0bWxYLwAAAGNhbGVuZGFyIOKAlCBHZW5lcmFsIGNhbGVuZGFyLXJlbGF0ZWQgZnVuY3Rpb25zdHJ2MwAAWA0AAABsaWJyYXJ5L2Vycm5vcnczAAAoamkBAABqagEAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vycm5vLmh0bWxYJwAAAGVycm5vIOKAlCBTdGFuZGFyZCBlcnJubyBzeXN0ZW0gc3ltYm9sc3RyeDMAAFgUAAAAdHV0b3JpYWwvaW5wdXRvdXRwdXRyeTMAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2lucHV0b3V0cHV0Lmh0bWxYEAAAAElucHV0IGFuZCBPdXRwdXR0cnozAABYDwAAAGxpYnJhcnkvZmlsZXN5c3J7MwAAKGppAQAAamoBAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9maWxlc3lzLmh0bWxYGQAAAEZpbGUgYW5kIERpcmVjdG9yeSBBY2Nlc3N0cnwzAABYDgAAAGxpYnJhcnkvY3Vyc2Vzcn0zAAAoamkBAABqagEAAFgtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sWDgAAABjdXJzZXMg4oCUIFRlcm1pbmFsIGhhbmRsaW5nIGZvciBjaGFyYWN0ZXItY2VsbCBkaXNwbGF5c3RyfjMAAFgLAAAAbGlicmFyeS9uZXdyfzMAAChqaQEAAGpqAQAAWCoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbmV3Lmh0bWxYLAAAAG5ldyDigJQgQ3JlYXRpb24gb2YgcnVudGltZSBpbnRlcm5hbCBvYmplY3RzdHKAMwAAWA4AAABsaWJyYXJ5L2NvZGVvcHKBMwAAKGppAQAAamoBAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2Rlb3AuaHRtbFgeAAAAY29kZW9wIOKAlCBDb21waWxlIFB5dGhvbiBjb2RldHKCMwAAWBAAAABsaWJyYXJ5L3VybHBhcnNlcoMzAAAoamkBAABqagEAAFgvAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybHBhcnNlLmh0bWxYJwAAAHVybHBhcnNlIOKAlCBQYXJzZSBVUkxzIGludG8gY29tcG9uZW50c3RyhDMAAFgOAAAAdHV0b3JpYWwvaW5kZXhyhTMAAChqaQEAAGpqAQAAWC0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2luZGV4Lmh0bWxYEwAAAFRoZSBQeXRob24gVHV0b3JpYWx0coYzAABYDQAAAGMtYXBpL29iamltcGxyhzMAAChqaQEAAGpqAQAAWCwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL29iamltcGwuaHRtbFgdAAAAT2JqZWN0IEltcGxlbWVudGF0aW9uIFN1cHBvcnR0cogzAABYCgAAAGMtYXBpL2RpY3RyiTMAAChqaQEAAGpqAQAAWCkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2RpY3QuaHRtbFgSAAAARGljdGlvbmFyeSBPYmplY3RzdHKKMwAAWBYAAABsaWJyYXJ5L3htbC5zYXgucmVhZGVycoszAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWxYLwAAAHhtbC5zYXgueG1scmVhZGVyIOKAlCBJbnRlcmZhY2UgZm9yIFhNTCBwYXJzZXJzdHKMMwAAWBQAAAB0dXRvcmlhbC9pbnRlcnByZXRlcnKNMwAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvaW50ZXJwcmV0ZXIuaHRtbFgcAAAAVXNpbmcgdGhlIFB5dGhvbiBJbnRlcnByZXRlcnRyjjMAAFgNAAAAbGlicmFyeS90cmFjZXKPMwAAKGppAQAAamoBAABYLAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90cmFjZS5odG1sWDMAAAB0cmFjZSDigJQgVHJhY2Ugb3IgdHJhY2sgUHl0aG9uIHN0YXRlbWVudCBleGVjdXRpb250cpAzAABYDAAAAGhvd3RvL2N1cnNlc3KRMwAAKGppAQAAamoBAABYKwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaG93dG8vY3Vyc2VzLmh0bWxYHgAAAEN1cnNlcyBQcm9ncmFtbWluZyB3aXRoIFB5dGhvbnRykjMAAFgOAAAAbGlicmFyeS9sb2NhbGVykzMAAChqaQEAAGpqAQAAWC0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9jYWxlLmh0bWxYKAAAAGxvY2FsZSDigJQgSW50ZXJuYXRpb25hbGl6YXRpb24gc2VydmljZXN0cpQzAABYDgAAAGxpYnJhcnkvc2h1dGlscpUzAAAoamkBAABqagEAAFgtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NodXRpbC5odG1sWCUAAABzaHV0aWwg4oCUIEhpZ2gtbGV2ZWwgZmlsZSBvcGVyYXRpb25zdHKWMwAAWAkAAABmYXEvaW5kZXhylzMAAChqaQEAAGpqAQAAWCgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2ZhcS9pbmRleC5odG1sWCEAAABQeXRob24gRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnN0cpgzAABYEgAAAGRpc3R1dGlscy9leGFtcGxlc3KZMwAAKGppAQAAamoBAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2V4YW1wbGVzLmh0bWxYCAAAAEV4YW1wbGVzdHKaMwAAWBgAAAByZWZlcmVuY2UvY29tcG91bmRfc3RtdHNymzMAAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sWBMAAABDb21wb3VuZCBzdGF0ZW1lbnRzdHKcMwAAWA4AAABsaWJyYXJ5L3BwcmludHKdMwAAKGppAQAAamoBAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wcHJpbnQuaHRtbFgeAAAAcHByaW50IOKAlCBEYXRhIHByZXR0eSBwcmludGVydHKeMwAAWBAAAABsaWJyYXJ5L2NvbG9yc3lzcp8zAAAoamkBAABqagEAAFgvAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbG9yc3lzLmh0bWxYLgAAAGNvbG9yc3lzIOKAlCBDb252ZXJzaW9ucyBiZXR3ZWVuIGNvbG9yIHN5c3RlbXN0cqAzAABYEgAAAGV4dGVuZGluZy9idWlsZGluZ3KhMwAAKGppAQAAamoBAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZXh0ZW5kaW5nL2J1aWxkaW5nLmh0bWxYLAAAAEJ1aWxkaW5nIEMgYW5kIEMrKyBFeHRlbnNpb25zIHdpdGggZGlzdHV0aWxzdHKiMwAAWBIAAABsaWJyYXJ5L3B5X2NvbXBpbGVyozMAAChqaQEAAGpqAQAAWDEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlfY29tcGlsZS5odG1sWCoAAABweV9jb21waWxlIOKAlCBDb21waWxlIFB5dGhvbiBzb3VyY2UgZmlsZXN0cqQzAABYEAAAAGMtYXBpL2NvbnZlcnNpb25ypTMAAChqaQEAAGpqAQAAWC8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvbnZlcnNpb24uaHRtbFggAAAAU3RyaW5nIGNvbnZlcnNpb24gYW5kIGZvcm1hdHRpbmd0cqYzAABYDwAAAGxpYnJhcnkvd3NnaXJlZnKnMwAAKGppAQAAamoBAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93c2dpcmVmLmh0bWxYNwAAAHdzZ2lyZWYg4oCUIFdTR0kgVXRpbGl0aWVzIGFuZCBSZWZlcmVuY2UgSW1wbGVtZW50YXRpb250cqgzAABYDAAAAGxpYnJhcnkvbWF0aHKpMwAAKGppAQAAamoBAABYKwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYXRoLmh0bWxYHwAAAG1hdGgg4oCUIE1hdGhlbWF0aWNhbCBmdW5jdGlvbnN0cqozAABYDgAAAGxpYnJhcnkvcmFuZG9tcqszAAAoamkBAABqagEAAFgtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JhbmRvbS5odG1sWCkAAAByYW5kb20g4oCUIEdlbmVyYXRlIHBzZXVkby1yYW5kb20gbnVtYmVyc3RyrDMAAFgNAAAAbGlicmFyeS9ydW5weXKtMwAAKGppAQAAamoBAABYLAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ydW5weS5odG1sWC8AAABydW5weSDigJQgTG9jYXRpbmcgYW5kIGV4ZWN1dGluZyBQeXRob24gbW9kdWxlc3RyrjMAAFgKAAAAYy1hcGkvY2VsbHKvMwAAKGppAQAAamoBAABYKQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY2VsbC5odG1sWAwAAABDZWxsIE9iamVjdHN0crAzAABYCwAAAGMtYXBpL3NsaWNlcrEzAAAoamkBAABqagEAAFgqAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zbGljZS5odG1sWA0AAABTbGljZSBPYmplY3RzdHKyMwAAWBAAAAB0dXRvcmlhbC9tb2R1bGVzcrMzAAAoamkBAABqagEAAFgvAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9tb2R1bGVzLmh0bWxYBwAAAE1vZHVsZXN0crQzAABYDwAAAGxpYnJhcnkvcGtndXRpbHK1MwAAKGppAQAAamoBAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wa2d1dGlsLmh0bWxYJQAAAHBrZ3V0aWwg4oCUIFBhY2thZ2UgZXh0ZW5zaW9uIHV0aWxpdHl0crYzAABYDwAAAGxpYnJhcnkvbmV0ZGF0YXK3MwAAKGppAQAAamoBAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9uZXRkYXRhLmh0bWxYFgAAAEludGVybmV0IERhdGEgSGFuZGxpbmd0crgzAABYDAAAAHdoYXRzbmV3LzIuMnK5MwAAKGppAQAAamoBAABYKwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi4yLmh0bWxYGgAAAFdoYXTigJlzIE5ldyBpbiBQeXRob24gMi4ydHK6MwAAWA8AAABsaWJyYXJ5L29zLnBhdGhyuzMAAChqaQEAAGpqAQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3MucGF0aC5odG1sWCkAAABvcy5wYXRoIOKAlCBDb21tb24gcGF0aG5hbWUgbWFuaXB1bGF0aW9uc3RyvDMAAFgRAAAAbGlicmFyeS9kaXN0dXRpbHNyvTMAAChqaQEAAGpqAQAAWDAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzdHV0aWxzLmh0bWxYNAAAAGRpc3R1dGlscyDigJQgQnVpbGRpbmcgYW5kIGluc3RhbGxpbmcgUHl0aG9uIG1vZHVsZXN0cr4zAABYDAAAAGxpYnJhcnkvYWlmY3K/MwAAKGppAQAAamoBAABYKwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9haWZjLmh0bWxYKwAAAGFpZmMg4oCUIFJlYWQgYW5kIHdyaXRlIEFJRkYgYW5kIEFJRkMgZmlsZXN0csAzAABYEwAAAGRpc3R1dGlscy9idWlsdGRpc3RywTMAAChqaQEAAGpqAQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9idWlsdGRpc3QuaHRtbFgcAAAAQ3JlYXRpbmcgQnVpbHQgRGlzdHJpYnV0aW9uc3RywjMAAFgQAAAAbGlicmFyeS9vcGVyYXRvcnLDMwAAKGppAQAAamoBAABYLwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcGVyYXRvci5odG1sWCwAAABvcGVyYXRvciDigJQgU3RhbmRhcmQgb3BlcmF0b3JzIGFzIGZ1bmN0aW9uc3RyxDMAAFgUAAAAZGlzdHV0aWxzL2NvbW1hbmRyZWZyxTMAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9jb21tYW5kcmVmLmh0bWxYEQAAAENvbW1hbmQgUmVmZXJlbmNldHLGMwAAWBIAAABsaWJyYXJ5L2VtYWlsLm1pbWVyxzMAAChqaQEAAGpqAQAAWDEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwubWltZS5odG1sWDgAAABlbWFpbC5taW1lOiBDcmVhdGluZyBlbWFpbCBhbmQgTUlNRSBvYmplY3RzIGZyb20gc2NyYXRjaHRyyDMAAFgRAAAAdHV0b3JpYWwvYXBwZW5kaXhyyTMAAChqaQEAAGpqAQAAWDAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2FwcGVuZGl4Lmh0bWxYCAAAAEFwcGVuZGl4dHLKMwAAWAsAAABsaWJyYXJ5L25pc3LLMwAAKGppAQAAamoBAABYKgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9uaXMuaHRtbFgvAAAAbmlzIOKAlCBJbnRlcmZhY2UgdG8gU3Vu4oCZcyBOSVMgKFllbGxvdyBQYWdlcyl0cswzAABYDgAAAGMtYXBpL2NvbmNyZXRlcs0zAAAoamkBAABqagEAAFgtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jb25jcmV0ZS5odG1sWBYAAABDb25jcmV0ZSBPYmplY3RzIExheWVydHLOMwAAWBMAAABsaWJyYXJ5L2NvbG9ycGlja2Vycs8zAAAoamkBAABqagEAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbG9ycGlja2VyLmh0bWxYJgAAAENvbG9yUGlja2VyIOKAlCBDb2xvciBzZWxlY3Rpb24gZGlhbG9ndHLQMwAAWA8AAABleHRlbmRpbmcvaW5kZXhy0TMAAChqaQEAAGpqAQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2V4dGVuZGluZy9pbmRleC5odG1sWC4AAABFeHRlbmRpbmcgYW5kIEVtYmVkZGluZyB0aGUgUHl0aG9uIEludGVycHJldGVydHLSMwAAWBMAAABkaXN0dXRpbHMvdXBsb2FkaW5nctMzAAAoamkBAABqagEAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvdXBsb2FkaW5nLmh0bWxYJwAAAFVwbG9hZGluZyBQYWNrYWdlcyB0byB0aGUgUGFja2FnZSBJbmRleHRy1DMAAFgOAAAAbGlicmFyeS9waWNrbGVy1TMAAChqaQEAAGpqAQAAWC0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGlja2xlLmh0bWxYJgAAAHBpY2tsZSDigJQgUHl0aG9uIG9iamVjdCBzZXJpYWxpemF0aW9udHLWMwAAWBEAAABsaWJyYXJ5L2ltcG9ydGxpYnLXMwAAKGppAQAAamoBAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbXBvcnRsaWIuaHRtbFgzAAAAaW1wb3J0bGliIOKAlCBDb252ZW5pZW5jZSB3cmFwcGVycyBmb3IgX19pbXBvcnRfXygpdHLYMwAAWA0AAABob3d0by91cmxsaWIyctkzAAAoamkBAABqagEAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9ob3d0by91cmxsaWIyLmh0bWxYLAAAAEhPV1RPIEZldGNoIEludGVybmV0IFJlc291cmNlcyBVc2luZyB1cmxsaWIydHLaMwAAWAsAAABob3d0by9yZWdleHLbMwAAKGppAQAAamoBAABYKgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaG93dG8vcmVnZXguaHRtbFgYAAAAUmVndWxhciBFeHByZXNzaW9uIEhPV1RPdHLcMwAAWBcAAABsaWJyYXJ5L2VtYWlsLml0ZXJhdG9yc3LdMwAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5pdGVyYXRvcnMuaHRtbFgaAAAAZW1haWwuaXRlcmF0b3JzOiBJdGVyYXRvcnN0ct4zAABYCwAAAGxpYnJhcnkvYWJjct8zAAAoamkBAABqagEAAFgqAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FiYy5odG1sWB0AAABhYmMg4oCUIEFic3RyYWN0IEJhc2UgQ2xhc3Nlc3Ry4DMAAFgXAAAAbGlicmFyeS9kdW1teV90aHJlYWRpbmdy4TMAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZHVtbXlfdGhyZWFkaW5nLmh0bWxYQAAAAGR1bW15X3RocmVhZGluZyDigJQgRHJvcC1pbiByZXBsYWNlbWVudCBmb3IgdGhlIHRocmVhZGluZyBtb2R1bGV0cuIzAABYDgAAAGxpYnJhcnkvc3lzbG9ncuMzAAAoamkBAABqagEAAFgtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5c2xvZy5odG1sWCcAAABzeXNsb2cg4oCUIFVuaXggc3lzbG9nIGxpYnJhcnkgcm91dGluZXN0cuQzAABYCgAAAGMtYXBpL2xvbmdy5TMAAChqaQEAAGpqAQAAWCkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2xvbmcuaHRtbFgUAAAATG9uZyBJbnRlZ2VyIE9iamVjdHN0cuYzAABYEAAAAGxpYnJhcnkvdW5pdHRlc3Ry5zMAAChqaQEAAGpqAQAAWC8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbFgjAAAAdW5pdHRlc3Qg4oCUIFVuaXQgdGVzdGluZyBmcmFtZXdvcmt0cugzAABYEAAAAGxpYnJhcnkvcmVhZGxpbmVy6TMAAChqaQEAAGpqAQAAWC8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmVhZGxpbmUuaHRtbFgjAAAAcmVhZGxpbmUg4oCUIEdOVSByZWFkbGluZSBpbnRlcmZhY2V0cuozAABYEQAAAGxpYnJhcnkvdHJhY2ViYWNrcuszAAAoamkBAABqagEAAFgwAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RyYWNlYmFjay5odG1sWDEAAAB0cmFjZWJhY2sg4oCUIFByaW50IG9yIHJldHJpZXZlIGEgc3RhY2sgdHJhY2ViYWNrdHLsMwAAWA8AAABsaWJyYXJ5L3Rlcm1pb3Ny7TMAAChqaQEAAGpqAQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGVybWlvcy5odG1sWCMAAAB0ZXJtaW9zIOKAlCBQT1NJWCBzdHlsZSB0dHkgY29udHJvbHRy7jMAAFgXAAAAbGlicmFyeS94bWwuZG9tLm1pbmlkb21y7zMAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5taW5pZG9tLmh0bWxYLgAAAHhtbC5kb20ubWluaWRvbSDigJQgTWluaW1hbCBET00gaW1wbGVtZW50YXRpb250cvAzAABYDAAAAGxpYnJhcnkvc2V0c3LxMwAAKGppAQAAamoBAABYKwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZXRzLmh0bWxYMQAAAHNldHMg4oCUIFVub3JkZXJlZCBjb2xsZWN0aW9ucyBvZiB1bmlxdWUgZWxlbWVudHN0cvIzAABYDwAAAGxpYnJhcnkvaHR0cGxpYnLzMwAAKGppAQAAamoBAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odHRwbGliLmh0bWxYIAAAAGh0dHBsaWIg4oCUIEhUVFAgcHJvdG9jb2wgY2xpZW50dHL0MwAAWA0AAABsaWJyYXJ5L21obGlicvUzAAAoamkBAABqagEAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21obGliLmh0bWxYIAAAAG1obGliIOKAlCBBY2Nlc3MgdG8gTUggbWFpbGJveGVzdHL2MwAAWA0AAABjLWFwaS9tYXJzaGFscvczAAAoamkBAABqagEAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tYXJzaGFsLmh0bWxYGAAAAERhdGEgbWFyc2hhbGxpbmcgc3VwcG9ydHRy+DMAAFgLAAAAbGlicmFyeS9ncnBy+TMAAChqaQEAAGpqAQAAWCoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ3JwLmh0bWxYGgAAAGdycCDigJQgVGhlIGdyb3VwIGRhdGFiYXNldHL6MwAAWA0AAAB1c2luZy93aW5kb3dzcvszAAAoamkBAABqagEAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy93aW5kb3dzLmh0bWxYFwAAAFVzaW5nIFB5dGhvbiBvbiBXaW5kb3dzdHL8MwAAWBMAAABkaXN0dXRpbHMvZXh0ZW5kaW5ncv0zAAAoamkBAABqagEAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvZXh0ZW5kaW5nLmh0bWxYEwAAAEV4dGVuZGluZyBEaXN0dXRpbHN0cv4zAABYCwAAAGxpYnJhcnkvY3N2cv8zAAAoamkBAABqagEAAFgqAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nzdi5odG1sWCQAAABjc3Yg4oCUIENTViBGaWxlIFJlYWRpbmcgYW5kIFdyaXRpbmd0cgA0AABYEwAAAGxpYnJhcnkvZW1haWwudXRpbHNyATQAAChqaQEAAGpqAQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwudXRpbHMuaHRtbFgkAAAAZW1haWwudXRpbHM6IE1pc2NlbGxhbmVvdXMgdXRpbGl0aWVzdHICNAAAWA4AAABjLWFwaS9mdW5jdGlvbnIDNAAAKGppAQAAamoBAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZnVuY3Rpb24uaHRtbFgQAAAARnVuY3Rpb24gT2JqZWN0c3RyBDQAAFgQAAAAbGlicmFyeS9zdHJpbmdpb3IFNAAAKGppAQAAamoBAABYLwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmdpby5odG1sWCwAAABTdHJpbmdJTyDigJQgUmVhZCBhbmQgd3JpdGUgc3RyaW5ncyBhcyBmaWxlc3RyBjQAAFgJAAAAdXNpbmcvbWFjcgc0AAAoamkBAABqagEAAFgoAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy9tYWMuaHRtbFgbAAAAVXNpbmcgUHl0aG9uIG9uIGEgTWFjaW50b3NodHIINAAAWBEAAABsaWJyYXJ5L2ZyYWN0aW9uc3IJNAAAKGppAQAAamoBAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcmFjdGlvbnMuaHRtbFgeAAAAZnJhY3Rpb25zIOKAlCBSYXRpb25hbCBudW1iZXJzdHIKNAAAWA0AAABsaWJyYXJ5L2FsbG9zcgs0AAAoamkBAABqagEAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FsbG9zLmh0bWxYIQAAAEdlbmVyaWMgT3BlcmF0aW5nIFN5c3RlbSBTZXJ2aWNlc3RyDDQAAFgMAAAAbGlicmFyeS9nbG9icg00AAAoamkBAABqagEAAFgrAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dsb2IuaHRtbFguAAAAZ2xvYiDigJQgVW5peCBzdHlsZSBwYXRobmFtZSBwYXR0ZXJuIGV4cGFuc2lvbnRyDjQAAFgRAAAAbGlicmFyeS9hcmNoaXZpbmdyDzQAAChqaQEAAGpqAQAAWDAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXJjaGl2aW5nLmh0bWxYHgAAAERhdGEgQ29tcHJlc3Npb24gYW5kIEFyY2hpdmluZ3RyEDQAAFgPAAAAZmFxL3Byb2dyYW1taW5nchE0AAAoamkBAABqagEAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9mYXEvcHJvZ3JhbW1pbmcuaHRtbFgPAAAAUHJvZ3JhbW1pbmcgRkFRdHISNAAAWBEAAABsaWJyYXJ5L2Nvb2tpZWxpYnITNAAAKGppAQAAamoBAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbFguAAAAY29va2llbGliIOKAlCBDb29raWUgaGFuZGxpbmcgZm9yIEhUVFAgY2xpZW50c3RyFDQAAFgUAAAAZGlzdHV0aWxzL3NvdXJjZWRpc3RyFTQAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9zb3VyY2VkaXN0Lmh0bWxYHgAAAENyZWF0aW5nIGEgU291cmNlIERpc3RyaWJ1dGlvbnRyFjQAAFgOAAAAYy1hcGkvYWJzdHJhY3RyFzQAAChqaQEAAGpqAQAAWC0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2Fic3RyYWN0Lmh0bWxYFgAAAEFic3RyYWN0IE9iamVjdHMgTGF5ZXJ0chg0AABYEAAAAGxpYnJhcnkvc3RkdHlwZXNyGTQAAChqaQEAAGpqAQAAWC8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbFgOAAAAQnVpbHQtaW4gVHlwZXN0cho0AABYFwAAAGxpYnJhcnkvZW1haWwuZ2VuZXJhdG9ychs0AAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLmdlbmVyYXRvci5odG1sWCoAAABlbWFpbC5nZW5lcmF0b3I6IEdlbmVyYXRpbmcgTUlNRSBkb2N1bWVudHN0chw0AABYCwAAAGhvd3RvL2luZGV4ch00AAAoamkBAABqagEAAFgqAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9ob3d0by9pbmRleC5odG1sWA0AAABQeXRob24gSE9XVE9zdHIeNAAAWAsAAABjLWFwaS9jb2RlY3IfNAAAKGppAQAAamoBAABYKgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvY29kZWMuaHRtbFgkAAAAQ29kZWMgcmVnaXN0cnkgYW5kIHN1cHBvcnQgZnVuY3Rpb25zdHIgNAAAWA0AAABjLWFwaS9tYXBwaW5nciE0AAAoamkBAABqagEAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9tYXBwaW5nLmh0bWxYEAAAAE1hcHBpbmcgUHJvdG9jb2x0ciI0AABYDAAAAGxpYnJhcnkvcmVwcnIjNAAAKGppAQAAamoBAABYKwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXByLmh0bWxYKAAAAHJlcHIg4oCUIEFsdGVybmF0ZSByZXByKCkgaW1wbGVtZW50YXRpb250ciQ0AABYCgAAAGxpYnJhcnkvYWxyJTQAAChqaQEAAGpqAQAAWCkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWwuaHRtbFghAAAAYWwg4oCUIEF1ZGlvIGZ1bmN0aW9ucyBvbiB0aGUgU0dJdHImNAAAWBEAAABsaWJyYXJ5L2l0ZXJ0b29sc3InNAAAKGppAQAAamoBAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pdGVydG9vbHMuaHRtbFhAAAAAaXRlcnRvb2xzIOKAlCBGdW5jdGlvbnMgY3JlYXRpbmcgaXRlcmF0b3JzIGZvciBlZmZpY2llbnQgbG9vcGluZ3RyKDQAAFgRAAAAbGlicmFyeS9mdW5jdG9vbHNyKTQAAChqaQEAAGpqAQAAWDAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rvb2xzLmh0bWxYRwAAAGZ1bmN0b29scyDigJQgSGlnaGVyLW9yZGVyIGZ1bmN0aW9ucyBhbmQgb3BlcmF0aW9ucyBvbiBjYWxsYWJsZSBvYmplY3RzdHIqNAAAWBoAAAByZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpc3IrNAAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbFgQAAAATGV4aWNhbCBhbmFseXNpc3RyLDQAAFgQAAAAbGlicmFyeS9zeW10YWJsZXItNAAAKGppAQAAamoBAABYLwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeW10YWJsZS5odG1sWDUAAABzeW10YWJsZSDigJQgQWNjZXNzIHRvIHRoZSBjb21waWxlcuKAmXMgc3ltYm9sIHRhYmxlc3RyLjQAAFgQAAAAbGlicmFyeS90b2tlbml6ZXIvNAAAKGppAQAAamoBAABYLwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90b2tlbml6ZS5odG1sWCgAAAB0b2tlbml6ZSDigJQgVG9rZW5pemVyIGZvciBQeXRob24gc291cmNldHIwNAAAWAsAAABjLWFwaS90dXBsZXIxNAAAKGppAQAAamoBAABYKgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdHVwbGUuaHRtbFgNAAAAVHVwbGUgT2JqZWN0c3RyMjQAAFgPAAAAbGlicmFyeS9nZXR0ZXh0cjM0AAAoamkBAABqagEAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dldHRleHQuaHRtbFg2AAAAZ2V0dGV4dCDigJQgTXVsdGlsaW5ndWFsIGludGVybmF0aW9uYWxpemF0aW9uIHNlcnZpY2VzdHI0NAAAWBEAAABsaWJyYXJ5L3RocmVhZGluZ3I1NAAAKGppAQAAamoBAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWRpbmcuaHRtbFguAAAAdGhyZWFkaW5nIOKAlCBIaWdoZXItbGV2ZWwgdGhyZWFkaW5nIGludGVyZmFjZXRyNjQAAFgPAAAAbGlicmFyeS9weWV4cGF0cjc0AAAoamkBAABqagEAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbFgyAAAAeG1sLnBhcnNlcnMuZXhwYXQg4oCUIEZhc3QgWE1MIHBhcnNpbmcgdXNpbmcgRXhwYXR0cjg0AABYDQAAAGluc3RhbGwvaW5kZXhyOTQAAChqaQEAAGpqAQAAWCwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2luc3RhbGwvaW5kZXguaHRtbFgqAAAASW5zdGFsbGluZyBQeXRob24gTW9kdWxlcyAoTGVnYWN5IHZlcnNpb24pdHI6NAAAWBAAAABjLWFwaS9yZWZsZWN0aW9ucjs0AAAoamkBAABqagEAAFgvAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9yZWZsZWN0aW9uLmh0bWxYCgAAAFJlZmxlY3Rpb250cjw0AABYDgAAAGxpYnJhcnkvbXNpbGlicj00AAAoamkBAABqagEAAFgtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sWDMAAABtc2lsaWIg4oCUIFJlYWQgYW5kIHdyaXRlIE1pY3Jvc29mdCBJbnN0YWxsZXIgZmlsZXN0cj40AABYDgAAAGxpYnJhcnkvc3ltYm9scj80AAAoamkBAABqagEAAFgtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5bWJvbC5odG1sWDEAAABzeW1ib2wg4oCUIENvbnN0YW50cyB1c2VkIHdpdGggUHl0aG9uIHBhcnNlIHRyZWVzdHJANAAAWA8AAABsaWJyYXJ5L21vZHVsZXNyQTQAAChqaQEAAGpqAQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbW9kdWxlcy5odG1sWBEAAABJbXBvcnRpbmcgTW9kdWxlc3RyQjQAAFgOAAAAbGlicmFyeS9wYXJzZXJyQzQAAChqaQEAAGpqAQAAWC0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGFyc2VyLmh0bWxYJAAAAHBhcnNlciDigJQgQWNjZXNzIFB5dGhvbiBwYXJzZSB0cmVlc3RyRDQAAFgWAAAAZGlzdHV0aWxzL3BhY2thZ2VpbmRleHJFNAAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL3BhY2thZ2VpbmRleC5odG1sWB8AAABUaGUgUHl0aG9uIFBhY2thZ2UgSW5kZXggKFB5UEkpdHJGNAAAWAwAAABsaWJyYXJ5LzJ0bzNyRzQAAChqaQEAAGpqAQAAWCsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvMnRvMy5odG1sWC8AAAAydG8zIC0gQXV0b21hdGVkIFB5dGhvbiAyIHRvIDMgY29kZSB0cmFuc2xhdGlvbnRySDQAAFgLAAAAZmFxL3dpbmRvd3NySTQAAChqaQEAAGpqAQAAWCoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2ZhcS93aW5kb3dzLmh0bWxYFQAAAFB5dGhvbiBvbiBXaW5kb3dzIEZBUXRySjQAAFgPAAAAbGlicmFyeS9hZXR5cGVzcks0AAAoamkBAABqagEAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FldHlwZXMuaHRtbFgeAAAAYWV0eXBlcyDigJQgQXBwbGVFdmVudCBvYmplY3RzdHJMNAAAWBEAAABsaWJyYXJ5L21pbWV0b29sc3JNNAAAKGppAQAAamoBAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW1ldG9vbHMuaHRtbFgtAAAAbWltZXRvb2xzIOKAlCBUb29scyBmb3IgcGFyc2luZyBNSU1FIG1lc3NhZ2VzdHJONAAAWA0AAAB1c2luZy9jbWRsaW5lck80AAAoamkBAABqagEAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy9jbWRsaW5lLmh0bWxYHAAAAENvbW1hbmQgbGluZSBhbmQgZW52aXJvbm1lbnR0clA0AABYFQAAAGxpYnJhcnkvY2dpaHR0cHNlcnZlcnJRNAAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jZ2lodHRwc2VydmVyLmh0bWxYMgAAAENHSUhUVFBTZXJ2ZXIg4oCUIENHSS1jYXBhYmxlIEhUVFAgcmVxdWVzdCBoYW5kbGVydHJSNAAAWBYAAABsaWJyYXJ5L2Jhc2VodHRwc2VydmVyclM0AAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Jhc2VodHRwc2VydmVyLmh0bWxYJAAAAEJhc2VIVFRQU2VydmVyIOKAlCBCYXNpYyBIVFRQIHNlcnZlcnRyVDQAAFgTAAAAbGlicmFyeS9waWNrbGV0b29sc3JVNAAAKGppAQAAamoBAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9waWNrbGV0b29scy5odG1sWCsAAABwaWNrbGV0b29scyDigJQgVG9vbHMgZm9yIHBpY2tsZSBkZXZlbG9wZXJzdHJWNAAAWA0AAABsaWJyYXJ5L2luZGV4clc0AAAoamkBAABqagEAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2luZGV4Lmh0bWxYGwAAAFRoZSBQeXRob24gU3RhbmRhcmQgTGlicmFyeXRyWDQAAFgUAAAAbGlicmFyeS9jdXJzZXMucGFuZWxyWTQAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLnBhbmVsLmh0bWxYMwAAAGN1cnNlcy5wYW5lbCDigJQgQSBwYW5lbCBzdGFjayBleHRlbnNpb24gZm9yIGN1cnNlc3RyWjQAAFgQAAAAbGlicmFyeS9jb21waWxlcnJbNAAAKGppAQAAamoBAABYLwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb21waWxlci5odG1sWBcAAABQeXRob24gY29tcGlsZXIgcGFja2FnZXRyXDQAAFgQAAAAdHV0b3JpYWwvc3RkbGliMnJdNAAAKGppAQAAamoBAABYLwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvc3RkbGliMi5odG1sWC4AAABCcmllZiBUb3VyIG9mIHRoZSBTdGFuZGFyZCBMaWJyYXJ5IOKAlCBQYXJ0IElJdHJeNAAAWA4AAABjLWFwaS9pdGVyYXRvcnJfNAAAKGppAQAAamoBAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaXRlcmF0b3IuaHRtbFgQAAAASXRlcmF0b3IgT2JqZWN0c3RyYDQAAFgRAAAAbGlicmFyeS9taW1ldHlwZXNyYTQAAChqaQEAAGpqAQAAWDAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWltZXR5cGVzLmh0bWxYKQAAAG1pbWV0eXBlcyDigJQgTWFwIGZpbGVuYW1lcyB0byBNSU1FIHR5cGVzdHJiNAAAWA8AAABsaWJyYXJ5L2dldHBhc3NyYzQAAChqaQEAAGpqAQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2V0cGFzcy5odG1sWCMAAABnZXRwYXNzIOKAlCBQb3J0YWJsZSBwYXNzd29yZCBpbnB1dHRyZDQAAFgPAAAAbGlicmFyeS9hdXRvZ2lscmU0AAAoamkBAABqagEAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2F1dG9naWwuaHRtbFg7AAAAYXV0b0dJTCDigJQgR2xvYmFsIEludGVycHJldGVyIExvY2sgaGFuZGxpbmcgaW4gZXZlbnQgbG9vcHN0cmY0AABYFgAAAGhvd3RvL2xvZ2dpbmctY29va2Jvb2tyZzQAAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2hvd3RvL2xvZ2dpbmctY29va2Jvb2suaHRtbFgQAAAATG9nZ2luZyBDb29rYm9va3RyaDQAAFgPAAAAbGlicmFyeS90a2ludGVycmk0AAAoamkBAABqagEAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RraW50ZXIuaHRtbFgmAAAAVGtpbnRlciDigJQgUHl0aG9uIGludGVyZmFjZSB0byBUY2wvVGt0cmo0AABYDAAAAGMtYXBpL21vZHVsZXJrNAAAKGppAQAAamoBAABYKwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbW9kdWxlLmh0bWxYDgAAAE1vZHVsZSBPYmplY3RzdHJsNAAAWA4AAABsaWJyYXJ5L3R1cnRsZXJtNAAAKGppAQAAamoBAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbFghAAAAdHVydGxlIOKAlCBUdXJ0bGUgZ3JhcGhpY3MgZm9yIFRrdHJuNAAAWBMAAABsaWJyYXJ5L3BlcnNpc3RlbmNlcm80AAAoamkBAABqagEAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BlcnNpc3RlbmNlLmh0bWxYEAAAAERhdGEgUGVyc2lzdGVuY2V0cnA0AABYDQAAAGMtYXBpL2NvbXBsZXhycTQAAChqaQEAAGpqAQAAWCwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvbXBsZXguaHRtbFgWAAAAQ29tcGxleCBOdW1iZXIgT2JqZWN0c3RycjQAAFgJAAAAYy1hcGkvc2V0cnM0AAAoamkBAABqagEAAFgoAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zZXQuaHRtbFgLAAAAU2V0IE9iamVjdHN0cnQ0AABYEwAAAGV4dGVuZGluZy9leHRlbmRpbmdydTQAAChqaQEAAGpqAQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2V4dGVuZGluZy9leHRlbmRpbmcuaHRtbFgeAAAARXh0ZW5kaW5nIFB5dGhvbiB3aXRoIEMgb3IgQysrdHJ2NAAAWBIAAABsaWJyYXJ5L2ZyYW1ld29ya3NydzQAAChqaQEAAGpqAQAAWDEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnJhbWV3b3Jrcy5odG1sWBIAAABQcm9ncmFtIEZyYW1ld29ya3N0cng0AABYEAAAAGxpYnJhcnkvc3VuYXVkaW9yeTQAAChqaQEAAGpqAQAAWC8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VuYXVkaW8uaHRtbFgsAAAAc3VuYXVkaW9kZXYg4oCUIEFjY2VzcyB0byBTdW4gYXVkaW8gaGFyZHdhcmV0cno0AABYDAAAAGxpYnJhcnkvd2F2ZXJ7NAAAKGppAQAAamoBAABYKwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93YXZlLmh0bWxYIQAAAHdhdmUg4oCUIFJlYWQgYW5kIHdyaXRlIFdBViBmaWxlc3RyfDQAAFgLAAAAZmFxL2xpYnJhcnlyfTQAAChqaQEAAGpqAQAAWCoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2ZhcS9saWJyYXJ5Lmh0bWxYGQAAAExpYnJhcnkgYW5kIEV4dGVuc2lvbiBGQVF0cn40AABYCgAAAGxpYnJhcnkvZGxyfzQAAChqaQEAAGpqAQAAWCkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGwuaHRtbFgpAAAAZGwg4oCUIENhbGwgQyBmdW5jdGlvbnMgaW4gc2hhcmVkIG9iamVjdHN0coA0AABYFQAAAGRpc3R1dGlscy9zZXR1cHNjcmlwdHKBNAAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL3NldHVwc2NyaXB0Lmh0bWxYGAAAAFdyaXRpbmcgdGhlIFNldHVwIFNjcmlwdHRygjQAAFgQAAAAYy1hcGkvZGVzY3JpcHRvcnKDNAAAKGppAQAAamoBAABYLwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZGVzY3JpcHRvci5odG1sWBIAAABEZXNjcmlwdG9yIE9iamVjdHN0coQ0AABYDAAAAGxpYnJhcnkvdGltZXKFNAAAKGppAQAAamoBAABYKwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aW1lLmh0bWxYJAAAAHRpbWUg4oCUIFRpbWUgYWNjZXNzIGFuZCBjb252ZXJzaW9uc3RyhjQAAFgLAAAAbGlicmFyeS90aXhyhzQAAChqaQEAAGpqAQAAWCoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGl4Lmh0bWxYIAAAAFRpeCDigJQgRXh0ZW5zaW9uIHdpZGdldHMgZm9yIFRrdHKINAAAWA0AAABob3d0by9zb3J0aW5ncok0AAAoamkBAABqagEAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9ob3d0by9zb3J0aW5nLmh0bWxYDgAAAFNvcnRpbmcgSE9XIFRPdHKKNAAAWAwAAABsaWJyYXJ5L3VzZXJyizQAAChqaQEAAGpqAQAAWCsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXNlci5odG1sWCkAAAB1c2VyIOKAlCBVc2VyLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gaG9va3RyjDQAAFgOAAAAbGlicmFyeS9hbnlkYm1yjTQAAChqaQEAAGpqAQAAWC0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYW55ZGJtLmh0bWxYMAAAAGFueWRibSDigJQgR2VuZXJpYyBhY2Nlc3MgdG8gREJNLXN0eWxlIGRhdGFiYXNlc3RyjjQAAFgNAAAAbGlicmFyeS91bmRvY3KPNAAAKGppAQAAamoBAABYLAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bmRvYy5odG1sWBQAAABVbmRvY3VtZW50ZWQgTW9kdWxlc3RykDQAAFgPAAAAbGlicmFyeS9pbXB1dGlscpE0AAAoamkBAABqagEAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltcHV0aWwuaHRtbFgcAAAAaW1wdXRpbCDigJQgSW1wb3J0IHV0aWxpdGllc3RykjQAAFgPAAAAbGlicmFyeS9zdHJpbmdzcpM0AAAoamkBAABqagEAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZ3MuaHRtbFgPAAAAU3RyaW5nIFNlcnZpY2VzdHKUNAAAWA0AAABjLWFwaS9jYXBzdWxlcpU0AAAoamkBAABqagEAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jYXBzdWxlLmh0bWxYCAAAAENhcHN1bGVzdHKWNAAAWBgAAAByZWZlcmVuY2UvZXhlY3V0aW9ubW9kZWxylzQAAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leGVjdXRpb25tb2RlbC5odG1sWA8AAABFeGVjdXRpb24gbW9kZWx0cpg0AABYEQAAAGxpYnJhcnkvZm9ybWF0dGVycpk0AAAoamkBAABqagEAAFgwAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Zvcm1hdHRlci5odG1sWCcAAABmb3JtYXR0ZXIg4oCUIEdlbmVyaWMgb3V0cHV0IGZvcm1hdHRpbmd0cpo0AABYDQAAAGZhcS9pbnN0YWxsZWRymzQAAChqaQEAAGpqAQAAWCwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2ZhcS9pbnN0YWxsZWQuaHRtbFgxAAAA4oCcV2h5IGlzIFB5dGhvbiBJbnN0YWxsZWQgb24gbXkgQ29tcHV0ZXI/4oCdIEZBUXRynDQAAFgMAAAAbGlicmFyeS9zcHdkcp00AAAoamkBAABqagEAAFgrAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Nwd2QuaHRtbFglAAAAc3B3ZCDigJQgVGhlIHNoYWRvdyBwYXNzd29yZCBkYXRhYmFzZXRynjQAAFgQAAAAbGlicmFyeS9yZXNvdXJjZXKfNAAAKGppAQAAamoBAABYLwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXNvdXJjZS5odG1sWCcAAAByZXNvdXJjZSDigJQgUmVzb3VyY2UgdXNhZ2UgaW5mb3JtYXRpb250cqA0AABYCwAAAGxpYnJhcnkvcGRicqE0AAAoamkBAABqagEAAFgqAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BkYi5odG1sWBsAAABwZGIg4oCUIFRoZSBQeXRob24gRGVidWdnZXJ0cqI0AABYDgAAAGxpYnJhcnkvZGJoYXNocqM0AAAoamkBAABqagEAAFgtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RiaGFzaC5odG1sWDoAAABkYmhhc2gg4oCUIERCTS1zdHlsZSBpbnRlcmZhY2UgdG8gdGhlIEJTRCBkYXRhYmFzZSBsaWJyYXJ5dHKkNAAAWBEAAABsaWJyYXJ5L3Bvc2l4ZmlsZXKlNAAAKGppAQAAamoBAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wb3NpeGZpbGUuaHRtbFg0AAAAcG9zaXhmaWxlIOKAlCBGaWxlLWxpa2Ugb2JqZWN0cyB3aXRoIGxvY2tpbmcgc3VwcG9ydHRypjQAAFgNAAAAbGlicmFyeS90eXBlc3KnNAAAKGppAQAAamoBAABYLAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90eXBlcy5odG1sWCIAAAB0eXBlcyDigJQgTmFtZXMgZm9yIGJ1aWx0LWluIHR5cGVzdHKoNAAAWA4AAABjLWFwaS92ZXJ5aGlnaHKpNAAAKGppAQAAamoBAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdmVyeWhpZ2guaHRtbFgZAAAAVGhlIFZlcnkgSGlnaCBMZXZlbCBMYXllcnRyqjQAAFgXAAAAbGlicmFyeS94bWwuc2F4LmhhbmRsZXJyqzQAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWxYMQAAAHhtbC5zYXguaGFuZGxlciDigJQgQmFzZSBjbGFzc2VzIGZvciBTQVggaGFuZGxlcnN0cqw0AABYDgAAAGxpYnJhcnkvc29tZW9zcq00AAAoamkBAABqagEAAFgtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvbWVvcy5odG1sWCIAAABPcHRpb25hbCBPcGVyYXRpbmcgU3lzdGVtIFNlcnZpY2VzdHKuNAAAWAsAAABsaWJyYXJ5L2Rpc3KvNAAAKGppAQAAamoBAABYKgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbFgoAAAAZGlzIOKAlCBEaXNhc3NlbWJsZXIgZm9yIFB5dGhvbiBieXRlY29kZXRysDQAAFgNAAAAYy1hcGkvdW5pY29kZXKxNAAAKGppAQAAamoBAABYLAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdW5pY29kZS5odG1sWBoAAABVbmljb2RlIE9iamVjdHMgYW5kIENvZGVjc3RysjQAAFgQAAAAbGlicmFyeS9kYXRldGltZXKzNAAAKGppAQAAamoBAABYLwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sWCYAAABkYXRldGltZSDigJQgQmFzaWMgZGF0ZSBhbmQgdGltZSB0eXBlc3RytDQAAFgKAAAAbGlicmFyeS9tbXK1NAAAKGppAQAAamoBAABYKQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tbS5odG1sWBMAAABNdWx0aW1lZGlhIFNlcnZpY2VzdHK2NAAAWBMAAABsaWJyYXJ5L2RldmVsb3BtZW50crc0AAAoamkBAABqagEAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RldmVsb3BtZW50Lmh0bWxYEQAAAERldmVsb3BtZW50IFRvb2xzdHK4NAAAWA0AAABsaWJyYXJ5L3NobGV4crk0AAAoamkBAABqagEAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NobGV4Lmh0bWxYIQAAAHNobGV4IOKAlCBTaW1wbGUgbGV4aWNhbCBhbmFseXNpc3RyujQAAFgUAAAAbGlicmFyeS9kdW1teV90aHJlYWRyuzQAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZHVtbXlfdGhyZWFkLmh0bWxYOgAAAGR1bW15X3RocmVhZCDigJQgRHJvcC1pbiByZXBsYWNlbWVudCBmb3IgdGhlIHRocmVhZCBtb2R1bGV0crw0AABYDAAAAGxpYnJhcnkvbW1hcHK9NAAAKGppAQAAamoBAABYKwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tbWFwLmh0bWxYIwAAAG1tYXAg4oCUIE1lbW9yeS1tYXBwZWQgZmlsZSBzdXBwb3J0dHK+NAAAWA8AAABsaWJyYXJ5L21hcnNoYWxyvzQAAChqaQEAAGpqAQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFyc2hhbC5odG1sWDAAAABtYXJzaGFsIOKAlCBJbnRlcm5hbCBQeXRob24gb2JqZWN0IHNlcmlhbGl6YXRpb250csA0AABYEAAAAGxpYnJhcnkvYXJncGFyc2VywTQAAChqaQEAAGpqAQAAWC8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXJncGFyc2UuaHRtbFhIAAAAYXJncGFyc2Ug4oCUIFBhcnNlciBmb3IgY29tbWFuZC1saW5lIG9wdGlvbnMsIGFyZ3VtZW50cyBhbmQgc3ViLWNvbW1hbmRzdHLCNAAAWAwAAABsaWJyYXJ5L2htYWNywzQAAChqaQEAAGpqAQAAWCsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaG1hYy5odG1sWDEAAABobWFjIOKAlCBLZXllZC1IYXNoaW5nIGZvciBNZXNzYWdlIEF1dGhlbnRpY2F0aW9udHLENAAAWAwAAABjLWFwaS9pbXBvcnRyxTQAAChqaQEAAGpqAQAAWCsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ltcG9ydC5odG1sWBEAAABJbXBvcnRpbmcgTW9kdWxlc3RyxjQAAFgLAAAAbGlicmFyeS94bWxyxzQAAChqaQEAAGpqAQAAWCoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmh0bWxYFgAAAFhNTCBQcm9jZXNzaW5nIE1vZHVsZXN0csg0AABYBQAAAGFib3V0csk0AAAoamkBAABqagEAAFgkAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9hYm91dC5odG1sWBUAAABBYm91dCB0aGVzZSBkb2N1bWVudHN0cso0AABYDwAAAGxpYnJhcnkvbWFpbGJveHLLNAAAKGppAQAAamoBAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWxYMwAAAG1haWxib3gg4oCUIE1hbmlwdWxhdGUgbWFpbGJveGVzIGluIHZhcmlvdXMgZm9ybWF0c3RyzDQAAFgNAAAAbGlicmFyeS9xdWV1ZXLNNAAAKGppAQAAamoBAABYLAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9xdWV1ZS5odG1sWCQAAABRdWV1ZSDigJQgQSBzeW5jaHJvbml6ZWQgcXVldWUgY2xhc3N0cs40AABYCwAAAGMtYXBpL2Zsb2F0cs80AAAoamkBAABqagEAAFgqAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9mbG9hdC5odG1sWBYAAABGbG9hdGluZyBQb2ludCBPYmplY3RzdHLQNAAAWA4AAABsaWJyYXJ5L2Jhc2U2NHLRNAAAKGppAQAAamoBAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXNlNjQuaHRtbFg6AAAAYmFzZTY0IOKAlCBSRkMgMzU0ODogQmFzZTE2LCBCYXNlMzIsIEJhc2U2NCBEYXRhIEVuY29kaW5nc3Ry0jQAAFgRAAAAZXh0ZW5kaW5nL3dpbmRvd3Ny0zQAAChqaQEAAGpqAQAAWDAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2V4dGVuZGluZy93aW5kb3dzLmh0bWxYKAAAAEJ1aWxkaW5nIEMgYW5kIEMrKyBFeHRlbnNpb25zIG9uIFdpbmRvd3N0ctQ0AABYEwAAAGV4dGVuZGluZy9lbWJlZGRpbmdy1TQAAChqaQEAAGpqAQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2V4dGVuZGluZy9lbWJlZGRpbmcuaHRtbFgnAAAARW1iZWRkaW5nIFB5dGhvbiBpbiBBbm90aGVyIEFwcGxpY2F0aW9udHLWNAAAWA0AAABjLWFwaS9jb2JqZWN0ctc0AAAoamkBAABqagEAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9jb2JqZWN0Lmh0bWxYCAAAAENPYmplY3RzdHLYNAAAWAwAAABsaWJyYXJ5L3psaWJy2TQAAChqaQEAAGpqAQAAWCsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemxpYi5odG1sWCkAAAB6bGliIOKAlCBDb21wcmVzc2lvbiBjb21wYXRpYmxlIHdpdGggZ3ppcHRy2jQAAFgPAAAAbGlicmFyeS94bWwuZG9tcts0AAAoamkBAABqagEAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbFgpAAAAeG1sLmRvbSDigJQgVGhlIERvY3VtZW50IE9iamVjdCBNb2RlbCBBUEl0ctw0AABYCwAAAGxpYnJhcnkvbWQ1ct00AAAoamkBAABqagEAAFgqAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21kNS5odG1sWCQAAABtZDUg4oCUIE1ENSBtZXNzYWdlIGRpZ2VzdCBhbGdvcml0aG10ct40AABYEAAAAGxpYnJhcnkvX19tYWluX19y3zQAAChqaQEAAGpqAQAAWC8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvX19tYWluX18uaHRtbFgpAAAAX19tYWluX18g4oCUIFRvcC1sZXZlbCBzY3JpcHQgZW52aXJvbm1lbnR0cuA0AABYFAAAAGxpYnJhcnkvc2Nyb2xsZWR0ZXh0cuE0AAAoamkBAABqagEAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Njcm9sbGVkdGV4dC5odG1sWCUAAABTY3JvbGxlZFRleHQg4oCUIFNjcm9sbGVkIFRleHQgV2lkZ2V0dHLiNAAAWA4AAABsaWJyYXJ5L3F1b3ByaXLjNAAAKGppAQAAamoBAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9xdW9wcmkuaHRtbFg3AAAAcXVvcHJpIOKAlCBFbmNvZGUgYW5kIGRlY29kZSBNSU1FIHF1b3RlZC1wcmludGFibGUgZGF0YXRy5DQAAFgLAAAAYy1hcGkvY2xhc3Ny5TQAAChqaQEAAGpqAQAAWCoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NsYXNzLmh0bWxYGgAAAENsYXNzIGFuZCBJbnN0YW5jZSBPYmplY3RzdHLmNAAAWAkAAABjLWFwaS9pbnRy5zQAAChqaQEAAGpqAQAAWCgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ludC5odG1sWBUAAABQbGFpbiBJbnRlZ2VyIE9iamVjdHN0cug0AABYDwAAAGxpYnJhcnkvbm50cGxpYnLpNAAAKGppAQAAamoBAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ubnRwbGliLmh0bWxYIAAAAG5udHBsaWIg4oCUIE5OVFAgcHJvdG9jb2wgY2xpZW50dHLqNAAAWAgAAABjb250ZW50c3LrNAAAKGppAQAAamoBAABYJwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvY29udGVudHMuaHRtbFgdAAAAUHl0aG9uIERvY3VtZW50YXRpb24gY29udGVudHN0cuw0AABYDgAAAGhvd3RvL2FyZ3BhcnNlcu00AAAoamkBAABqagEAAFgtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9ob3d0by9hcmdwYXJzZS5odG1sWBEAAABBcmdwYXJzZSBUdXRvcmlhbHRy7jQAAFgNAAAAbGlicmFyeS9zY2hlZHLvNAAAKGppAQAAamoBAABYLAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zY2hlZC5odG1sWBkAAABzY2hlZCDigJQgRXZlbnQgc2NoZWR1bGVydHLwNAAAWAwAAABsaWJyYXJ5L2dkYm1y8TQAAChqaQEAAGpqAQAAWCsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2RibS5odG1sWCgAAABnZGJtIOKAlCBHTlXigJlzIHJlaW50ZXJwcmV0YXRpb24gb2YgZGJtdHLyNAAAWBQAAABsaWJyYXJ5L3NvY2tldHNlcnZlcnLzNAAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXRzZXJ2ZXIuaHRtbFgwAAAAU29ja2V0U2VydmVyIOKAlCBBIGZyYW1ld29yayBmb3IgbmV0d29yayBzZXJ2ZXJzdHL0NAAAWAsAAABsaWJyYXJ5L2ltcHL1NAAAKGppAQAAamoBAABYKgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbXAuaHRtbFgjAAAAaW1wIOKAlCBBY2Nlc3MgdGhlIGltcG9ydCBpbnRlcm5hbHN0cvY0AABYDgAAAGxpYnJhcnkvbXN2Y3J0cvc0AAAoamkBAABqagEAAFgtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zdmNydC5odG1sWDMAAABtc3ZjcnQg4oCUIFVzZWZ1bCByb3V0aW5lcyBmcm9tIHRoZSBNUyBWQysrIHJ1bnRpbWV0cvg0AABYCwAAAGxpYnJhcnkvc2dpcvk0AAAoamkBAABqagEAAFgqAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NnaS5odG1sWBoAAABTR0kgSVJJWCBTcGVjaWZpYyBTZXJ2aWNlc3Ry+jQAAFgOAAAAbGlicmFyeS9hdGV4aXRy+zQAAChqaQEAAGpqAQAAWC0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXRleGl0Lmh0bWxYGAAAAGF0ZXhpdCDigJQgRXhpdCBoYW5kbGVyc3Ry/DQAAFgPAAAAbGlicmFyeS93aW5kb3dzcv00AAAoamkBAABqagEAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dpbmRvd3MuaHRtbFgcAAAATVMgV2luZG93cyBTcGVjaWZpYyBTZXJ2aWNlc3Ry/jQAAFgNAAAAaG93dG8vc29ja2V0c3L/NAAAKGppAQAAamoBAABYLAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaG93dG8vc29ja2V0cy5odG1sWBgAAABTb2NrZXQgUHJvZ3JhbW1pbmcgSE9XVE90cgA1AABYEAAAAGxpYnJhcnkvbGFuZ3VhZ2VyATUAAChqaQEAAGpqAQAAWC8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbGFuZ3VhZ2UuaHRtbFgYAAAAUHl0aG9uIExhbmd1YWdlIFNlcnZpY2VzdHICNQAAWA8AAABsaWJyYXJ5L3RhcmZpbGVyAzUAAChqaQEAAGpqAQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFyZmlsZS5odG1sWCwAAAB0YXJmaWxlIOKAlCBSZWFkIGFuZCB3cml0ZSB0YXIgYXJjaGl2ZSBmaWxlc3RyBDUAAFgPAAAAbGlicmFyeS94bWwuc2F4cgU1AAAoamkBAABqagEAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXguaHRtbFgkAAAAeG1sLnNheCDigJQgU3VwcG9ydCBmb3IgU0FYMiBwYXJzZXJzdHIGNQAAWBIAAABsaWJyYXJ5L2NvbXBpbGVhbGxyBzUAAChqaQEAAGpqAQAAWDEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29tcGlsZWFsbC5odG1sWCwAAABjb21waWxlYWxsIOKAlCBCeXRlLWNvbXBpbGUgUHl0aG9uIGxpYnJhcmllc3RyCDUAAFgPAAAAbGlicmFyeS9kaWZmbGlicgk1AAAoamkBAABqagEAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RpZmZsaWIuaHRtbFgoAAAAZGlmZmxpYiDigJQgSGVscGVycyBmb3IgY29tcHV0aW5nIGRlbHRhc3RyCjUAAFgTAAAAbGlicmFyeS91bmljb2RlZGF0YXILNQAAKGppAQAAamoBAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bmljb2RlZGF0YS5odG1sWCAAAAB1bmljb2RlZGF0YSDigJQgVW5pY29kZSBEYXRhYmFzZXRyDDUAAFgPAAAAbGlicmFyeS9hZXRvb2xzcg01AAAoamkBAABqagEAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FldG9vbHMuaHRtbFgeAAAAYWV0b29scyDigJQgT1NBIGNsaWVudCBzdXBwb3J0dHIONQAAWA4AAABsaWJyYXJ5L2NhcmJvbnIPNQAAKGppAQAAamoBAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYXJib24uaHRtbFgWAAAATWFjIE9TIFRvb2xib3ggTW9kdWxlc3RyEDUAAFgOAAAAYy1hcGkvZGF0ZXRpbWVyETUAAChqaQEAAGpqAQAAWC0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2RhdGV0aW1lLmh0bWxYEAAAAERhdGVUaW1lIE9iamVjdHN0chI1AABYCgAAAGxpYnJhcnkvaWNyEzUAAChqaQEAAGpqAQAAWCkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaWMuaHRtbFgtAAAAaWMg4oCUIEFjY2VzcyB0byB0aGUgTWFjIE9TIFggSW50ZXJuZXQgQ29uZmlndHIUNQAAWA4AAABsaWJyYXJ5L3N0cnVjdHIVNQAAKGppAQAAamoBAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJ1Y3QuaHRtbFgyAAAAc3RydWN0IOKAlCBJbnRlcnByZXQgc3RyaW5ncyBhcyBwYWNrZWQgYmluYXJ5IGRhdGF0chY1AABYCgAAAGxpYnJhcnkvaW9yFzUAAChqaQEAAGpqAQAAWCkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW8uaHRtbFgqAAAAaW8g4oCUIENvcmUgdG9vbHMgZm9yIHdvcmtpbmcgd2l0aCBzdHJlYW1zdHIYNQAAWBEAAABsaWJyYXJ5L2Z1bmN0aW9uc3IZNQAAKGppAQAAamoBAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbFgSAAAAQnVpbHQtaW4gRnVuY3Rpb25zdHIaNQAAWA8AAABsaWJyYXJ5L3NnbWxsaWJyGzUAAChqaQEAAGpqAQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2dtbGxpYi5odG1sWB4AAABzZ21sbGliIOKAlCBTaW1wbGUgU0dNTCBwYXJzZXJ0chw1AABYDgAAAGxpYnJhcnkvZnBlY3Rsch01AAAoamkBAABqagEAAFgtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZwZWN0bC5odG1sWCsAAABmcGVjdGwg4oCUIEZsb2F0aW5nIHBvaW50IGV4Y2VwdGlvbiBjb250cm9sdHIeNQAAWAwAAABsaWJyYXJ5L2lkbGVyHzUAAChqaQEAAGpqAQAAWCsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaWRsZS5odG1sWAQAAABJRExFdHIgNQAAWAsAAABjLWFwaS9pbmRleHIhNQAAKGppAQAAamoBAABYKgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvaW5kZXguaHRtbFgdAAAAUHl0aG9uL0MgQVBJIFJlZmVyZW5jZSBNYW51YWx0ciI1AABYDwAAAGxpYnJhcnkvc3FsaXRlM3IjNQAAKGppAQAAamoBAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zcWxpdGUzLmh0bWxYNQAAAHNxbGl0ZTMg4oCUIERCLUFQSSAyLjAgaW50ZXJmYWNlIGZvciBTUUxpdGUgZGF0YWJhc2VzdHIkNQAAWAsAAABsaWJyYXJ5L3N1bnIlNQAAKGppAQAAamoBAABYKgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdW4uaHRtbFgXAAAAU3VuT1MgU3BlY2lmaWMgU2VydmljZXN0ciY1AABYEAAAAGMtYXBpL3N0cnVjdHVyZXNyJzUAAChqaQEAAGpqAQAAWC8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3N0cnVjdHVyZXMuaHRtbFgYAAAAQ29tbW9uIE9iamVjdCBTdHJ1Y3R1cmVzdHIoNQAAWAcAAABmYXEvZ3Vpcik1AAAoamkBAABqagEAAFgmAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9mYXEvZ3VpLmh0bWxYGgAAAEdyYXBoaWMgVXNlciBJbnRlcmZhY2UgRkFRdHIqNQAAWBEAAABsaWJyYXJ5L2Vuc3VyZXBpcHIrNQAAKGppAQAAamoBAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbnN1cmVwaXAuaHRtbFgtAAAAZW5zdXJlcGlwIOKAlCBCb290c3RyYXBwaW5nIHRoZSBwaXAgaW5zdGFsbGVydHIsNQAAWAsAAABsaWJyYXJ5L2lwY3ItNQAAKGppAQAAamoBAABYKgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pcGMuaHRtbFgpAAAASW50ZXJwcm9jZXNzIENvbW11bmljYXRpb24gYW5kIE5ldHdvcmtpbmd0ci41AABYCwAAAGxpYnJhcnkvcHR5ci81AAAoamkBAABqagEAAFgqAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B0eS5odG1sWCEAAABwdHkg4oCUIFBzZXVkby10ZXJtaW5hbCB1dGlsaXRpZXN0cjA1AABYDQAAAGMtYXBpL3R5cGVvYmpyMTUAAChqaQEAAGpqAQAAWCwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL3R5cGVvYmouaHRtbFgMAAAAVHlwZSBPYmplY3RzdHIyNQAAWAoAAABsaWJyYXJ5L3V1cjM1AAAoamkBAABqagEAAFgpAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3V1Lmh0bWxYJwAAAHV1IOKAlCBFbmNvZGUgYW5kIGRlY29kZSB1dWVuY29kZSBmaWxlc3RyNDUAAFgUAAAAbGlicmFyeS9lbWFpbC5oZWFkZXJyNTUAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwuaGVhZGVyLmh0bWxYJwAAAGVtYWlsLmhlYWRlcjogSW50ZXJuYXRpb25hbGl6ZWQgaGVhZGVyc3RyNjUAAFgOAAAAbGlicmFyeS9weWNsYnJyNzUAAChqaQEAAGpqAQAAWC0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHljbGJyLmh0bWxYJwAAAHB5Y2xiciDigJQgUHl0aG9uIGNsYXNzIGJyb3dzZXIgc3VwcG9ydHRyODUAAFgOAAAAbGlicmFyeS9yZmM4MjJyOTUAAChqaQEAAGpqAQAAWC0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmZjODIyLmh0bWxYJgAAAHJmYzgyMiDigJQgUGFyc2UgUkZDIDI4MjIgbWFpbCBoZWFkZXJzdHI6NQAAWA8AAABsaWJyYXJ5L193aW5yZWdyOzUAAChqaQEAAGpqAQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvX3dpbnJlZy5odG1sWCMAAABfd2lucmVnIOKAlCBXaW5kb3dzIHJlZ2lzdHJ5IGFjY2Vzc3RyPDUAAFgUAAAAbGlicmFyeS9jdXJzZXMuYXNjaWlyPTUAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmFzY2lpLmh0bWxYLwAAAGN1cnNlcy5hc2NpaSDigJQgVXRpbGl0aWVzIGZvciBBU0NJSSBjaGFyYWN0ZXJzdHI+NQAAWBAAAABsaWJyYXJ5L3VzZXJkaWN0cj81AAAoamkBAABqagEAAFgvAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VzZXJkaWN0Lmh0bWxYMQAAAFVzZXJEaWN0IOKAlCBDbGFzcyB3cmFwcGVyIGZvciBkaWN0aW9uYXJ5IG9iamVjdHN0ckA1AABYDAAAAGMtYXBpL251bWJlcnJBNQAAKGppAQAAamoBAABYKwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbnVtYmVyLmh0bWxYDwAAAE51bWJlciBQcm90b2NvbHRyQjUAAFgRAAAAbGlicmFyeS90ZWxuZXRsaWJyQzUAAChqaQEAAGpqAQAAWDAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGVsbmV0bGliLmh0bWxYGwAAAHRlbG5ldGxpYiDigJQgVGVsbmV0IGNsaWVudHRyRDUAAFgOAAAAbGlicmFyeS9jb29raWVyRTUAAChqaQEAAGpqAQAAWC0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llLmh0bWxYIAAAAENvb2tpZSDigJQgSFRUUCBzdGF0ZSBtYW5hZ2VtZW50dHJGNQAAWA4AAABsaWJyYXJ5L3NvY2tldHJHNQAAKGppAQAAamoBAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbFgpAAAAc29ja2V0IOKAlCBMb3ctbGV2ZWwgbmV0d29ya2luZyBpbnRlcmZhY2V0ckg1AABYDwAAAGxpYnJhcnkvaG90c2hvdHJJNQAAKGppAQAAamoBAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ob3RzaG90Lmh0bWxYLQAAAGhvdHNob3Qg4oCUIEhpZ2ggcGVyZm9ybWFuY2UgbG9nZ2luZyBwcm9maWxlcnRySjUAAFgOAAAAbGlicmFyeS9zaWduYWxySzUAAChqaQEAAGpqAQAAWC0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2lnbmFsLmh0bWxYLwAAAHNpZ25hbCDigJQgU2V0IGhhbmRsZXJzIGZvciBhc3luY2hyb25vdXMgZXZlbnRzdHJMNQAAWAwAAABsaWJyYXJ5L3NpdGVyTTUAAChqaQEAAGpqAQAAWCsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2l0ZS5odG1sWCkAAABzaXRlIOKAlCBTaXRlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gaG9va3RyTjUAAFgTAAAAbGlicmFyeS9fX2J1aWx0aW5fX3JPNQAAKGppAQAAamoBAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fX2J1aWx0aW5fXy5odG1sWCAAAABfX2J1aWx0aW5fXyDigJQgQnVpbHQtaW4gb2JqZWN0c3RyUDUAAFgEAAAAYnVnc3JRNQAAKGppAQAAamoBAABYIwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYnVncy5odG1sWA4AAABSZXBvcnRpbmcgQnVnc3RyUjUAAFgPAAAAbGlicmFyeS9mbm1hdGNoclM1AAAoamkBAABqagEAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZubWF0Y2guaHRtbFgqAAAAZm5tYXRjaCDigJQgVW5peCBmaWxlbmFtZSBwYXR0ZXJuIG1hdGNoaW5ndHJUNQAAWAoAAABsaWJyYXJ5L3JlclU1AAAoamkBAABqagEAAFgpAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlLmh0bWxYJAAAAHJlIOKAlCBSZWd1bGFyIGV4cHJlc3Npb24gb3BlcmF0aW9uc3RyVjUAAFgUAAAAdHV0b3JpYWwvaW50ZXJhY3RpdmVyVzUAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2ludGVyYWN0aXZlLmh0bWxYMgAAAEludGVyYWN0aXZlIElucHV0IEVkaXRpbmcgYW5kIEhpc3RvcnkgU3Vic3RpdHV0aW9udHJYNQAAWAsAAABmYXEvZ2VuZXJhbHJZNQAAKGppAQAAamoBAABYKgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZmFxL2dlbmVyYWwuaHRtbFgSAAAAR2VuZXJhbCBQeXRob24gRkFRdHJaNQAAWA8AAABjLWFwaS9vYmpidWZmZXJyWzUAAChqaQEAAGpqAQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL29iamJ1ZmZlci5odG1sWBMAAABPbGQgQnVmZmVyIFByb3RvY29sdHJcNQAAWA8AAABob3d0by9kb2FuZGRvbnRyXTUAAChqaQEAAGpqAQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2hvd3RvL2RvYW5kZG9udC5odG1sWCAAAABJZGlvbXMgYW5kIEFudGktSWRpb21zIGluIFB5dGhvbnRyXjUAAFgTAAAAbGlicmFyeS9lYXN5ZGlhbG9nc3JfNQAAKGppAQAAamoBAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lYXN5ZGlhbG9ncy5odG1sWCcAAABFYXN5RGlhbG9ncyDigJQgQmFzaWMgTWFjaW50b3NoIGRpYWxvZ3N0cmA1AABYEgAAAGxpYnJhcnkvc3RyaW5ncHJlcHJhNQAAKGppAQAAamoBAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmdwcmVwLmh0bWxYKgAAAHN0cmluZ3ByZXAg4oCUIEludGVybmV0IFN0cmluZyBQcmVwYXJhdGlvbnRyYjUAAFgOAAAAbGlicmFyeS91cmxsaWJyYzUAAChqaQEAAGpqAQAAWC0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliLmh0bWxYKgAAAHVybGxpYiDigJQgT3BlbiBhcmJpdHJhcnkgcmVzb3VyY2VzIGJ5IFVSTHRyZDUAAFgLAAAAbGlicmFyeS9iZGJyZTUAAChqaQEAAGpqAQAAWCoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmRiLmh0bWxYGgAAAGJkYiDigJQgRGVidWdnZXIgZnJhbWV3b3JrdHJmNQAAWAwAAABsaWJyYXJ5L21pc2NyZzUAAChqaQEAAGpqAQAAWCsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWlzYy5odG1sWBYAAABNaXNjZWxsYW5lb3VzIFNlcnZpY2VzdHJoNQAAWA0AAABsaWJyYXJ5L3BpcGVzcmk1AAAoamkBAABqagEAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BpcGVzLmh0bWxYJgAAAHBpcGVzIOKAlCBJbnRlcmZhY2UgdG8gc2hlbGwgcGlwZWxpbmVzdHJqNQAAWAwAAABsaWJyYXJ5L2NvcHlyazUAAChqaQEAAGpqAQAAWCsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29weS5odG1sWCkAAABjb3B5IOKAlCBTaGFsbG93IGFuZCBkZWVwIGNvcHkgb3BlcmF0aW9uc3RybDUAAFgQAAAAbGlicmFyeS9hc3luY2hhdHJtNQAAKGppAQAAamoBAABYLwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hc3luY2hhdC5odG1sWDkAAABhc3luY2hhdCDigJQgQXN5bmNocm9ub3VzIHNvY2tldCBjb21tYW5kL3Jlc3BvbnNlIGhhbmRsZXJ0cm41AABYDgAAAGxpYnJhcnkvbWFjb3Nhcm81AAAoamkBAABqagEAAFgtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hY29zYS5odG1sWBUAAABNYWNQeXRob24gT1NBIE1vZHVsZXN0cnA1AABYEgAAAGxpYnJhcnkvbWltZXdyaXRlcnJxNQAAKGppAQAAamoBAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW1ld3JpdGVyLmh0bWxYJwAAAE1pbWVXcml0ZXIg4oCUIEdlbmVyaWMgTUlNRSBmaWxlIHdyaXRlcnRycjUAAFgWAAAAcmVmZXJlbmNlL3NpbXBsZV9zdG10c3JzNQAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sWBEAAABTaW1wbGUgc3RhdGVtZW50c3RydDUAAFgPAAAAbGlicmFyeS9kb2N0ZXN0cnU1AAAoamkBAABqagEAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbFgsAAAAZG9jdGVzdCDigJQgVGVzdCBpbnRlcmFjdGl2ZSBQeXRob24gZXhhbXBsZXN0cnY1AABYFgAAAGxpYnJhcnkvZ2Vuc3VpdGVtb2R1bGVydzUAAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2Vuc3VpdGVtb2R1bGUuaHRtbFgtAAAAZ2Vuc3VpdGVtb2R1bGUg4oCUIEdlbmVyYXRlIE9TQSBzdHViIHBhY2thZ2VzdHJ4NQAAWBoAAABsaWJyYXJ5L3NpbXBsZXhtbHJwY3NlcnZlcnJ5NQAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaW1wbGV4bWxycGNzZXJ2ZXIuaHRtbFgrAAAAU2ltcGxlWE1MUlBDU2VydmVyIOKAlCBCYXNpYyBYTUwtUlBDIHNlcnZlcnRyejUAAFgOAAAAbGlicmFyeS9mdHBsaWJyezUAAChqaQEAAGpqAQAAWC0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnRwbGliLmh0bWxYHgAAAGZ0cGxpYiDigJQgRlRQIHByb3RvY29sIGNsaWVudHRyfDUAAFgPAAAAZGlzdHV0aWxzL2luZGV4cn01AAAoamkBAABqagEAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvaW5kZXguaHRtbFgsAAAARGlzdHJpYnV0aW5nIFB5dGhvbiBNb2R1bGVzIChMZWdhY3kgdmVyc2lvbil0cn41AABYDgAAAGxpYnJhcnkvcHl0aG9ucn81AAAoamkBAABqagEAAFgtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5dGhvbi5odG1sWBcAAABQeXRob24gUnVudGltZSBTZXJ2aWNlc3RygDUAAFgNAAAAbGlicmFyeS9zdW5hdXKBNQAAKGppAQAAamoBAABYLAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdW5hdS5odG1sWCUAAABzdW5hdSDigJQgUmVhZCBhbmQgd3JpdGUgU3VuIEFVIGZpbGVzdHKCNQAAWAsAAABsaWJyYXJ5L21hY3KDNQAAKGppAQAAamoBAABYKgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWMuaHRtbFgaAAAATWFjIE9TIFggc3BlY2lmaWMgc2VydmljZXN0coQ1AABYDAAAAGxpYnJhcnkvanNvbnKFNQAAKGppAQAAamoBAABYKwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9qc29uLmh0bWxYIQAAAGpzb24g4oCUIEpTT04gZW5jb2RlciBhbmQgZGVjb2RlcnRyhjUAAFgOAAAAbGlicmFyeS9pbWdoZHJyhzUAAChqaQEAAGpqAQAAWC0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1naGRyLmh0bWxYKQAAAGltZ2hkciDigJQgRGV0ZXJtaW5lIHRoZSB0eXBlIG9mIGFuIGltYWdldHKINQAAWA0AAABsaWJyYXJ5L3Bvc2l4cok1AAAoamkBAABqagEAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Bvc2l4Lmh0bWxYLAAAAHBvc2l4IOKAlCBUaGUgbW9zdCBjb21tb24gUE9TSVggc3lzdGVtIGNhbGxzdHKKNQAAWA8AAABsaWJyYXJ5L2F1ZGlvb3ByizUAAChqaQEAAGpqAQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXVkaW9vcC5odG1sWCUAAABhdWRpb29wIOKAlCBNYW5pcHVsYXRlIHJhdyBhdWRpbyBkYXRhdHKMNQAAWA8AAABsaWJyYXJ5L2ltYWdlb3ByjTUAAChqaQEAAGpqAQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hZ2VvcC5odG1sWCUAAABpbWFnZW9wIOKAlCBNYW5pcHVsYXRlIHJhdyBpbWFnZSBkYXRhdHKONQAAWBEAAABsaWJyYXJ5L211bHRpZmlsZXKPNQAAKGppAQAAamoBAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aWZpbGUuaHRtbFg5AAAAbXVsdGlmaWxlIOKAlCBTdXBwb3J0IGZvciBmaWxlcyBjb250YWluaW5nIGRpc3RpbmN0IHBhcnRzdHKQNQAAWA8AAABsaWJyYXJ5L3NtdHBsaWJykTUAAChqaQEAAGpqAQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc210cGxpYi5odG1sWCAAAABzbXRwbGliIOKAlCBTTVRQIHByb3RvY29sIGNsaWVudHRykjUAAFgLAAAAbGlicmFyeS9jbWRykzUAAChqaQEAAGpqAQAAWCoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY21kLmh0bWxYNgAAAGNtZCDigJQgU3VwcG9ydCBmb3IgbGluZS1vcmllbnRlZCBjb21tYW5kIGludGVycHJldGVyc3RylDUAAFgSAAAAbGlicmFyeS9fX2Z1dHVyZV9fcpU1AAAoamkBAABqagEAAFgxAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L19fZnV0dXJlX18uaHRtbFgrAAAAX19mdXR1cmVfXyDigJQgRnV0dXJlIHN0YXRlbWVudCBkZWZpbml0aW9uc3RyljUAAFgOAAAAbGlicmFyeS9zaGVsdmVylzUAAChqaQEAAGpqAQAAWC0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2hlbHZlLmh0bWxYJAAAAHNoZWx2ZSDigJQgUHl0aG9uIG9iamVjdCBwZXJzaXN0ZW5jZXRymDUAAFgQAAAAbGlicmFyeS93YXJuaW5nc3KZNQAAKGppAQAAamoBAABYLwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93YXJuaW5ncy5odG1sWBwAAAB3YXJuaW5ncyDigJQgV2FybmluZyBjb250cm9sdHKaNQAAWA0AAABsaWJyYXJ5L21hY29zcps1AAAoamkBAABqagEAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21hY29zLmh0bWxYLwAAAE1hY09TIOKAlCBBY2Nlc3MgdG8gTWFjIE9TIGludGVycHJldGVyIGZlYXR1cmVzdHKcNQAAWAsAAABsaWJyYXJ5L3N5c3KdNQAAKGppAQAAamoBAABYKgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeXMuaHRtbFgwAAAAc3lzIOKAlCBTeXN0ZW0tc3BlY2lmaWMgcGFyYW1ldGVycyBhbmQgZnVuY3Rpb25zdHKeNQAAWBMAAAByZWZlcmVuY2UvZGF0YW1vZGVscp81AAAoamkBAABqagEAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWxYCgAAAERhdGEgbW9kZWx0cqA1AABYCgAAAGMtYXBpL2ZpbGVyoTUAAChqaQEAAGpqAQAAWCkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ZpbGUuaHRtbFgMAAAARmlsZSBPYmplY3RzdHKiNQAAWBAAAABjLWFwaS9leGNlcHRpb25zcqM1AAAoamkBAABqagEAAFgvAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9leGNlcHRpb25zLmh0bWxYEgAAAEV4Y2VwdGlvbiBIYW5kbGluZ3RypDUAAFgWAAAAdHV0b3JpYWwvZmxvYXRpbmdwb2ludHKlNQAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvZmxvYXRpbmdwb2ludC5odG1sWDIAAABGbG9hdGluZyBQb2ludCBBcml0aG1ldGljOiAgSXNzdWVzIGFuZCBMaW1pdGF0aW9uc3RypjUAAFgQAAAAbGlicmFyeS9jb3B5X3JlZ3KnNQAAKGppAQAAamoBAABYLwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb3B5X3JlZy5odG1sWC4AAABjb3B5X3JlZyDigJQgUmVnaXN0ZXIgcGlja2xlIHN1cHBvcnQgZnVuY3Rpb25zdHKoNQAAWAoAAABsaWJyYXJ5L2djcqk1AAAoamkBAABqagEAAFgpAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2djLmh0bWxYIgAAAGdjIOKAlCBHYXJiYWdlIENvbGxlY3RvciBpbnRlcmZhY2V0cqo1AABYDgAAAGxpYnJhcnkvYWVwYWNrcqs1AAAoamkBAABqagEAAFgtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FlcGFjay5odG1sWE0AAABhZXBhY2sg4oCUIENvbnZlcnNpb24gYmV0d2VlbiBQeXRob24gdmFyaWFibGVzIGFuZCBBcHBsZUV2ZW50IGRhdGEgY29udGFpbmVyc3RyrDUAAFgXAAAAdHV0b3JpYWwvZGF0YXN0cnVjdHVyZXNyrTUAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3R1dG9yaWFsL2RhdGFzdHJ1Y3R1cmVzLmh0bWxYDwAAAERhdGEgU3RydWN0dXJlc3RyrjUAAFgKAAAAbGlicmFyeS9nbHKvNQAAKGppAQAAamoBAABYKQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nbC5odG1sWCEAAABnbCDigJQgR3JhcGhpY3MgTGlicmFyeSBpbnRlcmZhY2V0crA1AABYDQAAAGhvd3RvL3VuaWNvZGVysTUAAChqaQEAAGpqAQAAWCwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2hvd3RvL3VuaWNvZGUuaHRtbFgNAAAAVW5pY29kZSBIT1dUT3RysjUAAFgPAAAAdHV0b3JpYWwvc3RkbGlicrM1AAAoamkBAABqagEAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC9zdGRsaWIuaHRtbFgiAAAAQnJpZWYgVG91ciBvZiB0aGUgU3RhbmRhcmQgTGlicmFyeXRytDUAAFgSAAAAbGlicmFyeS9yZXN0cmljdGVkcrU1AAAoamkBAABqagEAAFgxAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Jlc3RyaWN0ZWQuaHRtbFgUAAAAUmVzdHJpY3RlZCBFeGVjdXRpb250crY1AABYDwAAAGxpYnJhcnkvd2hpY2hkYnK3NQAAKGppAQAAamoBAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93aGljaGRiLmh0bWxYNQAAAHdoaWNoZGIg4oCUIEd1ZXNzIHdoaWNoIERCTSBtb2R1bGUgY3JlYXRlZCBhIGRhdGFiYXNldHK4NQAAWBQAAABsaWJyYXJ5L2Rpc3RyaWJ1dGlvbnK5NQAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXN0cmlidXRpb24uaHRtbFgjAAAAU29mdHdhcmUgUGFja2FnaW5nIGFuZCBEaXN0cmlidXRpb250cro1AABYDQAAAGxpYnJhcnkvcmV4ZWNyuzUAAChqaQEAAGpqAQAAWCwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmV4ZWMuaHRtbFgoAAAAcmV4ZWMg4oCUIFJlc3RyaWN0ZWQgZXhlY3V0aW9uIGZyYW1ld29ya3RyvDUAAFgQAAAAaG93dG8vd2Vic2VydmVyc3K9NQAAKGppAQAAamoBAABYLwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaG93dG8vd2Vic2VydmVycy5odG1sWBsAAABIT1dUTyBVc2UgUHl0aG9uIGluIHRoZSB3ZWJ0cr41AABYDwAAAGxpYnJhcnkvaHRtbGxpYnK/NQAAKGppAQAAamoBAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odG1sbGliLmh0bWxYJwAAAGh0bWxsaWIg4oCUIEEgcGFyc2VyIGZvciBIVE1MIGRvY3VtZW50c3RywDUAAFgMAAAAbGlicmFyeS91bml4csE1AAAoamkBAABqagEAAFgrAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXguaHRtbFgWAAAAVW5peCBTcGVjaWZpYyBTZXJ2aWNlc3RywjUAAFgTAAAAbGlicmFyeS9taW5pYWVmcmFtZXLDNQAAKGppAQAAamoBAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW5pYWVmcmFtZS5odG1sWDoAAABNaW5pQUVGcmFtZSDigJQgT3BlbiBTY3JpcHRpbmcgQXJjaGl0ZWN0dXJlIHNlcnZlciBzdXBwb3J0dHLENQAAWA8AAABsaWJyYXJ5L2ZpbGVjbXByxTUAAChqaQEAAGpqAQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmlsZWNtcC5odG1sWCoAAABmaWxlY21wIOKAlCBGaWxlIGFuZCBEaXJlY3RvcnkgQ29tcGFyaXNvbnN0csY1AABYFwAAAGxpYnJhcnkvbXVsdGlwcm9jZXNzaW5ncsc1AAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sWDsAAABtdWx0aXByb2Nlc3Npbmcg4oCUIFByb2Nlc3MtYmFzZWQg4oCcdGhyZWFkaW5n4oCdIGludGVyZmFjZXRyyDUAAFgTAAAAbGlicmFyeS9yb2JvdHBhcnNlcnLJNQAAKGppAQAAamoBAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yb2JvdHBhcnNlci5odG1sWCYAAAByb2JvdHBhcnNlciDigJQgIFBhcnNlciBmb3Igcm9ib3RzLnR4dHRyyjUAAFgSAAAAbGlicmFyeS9odG1scGFyc2Vycss1AAAoamkBAABqagEAAFgxAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0bWxwYXJzZXIuaHRtbFgrAAAASFRNTFBhcnNlciDigJQgU2ltcGxlIEhUTUwgYW5kIFhIVE1MIHBhcnNlcnRyzDUAAFgPAAAAbGlicmFyeS9pbWFwbGlics01AAAoamkBAABqagEAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbFghAAAAaW1hcGxpYiDigJQgSU1BUDQgcHJvdG9jb2wgY2xpZW50dHLONQAAWA8AAABsaWJyYXJ5L2xvZ2dpbmdyzzUAAChqaQEAAGpqAQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sWCcAAABsb2dnaW5nIOKAlCBMb2dnaW5nIGZhY2lsaXR5IGZvciBQeXRob250ctA1AABYFQAAAGxpYnJhcnkvZW1haWwubWVzc2FnZXLRNQAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5tZXNzYWdlLmh0bWxYLAAAAGVtYWlsLm1lc3NhZ2U6IFJlcHJlc2VudGluZyBhbiBlbWFpbCBtZXNzYWdldHLSNQAAWA4AAABsaWJyYXJ5L3NlbGVjdHLTNQAAKGppAQAAamoBAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZWxlY3QuaHRtbFglAAAAc2VsZWN0IOKAlCBXYWl0aW5nIGZvciBJL08gY29tcGxldGlvbnRy1DUAAFgNAAAAaG93dG8vbG9nZ2luZ3LVNQAAKGppAQAAamoBAABYLAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaG93dG8vbG9nZ2luZy5odG1sWA0AAABMb2dnaW5nIEhPV1RPdHLWNQAAWAwAAABjLWFwaS9tZXRob2Ry1zUAAChqaQEAAGpqAQAAWCsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL21ldGhvZC5odG1sWA4AAABNZXRob2QgT2JqZWN0c3Ry2DUAAFgQAAAAdHV0b3JpYWwvY2xhc3Nlc3LZNQAAKGppAQAAamoBAABYLwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvY2xhc3Nlcy5odG1sWAcAAABDbGFzc2VzdHLaNQAAWA0AAABsaWJyYXJ5L3Rva2Vucts1AAAoamkBAABqagEAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rva2VuLmh0bWxYMAAAAHRva2VuIOKAlCBDb25zdGFudHMgdXNlZCB3aXRoIFB5dGhvbiBwYXJzZSB0cmVlc3Ry3DUAAFgPAAAAbGlicmFyeS9rZXl3b3Jkct01AAAoamkBAABqagEAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2tleXdvcmQuaHRtbFgnAAAAa2V5d29yZCDigJQgVGVzdGluZyBmb3IgUHl0aG9uIGtleXdvcmRzdHLeNQAAWA0AAABsaWJyYXJ5L2FycmF5ct81AAAoamkBAABqagEAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FycmF5Lmh0bWxYLAAAAGFycmF5IOKAlCBFZmZpY2llbnQgYXJyYXlzIG9mIG51bWVyaWMgdmFsdWVzdHLgNQAAWBAAAAB0dXRvcmlhbC93aGF0bm93cuE1AAAoamkBAABqagEAAFgvAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi90dXRvcmlhbC93aGF0bm93Lmh0bWxYCQAAAFdoYXQgTm93P3Ry4jUAAFgMAAAAbGlicmFyeS9qcGVncuM1AAAoamkBAABqagEAAFgrAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2pwZWcuaHRtbFgiAAAAanBlZyDigJQgUmVhZCBhbmQgd3JpdGUgSlBFRyBmaWxlc3Ry5DUAAFgRAAAAbGlicmFyeS9mcmFtZXdvcmty5TUAAChqaQEAAGpqAQAAWDAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnJhbWV3b3JrLmh0bWxYLwAAAEZyYW1lV29yayDigJQgSW50ZXJhY3RpdmUgYXBwbGljYXRpb24gZnJhbWV3b3JrdHLmNQAAWAsAAABsaWJyYXJ5L3B3ZHLnNQAAKGppAQAAamoBAABYKgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wd2QuaHRtbFgdAAAAcHdkIOKAlCBUaGUgcGFzc3dvcmQgZGF0YWJhc2V0cug1AABYCgAAAGMtYXBpL2luaXRy6TUAAChqaQEAAGpqAQAAWCkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2luaXQuaHRtbFgpAAAASW5pdGlhbGl6YXRpb24sIEZpbmFsaXphdGlvbiwgYW5kIFRocmVhZHN0cuo1AABYDQAAAGxpYnJhcnkvZW1haWxy6zUAAChqaQEAAGpqAQAAWCwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwuaHRtbFgsAAAAZW1haWwg4oCUIEFuIGVtYWlsIGFuZCBNSU1FIGhhbmRsaW5nIHBhY2thZ2V0cuw1AABYEwAAAGxpYnJhcnkvZmlsZWZvcm1hdHNy7TUAAChqaQEAAGpqAQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmlsZWZvcm1hdHMuaHRtbFgMAAAARmlsZSBGb3JtYXRzdHLuNQAAWBAAAABsaWJyYXJ5L2RpcmNhY2hlcu81AAAoamkBAABqagEAAFgvAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RpcmNhY2hlLmh0bWxYJgAAAGRpcmNhY2hlIOKAlCBDYWNoZWQgZGlyZWN0b3J5IGxpc3RpbmdzdHLwNQAAWA8AAABsaWJyYXJ5L2R1bWJkYm1y8TUAAChqaQEAAGpqAQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZHVtYmRibS5odG1sWCcAAABkdW1iZGJtIOKAlCBQb3J0YWJsZSBEQk0gaW1wbGVtZW50YXRpb250cvI1AABYEQAAAGxpYnJhcnkvbGluZWNhY2hlcvM1AAAoamkBAABqagEAAFgwAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xpbmVjYWNoZS5odG1sWCkAAABsaW5lY2FjaGUg4oCUIFJhbmRvbSBhY2Nlc3MgdG8gdGV4dCBsaW5lc3Ry9DUAAFgMAAAAbGlicmFyeS9pMThucvU1AAAoamkBAABqagEAAFgrAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2kxOG4uaHRtbFgUAAAASW50ZXJuYXRpb25hbGl6YXRpb250cvY1AABYDgAAAGxpYnJhcnkvY3J5cHRvcvc1AAAoamkBAABqagEAAFgtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NyeXB0by5odG1sWBYAAABDcnlwdG9ncmFwaGljIFNlcnZpY2VzdHL4NQAAWAoAAABjLWFwaS90eXBlcvk1AAAoamkBAABqagEAAFgpAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS90eXBlLmh0bWxYDAAAAFR5cGUgT2JqZWN0c3Ry+jUAAFgLAAAAbGlicmFyeS9kYm1y+zUAAChqaQEAAGpqAQAAWCoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGJtLmh0bWxYJwAAAGRibSDigJQgU2ltcGxlIOKAnGRhdGFiYXNl4oCdIGludGVyZmFjZXRy/DUAAFgQAAAAbGlicmFyeS9iaW5hc2NpaXL9NQAAKGppAQAAamoBAABYLwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iaW5hc2NpaS5odG1sWC0AAABiaW5hc2NpaSDigJQgQ29udmVydCBiZXR3ZWVuIGJpbmFyeSBhbmQgQVNDSUl0cv41AABYDQAAAGxpYnJhcnkvY2h1bmty/zUAAChqaQEAAGpqAQAAWCwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2h1bmsuaHRtbFgfAAAAY2h1bmsg4oCUIFJlYWQgSUZGIGNodW5rZWQgZGF0YXRyADYAAFgLAAAAbGlicmFyeS9iejJyATYAAChqaQEAAGpqAQAAWCoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYnoyLmh0bWxYKQAAAGJ6MiDigJQgQ29tcHJlc3Npb24gY29tcGF0aWJsZSB3aXRoIGJ6aXAydHICNgAAWA0AAABsaWJyYXJ5L2hlYXBxcgM2AAAoamkBAABqagEAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2hlYXBxLmh0bWxYHgAAAGhlYXBxIOKAlCBIZWFwIHF1ZXVlIGFsZ29yaXRobXRyBDYAAFgXAAAAbGlicmFyeS94bWwuZG9tLnB1bGxkb21yBTYAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5wdWxsZG9tLmh0bWxYOgAAAHhtbC5kb20ucHVsbGRvbSDigJQgU3VwcG9ydCBmb3IgYnVpbGRpbmcgcGFydGlhbCBET00gdHJlZXN0cgY2AABYCgAAAGMtYXBpL2NvZGVyBzYAAChqaQEAAGpqAQAAWCkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2NvZGUuaHRtbFgMAAAAQ29kZSBPYmplY3RzdHIINgAAWA8AAABob3d0by9weXBvcnRpbmdyCTYAAChqaQEAAGpqAQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2hvd3RvL3B5cG9ydGluZy5odG1sWCEAAABQb3J0aW5nIFB5dGhvbiAyIENvZGUgdG8gUHl0aG9uIDN0cgo2AABYDQAAAGxpYnJhcnkvbXV0ZXhyCzYAAChqaQEAAGpqAQAAWCwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXV0ZXguaHRtbFgiAAAAbXV0ZXgg4oCUIE11dHVhbCBleGNsdXNpb24gc3VwcG9ydHRyDDYAAFgNAAAAbGlicmFyeS9uZXRyY3INNgAAKGppAQAAamoBAABYLAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9uZXRyYy5odG1sWB8AAABuZXRyYyDigJQgbmV0cmMgZmlsZSBwcm9jZXNzaW5ndHIONgAAWBQAAABsaWJyYXJ5L2NvbmZpZ3BhcnNlcnIPNgAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbFgqAAAAQ29uZmlnUGFyc2VyIOKAlCBDb25maWd1cmF0aW9uIGZpbGUgcGFyc2VydHIQNgAAWAwAAABsaWJyYXJ5L3N0YXRyETYAAChqaQEAAGpqAQAAWCsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdC5odG1sWCQAAABzdGF0IOKAlCBJbnRlcnByZXRpbmcgc3RhdCgpIHJlc3VsdHN0chI2AABYDQAAAGxpYnJhcnkvc210cGRyEzYAAChqaQEAAGpqAQAAWCwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc210cGQuaHRtbFgVAAAAc210cGQg4oCUIFNNVFAgU2VydmVydHIUNgAAWBAAAABsaWJyYXJ5L2ZwZm9ybWF0chU2AAAoamkBAABqagEAAFgvAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZwZm9ybWF0Lmh0bWxYJwAAAGZwZm9ybWF0IOKAlCBGbG9hdGluZyBwb2ludCBjb252ZXJzaW9uc3RyFjYAAFgKAAAAYy1hcGkvbGlzdHIXNgAAKGppAQAAamoBAABYKQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbGlzdC5odG1sWAwAAABMaXN0IE9iamVjdHN0chg2AABYGAAAAGxpYnJhcnkvc2ltcGxlaHR0cHNlcnZlcnIZNgAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaW1wbGVodHRwc2VydmVyLmh0bWxYMAAAAFNpbXBsZUhUVFBTZXJ2ZXIg4oCUIFNpbXBsZSBIVFRQIHJlcXVlc3QgaGFuZGxlcnRyGjYAAFgUAAAAbGlicmFyeS9tb2R1bGVmaW5kZXJyGzYAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbW9kdWxlZmluZGVyLmh0bWxYLgAAAG1vZHVsZWZpbmRlciDigJQgRmluZCBtb2R1bGVzIHVzZWQgYnkgYSBzY3JpcHR0chw2AABYFAAAAGxpYnJhcnkvY3VzdG9taW50ZXJwch02AAAoamkBAABqagEAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1c3RvbWludGVycC5odG1sWBoAAABDdXN0b20gUHl0aG9uIEludGVycHJldGVyc3RyHjYAAFgJAAAAYy1hcGkvZ2Vuch82AAAoamkBAABqagEAAFgoAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9nZW4uaHRtbFgRAAAAR2VuZXJhdG9yIE9iamVjdHN0ciA2AABYCwAAAGxpYnJhcnkvY2dpciE2AAAoamkBAABqagEAAFgqAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NnaS5odG1sWCgAAABjZ2kg4oCUIENvbW1vbiBHYXRld2F5IEludGVyZmFjZSBzdXBwb3J0dHIiNgAAWA8AAABsaWJyYXJ5L2ltZ2ZpbGVyIzYAAChqaQEAAGpqAQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1nZmlsZS5odG1sWCgAAABpbWdmaWxlIOKAlCBTdXBwb3J0IGZvciBTR0kgaW1nbGliIGZpbGVzdHIkNgAAWBIAAABkaXN0cmlidXRpbmcvaW5kZXhyJTYAAChqaQEAAGpqAQAAWDEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3RyaWJ1dGluZy9pbmRleC5odG1sWBsAAABEaXN0cmlidXRpbmcgUHl0aG9uIE1vZHVsZXN0ciY2AABYFQAAAGxpYnJhcnkveG1sLnNheC51dGlsc3InNgAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnV0aWxzLmh0bWxYIgAAAHhtbC5zYXguc2F4dXRpbHMg4oCUIFNBWCBVdGlsaXRpZXN0cig2AABYDwAAAGMtYXBpL3V0aWxpdGllc3IpNgAAKGppAQAAamoBAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvdXRpbGl0aWVzLmh0bWxYCQAAAFV0aWxpdGllc3RyKjYAAFgNAAAAYy1hcGkvd2Vha3JlZnIrNgAAKGppAQAAamoBAABYLAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvd2Vha3JlZi5odG1sWBYAAABXZWFrIFJlZmVyZW5jZSBPYmplY3RzdHIsNgAAWBAAAABob3d0by9mdW5jdGlvbmFsci02AAAoamkBAABqagEAAFgvAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9ob3d0by9mdW5jdGlvbmFsLmh0bWxYHAAAAEZ1bmN0aW9uYWwgUHJvZ3JhbW1pbmcgSE9XVE90ci42AABYCgAAAGxpYnJhcnkvY2RyLzYAAChqaQEAAGpqAQAAWCkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2QuaHRtbFgjAAAAY2Qg4oCUIENELVJPTSBhY2Nlc3Mgb24gU0dJIHN5c3RlbXN0cjA2AABYCQAAAGNvcHlyaWdodHIxNgAAKGppAQAAamoBAABYKAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvY29weXJpZ2h0Lmh0bWxYCQAAAENvcHlyaWdodHRyMjYAAFgMAAAAbGlicmFyeS9nemlwcjM2AAAoamkBAABqagEAAFgrAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2d6aXAuaHRtbFgfAAAAZ3ppcCDigJQgU3VwcG9ydCBmb3IgZ3ppcCBmaWxlc3RyNDYAAFgNAAAAbGlicmFyeS9weWRvY3I1NgAAKGppAQAAamoBAABYLAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWRvYy5odG1sWDgAAABweWRvYyDigJQgRG9jdW1lbnRhdGlvbiBnZW5lcmF0b3IgYW5kIG9ubGluZSBoZWxwIHN5c3RlbXRyNjYAAFgNAAAAbGlicmFyeS9kZWJ1Z3I3NgAAKGppAQAAamoBAABYLAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWJ1Zy5odG1sWBcAAABEZWJ1Z2dpbmcgYW5kIFByb2ZpbGluZ3RyODYAAFgWAAAAZGlzdHV0aWxzL2ludHJvZHVjdGlvbnI5NgAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2ludHJvZHVjdGlvbi5odG1sWBwAAABBbiBJbnRyb2R1Y3Rpb24gdG8gRGlzdHV0aWxzdHI6NgAAWBAAAABsaWJyYXJ5L3BsaXN0bGlicjs2AAAoamkBAABqagEAAFgvAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BsaXN0bGliLmh0bWxYNQAAAHBsaXN0bGliIOKAlCBHZW5lcmF0ZSBhbmQgcGFyc2UgTWFjIE9TIFggLnBsaXN0IGZpbGVzdHI8NgAAWAsAAABsaWJyYXJ5L3NzbHI9NgAAKGppAQAAamoBAABYKgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbFgqAAAAc3NsIOKAlCBUTFMvU1NMIHdyYXBwZXIgZm9yIHNvY2tldCBvYmplY3RzdHI+NgAAWBQAAAB0dXRvcmlhbC9jb250cm9sZmxvd3I/NgAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvY29udHJvbGZsb3cuaHRtbFgXAAAATW9yZSBDb250cm9sIEZsb3cgVG9vbHN0ckA2AABYDwAAAGxpYnJhcnkvdXJsbGliMnJBNgAAKGppAQAAamoBAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWxYLwAAAHVybGxpYjIg4oCUIGV4dGVuc2libGUgbGlicmFyeSBmb3Igb3BlbmluZyBVUkxzdHJCNgAAWA0AAABmYXEvZXh0ZW5kaW5nckM2AAAoamkBAABqagEAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9mYXEvZXh0ZW5kaW5nLmh0bWxYFwAAAEV4dGVuZGluZy9FbWJlZGRpbmcgRkFRdHJENgAAWA8AAAByZWZlcmVuY2UvaW5kZXhyRTYAAChqaQEAAGpqAQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9pbmRleC5odG1sWB0AAABUaGUgUHl0aG9uIExhbmd1YWdlIFJlZmVyZW5jZXRyRjYAAFgMAAAAYy1hcGkvb2JqZWN0ckc2AAAoamkBAABqagEAAFgrAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9vYmplY3QuaHRtbFgPAAAAT2JqZWN0IFByb3RvY29sdHJINgAAWA8AAABsaWJyYXJ5L251bWVyaWNySTYAAChqaQEAAGpqAQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbnVtZXJpYy5odG1sWCAAAABOdW1lcmljIGFuZCBNYXRoZW1hdGljYWwgTW9kdWxlc3RySjYAAFgOAAAAbGlicmFyeS9zdHJpbmdySzYAAChqaQEAAGpqAQAAWC0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWxYIwAAAHN0cmluZyDigJQgQ29tbW9uIHN0cmluZyBvcGVyYXRpb25zdHJMNgAAWA4AAABsaWJyYXJ5L21hcmt1cHJNNgAAKGppAQAAamoBAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYXJrdXAuaHRtbFgiAAAAU3RydWN0dXJlZCBNYXJrdXAgUHJvY2Vzc2luZyBUb29sc3RyTjYAAFgSAAAAZXh0ZW5kaW5nL25ld3R5cGVzck82AAAoamkBAABqagEAAFgxAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9leHRlbmRpbmcvbmV3dHlwZXMuaHRtbFgSAAAARGVmaW5pbmcgTmV3IFR5cGVzdHJQNgAAWBIAAABsaWJyYXJ5L3dlYmJyb3dzZXJyUTYAAChqaQEAAGpqAQAAWDEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2ViYnJvd3Nlci5odG1sWDAAAAB3ZWJicm93c2VyIOKAlCBDb252ZW5pZW50IFdlYi1icm93c2VyIGNvbnRyb2xsZXJ0clI2AABYDgAAAGMtYXBpL3NlcXVlbmNlclM2AAAoamkBAABqagEAAFgtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zZXF1ZW5jZS5odG1sWBEAAABTZXF1ZW5jZSBQcm90b2NvbHRyVDYAAFgOAAAAbGlicmFyeS9iaW5oZXhyVTYAAChqaQEAAGpqAQAAWC0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmluaGV4Lmh0bWxYKgAAAGJpbmhleCDigJQgRW5jb2RlIGFuZCBkZWNvZGUgYmluaGV4NCBmaWxlc3RyVjYAAFgIAAAAZ2xvc3NhcnlyVzYAAChqaQEAAGpqAQAAWCcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWxYCAAAAEdsb3NzYXJ5dHJYNgAAWBAAAABsaWJyYXJ5L3RhYm5hbm55clk2AAAoamkBAABqagEAAFgvAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RhYm5hbm55Lmh0bWxYLwAAAHRhYm5hbm55IOKAlCBEZXRlY3Rpb24gb2YgYW1iaWd1b3VzIGluZGVudGF0aW9udHJaNgAAWAcAAABsaWNlbnNlcls2AAAoamkBAABqagEAAFgmAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWNlbnNlLmh0bWxYEwAAAEhpc3RvcnkgYW5kIExpY2Vuc2V0clw2AABYEAAAAGxpYnJhcnkvdGV4dHdyYXByXTYAAChqaQEAAGpqAQAAWC8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGV4dHdyYXAuaHRtbFgmAAAAdGV4dHdyYXAg4oCUIFRleHQgd3JhcHBpbmcgYW5kIGZpbGxpbmd0cl42AABYEgAAAGxpYnJhcnkvbWFjb3N0b29sc3JfNgAAKGppAQAAamoBAABYMQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWNvc3Rvb2xzLmh0bWxYOQAAAG1hY29zdG9vbHMg4oCUIENvbnZlbmllbmNlIHJvdXRpbmVzIGZvciBmaWxlIG1hbmlwdWxhdGlvbnRyYDYAAFgKAAAAdXNpbmcvdW5peHJhNgAAKGppAQAAamoBAABYKQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvdW5peC5odG1sWB4AAABVc2luZyBQeXRob24gb24gVW5peCBwbGF0Zm9ybXN0cmI2AABYEwAAAGxpYnJhcnkvcmxjb21wbGV0ZXJyYzYAAChqaQEAAGpqAQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmxjb21wbGV0ZXIuaHRtbFg0AAAAcmxjb21wbGV0ZXIg4oCUIENvbXBsZXRpb24gZnVuY3Rpb24gZm9yIEdOVSByZWFkbGluZXRyZDYAAFgQAAAAbGlicmFyeS9pbnRlcm5ldHJlNgAAKGppAQAAamoBAABYLwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbnRlcm5ldC5odG1sWB4AAABJbnRlcm5ldCBQcm90b2NvbHMgYW5kIFN1cHBvcnR0cmY2AABYCgAAAGxpYnJhcnkvdGtyZzYAAChqaQEAAGpqAQAAWCkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGsuaHRtbFghAAAAR3JhcGhpY2FsIFVzZXIgSW50ZXJmYWNlcyB3aXRoIFRrdHJoNgAAWBAAAABsaWJyYXJ5L2NvbW1hbmRzcmk2AAAoamkBAABqagEAAFgvAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbW1hbmRzLmh0bWxYKwAAAGNvbW1hbmRzIOKAlCBVdGlsaXRpZXMgZm9yIHJ1bm5pbmcgY29tbWFuZHN0cmo2AABYCgAAAGxpYnJhcnkvZmxyazYAAChqaQEAAGpqAQAAWCkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmwuaHRtbFgyAAAAZmwg4oCUIEZPUk1TIGxpYnJhcnkgZm9yIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZXN0cmw2AABYCgAAAGxpYnJhcnkvZm1ybTYAAChqaQEAAGpqAQAAWCkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZm0uaHRtbFgdAAAAZm0g4oCUIEZvbnQgTWFuYWdlciBpbnRlcmZhY2V0cm42AABYEAAAAGRpc3R1dGlscy9hcGlyZWZybzYAAChqaQEAAGpqAQAAWC8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbFgNAAAAQVBJIFJlZmVyZW5jZXRycDYAAFgdAAAAcmVmZXJlbmNlL3RvcGxldmVsX2NvbXBvbmVudHNycTYAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS90b3BsZXZlbF9jb21wb25lbnRzLmh0bWxYFAAAAFRvcC1sZXZlbCBjb21wb25lbnRzdHJyNgAAWA4AAABsaWJyYXJ5L3RpbWVpdHJzNgAAKGppAQAAamoBAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aW1laXQuaHRtbFg4AAAAdGltZWl0IOKAlCBNZWFzdXJlIGV4ZWN1dGlvbiB0aW1lIG9mIHNtYWxsIGNvZGUgc25pcHBldHN0cnQ2AABYEAAAAGxpYnJhcnkvcGxhdGZvcm1ydTYAAChqaQEAAGpqAQAAWC8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGxhdGZvcm0uaHRtbFhAAAAAcGxhdGZvcm0g4oCUICBBY2Nlc3MgdG8gdW5kZXJseWluZyBwbGF0Zm9ybeKAmXMgaWRlbnRpZnlpbmcgZGF0YXRydjYAAFgLAAAAbGlicmFyeS9zaGFydzYAAChqaQEAAGpqAQAAWCoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2hhLmh0bWxYJgAAAHNoYSDigJQgU0hBLTEgbWVzc2FnZSBkaWdlc3QgYWxnb3JpdGhtdHJ4NgAAWA4AAABsaWJyYXJ5L2dldG9wdHJ5NgAAKGppAQAAamoBAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZXRvcHQuaHRtbFgyAAAAZ2V0b3B0IOKAlCBDLXN0eWxlIHBhcnNlciBmb3IgY29tbWFuZCBsaW5lIG9wdGlvbnN0cno2AABYDwAAAGMtYXBpL2djc3VwcG9ydHJ7NgAAKGppAQAAamoBAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvZ2NzdXBwb3J0Lmh0bWxYJAAAAFN1cHBvcnRpbmcgQ3ljbGljIEdhcmJhZ2UgQ29sbGVjdGlvbnRyfDYAAFgJAAAAYy1hcGkvc3lzcn02AAAoamkBAABqagEAAFgoAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9zeXMuaHRtbFgaAAAAT3BlcmF0aW5nIFN5c3RlbSBVdGlsaXRpZXN0cn42AABYDwAAAHR1dG9yaWFsL2Vycm9yc3J/NgAAKGppAQAAamoBAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdHV0b3JpYWwvZXJyb3JzLmh0bWxYFQAAAEVycm9ycyBhbmQgRXhjZXB0aW9uc3RygDYAAFgUAAAAZGlzdHV0aWxzL2NvbmZpZ2ZpbGVygTYAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9jb25maWdmaWxlLmh0bWxYJAAAAFdyaXRpbmcgdGhlIFNldHVwIENvbmZpZ3VyYXRpb24gRmlsZXRygjYAAFgQAAAAbGlicmFyeS93aW5zb3VuZHKDNgAAKGppAQAAamoBAABYLwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93aW5zb3VuZC5odG1sWDAAAAB3aW5zb3VuZCDigJQgU291bmQtcGxheWluZyBpbnRlcmZhY2UgZm9yIFdpbmRvd3N0coQ2AABYHQAAAGxpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlcoU2AAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sWDEAAAB4bWwuZXRyZWUuRWxlbWVudFRyZWUg4oCUIFRoZSBFbGVtZW50VHJlZSBYTUwgQVBJdHKGNgAAWA0AAABsaWJyYXJ5L2ZjbnRscoc2AAAoamkBAABqagEAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZjbnRsLmh0bWxYKgAAAGZjbnRsIOKAlCBUaGUgZmNudGwgYW5kIGlvY3RsIHN5c3RlbSBjYWxsc3RyiDYAAFgOAAAAbGlicmFyeS9wb3BsaWJyiTYAAChqaQEAAGpqAQAAWC0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcG9wbGliLmh0bWxYHwAAAHBvcGxpYiDigJQgUE9QMyBwcm90b2NvbCBjbGllbnR0coo2AABYFAAAAGxpYnJhcnkvZW1haWwucGFyc2Vycos2AAAoamkBAABqagEAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLnBhcnNlci5odG1sWCQAAABlbWFpbC5wYXJzZXI6IFBhcnNpbmcgZW1haWwgbWVzc2FnZXN0cow2AABYDgAAAGxpYnJhcnkvdGhyZWFkco02AAAoamkBAABqagEAAFgtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZC5odG1sWCYAAAB0aHJlYWQg4oCUIE11bHRpcGxlIHRocmVhZHMgb2YgY29udHJvbHRyjjYAAFgQAAAAYy1hcGkvYWxsb2NhdGlvbnKPNgAAKGppAQAAamoBAABYLwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvYWxsb2NhdGlvbi5odG1sWB4AAABBbGxvY2F0aW5nIE9iamVjdHMgb24gdGhlIEhlYXB0cpA2AABYEAAAAGluc3RhbGxpbmcvaW5kZXhykTYAAChqaQEAAGpqAQAAWC8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2luc3RhbGxpbmcvaW5kZXguaHRtbFgZAAAASW5zdGFsbGluZyBQeXRob24gTW9kdWxlc3RykjYAAFgVAAAAbGlicmFyeS9lbWFpbC5jaGFyc2V0cpM2AAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLmNoYXJzZXQuaHRtbFgqAAAAZW1haWwuY2hhcnNldDogUmVwcmVzZW50aW5nIGNoYXJhY3RlciBzZXRzdHKUNgAAWBEAAABsaWJyYXJ5L2ZpbGVpbnB1dHKVNgAAKGppAQAAamoBAABYMAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9maWxlaW5wdXQuaHRtbFg8AAAAZmlsZWlucHV0IOKAlCBJdGVyYXRlIG92ZXIgbGluZXMgZnJvbSBtdWx0aXBsZSBpbnB1dCBzdHJlYW1zdHKWNgAAWBcAAABsaWJyYXJ5L2Z1dHVyZV9idWlsdGluc3KXNgAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdXR1cmVfYnVpbHRpbnMuaHRtbFglAAAAZnV0dXJlX2J1aWx0aW5zIOKAlCBQeXRob24gMyBidWlsdGluc3RymDYAAFgPAAAAbGlicmFyeS93ZWFrcmVmcpk2AAAoamkBAABqagEAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dlYWtyZWYuaHRtbFgbAAAAd2Vha3JlZiDigJQgV2VhayByZWZlcmVuY2VzdHKaNgAAWAoAAABjLWFwaS9ib29scps2AAAoamkBAABqagEAAFgpAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9ib29sLmh0bWxYDwAAAEJvb2xlYW4gT2JqZWN0c3RynDYAAFgQAAAAbGlicmFyeS9vdGhlcmd1aXKdNgAAKGppAQAAamoBAABYLwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vdGhlcmd1aS5odG1sWCcAAABPdGhlciBHcmFwaGljYWwgVXNlciBJbnRlcmZhY2UgUGFja2FnZXN0cp42AABYDgAAAGxpYnJhcnkvcG9wZW4ycp82AAAoamkBAABqagEAAFgtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BvcGVuMi5odG1sWDMAAABwb3BlbjIg4oCUIFN1YnByb2Nlc3NlcyB3aXRoIGFjY2Vzc2libGUgSS9PIHN0cmVhbXN0cqA2AABYDAAAAGxpYnJhcnkvdGVzdHKhNgAAKGppAQAAamoBAABYKwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZXN0Lmh0bWxYLAAAAHRlc3Qg4oCUIFJlZ3Jlc3Npb24gdGVzdHMgcGFja2FnZSBmb3IgUHl0aG9udHKiNgAAWA4AAABsaWJyYXJ5L3NuZGhkcnKjNgAAKGppAQAAamoBAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zbmRoZHIuaHRtbFgnAAAAc25kaGRyIOKAlCBEZXRlcm1pbmUgdHlwZSBvZiBzb3VuZCBmaWxldHKkNgAAWAoAAABsaWJyYXJ5L29zcqU2AAAoamkBAABqagEAAFgpAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zLmh0bWxYMAAAAG9zIOKAlCBNaXNjZWxsYW5lb3VzIG9wZXJhdGluZyBzeXN0ZW0gaW50ZXJmYWNlc3RypjYAAFgNAAAAbGlicmFyeS9jbWF0aHKnNgAAKGppAQAAamoBAABYLAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jbWF0aC5odG1sWDQAAABjbWF0aCDigJQgTWF0aGVtYXRpY2FsIGZ1bmN0aW9ucyBmb3IgY29tcGxleCBudW1iZXJzdHKoNgAAWA4AAABsaWJyYXJ5L2N0eXBlc3KpNgAAKGppAQAAamoBAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbFgwAAAAY3R5cGVzIOKAlCBBIGZvcmVpZ24gZnVuY3Rpb24gbGlicmFyeSBmb3IgUHl0aG9udHKqNgAAWAoAAABjLWFwaS9pdGVycqs2AAAoamkBAABqagEAAFgpAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9pdGVyLmh0bWxYEQAAAEl0ZXJhdG9yIFByb3RvY29sdHKsNgAAWA8AAABsaWJyYXJ5L3Byb2ZpbGVyrTYAAChqaQEAAGpqAQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHJvZmlsZS5odG1sWBQAAABUaGUgUHl0aG9uIFByb2ZpbGVyc3RyrjYAAFgUAAAAbGlicmFyeS9lbWFpbC5lcnJvcnNyrzYAAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwuZXJyb3JzLmh0bWxYKgAAAGVtYWlsLmVycm9yczogRXhjZXB0aW9uIGFuZCBEZWZlY3QgY2xhc3Nlc3RysDYAAFgRAAAAbGlicmFyeS96aXBpbXBvcnRysTYAAChqaQEAAGpqAQAAWDAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemlwaW1wb3J0Lmh0bWxYLgAAAHppcGltcG9ydCDigJQgSW1wb3J0IG1vZHVsZXMgZnJvbSBaaXAgYXJjaGl2ZXN0crI2AABYDAAAAGxpYnJhcnkvdXVpZHKzNgAAKGppAQAAamoBAABYKwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91dWlkLmh0bWxYKwAAAHV1aWQg4oCUIFVVSUQgb2JqZWN0cyBhY2NvcmRpbmcgdG8gUkZDIDQxMjJ0crQ2AABYEQAAAGxpYnJhcnkvZGF0YXR5cGVzcrU2AAAoamkBAABqagEAAFgwAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGF0eXBlcy5odG1sWAoAAABEYXRhIFR5cGVzdHK2NgAAWA0AAABsaWJyYXJ5L2NnaXRicrc2AAAoamkBAABqagEAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NnaXRiLmh0bWxYKwAAAGNnaXRiIOKAlCBUcmFjZWJhY2sgbWFuYWdlciBmb3IgQ0dJIHNjcmlwdHN0crg2AABYDQAAAGxpYnJhcnkvY3J5cHRyuTYAAChqaQEAAGpqAQAAWCwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3J5cHQuaHRtbFgqAAAAY3J5cHQg4oCUIEZ1bmN0aW9uIHRvIGNoZWNrIFVuaXggcGFzc3dvcmRzdHK6NgAAWA0AAABsaWJyYXJ5L2ludHJvcrs2AAAoamkBAABqagEAAFgsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ludHJvLmh0bWxYDAAAAEludHJvZHVjdGlvbnRyvDYAAFgKAAAAYy1hcGkvbm9uZXK9NgAAKGppAQAAamoBAABYKQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvYy1hcGkvbm9uZS5odG1sWA8AAABUaGUgTm9uZSBPYmplY3R0cr42AABYDQAAAGxpYnJhcnkvYnNkZGJyvzYAAChqaQEAAGpqAQAAWCwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYnNkZGIuaHRtbFgqAAAAYnNkZGIg4oCUIEludGVyZmFjZSB0byBCZXJrZWxleSBEQiBsaWJyYXJ5dHLANgAAWAwAAAB3aGF0c25ldy8yLjZywTYAAChqaQEAAGpqAQAAWCsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuNi5odG1sWBoAAABXaGF04oCZcyBOZXcgaW4gUHl0aG9uIDIuNnRywjYAAFgRAAAAbGlicmFyeS9jb25zdGFudHNywzYAAChqaQEAAGpqAQAAWDAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uc3RhbnRzLmh0bWxYEgAAAEJ1aWx0LWluIENvbnN0YW50c3RyxDYAAFgJAAAAYy1hcGkvYXJncsU2AAAoamkBAABqagEAAFgoAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9jLWFwaS9hcmcuaHRtbFglAAAAUGFyc2luZyBhcmd1bWVudHMgYW5kIGJ1aWxkaW5nIHZhbHVlc3RyxjYAAFgSAAAAbGlicmFyeS9jb250ZXh0bGlicsc2AAAoamkBAABqagEAAFgxAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbnRleHRsaWIuaHRtbFg0AAAAY29udGV4dGxpYiDigJQgVXRpbGl0aWVzIGZvciB3aXRoLXN0YXRlbWVudCBjb250ZXh0c3RyyDYAAFgPAAAAbGlicmFyeS9oYXNobGlicsk2AAAoamkBAABqagEAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2hhc2hsaWIuaHRtbFgtAAAAaGFzaGxpYiDigJQgU2VjdXJlIGhhc2hlcyBhbmQgbWVzc2FnZSBkaWdlc3RzdHLKNgAAWBYAAABsaWJyYXJ5L2VtYWlsLWV4YW1wbGVzcss2AAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLWV4YW1wbGVzLmh0bWxYDwAAAGVtYWlsOiBFeGFtcGxlc3RyzDYAAFgQAAAAbGlicmFyeS9hc3luY29yZXLNNgAAKGppAQAAamoBAABYLwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hc3luY29yZS5odG1sWCgAAABhc3luY29yZSDigJQgQXN5bmNocm9ub3VzIHNvY2tldCBoYW5kbGVydHLONgAAWA8AAABjLWFwaS9ieXRlYXJyYXlyzzYAAChqaQEAAGpqAQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2J5dGVhcnJheS5odG1sWBIAAABCeXRlIEFycmF5IE9iamVjdHN0ctA2AABYFgAAAGxpYnJhcnkvbG9nZ2luZy5jb25maWdy0TYAAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5jb25maWcuaHRtbFgoAAAAbG9nZ2luZy5jb25maWcg4oCUIExvZ2dpbmcgY29uZmlndXJhdGlvbnRy0jYAAFgSAAAAbGlicmFyeS9leGNlcHRpb25zctM2AAAoamkBAABqagEAAFgxAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbFgTAAAAQnVpbHQtaW4gRXhjZXB0aW9uc3Ry1DYAAFgRAAAAbGlicmFyeS94bWxycGNsaWJy1TYAAChqaQEAAGpqAQAAWDAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1scnBjbGliLmh0bWxYIwAAAHhtbHJwY2xpYiDigJQgWE1MLVJQQyBjbGllbnQgYWNjZXNzdHLWNgAAWBYAAABsaWJyYXJ5L2VtYWlsLmVuY29kZXJzctc2AAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLmVuY29kZXJzLmh0bWxYGAAAAGVtYWlsLmVuY29kZXJzOiBFbmNvZGVyc3Ry2DYAAFgPAAAAbGlicmFyeS9udW1iZXJzctk2AAAoamkBAABqagEAAFguAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L251bWJlcnMuaHRtbFgpAAAAbnVtYmVycyDigJQgTnVtZXJpYyBhYnN0cmFjdCBiYXNlIGNsYXNzZXN0cto2AABYEAAAAGhvd3RvL2Rlc2NyaXB0b3Jy2zYAAChqaQEAAGpqAQAAWC8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2hvd3RvL2Rlc2NyaXB0b3IuaHRtbFgWAAAARGVzY3JpcHRvciBIb3dUbyBHdWlkZXRy3DYAAFgLAAAAbGlicmFyeS9hc3Ry3TYAAChqaQEAAGpqAQAAWCoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXN0Lmh0bWxYHQAAAGFzdCDigJQgQWJzdHJhY3QgU3ludGF4IFRyZWVzdHLeNgAAWA8AAABsaWJyYXJ5L2RlY2ltYWxy3zYAAChqaQEAAGpqAQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sWD0AAABkZWNpbWFsIOKAlCBEZWNpbWFsIGZpeGVkIHBvaW50IGFuZCBmbG9hdGluZyBwb2ludCBhcml0aG1ldGljdHLgNgAAWA8AAABsaWJyYXJ5L3N0YXR2ZnNy4TYAAChqaQEAAGpqAQAAWC4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RhdHZmcy5odG1sWCwAAABzdGF0dmZzIOKAlCBDb25zdGFudHMgdXNlZCB3aXRoIG9zLnN0YXR2ZnMoKXRy4jYAAFgMAAAAbGlicmFyeS9jb2RlcuM2AAAoamkBAABqagEAAFgrAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGUuaHRtbFghAAAAY29kZSDigJQgSW50ZXJwcmV0ZXIgYmFzZSBjbGFzc2VzdHLkNgAAWA4AAABob3d0by9jcG9ydGluZ3LlNgAAKGppAQAAamoBAABYLQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvaG93dG8vY3BvcnRpbmcuaHRtbFglAAAAUG9ydGluZyBFeHRlbnNpb24gTW9kdWxlcyB0byBQeXRob24gM3Ry5jYAAFgOAAAAbGlicmFyeS9taW1pZnly5zYAAChqaQEAAGpqAQAAWC0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWltaWZ5Lmh0bWxYKwAAAG1pbWlmeSDigJQgTUlNRSBwcm9jZXNzaW5nIG9mIG1haWwgbWVzc2FnZXN0cug2AABYDAAAAHdoYXRzbmV3LzIuMHLpNgAAKGppAQAAamoBAABYKwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi4wLmh0bWxYGgAAAFdoYXTigJlzIE5ldyBpbiBQeXRob24gMi4wdHLqNgAAWAwAAAB3aGF0c25ldy8yLjFy6zYAAChqaQEAAGpqAQAAWCsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuMS5odG1sWBoAAABXaGF04oCZcyBOZXcgaW4gUHl0aG9uIDIuMXRy7DYAAFgLAAAAYy1hcGkvaW50cm9y7TYAAChqaQEAAGpqAQAAWCoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2MtYXBpL2ludHJvLmh0bWxYDAAAAEludHJvZHVjdGlvbnRy7jYAAFgMAAAAd2hhdHNuZXcvMi4zcu82AAAoamkBAABqagEAAFgrAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi93aGF0c25ldy8yLjMuaHRtbFgaAAAAV2hhdOKAmXMgTmV3IGluIFB5dGhvbiAyLjN0cvA2AABYDAAAAHdoYXRzbmV3LzIuNHLxNgAAKGppAQAAamoBAABYKwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvd2hhdHNuZXcvMi40Lmh0bWxYGgAAAFdoYXTigJlzIE5ldyBpbiBQeXRob24gMi40dHLyNgAAWAwAAAB3aGF0c25ldy8yLjVy8zYAAChqaQEAAGpqAQAAWCsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuNS5odG1sWBoAAABXaGF04oCZcyBOZXcgaW4gUHl0aG9uIDIuNXRy9DYAAFgTAAAAbGlicmFyeS9jb2xsZWN0aW9uc3L1NgAAKGppAQAAamoBAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2xsZWN0aW9ucy5odG1sWDQAAABjb2xsZWN0aW9ucyDigJQgSGlnaC1wZXJmb3JtYW5jZSBjb250YWluZXIgZGF0YXR5cGVzdHL2NgAAWAwAAAB3aGF0c25ldy8yLjdy9zYAAChqaQEAAGpqAQAAWCsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3doYXRzbmV3LzIuNy5odG1sWBoAAABXaGF04oCZcyBOZXcgaW4gUHl0aG9uIDIuN3Ry+DYAAFgVAAAAcmVmZXJlbmNlL2V4cHJlc3Npb25zcvk2AAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbFgLAAAARXhwcmVzc2lvbnN0cvo2AABYDwAAAGxpYnJhcnkvbWFjcGF0aHL7NgAAKGppAQAAamoBAABYLgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWNwYXRoLmh0bWxYMAAAAG1hY3BhdGgg4oCUIE1hYyBPUyA5IHBhdGggbWFuaXB1bGF0aW9uIGZ1bmN0aW9uc3Ry/DYAAFgOAAAAbGlicmFyeS9jb2RlY3Ny/TYAAChqaQEAAGpqAQAAWC0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWxYKgAAAGNvZGVjcyDigJQgQ29kZWMgcmVnaXN0cnkgYW5kIGJhc2UgY2xhc3Nlc3Ry/jYAAFgWAAAAcmVmZXJlbmNlL2ludHJvZHVjdGlvbnL/NgAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2ludHJvZHVjdGlvbi5odG1sWAwAAABJbnRyb2R1Y3Rpb250cgA3AABYCgAAAGZhcS9kZXNpZ25yATcAAChqaQEAAGpqAQAAWCkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2ZhcS9kZXNpZ24uaHRtbFgWAAAARGVzaWduIGFuZCBIaXN0b3J5IEZBUXRyAjcAAFgQAAAAbGlicmFyeS90ZW1wZmlsZXIDNwAAKGppAQAAamoBAABYLwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZW1wZmlsZS5odG1sWDUAAAB0ZW1wZmlsZSDigJQgR2VuZXJhdGUgdGVtcG9yYXJ5IGZpbGVzIGFuZCBkaXJlY3Rvcmllc3RyBDcAAHVYCgAAAHN0ZDpvcGNvZGVyBTcAAH1yBjcAAChYDgAAAElOUExBQ0VfTU9EVUxPcgc3AAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1JTlBMQUNFX01PRFVMT1gBAAAALXRyCDcAAFgTAAAASlVNUF9JRl9UUlVFX09SX1BPUHIJNwAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtSlVNUF9JRl9UUlVFX09SX1BPUFgBAAAALXRyCjcAAFgHAAAAU0xJQ0UrMnILNwAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtU0xJQ0UrMlgBAAAALXRyDDcAAFgHAAAAU0xJQ0UrM3INNwAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtU0xJQ0UrM1gBAAAALXRyDjcAAFgHAAAAU0xJQ0UrMHIPNwAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtU0xJQ0UrMFgBAAAALXRyEDcAAFgHAAAAU0xJQ0UrMXIRNwAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtU0xJQ0UrMVgBAAAALXRyEjcAAFgJAAAAUE9QX0JMT0NLchM3AAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1QT1BfQkxPQ0tYAQAAAC10chQ3AABYCwAAAElOUExBQ0VfQUREchU3AAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1JTlBMQUNFX0FERFgBAAAALXRyFjcAAFgKAAAAU0VUX0xJTkVOT3IXNwAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtU0VUX0xJTkVOT1gBAAAALXRyGDcAAFgJAAAAQlVJTERfTUFQchk3AAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1CVUlMRF9NQVBYAQAAAC10cho3AABYCwAAAExPQURfR0xPQkFMchs3AAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1MT0FEX0dMT0JBTFgBAAAALXRyHDcAAFgLAAAATE9BRF9MT0NBTFNyHTcAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUxPQURfTE9DQUxTWAEAAAAtdHIeNwAAWA0AAABQUklOVF9JVEVNX1RPch83AAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1QUklOVF9JVEVNX1RPWAEAAAAtdHIgNwAAWBAAAABQUklOVF9ORVdMSU5FX1RPciE3AAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1QUklOVF9ORVdMSU5FX1RPWAEAAAAtdHIiNwAAWAgAAABEVVBfVE9QWHIjNwAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtRFVQX1RPUFhYAQAAAC10ciQ3AABYCgAAAENPTVBBUkVfT1ByJTcAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUNPTVBBUkVfT1BYAQAAAC10ciY3AABYDQAAAENBTExfRlVOQ1RJT05yJzcAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUNBTExfRlVOQ1RJT05YAQAAAC10cig3AABYDAAAAEVYVEVOREVEX0FSR3IpNwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtRVhURU5ERURfQVJHWAEAAAAtdHIqNwAAWA0AAABERUxFVEVfU1VCU0NScis3AAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1ERUxFVEVfU1VCU0NSWAEAAAAtdHIsNwAAWAsAAABZSUVMRF9WQUxVRXItNwAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtWUlFTERfVkFMVUVYAQAAAC10ci43AABYDgAAAElOUExBQ0VfUlNISUZUci83AAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1JTlBMQUNFX1JTSElGVFgBAAAALXRyMDcAAFgKAAAATE9BRF9DT05TVHIxNwAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtTE9BRF9DT05TVFgBAAAALXRyMjcAAFgNAAAAU0VUVVBfRklOQUxMWXIzNwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtU0VUVVBfRklOQUxMWVgBAAAALXRyNDcAAFgUAAAASlVNUF9JRl9GQUxTRV9PUl9QT1ByNTcAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUpVTVBfSUZfRkFMU0VfT1JfUE9QWAEAAAAtdHI2NwAAWAkAAABMT0FEX0ZBU1RyNzcAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUxPQURfRkFTVFgBAAAALXRyODcAAFgOAAAAVU5BUllfUE9TSVRJVkVyOTcAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLVVOQVJZX1BPU0lUSVZFWAEAAAAtdHI6NwAAWAwAAABTVE9SRV9HTE9CQUxyOzcAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLVNUT1JFX0dMT0JBTFgBAAAALXRyPDcAAFgLAAAAQlVJTERfVFVQTEVyPTcAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUJVSUxEX1RVUExFWAEAAAAtdHI+NwAAWAMAAABOT1ByPzcAAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLU5PUFgBAAAALXRyQDcAAFgNAAAAUFJJTlRfTkVXTElORXJBNwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtUFJJTlRfTkVXTElORVgBAAAALXRyQjcAAFgNAAAAQklOQVJZX0RJVklERXJDNwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtQklOQVJZX0RJVklERVgBAAAALXRyRDcAAFgHAAAAUk9UX1RXT3JFNwAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtUk9UX1RXT1gBAAAALXRyRjcAAFgKAAAAU1RPUkVfRkFTVHJHNwAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtU1RPUkVfRkFTVFgBAAAALXRySDcAAFgRAAAAUE9QX0pVTVBfSUZfRkFMU0VySTcAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLVBPUF9KVU1QX0lGX0ZBTFNFWAEAAAAtdHJKNwAAWAsAAABERUxFVEVfTkFNRXJLNwAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtREVMRVRFX05BTUVYAQAAAC10ckw3AABYCQAAAExPQURfTkFNRXJNNwAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtTE9BRF9OQU1FWAEAAAAtdHJONwAAWA8AAABCSU5BUllfTVVMVElQTFlyTzcAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUJJTkFSWV9NVUxUSVBMWVgBAAAALXRyUDcAAFgLAAAASU5QTEFDRV9BTkRyUTcAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUlOUExBQ0VfQU5EWAEAAAAtdHJSNwAAWAoAAABCSU5BUllfQUREclM3AAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1CSU5BUllfQUREWAEAAAAtdHJUNwAAWBAAAABDQUxMX0ZVTkNUSU9OX0tXclU3AAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1DQUxMX0ZVTkNUSU9OX0tXWAEAAAAtdHJWNwAAWA0AAABNQUtFX0ZVTkNUSU9Oclc3AAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1NQUtFX0ZVTkNUSU9OWAEAAAAtdHJYNwAAWAwAAABXSVRIX0NMRUFOVVByWTcAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLVdJVEhfQ0xFQU5VUFgBAAAALXRyWjcAAFgNAAAAREVMRVRFX0dMT0JBTHJbNwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtREVMRVRFX0dMT0JBTFgBAAAALXRyXDcAAFgNAAAASlVNUF9BQlNPTFVURXJdNwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtSlVNUF9BQlNPTFVURVgBAAAALXRyXjcAAFgNAAAASU5QTEFDRV9QT1dFUnJfNwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtSU5QTEFDRV9QT1dFUlgBAAAALXRyYDcAAFgNAAAAVU5BUllfQ09OVkVSVHJhNwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtVU5BUllfQ09OVkVSVFgBAAAALXRyYjcAAFgKAAAATE9BRF9ERVJFRnJjNwAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtTE9BRF9ERVJFRlgBAAAALXRyZDcAAFgKAAAAUFJJTlRfSVRFTXJlNwAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtUFJJTlRfSVRFTVgBAAAALXRyZjcAAFgLAAAASU1QT1JUX05BTUVyZzcAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUlNUE9SVF9OQU1FWAEAAAAtdHJoNwAAWBQAAABJTlBMQUNFX0ZMT09SX0RJVklERXJpNwAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtSU5QTEFDRV9GTE9PUl9ESVZJREVYAQAAAC10cmo3AABYDwAAAFVOUEFDS19TRVFVRU5DRXJrNwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtVU5QQUNLX1NFUVVFTkNFWAEAAAAtdHJsNwAAWAcAAABQT1BfVE9Qcm03AAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1QT1BfVE9QWAEAAAAtdHJuNwAAWAkAAABTVE9QX0NPREVybzcAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLVNUT1BfQ09ERVgBAAAALXRycDcAAFgJAAAAVU5BUllfTk9UcnE3AAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1VTkFSWV9OT1RYAQAAAC10cnI3AABYEwAAAElOUExBQ0VfVFJVRV9ESVZJREVyczcAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUlOUExBQ0VfVFJVRV9ESVZJREVYAQAAAC10cnQ3AABYCgAAAEJVSUxEX0xJU1RydTcAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUJVSUxEX0xJU1RYAQAAAC10cnY3AABYDAAAAFNUT1JFX1NVQlNDUnJ3NwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtU1RPUkVfU1VCU0NSWAEAAAAtdHJ4NwAAWBEAAABDQUxMX0ZVTkNUSU9OX1ZBUnJ5NwAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtQ0FMTF9GVU5DVElPTl9WQVJYAQAAAC10cno3AABYDwAAAEJJTkFSWV9TVUJUUkFDVHJ7NwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtQklOQVJZX1NVQlRSQUNUWAEAAAAtdHJ8NwAAWAwAAABVTkFSWV9JTlZFUlRyfTcAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLVVOQVJZX0lOVkVSVFgBAAAALXRyfjcAAFgMAAAATE9BRF9DTE9TVVJFcn83AAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1MT0FEX0NMT1NVUkVYAQAAAC10coA3AABYCgAAAEJJTkFSWV9BTkRygTcAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUJJTkFSWV9BTkRYAQAAAC10coI3AABYCAAAAEdFVF9JVEVScoM3AAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1HRVRfSVRFUlgBAAAALXRyhDcAAFgNAAAAQklOQVJZX1NVQlNDUnKFNwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtQklOQVJZX1NVQlNDUlgBAAAALXRyhjcAAFgJAAAAUk9UX1RIUkVFcoc3AAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1ST1RfVEhSRUVYAQAAAC10cog3AABYCAAAAEZPUl9JVEVScok3AAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1GT1JfSVRFUlgBAAAALXRyijcAAFgLAAAASU1QT1JUX1NUQVJyizcAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUlNUE9SVF9TVEFSWAEAAAAtdHKMNwAAWAsAAABJTlBMQUNFX1hPUnKNNwAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtSU5QTEFDRV9YT1JYAQAAAC10co43AABYDAAAAE1BS0VfQ0xPU1VSRXKPNwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtTUFLRV9DTE9TVVJFWAEAAAAtdHKQNwAAWA0AAABIQVZFX0FSR1VNRU5UcpE3AAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1IQVZFX0FSR1VNRU5UWAEAAAAtdHKSNwAAWAkAAABMT0FEX0FUVFJykzcAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUxPQURfQVRUUlgBAAAALXRylDcAAFgJAAAAQklOQVJZX09ScpU3AAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1CSU5BUllfT1JYAQAAAC10cpY3AABYCwAAAERFTEVURV9GQVNUcpc3AAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1ERUxFVEVfRkFTVFgBAAAALXRymDcAAFgOAAAASU5QTEFDRV9ESVZJREVymTcAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUlOUExBQ0VfRElWSURFWAEAAAAtdHKaNwAAWAoAAABQUklOVF9FWFBScps3AAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1QUklOVF9FWFBSWAEAAAAtdHKcNwAAWA0AAABTVE9SRV9TTElDRSsycp03AAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1TVE9SRV9TTElDRSsyWAEAAAAtdHKeNwAAWBAAAABJTlBMQUNFX01VTFRJUExZcp83AAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1JTlBMQUNFX01VTFRJUExZWAEAAAAtdHKgNwAAWA0AAABTVE9SRV9TTElDRSswcqE3AAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1TVE9SRV9TTElDRSswWAEAAAAtdHKiNwAAWA0AAABTVE9SRV9TTElDRSsxcqM3AAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1TVE9SRV9TTElDRSsxWAEAAAAtdHKkNwAAWAoAAABTRVRVUF9MT09QcqU3AAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1TRVRVUF9MT09QWAEAAAAtdHKmNwAAWA4AAABERUxFVEVfU0xJQ0UrMXKnNwAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtREVMRVRFX1NMSUNFKzFYAQAAAC10cqg3AABYDgAAAERFTEVURV9TTElDRSswcqk3AAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1ERUxFVEVfU0xJQ0UrMFgBAAAALXRyqjcAAFgOAAAAREVMRVRFX1NMSUNFKzNyqzcAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLURFTEVURV9TTElDRSszWAEAAAAtdHKsNwAAWA4AAABERUxFVEVfU0xJQ0UrMnKtNwAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtREVMRVRFX1NMSUNFKzJYAQAAAC10cq43AABYCgAAAFNFVFVQX1dJVEhyrzcAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLVNFVFVQX1dJVEhYAQAAAC10crA3AABYCQAAAFNUT1JFX01BUHKxNwAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtU1RPUkVfTUFQWAEAAAAtdHKyNwAAWAkAAABFWEVDX1NUTVRyszcAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUVYRUNfU1RNVFgBAAAALXRytDcAAFgLAAAAQlVJTERfU0xJQ0VytTcAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUJVSUxEX1NMSUNFWAEAAAAtdHK2NwAAWBAAAABQT1BfSlVNUF9JRl9UUlVFcrc3AAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1QT1BfSlVNUF9JRl9UUlVFWAEAAAAtdHK4NwAAWA0AAABSQUlTRV9WQVJBUkdTcrk3AAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1SQUlTRV9WQVJBUkdTWAEAAAAtdHK6NwAAWAoAAABJTlBMQUNFX09Scrs3AAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1JTlBMQUNFX09SWAEAAAAtdHK8NwAAWAwAAABTRVRVUF9FWENFUFRyvTcAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLVNFVFVQX0VYQ0VQVFgBAAAALXRyvjcAAFgUAAAAQ0FMTF9GVU5DVElPTl9WQVJfS1dyvzcAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUNBTExfRlVOQ1RJT05fVkFSX0tXWAEAAAAtdHLANwAAWBAAAABJTlBMQUNFX1NVQlRSQUNUcsE3AAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1JTlBMQUNFX1NVQlRSQUNUWAEAAAAtdHLCNwAAWBMAAABCSU5BUllfRkxPT1JfRElWSURFcsM3AAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1CSU5BUllfRkxPT1JfRElWSURFWAEAAAAtdHLENwAAWAsAAABTVE9SRV9ERVJFRnLFNwAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtU1RPUkVfREVSRUZYAQAAAC10csY3AABYCgAAAFNUT1JFX05BTUVyxzcAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLVNUT1JFX05BTUVYAQAAAC10csg3AABYDgAAAElOUExBQ0VfTFNISUZUcsk3AAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1JTlBMQUNFX0xTSElGVFgBAAAALXRyyjcAAFgKAAAAQlJFQUtfTE9PUHLLNwAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtQlJFQUtfTE9PUFgBAAAALXRyzDcAAFgHAAAARFVQX1RPUHLNNwAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtRFVQX1RPUFgBAAAALXRyzjcAAFgJAAAAQlVJTERfU0VUcs83AAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1CVUlMRF9TRVRYAQAAAC10ctA3AABYDQAAAEJJTkFSWV9NT0RVTE9y0TcAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUJJTkFSWV9NT0RVTE9YAQAAAC10ctI3AABYDgAAAFVOQVJZX05FR0FUSVZFctM3AAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1VTkFSWV9ORUdBVElWRVgBAAAALXRy1DcAAFgNAAAAU1RPUkVfU0xJQ0UrM3LVNwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtU1RPUkVfU0xJQ0UrM1gBAAAALXRy1jcAAFgLAAAAQlVJTERfQ0xBU1Ny1zcAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUJVSUxEX0NMQVNTWAEAAAAtdHLYNwAAWAsAAABFTkRfRklOQUxMWXLZNwAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtRU5EX0ZJTkFMTFlYAQAAAC10cto3AABYDAAAAFJFVFVSTl9WQUxVRXLbNwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtUkVUVVJOX1ZBTFVFWAEAAAAtdHLcNwAAWAgAAABST1RfRk9VUnLdNwAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtUk9UX0ZPVVJYAQAAAC10ct43AABYCwAAAERFTEVURV9BVFRSct83AAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1ERUxFVEVfQVRUUlgBAAAALXRy4DcAAFgSAAAAQklOQVJZX1RSVUVfRElWSURFcuE3AAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1CSU5BUllfVFJVRV9ESVZJREVYAQAAAC10cuI3AABYCgAAAEJJTkFSWV9YT1Jy4zcAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUJJTkFSWV9YT1JYAQAAAC10cuQ3AABYDQAAAEJJTkFSWV9SU0hJRlRy5TcAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUJJTkFSWV9SU0hJRlRYAQAAAC10cuY3AABYCgAAAFNUT1JFX0FUVFJy5zcAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLVNUT1JFX0FUVFJYAQAAAC10cug3AABYDAAAAEpVTVBfRk9SV0FSRHLpNwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtSlVNUF9GT1JXQVJEWAEAAAAtdHLqNwAAWAwAAABCSU5BUllfUE9XRVJy6zcAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUJJTkFSWV9QT1dFUlgBAAAALXRy7DcAAFgLAAAATElTVF9BUFBFTkRy7TcAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUxJU1RfQVBQRU5EWAEAAAAtdHLuNwAAWA0AAABDT05USU5VRV9MT09Qcu83AAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1DT05USU5VRV9MT09QWAEAAAAtdHLwNwAAWA0AAABCSU5BUllfTFNISUZUcvE3AAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1CSU5BUllfTFNISUZUWAEAAAAtdHLyNwAAWAsAAABJTVBPUlRfRlJPTXLzNwAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtSU1QT1JUX0ZST01YAQAAAC10cvQ3AAB1WAoAAABzdGQ6ZW52dmFycvU3AAB9cvY3AAAoWBcAAABQWVRIT05ET05UV1JJVEVCWVRFQ09ERXL3NwAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvY21kbGluZS5odG1sI2VudnZhci1QWVRIT05ET05UV1JJVEVCWVRFQ09ERVgBAAAALXRy+DcAAFgOAAAAUFlUSE9ORFVNUFJFRlNy+TcAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL2NtZGxpbmUuaHRtbCNlbnZ2YXItUFlUSE9ORFVNUFJFRlNYAQAAAC10cvo3AABYEgAAAFBZVEhPTlNIT1dSRUZDT1VOVHL7NwAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvY21kbGluZS5odG1sI2VudnZhci1QWVRIT05TSE9XUkVGQ09VTlRYAQAAAC10cvw3AABYEAAAAFBZVEhPTkVYRUNVVEFCTEVy/TcAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL2NtZGxpbmUuaHRtbCNlbnZ2YXItUFlUSE9ORVhFQ1VUQUJMRVgBAAAALXRy/jcAAFgMAAAAUFlUSE9OQ0FTRU9Lcv83AAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy9jbWRsaW5lLmh0bWwjZW52dmFyLVBZVEhPTkNBU0VPS1gBAAAALXRyADgAAFgUAAAAUFlUSE9OU0hPV0FMTE9DQ09VTlRyATgAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL2NtZGxpbmUuaHRtbCNlbnZ2YXItUFlUSE9OU0hPV0FMTE9DQ09VTlRYAQAAAC10cgI4AABYDQAAAFBZVEhPTklOU1BFQ1RyAzgAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL2NtZGxpbmUuaHRtbCNlbnZ2YXItUFlUSE9OSU5TUEVDVFgBAAAALXRyBDgAAFgQAAAAUFlUSE9OTk9VU0VSU0lURXIFOAAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvY21kbGluZS5odG1sI2VudnZhci1QWVRIT05OT1VTRVJTSVRFWAEAAAAtdHIGOAAAWA0AAABQWVRIT05TVEFSVFVQcgc4AAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy9jbWRsaW5lLmh0bWwjZW52dmFyLVBZVEhPTlNUQVJUVVBYAQAAAC10cgg4AABYEQAAAFBZVEhPTkhUVFBTVkVSSUZZcgk4AAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy9jbWRsaW5lLmh0bWwjZW52dmFyLVBZVEhPTkhUVFBTVkVSSUZZWAEAAAAtdHIKOAAAWA4AAABQWVRIT05IQVNIU0VFRHILOAAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvY21kbGluZS5odG1sI2VudnZhci1QWVRIT05IQVNIU0VFRFgBAAAALXRyDDgAAFgRAAAAUFlUSE9OTUFMTE9DU1RBVFNyDTgAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL2NtZGxpbmUuaHRtbCNlbnZ2YXItUFlUSE9OTUFMTE9DU1RBVFNYAQAAAC10cg44AABYDgAAAFBZVEhPTlVTRVJCQVNFcg84AAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy9jbWRsaW5lLmh0bWwjZW52dmFyLVBZVEhPTlVTRVJCQVNFWAEAAAAtdHIQOAAAWBAAAABQWVRIT05VTkJVRkZFUkVEchE4AAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy9jbWRsaW5lLmh0bWwjZW52dmFyLVBZVEhPTlVOQlVGRkVSRURYAQAAAC10chI4AABYDgAAAFBZVEhPTldBUk5JTkdTchM4AAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy9jbWRsaW5lLmh0bWwjZW52dmFyLVBZVEhPTldBUk5JTkdTWAEAAAAtdHIUOAAAWAkAAABQWVRIT05ZMktyFTgAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL2NtZGxpbmUuaHRtbCNlbnZ2YXItUFlUSE9OWTJLWAEAAAAtdHIWOAAAWAsAAABQWVRIT05ERUJVR3IXOAAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvY21kbGluZS5odG1sI2VudnZhci1QWVRIT05ERUJVR1gBAAAALXRyGDgAAFgQAAAAUFlUSE9OSU9FTkNPRElOR3IZOAAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvY21kbGluZS5odG1sI2VudnZhci1QWVRIT05JT0VOQ09ESU5HWAEAAAAtdHIaOAAAWA4AAABQWVRIT05PUFRJTUlaRXIbOAAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvY21kbGluZS5odG1sI2VudnZhci1QWVRIT05PUFRJTUlaRVgBAAAALXRyHDgAAFgRAAAAUFlUSE9OVEhSRUFEREVCVUdyHTgAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL2NtZGxpbmUuaHRtbCNlbnZ2YXItUFlUSE9OVEhSRUFEREVCVUdYAQAAAC10ch44AABYDQAAAFBZVEhPTlZFUkJPU0VyHzgAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3VzaW5nL2NtZGxpbmUuaHRtbCNlbnZ2YXItUFlUSE9OVkVSQk9TRVgBAAAALXRyIDgAAFgKAAAAUFlUSE9OSE9NRXIhOAAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvdXNpbmcvY21kbGluZS5odG1sI2VudnZhci1QWVRIT05IT01FWAEAAAAtdHIiOAAAWAoAAABQWVRIT05QQVRIciM4AAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi91c2luZy9jbWRsaW5lLmh0bWwjZW52dmFyLVBZVEhPTlBBVEhYAQAAAC10ciQ4AAB1WAkAAABzdGQ6dG9rZW5yJTgAAH1yJjgAAChYDAAAAGtleXdvcmRfaXRlbXInOAAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1rZXl3b3JkLWl0ZW1YAQAAAC10cig4AABYBAAAAG5hbWVyKTgAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLW5hbWVYAQAAAC10cio4AABYCwAAAHNob3J0X3NsaWNlcis4AAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLXNob3J0LXNsaWNlWAEAAAAtdHIsOAAAWAgAAABkZWxfc3RtdHItOAAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tZGVsLXN0bXRYAQAAAC10ci44AABYBwAAAGlmX3N0bXRyLzgAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4taWYtc3RtdFgBAAAALXRyMDgAAFgIAAAAY29tcF9mb3JyMTgAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tY29tcC1mb3JYAQAAAC10cjI4AABYGQAAAGF1Z21lbnRlZF9hc3NpZ25tZW50X3N0bXRyMzgAAChqaQEAAGpqAQAAWF0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLWF1Z21lbnRlZC1hc3NpZ25tZW50LXN0bXRYAQAAAC10cjQ4AABYFAAAAHBvc2l0aW9uYWxfYXJndW1lbnRzcjU4AAAoamkBAABqagEAAFhXAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLXBvc2l0aW9uYWwtYXJndW1lbnRzWAEAAAAtdHI2OAAAWAkAAAB0cnkyX3N0bXRyNzgAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tdHJ5Mi1zdG10WAEAAAAtdHI4OAAAWAkAAAB3aXRoX2l0ZW1yOTgAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4td2l0aC1pdGVtWAEAAAAtdHI6OAAAWA8AAABleHByZXNzaW9uX3N0bXRyOzgAAChqaQEAAGpqAQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLWV4cHJlc3Npb24tc3RtdFgBAAAALXRyPDgAAFgPAAAAc2hvcnRzdHJpbmdjaGFycj04AAAoamkBAABqagEAAFhXAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2dyYW1tYXItdG9rZW4tc2hvcnRzdHJpbmdjaGFyWAEAAAAtdHI+OAAAWA0AAABjb21wcmVoZW5zaW9ucj84AAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLWNvbXByZWhlbnNpb25YAQAAAC10ckA4AABYCQAAAHN0bXRfbGlzdHJBOAAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi1zdG10LWxpc3RYAQAAAC10ckI4AABYDgAAAGtleV9kYXR1bV9saXN0ckM4AAAoamkBAABqagEAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLWtleS1kYXR1bS1saXN0WAEAAAAtdHJEOAAAWBIAAABsaXN0X2NvbXByZWhlbnNpb25yRTgAAChqaQEAAGpqAQAAWFUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tbGlzdC1jb21wcmVoZW5zaW9uWAEAAAAtdHJGOAAAWAYAAABhX2V4cHJyRzgAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tYS1leHByWAEAAAAtdHJIOAAAWAQAAAB0eXBlckk4AAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZy5odG1sI2dyYW1tYXItdG9rZW4tdHlwZVgBAAAALXRySjgAAFgRAAAAcmVwbGFjZW1lbnRfZmllbGRySzgAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjZ3JhbW1hci10b2tlbi1yZXBsYWNlbWVudC1maWVsZFgBAAAALXRyTDgAAFgLAAAAZ2xvYmFsX3N0bXRyTTgAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLWdsb2JhbC1zdG10WAEAAAAtdHJOOAAAWAsAAABmb3JtYXRfc3BlY3JPOAAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNncmFtbWFyLXRva2VuLWZvcm1hdC1zcGVjWAEAAAAtdHJQOAAAWAQAAABjYWxsclE4AAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLWNhbGxYAQAAAC10clI4AABYFgAAAGNvbmRpdGlvbmFsX2V4cHJlc3Npb25yUzgAAChqaQEAAGpqAQAAWFkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tY29uZGl0aW9uYWwtZXhwcmVzc2lvblgBAAAALXRyVDgAAFgLAAAAaW5oZXJpdGFuY2VyVTgAAChqaQEAAGpqAQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4taW5oZXJpdGFuY2VYAQAAAC10clY4AABYCAAAAG5vdF90ZXN0clc4AAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLW5vdC10ZXN0WAEAAAAtdHJYOAAAWAkAAAB1cHBlcmNhc2VyWTgAAChqaQEAAGpqAQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjZ3JhbW1hci10b2tlbi11cHBlcmNhc2VYAQAAAC10clo4AABYCwAAAGxhbWJkYV9leHBycls4AAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLWxhbWJkYS1leHByWAEAAAAtdHJcOAAAWBAAAABkaXJlY3RpdmVfb3B0aW9ucl04AAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNncmFtbWFyLXRva2VuLWRpcmVjdGl2ZS1vcHRpb25YAQAAAC10cl44AABYCwAAAGlucHV0X2lucHV0cl84AAAoamkBAABqagEAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvdG9wbGV2ZWxfY29tcG9uZW50cy5odG1sI2dyYW1tYXItdG9rZW4taW5wdXQtaW5wdXRYAQAAAC10cmA4AABYCwAAAGxvbmdpbnRlZ2VycmE4AAAoamkBAABqagEAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2dyYW1tYXItdG9rZW4tbG9uZ2ludGVnZXJYAQAAAC10cmI4AABYCAAAAGZyYWN0aW9ucmM4AAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2dyYW1tYXItdG9rZW4tZnJhY3Rpb25YAQAAAC10cmQ4AABYBwAAAGZlYXR1cmVyZTgAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLWZlYXR1cmVYAQAAAC10cmY4AABYCAAAAGZ1bmNuYW1lcmc4AAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLWZ1bmNuYW1lWAEAAAAtdHJoOAAAWAwAAABzdHJpbmdwcmVmaXhyaTgAAChqaQEAAGpqAQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjZ3JhbW1hci10b2tlbi1zdHJpbmdwcmVmaXhYAQAAAC10cmo4AABYBwAAAHN1Ymxpc3RyazgAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tc3VibGlzdFgBAAAALXRybDgAAFgLAAAAZmxvYXRudW1iZXJybTgAAChqaQEAAGpqAQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjZ3JhbW1hci10b2tlbi1mbG9hdG51bWJlclgBAAAALXRybjgAAFgIAAAAZXhwb25lbnRybzgAAChqaQEAAGpqAQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjZ3JhbW1hci10b2tlbi1leHBvbmVudFgBAAAALXRycDgAAFgNAAAAY29tcF9vcGVyYXRvcnJxOAAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1jb21wLW9wZXJhdG9yWAEAAAAtdHJyOAAAWAkAAABlbmNsb3N1cmVyczgAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tZW5jbG9zdXJlWAEAAAAtdHJ0OAAAWAwAAABwYXJlbnRoX2Zvcm1ydTgAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tcGFyZW50aC1mb3JtWAEAAAAtdHJ2OAAAWAkAAABsaXN0X2l0ZXJydzgAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tbGlzdC1pdGVyWAEAAAAtdHJ4OAAAWAwAAABwcm9wZXJfc2xpY2VyeTgAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tcHJvcGVyLXNsaWNlWAEAAAAtdHJ6OAAAWAoAAABwb2ludGZsb2F0cns4AAAoamkBAABqagEAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2dyYW1tYXItdG9rZW4tcG9pbnRmbG9hdFgBAAAALXRyfDgAAFgFAAAAcG93ZXJyfTgAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tcG93ZXJYAQAAAC10cn44AABYBgAAAG1fZXhwcnJ/OAAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1tLWV4cHJYAQAAAC10coA4AABYBwAAAGNvbXBfaWZygTgAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tY29tcC1pZlgBAAAALXRygjgAAFgIAAAAZWxsaXBzaXNygzgAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tZWxsaXBzaXNYAQAAAC10coQ4AABYBQAAAGF1Z29wcoU4AAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi1hdWdvcFgBAAAALXRyhjgAAFgKAAAAYnJlYWtfc3RtdHKHOAAAKGppAQAAamoBAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tYnJlYWstc3RtdFgBAAAALXRyiDgAAFgKAAAAb2N0aW50ZWdlcnKJOAAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNncmFtbWFyLXRva2VuLW9jdGludGVnZXJYAQAAAC10coo4AABYCAAAAHhvcl9leHBycos4AAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLXhvci1leHByWAEAAAAtdHKMOAAAWAwAAABsaXN0X2Rpc3BsYXlyjTgAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tbGlzdC1kaXNwbGF5WAEAAAAtdHKOOAAAWAgAAABsaXN0X2ZvcnKPOAAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1saXN0LWZvclgBAAAALXRykDgAAFgIAAAAYmluZGlnaXRykTgAAChqaQEAAGpqAQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjZ3JhbW1hci10b2tlbi1iaW5kaWdpdFgBAAAALXRykjgAAFgGAAAAdGFyZ2V0cpM4AAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi10YXJnZXRYAQAAAC10cpQ4AABYCQAAAG9uX29yX29mZnKVOAAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZ3JhbW1hci10b2tlbi1vbi1vci1vZmZYAQAAAC10cpY4AABYCgAAAGZpbGVfaW5wdXRylzgAAChqaQEAAGpqAQAAWFUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS90b3BsZXZlbF9jb21wb25lbnRzLmh0bWwjZ3JhbW1hci10b2tlbi1maWxlLWlucHV0WAEAAAAtdHKYOAAAWAYAAABzdHJpZGVymTgAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tc3RyaWRlWAEAAAAtdHKaOAAAWBAAAABleHRlbmRlZF9zbGljaW5ncps4AAAoamkBAABqagEAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLWV4dGVuZGVkLXNsaWNpbmdYAQAAAC10cpw4AABYDgAAAHBhcmFtZXRlcl9saXN0cp04AAAoamkBAABqagEAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLXBhcmFtZXRlci1saXN0WAEAAAAtdHKeOAAAWBEAAABkaXJlY3RpdmVfb3B0aW9uc3KfOAAAKGppAQAAamoBAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZ3JhbW1hci10b2tlbi1kaXJlY3RpdmUtb3B0aW9uc1gBAAAALXRyoDgAAFgRAAAAc3RyaW5nX2NvbnZlcnNpb25yoTgAAChqaQEAAGpqAQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tc3RyaW5nLWNvbnZlcnNpb25YAQAAAC10cqI4AABYDwAAAGV4cHJlc3Npb25fbGlzdHKjOAAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1leHByZXNzaW9uLWxpc3RYAQAAAC10cqQ4AABYEQAAAGtleXdvcmRfYXJndW1lbnRzcqU4AAAoamkBAABqagEAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLWtleXdvcmQtYXJndW1lbnRzWAEAAAAtdHKmOAAAWAQAAABzaWducqc4AAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZy5odG1sI2dyYW1tYXItdG9rZW4tc2lnblgBAAAALXRyqDgAAFgKAAAAZGVjb3JhdG9yc3KpOAAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi1kZWNvcmF0b3JzWAEAAAAtdHKqOAAAWAwAAABkaWN0X2Rpc3BsYXlyqzgAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tZGljdC1kaXNwbGF5WAEAAAAtdHKsOAAAWA8AAABzaG9ydHN0cmluZ2l0ZW1yrTgAAChqaQEAAGpqAQAAWFcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjZ3JhbW1hci10b2tlbi1zaG9ydHN0cmluZ2l0ZW1YAQAAAC10cq44AABYDQAAAGVsZW1lbnRfaW5kZXhyrzgAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjZ3JhbW1hci10b2tlbi1lbGVtZW50LWluZGV4WAEAAAAtdHKwOAAAWAkAAABzdGF0ZW1lbnRysTgAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tc3RhdGVtZW50WAEAAAAtdHKyOAAAWAkAAAB3aXRoX3N0bXRyszgAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4td2l0aC1zdG10WAEAAAAtdHK0OAAAWAoAAABleHByZXNzaW9ucrU4AAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLWV4cHJlc3Npb25YAQAAAC10crY4AABYCgAAAGJpbmludGVnZXJytzgAAChqaQEAAGpqAQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjZ3JhbW1hci10b2tlbi1iaW5pbnRlZ2VyWAEAAAAtdHK4OAAAWAcAAABvcl9leHBycrk4AAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLW9yLWV4cHJYAQAAAC10cro4AABYDwAAAGFzc2lnbm1lbnRfc3RtdHK7OAAAKGppAQAAamoBAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tYXNzaWdubWVudC1zdG10WAEAAAAtdHK8OAAAWA4AAABsb25nc3RyaW5nY2hhcnK9OAAAKGppAQAAamoBAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNncmFtbWFyLXRva2VuLWxvbmdzdHJpbmdjaGFyWAEAAAAtdHK+OAAAWAcAAABsaXN0X2lmcr84AAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLWxpc3QtaWZYAQAAAC10csA4AABYCQAAAGRpcmVjdGl2ZXLBOAAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZ3JhbW1hci10b2tlbi1kaXJlY3RpdmVYAQAAAC10csI4AABYCQAAAGV4ZWNfc3RtdHLDOAAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tZXhlYy1zdG10WAEAAAAtdHLEOAAAWAkAAAB0cnkxX3N0bXRyxTgAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tdHJ5MS1zdG10WAEAAAAtdHLGOAAAWBEAAABpbnRlcmFjdGl2ZV9pbnB1dHLHOAAAKGppAQAAamoBAABYXAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL3RvcGxldmVsX2NvbXBvbmVudHMuaHRtbCNncmFtbWFyLXRva2VuLWludGVyYWN0aXZlLWlucHV0WAEAAAAtdHLIOAAAWA4AAABzaW1wbGVfc2xpY2luZ3LJOAAAKGppAQAAamoBAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1zaW1wbGUtc2xpY2luZ1gBAAAALXRyyjgAAFgFAAAAZGlnaXRyyzgAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjZ3JhbW1hci10b2tlbi1kaWdpdFgBAAAALXRyzDgAAFgJAAAAYXVndGFyZ2V0cs04AAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi1hdWd0YXJnZXRYAQAAAC10cs44AABYCgAAAHJhaXNlX3N0bXRyzzgAAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLXJhaXNlLXN0bXRYAQAAAC10ctA4AABYDAAAAGluZGV4X3N0cmluZ3LROAAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNncmFtbWFyLXRva2VuLWluZGV4LXN0cmluZ1gBAAAALXRy0jgAAFgQAAAAZnV0dXJlX3N0YXRlbWVudHLTOAAAKGppAQAAamoBAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tZnV0dXJlLXN0YXRlbWVudFgBAAAALXRy1DgAAFgJAAAAZGVjb3JhdGVkctU4AAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLWRlY29yYXRlZFgBAAAALXRy1jgAAFgKAAAAbG9uZ3N0cmluZ3LXOAAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNncmFtbWFyLXRva2VuLWxvbmdzdHJpbmdYAQAAAC10ctg4AABYCAAAAG9jdGRpZ2l0ctk4AAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2dyYW1tYXItdG9rZW4tb2N0ZGlnaXRYAQAAAC10cto4AABYCQAAAGtleV9kYXR1bXLbOAAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1rZXktZGF0dW1YAQAAAC10ctw4AABYBwAAAGludGVnZXJy3TgAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjZ3JhbW1hci10b2tlbi1pbnRlZ2VyWAEAAAAtdHLeOAAAWAkAAABkZWNvcmF0b3Jy3zgAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tZGVjb3JhdG9yWAEAAAAtdHLgOAAAWAwAAABhdHRyaWJ1dGVyZWZy4TgAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tYXR0cmlidXRlcmVmWAEAAAAtdHLiOAAAWAkAAABwYXJhbWV0ZXJy4zgAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tcGFyYW1ldGVyWAEAAAAtdHLkOAAAWAoAAABsb25nX3NsaWNlcuU4AAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLWxvbmctc2xpY2VYAQAAAC10cuY4AABYCwAAAGFzc2VydF9zdG10cuc4AAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi1hc3NlcnQtc3RtdFgBAAAALXRy6DgAAFgEAAAAYXRvbXLpOAAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1hdG9tWAEAAAAtdHLqOAAAWAcAAABpbnRwYXJ0cus4AAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2dyYW1tYXItdG9rZW4taW50cGFydFgBAAAALXRy7DgAAFgLAAAAcmV0dXJuX3N0bXRy7TgAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLXJldHVybi1zdG10WAEAAAAtdHLuOAAAWAwAAABzdWJzY3JpcHRpb25y7zgAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tc3Vic2NyaXB0aW9uWAEAAAAtdHLwOAAAWAkAAABlc2NhcGVzZXFy8TgAAChqaQEAAGpqAQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjZ3JhbW1hci10b2tlbi1lc2NhcGVzZXFYAQAAAC10cvI4AABYBgAAAHVfZXhwcnLzOAAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi11LWV4cHJYAQAAAC10cvQ4AABYCAAAAGFyZ19uYW1lcvU4AAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZy5odG1sI2dyYW1tYXItdG9rZW4tYXJnLW5hbWVYAQAAAC10cvY4AABYDQAAAHN0cmluZ2xpdGVyYWxy9zgAAChqaQEAAGpqAQAAWFUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjZ3JhbW1hci10b2tlbi1zdHJpbmdsaXRlcmFsWAEAAAAtdHL4OAAAWA4AAABsb25nc3RyaW5naXRlbXL5OAAAKGppAQAAamoBAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNncmFtbWFyLXRva2VuLWxvbmdzdHJpbmdpdGVtWAEAAAAtdHL6OAAAWBQAAABnZW5lcmF0b3JfZXhwcmVzc2lvbnL7OAAAKGppAQAAamoBAABYVwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1nZW5lcmF0b3ItZXhwcmVzc2lvblgBAAAALXRy/DgAAFgJAAAAbGNfbGV0dGVycv04AAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvaW50cm9kdWN0aW9uLmh0bWwjZ3JhbW1hci10b2tlbi1sYy1sZXR0ZXJYAQAAAC10cv44AABYCAAAAGhleGRpZ2l0cv84AAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2dyYW1tYXItdG9rZW4taGV4ZGlnaXRYAQAAAC10cgA5AABYCgAAAGltYWdudW1iZXJyATkAAChqaQEAAGpqAQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjZ3JhbW1hci10b2tlbi1pbWFnbnVtYmVyWAEAAAAtdHICOQAAWAsAAABzaG9ydHN0cmluZ3IDOQAAKGppAQAAamoBAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNncmFtbWFyLXRva2VuLXNob3J0c3RyaW5nWAEAAAAtdHIEOQAAWAcAAABvcl90ZXN0cgU5AAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLW9yLXRlc3RYAQAAAC10cgY5AABYCgAAAHByaW50X3N0bXRyBzkAAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLXByaW50LXN0bXRYAQAAAC10cgg5AABYDgAAAG9sZF9leHByZXNzaW9ucgk5AAAoamkBAABqagEAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLW9sZC1leHByZXNzaW9uWAEAAAAtdHIKOQAAWAoAAABzaGlmdF9leHBycgs5AAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLXNoaWZ0LWV4cHJYAQAAAC10cgw5AABYBAAAAGZpbGxyDTkAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjZ3JhbW1hci10b2tlbi1maWxsWAEAAAAtdHIOOQAAWAgAAABmb3Jfc3RtdHIPOQAAKGppAQAAamoBAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi1mb3Itc3RtdFgBAAAALXRyEDkAAFgKAAAAZXZhbF9pbnB1dHIROQAAKGppAQAAamoBAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL3RvcGxldmVsX2NvbXBvbmVudHMuaHRtbCNncmFtbWFyLXRva2VuLWV2YWwtaW5wdXRYAQAAAC10chI5AABYCgAAAGZpZWxkX25hbWVyEzkAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjZ3JhbW1hci10b2tlbi1maWVsZC1uYW1lWAEAAAAtdHIUOQAAWAoAAABpZGVudGlmaWVychU5AAAoamkBAABqagEAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2dyYW1tYXItdG9rZW4taWRlbnRpZmllclgBAAAALXRyFjkAAFgKAAAAeWllbGRfYXRvbXIXOQAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi15aWVsZC1hdG9tWAEAAAAtdHIYOQAAWAoAAABjb21wYXJpc29uchk5AAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLWNvbXBhcmlzb25YAQAAAC10cho5AABYEwAAAG9sZF9leHByZXNzaW9uX2xpc3RyGzkAAChqaQEAAGpqAQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tb2xkLWV4cHJlc3Npb24tbGlzdFgBAAAALXRyHDkAAFgLAAAAbG93ZXJfYm91bmRyHTkAAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tbG93ZXItYm91bmRYAQAAAC10ch45AABYBQAAAHdpZHRoch85AAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZy5odG1sI2dyYW1tYXItdG9rZW4td2lkdGhYAQAAAC10ciA5AABYDQAAAGV4cG9uZW50ZmxvYXRyITkAAChqaQEAAGpqAQAAWFUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjZ3JhbW1hci10b2tlbi1leHBvbmVudGZsb2F0WAEAAAAtdHIiOQAAWAoAAABoZXhpbnRlZ2VyciM5AAAoamkBAABqagEAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2dyYW1tYXItdG9rZW4taGV4aW50ZWdlclgBAAAALXRyJDkAAFgGAAAAbW9kdWxlciU5AAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi1tb2R1bGVYAQAAAC10ciY5AABYEgAAAGRpY3RfY29tcHJlaGVuc2lvbnInOQAAKGppAQAAamoBAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1kaWN0LWNvbXByZWhlbnNpb25YAQAAAC10cig5AABYCwAAAHVwcGVyX2JvdW5kcik5AAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLXVwcGVyLWJvdW5kWAEAAAAtdHIqOQAAWAgAAABhbmRfZXhwcnIrOQAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1hbmQtZXhwclgBAAAALXRyLDkAAFgNAAAAYXJndW1lbnRfbGlzdHItOQAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1hcmd1bWVudC1saXN0WAEAAAAtdHIuOQAAWA8AAABvbGRfbGFtYmRhX2V4cHJyLzkAAChqaQEAAGpqAQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tb2xkLWxhbWJkYS1leHByWAEAAAAtdHIwOQAAWAUAAABhbGlnbnIxOQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNncmFtbWFyLXRva2VuLWFsaWduWAEAAAAtdHIyOQAAWAoAAABjb252ZXJzaW9ucjM5AAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZy5odG1sI2dyYW1tYXItdG9rZW4tY29udmVyc2lvblgBAAAALXRyNDkAAFgLAAAAZG90dGVkX25hbWVyNTkAAChqaQEAAGpqAQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tZG90dGVkLW5hbWVYAQAAAC10cjY5AABYDAAAAG5vbnplcm9kaWdpdHI3OQAAKGppAQAAamoBAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNncmFtbWFyLXRva2VuLW5vbnplcm9kaWdpdFgBAAAALXRyODkAAFgJAAAAcHJlY2lzaW9ucjk5AAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZy5odG1sI2dyYW1tYXItdG9rZW4tcHJlY2lzaW9uWAEAAAAtdHI6OQAAWAgAAABjbGFzc2RlZnI7OQAAKGppAQAAamoBAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi1jbGFzc2RlZlgBAAAALXRyPDkAAFgKAAAAc2xpY2VfaXRlbXI9OQAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1zbGljZS1pdGVtWAEAAAAtdHI+OQAAWAsAAABpbXBvcnRfc3RtdHI/OQAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4taW1wb3J0LXN0bXRYAQAAAC10ckA5AABYCQAAAGNsYXNzbmFtZXJBOQAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi1jbGFzc25hbWVYAQAAAC10ckI5AABYCgAAAHlpZWxkX3N0bXRyQzkAAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLXlpZWxkLXN0bXRYAQAAAC10ckQ5AABYCwAAAHNpbXBsZV9zdG10ckU5AAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi1zaW1wbGUtc3RtdFgBAAAALXRyRjkAAFgLAAAAdGFyZ2V0X2xpc3RyRzkAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLXRhcmdldC1saXN0WAEAAAAtdHJIOQAAWA4AAABhdHRyaWJ1dGVfbmFtZXJJOQAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNncmFtbWFyLXRva2VuLWF0dHJpYnV0ZS1uYW1lWAEAAAAtdHJKOQAAWAkAAABjb21wX2l0ZXJySzkAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tY29tcC1pdGVyWAEAAAAtdHJMOQAAWAwAAABkZWZwYXJhbWV0ZXJyTTkAAChqaQEAAGpqAQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tZGVmcGFyYW1ldGVyWAEAAAAtdHJOOQAAWAcAAABsaXRlcmFsck85AAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLWxpdGVyYWxYAQAAAC10clA5AABYCgAAAHNsaWNlX2xpc3RyUTkAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tc2xpY2UtbGlzdFgBAAAALXRyUjkAAFgHAAAAcHJpbWFyeXJTOQAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1wcmltYXJ5WAEAAAAtdHJUOQAAWA8AAAByZWxhdGl2ZV9tb2R1bGVyVTkAAChqaQEAAGpqAQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLXJlbGF0aXZlLW1vZHVsZVgBAAAALXRyVjkAAFgHAAAAc2xpY2luZ3JXOQAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1zbGljaW5nWAEAAAAtdHJYOQAAWA0AAABjb21wb3VuZF9zdG10clk5AAAoamkBAABqagEAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLWNvbXBvdW5kLXN0bXRYAQAAAC10clo5AABYCAAAAHRyeV9zdG10cls5AAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLXRyeS1zdG10WAEAAAAtdHJcOQAAWAoAAAB3aGlsZV9zdG10cl05AAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLXdoaWxlLXN0bXRYAQAAAC10cl45AABYCQAAAGxvd2VyY2FzZXJfOQAAKGppAQAAamoBAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNncmFtbWFyLXRva2VuLWxvd2VyY2FzZVgBAAAALXRyYDkAAFgNAAAAY29udGludWVfc3RtdHJhOQAAKGppAQAAamoBAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tY29udGludWUtc3RtdFgBAAAALXRyYjkAAFgQAAAAeWllbGRfZXhwcmVzc2lvbnJjOQAAKGppAQAAamoBAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi15aWVsZC1leHByZXNzaW9uWAEAAAAtdHJkOQAAWAcAAABmdW5jZGVmcmU5AAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLWZ1bmNkZWZYAQAAAC10cmY5AABYCQAAAHBhc3Nfc3RtdHJnOQAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tcGFzcy1zdG10WAEAAAAtdHJoOQAAWAgAAABhbmRfdGVzdHJpOQAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1hbmQtdGVzdFgBAAAALXRyajkAAFgOAAAAZGVjaW1hbGludGVnZXJyazkAAChqaQEAAGpqAQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjZ3JhbW1hci10b2tlbi1kZWNpbWFsaW50ZWdlclgBAAAALXRybDkAAFgLAAAAc2V0X2Rpc3BsYXlybTkAAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tc2V0LWRpc3BsYXlYAQAAAC10cm45AABYBgAAAGxldHRlcnJvOQAAKGppAQAAamoBAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNncmFtbWFyLXRva2VuLWxldHRlclgBAAAALXRycDkAAFgVAAAAZGlyZWN0aXZlX29wdGlvbl9uYW1lcnE5AAAoamkBAABqagEAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNncmFtbWFyLXRva2VuLWRpcmVjdGl2ZS1vcHRpb24tbmFtZVgBAAAALXRycjkAAFgFAAAAc3VpdGVyczkAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tc3VpdGVYAQAAAC10cnQ5AAB1WAkAAABweTptZXRob2R9cnU5AAAoWBEAAABmbC5mb3JtLmFkZF9jbG9ja3J2OQAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbC5odG1sI2ZsLmZvcm0uYWRkX2Nsb2NrWAEAAAAtdHJ3OQAAWBEAAABjbWQuQ21kLmVtcHR5bGluZXJ4OQAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jbWQuaHRtbCNjbWQuQ21kLmVtcHR5bGluZVgBAAAALXRyeTkAAFggAAAAdXJsbGliMi5CYXNlSGFuZGxlci5kZWZhdWx0X29wZW5yejkAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuQmFzZUhhbmRsZXIuZGVmYXVsdF9vcGVuWAEAAAAtdHJ7OQAAWBAAAABjaHVuay5DaHVuay5yZWFkcnw5AAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NodW5rLmh0bWwjY2h1bmsuQ2h1bmsucmVhZFgBAAAALXRyfTkAAFgbAAAAdGhyZWFkaW5nLkNvbmRpdGlvbi5yZWxlYXNlcn45AAAoamkBAABqagEAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5Db25kaXRpb24ucmVsZWFzZVgBAAAALXRyfzkAAFgJAAAAc3RyLmxvd2VycoA5AAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLmxvd2VyWAEAAAAtdHKBOQAAWBgAAABsb2dnaW5nLkxvZ2dlci5hZGRGaWx0ZXJygjkAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuTG9nZ2VyLmFkZEZpbHRlclgBAAAALXRygzkAAFgaAAAAZGVjaW1hbC5EZWNpbWFsLmZyb21fZmxvYXRyhDkAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5mcm9tX2Zsb2F0WAEAAAAtdHKFOQAAWA0AAABmcm96ZW5zZXQuYWRkcoY5AAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZnJvemVuc2V0LmFkZFgBAAAALXRyhzkAAFglAAAAdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0UmVnZXhwTWF0Y2hlc3KIOQAAKGppAQAAamoBAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydFJlZ2V4cE1hdGNoZXNYAQAAAC10cok5AABYCQAAAHN0ci5zcGxpdHKKOQAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0ci5zcGxpdFgBAAAALXRyizkAAFgTAAAAcmUuUmVnZXhPYmplY3Quc3VibnKMOQAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sI3JlLlJlZ2V4T2JqZWN0LnN1Ym5YAQAAAC10co05AABYDgAAAG9iamVjdC5fX2dldF9fco45AAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fZ2V0X19YAQAAAC10co85AABYHwAAAGVtYWlsLmdlbmVyYXRvci5HZW5lcmF0b3IuY2xvbmVykDkAAChqaQEAAGpqAQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwuZ2VuZXJhdG9yLmh0bWwjZW1haWwuZ2VuZXJhdG9yLkdlbmVyYXRvci5jbG9uZVgBAAAALXRykTkAAFgOAAAAZmlsZS5yZWFkbGluZXNykjkAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNmaWxlLnJlYWRsaW5lc1gBAAAALXRykzkAAFg1AAAAZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuYWRkX3J1bnRpbWVfbGlicmFyeV9kaXJylDkAAChqaQEAAGpqAQAAWGUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5hZGRfcnVudGltZV9saWJyYXJ5X2RpclgBAAAALXRylTkAAFgNAAAAaXRlcmF0b3IubmV4dHKWOQAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2l0ZXJhdG9yLm5leHRYAQAAAC10cpc5AABYIQAAAHNzbC5TU0xDb250ZXh0LmxvYWRfZGVmYXVsdF9jZXJ0c3KYOQAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMQ29udGV4dC5sb2FkX2RlZmF1bHRfY2VydHNYAQAAAC10cpk5AABYEAAAAGZ0cGxpYi5GVFAuY2xvc2VymjkAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnRwbGliLmh0bWwjZnRwbGliLkZUUC5jbG9zZVgBAAAALXRymzkAAFgVAAAAZGF0ZXRpbWUuZGF0ZS5yZXBsYWNlcpw5AAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZS5yZXBsYWNlWAEAAAAtdHKdOQAAWCkAAABlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuZ2V0X2NvbnRlbnRfY2hhcnNldHKeOQAAKGppAQAAamoBAABYXgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5NZXNzYWdlLmdldF9jb250ZW50X2NoYXJzZXRYAQAAAC10cp85AABYIQAAAG11bHRpcHJvY2Vzc2luZy5RdWV1ZS5qb2luX3RocmVhZHKgOQAAKGppAQAAamoBAABYWAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuUXVldWUuam9pbl90aHJlYWRYAQAAAC10cqE5AABYFwAAAHBzdGF0cy5TdGF0cy5zdHJpcF9kaXJzcqI5AAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Byb2ZpbGUuaHRtbCNwc3RhdHMuU3RhdHMuc3RyaXBfZGlyc1gBAAAALXRyozkAAFgVAAAAbWFpbGJveC5NYWlsZGlyLmNsb3NlcqQ5AAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxkaXIuY2xvc2VYAQAAAC10cqU5AABYGgAAAFN0cmluZ0lPLlN0cmluZ0lPLmdldHZhbHVlcqY5AAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZ2lvLmh0bWwjU3RyaW5nSU8uU3RyaW5nSU8uZ2V0dmFsdWVYAQAAAC10cqc5AABYCgAAAHN0ci5yc3BsaXRyqDkAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNzdHIucnNwbGl0WAEAAAAtdHKpOQAAWBkAAABkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIucnVucqo5AAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIucnVuWAEAAAAtdHKrOQAAWBQAAAB0aHJlYWRpbmcuVGhyZWFkLnJ1bnKsOQAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuVGhyZWFkLnJ1blgBAAAALXRyrTkAAFgZAAAAbWltZXRvb2xzLk1lc3NhZ2UuZ2V0dHlwZXKuOQAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW1ldG9vbHMuaHRtbCNtaW1ldG9vbHMuTWVzc2FnZS5nZXR0eXBlWAEAAAAtdHKvOQAAWBIAAABpbWFwbGliLklNQVA0Lmxpc3RysDkAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQubGlzdFgBAAAALXRysTkAAFgXAAAAcHJvZmlsZS5Qcm9maWxlLnJ1bmNhbGxysjkAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHJvZmlsZS5odG1sI3Byb2ZpbGUuUHJvZmlsZS5ydW5jYWxsWAEAAAAtdHKzOQAAWBUAAAB0aHJlYWRpbmcuVGhyZWFkLmpvaW5ytDkAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLlRocmVhZC5qb2luWAEAAAAtdHK1OQAAWBsAAAByZmM4MjIuTWVzc2FnZS5nZXRyYXdoZWFkZXJytjkAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmZjODIyLmh0bWwjcmZjODIyLk1lc3NhZ2UuZ2V0cmF3aGVhZGVyWAEAAAAtdHK3OQAAWBcAAAB0YXJmaWxlLlRhckluZm8uZnJvbWJ1ZnK4OQAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJJbmZvLmZyb21idWZYAQAAAC10crk5AABYEwAAAG1haWxib3guTWFpbGJveC5nZXRyujkAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGJveC5nZXRYAQAAAC10crs5AABYFQAAAGFpZmMuYWlmYy5nZXRjb21wbmFtZXK8OQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9haWZjLmh0bWwjYWlmYy5haWZjLmdldGNvbXBuYW1lWAEAAAAtdHK9OQAAWBIAAAByZXhlYy5SRXhlYy5zX2V2YWxyvjkAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmV4ZWMuaHRtbCNyZXhlYy5SRXhlYy5zX2V2YWxYAQAAAC10cr85AABYGQAAAG1obGliLkZvbGRlci5saXN0bWVzc2FnZXNywDkAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWhsaWIuaHRtbCNtaGxpYi5Gb2xkZXIubGlzdG1lc3NhZ2VzWAEAAAAtdHLBOQAAWCQAAABtdWx0aXByb2Nlc3NpbmcucG9vbC5Bc3luY1Jlc3VsdC5nZXRywjkAAChqaQEAAGpqAQAAWFsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLnBvb2wuQXN5bmNSZXN1bHQuZ2V0WAEAAAAtdHLDOQAAWCYAAABGcmFtZVdvcmsuU2Nyb2xsZWRXaW5kb3cuZG9fcG9zdHJlc2l6ZXLEOQAAKGppAQAAamoBAABYVwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcmFtZXdvcmsuaHRtbCNGcmFtZVdvcmsuU2Nyb2xsZWRXaW5kb3cuZG9fcG9zdHJlc2l6ZVgBAAAALXRyxTkAAFgsAAAAbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLkJhc2VQcm94eS5fZ2V0dmFsdWVyxjkAAChqaQEAAGpqAQAAWGMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLkJhc2VQcm94eS5fZ2V0dmFsdWVYAQAAAC10csc5AABYFAAAAGltYXBsaWIuSU1BUDQuc3RhdHVzcsg5AAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LnN0YXR1c1gBAAAALXRyyTkAAFgoAAAAb3NzYXVkaW9kZXYub3NzX21peGVyX2RldmljZS5yZWNjb250cm9sc3LKOQAAKGppAQAAamoBAABYWwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vc3NhdWRpb2Rldi5odG1sI29zc2F1ZGlvZGV2Lm9zc19taXhlcl9kZXZpY2UucmVjY29udHJvbHNYAQAAAC10css5AABYEwAAAGFldG9vbHMuVGFsa1RvLnNlbmRyzDkAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWV0b29scy5odG1sI2FldG9vbHMuVGFsa1RvLnNlbmRYAQAAAC10cs05AABYKwAAAHhtbC5zYXguaGFuZGxlci5Db250ZW50SGFuZGxlci5lbmRFbGVtZW50TlNyzjkAAChqaQEAAGpqAQAAWGIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLkNvbnRlbnRIYW5kbGVyLmVuZEVsZW1lbnROU1gBAAAALXRyzzkAAFgPAAAAb2JqZWN0Ll9fbG9uZ19fctA5AAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fbG9uZ19fWAEAAAAtdHLROQAAWBcAAABob3RzaG90LlByb2ZpbGUuYWRkaW5mb3LSOQAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ob3RzaG90Lmh0bWwjaG90c2hvdC5Qcm9maWxlLmFkZGluZm9YAQAAAC10ctM5AABYIAAAAGRhdGV0aW1lLnRpbWVkZWx0YS50b3RhbF9zZWNvbmRzctQ5AAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUudGltZWRlbHRhLnRvdGFsX3NlY29uZHNYAQAAAC10ctU5AABYGQAAAHNzbC5TU0xTb2NrZXQuY29tcHJlc3Npb25y1jkAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTFNvY2tldC5jb21wcmVzc2lvblgBAAAALXRy1zkAAFgpAAAAbWltZXR5cGVzLk1pbWVUeXBlcy5yZWFkX3dpbmRvd3NfcmVnaXN0cnly2DkAAChqaQEAAGpqAQAAWFoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWltZXR5cGVzLmh0bWwjbWltZXR5cGVzLk1pbWVUeXBlcy5yZWFkX3dpbmRvd3NfcmVnaXN0cnlYAQAAAC10ctk5AABYMAAAAGRpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmxpYnJhcnlfZGlyX29wdGlvbnLaOQAAKGppAQAAamoBAABYYAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmxpYnJhcnlfZGlyX29wdGlvblgBAAAALXRy2zkAAFgTAAAAZnRwbGliLkZUUC5zZXRfcGFzdnLcOQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuRlRQLnNldF9wYXN2WAEAAAAtdHLdOQAAWBoAAABiejIuQloyQ29tcHJlc3Nvci5jb21wcmVzc3LeOQAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iejIuaHRtbCNiejIuQloyQ29tcHJlc3Nvci5jb21wcmVzc1gBAAAALXRy3zkAAFgVAAAAbWFpbGJveC5NTURGLmdldF9maWxlcuA5AAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1NREYuZ2V0X2ZpbGVYAQAAAC10cuE5AABYKQAAAEZyYW1lV29yay5TY3JvbGxlZFdpbmRvdy51cGRhdGVzY3JvbGxiYXJzcuI5AAAoamkBAABqagEAAFhaAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZyYW1ld29yay5odG1sI0ZyYW1lV29yay5TY3JvbGxlZFdpbmRvdy51cGRhdGVzY3JvbGxiYXJzWAEAAAAtdHLjOQAAWCkAAAB4bWwuc2F4LnhtbHJlYWRlci5JbnB1dFNvdXJjZS5nZXRTeXN0ZW1JZHLkOQAAKGppAQAAamoBAABYXwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLklucHV0U291cmNlLmdldFN5c3RlbUlkWAEAAAAtdHLlOQAAWBEAAABwYXJzZXIuU1QudG90dXBsZXLmOQAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wYXJzZXIuaHRtbCNwYXJzZXIuU1QudG90dXBsZVgBAAAALXRy5zkAAFg6AAAAQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5sb2dfZGF0ZV90aW1lX3N0cmluZ3LoOQAAKGppAQAAamoBAABYcAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXNlaHR0cHNlcnZlci5odG1sI0Jhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIubG9nX2RhdGVfdGltZV9zdHJpbmdYAQAAAC10cuk5AABYFgAAAHNvY2tldC5zb2NrZXQuc2h1dGRvd25y6jkAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LnNvY2tldC5zaHV0ZG93blgBAAAALXRy6zkAAFglAAAAbXNpbGliLlN1bW1hcnlJbmZvcm1hdGlvbi5TZXRQcm9wZXJ0eXLsOQAAKGppAQAAamoBAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuU3VtbWFyeUluZm9ybWF0aW9uLlNldFByb3BlcnR5WAEAAAAtdHLtOQAAWBgAAABpby5CdWZmZXJlZElPQmFzZS5kZXRhY2hy7jkAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW8uaHRtbCNpby5CdWZmZXJlZElPQmFzZS5kZXRhY2hYAQAAAC10cu85AABYFQAAAGN1cnNlcy53aW5kb3cuaW1tZWRva3LwOQAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmltbWVkb2tYAQAAAC10cvE5AABYKQAAAGxvZ2dpbmcuaGFuZGxlcnMuU29ja2V0SGFuZGxlci5tYWtlUGlja2xlcvI5AAAoamkBAABqagEAAFhhAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLlNvY2tldEhhbmRsZXIubWFrZVBpY2tsZVgBAAAALXRy8zkAAFgqAAAAd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5sb2dfZXhjZXB0aW9ucvQ5AAAoamkBAABqagEAAFhZAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLmxvZ19leGNlcHRpb25YAQAAAC10cvU5AABYIAAAAGNhbGVuZGFyLkhUTUxDYWxlbmRhci5mb3JtYXR5ZWFycvY5AAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhbGVuZGFyLmh0bWwjY2FsZW5kYXIuSFRNTENhbGVuZGFyLmZvcm1hdHllYXJYAQAAAC10cvc5AABYFAAAAHNlbGVjdC5rcXVldWUuZmlsZW5vcvg5AAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NlbGVjdC5odG1sI3NlbGVjdC5rcXVldWUuZmlsZW5vWAEAAAAtdHL5OQAAWAoAAABzdHIucnN0cmlwcvo5AAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLnJzdHJpcFgBAAAALXRy+zkAAFgdAAAAZW1haWwuY2hhcnNldC5DaGFyc2V0Ll9fc3RyX19y/DkAAChqaQEAAGpqAQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwuY2hhcnNldC5odG1sI2VtYWlsLmNoYXJzZXQuQ2hhcnNldC5fX3N0cl9fWAEAAAAtdHL9OQAAWC0AAABkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5zZXRfZXhlY3V0YWJsZXNy/jkAAChqaQEAAGpqAQAAWF0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5zZXRfZXhlY3V0YWJsZXNYAQAAAC10cv85AABYHwAAAG1haWxib3guTWFpbGRpck1lc3NhZ2Uuc2V0X2luZm9yADoAAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGRpck1lc3NhZ2Uuc2V0X2luZm9YAQAAAC10cgE6AABYFgAAAGJkYi5CZGIuZ2V0X2FsbF9icmVha3NyAjoAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYi5nZXRfYWxsX2JyZWFrc1gBAAAALXRyAzoAAFgiAAAAdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0SXRlbXNFcXVhbHIEOgAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydEl0ZW1zRXF1YWxYAQAAAC10cgU6AABYHAAAAHVuaXR0ZXN0LlRlc3RMb2FkZXIuZGlzY292ZXJyBjoAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0TG9hZGVyLmRpc2NvdmVyWAEAAAAtdHIHOgAAWC0AAABsb2dnaW5nLmhhbmRsZXJzLlN5c0xvZ0hhbmRsZXIuZW5jb2RlUHJpb3JpdHlyCDoAAChqaQEAAGpqAQAAWGUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuU3lzTG9nSGFuZGxlci5lbmNvZGVQcmlvcml0eVgBAAAALXRyCToAAFgPAAAAb2JqZWN0Ll9fcm1vZF9fcgo6AAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fcm1vZF9fWAEAAAAtdHILOgAAWDoAAABEb2NYTUxSUENTZXJ2ZXIuRG9jQ0dJWE1MUlBDUmVxdWVzdEhhbmRsZXIuc2V0X3NlcnZlcl9uYW1lcgw6AAAoamkBAABqagEAAFhxAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3htbHJwY3NlcnZlci5odG1sI0RvY1hNTFJQQ1NlcnZlci5Eb2NDR0lYTUxSUENSZXF1ZXN0SGFuZGxlci5zZXRfc2VydmVyX25hbWVYAQAAAC10cg06AABYKQAAAHhtbC5zYXgueG1scmVhZGVyLklucHV0U291cmNlLnNldFN5c3RlbUlkcg46AAAoamkBAABqagEAAFhfAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuSW5wdXRTb3VyY2Uuc2V0U3lzdGVtSWRYAQAAAC10cg86AABYGAAAAGRlY2ltYWwuRGVjaW1hbC5xdWFudGl6ZXIQOgAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLnF1YW50aXplWAEAAAAtdHIROgAAWBYAAABkYXRldGltZS5kYXRlLnN0cmZ0aW1lchI6AAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZS5zdHJmdGltZVgBAAAALXRyEzoAAFgYAAAAemlwZmlsZS5aaXBGaWxlLmluZm9saXN0chQ6AAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLlppcEZpbGUuaW5mb2xpc3RYAQAAAC10chU6AABYKQAAAHdlYWtyZWYuV2Vha1ZhbHVlRGljdGlvbmFyeS5pdGVydmFsdWVyZWZzchY6AAAoamkBAABqagEAAFhYAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dlYWtyZWYuaHRtbCN3ZWFrcmVmLldlYWtWYWx1ZURpY3Rpb25hcnkuaXRlcnZhbHVlcmVmc1gBAAAALXRyFzoAAFgsAAAAQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5oYW5kbGVyGDoAAChqaQEAAGpqAQAAWGIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmFzZWh0dHBzZXJ2ZXIuaHRtbCNCYXNlSFRUUFNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLmhhbmRsZVgBAAAALXRyGToAAFgSAAAAYXN5bmNoYXQuZmlmby5wdXNocho6AAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzeW5jaGF0Lmh0bWwjYXN5bmNoYXQuZmlmby5wdXNoWAEAAAAtdHIbOgAAWCQAAABhcmdwYXJzZS5Bcmd1bWVudFBhcnNlci5hZGRfYXJndW1lbnRyHDoAAChqaQEAAGpqAQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXJncGFyc2UuaHRtbCNhcmdwYXJzZS5Bcmd1bWVudFBhcnNlci5hZGRfYXJndW1lbnRYAQAAAC10ch06AABYHAAAAFRpeC50aXhDb21tYW5kLnRpeF9jb25maWd1cmVyHjoAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGl4Lmh0bWwjVGl4LnRpeENvbW1hbmQudGl4X2NvbmZpZ3VyZVgBAAAALXRyHzoAAFgmAAAAeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQuaXRlcnRleHRyIDoAAChqaQEAAGpqAQAAWGMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQuaXRlcnRleHRYAQAAAC10ciE6AABYIQAAAG1haWxib3guTWFpbGRpck1lc3NhZ2UuZ2V0X3N1YmRpcnIiOgAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsZGlyTWVzc2FnZS5nZXRfc3ViZGlyWAEAAAAtdHIjOgAAWBgAAABzdW5hdS5BVV9yZWFkLmdldG1hcmtlcnNyJDoAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VuYXUuaHRtbCNzdW5hdS5BVV9yZWFkLmdldG1hcmtlcnNYAQAAAC10ciU6AABYGwAAAHRocmVhZGluZy5TZW1hcGhvcmUuYWNxdWlyZXImOgAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuU2VtYXBob3JlLmFjcXVpcmVYAQAAAC10cic6AABYIQAAAG1haWxib3guTUhNZXNzYWdlLnJlbW92ZV9zZXF1ZW5jZXIoOgAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NSE1lc3NhZ2UucmVtb3ZlX3NlcXVlbmNlWAEAAAAtdHIpOgAAWCIAAABvc3NhdWRpb2Rldi5vc3NfYXVkaW9fZGV2aWNlLnJlc2V0cio6AAAoamkBAABqagEAAFhVAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zc2F1ZGlvZGV2Lmh0bWwjb3NzYXVkaW9kZXYub3NzX2F1ZGlvX2RldmljZS5yZXNldFgBAAAALXRyKzoAAFghAAAAdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0RGljdEVxdWFsciw6AAAoamkBAABqagEAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0RGljdEVxdWFsWAEAAAAtdHItOgAAWAkAAABjbGFzcy5tcm9yLjoAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNjbGFzcy5tcm9YAQAAAC10ci86AABYHQAAAFRpeC50aXhDb21tYW5kLnRpeF9maWxlZGlhbG9ncjA6AAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpeC5odG1sI1RpeC50aXhDb21tYW5kLnRpeF9maWxlZGlhbG9nWAEAAAAtdHIxOgAAWBMAAABpby5JT0Jhc2UucmVhZGxpbmVzcjI6AAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uSU9CYXNlLnJlYWRsaW5lc1gBAAAALXRyMzoAAFgdAAAARWFzeURpYWxvZ3MuUHJvZ3Jlc3NCYXIudGl0bGVyNDoAAChqaQEAAGpqAQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZWFzeWRpYWxvZ3MuaHRtbCNFYXN5RGlhbG9ncy5Qcm9ncmVzc0Jhci50aXRsZVgBAAAALXRyNToAAFgQAAAAaW8uQnl0ZXNJTy5yZWFkMXI2OgAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pby5odG1sI2lvLkJ5dGVzSU8ucmVhZDFYAQAAAC10cjc6AABYEwAAAHR0ay5TdHlsZS50aGVtZV91c2VyODoAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLlN0eWxlLnRoZW1lX3VzZVgBAAAALXRyOToAAFgOAAAAZ2VuZXJhdG9yLnNlbmRyOjoAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dlbmVyYXRvci5zZW5kWAEAAAAtdHI7OgAAWCUAAABjb2RlLkludGVyYWN0aXZlSW50ZXJwcmV0ZXIucnVuc291cmNlcjw6AAAoamkBAABqagEAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGUuaHRtbCNjb2RlLkludGVyYWN0aXZlSW50ZXJwcmV0ZXIucnVuc291cmNlWAEAAAAtdHI9OgAAWCAAAABlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuZ2V0X3BhcmFtc3I+OgAAKGppAQAAamoBAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5NZXNzYWdlLmdldF9wYXJhbXNYAQAAAC10cj86AABYHQAAAGxvZ2dpbmcuTG9nZ2VyQWRhcHRlci5wcm9jZXNzckA6AAAoamkBAABqagEAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkxvZ2dlckFkYXB0ZXIucHJvY2Vzc1gBAAAALXRyQToAAFgZAAAAd2F2ZS5XYXZlX3JlYWQuZ2V0bWFya2Vyc3JCOgAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93YXZlLmh0bWwjd2F2ZS5XYXZlX3JlYWQuZ2V0bWFya2Vyc1gBAAAALXRyQzoAAFgVAAAAdGFyZmlsZS5UYXJJbmZvLmlzZGlyckQ6AAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLlRhckluZm8uaXNkaXJYAQAAAC10ckU6AABYHgAAAE1pbWVXcml0ZXIuTWltZVdyaXRlci5uZXh0cGFydHJGOgAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW1ld3JpdGVyLmh0bWwjTWltZVdyaXRlci5NaW1lV3JpdGVyLm5leHRwYXJ0WAEAAAAtdHJHOgAAWBIAAABzbXRwbGliLlNNVFAubG9naW5ySDoAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc210cGxpYi5odG1sI3NtdHBsaWIuU01UUC5sb2dpblgBAAAALXRySToAAFgQAAAAdHRrLldpZGdldC5zdGF0ZXJKOgAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuV2lkZ2V0LnN0YXRlWAEAAAAtdHJLOgAAWCEAAAByb2JvdHBhcnNlci5Sb2JvdEZpbGVQYXJzZXIucGFyc2VyTDoAAChqaQEAAGpqAQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcm9ib3RwYXJzZXIuaHRtbCNyb2JvdHBhcnNlci5Sb2JvdEZpbGVQYXJzZXIucGFyc2VYAQAAAC10ck06AABYJAAAAFNvY2tldFNlcnZlci5CYXNlU2VydmVyLmhhbmRsZV9lcnJvcnJOOgAAKGppAQAAamoBAABYWAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXRzZXJ2ZXIuaHRtbCNTb2NrZXRTZXJ2ZXIuQmFzZVNlcnZlci5oYW5kbGVfZXJyb3JYAQAAAC10ck86AABYHgAAAHhtbC5kb20ubWluaWRvbS5Ob2RlLmNsb25lTm9kZXJQOgAAKGppAQAAamoBAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLm1pbmlkb20uaHRtbCN4bWwuZG9tLm1pbmlkb20uTm9kZS5jbG9uZU5vZGVYAQAAAC10clE6AABYFAAAAHhkcmxpYi5VbnBhY2tlci5kb25lclI6AAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3hkcmxpYi5odG1sI3hkcmxpYi5VbnBhY2tlci5kb25lWAEAAAAtdHJTOgAAWBYAAABic2RkYi5ic2RkYm9iamVjdC5zeW5jclQ6AAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JzZGRiLmh0bWwjYnNkZGIuYnNkZGJvYmplY3Quc3luY1gBAAAALXRyVToAAFgXAAAAc3FsaXRlMy5DdXJzb3IuZmV0Y2hhbGxyVjoAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuQ3Vyc29yLmZldGNoYWxsWAEAAAAtdHJXOgAAWBgAAABhc3luY29yZS5kaXNwYXRjaGVyLmJpbmRyWDoAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXN5bmNvcmUuaHRtbCNhc3luY29yZS5kaXNwYXRjaGVyLmJpbmRYAQAAAC10clk6AABYJgAAAGRpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmFubm91bmNlclo6AAAoamkBAABqagEAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuYW5ub3VuY2VYAQAAAC10cls6AABYFwAAAGJkYi5CZGIuZGlzcGF0Y2hfcmV0dXJuclw6AAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JkYi5odG1sI2JkYi5CZGIuZGlzcGF0Y2hfcmV0dXJuWAEAAAAtdHJdOgAAWCMAAABtYWlsYm94LkJhYnlsTWVzc2FnZS51cGRhdGVfdmlzaWJsZXJeOgAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5CYWJ5bE1lc3NhZ2UudXBkYXRlX3Zpc2libGVYAQAAAC10cl86AABYIQAAAG1haWxib3guQmFieWxNZXNzYWdlLnJlbW92ZV9sYWJlbHJgOgAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5CYWJ5bE1lc3NhZ2UucmVtb3ZlX2xhYmVsWAEAAAAtdHJhOgAAWBIAAAByZXhlYy5SRXhlYy5yX2V2YWxyYjoAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmV4ZWMuaHRtbCNyZXhlYy5SRXhlYy5yX2V2YWxYAQAAAC10cmM6AABYGgAAAHN1bmF1LkFVX3dyaXRlLndyaXRlZnJhbWVzcmQ6AAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUuQVVfd3JpdGUud3JpdGVmcmFtZXNYAQAAAC10cmU6AABYIAAAAHVuaXR0ZXN0LlRlc3RDYXNlLmNvdW50VGVzdENhc2VzcmY6AAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UuY291bnRUZXN0Q2FzZXNYAQAAAC10cmc6AABYNAAAAGxvZ2dpbmcuaGFuZGxlcnMuVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyLmRvUm9sbG92ZXJyaDoAAChqaQEAAGpqAQAAWGwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyLmRvUm9sbG92ZXJYAQAAAC10cmk6AABYIwAAAGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLmdldF9kZWZhdWx0cmo6AAAoamkBAABqagEAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FyZ3BhcnNlLmh0bWwjYXJncGFyc2UuQXJndW1lbnRQYXJzZXIuZ2V0X2RlZmF1bHRYAQAAAC10cms6AABYEwAAAGFpZmMuYWlmYy5zZXRwYXJhbXNybDoAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWlmYy5odG1sI2FpZmMuYWlmYy5zZXRwYXJhbXNYAQAAAC10cm06AABYDwAAAG9iamVjdC5fX3JzdWJfX3JuOgAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX3JzdWJfX1gBAAAALXRybzoAAFgNAAAAc3RyLnBhcnRpdGlvbnJwOgAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0ci5wYXJ0aXRpb25YAQAAAC10cnE6AABYHAAAAGRlY2ltYWwuQ29udGV4dC5jb3B5X2RlY2ltYWxycjoAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5jb3B5X2RlY2ltYWxYAQAAAC10cnM6AABYFAAAAGFycmF5LmFycmF5LmZyb21saXN0cnQ6AAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FycmF5Lmh0bWwjYXJyYXkuYXJyYXkuZnJvbWxpc3RYAQAAAC10cnU6AABYEAAAAG1obGliLk1ILmdldHBhdGhydjoAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWhsaWIuaHRtbCNtaGxpYi5NSC5nZXRwYXRoWAEAAAAtdHJ3OgAAWBwAAAB1cmxsaWIyLlJlcXVlc3QuZ2V0X2Z1bGxfdXJscng6AAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLlJlcXVlc3QuZ2V0X2Z1bGxfdXJsWAEAAAAtdHJ5OgAAWBcAAAB0YXJmaWxlLlRhckZpbGUuYWRkZmlsZXJ6OgAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJGaWxlLmFkZGZpbGVYAQAAAC10cns6AABYIAAAAGZvcm1hdHRlci53cml0ZXIuc2VuZF9sYWJlbF9kYXRhcnw6AAAoamkBAABqagEAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Zvcm1hdHRlci5odG1sI2Zvcm1hdHRlci53cml0ZXIuc2VuZF9sYWJlbF9kYXRhWAEAAAAtdHJ9OgAAWBkAAABkZWNpbWFsLkRlY2ltYWwuY29weV9zaWducn46AAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwuY29weV9zaWduWAEAAAAtdHJ/OgAAWCIAAAB3ZWJicm93c2VyLmNvbnRyb2xsZXIub3Blbl9uZXdfdGFicoA6AAAoamkBAABqagEAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dlYmJyb3dzZXIuaHRtbCN3ZWJicm93c2VyLmNvbnRyb2xsZXIub3Blbl9uZXdfdGFiWAEAAAAtdHKBOgAAWA4AAABvYmplY3QuX19hZGRfX3KCOgAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2FkZF9fWAEAAAAtdHKDOgAAWCcAAABsb2dnaW5nLmhhbmRsZXJzLkJ1ZmZlcmluZ0hhbmRsZXIuZmx1c2hyhDoAAChqaQEAAGpqAQAAWF8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuQnVmZmVyaW5nSGFuZGxlci5mbHVzaFgBAAAALXRyhToAAFgnAAAARnJhbWVXb3JrLlNjcm9sbGVkV2luZG93LnNjYWxlYmFydmFsdWVzcoY6AAAoamkBAABqagEAAFhYAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZyYW1ld29yay5odG1sI0ZyYW1lV29yay5TY3JvbGxlZFdpbmRvdy5zY2FsZWJhcnZhbHVlc1gBAAAALXRyhzoAAFgkAAAAeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQuZXh0ZW5kcog6AAAoamkBAABqagEAAFhhAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50LmV4dGVuZFgBAAAALXRyiToAAFgSAAAAYXJyYXkuYXJyYXkudG9maWxlcoo6AAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FycmF5Lmh0bWwjYXJyYXkuYXJyYXkudG9maWxlWAEAAAAtdHKLOgAAWA8AAABpby5JT0Jhc2UuZmx1c2hyjDoAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW8uaHRtbCNpby5JT0Jhc2UuZmx1c2hYAQAAAC10co06AABYCwAAAHN0ci5yZXBsYWNlco46AAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLnJlcGxhY2VYAQAAAC10co86AABYEQAAAG9iamVjdC5fX2RlbGV0ZV9fcpA6AAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fZGVsZXRlX19YAQAAAC10cpE6AABYFwAAAGxvZ2dpbmcuTG9nZ2VyLmdldENoaWxkcpI6AAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkxvZ2dlci5nZXRDaGlsZFgBAAAALXRykzoAAFgaAAAAd2ViYnJvd3Nlci5jb250cm9sbGVyLm9wZW5ylDoAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2ViYnJvd3Nlci5odG1sI3dlYmJyb3dzZXIuY29udHJvbGxlci5vcGVuWAEAAAAtdHKVOgAAWBkAAABkZWNpbWFsLkRlY2ltYWwuY29uanVnYXRlcpY6AAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwuY29uanVnYXRlWAEAAAAtdHKXOgAAWBwAAABkZWNpbWFsLkNvbnRleHQuaXNfc3Vibm9ybWFscpg6AAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQuaXNfc3Vibm9ybWFsWAEAAAAtdHKZOgAAWCoAAABtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuU3luY01hbmFnZXIuVmFsdWVymjoAAChqaQEAAGpqAQAAWGEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLlN5bmNNYW5hZ2VyLlZhbHVlWAEAAAAtdHKbOgAAWBMAAABpbWFwbGliLklNQVA0LmNoZWNrcpw6AAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LmNoZWNrWAEAAAAtdHKdOgAAWBYAAAB0aHJlYWRpbmcuTG9jay5yZWxlYXNlcp46AAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5Mb2NrLnJlbGVhc2VYAQAAAC10cp86AABYGgAAAGN1cnNlcy5wYW5lbC5QYW5lbC51c2VycHRycqA6AAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5wYW5lbC5odG1sI2N1cnNlcy5wYW5lbC5QYW5lbC51c2VycHRyWAEAAAAtdHKhOgAAWCAAAABvc3NhdWRpb2Rldi5vc3NfbWl4ZXJfZGV2aWNlLmdldHKiOgAAKGppAQAAamoBAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vc3NhdWRpb2Rldi5odG1sI29zc2F1ZGlvZGV2Lm9zc19taXhlcl9kZXZpY2UuZ2V0WAEAAAAtdHKjOgAAWBUAAABjdXJzZXMud2luZG93LmFkZG5zdHJypDoAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5hZGRuc3RyWAEAAAAtdHKlOgAAWBUAAABiejIuQloyRmlsZS5yZWFkbGluZXNypjoAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYnoyLmh0bWwjYnoyLkJaMkZpbGUucmVhZGxpbmVzWAEAAAAtdHKnOgAAWBcAAABsb2dnaW5nLkxvZ2dlci5jcml0aWNhbHKoOgAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5Mb2dnZXIuY3JpdGljYWxYAQAAAC10cqk6AABYLgAAAG11bHRpcHJvY2Vzc2luZy5wb29sLm11bHRpcHJvY2Vzc2luZy5Qb29sLmltYXByqjoAAChqaQEAAGpqAQAAWGUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLnBvb2wubXVsdGlwcm9jZXNzaW5nLlBvb2wuaW1hcFgBAAAALXRyqzoAAFgsAAAAeG1sLnNheC5oYW5kbGVyLkNvbnRlbnRIYW5kbGVyLnNraXBwZWRFbnRpdHlyrDoAAChqaQEAAGpqAQAAWGMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLkNvbnRlbnRIYW5kbGVyLnNraXBwZWRFbnRpdHlYAQAAAC10cq06AABYFgAAAGZsLmZvcm0uYWRkX3Bvc2l0aW9uZXJyrjoAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmwuaHRtbCNmbC5mb3JtLmFkZF9wb3NpdGlvbmVyWAEAAAAtdHKvOgAAWBsAAABsb2dnaW5nLlN0cmVhbUhhbmRsZXIuZmx1c2hysDoAAChqaQEAAGpqAQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuU3RyZWFtSGFuZGxlci5mbHVzaFgBAAAALXRysToAAFgeAAAAc2dtbGxpYi5TR01MUGFyc2VyLmhhbmRsZV9kZWNscrI6AAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NnbWxsaWIuaHRtbCNzZ21sbGliLlNHTUxQYXJzZXIuaGFuZGxlX2RlY2xYAQAAAC10crM6AABYHQAAAHN5bXRhYmxlLlN5bWJvbFRhYmxlLmhhc19leGVjcrQ6AAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5bXRhYmxlLmh0bWwjc3ltdGFibGUuU3ltYm9sVGFibGUuaGFzX2V4ZWNYAQAAAC10crU6AABYEgAAAGRiaGFzaC5kYmhhc2guc3luY3K2OgAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYmhhc2guaHRtbCNkYmhhc2guZGJoYXNoLnN5bmNYAQAAAC10crc6AABYGQAAAG1obGliLkZvbGRlci5wdXRzZXF1ZW5jZXNyuDoAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWhsaWIuaHRtbCNtaGxpYi5Gb2xkZXIucHV0c2VxdWVuY2VzWAEAAAAtdHK5OgAAWCYAAABIVE1MUGFyc2VyLkhUTUxQYXJzZXIuaGFuZGxlX2VudGl0eXJlZnK6OgAAKGppAQAAamoBAABYWAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odG1scGFyc2VyLmh0bWwjSFRNTFBhcnNlci5IVE1MUGFyc2VyLmhhbmRsZV9lbnRpdHlyZWZYAQAAAC10crs6AABYFwAAAGNsYXNzLl9faW5zdGFuY2VjaGVja19fcrw6AAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjY2xhc3MuX19pbnN0YW5jZWNoZWNrX19YAQAAAC10cr06AABYGwAAAGpzb24uSlNPTkVuY29kZXIuaXRlcmVuY29kZXK+OgAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9qc29uLmh0bWwjanNvbi5KU09ORW5jb2Rlci5pdGVyZW5jb2RlWAEAAAAtdHK/OgAAWBsAAAB3YXZlLldhdmVfcmVhZC5nZXRmcmFtZXJhdGVywDoAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2F2ZS5odG1sI3dhdmUuV2F2ZV9yZWFkLmdldGZyYW1lcmF0ZVgBAAAALXRywToAAFgWAAAAY3Vyc2VzLndpbmRvdy5zdGFuZGVuZHLCOgAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LnN0YW5kZW5kWAEAAAAtdHLDOgAAWCAAAABvc3NhdWRpb2Rldi5vc3NfbWl4ZXJfZGV2aWNlLnNldHLEOgAAKGppAQAAamoBAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vc3NhdWRpb2Rldi5odG1sI29zc2F1ZGlvZGV2Lm9zc19taXhlcl9kZXZpY2Uuc2V0WAEAAAAtdHLFOgAAWBsAAAB6aXBmaWxlLlppcEZpbGUuc2V0cGFzc3dvcmRyxjoAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGZpbGUuWmlwRmlsZS5zZXRwYXNzd29yZFgBAAAALXRyxzoAAFgcAAAAbXVsdGlwcm9jZXNzaW5nLkxvY2suYWNxdWlyZXLIOgAAKGppAQAAamoBAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuTG9jay5hY3F1aXJlWAEAAAAtdHLJOgAAWCMAAABjb2RlLkludGVyYWN0aXZlQ29uc29sZS5yZXNldGJ1ZmZlcnLKOgAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlLmh0bWwjY29kZS5JbnRlcmFjdGl2ZUNvbnNvbGUucmVzZXRidWZmZXJYAQAAAC10css6AABYDwAAAGRpY3Quc2V0ZGVmYXVsdHLMOgAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2RpY3Quc2V0ZGVmYXVsdFgBAAAALXRyzToAAFgYAAAAc3ltdGFibGUuU3ltYm9sLmdldF9uYW1lcs46AAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5bXRhYmxlLmh0bWwjc3ltdGFibGUuU3ltYm9sLmdldF9uYW1lWAEAAAAtdHLPOgAAWCYAAAB4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudFRyZWUuaXRlcnLQOgAAKGppAQAAamoBAABYYwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudFRyZWUuaXRlclgBAAAALXRy0ToAAFgrAAAARnJhbWVXb3JrLlNjcm9sbGVkV2luZG93LmdldHNjcm9sbGJhcnZhbHVlc3LSOgAAKGppAQAAamoBAABYXAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcmFtZXdvcmsuaHRtbCNGcmFtZVdvcmsuU2Nyb2xsZWRXaW5kb3cuZ2V0c2Nyb2xsYmFydmFsdWVzWAEAAAAtdHLTOgAAWAkAAABzdHIuY291bnRy1DoAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNzdHIuY291bnRYAQAAAC10ctU6AABYEgAAAHNtdHBsaWIuU01UUC5kb2NtZHLWOgAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zbXRwbGliLmh0bWwjc210cGxpYi5TTVRQLmRvY21kWAEAAAAtdHLXOgAAWBoAAABGcmFtZVdvcmsuV2luZG93LmRvX3VwZGF0ZXLYOgAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcmFtZXdvcmsuaHRtbCNGcmFtZVdvcmsuV2luZG93LmRvX3VwZGF0ZVgBAAAALXRy2ToAAFgVAAAAZGVjaW1hbC5EZWNpbWFsLnJhZGl4cto6AAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwucmFkaXhYAQAAAC10cts6AABYGQAAAGNnaS5GaWVsZFN0b3JhZ2UuZ2V0Zmlyc3Ry3DoAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2dpLmh0bWwjY2dpLkZpZWxkU3RvcmFnZS5nZXRmaXJzdFgBAAAALXRy3ToAAFglAAAAbG9nZ2luZy5oYW5kbGVycy5EYXRhZ3JhbUhhbmRsZXIuc2VuZHLeOgAAKGppAQAAamoBAABYXQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5EYXRhZ3JhbUhhbmRsZXIuc2VuZFgBAAAALXRy3zoAAFgZAAAAY3Vyc2VzLnBhbmVsLlBhbmVsLndpbmRvd3LgOgAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMucGFuZWwuaHRtbCNjdXJzZXMucGFuZWwuUGFuZWwud2luZG93WAEAAAAtdHLhOgAAWCIAAAB4bWwuZG9tLkRvY3VtZW50LmNyZWF0ZUF0dHJpYnV0ZU5TcuI6AAAoamkBAABqagEAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkRvY3VtZW50LmNyZWF0ZUF0dHJpYnV0ZU5TWAEAAAAtdHLjOgAAWBMAAABjb2RlY3MuQ29kZWMuZGVjb2RlcuQ6AAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5Db2RlYy5kZWNvZGVYAQAAAC10cuU6AABYDwAAAENvbm5lY3Rpb24uc2VuZHLmOgAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNDb25uZWN0aW9uLnNlbmRYAQAAAC10cuc6AABYFgAAAGZyb3plbnNldC5pbnRlcnNlY3Rpb25y6DoAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNmcm96ZW5zZXQuaW50ZXJzZWN0aW9uWAEAAAAtdHLpOgAAWBsAAABwcHJpbnQuUHJldHR5UHJpbnRlci5wcHJpbnRy6joAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHByaW50Lmh0bWwjcHByaW50LlByZXR0eVByaW50ZXIucHByaW50WAEAAAAtdHLrOgAAWCIAAABNaW1lV3JpdGVyLk1pbWVXcml0ZXIuZmx1c2hoZWFkZXJzcuw6AAAoamkBAABqagEAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbWV3cml0ZXIuaHRtbCNNaW1lV3JpdGVyLk1pbWVXcml0ZXIuZmx1c2hoZWFkZXJzWAEAAAAtdHLtOgAAWBsAAABkZWNpbWFsLkRlY2ltYWwuY29weV9uZWdhdGVy7joAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5jb3B5X25lZ2F0ZVgBAAAALXRy7zoAAFgkAAAAdW5pdHRlc3QuVGVzdExvYWRlci5nZXRUZXN0Q2FzZU5hbWVzcvA6AAAoamkBAABqagEAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdExvYWRlci5nZXRUZXN0Q2FzZU5hbWVzWAEAAAAtdHLxOgAAWBcAAABjc3YuY3N2d3JpdGVyLndyaXRlcm93c3LyOgAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jc3YuaHRtbCNjc3YuY3N2d3JpdGVyLndyaXRlcm93c1gBAAAALXRy8zoAAFgRAAAAQ29va2llLk1vcnNlbC5zZXRy9DoAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llLmh0bWwjQ29va2llLk1vcnNlbC5zZXRYAQAAAC10cvU6AABYHQAAAGZyb3plbnNldC5pbnRlcnNlY3Rpb25fdXBkYXRlcvY6AAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZnJvemVuc2V0LmludGVyc2VjdGlvbl91cGRhdGVYAQAAAC10cvc6AABYJQAAAHhtbC5zYXgueG1scmVhZGVyLkF0dHJpYnV0ZXMuZ2V0TmFtZXNy+DoAAChqaQEAAGpqAQAAWFsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCN4bWwuc2F4LnhtbHJlYWRlci5BdHRyaWJ1dGVzLmdldE5hbWVzWAEAAAAtdHL5OgAAWA4AAABmdHBsaWIuRlRQLnJtZHL6OgAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuRlRQLnJtZFgBAAAALXRy+zoAAFg2AAAAbXVsdGlwcm9jZXNzaW5nLm11bHRpcHJvY2Vzc2luZy5xdWV1ZXMuU2ltcGxlUXVldWUucHV0cvw6AAAoamkBAABqagEAAFhtAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5tdWx0aXByb2Nlc3NpbmcucXVldWVzLlNpbXBsZVF1ZXVlLnB1dFgBAAAALXRy/ToAAFgkAAAAc3NsLlNTTFNvY2tldC5zZWxlY3RlZF9hbHBuX3Byb3RvY29scv46AAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xTb2NrZXQuc2VsZWN0ZWRfYWxwbl9wcm90b2NvbFgBAAAALXRy/zoAAFgaAAAAcmZjODIyLkFkZHJlc3NMaXN0Ll9fYWRkX19yADsAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmZjODIyLmh0bWwjcmZjODIyLkFkZHJlc3NMaXN0Ll9fYWRkX19YAQAAAC10cgE7AABYGAAAAGRhdGV0aW1lLmRhdGV0aW1lLnRpbWV0enICOwAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGV0aW1lLnRpbWV0elgBAAAALXRyAzsAAFgRAAAAUXVldWUuUXVldWUucXNpemVyBDsAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcXVldWUuaHRtbCNRdWV1ZS5RdWV1ZS5xc2l6ZVgBAAAALXRyBTsAAFggAAAAd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5ydW5yBjsAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd3NnaXJlZi5odG1sI3dzZ2lyZWYuaGFuZGxlcnMuQmFzZUhhbmRsZXIucnVuWAEAAAAtdHIHOwAAWC0AAABjb29raWVsaWIuRGVmYXVsdENvb2tpZVBvbGljeS5ibG9ja2VkX2RvbWFpbnNyCDsAAChqaQEAAGpqAQAAWF4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llbGliLmh0bWwjY29va2llbGliLkRlZmF1bHRDb29raWVQb2xpY3kuYmxvY2tlZF9kb21haW5zWAEAAAAtdHIJOwAAWAoAAABzdHIuZGVjb2Rlcgo7AAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLmRlY29kZVgBAAAALXRyCzsAAFgeAAAAdW5pdHRlc3QuVGVzdFJlc3VsdC5hZGRGYWlsdXJlcgw7AAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdFJlc3VsdC5hZGRGYWlsdXJlWAEAAAAtdHINOwAAWBUAAAB6aXBmaWxlLlppcEZpbGUud3JpdGVyDjsAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGZpbGUuWmlwRmlsZS53cml0ZVgBAAAALXRyDzsAAFgUAAAAcmV4ZWMuUkV4ZWMuc19pbXBvcnRyEDsAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmV4ZWMuaHRtbCNyZXhlYy5SRXhlYy5zX2ltcG9ydFgBAAAALXRyETsAAFgZAAAAemlwZmlsZS5QeVppcEZpbGUud3JpdGVweXISOwAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5QeVppcEZpbGUud3JpdGVweVgBAAAALXRyEzsAAFgZAAAAZGVjaW1hbC5Db250ZXh0LmlzX25vcm1hbHIUOwAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmlzX25vcm1hbFgBAAAALXRyFTsAAFgqAAAAeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkNvbW1lbnRIYW5kbGVychY7AAAoamkBAABqagEAAFhZAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuQ29tbWVudEhhbmRsZXJYAQAAAC10chc7AABYGgAAAGFzeW5jb3JlLmRpc3BhdGNoZXIuYWNjZXB0chg7AAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzeW5jb3JlLmh0bWwjYXN5bmNvcmUuZGlzcGF0Y2hlci5hY2NlcHRYAQAAAC10chk7AABYLQAAAHhtbC5zYXguaGFuZGxlci5Db250ZW50SGFuZGxlci5zdGFydEVsZW1lbnROU3IaOwAAKGppAQAAamoBAABYZAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LmhhbmRsZXIuaHRtbCN4bWwuc2F4LmhhbmRsZXIuQ29udGVudEhhbmRsZXIuc3RhcnRFbGVtZW50TlNYAQAAAC10chs7AABYLQAAAHhtbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5FbmRFbGVtZW50SGFuZGxlcnIcOwAAKGppAQAAamoBAABYXAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkVuZEVsZW1lbnRIYW5kbGVyWAEAAAAtdHIdOwAAWA8AAABvYmplY3QuX19pYW5kX19yHjsAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19pYW5kX19YAQAAAC10ch87AABYIQAAAGFzeW5jb3JlLmRpc3BhdGNoZXIuaGFuZGxlX2FjY2VwdHIgOwAAKGppAQAAamoBAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hc3luY29yZS5odG1sI2FzeW5jb3JlLmRpc3BhdGNoZXIuaGFuZGxlX2FjY2VwdFgBAAAALXRyITsAAFgoAAAAZGlzdHV0aWxzLmNtZC5Db21tYW5kLmluaXRpYWxpemVfb3B0aW9uc3IiOwAAKGppAQAAamoBAABYWAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jbWQuQ29tbWFuZC5pbml0aWFsaXplX29wdGlvbnNYAQAAAC10ciM7AABYEwAAAHRocmVhZGluZy5FdmVudC5zZXRyJDsAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLkV2ZW50LnNldFgBAAAALXRyJTsAAFghAAAARnJhbWVXb3JrLkRpYWxvZ1dpbmRvdy5kb19pdGVtaGl0ciY7AAAoamkBAABqagEAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZyYW1ld29yay5odG1sI0ZyYW1lV29yay5EaWFsb2dXaW5kb3cuZG9faXRlbWhpdFgBAAAALXRyJzsAAFghAAAAZW1haWwubWVzc2FnZS5NZXNzYWdlLl9fZGVsaXRlbV9fcig7AAAoamkBAABqagEAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuX19kZWxpdGVtX19YAQAAAC10cik7AABYDwAAAGJkYi5CZGIucnVuZXZhbHIqOwAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iZGIuaHRtbCNiZGIuQmRiLnJ1bmV2YWxYAQAAAC10cis7AABYFgAAAHRocmVhZGluZy5UaHJlYWQuc3RhcnRyLDsAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLlRocmVhZC5zdGFydFgBAAAALXRyLTsAAFglAAAAbG9nZ2luZy5oYW5kbGVycy5EYXRhZ3JhbUhhbmRsZXIuZW1pdHIuOwAAKGppAQAAamoBAABYXQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5EYXRhZ3JhbUhhbmRsZXIuZW1pdFgBAAAALXRyLzsAAFgWAAAAY3Vyc2VzLndpbmRvdy5kZWxldGVsbnIwOwAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmRlbGV0ZWxuWAEAAAAtdHIxOwAAWBYAAABRdWV1ZS5RdWV1ZS5nZXRfbm93YWl0cjI7AAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3F1ZXVlLmh0bWwjUXVldWUuUXVldWUuZ2V0X25vd2FpdFgBAAAALXRyMzsAAFgkAAAAeG1sLnNheC5oYW5kbGVyLkVycm9ySGFuZGxlci53YXJuaW5ncjQ7AAAoamkBAABqagEAAFhbAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5odG1sI3htbC5zYXguaGFuZGxlci5FcnJvckhhbmRsZXIud2FybmluZ1gBAAAALXRyNTsAAFgkAAAARnJhbWVXb3JrLkFwcGxpY2F0aW9uLmRvX2RpYWxvZ2V2ZW50cjY7AAAoamkBAABqagEAAFhVAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZyYW1ld29yay5odG1sI0ZyYW1lV29yay5BcHBsaWNhdGlvbi5kb19kaWFsb2dldmVudFgBAAAALXRyNzsAAFgUAAAAdW5pdHRlc3QuVGVzdENhc2UuaWRyODsAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5pZFgBAAAALXRyOTsAAFgXAAAAbWhsaWIuRm9sZGVyLmdldGN1cnJlbnRyOjsAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWhsaWIuaHRtbCNtaGxpYi5Gb2xkZXIuZ2V0Y3VycmVudFgBAAAALXRyOzsAAFgcAAAAc3ltdGFibGUuU3ltYm9sLmlzX3BhcmFtZXRlcnI8OwAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeW10YWJsZS5odG1sI3N5bXRhYmxlLlN5bWJvbC5pc19wYXJhbWV0ZXJYAQAAAC10cj07AABYHwAAAGFzeW5jb3JlLmRpc3BhdGNoZXIuaGFuZGxlX2V4cHRyPjsAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXN5bmNvcmUuaHRtbCNhc3luY29yZS5kaXNwYXRjaGVyLmhhbmRsZV9leHB0WAEAAAAtdHI/OwAAWBIAAABiZGIuQmRiLnNldF9yZXR1cm5yQDsAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYi5zZXRfcmV0dXJuWAEAAAAtdHJBOwAAWBgAAABtYWlsYm94Lk1ILmdldF9zZXF1ZW5jZXNyQjsAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTUguZ2V0X3NlcXVlbmNlc1gBAAAALXRyQzsAAFgtAAAAY29va2llbGliLkRlZmF1bHRDb29raWVQb2xpY3kuYWxsb3dlZF9kb21haW5zckQ7AAAoamkBAABqagEAAFheAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5EZWZhdWx0Q29va2llUG9saWN5LmFsbG93ZWRfZG9tYWluc1gBAAAALXRyRTsAAFgQAAAAaW8uSU9CYXNlLmlzYXR0eXJGOwAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pby5odG1sI2lvLklPQmFzZS5pc2F0dHlYAQAAAC10ckc7AABYDgAAAGJkYi5CZGIucnVuY3R4ckg7AAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JkYi5odG1sI2JkYi5CZGIucnVuY3R4WAEAAAAtdHJJOwAAWCUAAAByb2JvdHBhcnNlci5Sb2JvdEZpbGVQYXJzZXIuY2FuX2ZldGNocko7AAAoamkBAABqagEAAFhYAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JvYm90cGFyc2VyLmh0bWwjcm9ib3RwYXJzZXIuUm9ib3RGaWxlUGFyc2VyLmNhbl9mZXRjaFgBAAAALXRySzsAAFgpAAAAeG1sLnNheC54bWxyZWFkZXIuWE1MUmVhZGVyLnNldERUREhhbmRsZXJyTDsAAChqaQEAAGpqAQAAWF8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCN4bWwuc2F4LnhtbHJlYWRlci5YTUxSZWFkZXIuc2V0RFRESGFuZGxlclgBAAAALXRyTTsAAFgVAAAAc2VsZWN0LmVwb2xsLnJlZ2lzdGVyck47AAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NlbGVjdC5odG1sI3NlbGVjdC5lcG9sbC5yZWdpc3RlclgBAAAALXRyTzsAAFgVAAAAZnRwbGliLkZUUF9UTFMucHJvdF9jclA7AAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z0cGxpYi5odG1sI2Z0cGxpYi5GVFBfVExTLnByb3RfY1gBAAAALXRyUTsAAFgSAAAAc29ja2V0LnNvY2tldC5zZW5kclI7AAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5zb2NrZXQuc2VuZFgBAAAALXRyUzsAAFgVAAAAY29sbGVjdGlvbnMuZGVxdWUucG9wclQ7AAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuZGVxdWUucG9wWAEAAAAtdHJVOwAAWBkAAABmdHBsaWIuRlRQLnNldF9kZWJ1Z2xldmVsclY7AAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z0cGxpYi5odG1sI2Z0cGxpYi5GVFAuc2V0X2RlYnVnbGV2ZWxYAQAAAC10clc7AABYFAAAAGFpZmMuYWlmYy5yZWFkZnJhbWVzclg7AAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FpZmMuaHRtbCNhaWZjLmFpZmMucmVhZGZyYW1lc1gBAAAALXRyWTsAAFgfAAAAbWFpbGJveC5NYWlsZGlyTWVzc2FnZS5zZXRfZGF0ZXJaOwAAKGppAQAAamoBAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsZGlyTWVzc2FnZS5zZXRfZGF0ZVgBAAAALXRyWzsAAFgiAAAAeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQua2V5c3JcOwAAKGppAQAAamoBAABYXwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC5rZXlzWAEAAAAtdHJdOwAAWDQAAAB3c2dpcmVmLnNpbXBsZV9zZXJ2ZXIuV1NHSVJlcXVlc3RIYW5kbGVyLmdldF9lbnZpcm9ucl47AAAoamkBAABqagEAAFhjAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLnNpbXBsZV9zZXJ2ZXIuV1NHSVJlcXVlc3RIYW5kbGVyLmdldF9lbnZpcm9uWAEAAAAtdHJfOwAAWCkAAABtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuU3luY01hbmFnZXIuZGljdHJgOwAAKGppAQAAamoBAABYYAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuU3luY01hbmFnZXIuZGljdFgBAAAALXRyYTsAAFgPAAAAZnRwbGliLkZUUC5zaXplcmI7AAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z0cGxpYi5odG1sI2Z0cGxpYi5GVFAuc2l6ZVgBAAAALXRyYzsAAFgTAAAAZGF0ZXRpbWUudHppbmZvLmRzdHJkOwAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLnR6aW5mby5kc3RYAQAAAC10cmU7AABYEgAAAG5udHBsaWIuTk5UUC5zbGF2ZXJmOwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ubnRwbGliLmh0bWwjbm50cGxpYi5OTlRQLnNsYXZlWAEAAAAtdHJnOwAAWC0AAAB4bWwuc2F4LmhhbmRsZXIuRFRESGFuZGxlci51bnBhcnNlZEVudGl0eURlY2xyaDsAAChqaQEAAGpqAQAAWGQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLkRUREhhbmRsZXIudW5wYXJzZWRFbnRpdHlEZWNsWAEAAAAtdHJpOwAAWBcAAAB4bWwuZG9tLk5vZGUuaXNTYW1lTm9kZXJqOwAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Ob2RlLmlzU2FtZU5vZGVYAQAAAC10cms7AABYGwAAAGRlY2ltYWwuRGVjaW1hbC5uZXh0X3Rvd2FyZHJsOwAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLm5leHRfdG93YXJkWAEAAAAtdHJtOwAAWBQAAABjdXJzZXMud2luZG93LmJvcmRlcnJuOwAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmJvcmRlclgBAAAALXRybzsAAFgUAAAAaW1hcGxpYi5JTUFQNC5kZWxldGVycDsAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQuZGVsZXRlWAEAAAAtdHJxOwAAWCMAAABhc3luY2hhdC5hc3luY19jaGF0LmRpc2NhcmRfYnVmZmVyc3JyOwAAKGppAQAAamoBAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hc3luY2hhdC5odG1sI2FzeW5jaGF0LmFzeW5jX2NoYXQuZGlzY2FyZF9idWZmZXJzWAEAAAAtdHJzOwAAWBcAAABiZGIuQnJlYWtwb2ludC5kZWxldGVNZXJ0OwAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iZGIuaHRtbCNiZGIuQnJlYWtwb2ludC5kZWxldGVNZVgBAAAALXRydTsAAFggAAAAZm9ybWF0dGVyLndyaXRlci5zZW5kX2xpbmVfYnJlYWtydjsAAChqaQEAAGpqAQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZm9ybWF0dGVyLmh0bWwjZm9ybWF0dGVyLndyaXRlci5zZW5kX2xpbmVfYnJlYWtYAQAAAC10cnc7AABYGwAAAHRlbG5ldGxpYi5UZWxuZXQucmVhZF91bnRpbHJ4OwAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZWxuZXRsaWIuaHRtbCN0ZWxuZXRsaWIuVGVsbmV0LnJlYWRfdW50aWxYAQAAAC10cnk7AABYEgAAAHJleGVjLlJFeGVjLnJfb3BlbnJ6OwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXhlYy5odG1sI3JleGVjLlJFeGVjLnJfb3BlblgBAAAALXRyezsAAFgYAAAAcG9zaXhmaWxlLnBvc2l4ZmlsZS5kdXAycnw7AAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Bvc2l4ZmlsZS5odG1sI3Bvc2l4ZmlsZS5wb3NpeGZpbGUuZHVwMlgBAAAALXRyfTsAAFghAAAAZW1haWwuY2hhcnNldC5DaGFyc2V0LmJvZHlfZW5jb2Rlcn47AAAoamkBAABqagEAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLmNoYXJzZXQuaHRtbCNlbWFpbC5jaGFyc2V0LkNoYXJzZXQuYm9keV9lbmNvZGVYAQAAAC10cn87AABYHAAAAGFiYy5BQkNNZXRhLl9fc3ViY2xhc3Nob29rX19ygDsAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWJjLmh0bWwjYWJjLkFCQ01ldGEuX19zdWJjbGFzc2hvb2tfX1gBAAAALXRygTsAAFgNAAAAZGljdC5pdGVya2V5c3KCOwAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2RpY3QuaXRlcmtleXNYAQAAAC10coM7AABYFAAAAHppcGZpbGUuWmlwRmlsZS5yZWFkcoQ7AAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLlppcEZpbGUucmVhZFgBAAAALXRyhTsAAFgZAAAAbG9nZ2luZy5GaWxlSGFuZGxlci5jbG9zZXKGOwAAKGppAQAAamoBAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5GaWxlSGFuZGxlci5jbG9zZVgBAAAALXRyhzsAAFgXAAAAbG9nZ2luZy5Mb2dnZXIuc2V0TGV2ZWxyiDsAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuTG9nZ2VyLnNldExldmVsWAEAAAAtdHKJOwAAWBUAAABjdXJzZXMud2luZG93Lm92ZXJsYXlyijsAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5vdmVybGF5WAEAAAAtdHKLOwAAWBAAAABiZGIuQmRiLnNldF9zdGVwcow7AAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JkYi5odG1sI2JkYi5CZGIuc2V0X3N0ZXBYAQAAAC10co07AABYJgAAAG9zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2Uub2J1ZmNvdW50co47AAAoamkBAABqagEAAFhZAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zc2F1ZGlvZGV2Lmh0bWwjb3NzYXVkaW9kZXYub3NzX2F1ZGlvX2RldmljZS5vYnVmY291bnRYAQAAAC10co87AABYMwAAAGxvZ2dpbmcuaGFuZGxlcnMuTlRFdmVudExvZ0hhbmRsZXIuZ2V0RXZlbnRDYXRlZ29yeXKQOwAAKGppAQAAamoBAABYawAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5OVEV2ZW50TG9nSGFuZGxlci5nZXRFdmVudENhdGVnb3J5WAEAAAAtdHKROwAAWB4AAABmb3JtYXR0ZXIud3JpdGVyLm5ld19hbGlnbm1lbnRykjsAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZm9ybWF0dGVyLmh0bWwjZm9ybWF0dGVyLndyaXRlci5uZXdfYWxpZ25tZW50WAEAAAAtdHKTOwAAWCcAAABTb2NrZXRTZXJ2ZXIuQmFzZVNlcnZlci5zZXJ2ZXJfYWN0aXZhdGVylDsAAChqaQEAAGpqAQAAWFsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0c2VydmVyLmh0bWwjU29ja2V0U2VydmVyLkJhc2VTZXJ2ZXIuc2VydmVyX2FjdGl2YXRlWAEAAAAtdHKVOwAAWBUAAABpbWFwbGliLklNQVA0LnBhcnRpYWxyljsAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQucGFydGlhbFgBAAAALXRylzsAAFgXAAAAZGVjaW1hbC5EZWNpbWFsLmNvbXBhcmVymDsAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5jb21wYXJlWAEAAAAtdHKZOwAAWCAAAABtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcy5pc19hbGl2ZXKaOwAAKGppAQAAamoBAABYVwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcy5pc19hbGl2ZVgBAAAALXRymzsAAFgKAAAAZGljdC5jbGVhcnKcOwAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2RpY3QuY2xlYXJYAQAAAC10cp07AABYGQAAAHN1bmF1LkFVX3dyaXRlLnNldG5mcmFtZXNynjsAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VuYXUuaHRtbCNzdW5hdS5BVV93cml0ZS5zZXRuZnJhbWVzWAEAAAAtdHKfOwAAWB4AAABjdXJzZXMucGFuZWwuUGFuZWwuc2V0X3VzZXJwdHJyoDsAAChqaQEAAGpqAQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLnBhbmVsLmh0bWwjY3Vyc2VzLnBhbmVsLlBhbmVsLnNldF91c2VycHRyWAEAAAAtdHKhOwAAWBwAAABkZWNpbWFsLkRlY2ltYWwuaXNfY2Fub25pY2FscqI7AAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwuaXNfY2Fub25pY2FsWAEAAAAtdHKjOwAAWBIAAABjdXJzZXMud2luZG93Lm1vdmVypDsAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5tb3ZlWAEAAAAtdHKlOwAAWB0AAABUaXgudGl4Q29tbWFuZC50aXhfb3B0aW9uX2dldHKmOwAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aXguaHRtbCNUaXgudGl4Q29tbWFuZC50aXhfb3B0aW9uX2dldFgBAAAALXRypzsAAFgcAAAAdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0TGVzc3KoOwAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydExlc3NYAQAAAC10cqk7AABYJAAAAGZvcm1hdHRlci5mb3JtYXR0ZXIuYXNzZXJ0X2xpbmVfZGF0YXKqOwAAKGppAQAAamoBAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIuZm9ybWF0dGVyLmFzc2VydF9saW5lX2RhdGFYAQAAAC10cqs7AABYFQAAAHhtbC5kb20uTm9kZUxpc3QuaXRlbXKsOwAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Ob2RlTGlzdC5pdGVtWAEAAAAtdHKtOwAAWBsAAABzeW10YWJsZS5TeW1ib2xUYWJsZS5nZXRfaWRyrjsAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3ltdGFibGUuaHRtbCNzeW10YWJsZS5TeW1ib2xUYWJsZS5nZXRfaWRYAQAAAC10cq87AABYGQAAAGh0dHBsaWIuSFRUUFJlc3BvbnNlLnJlYWRysDsAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHR0cGxpYi5odG1sI2h0dHBsaWIuSFRUUFJlc3BvbnNlLnJlYWRYAQAAAC10crE7AABYGAAAAHhkcmxpYi5QYWNrZXIuZ2V0X2J1ZmZlcnKyOwAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94ZHJsaWIuaHRtbCN4ZHJsaWIuUGFja2VyLmdldF9idWZmZXJYAQAAAC10crM7AABYFQAAAG1haWxib3guTWFpbGJveC5jbGVhcnK0OwAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsYm94LmNsZWFyWAEAAAAtdHK1OwAAWBwAAABjb2xsZWN0aW9ucy5kZXF1ZS5leHRlbmRsZWZ0crY7AAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuZGVxdWUuZXh0ZW5kbGVmdFgBAAAALXRytzsAAFgWAAAAdGFyZmlsZS5UYXJJbmZvLmlzZmlsZXK4OwAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJJbmZvLmlzZmlsZVgBAAAALXRyuTsAAFgUAAAAb2JqZWN0Ll9faWZsb29yZGl2X19yujsAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19pZmxvb3JkaXZfX1gBAAAALXRyuzsAAFgZAAAAdHVydGxlLlNoYXBlLmFkZGNvbXBvbmVudHK8OwAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuU2hhcGUuYWRkY29tcG9uZW50WAEAAAAtdHK9OwAAWBkAAABjb2RlY3MuU3RyZWFtUmVhZGVyLnJlc2V0cr47AAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5TdHJlYW1SZWFkZXIucmVzZXRYAQAAAC10cr87AABYJQAAAEhUTUxQYXJzZXIuSFRNTFBhcnNlci5oYW5kbGVfc3RhcnR0YWdywDsAAChqaQEAAGpqAQAAWFcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHRtbHBhcnNlci5odG1sI0hUTUxQYXJzZXIuSFRNTFBhcnNlci5oYW5kbGVfc3RhcnR0YWdYAQAAAC10csE7AABYCQAAAHN0ci5pbmRleHLCOwAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0ci5pbmRleFgBAAAALXRywzsAAFgVAAAAbWFpbGJveC5NSC5hZGRfZm9sZGVycsQ7AAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1ILmFkZF9mb2xkZXJYAQAAAC10csU7AABYIQAAAG9wdHBhcnNlLk9wdGlvblBhcnNlci5nZXRfdmVyc2lvbnLGOwAAKGppAQAAamoBAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLk9wdGlvblBhcnNlci5nZXRfdmVyc2lvblgBAAAALXRyxzsAAFgcAAAAc3NsLlNTTENvbnRleHQuc2Vzc2lvbl9zdGF0c3LIOwAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMQ29udGV4dC5zZXNzaW9uX3N0YXRzWAEAAAAtdHLJOwAAWBIAAABtc2lsaWIuVmlldy5Nb2RpZnlyyjsAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLlZpZXcuTW9kaWZ5WAEAAAAtdHLLOwAAWBYAAABsb2dnaW5nLkhhbmRsZXIuaGFuZGxlcsw7AAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkhhbmRsZXIuaGFuZGxlWAEAAAAtdHLNOwAAWCMAAABjb2xsZWN0aW9ucy5zb21lbmFtZWR0dXBsZS5fcmVwbGFjZXLOOwAAKGppAQAAamoBAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2xsZWN0aW9ucy5odG1sI2NvbGxlY3Rpb25zLnNvbWVuYW1lZHR1cGxlLl9yZXBsYWNlWAEAAAAtdHLPOwAAWBUAAABkZWNpbWFsLkRlY2ltYWwubG9nMTBy0DsAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5sb2cxMFgBAAAALXRy0TsAAFgRAAAAb2JqZWN0Ll9fZGl2bW9kX19y0jsAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19kaXZtb2RfX1gBAAAALXRy0zsAAFglAAAAeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLlBhcnNlRmlsZXLUOwAAKGppAQAAamoBAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLlBhcnNlRmlsZVgBAAAALXRy1TsAAFgjAAAAZW1haWwuY2hhcnNldC5DaGFyc2V0LnRvX3NwbGl0dGFibGVy1jsAAChqaQEAAGpqAQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwuY2hhcnNldC5odG1sI2VtYWlsLmNoYXJzZXQuQ2hhcnNldC50b19zcGxpdHRhYmxlWAEAAAAtdHLXOwAAWBUAAABzY2hlZC5zY2hlZHVsZXIuZW1wdHly2DsAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2NoZWQuaHRtbCNzY2hlZC5zY2hlZHVsZXIuZW1wdHlYAQAAAC10ctk7AABYFQAAAG1haWxib3guTWFpbGJveC5jbG9zZXLaOwAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsYm94LmNsb3NlWAEAAAAtdHLbOwAAWC4AAAB4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuQXR0bGlzdERlY2xIYW5kbGVyctw7AAAoamkBAABqagEAAFhdAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuQXR0bGlzdERlY2xIYW5kbGVyWAEAAAAtdHLdOwAAWBMAAABjb2RlY3MuQ29kZWMuZW5jb2Rlct47AAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5Db2RlYy5lbmNvZGVYAQAAAC10ct87AABYEwAAAGRlY2ltYWwuRGVjaW1hbC5tYXhy4DsAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5tYXhYAQAAAC10cuE7AABYLQAAAHhtbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlci5zZXRFbnRpdHlSZXNvbHZlcnLiOwAAKGppAQAAamoBAABYYwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlci5zZXRFbnRpdHlSZXNvbHZlclgBAAAALXRy4zsAAFgaAAAAc3NsLlNTTENvbnRleHQuc2V0X2NpcGhlcnNy5DsAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTENvbnRleHQuc2V0X2NpcGhlcnNYAQAAAC10cuU7AABYJgAAAFNvY2tldFNlcnZlci5CYXNlU2VydmVyLmhhbmRsZV9yZXF1ZXN0cuY7AAAoamkBAABqagEAAFhaAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI1NvY2tldFNlcnZlci5CYXNlU2VydmVyLmhhbmRsZV9yZXF1ZXN0WAEAAAAtdHLnOwAAWB8AAABlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuZ2V0X3BhcmFtcug7AAAoamkBAABqagEAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuZ2V0X3BhcmFtWAEAAAAtdHLpOwAAWBgAAABqc29uLkpTT05FbmNvZGVyLmRlZmF1bHRy6jsAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvanNvbi5odG1sI2pzb24uSlNPTkVuY29kZXIuZGVmYXVsdFgBAAAALXRy6zsAAFgTAAAAcGlja2xlLlBpY2tsZXIuZHVtcHLsOwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9waWNrbGUuaHRtbCNwaWNrbGUuUGlja2xlci5kdW1wWAEAAAAtdHLtOwAAWBgAAABjZ2kuRmllbGRTdG9yYWdlLmdldGxpc3Ry7jsAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2dpLmh0bWwjY2dpLkZpZWxkU3RvcmFnZS5nZXRsaXN0WAEAAAAtdHLvOwAAWBQAAABDb29raWUuTW9yc2VsLm91dHB1dHLwOwAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWUuaHRtbCNDb29raWUuTW9yc2VsLm91dHB1dFgBAAAALXRy8TsAAFgnAAAAdXJsbGliMi5SZXF1ZXN0LmFkZF91bnJlZGlyZWN0ZWRfaGVhZGVycvI7AAAoamkBAABqagEAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLlJlcXVlc3QuYWRkX3VucmVkaXJlY3RlZF9oZWFkZXJYAQAAAC10cvM7AABYKQAAAHhtbC5zYXgueG1scmVhZGVyLkxvY2F0b3IuZ2V0Q29sdW1uTnVtYmVycvQ7AAAoamkBAABqagEAAFhfAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuTG9jYXRvci5nZXRDb2x1bW5OdW1iZXJYAQAAAC10cvU7AABYGQAAAGJzZGRiLmJzZGRib2JqZWN0Lmhhc19rZXly9jsAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYnNkZGIuaHRtbCNic2RkYi5ic2RkYm9iamVjdC5oYXNfa2V5WAEAAAAtdHL3OwAAWCUAAABvc3NhdWRpb2Rldi5vc3NfbWl4ZXJfZGV2aWNlLmNvbnRyb2xzcvg7AAAoamkBAABqagEAAFhYAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zc2F1ZGlvZGV2Lmh0bWwjb3NzYXVkaW9kZXYub3NzX21peGVyX2RldmljZS5jb250cm9sc1gBAAAALXRy+TsAAFgWAAAAZGJoYXNoLmRiaGFzaC5wcmV2aW91c3L6OwAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYmhhc2guaHRtbCNkYmhhc2guZGJoYXNoLnByZXZpb3VzWAEAAAAtdHL7OwAAWA4AAABvYmplY3QuX19wb3dfX3L8OwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX3Bvd19fWAEAAAAtdHL9OwAAWBsAAABsb2dnaW5nLkhhbmRsZXIuaGFuZGxlRXJyb3Jy/jsAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuSGFuZGxlci5oYW5kbGVFcnJvclgBAAAALXRy/zsAAFgQAAAAZnJvemVuc2V0LnJlbW92ZXIAPAAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2Zyb3plbnNldC5yZW1vdmVYAQAAAC10cgE8AABYEgAAAG9iamVjdC5fX21pc3NpbmdfX3ICPAAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX21pc3NpbmdfX1gBAAAALXRyAzwAAFgkAAAAZW1haWwubWVzc2FnZS5NZXNzYWdlLnJlcGxhY2VfaGVhZGVycgQ8AAAoamkBAABqagEAAFhZAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2UucmVwbGFjZV9oZWFkZXJYAQAAAC10cgU8AABYLQAAAGRpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmFkZF9saWJyYXJ5X2RpcnIGPAAAKGppAQAAamoBAABYXQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmFkZF9saWJyYXJ5X2RpclgBAAAALXRyBzwAAFgfAAAAZ2V0dGV4dC5HTlVUcmFuc2xhdGlvbnMuZ2V0dGV4dHIIPAAAKGppAQAAamoBAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZXR0ZXh0Lmh0bWwjZ2V0dGV4dC5HTlVUcmFuc2xhdGlvbnMuZ2V0dGV4dFgBAAAALXRyCTwAAFgNAAAAb2JqZWN0Ll9fbHRfX3IKPAAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2x0X19YAQAAAC10cgs8AABYFAAAAGRlY2ltYWwuRGVjaW1hbC5sb2dicgw8AAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwubG9nYlgBAAAALXRyDTwAAFgOAAAAb2JqZWN0Ll9fbW9kX19yDjwAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19tb2RfX1gBAAAALXRyDzwAAFgLAAAAc3RyLmlzYWxwaGFyEDwAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNzdHIuaXNhbHBoYVgBAAAALXRyETwAAFgeAAAAc3NsLlNTTENvbnRleHQubG9hZF9jZXJ0X2NoYWluchI8AAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xDb250ZXh0LmxvYWRfY2VydF9jaGFpblgBAAAALXRyEzwAAFgWAAAAaG90c2hvdC5Qcm9maWxlLmZpbGVub3IUPAAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ob3RzaG90Lmh0bWwjaG90c2hvdC5Qcm9maWxlLmZpbGVub1gBAAAALXRyFTwAAFgWAAAAYXJyYXkuYXJyYXkuZnJvbXN0cmluZ3IWPAAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hcnJheS5odG1sI2FycmF5LmFycmF5LmZyb21zdHJpbmdYAQAAAC10chc8AABYJgAAAG11bHRpcHJvY2Vzc2luZy5wb29sLkFzeW5jUmVzdWx0LnJlYWR5chg8AAAoamkBAABqagEAAFhdAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5wb29sLkFzeW5jUmVzdWx0LnJlYWR5WAEAAAAtdHIZPAAAWBgAAABjdXJzZXMucGFuZWwuUGFuZWwuYmVsb3dyGjwAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLnBhbmVsLmh0bWwjY3Vyc2VzLnBhbmVsLlBhbmVsLmJlbG93WAEAAAAtdHIbPAAAWBUAAABpby5SYXdJT0Jhc2UucmVhZGludG9yHDwAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW8uaHRtbCNpby5SYXdJT0Jhc2UucmVhZGludG9YAQAAAC10ch08AABYFAAAAGlvLlN0cmluZ0lPLmdldHZhbHVlch48AAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uU3RyaW5nSU8uZ2V0dmFsdWVYAQAAAC10ch88AABYMQAAAEJhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIubG9nX3JlcXVlc3RyIDwAAChqaQEAAGpqAQAAWGcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmFzZWh0dHBzZXJ2ZXIuaHRtbCNCYXNlSFRUUFNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLmxvZ19yZXF1ZXN0WAEAAAAtdHIhPAAAWCQAAABTb2NrZXRTZXJ2ZXIuQmFzZVNlcnZlci5zZXJ2ZXJfY2xvc2VyIjwAAChqaQEAAGpqAQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0c2VydmVyLmh0bWwjU29ja2V0U2VydmVyLkJhc2VTZXJ2ZXIuc2VydmVyX2Nsb3NlWAEAAAAtdHIjPAAAWBQAAABpbWFwbGliLklNQVA0LnNlbGVjdHIkPAAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5zZWxlY3RYAQAAAC10ciU8AABYEwAAAG9iamVjdC5fX3NldHN0YXRlX19yJjwAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGlja2xlLmh0bWwjb2JqZWN0Ll9fc2V0c3RhdGVfX1gBAAAALXRyJzwAAFgjAAAAb3B0cGFyc2UuT3B0aW9uUGFyc2VyLnByaW50X3ZlcnNpb25yKDwAAChqaQEAAGpqAQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS5PcHRpb25QYXJzZXIucHJpbnRfdmVyc2lvblgBAAAALXRyKTwAAFgbAAAAaHR0cGxpYi5IVFRQQ29ubmVjdGlvbi5zZW5kcio8AAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0dHBsaWIuaHRtbCNodHRwbGliLkhUVFBDb25uZWN0aW9uLnNlbmRYAQAAAC10cis8AABYFgAAAHRocmVhZGluZy5Mb2NrLmFjcXVpcmVyLDwAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLkxvY2suYWNxdWlyZVgBAAAALXRyLTwAAFgjAAAAdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIuX21ha2VSZXN1bHRyLjwAAChqaQEAAGpqAQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXh0VGVzdFJ1bm5lci5fbWFrZVJlc3VsdFgBAAAALXRyLzwAAFgXAAAAaG90c2hvdC5Qcm9maWxlLnJ1bmNhbGxyMDwAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaG90c2hvdC5odG1sI2hvdHNob3QuUHJvZmlsZS5ydW5jYWxsWAEAAAAtdHIxPAAAWBAAAABvYmplY3QuX19pbmRleF9fcjI8AAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9faW5kZXhfX1gBAAAALXRyMzwAAFgfAAAASFRNTFBhcnNlci5IVE1MUGFyc2VyLmhhbmRsZV9waXI0PAAAKGppAQAAamoBAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odG1scGFyc2VyLmh0bWwjSFRNTFBhcnNlci5IVE1MUGFyc2VyLmhhbmRsZV9waVgBAAAALXRyNTwAAFglAAAAdW5pdHRlc3QuVGVzdENhc2UuYWRkVHlwZUVxdWFsaXR5RnVuY3I2PAAAKGppAQAAamoBAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmFkZFR5cGVFcXVhbGl0eUZ1bmNYAQAAAC10cjc8AABYKAAAAHhtbC5zYXgueG1scmVhZGVyLkF0dHJpYnV0ZXNOUy5nZXRRTmFtZXNyODwAAChqaQEAAGpqAQAAWF4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCN4bWwuc2F4LnhtbHJlYWRlci5BdHRyaWJ1dGVzTlMuZ2V0UU5hbWVzWAEAAAAtdHI5PAAAWCMAAAB4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC5pdGVtc3I6PAAAKGppAQAAamoBAABYYAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC5pdGVtc1gBAAAALXRyOzwAAFgRAAAAYXJyYXkuYXJyYXkud3JpdGVyPDwAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXJyYXkuaHRtbCNhcnJheS5hcnJheS53cml0ZVgBAAAALXRyPTwAAFgiAAAAZmlsZWNtcC5kaXJjbXAucmVwb3J0X2Z1bGxfY2xvc3VyZXI+PAAAKGppAQAAamoBAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9maWxlY21wLmh0bWwjZmlsZWNtcC5kaXJjbXAucmVwb3J0X2Z1bGxfY2xvc3VyZVgBAAAALXRyPzwAAFgTAAAAaG90c2hvdC5Qcm9maWxlLnJ1bnJAPAAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ob3RzaG90Lmh0bWwjaG90c2hvdC5Qcm9maWxlLnJ1blgBAAAALXRyQTwAAFgcAAAAeGRybGliLlVucGFja2VyLnVucGFja19ieXRlc3JCPAAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94ZHJsaWIuaHRtbCN4ZHJsaWIuVW5wYWNrZXIudW5wYWNrX2J5dGVzWAEAAAAtdHJDPAAAWBUAAABhZXRvb2xzLlRhbGtUby5fc3RhcnRyRDwAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWV0b29scy5odG1sI2FldG9vbHMuVGFsa1RvLl9zdGFydFgBAAAALXRyRTwAAFgkAAAAbG9nZ2luZy5oYW5kbGVycy5NZW1vcnlIYW5kbGVyLmZsdXNockY8AAAoamkBAABqagEAAFhcAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLk1lbW9yeUhhbmRsZXIuZmx1c2hYAQAAAC10ckc8AABYEwAAAGN1cnNlcy53aW5kb3cuaWRjb2tySDwAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5pZGNva1gBAAAALXRySTwAAFgRAAAAZmwuZm9ybS5zaG93X2Zvcm1ySjwAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmwuaHRtbCNmbC5mb3JtLnNob3dfZm9ybVgBAAAALXRySzwAAFgeAAAAeG1sLmRvbS5FbGVtZW50Lmhhc0F0dHJpYnV0ZU5Tckw8AAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkVsZW1lbnQuaGFzQXR0cmlidXRlTlNYAQAAAC10ck08AABYIwAAAG9zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2UuZmlsZW5vck48AAAoamkBAABqagEAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zc2F1ZGlvZGV2Lmh0bWwjb3NzYXVkaW9kZXYub3NzX2F1ZGlvX2RldmljZS5maWxlbm9YAQAAAC10ck88AABYHwAAAGh0bWxsaWIuSFRNTFBhcnNlci5oYW5kbGVfaW1hZ2VyUDwAAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHRtbGxpYi5odG1sI2h0bWxsaWIuSFRNTFBhcnNlci5oYW5kbGVfaW1hZ2VYAQAAAC10clE8AABYFwAAAG1zaWxpYi5SZWNvcmQuU2V0U3RyZWFtclI8AAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5SZWNvcmQuU2V0U3RyZWFtWAEAAAAtdHJTPAAAWCoAAABtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi5MaXN0ZW5lci5hY2NlcHRyVDwAAChqaQEAAGpqAQAAWGEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24uTGlzdGVuZXIuYWNjZXB0WAEAAAAtdHJVPAAAWCAAAAB4bWwuZG9tLkVsZW1lbnQuZ2V0QXR0cmlidXRlTm9kZXJWPAAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5FbGVtZW50LmdldEF0dHJpYnV0ZU5vZGVYAQAAAC10clc8AABYEQAAAG1lbW9yeXZpZXcudG9saXN0clg8AAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjbWVtb3J5dmlldy50b2xpc3RYAQAAAC10clk8AABYGwAAAGZvcm1hdHRlci53cml0ZXIubmV3X21hcmdpbnJaPAAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIud3JpdGVyLm5ld19tYXJnaW5YAQAAAC10cls8AABYFQAAAGhvdHNob3QuUHJvZmlsZS5jbG9zZXJcPAAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ob3RzaG90Lmh0bWwjaG90c2hvdC5Qcm9maWxlLmNsb3NlWAEAAAAtdHJdPAAAWA8AAABjbWQuQ21kLnByZWxvb3ByXjwAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY21kLmh0bWwjY21kLkNtZC5wcmVsb29wWAEAAAAtdHJfPAAAWBYAAABkZWNpbWFsLkNvbnRleHQuaXNfbmFucmA8AAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQuaXNfbmFuWAEAAAAtdHJhPAAAWBAAAABobWFjLkhNQUMuZGlnZXN0cmI8AAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2htYWMuaHRtbCNobWFjLkhNQUMuZGlnZXN0WAEAAAAtdHJjPAAAWBQAAAByZXhlYy5SRXhlYy5yX2ltcG9ydHJkPAAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXhlYy5odG1sI3JleGVjLlJFeGVjLnJfaW1wb3J0WAEAAAAtdHJlPAAAWCIAAABkaXN0dXRpbHMudGV4dF9maWxlLlRleHRGaWxlLmNsb3NlcmY8AAAoamkBAABqagEAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLnRleHRfZmlsZS5UZXh0RmlsZS5jbG9zZVgBAAAALXRyZzwAAFgIAAAAc3RyLmpvaW5yaDwAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNzdHIuam9pblgBAAAALXRyaTwAAFgUAAAAc2VsZWN0LnBvbGwucmVnaXN0ZXJyajwAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2VsZWN0Lmh0bWwjc2VsZWN0LnBvbGwucmVnaXN0ZXJYAQAAAC10cms8AABYEQAAAGlvLlJhd0lPQmFzZS5yZWFkcmw8AAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uUmF3SU9CYXNlLnJlYWRYAQAAAC10cm08AABYEwAAAHNjaGVkLnNjaGVkdWxlci5ydW5ybjwAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2NoZWQuaHRtbCNzY2hlZC5zY2hlZHVsZXIucnVuWAEAAAAtdHJvPAAAWCAAAAB0ZWxuZXRsaWIuVGVsbmV0LnJlYWRfdmVyeV9lYWdlcnJwPAAAKGppAQAAamoBAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZWxuZXRsaWIuaHRtbCN0ZWxuZXRsaWIuVGVsbmV0LnJlYWRfdmVyeV9lYWdlclgBAAAALXRycTwAAFgPAAAAYmRiLkJkYi5jYW5vbmljcnI8AAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JkYi5odG1sI2JkYi5CZGIuY2Fub25pY1gBAAAALXRyczwAAFgVAAAAUXVldWUuUXVldWUudGFza19kb25lcnQ8AAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3F1ZXVlLmh0bWwjUXVldWUuUXVldWUudGFza19kb25lWAEAAAAtdHJ1PAAAWBYAAAB0ZWxuZXRsaWIuVGVsbmV0LmNsb3NlcnY8AAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RlbG5ldGxpYi5odG1sI3RlbG5ldGxpYi5UZWxuZXQuY2xvc2VYAQAAAC10cnc8AABYGgAAAHVybGxpYjIuUmVxdWVzdC5nZXRfbWV0aG9kcng8AAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLlJlcXVlc3QuZ2V0X21ldGhvZFgBAAAALXRyeTwAAFgYAAAAbWhsaWIuRm9sZGVyLm1vdmVtZXNzYWdlcno8AAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21obGliLmh0bWwjbWhsaWIuRm9sZGVyLm1vdmVtZXNzYWdlWAEAAAAtdHJ7PAAAWBoAAABtYWlsYm94Lk1haWxib3guZ2V0X3N0cmluZ3J8PAAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsYm94LmdldF9zdHJpbmdYAQAAAC10cn08AABYEAAAAGNodW5rLkNodW5rLnRlbGxyfjwAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2h1bmsuaHRtbCNjaHVuay5DaHVuay50ZWxsWAEAAAAtdHJ/PAAAWB8AAABUaXgudGl4Q29tbWFuZC50aXhfcmVzZXRvcHRpb25zcoA8AAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpeC5odG1sI1RpeC50aXhDb21tYW5kLnRpeF9yZXNldG9wdGlvbnNYAQAAAC10coE8AABYIAAAAGdldHRleHQuTnVsbFRyYW5zbGF0aW9ucy5nZXR0ZXh0coI8AAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dldHRleHQuaHRtbCNnZXR0ZXh0Lk51bGxUcmFuc2xhdGlvbnMuZ2V0dGV4dFgBAAAALXRygzwAAFgYAAAAeGRybGliLlBhY2tlci5wYWNrX2J5dGVzcoQ8AAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3hkcmxpYi5odG1sI3hkcmxpYi5QYWNrZXIucGFja19ieXRlc1gBAAAALXRyhTwAAFggAAAAeG1sLmRvbS5taW5pZG9tLk5vZGUudG9wcmV0dHl4bWxyhjwAAChqaQEAAGpqAQAAWFcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5taW5pZG9tLmh0bWwjeG1sLmRvbS5taW5pZG9tLk5vZGUudG9wcmV0dHl4bWxYAQAAAC10coc8AABYGAAAAGxvZ2dpbmcuRmlsZUhhbmRsZXIuZW1pdHKIPAAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5GaWxlSGFuZGxlci5lbWl0WAEAAAAtdHKJPAAAWCkAAABhc3luY2hhdC5hc3luY19jaGF0LmNvbGxlY3RfaW5jb21pbmdfZGF0YXKKPAAAKGppAQAAamoBAABYWQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hc3luY2hhdC5odG1sI2FzeW5jaGF0LmFzeW5jX2NoYXQuY29sbGVjdF9pbmNvbWluZ19kYXRhWAEAAAAtdHKLPAAAWBYAAABhaWZjLmFpZmMuZ2V0ZnJhbWVyYXRlcow8AAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FpZmMuaHRtbCNhaWZjLmFpZmMuZ2V0ZnJhbWVyYXRlWAEAAAAtdHKNPAAAWB4AAABkZWNpbWFsLkRlY2ltYWwubG9naWNhbF9pbnZlcnRyjjwAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5sb2dpY2FsX2ludmVydFgBAAAALXRyjzwAAFgZAAAAbG9nZ2luZy5Mb2dnZXIuZmluZENhbGxlcnKQPAAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5Mb2dnZXIuZmluZENhbGxlclgBAAAALXRykTwAAFgfAAAAbWFpbGJveC5CYWJ5bE1lc3NhZ2Uuc2V0X2xhYmVsc3KSPAAAKGppAQAAamoBAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5CYWJ5bE1lc3NhZ2Uuc2V0X2xhYmVsc1gBAAAALXRykzwAAFgcAAAAYXJncGFyc2UuQXJndW1lbnRQYXJzZXIuZXhpdHKUPAAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hcmdwYXJzZS5odG1sI2FyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLmV4aXRYAQAAAC10cpU8AABYHgAAAGNvZGVjcy5TdHJlYW1Xcml0ZXIud3JpdGVsaW5lc3KWPAAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuU3RyZWFtV3JpdGVyLndyaXRlbGluZXNYAQAAAC10cpc8AABYFwAAAHBzdGF0cy5TdGF0cy5kdW1wX3N0YXRzcpg8AAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Byb2ZpbGUuaHRtbCNwc3RhdHMuU3RhdHMuZHVtcF9zdGF0c1gBAAAALXRymTwAAFgeAAAAaHR0cGxpYi5IVFRQUmVzcG9uc2UuZ2V0aGVhZGVycpo8AAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0dHBsaWIuaHRtbCNodHRwbGliLkhUVFBSZXNwb25zZS5nZXRoZWFkZXJYAQAAAC10cps8AABYFQAAAGZsLmZvcm0udW5mcmVlemVfZm9ybXKcPAAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbC5odG1sI2ZsLmZvcm0udW5mcmVlemVfZm9ybVgBAAAALXRynTwAAFgmAAAAeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQuZmluZHRleHRynjwAAChqaQEAAGpqAQAAWGMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQuZmluZHRleHRYAQAAAC10cp88AABYFQAAAGJkYi5CZGIuZGlzcGF0Y2hfY2FsbHKgPAAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iZGIuaHRtbCNiZGIuQmRiLmRpc3BhdGNoX2NhbGxYAQAAAC10cqE8AABYFQAAAHppcGZpbGUuWmlwRmlsZS5jbG9zZXKiPAAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5aaXBGaWxlLmNsb3NlWAEAAAAtdHKjPAAAWCgAAABjb29raWVsaWIuRGVmYXVsdENvb2tpZVBvbGljeS5pc19ibG9ja2VkcqQ8AAAoamkBAABqagEAAFhZAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5EZWZhdWx0Q29va2llUG9saWN5LmlzX2Jsb2NrZWRYAQAAAC10cqU8AABYHAAAAGFzeW5jb3JlLmRpc3BhdGNoZXIucmVhZGFibGVypjwAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXN5bmNvcmUuaHRtbCNhc3luY29yZS5kaXNwYXRjaGVyLnJlYWRhYmxlWAEAAAAtdHKnPAAAWBMAAABiZGIuQmRiLnVzZXJfcmV0dXJucqg8AAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JkYi5odG1sI2JkYi5CZGIudXNlcl9yZXR1cm5YAQAAAC10cqk8AABYOQAAAFNpbXBsZVhNTFJQQ1NlcnZlci5DR0lYTUxSUENSZXF1ZXN0SGFuZGxlci5oYW5kbGVfcmVxdWVzdHKqPAAAKGppAQAAamoBAABYcwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaW1wbGV4bWxycGNzZXJ2ZXIuaHRtbCNTaW1wbGVYTUxSUENTZXJ2ZXIuQ0dJWE1MUlBDUmVxdWVzdEhhbmRsZXIuaGFuZGxlX3JlcXVlc3RYAQAAAC10cqs8AABYGwAAAHhkcmxpYi5VbnBhY2tlci51bnBhY2tfbGlzdHKsPAAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94ZHJsaWIuaHRtbCN4ZHJsaWIuVW5wYWNrZXIudW5wYWNrX2xpc3RYAQAAAC10cq08AABYIgAAAHNnbWxsaWIuU0dNTFBhcnNlci51bmtub3duX2NoYXJyZWZyrjwAAChqaQEAAGpqAQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2dtbGxpYi5odG1sI3NnbWxsaWIuU0dNTFBhcnNlci51bmtub3duX2NoYXJyZWZYAQAAAC10cq88AABYIgAAAGVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5nZXRfdW5peGZyb21ysDwAAChqaQEAAGpqAQAAWFcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS5nZXRfdW5peGZyb21YAQAAAC10crE8AABYDgAAAGlvLklPQmFzZS5zZWVrcrI8AAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uSU9CYXNlLnNlZWtYAQAAAC10crM8AABYGAAAAHVybGxpYjIuUmVxdWVzdC5oYXNfZGF0YXK0PAAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5SZXF1ZXN0Lmhhc19kYXRhWAEAAAAtdHK1PAAAWBMAAABjdXJzZXMud2luZG93LmdldHl4crY8AAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cuZ2V0eXhYAQAAAC10crc8AABYEAAAAHBvcGxpYi5QT1AzLnVzZXJyuDwAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcG9wbGliLmh0bWwjcG9wbGliLlBPUDMudXNlclgBAAAALXRyuTwAAFgZAAAAeGRybGliLlBhY2tlci5wYWNrX3N0cmluZ3K6PAAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94ZHJsaWIuaHRtbCN4ZHJsaWIuUGFja2VyLnBhY2tfc3RyaW5nWAEAAAAtdHK7PAAAWBcAAAB0aHJlYWRpbmcuUkxvY2sucmVsZWFzZXK8PAAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuUkxvY2sucmVsZWFzZVgBAAAALXRyvTwAAFgYAAAAY29kZWNzLlN0cmVhbVJlYWRlci5yZWFkcr48AAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5TdHJlYW1SZWFkZXIucmVhZFgBAAAALXRyvzwAAFggAAAAeG1sLmRvbS5FbGVtZW50LnNldEF0dHJpYnV0ZU5vZGVywDwAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uRWxlbWVudC5zZXRBdHRyaWJ1dGVOb2RlWAEAAAAtdHLBPAAAWBgAAAB6aXBmaWxlLlppcEZpbGUubmFtZWxpc3RywjwAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGZpbGUuWmlwRmlsZS5uYW1lbGlzdFgBAAAALXRywzwAAFgPAAAAbW1hcC5tbWFwLnJmaW5kcsQ8AAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21tYXAuaHRtbCNtbWFwLm1tYXAucmZpbmRYAQAAAC10csU8AABYEQAAAHR0ay5UcmVldmlldy5uZXh0csY8AAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5UcmVldmlldy5uZXh0WAEAAAAtdHLHPAAAWCEAAABzZ21sbGliLlNHTUxQYXJzZXIudW5rbm93bl9lbmR0YWdyyDwAAChqaQEAAGpqAQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2dtbGxpYi5odG1sI3NnbWxsaWIuU0dNTFBhcnNlci51bmtub3duX2VuZHRhZ1gBAAAALXRyyTwAAFgcAAAAc3VicHJvY2Vzcy5Qb3Blbi5jb21tdW5pY2F0ZXLKPAAAKGppAQAAamoBAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5Qb3Blbi5jb21tdW5pY2F0ZVgBAAAALXRyyzwAAFgZAAAAbWhsaWIuTWVzc2FnZS5vcGVubWVzc2FnZXLMPAAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taGxpYi5odG1sI21obGliLk1lc3NhZ2Uub3Blbm1lc3NhZ2VYAQAAAC10cs08AABYGgAAAG1pbWV0eXBlcy5NaW1lVHlwZXMucmVhZGZwcs48AAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbWV0eXBlcy5odG1sI21pbWV0eXBlcy5NaW1lVHlwZXMucmVhZGZwWAEAAAAtdHLPPAAAWB0AAABlbWFpbC5jaGFyc2V0LkNoYXJzZXQuY29udmVydHLQPAAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5jaGFyc2V0Lmh0bWwjZW1haWwuY2hhcnNldC5DaGFyc2V0LmNvbnZlcnRYAQAAAC10ctE8AABYKgAAAGxvZ2dpbmcuaGFuZGxlcnMuU3lzTG9nSGFuZGxlci5tYXBQcmlvcml0eXLSPAAAKGppAQAAamoBAABYYgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5TeXNMb2dIYW5kbGVyLm1hcFByaW9yaXR5WAEAAAAtdHLTPAAAWBQAAAB0dGsuUHJvZ3Jlc3NiYXIuc3RvcHLUPAAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuUHJvZ3Jlc3NiYXIuc3RvcFgBAAAALXRy1TwAAFgPAAAAb2JqZWN0Ll9fZXhpdF9fctY8AAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fZXhpdF9fWAEAAAAtdHLXPAAAWB8AAABtYWlsYm94Lk1haWxkaXJNZXNzYWdlLmFkZF9mbGFnctg8AAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxkaXJNZXNzYWdlLmFkZF9mbGFnWAEAAAAtdHLZPAAAWCoAAABtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuQmFzZVByb3h5Ll9fc3RyX19y2jwAAChqaQEAAGpqAQAAWGEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLkJhc2VQcm94eS5fX3N0cl9fWAEAAAAtdHLbPAAAWCEAAABlbWFpbC5tZXNzYWdlLk1lc3NhZ2Uuc2V0X2NoYXJzZXRy3DwAAChqaQEAAGpqAQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS5zZXRfY2hhcnNldFgBAAAALXRy3TwAAFgZAAAAcmZjODIyLk1lc3NhZ2UucmV3aW5kYm9keXLePAAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZmM4MjIuaHRtbCNyZmM4MjIuTWVzc2FnZS5yZXdpbmRib2R5WAEAAAAtdHLfPAAAWDAAAAB4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuTm90U3RhbmRhbG9uZUhhbmRsZXJy4DwAAChqaQEAAGpqAQAAWF8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5Ob3RTdGFuZGFsb25lSGFuZGxlclgBAAAALXRy4TwAAFgdAAAAc3RyaW5nLkZvcm1hdHRlci5mb3JtYXRfZmllbGRy4jwAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLkZvcm1hdHRlci5mb3JtYXRfZmllbGRYAQAAAC10cuM8AABYFwAAAGNvbnRleHRtYW5hZ2VyLl9fZXhpdF9fcuQ8AAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjY29udGV4dG1hbmFnZXIuX19leGl0X19YAQAAAC10cuU8AABYGwAAAG1zaWxpYi5SYWRpb0J1dHRvbkdyb3VwLmFkZHLmPAAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuUmFkaW9CdXR0b25Hcm91cC5hZGRYAQAAAC10cuc8AABYEgAAAGlvLlRleHRJT0Jhc2Uuc2Vla3LoPAAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pby5odG1sI2lvLlRleHRJT0Jhc2Uuc2Vla1gBAAAALXRy6TwAAFgdAAAAdXJsbGliLlVSTG9wZW5lci5vcGVuX3Vua25vd25y6jwAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliLmh0bWwjdXJsbGliLlVSTG9wZW5lci5vcGVuX3Vua25vd25YAQAAAC10cus8AABYGwAAAHdhdmUuV2F2ZV93cml0ZS5zZXRjb21wdHlwZXLsPAAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93YXZlLmh0bWwjd2F2ZS5XYXZlX3dyaXRlLnNldGNvbXB0eXBlWAEAAAAtdHLtPAAAWBIAAAB6bGliLkNvbXByZXNzLmNvcHly7jwAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemxpYi5odG1sI3psaWIuQ29tcHJlc3MuY29weVgBAAAALXRy7zwAAFgXAAAAY29sbGVjdGlvbnMuZGVxdWUuY2xlYXJy8DwAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5kZXF1ZS5jbGVhclgBAAAALXRy8TwAAFgNAAAAb2JqZWN0Ll9fZ2VfX3LyPAAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2dlX19YAQAAAC10cvM8AABYIQAAAHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydExpc3RFcXVhbHL0PAAAKGppAQAAamoBAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydExpc3RFcXVhbFgBAAAALXRy9TwAAFgXAAAAY2xhc3MuX19zdWJjbGFzc2NoZWNrX19y9jwAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNjbGFzcy5fX3N1YmNsYXNzY2hlY2tfX1gBAAAALXRy9zwAAFgiAAAAbXVsdGlwcm9jZXNzaW5nLkpvaW5hYmxlUXVldWUuam9pbnL4PAAAKGppAQAAamoBAABYWQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuSm9pbmFibGVRdWV1ZS5qb2luWAEAAAAtdHL5PAAAWCcAAABkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5tb3ZlX2ZpbGVy+jwAAChqaQEAAGpqAQAAWFcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5tb3ZlX2ZpbGVYAQAAAC10cvs8AABYGwAAAGRlY2ltYWwuRGVjaW1hbC5sb2dpY2FsX2FuZHL8PAAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLmxvZ2ljYWxfYW5kWAEAAAAtdHL9PAAAWB8AAABjb2xsZWN0aW9ucy5Db3VudGVyLm1vc3RfY29tbW9ucv48AAAoamkBAABqagEAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuQ291bnRlci5tb3N0X2NvbW1vblgBAAAALXRy/zwAAFgUAAAAY3Vyc2VzLndpbmRvdy5nZXRzdHJyAD0AAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5nZXRzdHJYAQAAAC10cgE9AABYHwAAAG1haWxib3guTUhNZXNzYWdlLnNldF9zZXF1ZW5jZXNyAj0AAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTUhNZXNzYWdlLnNldF9zZXF1ZW5jZXNYAQAAAC10cgM9AABYGgAAAHVybGxpYjIuUmVxdWVzdC5oYXNfaGVhZGVycgQ9AAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLlJlcXVlc3QuaGFzX2hlYWRlclgBAAAALXRyBT0AAFgWAAAAUXVldWUuUXVldWUucHV0X25vd2FpdHIGPQAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9xdWV1ZS5odG1sI1F1ZXVlLlF1ZXVlLnB1dF9ub3dhaXRYAQAAAC10cgc9AABYHQAAAHRocmVhZGluZy5Db25kaXRpb24ubm90aWZ5QWxscgg9AAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5Db25kaXRpb24ubm90aWZ5QWxsWAEAAAAtdHIJPQAAWBQAAABzbXRwbGliLlNNVFAuY29ubmVjdHIKPQAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zbXRwbGliLmh0bWwjc210cGxpYi5TTVRQLmNvbm5lY3RYAQAAAC10cgs9AABYDAAAAGRpY3QuaGFzX2tleXIMPQAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2RpY3QuaGFzX2tleVgBAAAALXRyDT0AAFgsAAAAZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIudW5kZWZpbmVfbWFjcm9yDj0AAChqaQEAAGpqAQAAWFwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci51bmRlZmluZV9tYWNyb1gBAAAALXRyDz0AAFgaAAAAYnNkZGIuYnNkZGJvYmplY3QucHJldmlvdXNyED0AAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYnNkZGIuaHRtbCNic2RkYi5ic2RkYm9iamVjdC5wcmV2aW91c1gBAAAALXRyET0AAFgkAAAARnJhbWVXb3JrLlNjcm9sbGVkV2luZG93LmRvX2FjdGl2YXRlchI9AAAoamkBAABqagEAAFhVAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZyYW1ld29yay5odG1sI0ZyYW1lV29yay5TY3JvbGxlZFdpbmRvdy5kb19hY3RpdmF0ZVgBAAAALXRyEz0AAFggAAAAbXNpbGliLkRpcmVjdG9yeS5zdGFydF9jb21wb25lbnRyFD0AAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLkRpcmVjdG9yeS5zdGFydF9jb21wb25lbnRYAQAAAC10chU9AABYEwAAAHRyYWNlLlRyYWNlLnJ1bmZ1bmNyFj0AAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHJhY2UuaHRtbCN0cmFjZS5UcmFjZS5ydW5mdW5jWAEAAAAtdHIXPQAAWBUAAAB0YXJmaWxlLlRhckluZm8uaXNsbmtyGD0AAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuVGFySW5mby5pc2xua1gBAAAALXRyGT0AAFgjAAAAY29tcGlsZXIudmlzaXRvci5BU1RWaXNpdG9yLmRlZmF1bHRyGj0AAChqaQEAAGpqAQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29tcGlsZXIuaHRtbCNjb21waWxlci52aXNpdG9yLkFTVFZpc2l0b3IuZGVmYXVsdFgBAAAALXRyGz0AAFgkAAAAc3ltdGFibGUuU3ltYm9sVGFibGUuaGFzX2ltcG9ydF9zdGFychw9AAAoamkBAABqagEAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5bXRhYmxlLmh0bWwjc3ltdGFibGUuU3ltYm9sVGFibGUuaGFzX2ltcG9ydF9zdGFyWAEAAAAtdHIdPQAAWBMAAABjdXJzZXMud2luZG93LmNsZWFych49AAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cuY2xlYXJYAQAAAC10ch89AABYIwAAAEZyYW1lV29yay5BcHBsaWNhdGlvbi5tYWtldXNlcm1lbnVzciA9AAAoamkBAABqagEAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZyYW1ld29yay5odG1sI0ZyYW1lV29yay5BcHBsaWNhdGlvbi5tYWtldXNlcm1lbnVzWAEAAAAtdHIhPQAAWBcAAABkZWNpbWFsLkRlY2ltYWwubWF4X21hZ3IiPQAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLm1heF9tYWdYAQAAAC10ciM9AABYEgAAAGZ0cGxpYi5GVFAuc2VuZGNtZHIkPQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuRlRQLnNlbmRjbWRYAQAAAC10ciU9AABYDgAAAG9iamVjdC5fX3Jvcl9fciY9AAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fcm9yX19YAQAAAC10cic9AABYGAAAAGRlY2ltYWwuRGVjaW1hbC5hc190dXBsZXIoPQAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLmFzX3R1cGxlWAEAAAAtdHIpPQAAWBEAAABmdHBsaWIuRlRQLmRlbGV0ZXIqPQAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuRlRQLmRlbGV0ZVgBAAAALXRyKz0AAFgmAAAAU29ja2V0U2VydmVyLkJhc2VTZXJ2ZXIuZmluaXNoX3JlcXVlc3RyLD0AAChqaQEAAGpqAQAAWFoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0c2VydmVyLmh0bWwjU29ja2V0U2VydmVyLkJhc2VTZXJ2ZXIuZmluaXNoX3JlcXVlc3RYAQAAAC10ci09AABYFwAAAGRhdGV0aW1lLmRhdGV0aW1lLmN0aW1lci49AAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZXRpbWUuY3RpbWVYAQAAAC10ci89AABYEQAAAHNtdHBsaWIuU01UUC5laGxvcjA9AAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NtdHBsaWIuaHRtbCNzbXRwbGliLlNNVFAuZWhsb1gBAAAALXRyMT0AAFgkAAAAc3NsLlNTTENvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zcjI9AAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xDb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9uc1gBAAAALXRyMz0AAFgNAAAAZmlsZS5yZWFkbGluZXI0PQAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2ZpbGUucmVhZGxpbmVYAQAAAC10cjU9AABYFAAAAHR0ay5UcmVldmlldy50YWdfaGFzcjY9AAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5UcmVldmlldy50YWdfaGFzWAEAAAAtdHI3PQAAWBoAAAB0aHJlYWRpbmcuQ29uZGl0aW9uLm5vdGlmeXI4PQAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuQ29uZGl0aW9uLm5vdGlmeVgBAAAALXRyOT0AAFgXAAAAYmRiLkJkYi5nZXRfZmlsZV9icmVha3NyOj0AAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYi5nZXRfZmlsZV9icmVha3NYAQAAAC10cjs9AABYEgAAAHR0ay5UcmVldmlldy55dmlld3I8PQAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuVHJlZXZpZXcueXZpZXdYAQAAAC10cj09AABYLQAAAHhtbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlci5nZXRDb250ZW50SGFuZGxlcnI+PQAAKGppAQAAamoBAABYYwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlci5nZXRDb250ZW50SGFuZGxlclgBAAAALXRyPz0AAFgxAAAAeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkVuZERvY3R5cGVEZWNsSGFuZGxlcnJAPQAAKGppAQAAamoBAABYYAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkVuZERvY3R5cGVEZWNsSGFuZGxlclgBAAAALXRyQT0AAFgfAAAAdW5pdHRlc3QuVGVzdFJlc3VsdC5zdG9wVGVzdFJ1bnJCPQAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RSZXN1bHQuc3RvcFRlc3RSdW5YAQAAAC10ckM9AABYIAAAAGltcHV0aWwuSW1wb3J0TWFuYWdlci5hZGRfc3VmZml4ckQ9AAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltcHV0aWwuaHRtbCNpbXB1dGlsLkltcG9ydE1hbmFnZXIuYWRkX3N1ZmZpeFgBAAAALXRyRT0AAFgqAAAAZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIuZmluZF9sb25nZXN0X21hdGNockY9AAAoamkBAABqagEAAFhZAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RpZmZsaWIuaHRtbCNkaWZmbGliLlNlcXVlbmNlTWF0Y2hlci5maW5kX2xvbmdlc3RfbWF0Y2hYAQAAAC10ckc9AABYHwAAAHhtbC5kb20uRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGVySD0AAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGVYAQAAAC10ckk9AABYGQAAAHRocmVhZGluZy5UaHJlYWQuaXNfYWxpdmVySj0AAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLlRocmVhZC5pc19hbGl2ZVgBAAAALXRySz0AAFgVAAAAbWFpbGJveC5NSC5nZXRfZm9sZGVyckw9AAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1ILmdldF9mb2xkZXJYAQAAAC10ck09AABYKwAAAGRpZmZsaWIuU2VxdWVuY2VNYXRjaGVyLmdldF9ncm91cGVkX29wY29kZXNyTj0AAChqaQEAAGpqAQAAWFoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlmZmxpYi5odG1sI2RpZmZsaWIuU2VxdWVuY2VNYXRjaGVyLmdldF9ncm91cGVkX29wY29kZXNYAQAAAC10ck89AABYFAAAAG5ldHJjLm5ldHJjLl9fcmVwcl9fclA9AAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L25ldHJjLmh0bWwjbmV0cmMubmV0cmMuX19yZXByX19YAQAAAC10clE9AABYHAAAAHhkcmxpYi5VbnBhY2tlci51bnBhY2tfZmxvYXRyUj0AAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveGRybGliLmh0bWwjeGRybGliLlVucGFja2VyLnVucGFja19mbG9hdFgBAAAALXRyUz0AAFgxAAAAeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLlNldFBhcmFtRW50aXR5UGFyc2luZ3JUPQAAKGppAQAAamoBAABYYAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLlNldFBhcmFtRW50aXR5UGFyc2luZ1gBAAAALXRyVT0AAFglAAAAcmZjODIyLk1lc3NhZ2UuZ2V0Zmlyc3RtYXRjaGluZ2hlYWRlcnJWPQAAKGppAQAAamoBAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZmM4MjIuaHRtbCNyZmM4MjIuTWVzc2FnZS5nZXRmaXJzdG1hdGNoaW5naGVhZGVyWAEAAAAtdHJXPQAAWCkAAAB1cmxsaWIyLkhUVFBFcnJvclByb2Nlc3Nvci5odHRwc19yZXNwb25zZXJYPQAAKGppAQAAamoBAABYWAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5IVFRQRXJyb3JQcm9jZXNzb3IuaHR0cHNfcmVzcG9uc2VYAQAAAC10clk9AABYJAAAAGRpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLm1rcGF0aHJaPQAAKGppAQAAamoBAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLm1rcGF0aFgBAAAALXRyWz0AAFghAAAAc3ltdGFibGUuU3ltYm9sVGFibGUuaGFzX2NoaWxkcmVuclw9AAAoamkBAABqagEAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5bXRhYmxlLmh0bWwjc3ltdGFibGUuU3ltYm9sVGFibGUuaGFzX2NoaWxkcmVuWAEAAAAtdHJdPQAAWBYAAABzdHJpbmcuRm9ybWF0dGVyLnBhcnNlcl49AAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZy5odG1sI3N0cmluZy5Gb3JtYXR0ZXIucGFyc2VYAQAAAC10cl89AABYEgAAAGlvLklPQmFzZS53cml0YWJsZXJgPQAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pby5odG1sI2lvLklPQmFzZS53cml0YWJsZVgBAAAALXRyYT0AAFgiAAAAeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQuZmluZHJiPQAAKGppAQAAamoBAABYXwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC5maW5kWAEAAAAtdHJjPQAAWBUAAAB3YXZlLldhdmVfcmVhZC5zZXRwb3NyZD0AAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2F2ZS5odG1sI3dhdmUuV2F2ZV9yZWFkLnNldHBvc1gBAAAALXRyZT0AAFgPAAAAZGljdC52aWV3dmFsdWVzcmY9AAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZGljdC52aWV3dmFsdWVzWAEAAAAtdHJnPQAAWBsAAABmcm96ZW5zZXQuZGlmZmVyZW5jZV91cGRhdGVyaD0AAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNmcm96ZW5zZXQuZGlmZmVyZW5jZV91cGRhdGVYAQAAAC10cmk9AABYKQAAAHdzZ2lyZWYuaGFuZGxlcnMuQmFzZUhhbmRsZXIuZXJyb3Jfb3V0cHV0cmo9AAAoamkBAABqagEAAFhYAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLmVycm9yX291dHB1dFgBAAAALXRyaz0AAFgQAAAAUXVldWUuUXVldWUuZnVsbHJsPQAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9xdWV1ZS5odG1sI1F1ZXVlLlF1ZXVlLmZ1bGxYAQAAAC10cm09AABYIQAAAHN5bXRhYmxlLlN5bWJvbFRhYmxlLmlzX29wdGltaXplZHJuPQAAKGppAQAAamoBAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeW10YWJsZS5odG1sI3N5bXRhYmxlLlN5bWJvbFRhYmxlLmlzX29wdGltaXplZFgBAAAALXRybz0AAFgWAAAAYmRiLkJyZWFrcG9pbnQuZGlzYWJsZXJwPQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iZGIuaHRtbCNiZGIuQnJlYWtwb2ludC5kaXNhYmxlWAEAAAAtdHJxPQAAWBcAAAB6aXBmaWxlLlppcEZpbGUuZ2V0aW5mb3JyPQAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5aaXBGaWxlLmdldGluZm9YAQAAAC10cnM9AABYFgAAAG11dGV4Lm11dGV4LnRlc3RhbmRzZXRydD0AAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXV0ZXguaHRtbCNtdXRleC5tdXRleC50ZXN0YW5kc2V0WAEAAAAtdHJ1PQAAWCkAAABsb2dnaW5nLmhhbmRsZXJzLlNvY2tldEhhbmRsZXIubWFrZVNvY2tldHJ2PQAAKGppAQAAamoBAABYYQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5Tb2NrZXRIYW5kbGVyLm1ha2VTb2NrZXRYAQAAAC10cnc9AABYIgAAAHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydFR1cGxlRXF1YWxyeD0AAChqaQEAAGpqAQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRUdXBsZUVxdWFsWAEAAAAtdHJ5PQAAWBgAAABtYWlsYm94Lk1ILnNldF9zZXF1ZW5jZXNyej0AAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTUguc2V0X3NlcXVlbmNlc1gBAAAALXRyez0AAFgqAAAAQ29uZmlnUGFyc2VyLlJhd0NvbmZpZ1BhcnNlci5yZW1vdmVfb3B0aW9ucnw9AAAoamkBAABqagEAAFheAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbmZpZ3BhcnNlci5odG1sI0NvbmZpZ1BhcnNlci5SYXdDb25maWdQYXJzZXIucmVtb3ZlX29wdGlvblgBAAAALXRyfT0AAFgkAAAAcm9ib3RwYXJzZXIuUm9ib3RGaWxlUGFyc2VyLm1vZGlmaWVkcn49AAAoamkBAABqagEAAFhXAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JvYm90cGFyc2VyLmh0bWwjcm9ib3RwYXJzZXIuUm9ib3RGaWxlUGFyc2VyLm1vZGlmaWVkWAEAAAAtdHJ/PQAAWBcAAABubnRwbGliLk5OVFAuZ2V0d2VsY29tZXKAPQAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ubnRwbGliLmh0bWwjbm50cGxpYi5OTlRQLmdldHdlbGNvbWVYAQAAAC10coE9AABYHgAAAG1haWxib3guTUhNZXNzYWdlLmFkZF9zZXF1ZW5jZXKCPQAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NSE1lc3NhZ2UuYWRkX3NlcXVlbmNlWAEAAAAtdHKDPQAAWCwAAAB1cmxsaWIyLkhUVFBEaWdlc3RBdXRoSGFuZGxlci5odHRwX2Vycm9yXzQwMXKEPQAAKGppAQAAamoBAABYWwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5IVFRQRGlnZXN0QXV0aEhhbmRsZXIuaHR0cF9lcnJvcl80MDFYAQAAAC10coU9AABYFgAAAHNlbGVjdC5wb2xsLnVucmVnaXN0ZXJyhj0AAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2VsZWN0Lmh0bWwjc2VsZWN0LnBvbGwudW5yZWdpc3RlclgBAAAALXRyhz0AAFgfAAAAc3ltdGFibGUuU3ltYm9sVGFibGUuZ2V0X2xpbmVub3KIPQAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeW10YWJsZS5odG1sI3N5bXRhYmxlLlN5bWJvbFRhYmxlLmdldF9saW5lbm9YAQAAAC10cok9AABYJQAAAHhtbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlci5zZXRMb2NhbGVyij0AAChqaQEAAGpqAQAAWFsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCN4bWwuc2F4LnhtbHJlYWRlci5YTUxSZWFkZXIuc2V0TG9jYWxlWAEAAAAtdHKLPQAAWBQAAABiZGIuQmRiLnNldF9jb250aW51ZXKMPQAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iZGIuaHRtbCNiZGIuQmRiLnNldF9jb250aW51ZVgBAAAALXRyjT0AAFgNAAAAb2JqZWN0Ll9fb3JfX3KOPQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX29yX19YAQAAAC10co89AABYJwAAAHNzbC5TU0xDb250ZXh0LnNldF9kZWZhdWx0X3ZlcmlmeV9wYXRoc3KQPQAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMQ29udGV4dC5zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHNYAQAAAC10cpE9AABYDwAAAG1haWxib3guTUgubG9ja3KSPQAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NSC5sb2NrWAEAAAAtdHKTPQAAWCIAAABhc3luY2hhdC5hc3luY19jaGF0LmdldF90ZXJtaW5hdG9ycpQ9AAAoamkBAABqagEAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzeW5jaGF0Lmh0bWwjYXN5bmNoYXQuYXN5bmNfY2hhdC5nZXRfdGVybWluYXRvclgBAAAALXRylT0AAFgcAAAAZGF0ZXRpbWUuZGF0ZXRpbWUuX19mb3JtYXRfX3KWPQAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGV0aW1lLl9fZm9ybWF0X19YAQAAAC10cpc9AABYDgAAAG9iamVjdC5fX3Bvc19fcpg9AAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fcG9zX19YAQAAAC10cpk9AABYJgAAAFNvY2tldFNlcnZlci5CYXNlUmVxdWVzdEhhbmRsZXIuaGFuZGxlcpo9AAAoamkBAABqagEAAFhaAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI1NvY2tldFNlcnZlci5CYXNlUmVxdWVzdEhhbmRsZXIuaGFuZGxlWAEAAAAtdHKbPQAAWC8AAAB3c2dpcmVmLnNpbXBsZV9zZXJ2ZXIuV1NHSVJlcXVlc3RIYW5kbGVyLmhhbmRsZXKcPQAAKGppAQAAamoBAABYXgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi5zaW1wbGVfc2VydmVyLldTR0lSZXF1ZXN0SGFuZGxlci5oYW5kbGVYAQAAAC10cp09AABYQgAAAFNpbXBsZVhNTFJQQ1NlcnZlci5TaW1wbGVYTUxSUENTZXJ2ZXIucmVnaXN0ZXJfbXVsdGljYWxsX2Z1bmN0aW9uc3KePQAAKGppAQAAamoBAABYfAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaW1wbGV4bWxycGNzZXJ2ZXIuaHRtbCNTaW1wbGVYTUxSUENTZXJ2ZXIuU2ltcGxlWE1MUlBDU2VydmVyLnJlZ2lzdGVyX211bHRpY2FsbF9mdW5jdGlvbnNYAQAAAC10cp89AABYEwAAAHNlbGVjdC5lcG9sbC5maWxlbm9yoD0AAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2VsZWN0Lmh0bWwjc2VsZWN0LmVwb2xsLmZpbGVub1gBAAAALXRyoT0AAFgoAAAAeG1sLmRvbS5ET01JbXBsZW1lbnRhdGlvbi5jcmVhdGVEb2N1bWVudHKiPQAAKGppAQAAamoBAABYVwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5ET01JbXBsZW1lbnRhdGlvbi5jcmVhdGVEb2N1bWVudFgBAAAALXRyoz0AAFgVAAAAY3Vyc2VzLndpbmRvdy5yZWZyZXNocqQ9AAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cucmVmcmVzaFgBAAAALXRypT0AAFgaAAAAbWltZXRvb2xzLk1lc3NhZ2UuZ2V0cGxpc3Rypj0AAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWltZXRvb2xzLmh0bWwjbWltZXRvb2xzLk1lc3NhZ2UuZ2V0cGxpc3RYAQAAAC10cqc9AABYEgAAAG9iamVjdC5fX2NvbXBsZXhfX3KoPQAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2NvbXBsZXhfX1gBAAAALXRyqT0AAFgiAAAAc2dtbGxpYi5TR01MUGFyc2VyLmNvbnZlcnRfY2hhcnJlZnKqPQAAKGppAQAAamoBAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZ21sbGliLmh0bWwjc2dtbGxpYi5TR01MUGFyc2VyLmNvbnZlcnRfY2hhcnJlZlgBAAAALXRyqz0AAFgXAAAAbWhsaWIuTUgubGlzdHN1YmZvbGRlcnNyrD0AAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWhsaWIuaHRtbCNtaGxpYi5NSC5saXN0c3ViZm9sZGVyc1gBAAAALXRyrT0AAFgXAAAAY3Vyc2VzLnBhbmVsLlBhbmVsLnNob3dyrj0AAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLnBhbmVsLmh0bWwjY3Vyc2VzLnBhbmVsLlBhbmVsLnNob3dYAQAAAC10cq89AABYFAAAAHJlLlJlZ2V4T2JqZWN0Lm1hdGNocrA9AAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlLmh0bWwjcmUuUmVnZXhPYmplY3QubWF0Y2hYAQAAAC10crE9AABYEwAAAG1haWxib3guTWFpbGRpci5hZGRysj0AAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGRpci5hZGRYAQAAAC10crM9AABYJQAAAGNvb2tpZWxpYi5Db29raWVKYXIuYWRkX2Nvb2tpZV9oZWFkZXJytD0AAChqaQEAAGpqAQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llbGliLmh0bWwjY29va2llbGliLkNvb2tpZUphci5hZGRfY29va2llX2hlYWRlclgBAAAALXRytT0AAFgaAAAAc3VuYXUuQVVfcmVhZC5nZXRzYW1wd2lkdGhytj0AAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VuYXUuaHRtbCNzdW5hdS5BVV9yZWFkLmdldHNhbXB3aWR0aFgBAAAALXRytz0AAFgpAAAAeG1sLmRvbS5wdWxsZG9tLkRPTUV2ZW50U3RyZWFtLmV4cGFuZE5vZGVyuD0AAChqaQEAAGpqAQAAWGAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5wdWxsZG9tLmh0bWwjeG1sLmRvbS5wdWxsZG9tLkRPTUV2ZW50U3RyZWFtLmV4cGFuZE5vZGVYAQAAAC10crk9AABYEAAAAG11dGV4Lm11dGV4LnRlc3Ryuj0AAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXV0ZXguaHRtbCNtdXRleC5tdXRleC50ZXN0WAEAAAAtdHK7PQAAWBcAAABpbWFwbGliLklNQVA0Lm5hbWVzcGFjZXK8PQAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5uYW1lc3BhY2VYAQAAAC10cr09AABYFgAAAHJleGVjLlJFeGVjLnNfZXhlY2ZpbGVyvj0AAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmV4ZWMuaHRtbCNyZXhlYy5SRXhlYy5zX2V4ZWNmaWxlWAEAAAAtdHK/PQAAWBgAAABtYWlsYm94Lk1haWxib3guX19pdGVyX19ywD0AAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGJveC5fX2l0ZXJfX1gBAAAALXRywT0AAFgTAAAAbWFpbGJveC5NYWlsYm94LnBvcHLCPQAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsYm94LnBvcFgBAAAALXRywz0AAFgWAAAAZGVjaW1hbC5Db250ZXh0LmRpdm1vZHLEPQAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmRpdm1vZFgBAAAALXRyxT0AAFgOAAAAY21kLkNtZC5wcmVjbWRyxj0AAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY21kLmh0bWwjY21kLkNtZC5wcmVjbWRYAQAAAC10csc9AABYFgAAAGJ6Mi5CWjJGaWxlLnhyZWFkbGluZXNyyD0AAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYnoyLmh0bWwjYnoyLkJaMkZpbGUueHJlYWRsaW5lc1gBAAAALXRyyT0AAFgdAAAAbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3Muc3RhcnRyyj0AAChqaQEAAGpqAQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3Muc3RhcnRYAQAAAC10css9AABYEAAAAGFpZmMuYWlmYy5yZXdpbmRyzD0AAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWlmYy5odG1sI2FpZmMuYWlmYy5yZXdpbmRYAQAAAC10cs09AABYIgAAAHhtbC5kb20uRWxlbWVudC5nZXRBdHRyaWJ1dGVOb2RlTlNyzj0AAChqaQEAAGpqAQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uRWxlbWVudC5nZXRBdHRyaWJ1dGVOb2RlTlNYAQAAAC10cs89AABYGAAAAHBvc2l4ZmlsZS5wb3NpeGZpbGUuZmlsZXLQPQAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wb3NpeGZpbGUuaHRtbCNwb3NpeGZpbGUucG9zaXhmaWxlLmZpbGVYAQAAAC10ctE9AABYGwAAAG11bHRpcHJvY2Vzc2luZy5RdWV1ZS5lbXB0eXLSPQAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuUXVldWUuZW1wdHlYAQAAAC10ctM9AABYKgAAAGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cHLUPQAAKGppAQAAamoBAABYWgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hcmdwYXJzZS5odG1sI2FyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cFgBAAAALXRy1T0AAFgPAAAAb2JqZWN0Ll9fcmFkZF9fctY9AAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fcmFkZF9fWAEAAAAtdHLXPQAAWBIAAABtaGxpYi5Gb2xkZXIuZXJyb3Jy2D0AAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWhsaWIuaHRtbCNtaGxpYi5Gb2xkZXIuZXJyb3JYAQAAAC10ctk9AABYDgAAAGljLklDLnBhcnNldXJscto9AAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ljLmh0bWwjaWMuSUMucGFyc2V1cmxYAQAAAC10cts9AABYFQAAAHR0ay5TdHlsZS50aGVtZV9uYW1lc3LcPQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuU3R5bGUudGhlbWVfbmFtZXNYAQAAAC10ct09AABYFAAAAGFpZmMuYWlmYy5nZXRtYXJrZXJzct49AAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FpZmMuaHRtbCNhaWZjLmFpZmMuZ2V0bWFya2Vyc1gBAAAALXRy3z0AAFgZAAAAdGV4dHdyYXAuVGV4dFdyYXBwZXIud3JhcHLgPQAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZXh0d3JhcC5odG1sI3RleHR3cmFwLlRleHRXcmFwcGVyLndyYXBYAQAAAC10cuE9AABYFAAAAHBpcGVzLlRlbXBsYXRlLmNsb25lcuI9AAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BpcGVzLmh0bWwjcGlwZXMuVGVtcGxhdGUuY2xvbmVYAQAAAC10cuM9AABYIwAAAHNxbGl0ZTMuQ29ubmVjdGlvbi5jcmVhdGVfY29sbGF0aW9ucuQ9AAAoamkBAABqagEAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLkNvbm5lY3Rpb24uY3JlYXRlX2NvbGxhdGlvblgBAAAALXRy5T0AAFgUAAAAcmUuTWF0Y2hPYmplY3QuZ3JvdXBy5j0AAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmUuaHRtbCNyZS5NYXRjaE9iamVjdC5ncm91cFgBAAAALXRy5z0AAFgkAAAAQ29uZmlnUGFyc2VyLlJhd0NvbmZpZ1BhcnNlci5vcHRpb25zcug9AAAoamkBAABqagEAAFhYAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbmZpZ3BhcnNlci5odG1sI0NvbmZpZ1BhcnNlci5SYXdDb25maWdQYXJzZXIub3B0aW9uc1gBAAAALXRy6T0AAFgTAAAAZGJoYXNoLmRiaGFzaC5maXJzdHLqPQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYmhhc2guaHRtbCNkYmhhc2guZGJoYXNoLmZpcnN0WAEAAAAtdHLrPQAAWA0AAABvYmplY3QuX19ndF9fcuw9AAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fZ3RfX1gBAAAALXRy7T0AAFgPAAAAY21kLkNtZC5kZWZhdWx0cu49AAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NtZC5odG1sI2NtZC5DbWQuZGVmYXVsdFgBAAAALXRy7z0AAFgSAAAAbG9nZ2luZy5Mb2dnZXIubG9ncvA9AAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkxvZ2dlci5sb2dYAQAAAC10cvE9AABYCgAAAGZpbGUuZmx1c2hy8j0AAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNmaWxlLmZsdXNoWAEAAAAtdHLzPQAAWCEAAABjYWxlbmRhci5IVE1MQ2FsZW5kYXIuZm9ybWF0bW9udGhy9D0AAChqaQEAAGpqAQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci5IVE1MQ2FsZW5kYXIuZm9ybWF0bW9udGhYAQAAAC10cvU9AABYKQAAAGRlY2ltYWwuQ29udGV4dC5jcmVhdGVfZGVjaW1hbF9mcm9tX2Zsb2F0cvY9AAAoamkBAABqagEAAFhYAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQuY3JlYXRlX2RlY2ltYWxfZnJvbV9mbG9hdFgBAAAALXRy9z0AAFgRAAAAaGFzaGxpYi5oYXNoLmNvcHly+D0AAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaGFzaGxpYi5odG1sI2hhc2hsaWIuaGFzaC5jb3B5WAEAAAAtdHL5PQAAWBoAAABsb2dnaW5nLlN0cmVhbUhhbmRsZXIuZW1pdHL6PQAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5TdHJlYW1IYW5kbGVyLmVtaXRYAQAAAC10cvs9AABYDAAAAHNoYS5zaGEuY29weXL8PQAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaGEuaHRtbCNzaGEuc2hhLmNvcHlYAQAAAC10cv09AABYHQAAAHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydE5vdElucv49AAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0Tm90SW5YAQAAAC10cv89AABYGwAAAGxvZ2dpbmcuTG9nZ2VyLmlzRW5hYmxlZEZvcnIAPgAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5Mb2dnZXIuaXNFbmFibGVkRm9yWAEAAAAtdHIBPgAAWBsAAABqc29uLkpTT05EZWNvZGVyLnJhd19kZWNvZGVyAj4AAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvanNvbi5odG1sI2pzb24uSlNPTkRlY29kZXIucmF3X2RlY29kZVgBAAAALXRyAz4AAFgYAAAAcmZjODIyLk1lc3NhZ2UuZ2V0aGVhZGVycgQ+AAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JmYzgyMi5odG1sI3JmYzgyMi5NZXNzYWdlLmdldGhlYWRlclgBAAAALXRyBT4AAFgaAAAAdGFyZmlsZS5UYXJGaWxlLmV4dHJhY3RhbGxyBj4AAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuVGFyRmlsZS5leHRyYWN0YWxsWAEAAAAtdHIHPgAAWBYAAABoYXNobGliLmhhc2guaGV4ZGlnZXN0cgg+AAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2hhc2hsaWIuaHRtbCNoYXNobGliLmhhc2guaGV4ZGlnZXN0WAEAAAAtdHIJPgAAWCsAAABvc3NhdWRpb2Rldi5vc3NfbWl4ZXJfZGV2aWNlLnN0ZXJlb2NvbnRyb2xzcgo+AAAoamkBAABqagEAAFheAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zc2F1ZGlvZGV2Lmh0bWwjb3NzYXVkaW9kZXYub3NzX21peGVyX2RldmljZS5zdGVyZW9jb250cm9sc1gBAAAALXRyCz4AAFghAAAAaHR0cGxpYi5IVFRQQ29ubmVjdGlvbi5zZXRfdHVubmVscgw+AAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0dHBsaWIuaHRtbCNodHRwbGliLkhUVFBDb25uZWN0aW9uLnNldF90dW5uZWxYAQAAAC10cg0+AABYGAAAAHR0ay5TdHlsZS50aGVtZV9zZXR0aW5nc3IOPgAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuU3R5bGUudGhlbWVfc2V0dGluZ3NYAQAAAC10cg8+AABYFAAAAHR0ay5Db21ib2JveC5jdXJyZW50chA+AAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5Db21ib2JveC5jdXJyZW50WAEAAAAtdHIRPgAAWCEAAABzeW10YWJsZS5TeW1ib2xUYWJsZS5nZXRfY2hpbGRyZW5yEj4AAChqaQEAAGpqAQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3ltdGFibGUuaHRtbCNzeW10YWJsZS5TeW1ib2xUYWJsZS5nZXRfY2hpbGRyZW5YAQAAAC10chM+AABYFAAAAGltYXBsaWIuSU1BUDQudGhyZWFkchQ+AAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LnRocmVhZFgBAAAALXRyFT4AAFgWAAAAcHJvZmlsZS5Qcm9maWxlLnJ1bmN0eHIWPgAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wcm9maWxlLmh0bWwjcHJvZmlsZS5Qcm9maWxlLnJ1bmN0eFgBAAAALXRyFz4AAFgVAAAAZGF0ZXRpbWUudGltZS5yZXBsYWNlchg+AAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUudGltZS5yZXBsYWNlWAEAAAAtdHIZPgAAWBYAAABjc3YuY3N2d3JpdGVyLndyaXRlcm93cho+AAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nzdi5odG1sI2Nzdi5jc3Z3cml0ZXIud3JpdGVyb3dYAQAAAC10chs+AABYFwAAAHRlbG5ldGxpYi5UZWxuZXQuZmlsZW5vchw+AAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RlbG5ldGxpYi5odG1sI3RlbG5ldGxpYi5UZWxuZXQuZmlsZW5vWAEAAAAtdHIdPgAAWBsAAABFYXN5RGlhbG9ncy5Qcm9ncmVzc0Jhci5zZXRyHj4AAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZWFzeWRpYWxvZ3MuaHRtbCNFYXN5RGlhbG9ncy5Qcm9ncmVzc0Jhci5zZXRYAQAAAC10ch8+AABYNwAAAFNpbXBsZVhNTFJQQ1NlcnZlci5TaW1wbGVYTUxSUENTZXJ2ZXIucmVnaXN0ZXJfZnVuY3Rpb25yID4AAChqaQEAAGpqAQAAWHEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2ltcGxleG1scnBjc2VydmVyLmh0bWwjU2ltcGxlWE1MUlBDU2VydmVyLlNpbXBsZVhNTFJQQ1NlcnZlci5yZWdpc3Rlcl9mdW5jdGlvblgBAAAALXRyIT4AAFgTAAAAY3Vyc2VzLndpbmRvdy5kZWxjaHIiPgAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmRlbGNoWAEAAAAtdHIjPgAAWBIAAABtbWFwLm1tYXAucmVhZGxpbmVyJD4AAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbW1hcC5odG1sI21tYXAubW1hcC5yZWFkbGluZVgBAAAALXRyJT4AAFghAAAAcm9ib3RwYXJzZXIuUm9ib3RGaWxlUGFyc2VyLm10aW1lciY+AAAoamkBAABqagEAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JvYm90cGFyc2VyLmh0bWwjcm9ib3RwYXJzZXIuUm9ib3RGaWxlUGFyc2VyLm10aW1lWAEAAAAtdHInPgAAWCIAAABkb2N0ZXN0Lk91dHB1dENoZWNrZXIuY2hlY2tfb3V0cHV0cig+AAAoamkBAABqagEAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0Lk91dHB1dENoZWNrZXIuY2hlY2tfb3V0cHV0WAEAAAAtdHIpPgAAWBQAAABtc2lsaWIuRGlhbG9nLmJpdG1hcHIqPgAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuRGlhbG9nLmJpdG1hcFgBAAAALXRyKz4AAFgTAAAAY3Vyc2VzLndpbmRvdy5pbnNjaHIsPgAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93Lmluc2NoWAEAAAAtdHItPgAAWAkAAABkaWN0LmtleXNyLj4AAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNkaWN0LmtleXNYAQAAAC10ci8+AABYEQAAAHBhcnNlci5TVC5jb21waWxlcjA+AAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BhcnNlci5odG1sI3BhcnNlci5TVC5jb21waWxlWAEAAAAtdHIxPgAAWBkAAAB0aHJlYWRpbmcuVGhyZWFkLmlzRGFlbW9ucjI+AAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5UaHJlYWQuaXNEYWVtb25YAQAAAC10cjM+AABYEgAAAHJlLlJlZ2V4T2JqZWN0LnN1YnI0PgAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sI3JlLlJlZ2V4T2JqZWN0LnN1YlgBAAAALXRyNT4AAFgZAAAAZGVjaW1hbC5EZWNpbWFsLmlzX3NpZ25lZHI2PgAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLmlzX3NpZ25lZFgBAAAALXRyNz4AAFgYAAAAbWFpbGJveC5CYWJ5bC5nZXRfbGFiZWxzcjg+AAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94LkJhYnlsLmdldF9sYWJlbHNYAQAAAC10cjk+AABYGQAAAHR0ay5UcmVldmlldy5nZXRfY2hpbGRyZW5yOj4AAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLlRyZWV2aWV3LmdldF9jaGlsZHJlblgBAAAALXRyOz4AAFgrAAAARnJhbWVXb3JrLlNjcm9sbGVkV2luZG93LnNjcm9sbGJhcl9jYWxsYmFja3I8PgAAKGppAQAAamoBAABYXAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcmFtZXdvcmsuaHRtbCNGcmFtZVdvcmsuU2Nyb2xsZWRXaW5kb3cuc2Nyb2xsYmFyX2NhbGxiYWNrWAEAAAAtdHI9PgAAWB8AAABwcHJpbnQuUHJldHR5UHJpbnRlci5pc3JlYWRhYmxlcj4+AAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BwcmludC5odG1sI3BwcmludC5QcmV0dHlQcmludGVyLmlzcmVhZGFibGVYAQAAAC10cj8+AABYJQAAAG1zaWxpYi5EYXRhYmFzZS5HZXRTdW1tYXJ5SW5mb3JtYXRpb25yQD4AAChqaQEAAGpqAQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLkRhdGFiYXNlLkdldFN1bW1hcnlJbmZvcm1hdGlvblgBAAAALXRyQT4AAFgRAAAAdHRrLlRyZWV2aWV3Lm1vdmVyQj4AAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLlRyZWV2aWV3Lm1vdmVYAQAAAC10ckM+AABYEgAAAG9iamVjdC5fX3Jyc2hpZnRfX3JEPgAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX3Jyc2hpZnRfX1gBAAAALXRyRT4AAFgSAAAAaW8uVGV4dElPQmFzZS50ZWxsckY+AAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uVGV4dElPQmFzZS50ZWxsWAEAAAAtdHJHPgAAWB0AAABmcmFjdGlvbnMuRnJhY3Rpb24uZnJvbV9mbG9hdHJIPgAAKGppAQAAamoBAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcmFjdGlvbnMuaHRtbCNmcmFjdGlvbnMuRnJhY3Rpb24uZnJvbV9mbG9hdFgBAAAALXRyST4AAFgWAAAAaW8uQnVmZmVyZWRSZWFkZXIucmVhZHJKPgAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pby5odG1sI2lvLkJ1ZmZlcmVkUmVhZGVyLnJlYWRYAQAAAC10cks+AABYGwAAAHByb2ZpbGUuUHJvZmlsZS5wcmludF9zdGF0c3JMPgAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wcm9maWxlLmh0bWwjcHJvZmlsZS5Qcm9maWxlLnByaW50X3N0YXRzWAEAAAAtdHJNPgAAWBMAAAB0dGsuVHJlZXZpZXcuZGVsZXRlck4+AAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5UcmVldmlldy5kZWxldGVYAQAAAC10ck8+AABYLgAAAHhtbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5FbGVtZW50RGVjbEhhbmRsZXJyUD4AAChqaQEAAGpqAQAAWF0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5FbGVtZW50RGVjbEhhbmRsZXJYAQAAAC10clE+AABYGgAAAGRlY2ltYWwuQ29udGV4dC5sb2dpY2FsX29yclI+AAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQubG9naWNhbF9vclgBAAAALXRyUz4AAFgWAAAAY3Vyc2VzLndpbmRvdy5jbHJ0b2VvbHJUPgAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmNscnRvZW9sWAEAAAAtdHJVPgAAWBwAAAB1cmxsaWIyLlJlcXVlc3QuZ2V0X3NlbGVjdG9yclY+AAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLlJlcXVlc3QuZ2V0X3NlbGVjdG9yWAEAAAAtdHJXPgAAWBkAAAB1cmxsaWIyLkJhc2VIYW5kbGVyLmNsb3Nlclg+AAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLkJhc2VIYW5kbGVyLmNsb3NlWAEAAAAtdHJZPgAAWAsAAABkbC5kbC5jbG9zZXJaPgAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kbC5odG1sI2RsLmRsLmNsb3NlWAEAAAAtdHJbPgAAWBMAAABhc3luY2hhdC5maWZvLmZpcnN0clw+AAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzeW5jaGF0Lmh0bWwjYXN5bmNoYXQuZmlmby5maXJzdFgBAAAALXRyXT4AAFgSAAAAaW1hcGxpYi5JTUFQNC5ub29wcl4+AAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0Lm5vb3BYAQAAAC10cl8+AABYJgAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50VHJlZS5maW5kcmA+AAAoamkBAABqagEAAFhjAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50VHJlZS5maW5kWAEAAAAtdHJhPgAAWBEAAABtYWlsYm94Lk1NREYubG9ja3JiPgAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NTURGLmxvY2tYAQAAAC10cmM+AABYDgAAAGZyb3plbnNldC5jb3B5cmQ+AAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZnJvemVuc2V0LmNvcHlYAQAAAC10cmU+AABYKgAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50VHJlZS5pdGVyZmluZHJmPgAAKGppAQAAamoBAABYZwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudFRyZWUuaXRlcmZpbmRYAQAAAC10cmc+AABYIwAAAFNvY2tldFNlcnZlci5CYXNlU2VydmVyLnNlcnZlcl9iaW5kcmg+AAAoamkBAABqagEAAFhXAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI1NvY2tldFNlcnZlci5CYXNlU2VydmVyLnNlcnZlcl9iaW5kWAEAAAAtdHJpPgAAWBwAAAB1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRUcnVlcmo+AAAoamkBAABqagEAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0VHJ1ZVgBAAAALXRyaz4AAFgdAAAAZGVjaW1hbC5EZWNpbWFsLmNvbXBhcmVfdG90YWxybD4AAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5jb21wYXJlX3RvdGFsWAEAAAAtdHJtPgAAWBoAAABzeW10YWJsZS5DbGFzcy5nZXRfbWV0aG9kc3JuPgAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeW10YWJsZS5odG1sI3N5bXRhYmxlLkNsYXNzLmdldF9tZXRob2RzWAEAAAAtdHJvPgAAWB4AAABic2RkYi5ic2RkYm9iamVjdC5zZXRfbG9jYXRpb25ycD4AAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYnNkZGIuaHRtbCNic2RkYi5ic2RkYm9iamVjdC5zZXRfbG9jYXRpb25YAQAAAC10cnE+AABYGwAAAGltYXBsaWIuSU1BUDQuc2V0YW5ub3RhdGlvbnJyPgAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5zZXRhbm5vdGF0aW9uWAEAAAAtdHJzPgAAWBIAAABjaHVuay5DaHVuay5pc2F0dHlydD4AAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2h1bmsuaHRtbCNjaHVuay5DaHVuay5pc2F0dHlYAQAAAC10cnU+AABYHAAAAHNxbGl0ZTMuQ3Vyc29yLmV4ZWN1dGVzY3JpcHRydj4AAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuQ3Vyc29yLmV4ZWN1dGVzY3JpcHRYAQAAAC10cnc+AABYFAAAAGlvLlJhd0lPQmFzZS5yZWFkYWxscng+AAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uUmF3SU9CYXNlLnJlYWRhbGxYAQAAAC10cnk+AABYKwAAAHhtbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5HZXRJbnB1dENvbnRleHRyej4AAChqaQEAAGpqAQAAWFoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5HZXRJbnB1dENvbnRleHRYAQAAAC10cns+AABYGAAAAHR0ay5TdHlsZS5lbGVtZW50X2NyZWF0ZXJ8PgAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuU3R5bGUuZWxlbWVudF9jcmVhdGVYAQAAAC10cn0+AABYFwAAAHNxbGl0ZTMuQ3Vyc29yLmZldGNob25lcn4+AAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLkN1cnNvci5mZXRjaG9uZVgBAAAALXRyfz4AAFgSAAAAY3Vyc2VzLndpbmRvdy5pbmNocoA+AAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cuaW5jaFgBAAAALXRygT4AAFgaAAAAeG1sLmRvbS5Ob2RlLmhhc0NoaWxkTm9kZXNygj4AAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uTm9kZS5oYXNDaGlsZE5vZGVzWAEAAAAtdHKDPgAAWCAAAABmb3JtYXR0ZXIuZm9ybWF0dGVyLmFkZF9ob3JfcnVsZXKEPgAAKGppAQAAamoBAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIuZm9ybWF0dGVyLmFkZF9ob3JfcnVsZVgBAAAALXRyhT4AAFgjAAAAc2dtbGxpYi5TR01MUGFyc2VyLnVua25vd25fc3RhcnR0YWdyhj4AAChqaQEAAGpqAQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2dtbGxpYi5odG1sI3NnbWxsaWIuU0dNTFBhcnNlci51bmtub3duX3N0YXJ0dGFnWAEAAAAtdHKHPgAAWCEAAAB1bml0dGVzdC5UZXN0UmVzdWx0Lndhc1N1Y2Nlc3NmdWxyiD4AAChqaQEAAGpqAQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0UmVzdWx0Lndhc1N1Y2Nlc3NmdWxYAQAAAC10cok+AABYEgAAAGZsLmZvcm0uYWRkX2Nob2ljZXKKPgAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbC5odG1sI2ZsLmZvcm0uYWRkX2Nob2ljZVgBAAAALXRyiz4AAFgXAAAAdGFyZmlsZS5UYXJGaWxlLmV4dHJhY3RyjD4AAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuVGFyRmlsZS5leHRyYWN0WAEAAAAtdHKNPgAAWCIAAABkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIucmVwb3J0X3N0YXJ0co4+AAAoamkBAABqagEAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIucmVwb3J0X3N0YXJ0WAEAAAAtdHKPPgAAWBkAAABkZWNpbWFsLkNvbnRleHQubmV4dF9wbHVzcpA+AAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQubmV4dF9wbHVzWAEAAAAtdHKRPgAAWCIAAABhcmdwYXJzZS5Bcmd1bWVudFBhcnNlci5wcmludF9oZWxwcpI+AAAoamkBAABqagEAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FyZ3BhcnNlLmh0bWwjYXJncGFyc2UuQXJndW1lbnRQYXJzZXIucHJpbnRfaGVscFgBAAAALXRykz4AAFgpAAAAeG1sLnNheC54bWxyZWFkZXIuWE1MUmVhZGVyLmdldERUREhhbmRsZXJylD4AAChqaQEAAGpqAQAAWF8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCN4bWwuc2F4LnhtbHJlYWRlci5YTUxSZWFkZXIuZ2V0RFRESGFuZGxlclgBAAAALXRylT4AAFgVAAAAdHRrLlByb2dyZXNzYmFyLnN0YXJ0cpY+AAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5Qcm9ncmVzc2Jhci5zdGFydFgBAAAALXRylz4AAFgUAAAAbWFpbGJveC5NYWlsYm94LmtleXNymD4AAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGJveC5rZXlzWAEAAAAtdHKZPgAAWBoAAABlbWFpbC5oZWFkZXIuSGVhZGVyLl9fbmVfX3KaPgAAKGppAQAAamoBAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5oZWFkZXIuaHRtbCNlbWFpbC5oZWFkZXIuSGVhZGVyLl9fbmVfX1gBAAAALXRymz4AAFgpAAAAeG1sLnNheC54bWxyZWFkZXIuSW5jcmVtZW50YWxQYXJzZXIuY2xvc2VynD4AAChqaQEAAGpqAQAAWF8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCN4bWwuc2F4LnhtbHJlYWRlci5JbmNyZW1lbnRhbFBhcnNlci5jbG9zZVgBAAAALXRynT4AAFgeAAAAU29ja2V0U2VydmVyLkJhc2VTZXJ2ZXIuZmlsZW5vcp4+AAAoamkBAABqagEAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI1NvY2tldFNlcnZlci5CYXNlU2VydmVyLmZpbGVub1gBAAAALXRynz4AAFgRAAAAYmRiLkJkYi5zdG9wX2hlcmVyoD4AAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYi5zdG9wX2hlcmVYAQAAAC10cqE+AABYHgAAAGZvcm1hdHRlci5mb3JtYXR0ZXIucG9wX21hcmdpbnKiPgAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIuZm9ybWF0dGVyLnBvcF9tYXJnaW5YAQAAAC10cqM+AABYEQAAAGJkYi5CZGIudXNlcl9jYWxscqQ+AAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JkYi5odG1sI2JkYi5CZGIudXNlcl9jYWxsWAEAAAAtdHKlPgAAWB0AAABkYXRldGltZS5kYXRldGltZS5pc29jYWxlbmRhcnKmPgAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGV0aW1lLmlzb2NhbGVuZGFyWAEAAAAtdHKnPgAAWBAAAABmbC5mb3JtLmFkZF90ZXh0cqg+AAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZsLmh0bWwjZmwuZm9ybS5hZGRfdGV4dFgBAAAALXRyqT4AAFg4AAAARG9jWE1MUlBDU2VydmVyLkRvY1hNTFJQQ1NlcnZlci5zZXRfc2VydmVyX2RvY3VtZW50YXRpb25yqj4AAChqaQEAAGpqAQAAWG8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jeG1scnBjc2VydmVyLmh0bWwjRG9jWE1MUlBDU2VydmVyLkRvY1hNTFJQQ1NlcnZlci5zZXRfc2VydmVyX2RvY3VtZW50YXRpb25YAQAAAC10cqs+AABYFAAAAGFycmF5LmFycmF5LnRvc3RyaW5ncqw+AAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FycmF5Lmh0bWwjYXJyYXkuYXJyYXkudG9zdHJpbmdYAQAAAC10cq0+AABYGAAAAHRocmVhZGluZy5UaHJlYWQuaXNBbGl2ZXKuPgAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuVGhyZWFkLmlzQWxpdmVYAQAAAC10cq8+AABYDwAAAG9iamVjdC5fX2lwb3dfX3KwPgAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2lwb3dfX1gBAAAALXRysT4AAFgQAAAAYmRiLkJkYi5zZXRfcXVpdHKyPgAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iZGIuaHRtbCNiZGIuQmRiLnNldF9xdWl0WAEAAAAtdHKzPgAAWBYAAABkZWNpbWFsLkRlY2ltYWwuaXNfbmFucrQ+AAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwuaXNfbmFuWAEAAAAtdHK1PgAAWBcAAABjdXJzZXMucGFuZWwuUGFuZWwubW92ZXK2PgAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMucGFuZWwuaHRtbCNjdXJzZXMucGFuZWwuUGFuZWwubW92ZVgBAAAALXRytz4AAFgeAAAAaHR0cGxpYi5IVFRQQ29ubmVjdGlvbi5yZXF1ZXN0crg+AAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0dHBsaWIuaHRtbCNodHRwbGliLkhUVFBDb25uZWN0aW9uLnJlcXVlc3RYAQAAAC10crk+AABYJQAAAG11bHRpcHJvY2Vzc2luZy5wb29sLkFzeW5jUmVzdWx0LndhaXRyuj4AAChqaQEAAGpqAQAAWFwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLnBvb2wuQXN5bmNSZXN1bHQud2FpdFgBAAAALXRyuz4AAFgdAAAAeGRybGliLlVucGFja2VyLnVucGFja19mYXJyYXlyvD4AAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveGRybGliLmh0bWwjeGRybGliLlVucGFja2VyLnVucGFja19mYXJyYXlYAQAAAC10cr0+AABYDQAAAGZsb2F0LmZyb21oZXhyvj4AAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNmbG9hdC5mcm9taGV4WAEAAAAtdHK/PgAAWCIAAABsb2dnaW5nLmxvZ2dpbmcuRm9ybWF0dGVyLl9faW5pdF9fcsA+AAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9ob3d0by9sb2dnaW5nLmh0bWwjbG9nZ2luZy5sb2dnaW5nLkZvcm1hdHRlci5fX2luaXRfX1gBAAAALXRywT4AAFgaAAAAdGVsbmV0bGliLlRlbG5ldC5yZWFkX3NvbWVywj4AAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGVsbmV0bGliLmh0bWwjdGVsbmV0bGliLlRlbG5ldC5yZWFkX3NvbWVYAQAAAC10csM+AABYGwAAAHNzbC5TU0xDb250ZXh0LmdldF9jYV9jZXJ0c3LEPgAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMQ29udGV4dC5nZXRfY2FfY2VydHNYAQAAAC10csU+AABYIQAAAGVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5nZXRfY2hhcnNldHLGPgAAKGppAQAAamoBAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5NZXNzYWdlLmdldF9jaGFyc2V0WAEAAAAtdHLHPgAAWBIAAABmdHBsaWIuRlRQLnZvaWRjbWRyyD4AAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnRwbGliLmh0bWwjZnRwbGliLkZUUC52b2lkY21kWAEAAAAtdHLJPgAAWB8AAAB4bWwuZG9tLkRvY3VtZW50LmNyZWF0ZVRleHROb2Rlcso+AAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkRvY3VtZW50LmNyZWF0ZVRleHROb2RlWAEAAAAtdHLLPgAAWBcAAAB1bml0dGVzdC5UZXN0Q2FzZS5zZXRVcHLMPgAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLnNldFVwWAEAAAAtdHLNPgAAWCEAAABtaGxpYi5Gb2xkZXIuZ2V0c2VxdWVuY2VzZmlsZW5hbWVyzj4AAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWhsaWIuaHRtbCNtaGxpYi5Gb2xkZXIuZ2V0c2VxdWVuY2VzZmlsZW5hbWVYAQAAAC10cs8+AABYDwAAAG9iamVjdC5fX2hhc2hfX3LQPgAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2hhc2hfX1gBAAAALXRy0T4AAFgWAAAAaW1hcGxpYi5JTUFQNC5yZWFkbGluZXLSPgAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5yZWFkbGluZVgBAAAALXRy0z4AAFgVAAAAbG9nZ2luZy5IYW5kbGVyLmNsb3NlctQ+AAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkhhbmRsZXIuY2xvc2VYAQAAAC10ctU+AABYFAAAAGltYXBsaWIuSU1BUDQuYXBwZW5kctY+AAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LmFwcGVuZFgBAAAALXRy1z4AAFglAAAAaHR0cGxpYi5IVFRQQ29ubmVjdGlvbi5zZXRfZGVidWdsZXZlbHLYPgAAKGppAQAAamoBAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odHRwbGliLmh0bWwjaHR0cGxpYi5IVFRQQ29ubmVjdGlvbi5zZXRfZGVidWdsZXZlbFgBAAAALXRy2T4AAFgxAAAAY29va2llbGliLkRlZmF1bHRDb29raWVQb2xpY3kuc2V0X2FsbG93ZWRfZG9tYWluc3LaPgAAKGppAQAAamoBAABYYgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuRGVmYXVsdENvb2tpZVBvbGljeS5zZXRfYWxsb3dlZF9kb21haW5zWAEAAAAtdHLbPgAAWC0AAAB4bWwuc2F4LnhtbHJlYWRlci5YTUxSZWFkZXIuZ2V0RW50aXR5UmVzb2x2ZXJy3D4AAChqaQEAAGpqAQAAWGMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCN4bWwuc2F4LnhtbHJlYWRlci5YTUxSZWFkZXIuZ2V0RW50aXR5UmVzb2x2ZXJYAQAAAC10ct0+AABYGgAAAHR0ay5UcmVldmlldy5zZWxlY3Rpb25fYWRkct4+AAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5UcmVldmlldy5zZWxlY3Rpb25fYWRkWAEAAAAtdHLfPgAAWBQAAABkZWNpbWFsLkNvbnRleHQuY29weXLgPgAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmNvcHlYAQAAAC10cuE+AABYJgAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50Lml0ZXJmaW5kcuI+AAAoamkBAABqagEAAFhjAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50Lml0ZXJmaW5kWAEAAAAtdHLjPgAAWBIAAABtdXRleC5tdXRleC51bmxvY2ty5D4AAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXV0ZXguaHRtbCNtdXRleC5tdXRleC51bmxvY2tYAQAAAC10cuU+AABYGAAAAHJmYzgyMi5NZXNzYWdlLmlzY29tbWVudHLmPgAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZmM4MjIuaHRtbCNyZmM4MjIuTWVzc2FnZS5pc2NvbW1lbnRYAQAAAC10cuc+AABYIQAAAG1zaWxpYi5TdW1tYXJ5SW5mb3JtYXRpb24uUGVyc2lzdHLoPgAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuU3VtbWFyeUluZm9ybWF0aW9uLlBlcnNpc3RYAQAAAC10cuk+AABYEgAAAG1lbW9yeXZpZXcudG9ieXRlc3LqPgAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI21lbW9yeXZpZXcudG9ieXRlc1gBAAAALXRy6z4AAFgSAAAAaW1hcGxpYi5JTUFQNC5zZW5kcuw+AAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LnNlbmRYAQAAAC10cu0+AABYGwAAAENvb2tpZS5Nb3JzZWwuaXNSZXNlcnZlZEtleXLuPgAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWUuaHRtbCNDb29raWUuTW9yc2VsLmlzUmVzZXJ2ZWRLZXlYAQAAAC10cu8+AABYEgAAAG9iamVjdC5fX3VuaWNvZGVfX3LwPgAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX3VuaWNvZGVfX1gBAAAALXRy8T4AAFgXAAAAaW8uQnVmZmVyZWRXcml0ZXIuZmx1c2hy8j4AAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW8uaHRtbCNpby5CdWZmZXJlZFdyaXRlci5mbHVzaFgBAAAALXRy8z4AAFgXAAAAdW5pdHRlc3QuVGVzdENhc2UuZGVidWdy9D4AAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5kZWJ1Z1gBAAAALXRy9T4AAFgdAAAAYmRiLkJkYi5jbGVhcl9hbGxfZmlsZV9icmVha3Ny9j4AAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYi5jbGVhcl9hbGxfZmlsZV9icmVha3NYAQAAAC10cvc+AABYFgAAAGJkYi5CZGIudXNlcl9leGNlcHRpb25y+D4AAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYi51c2VyX2V4Y2VwdGlvblgBAAAALXRy+T4AAFgeAAAAdXJsbGliMi5CYXNlSGFuZGxlci5hZGRfcGFyZW50cvo+AAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLkJhc2VIYW5kbGVyLmFkZF9wYXJlbnRYAQAAAC10cvs+AABYEwAAAG1obGliLk1ILm9wZW5mb2xkZXJy/D4AAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWhsaWIuaHRtbCNtaGxpYi5NSC5vcGVuZm9sZGVyWAEAAAAtdHL9PgAAWBUAAABsb2dnaW5nLkxvZ2dlci5oYW5kbGVy/j4AAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuTG9nZ2VyLmhhbmRsZVgBAAAALXRy/z4AAFgZAAAAdHRrLlRyZWV2aWV3LmlkZW50aWZ5X3Jvd3IAPwAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuVHJlZXZpZXcuaWRlbnRpZnlfcm93WAEAAAAtdHIBPwAAWA0AAABpYy5JQy5tYXBmaWxlcgI/AAAoamkBAABqagEAAFg3AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ljLmh0bWwjaWMuSUMubWFwZmlsZVgBAAAALXRyAz8AAFgTAAAAZmwuZm9ybS5mcmVlemVfZm9ybXIEPwAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbC5odG1sI2ZsLmZvcm0uZnJlZXplX2Zvcm1YAQAAAC10cgU/AABYMAAAAFNpbXBsZUhUVFBTZXJ2ZXIuU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyLmRvX0dFVHIGPwAAKGppAQAAamoBAABYaAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaW1wbGVodHRwc2VydmVyLmh0bWwjU2ltcGxlSFRUUFNlcnZlci5TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIuZG9fR0VUWAEAAAAtdHIHPwAAWBYAAABjdXJzZXMud2luZG93LmVjaG9jaGFycgg/AAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cuZWNob2NoYXJYAQAAAC10cgk/AABYGwAAAHVybHBhcnNlLlBhcnNlUmVzdWx0LmdldHVybHIKPwAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxwYXJzZS5odG1sI3VybHBhcnNlLlBhcnNlUmVzdWx0LmdldHVybFgBAAAALXRyCz8AAFgZAAAAZW1haWwucGFyc2VyLlBhcnNlci5wYXJzZXIMPwAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5wYXJzZXIuaHRtbCNlbWFpbC5wYXJzZXIuUGFyc2VyLnBhcnNlWAEAAAAtdHINPwAAWBIAAAB0cmFjZS5UcmFjZS5ydW5jdHhyDj8AAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHJhY2UuaHRtbCN0cmFjZS5UcmFjZS5ydW5jdHhYAQAAAC10cg8/AABYJgAAAHhtbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlci5zZXRGZWF0dXJlchA/AAAoamkBAABqagEAAFhcAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuWE1MUmVhZGVyLnNldEZlYXR1cmVYAQAAAC10chE/AABYEwAAAG1haWxib3guTWFpbGJveC5hZGRyEj8AAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGJveC5hZGRYAQAAAC10chM/AABYFQAAAHBpY2tsZS5VbnBpY2tsZXIubG9hZHIUPwAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9waWNrbGUuaHRtbCNwaWNrbGUuVW5waWNrbGVyLmxvYWRYAQAAAC10chU/AABYEwAAAGltYXBsaWIuSU1BUDQuc3RvcmVyFj8AAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQuc3RvcmVYAQAAAC10chc/AABYJQAAAG9zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2Uub2J1ZmZyZWVyGD8AAChqaQEAAGpqAQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3NzYXVkaW9kZXYuaHRtbCNvc3NhdWRpb2Rldi5vc3NfYXVkaW9fZGV2aWNlLm9idWZmcmVlWAEAAAAtdHIZPwAAWBkAAABmb3JtYXR0ZXIud3JpdGVyLm5ld19mb250cho/AAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Zvcm1hdHRlci5odG1sI2Zvcm1hdHRlci53cml0ZXIubmV3X2ZvbnRYAQAAAC10chs/AABYJQAAAHhtbC5kb20uRG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWVyHD8AAChqaQEAAGpqAQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uRG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWVYAQAAAC10ch0/AABYKwAAAHhtbC5zYXguaGFuZGxlci5Db250ZW50SGFuZGxlci5zdGFydEVsZW1lbnRyHj8AAChqaQEAAGpqAQAAWGIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLkNvbnRlbnRIYW5kbGVyLnN0YXJ0RWxlbWVudFgBAAAALXRyHz8AAFgXAAAAemlwZmlsZS5aaXBGaWxlLmV4dHJhY3RyID8AAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGZpbGUuWmlwRmlsZS5leHRyYWN0WAEAAAAtdHIhPwAAWCcAAABzcWxpdGUzLkNvbm5lY3Rpb24uc2V0X3Byb2dyZXNzX2hhbmRsZXJyIj8AAChqaQEAAGpqAQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuQ29ubmVjdGlvbi5zZXRfcHJvZ3Jlc3NfaGFuZGxlclgBAAAALXRyIz8AAFgUAAAAaWMuSUMubWFwdHlwZWNyZWF0b3JyJD8AAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaWMuaHRtbCNpYy5JQy5tYXB0eXBlY3JlYXRvclgBAAAALXRyJT8AAFgWAAAAZGVjaW1hbC5EZWNpbWFsLnJvdGF0ZXImPwAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLnJvdGF0ZVgBAAAALXRyJz8AAFghAAAAdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0TGVzc0VxdWFscig/AAAoamkBAABqagEAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0TGVzc0VxdWFsWAEAAAAtdHIpPwAAWBkAAAB4bWwuZG9tLk5vZGUucmVwbGFjZUNoaWxkcio/AAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLk5vZGUucmVwbGFjZUNoaWxkWAEAAAAtdHIrPwAAWBgAAABjb2xsZWN0aW9ucy5kZXF1ZS5leHRlbmRyLD8AAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5kZXF1ZS5leHRlbmRYAQAAAC10ci0/AABYDgAAAGZ0cGxpYi5GVFAucHdkci4/AAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z0cGxpYi5odG1sI2Z0cGxpYi5GVFAucHdkWAEAAAAtdHIvPwAAWBAAAABhcnJheS5hcnJheS5yZWFkcjA/AAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FycmF5Lmh0bWwjYXJyYXkuYXJyYXkucmVhZFgBAAAALXRyMT8AAFgPAAAAYmRiLkJkYi5ydW5jYWxscjI/AAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JkYi5odG1sI2JkYi5CZGIucnVuY2FsbFgBAAAALXRyMz8AAFgWAAAAY3Vyc2VzLndpbmRvdy5nZXRwYXJ5eHI0PwAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmdldHBhcnl4WAEAAAAtdHI1PwAAWBAAAABmbC5mb3JtLmFkZF9tZW51cjY/AAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZsLmh0bWwjZmwuZm9ybS5hZGRfbWVudVgBAAAALXRyNz8AAFgZAAAAc3RydWN0LlN0cnVjdC51bnBhY2tfZnJvbXI4PwAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJ1Y3QuaHRtbCNzdHJ1Y3QuU3RydWN0LnVucGFja19mcm9tWAEAAAAtdHI5PwAAWB0AAABjdXJzZXMudGV4dHBhZC5UZXh0Ym94LmdhdGhlcnI6PwAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMudGV4dHBhZC5UZXh0Ym94LmdhdGhlclgBAAAALXRyOz8AAFgUAAAAbm50cGxpYi5OTlRQLm5ld25ld3NyPD8AAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbm50cGxpYi5odG1sI25udHBsaWIuTk5UUC5uZXduZXdzWAEAAAAtdHI9PwAAWBwAAABsb2dnaW5nLkhhbmRsZXIucmVtb3ZlRmlsdGVycj4/AAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkhhbmRsZXIucmVtb3ZlRmlsdGVyWAEAAAAtdHI/PwAAWBgAAAByZS5NYXRjaE9iamVjdC5ncm91cGRpY3RyQD8AAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmUuaHRtbCNyZS5NYXRjaE9iamVjdC5ncm91cGRpY3RYAQAAAC10ckE/AABYFwAAAGRlY2ltYWwuQ29udGV4dC5taW5fbWFnckI/AAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQubWluX21hZ1gBAAAALXRyQz8AAFglAAAAY29va2llbGliLkNvb2tpZS5zZXRfbm9uc3RhbmRhcmRfYXR0cnJEPwAAKGppAQAAamoBAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuQ29va2llLnNldF9ub25zdGFuZGFyZF9hdHRyWAEAAAAtdHJFPwAAWBoAAABtYWlsYm94Lk1haWxkaXIuZ2V0X2ZvbGRlcnJGPwAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsZGlyLmdldF9mb2xkZXJYAQAAAC10ckc/AABYHQAAAHNnbWxsaWIuU0dNTFBhcnNlci5zZXRsaXRlcmFsckg/AAAoamkBAABqagEAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NnbWxsaWIuaHRtbCNzZ21sbGliLlNHTUxQYXJzZXIuc2V0bGl0ZXJhbFgBAAAALXRyST8AAFgcAAAAeGRybGliLlVucGFja2VyLmdldF9wb3NpdGlvbnJKPwAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94ZHJsaWIuaHRtbCN4ZHJsaWIuVW5wYWNrZXIuZ2V0X3Bvc2l0aW9uWAEAAAAtdHJLPwAAWB8AAABnZXR0ZXh0Lk51bGxUcmFuc2xhdGlvbnMuX3BhcnNlckw/AAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dldHRleHQuaHRtbCNnZXR0ZXh0Lk51bGxUcmFuc2xhdGlvbnMuX3BhcnNlWAEAAAAtdHJNPwAAWCcAAABTb2NrZXRTZXJ2ZXIuQmFzZVNlcnZlci5wcm9jZXNzX3JlcXVlc3RyTj8AAChqaQEAAGpqAQAAWFsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0c2VydmVyLmh0bWwjU29ja2V0U2VydmVyLkJhc2VTZXJ2ZXIucHJvY2Vzc19yZXF1ZXN0WAEAAAAtdHJPPwAAWCUAAAB3ZWFrcmVmLldlYWtWYWx1ZURpY3Rpb25hcnkudmFsdWVyZWZzclA/AAAoamkBAABqagEAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dlYWtyZWYuaHRtbCN3ZWFrcmVmLldlYWtWYWx1ZURpY3Rpb25hcnkudmFsdWVyZWZzWAEAAAAtdHJRPwAAWA4AAABmdHBsaWIuRlRQLm1rZHJSPwAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuRlRQLm1rZFgBAAAALXRyUz8AAFghAAAAZm9ybWF0dGVyLmZvcm1hdHRlci5wb3BfYWxpZ25tZW50clQ/AAAoamkBAABqagEAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Zvcm1hdHRlci5odG1sI2Zvcm1hdHRlci5mb3JtYXR0ZXIucG9wX2FsaWdubWVudFgBAAAALXRyVT8AAFgNAAAAZmlsZS50cnVuY2F0ZXJWPwAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2ZpbGUudHJ1bmNhdGVYAQAAAC10clc/AABYFgAAAGJkYi5CZGIuYnJlYWtfYW55d2hlcmVyWD8AAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYi5icmVha19hbnl3aGVyZVgBAAAALXRyWT8AAFgWAAAAaW1hcGxpYi5JTUFQNC5yZXNwb25zZXJaPwAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5yZXNwb25zZVgBAAAALXRyWz8AAFgRAAAAbm50cGxpYi5OTlRQLmxpc3RyXD8AAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbm50cGxpYi5odG1sI25udHBsaWIuTk5UUC5saXN0WAEAAAAtdHJdPwAAWB4AAAB4bWwuZG9tLkRvY3VtZW50LmNyZWF0ZUVsZW1lbnRyXj8AAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uRG9jdW1lbnQuY3JlYXRlRWxlbWVudFgBAAAALXRyXz8AAFgvAAAAZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGVyYD8AAChqaQEAAGpqAQAAWF8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5maW5kX2xpYnJhcnlfZmlsZVgBAAAALXRyYT8AAFgTAAAAdHRrLk5vdGVib29rLmluc2VydHJiPwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuTm90ZWJvb2suaW5zZXJ0WAEAAAAtdHJjPwAAWCcAAABsb2dnaW5nLmhhbmRsZXJzLlNNVFBIYW5kbGVyLmdldFN1YmplY3RyZD8AAChqaQEAAGpqAQAAWF8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuU01UUEhhbmRsZXIuZ2V0U3ViamVjdFgBAAAALXRyZT8AAFgWAAAAdHRrLlN0eWxlLnRoZW1lX2NyZWF0ZXJmPwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuU3R5bGUudGhlbWVfY3JlYXRlWAEAAAAtdHJnPwAAWBMAAABtaGxpYi5NSC5zZXRjb250ZXh0cmg/AAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21obGliLmh0bWwjbWhsaWIuTUguc2V0Y29udGV4dFgBAAAALXRyaT8AAFgjAAAAdXJsbGliMi5DYWNoZUZUUEhhbmRsZXIuc2V0TWF4Q29ubnNyaj8AAChqaQEAAGpqAQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuQ2FjaGVGVFBIYW5kbGVyLnNldE1heENvbm5zWAEAAAAtdHJrPwAAWCUAAAB4bWwuZXRyZWUuRWxlbWVudFRyZWUuWE1MUGFyc2VyLmNsb3Nlcmw/AAAoamkBAABqagEAAFhiAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5YTUxQYXJzZXIuY2xvc2VYAQAAAC10cm0/AABYFAAAAHN0cnVjdC5TdHJ1Y3QudW5wYWNrcm4/AAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cnVjdC5odG1sI3N0cnVjdC5TdHJ1Y3QudW5wYWNrWAEAAAAtdHJvPwAAWB0AAABtaW1ldG9vbHMuTWVzc2FnZS5nZXRlbmNvZGluZ3JwPwAAKGppAQAAamoBAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW1ldG9vbHMuaHRtbCNtaW1ldG9vbHMuTWVzc2FnZS5nZXRlbmNvZGluZ1gBAAAALXRycT8AAFgrAAAAZ2V0dGV4dC5OdWxsVHJhbnNsYXRpb25zLnNldF9vdXRwdXRfY2hhcnNldHJyPwAAKGppAQAAamoBAABYWgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZXR0ZXh0Lmh0bWwjZ2V0dGV4dC5OdWxsVHJhbnNsYXRpb25zLnNldF9vdXRwdXRfY2hhcnNldFgBAAAALXRycz8AAFgbAAAAQ29va2llLkJhc2VDb29raWUuanNfb3V0cHV0cnQ/AAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZS5odG1sI0Nvb2tpZS5CYXNlQ29va2llLmpzX291dHB1dFgBAAAALXRydT8AAFgVAAAAYWlmYy5haWZjLndyaXRlZnJhbWVzcnY/AAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FpZmMuaHRtbCNhaWZjLmFpZmMud3JpdGVmcmFtZXNYAQAAAC10cnc/AABYCQAAAGZpbGUubmV4dHJ4PwAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2ZpbGUubmV4dFgBAAAALXRyeT8AAFgbAAAAdW5pdHRlc3QuVGVzdFN1aXRlLl9faXRlcl9fcno/AAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdFN1aXRlLl9faXRlcl9fWAEAAAAtdHJ7PwAAWBEAAABzZWxlY3QuZXBvbGwucG9sbHJ8PwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZWxlY3QuaHRtbCNzZWxlY3QuZXBvbGwucG9sbFgBAAAALXRyfT8AAFgJAAAAc3RyLnpmaWxscn4/AAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLnpmaWxsWAEAAAAtdHJ/PwAAWC4AAABtdWx0aXByb2Nlc3NpbmcucG9vbC5tdWx0aXByb2Nlc3NpbmcuUG9vbC5qb2lucoA/AAAoamkBAABqagEAAFhlAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5wb29sLm11bHRpcHJvY2Vzc2luZy5Qb29sLmpvaW5YAQAAAC10coE/AABYGAAAAG11bHRpZmlsZS5NdWx0aUZpbGUubmV4dHKCPwAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aWZpbGUuaHRtbCNtdWx0aWZpbGUuTXVsdGlGaWxlLm5leHRYAQAAAC10coM/AABYJQAAAG1zaWxpYi5TdW1tYXJ5SW5mb3JtYXRpb24uR2V0UHJvcGVydHlyhD8AAChqaQEAAGpqAQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLlN1bW1hcnlJbmZvcm1hdGlvbi5HZXRQcm9wZXJ0eVgBAAAALXRyhT8AAFgTAAAAaW1hcGxpYi5JTUFQNC5sb2dpbnKGPwAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5sb2dpblgBAAAALXRyhz8AAFgPAAAAb2JqZWN0Ll9fcm11bF9fcog/AAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fcm11bF9fWAEAAAAtdHKJPwAAWDYAAAB4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuRXh0ZXJuYWxFbnRpdHlQYXJzZXJDcmVhdGVyij8AAChqaQEAAGpqAQAAWGUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5FeHRlcm5hbEVudGl0eVBhcnNlckNyZWF0ZVgBAAAALXRyiz8AAFgYAAAAY3Vyc2VzLnBhbmVsLlBhbmVsLmFib3Zlcow/AAAoamkBAABqagEAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5wYW5lbC5odG1sI2N1cnNlcy5wYW5lbC5QYW5lbC5hYm92ZVgBAAAALXRyjT8AAFgpAAAAY29kZS5JbnRlcmFjdGl2ZUludGVycHJldGVyLnNob3d0cmFjZWJhY2tyjj8AAChqaQEAAGpqAQAAWFUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZS5odG1sI2NvZGUuSW50ZXJhY3RpdmVJbnRlcnByZXRlci5zaG93dHJhY2ViYWNrWAEAAAAtdHKPPwAAWCAAAABwcHJpbnQuUHJldHR5UHJpbnRlci5pc3JlY3Vyc2l2ZXKQPwAAKGppAQAAamoBAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wcHJpbnQuaHRtbCNwcHJpbnQuUHJldHR5UHJpbnRlci5pc3JlY3Vyc2l2ZVgBAAAALXRykT8AAFgRAAAAYmRiLkJkYi5zZXRfYnJlYWtykj8AAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYi5zZXRfYnJlYWtYAQAAAC10cpM/AABYFAAAAGRlY2ltYWwuQ29udGV4dC5zcXJ0cpQ/AAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQuc3FydFgBAAAALXRylT8AAFglAAAATWluaUFFRnJhbWUuQUVTZXJ2ZXIuaW5zdGFsbGFlaGFuZGxlcnKWPwAAKGppAQAAamoBAABYWAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW5pYWVmcmFtZS5odG1sI01pbmlBRUZyYW1lLkFFU2VydmVyLmluc3RhbGxhZWhhbmRsZXJYAQAAAC10cpc/AABYIAAAAENvbmZpZ1BhcnNlci5SYXdDb25maWdQYXJzZXIuc2V0cpg/AAAoamkBAABqagEAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbmZpZ3BhcnNlci5odG1sI0NvbmZpZ1BhcnNlci5SYXdDb25maWdQYXJzZXIuc2V0WAEAAAAtdHKZPwAAWCAAAABGcmFtZVdvcmsuV2luZG93LmRvX2NvbnRlbnRjbGlja3KaPwAAKGppAQAAamoBAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcmFtZXdvcmsuaHRtbCNGcmFtZVdvcmsuV2luZG93LmRvX2NvbnRlbnRjbGlja1gBAAAALXRymz8AAFgVAAAAZmlsZWNtcC5kaXJjbXAucmVwb3J0cpw/AAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZpbGVjbXAuaHRtbCNmaWxlY21wLmRpcmNtcC5yZXBvcnRYAQAAAC10cp0/AABYFgAAAGxvZ2dpbmcuTG9nZ2VyLndhcm5pbmdynj8AAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuTG9nZ2VyLndhcm5pbmdYAQAAAC10cp8/AABYEwAAAG1obGliLk1ILm1ha2Vmb2xkZXJyoD8AAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWhsaWIuaHRtbCNtaGxpYi5NSC5tYWtlZm9sZGVyWAEAAAAtdHKhPwAAWCgAAABlbWFpbC5jaGFyc2V0LkNoYXJzZXQuZW5jb2RlZF9oZWFkZXJfbGVucqI/AAAoamkBAABqagEAAFhdAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLmNoYXJzZXQuaHRtbCNlbWFpbC5jaGFyc2V0LkNoYXJzZXQuZW5jb2RlZF9oZWFkZXJfbGVuWAEAAAAtdHKjPwAAWCMAAABhc3luY2hhdC5hc3luY19jaGF0LmNsb3NlX3doZW5fZG9uZXKkPwAAKGppAQAAamoBAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hc3luY2hhdC5odG1sI2FzeW5jaGF0LmFzeW5jX2NoYXQuY2xvc2Vfd2hlbl9kb25lWAEAAAAtdHKlPwAAWCEAAABkaXN0dXRpbHMudGV4dF9maWxlLlRleHRGaWxlLm9wZW5ypj8AAChqaQEAAGpqAQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMudGV4dF9maWxlLlRleHRGaWxlLm9wZW5YAQAAAC10cqc/AABYGAAAAHRhcmZpbGUuVGFyRmlsZS5nZXRuYW1lc3KoPwAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJGaWxlLmdldG5hbWVzWAEAAAAtdHKpPwAAWBQAAABzb2NrZXQuc29ja2V0LmFjY2VwdHKqPwAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuc29ja2V0LmFjY2VwdFgBAAAALXRyqz8AAFgQAAAAcG9wbGliLlBPUDMucXVpdHKsPwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wb3BsaWIuaHRtbCNwb3BsaWIuUE9QMy5xdWl0WAEAAAAtdHKtPwAAWBEAAABzbXRwbGliLlNNVFAuaGVsb3KuPwAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zbXRwbGliLmh0bWwjc210cGxpYi5TTVRQLmhlbG9YAQAAAC10cq8/AABYGgAAAGN1cnNlcy5wYW5lbC5QYW5lbC5yZXBsYWNlcrA/AAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5wYW5lbC5odG1sI2N1cnNlcy5wYW5lbC5QYW5lbC5yZXBsYWNlWAEAAAAtdHKxPwAAWCQAAAB1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRSYWlzZXNSZWdleHBysj8AAChqaQEAAGpqAQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRSYWlzZXNSZWdleHBYAQAAAC10crM/AABYEwAAAGRlY2ltYWwuRGVjaW1hbC5mbWFytD8AAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5mbWFYAQAAAC10crU/AABYDwAAAFF1ZXVlLlF1ZXVlLnB1dHK2PwAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9xdWV1ZS5odG1sI1F1ZXVlLlF1ZXVlLnB1dFgBAAAALXRytz8AAFgOAAAAbW1hcC5tbWFwLm1vdmVyuD8AAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbW1hcC5odG1sI21tYXAubW1hcC5tb3ZlWAEAAAAtdHK5PwAAWBUAAABtYWlsYm94Lk1haWxib3guZmx1c2hyuj8AAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGJveC5mbHVzaFgBAAAALXRyuz8AAFgTAAAAY3Vyc2VzLndpbmRvdy5jaGdhdHK8PwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmNoZ2F0WAEAAAAtdHK9PwAAWBwAAABkZWNpbWFsLkNvbnRleHQubnVtYmVyX2NsYXNzcr4/AAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQubnVtYmVyX2NsYXNzWAEAAAAtdHK/PwAAWBUAAABkYXRldGltZS5kYXRlLndlZWtkYXlywD8AAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRlLndlZWtkYXlYAQAAAC10csE/AABYFAAAAHNzbC5TU0xTb2NrZXQuY2lwaGVycsI/AAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xTb2NrZXQuY2lwaGVyWAEAAAAtdHLDPwAAWBYAAAB4bWwuZG9tLk5vZGUuY2xvbmVOb2RlcsQ/AAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLk5vZGUuY2xvbmVOb2RlWAEAAAAtdHLFPwAAWBwAAAB3YXZlLldhdmVfd3JpdGUuc2V0ZnJhbWVyYXRlcsY/AAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dhdmUuaHRtbCN3YXZlLldhdmVfd3JpdGUuc2V0ZnJhbWVyYXRlWAEAAAAtdHLHPwAAWB0AAABzdW5hdS5BVV93cml0ZS53cml0ZWZyYW1lc3Jhd3LIPwAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdW5hdS5odG1sI3N1bmF1LkFVX3dyaXRlLndyaXRlZnJhbWVzcmF3WAEAAAAtdHLJPwAAWBMAAABzdW5hdS5BVV93cml0ZS50ZWxscso/AAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUuQVVfd3JpdGUudGVsbFgBAAAALXRyyz8AAFgYAAAAbXNpbGliLlJlY29yZC5HZXRJbnRlZ2Vycsw/AAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5SZWNvcmQuR2V0SW50ZWdlclgBAAAALXRyzT8AAFgXAAAAcmZjODIyLk1lc3NhZ2UuaXNoZWFkZXJyzj8AAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmZjODIyLmh0bWwjcmZjODIyLk1lc3NhZ2UuaXNoZWFkZXJYAQAAAC10cs8/AABYEgAAAGZ0cGxpYi5GVFAuY29ubmVjdHLQPwAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuRlRQLmNvbm5lY3RYAQAAAC10ctE/AABYHQAAAG1haWxib3gubWJveE1lc3NhZ2Uuc2V0X2ZsYWdzctI/AAAoamkBAABqagEAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lm1ib3hNZXNzYWdlLnNldF9mbGFnc1gBAAAALXRy0z8AAFgbAAAAbWFpbGJveC5NYWlsYm94Ll9fZ2V0aXRlbV9fctQ/AAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxib3guX19nZXRpdGVtX19YAQAAAC10ctU/AABYKgAAAG11bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5TeW5jTWFuYWdlci5RdWV1ZXLWPwAAKGppAQAAamoBAABYYQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuU3luY01hbmFnZXIuUXVldWVYAQAAAC10ctc/AABYEwAAAHJlLk1hdGNoT2JqZWN0LnNwYW5y2D8AAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmUuaHRtbCNyZS5NYXRjaE9iamVjdC5zcGFuWAEAAAAtdHLZPwAAWB0AAAB4ZHJsaWIuVW5wYWNrZXIudW5wYWNrX3N0cmluZ3LaPwAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94ZHJsaWIuaHRtbCN4ZHJsaWIuVW5wYWNrZXIudW5wYWNrX3N0cmluZ1gBAAAALXRy2z8AAFgVAAAAQ29ubmVjdGlvbi5yZWN2X2J5dGVzctw/AAAoamkBAABqagEAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI0Nvbm5lY3Rpb24ucmVjdl9ieXRlc1gBAAAALXRy3T8AAFgiAAAAZW1haWwubWVzc2FnZS5NZXNzYWdlLl9fY29udGFpbnNfX3LePwAAKGppAQAAamoBAABYVwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5NZXNzYWdlLl9fY29udGFpbnNfX1gBAAAALXRy3z8AAFgcAAAAY29sbGVjdGlvbnMuQ291bnRlci5mcm9ta2V5c3LgPwAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2xsZWN0aW9ucy5odG1sI2NvbGxlY3Rpb25zLkNvdW50ZXIuZnJvbWtleXNYAQAAAC10cuE/AABYFgAAAGlvLkJ1ZmZlcmVkSU9CYXNlLnJlYWRy4j8AAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW8uaHRtbCNpby5CdWZmZXJlZElPQmFzZS5yZWFkWAEAAAAtdHLjPwAAWBsAAABzdW5hdS5BVV93cml0ZS5zZXRuY2hhbm5lbHNy5D8AAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VuYXUuaHRtbCNzdW5hdS5BVV93cml0ZS5zZXRuY2hhbm5lbHNYAQAAAC10cuU/AABYFQAAAG1zaWxpYi5EaXJlY3RvcnkuZ2xvYnLmPwAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuRGlyZWN0b3J5Lmdsb2JYAQAAAC10cuc/AABYGAAAAF93aW5yZWcuUHlIS0VZLl9fZW50ZXJfX3LoPwAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjX3dpbnJlZy5QeUhLRVkuX19lbnRlcl9fWAEAAAAtdHLpPwAAWBcAAAB0aHJlYWRpbmcuUkxvY2suYWNxdWlyZXLqPwAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuUkxvY2suYWNxdWlyZVgBAAAALXRy6z8AAFgTAAAAcHJvZmlsZS5Qcm9maWxlLnJ1bnLsPwAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wcm9maWxlLmh0bWwjcHJvZmlsZS5Qcm9maWxlLnJ1blgBAAAALXRy7T8AAFgcAAAAbWFpbGJveC5NTURGTWVzc2FnZS5zZXRfZnJvbXLuPwAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NTURGTWVzc2FnZS5zZXRfZnJvbVgBAAAALXRy7z8AAFgbAAAAbWFpbGJveC5NYWlsYm94LmdldF9tZXNzYWdlcvA/AAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxib3guZ2V0X21lc3NhZ2VYAQAAAC10cvE/AABYEwAAAHRpbWVpdC5UaW1lci5yZXBlYXRy8j8AAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGltZWl0Lmh0bWwjdGltZWl0LlRpbWVyLnJlcGVhdFgBAAAALXRy8z8AAFggAAAAQ29uZmlnUGFyc2VyLlJhd0NvbmZpZ1BhcnNlci5nZXRy9D8AAChqaQEAAGpqAQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjQ29uZmlnUGFyc2VyLlJhd0NvbmZpZ1BhcnNlci5nZXRYAQAAAC10cvU/AABYJwAAAENvbmZpZ1BhcnNlci5SYXdDb25maWdQYXJzZXIuZ2V0Ym9vbGVhbnL2PwAAKGppAQAAamoBAABYWwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNDb25maWdQYXJzZXIuUmF3Q29uZmlnUGFyc2VyLmdldGJvb2xlYW5YAQAAAC10cvc/AABYIwAAAHJvYm90cGFyc2VyLlJvYm90RmlsZVBhcnNlci5zZXRfdXJscvg/AAAoamkBAABqagEAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JvYm90cGFyc2VyLmh0bWwjcm9ib3RwYXJzZXIuUm9ib3RGaWxlUGFyc2VyLnNldF91cmxYAQAAAC10cvk/AABYGgAAAHVuaXR0ZXN0LlRlc3RDYXNlLnNraXBUZXN0cvo/AAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2Uuc2tpcFRlc3RYAQAAAC10cvs/AABYIgAAAEZyYW1lV29yay5BcHBsaWNhdGlvbi5nZXRhYm91dHRleHRy/D8AAChqaQEAAGpqAQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnJhbWV3b3JrLmh0bWwjRnJhbWVXb3JrLkFwcGxpY2F0aW9uLmdldGFib3V0dGV4dFgBAAAALXRy/T8AAFgTAAAAZGVjaW1hbC5Db250ZXh0LmFic3L+PwAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmFic1gBAAAALXRy/z8AAFgrAAAAeG1sLnNheC54bWxyZWFkZXIuSW5wdXRTb3VyY2Uuc2V0Qnl0ZVN0cmVhbXIAQAAAKGppAQAAamoBAABYYQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLklucHV0U291cmNlLnNldEJ5dGVTdHJlYW1YAQAAAC10cgFAAABYIAAAAG1haWxib3guQmFieWxNZXNzYWdlLnNldF92aXNpYmxlcgJAAAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94LkJhYnlsTWVzc2FnZS5zZXRfdmlzaWJsZVgBAAAALXRyA0AAAFgPAAAAcGRiLlBkYi5ydW5ldmFscgRAAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BkYi5odG1sI3BkYi5QZGIucnVuZXZhbFgBAAAALXRyBUAAAFgVAAAAY3Vyc2VzLndpbmRvdy50aW1lb3V0cgZAAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cudGltZW91dFgBAAAALXRyB0AAAFgpAAAAZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuZGVidWdfcHJpbnRyCEAAAChqaQEAAGpqAQAAWFkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5kZWJ1Z19wcmludFgBAAAALXRyCUAAAFgcAAAAeGRybGliLlVucGFja2VyLnNldF9wb3NpdGlvbnIKQAAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94ZHJsaWIuaHRtbCN4ZHJsaWIuVW5wYWNrZXIuc2V0X3Bvc2l0aW9uWAEAAAAtdHILQAAAWDEAAABkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5leGVjdXRhYmxlX2ZpbGVuYW1lcgxAAAAoamkBAABqagEAAFhhAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuZXhlY3V0YWJsZV9maWxlbmFtZVgBAAAALXRyDUAAAFgdAAAAc3NsLlNTTENvbnRleHQuc2V0X2VjZGhfY3VydmVyDkAAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTENvbnRleHQuc2V0X2VjZGhfY3VydmVYAQAAAC10cg9AAABYEgAAAGFycmF5LmFycmF5LnRvbGlzdHIQQAAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hcnJheS5odG1sI2FycmF5LmFycmF5LnRvbGlzdFgBAAAALXRyEUAAAFgTAAAAdHRrLk5vdGVib29rLnNlbGVjdHISQAAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuTm90ZWJvb2suc2VsZWN0WAEAAAAtdHITQAAAWB8AAABzdHJpbmcuVGVtcGxhdGUuc2FmZV9zdWJzdGl0dXRlchRAAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZy5odG1sI3N0cmluZy5UZW1wbGF0ZS5zYWZlX3N1YnN0aXR1dGVYAQAAAC10chVAAABYHgAAAGNvb2tpZWxpYi5Db29raWVKYXIuc2V0X2Nvb2tpZXIWQAAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuQ29va2llSmFyLnNldF9jb29raWVYAQAAAC10chdAAABYGgAAAHdhdmUuV2F2ZV9yZWFkLmdldGNvbXB0eXBlchhAAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dhdmUuaHRtbCN3YXZlLldhdmVfcmVhZC5nZXRjb21wdHlwZVgBAAAALXRyGUAAAFgfAAAAZm9ybWF0dGVyLmZvcm1hdHRlci5wdXNoX21hcmdpbnIaQAAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIuZm9ybWF0dGVyLnB1c2hfbWFyZ2luWAEAAAAtdHIbQAAAWBcAAABpbWFwbGliLklNQVA0LnByb3h5YXV0aHIcQAAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5wcm94eWF1dGhYAQAAAC10ch1AAABYFQAAAGFycmF5LmFycmF5LnRvdW5pY29kZXIeQAAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hcnJheS5odG1sI2FycmF5LmFycmF5LnRvdW5pY29kZVgBAAAALXRyH0AAAFgQAAAAcG9wbGliLlBPUDMucmV0cnIgQAAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wb3BsaWIuaHRtbCNwb3BsaWIuUE9QMy5yZXRyWAEAAAAtdHIhQAAAWCEAAABzcWxpdGUzLkNvbm5lY3Rpb24uc2V0X2F1dGhvcml6ZXJyIkAAAChqaQEAAGpqAQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuQ29ubmVjdGlvbi5zZXRfYXV0aG9yaXplclgBAAAALXRyI0AAAFgbAAAAc210cGxpYi5TTVRQLnNldF9kZWJ1Z2xldmVsciRAAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NtdHBsaWIuaHRtbCNzbXRwbGliLlNNVFAuc2V0X2RlYnVnbGV2ZWxYAQAAAC10ciVAAABYIgAAAGVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5zZXRfYm91bmRhcnlyJkAAAChqaQEAAGpqAQAAWFcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS5zZXRfYm91bmRhcnlYAQAAAC10cidAAABYHgAAAHVuaXR0ZXN0LlRlc3RSZXN1bHQuYWRkU3VjY2Vzc3IoQAAAKGppAQAAamoBAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RSZXN1bHQuYWRkU3VjY2Vzc1gBAAAALXRyKUAAAFgXAAAAbWFpbGJveC5NYWlsYm94LnBvcGl0ZW1yKkAAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGJveC5wb3BpdGVtWAEAAAAtdHIrQAAAWBoAAABzdWJwcm9jZXNzLlBvcGVuLnRlcm1pbmF0ZXIsQAAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5Qb3Blbi50ZXJtaW5hdGVYAQAAAC10ci1AAABYFAAAAGxvZ2dpbmcuTG9nZ2VyLmRlYnVnci5AAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkxvZ2dlci5kZWJ1Z1gBAAAALXRyL0AAAFgeAAAAZGVjaW1hbC5Db250ZXh0LmNvbXBhcmVfc2lnbmFscjBAAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQuY29tcGFyZV9zaWduYWxYAQAAAC10cjFAAABYGgAAAHJmYzgyMi5NZXNzYWdlLmdldGFkZHJsaXN0cjJAAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JmYzgyMi5odG1sI3JmYzgyMi5NZXNzYWdlLmdldGFkZHJsaXN0WAEAAAAtdHIzQAAAWBIAAABhcnJheS5hcnJheS5pbnNlcnRyNEAAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXJyYXkuaHRtbCNhcnJheS5hcnJheS5pbnNlcnRYAQAAAC10cjVAAABYGwAAAGh0bWxsaWIuSFRNTFBhcnNlci5zYXZlX2JnbnI2QAAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odG1sbGliLmh0bWwjaHRtbGxpYi5IVE1MUGFyc2VyLnNhdmVfYmduWAEAAAAtdHI3QAAAWBwAAABzdWJwcm9jZXNzLlBvcGVuLnNlbmRfc2lnbmFscjhAAAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLlBvcGVuLnNlbmRfc2lnbmFsWAEAAAAtdHI5QAAAWBAAAAB0dGsuU3R5bGUubGF5b3V0cjpAAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5TdHlsZS5sYXlvdXRYAQAAAC10cjtAAABYHQAAAHVybGxpYjIuSFRUUEhhbmRsZXIuaHR0cF9vcGVucjxAAAAoamkBAABqagEAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLkhUVFBIYW5kbGVyLmh0dHBfb3BlblgBAAAALXRyPUAAAFgkAAAAdGVzdC5zdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQuc2V0cj5AAAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZC5zZXRYAQAAAC10cj9AAABYKQAAAHhtbC5zYXgueG1scmVhZGVyLklucHV0U291cmNlLmdldFB1YmxpY0lkckBAAAAoamkBAABqagEAAFhfAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuSW5wdXRTb3VyY2UuZ2V0UHVibGljSWRYAQAAAC10ckFAAABYJwAAAEhUTUxQYXJzZXIuSFRNTFBhcnNlci5nZXRfc3RhcnR0YWdfdGV4dHJCQAAAKGppAQAAamoBAABYWQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odG1scGFyc2VyLmh0bWwjSFRNTFBhcnNlci5IVE1MUGFyc2VyLmdldF9zdGFydHRhZ190ZXh0WAEAAAAtdHJDQAAAWDwAAABTaW1wbGVYTUxSUENTZXJ2ZXIuQ0dJWE1MUlBDUmVxdWVzdEhhbmRsZXIucmVnaXN0ZXJfZnVuY3Rpb25yREAAAChqaQEAAGpqAQAAWHYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2ltcGxleG1scnBjc2VydmVyLmh0bWwjU2ltcGxlWE1MUlBDU2VydmVyLkNHSVhNTFJQQ1JlcXVlc3RIYW5kbGVyLnJlZ2lzdGVyX2Z1bmN0aW9uWAEAAAAtdHJFQAAAWA8AAABvYmplY3QuX19yZXByX19yRkAAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19yZXByX19YAQAAAC10ckdAAABYJwAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS5YTUxQYXJzZXIuZG9jdHlwZXJIQAAAKGppAQAAamoBAABYZAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuWE1MUGFyc2VyLmRvY3R5cGVYAQAAAC10cklAAABYDwAAAG9iamVjdC5fX2lzdWJfX3JKQAAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2lzdWJfX1gBAAAALXRyS0AAAFgVAAAAc3NsLlNTTFNvY2tldC52ZXJzaW9uckxAAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xTb2NrZXQudmVyc2lvblgBAAAALXRyTUAAAFgUAAAAY3Vyc2VzLndpbmRvdy5nZXRrZXlyTkAAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5nZXRrZXlYAQAAAC10ck9AAABYHAAAAGNhbGVuZGFyLlRleHRDYWxlbmRhci5wcnllYXJyUEAAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci5UZXh0Q2FsZW5kYXIucHJ5ZWFyWAEAAAAtdHJRQAAAWBoAAABwc3RhdHMuU3RhdHMucHJpbnRfY2FsbGVyc3JSQAAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wcm9maWxlLmh0bWwjcHN0YXRzLlN0YXRzLnByaW50X2NhbGxlcnNYAQAAAC10clNAAABYGwAAAHRocmVhZGluZy5TZW1hcGhvcmUucmVsZWFzZXJUQAAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuU2VtYXBob3JlLnJlbGVhc2VYAQAAAC10clVAAABYEAAAAHBvcGxpYi5QT1AzLnJwb3ByVkAAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcG9wbGliLmh0bWwjcG9wbGliLlBPUDMucnBvcFgBAAAALXRyV0AAAFgZAAAAdXJsbGliLlVSTG9wZW5lci5yZXRyaWV2ZXJYQAAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIuaHRtbCN1cmxsaWIuVVJMb3BlbmVyLnJldHJpZXZlWAEAAAAtdHJZQAAAWBkAAABkYXRldGltZS50emluZm8udXRjb2Zmc2V0clpAAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUudHppbmZvLnV0Y29mZnNldFgBAAAALXRyW0AAAFgUAAAAdGFyZmlsZS5UYXJGaWxlLm5leHRyXEAAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuVGFyRmlsZS5uZXh0WAEAAAAtdHJdQAAAWCcAAABvc3NhdWRpb2Rldi5vc3NfbWl4ZXJfZGV2aWNlLnNldF9yZWNzcmNyXkAAAChqaQEAAGpqAQAAWFoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3NzYXVkaW9kZXYuaHRtbCNvc3NhdWRpb2Rldi5vc3NfbWl4ZXJfZGV2aWNlLnNldF9yZWNzcmNYAQAAAC10cl9AAABYGQAAAHVybGxpYjIuUmVxdWVzdC5zZXRfcHJveHlyYEAAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuUmVxdWVzdC5zZXRfcHJveHlYAQAAAC10cmFAAABYFQAAAHN1bmF1LkFVX3JlYWQuZ2V0bWFya3JiQAAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdW5hdS5odG1sI3N1bmF1LkFVX3JlYWQuZ2V0bWFya1gBAAAALXRyY0AAAFgjAAAAd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5fZmx1c2hyZEAAAChqaQEAAGpqAQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd3NnaXJlZi5odG1sI3dzZ2lyZWYuaGFuZGxlcnMuQmFzZUhhbmRsZXIuX2ZsdXNoWAEAAAAtdHJlQAAAWCIAAAB4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC5pdGVycmZAAAAoamkBAABqagEAAFhfAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50Lml0ZXJYAQAAAC10cmdAAABYFwAAAGRlY2ltYWwuRGVjaW1hbC5pc19xbmFucmhAAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwuaXNfcW5hblgBAAAALXRyaUAAAFgWAAAAeG1sLmRvbS5Ob2RlLm5vcm1hbGl6ZXJqQAAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Ob2RlLm5vcm1hbGl6ZVgBAAAALXRya0AAAFgcAAAAbWFpbGJveC5NTURGTWVzc2FnZS5hZGRfZmxhZ3JsQAAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NTURGTWVzc2FnZS5hZGRfZmxhZ1gBAAAALXRybUAAAFgTAAAAZGVjaW1hbC5Db250ZXh0LmV4cHJuQAAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmV4cFgBAAAALXRyb0AAAFgiAAAAZ2V0dGV4dC5OdWxsVHJhbnNsYXRpb25zLmxuZ2V0dGV4dHJwQAAAKGppAQAAamoBAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZXR0ZXh0Lmh0bWwjZ2V0dGV4dC5OdWxsVHJhbnNsYXRpb25zLmxuZ2V0dGV4dFgBAAAALXRycUAAAFghAAAAeG1sLnNheC54bWxyZWFkZXIuWE1MUmVhZGVyLnBhcnNlcnJAAAAoamkBAABqagEAAFhXAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuWE1MUmVhZGVyLnBhcnNlWAEAAAAtdHJzQAAAWBsAAABhc3luY29yZS5kaXNwYXRjaGVyLmNvbm5lY3RydEAAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXN5bmNvcmUuaHRtbCNhc3luY29yZS5kaXNwYXRjaGVyLmNvbm5lY3RYAQAAAC10cnVAAABYEgAAAGZsLmZvcm0uYWRkX3NsaWRlcnJ2QAAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbC5odG1sI2ZsLmZvcm0uYWRkX3NsaWRlclgBAAAALXRyd0AAAFgZAAAAZGVjaW1hbC5Db250ZXh0LnJlbWFpbmRlcnJ4QAAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LnJlbWFpbmRlclgBAAAALXRyeUAAAFguAAAAbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLkJhc2VQcm94eS5fY2FsbG1ldGhvZHJ6QAAAKGppAQAAamoBAABYZQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuQmFzZVByb3h5Ll9jYWxsbWV0aG9kWAEAAAAtdHJ7QAAAWBgAAABzb2NrZXQuc29ja2V0LnNldHRpbWVvdXRyfEAAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LnNvY2tldC5zZXR0aW1lb3V0WAEAAAAtdHJ9QAAAWCcAAAB4bWxycGNsaWIuU2VydmVyUHJveHkuc3lzdGVtLm1ldGhvZEhlbHByfkAAAChqaQEAAGpqAQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1scnBjbGliLmh0bWwjeG1scnBjbGliLlNlcnZlclByb3h5LnN5c3RlbS5tZXRob2RIZWxwWAEAAAAtdHJ/QAAAWBYAAAB3YXZlLldhdmVfcmVhZC5nZXRtYXJrcoBAAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dhdmUuaHRtbCN3YXZlLldhdmVfcmVhZC5nZXRtYXJrWAEAAAAtdHKBQAAAWCAAAABvcHRwYXJzZS5PcHRpb25QYXJzZXIuZ2V0X29wdGlvbnKCQAAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLk9wdGlvblBhcnNlci5nZXRfb3B0aW9uWAEAAAAtdHKDQAAAWB8AAABNaW1lV3JpdGVyLk1pbWVXcml0ZXIuc3RhcnRib2R5coRAAAAoamkBAABqagEAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbWV3cml0ZXIuaHRtbCNNaW1lV3JpdGVyLk1pbWVXcml0ZXIuc3RhcnRib2R5WAEAAAAtdHKFQAAAWCkAAAB1bml0dGVzdC5UZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZXKGQAAAKGppAQAAamoBAABYWQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbVRlc3RDYXNlWAEAAAAtdHKHQAAAWBkAAABtdWx0aXByb2Nlc3NpbmcuUXVldWUuZ2V0cohAAAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5RdWV1ZS5nZXRYAQAAAC10colAAABYHAAAAHVybGxpYjIuUmVxdWVzdC5oZWFkZXJfaXRlbXNyikAAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuUmVxdWVzdC5oZWFkZXJfaXRlbXNYAQAAAC10cotAAABYIQAAAHppcGltcG9ydC56aXBpbXBvcnRlci5sb2FkX21vZHVsZXKMQAAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96aXBpbXBvcnQuaHRtbCN6aXBpbXBvcnQuemlwaW1wb3J0ZXIubG9hZF9tb2R1bGVYAQAAAC10co1AAABYIAAAAG9wdHBhcnNlLk9wdGlvblBhcnNlci5oYXNfb3B0aW9uco5AAAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UuT3B0aW9uUGFyc2VyLmhhc19vcHRpb25YAQAAAC10co9AAABYIAAAAHVuaXR0ZXN0LlRlc3RSZXN1bHQuc3RhcnRUZXN0UnVucpBAAAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdFJlc3VsdC5zdGFydFRlc3RSdW5YAQAAAC10cpFAAABYHQAAAGh0bWxsaWIuSFRNTFBhcnNlci5hbmNob3JfYmducpJAAAAoamkBAABqagEAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0bWxsaWIuaHRtbCNodG1sbGliLkhUTUxQYXJzZXIuYW5jaG9yX2JnblgBAAAALXRyk0AAAFgXAAAAbXVsdGlmaWxlLk11bHRpRmlsZS5wb3BylEAAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlmaWxlLmh0bWwjbXVsdGlmaWxlLk11bHRpRmlsZS5wb3BYAQAAAC10cpVAAABYKQAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50LmdldGNoaWxkcmVucpZAAAAoamkBAABqagEAAFhmAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50LmdldGNoaWxkcmVuWAEAAAAtdHKXQAAAWBkAAABhc3luY29yZS5kaXNwYXRjaGVyLmNsb3NlcphAAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzeW5jb3JlLmh0bWwjYXN5bmNvcmUuZGlzcGF0Y2hlci5jbG9zZVgBAAAALXRymUAAAFgeAAAAZGF0ZXRpbWUuZGF0ZXRpbWUudXRjdGltZXR1cGxlcppAAAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZXRpbWUudXRjdGltZXR1cGxlWAEAAAAtdHKbQAAAWBgAAABzb2NrZXQuc29ja2V0LmNvbm5lY3RfZXhynEAAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LnNvY2tldC5jb25uZWN0X2V4WAEAAAAtdHKdQAAAWCUAAAB4bWwuc2F4LnhtbHJlYWRlci5Mb2NhdG9yLmdldFB1YmxpY0lkcp5AAAAoamkBAABqagEAAFhbAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuTG9jYXRvci5nZXRQdWJsaWNJZFgBAAAALXRyn0AAAFgzAAAAeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLlN0YXJ0RG9jdHlwZURlY2xIYW5kbGVycqBAAAAoamkBAABqagEAAFhiAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuU3RhcnREb2N0eXBlRGVjbEhhbmRsZXJYAQAAAC10cqFAAABYFQAAAHVybGxpYi5VUkxvcGVuZXIub3BlbnKiQAAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIuaHRtbCN1cmxsaWIuVVJMb3BlbmVyLm9wZW5YAQAAAC10cqNAAABYEgAAAHNoZWx2ZS5TaGVsZi5jbG9zZXKkQAAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaGVsdmUuaHRtbCNzaGVsdmUuU2hlbGYuY2xvc2VYAQAAAC10cqVAAABYFQAAAGxvZ2dpbmcuRmlsdGVyLmZpbHRlcnKmQAAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5GaWx0ZXIuZmlsdGVyWAEAAAAtdHKnQAAAWBsAAABIVE1MUGFyc2VyLkhUTUxQYXJzZXIucmVzZXRyqEAAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHRtbHBhcnNlci5odG1sI0hUTUxQYXJzZXIuSFRNTFBhcnNlci5yZXNldFgBAAAALXRyqUAAAFgbAAAARWFzeURpYWxvZ3MuUHJvZ3Jlc3NCYXIuaW5jcqpAAAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vhc3lkaWFsb2dzLmh0bWwjRWFzeURpYWxvZ3MuUHJvZ3Jlc3NCYXIuaW5jWAEAAAAtdHKrQAAAWBkAAABubnRwbGliLk5OVFAuZGVzY3JpcHRpb25zcqxAAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L25udHBsaWIuaHRtbCNubnRwbGliLk5OVFAuZGVzY3JpcHRpb25zWAEAAAAtdHKtQAAAWAoAAABzdHIuY2VudGVycq5AAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLmNlbnRlclgBAAAALXRyr0AAAFgqAAAAbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLlN5bmNNYW5hZ2VyLkFycmF5crBAAAAoamkBAABqagEAAFhhAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5TeW5jTWFuYWdlci5BcnJheVgBAAAALXRysUAAAFgZAAAAeG1scnBjbGliLkRhdGVUaW1lLmRlY29kZXKyQAAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWxycGNsaWIuaHRtbCN4bWxycGNsaWIuRGF0ZVRpbWUuZGVjb2RlWAEAAAAtdHKzQAAAWBoAAABsb2dnaW5nLk51bGxIYW5kbGVyLmhhbmRsZXK0QAAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5OdWxsSGFuZGxlci5oYW5kbGVYAQAAAC10crVAAABYJwAAAHdzZ2lyZWYuaGFuZGxlcnMuQmFzZUhhbmRsZXIuZ2V0X3NjaGVtZXK2QAAAKGppAQAAamoBAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5nZXRfc2NoZW1lWAEAAAAtdHK3QAAAWBMAAAB0YXJmaWxlLlRhckZpbGUuYWRkcrhAAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLlRhckZpbGUuYWRkWAEAAAAtdHK5QAAAWBIAAABwb3BlbjIuUG9wZW4zLndhaXRyukAAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcG9wZW4yLmh0bWwjcG9wZW4yLlBvcGVuMy53YWl0WAEAAAAtdHK7QAAAWBMAAABkZWNpbWFsLkNvbnRleHQubWlucrxAAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQubWluWAEAAAAtdHK9QAAAWCQAAABjYWxlbmRhci5IVE1MQ2FsZW5kYXIuZm9ybWF0eWVhcnBhZ2VyvkAAAChqaQEAAGpqAQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci5IVE1MQ2FsZW5kYXIuZm9ybWF0eWVhcnBhZ2VYAQAAAC10cr9AAABYEgAAAG9iamVjdC5fX2RlbGl0ZW1fX3LAQAAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2RlbGl0ZW1fX1gBAAAALXRywUAAAFgXAAAAYXJyYXkuYXJyYXkuZnJvbXVuaWNvZGVywkAAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXJyYXkuaHRtbCNhcnJheS5hcnJheS5mcm9tdW5pY29kZVgBAAAALXRyw0AAAFgzAAAAbXVsdGlwcm9jZXNzaW5nLnBvb2wubXVsdGlwcm9jZXNzaW5nLlBvb2wubWFwX2FzeW5jcsRAAAAoamkBAABqagEAAFhqAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5wb29sLm11bHRpcHJvY2Vzc2luZy5Qb29sLm1hcF9hc3luY1gBAAAALXRyxUAAAFgSAAAAaW1hcGxpYi5JTUFQNC5jb3B5csZAAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LmNvcHlYAQAAAC10csdAAABYEwAAAGRlY2ltYWwuQ29udGV4dC5mbWFyyEAAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5mbWFYAQAAAC10cslAAABYEwAAAHRpbWVpdC5UaW1lci50aW1laXRyykAAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGltZWl0Lmh0bWwjdGltZWl0LlRpbWVyLnRpbWVpdFgBAAAALXRyy0AAAFgdAAAAZGVjaW1hbC5EZWNpbWFsLnRvX2VuZ19zdHJpbmdyzEAAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC50b19lbmdfc3RyaW5nWAEAAAAtdHLNQAAAWBwAAABlbWFpbC5jaGFyc2V0LkNoYXJzZXQuX19lcV9fcs5AAAAoamkBAABqagEAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLmNoYXJzZXQuaHRtbCNlbWFpbC5jaGFyc2V0LkNoYXJzZXQuX19lcV9fWAEAAAAtdHLPQAAAWBEAAABiZGIuQmRiLnNldF90cmFjZXLQQAAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iZGIuaHRtbCNiZGIuQmRiLnNldF90cmFjZVgBAAAALXRy0UAAAFggAAAAbXVsdGlwcm9jZXNzaW5nLlF1ZXVlLmdldF9ub3dhaXRy0kAAAChqaQEAAGpqAQAAWFcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLlF1ZXVlLmdldF9ub3dhaXRYAQAAAC10ctNAAABYFQAAAGN1cnNlcy53aW5kb3cuY2xlYXJva3LUQAAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmNsZWFyb2tYAQAAAC10ctVAAABYJQAAAENvbmZpZ1BhcnNlci5SYXdDb25maWdQYXJzZXIuZ2V0ZmxvYXRy1kAAAChqaQEAAGpqAQAAWFkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjQ29uZmlnUGFyc2VyLlJhd0NvbmZpZ1BhcnNlci5nZXRmbG9hdFgBAAAALXRy10AAAFgTAAAAY2h1bmsuQ2h1bmsuZ2V0bmFtZXLYQAAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jaHVuay5odG1sI2NodW5rLkNodW5rLmdldG5hbWVYAQAAAC10ctlAAABYFAAAAHBpcGVzLlRlbXBsYXRlLmRlYnVnctpAAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BpcGVzLmh0bWwjcGlwZXMuVGVtcGxhdGUuZGVidWdYAQAAAC10cttAAABYFwAAAHJlLlJlZ2V4T2JqZWN0LmZpbmRpdGVyctxAAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlLmh0bWwjcmUuUmVnZXhPYmplY3QuZmluZGl0ZXJYAQAAAC10ct1AAABYEAAAAHR0ay5Db21ib2JveC5nZXRy3kAAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLkNvbWJvYm94LmdldFgBAAAALXRy30AAAFgWAAAAZGlmZmxpYi5EaWZmZXIuY29tcGFyZXLgQAAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaWZmbGliLmh0bWwjZGlmZmxpYi5EaWZmZXIuY29tcGFyZVgBAAAALXRy4UAAAFgXAAAAU3RyaW5nSU8uU3RyaW5nSU8uY2xvc2Vy4kAAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5naW8uaHRtbCNTdHJpbmdJTy5TdHJpbmdJTy5jbG9zZVgBAAAALXRy40AAAFgYAAAAZGF0ZXRpbWUuZGF0ZXRpbWUudHpuYW1lcuRAAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZXRpbWUudHpuYW1lWAEAAAAtdHLlQAAAWBMAAABvYmplY3QuX19yZXZlcnNlZF9fcuZAAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fcmV2ZXJzZWRfX1gBAAAALXRy50AAAFgdAAAAeGRybGliLlVucGFja2VyLnVucGFja19vcGFxdWVy6EAAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveGRybGliLmh0bWwjeGRybGliLlVucGFja2VyLnVucGFja19vcGFxdWVYAQAAAC10culAAABYEgAAAGFycmF5LmFycmF5LmFwcGVuZHLqQAAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hcnJheS5odG1sI2FycmF5LmFycmF5LmFwcGVuZFgBAAAALXRy60AAAFgOAAAAb2JqZWN0Ll9fbGVuX19y7EAAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19sZW5fX1gBAAAALXRy7UAAAFgiAAAAZW1haWwubWVzc2FnZS5NZXNzYWdlLmdldF9maWxlbmFtZXLuQAAAKGppAQAAamoBAABYVwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5NZXNzYWdlLmdldF9maWxlbmFtZVgBAAAALXRy70AAAFgbAAAAaHR0cGxpYi5IVFRQUmVzcG9uc2UuZmlsZW5vcvBAAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0dHBsaWIuaHRtbCNodHRwbGliLkhUVFBSZXNwb25zZS5maWxlbm9YAQAAAC10cvFAAABYHwAAAFRpeC50aXhDb21tYW5kLnRpeF9hZGRiaXRtYXBkaXJy8kAAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGl4Lmh0bWwjVGl4LnRpeENvbW1hbmQudGl4X2FkZGJpdG1hcGRpclgBAAAALXRy80AAAFgWAAAAaG90c2hvdC5Qcm9maWxlLnJ1bmN0eHL0QAAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ob3RzaG90Lmh0bWwjaG90c2hvdC5Qcm9maWxlLnJ1bmN0eFgBAAAALXRy9UAAAFgYAAAAYXN5bmNvcmUuZGlzcGF0Y2hlci5zZW5kcvZAAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzeW5jb3JlLmh0bWwjYXN5bmNvcmUuZGlzcGF0Y2hlci5zZW5kWAEAAAAtdHL3QAAAWCsAAAB4bWwuc2F4LnhtbHJlYWRlci5YTUxSZWFkZXIuc2V0RXJyb3JIYW5kbGVycvhAAAAoamkBAABqagEAAFhhAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuWE1MUmVhZGVyLnNldEVycm9ySGFuZGxlclgBAAAALXRy+UAAAFgWAAAAaW1hcGxpYi5JTUFQNC5teXJpZ2h0c3L6QAAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5teXJpZ2h0c1gBAAAALXRy+0AAAFgjAAAAQ29uZmlnUGFyc2VyLlJhd0NvbmZpZ1BhcnNlci5nZXRpbnRy/EAAAChqaQEAAGpqAQAAWFcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjQ29uZmlnUGFyc2VyLlJhd0NvbmZpZ1BhcnNlci5nZXRpbnRYAQAAAC10cv1AAABYDwAAAGFycmF5LmFycmF5LnBvcHL+QAAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hcnJheS5odG1sI2FycmF5LmFycmF5LnBvcFgBAAAALXRy/0AAAFgmAAAAZGlzdHV0aWxzLnRleHRfZmlsZS5UZXh0RmlsZS5yZWFkbGluZXNyAEEAAChqaQEAAGpqAQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMudGV4dF9maWxlLlRleHRGaWxlLnJlYWRsaW5lc1gBAAAALXRyAUEAAFgaAAAAbXNpbGliLkZlYXR1cmUuc2V0X2N1cnJlbnRyAkEAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLkZlYXR1cmUuc2V0X2N1cnJlbnRYAQAAAC10cgNBAABYIwAAAEhUTUxQYXJzZXIuSFRNTFBhcnNlci5oYW5kbGVfZW5kdGFncgRBAAAoamkBAABqagEAAFhVAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0bWxwYXJzZXIuaHRtbCNIVE1MUGFyc2VyLkhUTUxQYXJzZXIuaGFuZGxlX2VuZHRhZ1gBAAAALXRyBUEAAFgUAAAAZGF0ZXRpbWUudGltZS50em5hbWVyBkEAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS50aW1lLnR6bmFtZVgBAAAALXRyB0EAAFgvAAAAbG9nZ2luZy5oYW5kbGVycy5OVEV2ZW50TG9nSGFuZGxlci5nZXRFdmVudFR5cGVyCEEAAChqaQEAAGpqAQAAWGcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuTlRFdmVudExvZ0hhbmRsZXIuZ2V0RXZlbnRUeXBlWAEAAAAtdHIJQQAAWCEAAABDb25maWdQYXJzZXIuU2FmZUNvbmZpZ1BhcnNlci5zZXRyCkEAAChqaQEAAGpqAQAAWFUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjQ29uZmlnUGFyc2VyLlNhZmVDb25maWdQYXJzZXIuc2V0WAEAAAAtdHILQQAAWB0AAABodG1sbGliLkhUTUxQYXJzZXIuYW5jaG9yX2VuZHIMQQAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odG1sbGliLmh0bWwjaHRtbGxpYi5IVE1MUGFyc2VyLmFuY2hvcl9lbmRYAQAAAC10cg1BAABYHQAAAEZyYW1lV29yay5BcHBsaWNhdGlvbi5kb19jaGFycg5BAAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZyYW1ld29yay5odG1sI0ZyYW1lV29yay5BcHBsaWNhdGlvbi5kb19jaGFyWAEAAAAtdHIPQQAAWCQAAABzZ21sbGliLlNHTUxQYXJzZXIudW5rbm93bl9lbnRpdHlyZWZyEEEAAChqaQEAAGpqAQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2dtbGxpYi5odG1sI3NnbWxsaWIuU0dNTFBhcnNlci51bmtub3duX2VudGl0eXJlZlgBAAAALXRyEUEAAFglAAAAZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuY29tcGlsZXISQQAAKGppAQAAamoBAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmNvbXBpbGVYAQAAAC10chNBAABYGAAAAGRlY2ltYWwuQ29udGV4dC5jb3B5X2Fic3IUQQAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmNvcHlfYWJzWAEAAAAtdHIVQQAAWBQAAAB3YXZlLldhdmVfd3JpdGUudGVsbHIWQQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93YXZlLmh0bWwjd2F2ZS5XYXZlX3dyaXRlLnRlbGxYAQAAAC10chdBAABYLQAAAGxvZ2dpbmcuaGFuZGxlcnMuQnVmZmVyaW5nSGFuZGxlci5zaG91bGRGbHVzaHIYQQAAKGppAQAAamoBAABYZQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5CdWZmZXJpbmdIYW5kbGVyLnNob3VsZEZsdXNoWAEAAAAtdHIZQQAAWBEAAABwb3BsaWIuUE9QMy5wYXNzX3IaQQAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wb3BsaWIuaHRtbCNwb3BsaWIuUE9QMy5wYXNzX1gBAAAALXRyG0EAAFgOAAAAZnRwbGliLkZUUC5kaXJyHEEAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnRwbGliLmh0bWwjZnRwbGliLkZUUC5kaXJYAQAAAC10ch1BAABYEwAAAHNvY2tldC5zb2NrZXQuY2xvc2VyHkEAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LnNvY2tldC5jbG9zZVgBAAAALXRyH0EAAFgYAAAAc29ja2V0LnNvY2tldC5nZXRzb2Nrb3B0ciBBAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5zb2NrZXQuZ2V0c29ja29wdFgBAAAALXRyIUEAAFgjAAAAbXVsdGlmaWxlLk11bHRpRmlsZS5zZWN0aW9uX2RpdmlkZXJyIkEAAChqaQEAAGpqAQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlmaWxlLmh0bWwjbXVsdGlmaWxlLk11bHRpRmlsZS5zZWN0aW9uX2RpdmlkZXJYAQAAAC10ciNBAABYDwAAAG9iamVjdC5fX2l0ZXJfX3IkQQAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2l0ZXJfX1gBAAAALXRyJUEAAFg7AAAARG9jWE1MUlBDU2VydmVyLkRvY0NHSVhNTFJQQ1JlcXVlc3RIYW5kbGVyLnNldF9zZXJ2ZXJfdGl0bGVyJkEAAChqaQEAAGpqAQAAWHIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jeG1scnBjc2VydmVyLmh0bWwjRG9jWE1MUlBDU2VydmVyLkRvY0NHSVhNTFJQQ1JlcXVlc3RIYW5kbGVyLnNldF9zZXJ2ZXJfdGl0bGVYAQAAAC10cidBAABYFQAAAHRhcmZpbGUuVGFySW5mby5pc2NocnIoQQAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJJbmZvLmlzY2hyWAEAAAAtdHIpQQAAWBwAAABjb2xsZWN0aW9ucy5Db3VudGVyLnN1YnRyYWN0cipBAAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuQ291bnRlci5zdWJ0cmFjdFgBAAAALXRyK0EAAFgTAAAAY2h1bmsuQ2h1bmsuZ2V0c2l6ZXIsQQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jaHVuay5odG1sI2NodW5rLkNodW5rLmdldHNpemVYAQAAAC10ci1BAABYFgAAAG1haWxib3guTWFpbGJveC52YWx1ZXNyLkEAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGJveC52YWx1ZXNYAQAAAC10ci9BAABYIQAAAHppcGltcG9ydC56aXBpbXBvcnRlci5maW5kX21vZHVsZXIwQQAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96aXBpbXBvcnQuaHRtbCN6aXBpbXBvcnQuemlwaW1wb3J0ZXIuZmluZF9tb2R1bGVYAQAAAC10cjFBAABYFAAAAGJ6Mi5CWjJGaWxlLnJlYWRsaW5lcjJBAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2J6Mi5odG1sI2J6Mi5CWjJGaWxlLnJlYWRsaW5lWAEAAAAtdHIzQQAAWBgAAABtc2lsaWIuUmVjb3JkLlNldEludGVnZXJyNEEAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLlJlY29yZC5TZXRJbnRlZ2VyWAEAAAAtdHI1QQAAWBMAAABobWFjLkhNQUMuaGV4ZGlnZXN0cjZBAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2htYWMuaHRtbCNobWFjLkhNQUMuaGV4ZGlnZXN0WAEAAAAtdHI3QQAAWBEAAABhaWZjLmFpZmMuZ2V0bWFya3I4QQAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9haWZjLmh0bWwjYWlmYy5haWZjLmdldG1hcmtYAQAAAC10cjlBAABYIAAAAGVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5hZGRfaGVhZGVycjpBAAAoamkBAABqagEAAFhVAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuYWRkX2hlYWRlclgBAAAALXRyO0EAAFgdAAAAZW1haWwubWVzc2FnZS5NZXNzYWdlLmdldF9hbGxyPEEAAChqaQEAAGpqAQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS5nZXRfYWxsWAEAAAAtdHI9QQAAWCIAAAB1cmxsaWIyLk9wZW5lckRpcmVjdG9yLmFkZF9oYW5kbGVycj5BAAAoamkBAABqagEAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLk9wZW5lckRpcmVjdG9yLmFkZF9oYW5kbGVyWAEAAAAtdHI/QQAAWA4AAABnZW5lcmF0b3IubmV4dHJAQQAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ2VuZXJhdG9yLm5leHRYAQAAAC10ckFBAABYFQAAAHRhcmZpbGUuVGFyRmlsZS5jbG9zZXJCQQAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJGaWxlLmNsb3NlWAEAAAAtdHJDQQAAWBsAAABkb2N0ZXN0LkRvY1Rlc3RQYXJzZXIucGFyc2VyREEAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRG9jVGVzdFBhcnNlci5wYXJzZVgBAAAALXRyRUEAAHUoWBgAAABtYWlsYm94Lk1ILnJlbW92ZV9mb2xkZXJyRkEAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTUgucmVtb3ZlX2ZvbGRlclgBAAAALXRyR0EAAFgTAAAAdHRrLlRyZWV2aWV3LnBhcmVudHJIQQAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuVHJlZXZpZXcucGFyZW50WAEAAAAtdHJJQQAAWB4AAABtaW1ldHlwZXMuTWltZVR5cGVzLmd1ZXNzX3R5cGVySkEAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWltZXR5cGVzLmh0bWwjbWltZXR5cGVzLk1pbWVUeXBlcy5ndWVzc190eXBlWAEAAAAtdHJLQQAAWCEAAAB4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC5nZXRyTEEAAChqaQEAAGpqAQAAWF4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQuZ2V0WAEAAAAtdHJNQQAAWBwAAABtYWlsYm94Lm1ib3hNZXNzYWdlLmFkZF9mbGFnck5BAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lm1ib3hNZXNzYWdlLmFkZF9mbGFnWAEAAAAtdHJPQQAAWBYAAABkZWNpbWFsLkNvbnRleHQuZGl2aWRlclBBAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQuZGl2aWRlWAEAAAAtdHJRQQAAWCoAAAB3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLnNldHVwX2Vudmlyb25yUkEAAChqaQEAAGpqAQAAWFkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd3NnaXJlZi5odG1sI3dzZ2lyZWYuaGFuZGxlcnMuQmFzZUhhbmRsZXIuc2V0dXBfZW52aXJvblgBAAAALXRyU0EAAFgeAAAAcmxjb21wbGV0ZXIuQ29tcGxldGVyLmNvbXBsZXRlclRBAAAoamkBAABqagEAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JsY29tcGxldGVyLmh0bWwjcmxjb21wbGV0ZXIuQ29tcGxldGVyLmNvbXBsZXRlWAEAAAAtdHJVQQAAWBIAAABmcm96ZW5zZXQuaXNzdWJzZXRyVkEAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNmcm96ZW5zZXQuaXNzdWJzZXRYAQAAAC10cldBAABYEwAAAG9iamVjdC5fX2dldHN0YXRlX19yWEEAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGlja2xlLmh0bWwjb2JqZWN0Ll9fZ2V0c3RhdGVfX1gBAAAALXRyWUEAAFgVAAAAcmUuTWF0Y2hPYmplY3QuZXhwYW5kclpBAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlLmh0bWwjcmUuTWF0Y2hPYmplY3QuZXhwYW5kWAEAAAAtdHJbQQAAWCEAAABtYWlsYm94Lk1haWxkaXJNZXNzYWdlLnNldF9zdWJkaXJyXEEAAChqaQEAAGpqAQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGRpck1lc3NhZ2Uuc2V0X3N1YmRpclgBAAAALXRyXUEAAFghAAAAdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0SXNOb3ROb25lcl5BAAAoamkBAABqagEAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0SXNOb3ROb25lWAEAAAAtdHJfQQAAWBQAAABtbWFwLm1tYXAud3JpdGVfYnl0ZXJgQQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tbWFwLmh0bWwjbW1hcC5tbWFwLndyaXRlX2J5dGVYAQAAAC10cmFBAABYGgAAAG5ldHJjLm5ldHJjLmF1dGhlbnRpY2F0b3JzcmJBAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L25ldHJjLmh0bWwjbmV0cmMubmV0cmMuYXV0aGVudGljYXRvcnNYAQAAAC10cmNBAABYGQAAAHdhdmUuV2F2ZV93cml0ZS5zZXRwYXJhbXNyZEEAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2F2ZS5odG1sI3dhdmUuV2F2ZV93cml0ZS5zZXRwYXJhbXNYAQAAAC10cmVBAABYDwAAAGdlbmVyYXRvci5jbG9zZXJmQQAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ2VuZXJhdG9yLmNsb3NlWAEAAAAtdHJnQQAAWBsAAABzeW10YWJsZS5TeW1ib2wuaXNfaW1wb3J0ZWRyaEEAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3ltdGFibGUuaHRtbCNzeW10YWJsZS5TeW1ib2wuaXNfaW1wb3J0ZWRYAQAAAC10cmlBAABYCAAAAGRpY3QuZ2V0cmpBAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZGljdC5nZXRYAQAAAC10cmtBAABYEgAAAGNvbnRhaW5lci5fX2l0ZXJfX3JsQQAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2NvbnRhaW5lci5fX2l0ZXJfX1gBAAAALXRybUEAAFgXAAAAYnNkZGIuYnNkZGJvYmplY3QuZmlyc3RybkEAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYnNkZGIuaHRtbCNic2RkYi5ic2RkYm9iamVjdC5maXJzdFgBAAAALXRyb0EAAFgbAAAAcmZjODIyLkFkZHJlc3NMaXN0Ll9faXN1Yl9fcnBBAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JmYzgyMi5odG1sI3JmYzgyMi5BZGRyZXNzTGlzdC5fX2lzdWJfX1gBAAAALXRycUEAAFgUAAAAbWhsaWIuTUgubGlzdGZvbGRlcnNyckEAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWhsaWIuaHRtbCNtaGxpYi5NSC5saXN0Zm9sZGVyc1gBAAAALXRyc0EAAFgUAAAAZnJvemVuc2V0Lmlzc3VwZXJzZXRydEEAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNmcm96ZW5zZXQuaXNzdXBlcnNldFgBAAAALXRydUEAAFgSAAAAdHRrLk5vdGVib29rLmluZGV4cnZBAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5Ob3RlYm9vay5pbmRleFgBAAAALXRyd0EAAFgfAAAAdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0R3JlYXRlcnJ4QQAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydEdyZWF0ZXJYAQAAAC10cnlBAABYGAAAAHVybGxpYjIuUmVxdWVzdC5nZXRfaG9zdHJ6QQAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5SZXF1ZXN0LmdldF9ob3N0WAEAAAAtdHJ7QQAAWBgAAAB1cmxsaWIyLlJlcXVlc3QuZ2V0X3R5cGVyfEEAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuUmVxdWVzdC5nZXRfdHlwZVgBAAAALXRyfUEAAFgVAAAAc3VicHJvY2Vzcy5Qb3Blbi53YWl0cn5BAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLlBvcGVuLndhaXRYAQAAAC10cn9BAABYHAAAAHBwcmludC5QcmV0dHlQcmludGVyLnBmb3JtYXRygEEAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHByaW50Lmh0bWwjcHByaW50LlByZXR0eVByaW50ZXIucGZvcm1hdFgBAAAALXRygUEAAFgSAAAAb2JqZWN0Ll9faXJzaGlmdF9fcoJBAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9faXJzaGlmdF9fWAEAAAAtdHKDQQAAWB8AAABlbWFpbC5tZXNzYWdlLk1lc3NhZ2Uuc2V0X3BhcmFtcoRBAAAoamkBAABqagEAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2Uuc2V0X3BhcmFtWAEAAAAtdHKFQQAAWB4AAABkZWNpbWFsLkRlY2ltYWwucmVtYWluZGVyX25lYXJyhkEAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5yZW1haW5kZXJfbmVhclgBAAAALXRyh0EAAFgoAAAAQ29uZmlnUGFyc2VyLlJhd0NvbmZpZ1BhcnNlci5oYXNfc2VjdGlvbnKIQQAAKGppAQAAamoBAABYXAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNDb25maWdQYXJzZXIuUmF3Q29uZmlnUGFyc2VyLmhhc19zZWN0aW9uWAEAAAAtdHKJQQAAWBgAAABiZGIuQmRiLmNsZWFyX2FsbF9icmVha3NyikEAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYi5jbGVhcl9hbGxfYnJlYWtzWAEAAAAtdHKLQQAAWBQAAABjdXJzZXMud2luZG93LmtleXBhZHKMQQAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmtleXBhZFgBAAAALXRyjUEAAFgaAAAAbWFpbGJveC5NYWlsYm94Lml0ZXJ2YWx1ZXNyjkEAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGJveC5pdGVydmFsdWVzWAEAAAAtdHKPQQAAWA0AAABvYmplY3QuX19uZV9fcpBBAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fbmVfX1gBAAAALXRykUEAAFgcAAAAbG9nZ2luZy5IYW5kbGVyLnNldEZvcm1hdHRlcnKSQQAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5IYW5kbGVyLnNldEZvcm1hdHRlclgBAAAALXRyk0EAAFgdAAAAY29kZWNzLlN0cmVhbVJlYWRlci5yZWFkbGluZXNylEEAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLlN0cmVhbVJlYWRlci5yZWFkbGluZXNYAQAAAC10cpVBAABYFAAAAHJleGVjLlJFeGVjLnNfcmVsb2FkcpZBAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JleGVjLmh0bWwjcmV4ZWMuUkV4ZWMuc19yZWxvYWRYAQAAAC10cpdBAABYFAAAAGFycmF5LmFycmF5LmJ5dGVzd2FwcphBAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FycmF5Lmh0bWwjYXJyYXkuYXJyYXkuYnl0ZXN3YXBYAQAAAC10cplBAABYFQAAAHR0ay5UcmVldmlldy5pZGVudGlmeXKaQQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuVHJlZXZpZXcuaWRlbnRpZnlYAQAAAC10cptBAABYGAAAAG1haWxib3guTWFpbGJveC5pdGVya2V5c3KcQQAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsYm94Lml0ZXJrZXlzWAEAAAAtdHKdQQAAWBoAAABzdW5hdS5BVV9yZWFkLmdldG5jaGFubmVsc3KeQQAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdW5hdS5odG1sI3N1bmF1LkFVX3JlYWQuZ2V0bmNoYW5uZWxzWAEAAAAtdHKfQQAAWBgAAABkZWNpbWFsLkNvbnRleHQuc3VidHJhY3RyoEEAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5zdWJ0cmFjdFgBAAAALXRyoUEAAFgRAAAAbm50cGxpYi5OTlRQLmJvZHlyokEAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbm50cGxpYi5odG1sI25udHBsaWIuTk5UUC5ib2R5WAEAAAAtdHKjQQAAWBUAAAByZS5SZWdleE9iamVjdC5zZWFyY2hypEEAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmUuaHRtbCNyZS5SZWdleE9iamVjdC5zZWFyY2hYAQAAAC10cqVBAABYJgAAAFNvY2tldFNlcnZlci5CYXNlU2VydmVyLnZlcmlmeV9yZXF1ZXN0cqZBAAAoamkBAABqagEAAFhaAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI1NvY2tldFNlcnZlci5CYXNlU2VydmVyLnZlcmlmeV9yZXF1ZXN0WAEAAAAtdHKnQQAAWBwAAABsb2dnaW5nLkxvZ1JlY29yZC5nZXRNZXNzYWdlcqhBAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkxvZ1JlY29yZC5nZXRNZXNzYWdlWAEAAAAtdHKpQQAAWCEAAABzZ21sbGliLlNHTUxQYXJzZXIuaGFuZGxlX2NvbW1lbnRyqkEAAChqaQEAAGpqAQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2dtbGxpYi5odG1sI3NnbWxsaWIuU0dNTFBhcnNlci5oYW5kbGVfY29tbWVudFgBAAAALXRyq0EAAFgSAAAAbWFpbGJveC5CYWJ5bC5sb2NrcqxBAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94LkJhYnlsLmxvY2tYAQAAAC10cq1BAABYEgAAAGNzdi5jc3ZyZWFkZXIubmV4dHKuQQAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jc3YuaHRtbCNjc3YuY3N2cmVhZGVyLm5leHRYAQAAAC10cq9BAABYIAAAAGdldHRleHQuR05VVHJhbnNsYXRpb25zLm5nZXR0ZXh0crBBAAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dldHRleHQuaHRtbCNnZXR0ZXh0LkdOVVRyYW5zbGF0aW9ucy5uZ2V0dGV4dFgBAAAALXRysUEAAFgeAAAATWltZVdyaXRlci5NaW1lV3JpdGVyLmxhc3RwYXJ0crJBAAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbWV3cml0ZXIuaHRtbCNNaW1lV3JpdGVyLk1pbWVXcml0ZXIubGFzdHBhcnRYAQAAAC10crNBAABYGAAAAHN1bmF1LkFVX3dyaXRlLnNldHBhcmFtc3K0QQAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdW5hdS5odG1sI3N1bmF1LkFVX3dyaXRlLnNldHBhcmFtc1gBAAAALXRytUEAAFgRAAAAY3Vyc2VzLndpbmRvdy5ib3hytkEAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5ib3hYAQAAAC10crdBAABYGwAAAEhUTUxQYXJzZXIuSFRNTFBhcnNlci5jbG9zZXK4QQAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odG1scGFyc2VyLmh0bWwjSFRNTFBhcnNlci5IVE1MUGFyc2VyLmNsb3NlWAEAAAAtdHK5QQAAWBMAAABhcnJheS5hcnJheS5yZXZlcnNlcrpBAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FycmF5Lmh0bWwjYXJyYXkuYXJyYXkucmV2ZXJzZVgBAAAALXRyu0EAAFg4AAAAbXVsdGlwcm9jZXNzaW5nLnBvb2wubXVsdGlwcm9jZXNzaW5nLlBvb2wuaW1hcF91bm9yZGVyZWRyvEEAAChqaQEAAGpqAQAAWG8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLnBvb2wubXVsdGlwcm9jZXNzaW5nLlBvb2wuaW1hcF91bm9yZGVyZWRYAQAAAC10cr1BAABYEgAAAGJkYi5CZGIuYnJlYWtfaGVyZXK+QQAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iZGIuaHRtbCNiZGIuQmRiLmJyZWFrX2hlcmVYAQAAAC10cr9BAABYJQAAAGZpbGVjbXAuZGlyY21wLnJlcG9ydF9wYXJ0aWFsX2Nsb3N1cmVywEEAAChqaQEAAGpqAQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmlsZWNtcC5odG1sI2ZpbGVjbXAuZGlyY21wLnJlcG9ydF9wYXJ0aWFsX2Nsb3N1cmVYAQAAAC10csFBAABYJAAAAEhUTUxQYXJzZXIuSFRNTFBhcnNlci5oYW5kbGVfY29tbWVudHLCQQAAKGppAQAAamoBAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odG1scGFyc2VyLmh0bWwjSFRNTFBhcnNlci5IVE1MUGFyc2VyLmhhbmRsZV9jb21tZW50WAEAAAAtdHLDQQAAWBYAAABjdXJzZXMud2luZG93LnRvdWNod2lucsRBAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cudG91Y2h3aW5YAQAAAC10csVBAABYFAAAAHJleGVjLlJFeGVjLnNfdW5sb2FkcsZBAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JleGVjLmh0bWwjcmV4ZWMuUkV4ZWMuc191bmxvYWRYAQAAAC10csdBAABYGQAAAHRhcmZpbGUuVGFyRmlsZS5nZXRtZW1iZXJyyEEAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuVGFyRmlsZS5nZXRtZW1iZXJYAQAAAC10cslBAABYFQAAAF93aW5yZWcuUHlIS0VZLkRldGFjaHLKQQAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjX3dpbnJlZy5QeUhLRVkuRGV0YWNoWAEAAAAtdHLLQQAAWBcAAABzaGxleC5zaGxleC5wdXNoX3NvdXJjZXLMQQAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaGxleC5odG1sI3NobGV4LnNobGV4LnB1c2hfc291cmNlWAEAAAAtdHLNQQAAWBAAAABiejIuQloyRmlsZS50ZWxscs5BAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2J6Mi5odG1sI2J6Mi5CWjJGaWxlLnRlbGxYAQAAAC10cs9BAABYHAAAAGltcC5OdWxsSW1wb3J0ZXIuZmluZF9tb2R1bGVy0EEAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1wLmh0bWwjaW1wLk51bGxJbXBvcnRlci5maW5kX21vZHVsZVgBAAAALXRy0UEAAFgzAAAAbXVsdGlwcm9jZXNzaW5nLnBvb2wubXVsdGlwcm9jZXNzaW5nLlBvb2wudGVybWluYXRlctJBAAAoamkBAABqagEAAFhqAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5wb29sLm11bHRpcHJvY2Vzc2luZy5Qb29sLnRlcm1pbmF0ZVgBAAAALXRy00EAAFgUAAAAYWlmYy5haWZjLnNldG5mcmFtZXNy1EEAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWlmYy5odG1sI2FpZmMuYWlmYy5zZXRuZnJhbWVzWAEAAAAtdHLVQQAAWCAAAAB6aXBpbXBvcnQuemlwaW1wb3J0ZXIuZ2V0X3NvdXJjZXLWQQAAKGppAQAAamoBAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96aXBpbXBvcnQuaHRtbCN6aXBpbXBvcnQuemlwaW1wb3J0ZXIuZ2V0X3NvdXJjZVgBAAAALXRy10EAAFgcAAAAZW1haWwubWVzc2FnZS5NZXNzYWdlLmF0dGFjaHLYQQAAKGppAQAAamoBAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5NZXNzYWdlLmF0dGFjaFgBAAAALXRy2UEAAFgiAAAAZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIud2FybnLaQQAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLndhcm5YAQAAAC10cttBAABYHAAAAG1haWxib3guTU1ERk1lc3NhZ2UuZ2V0X2Zyb21y3EEAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTU1ERk1lc3NhZ2UuZ2V0X2Zyb21YAQAAAC10ct1BAABYEgAAAHNvY2tldC5zb2NrZXQucmVjdnLeQQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuc29ja2V0LnJlY3ZYAQAAAC10ct9BAABYIAAAAHppcGltcG9ydC56aXBpbXBvcnRlci5pc19wYWNrYWdlcuBBAAAoamkBAABqagEAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGltcG9ydC5odG1sI3ppcGltcG9ydC56aXBpbXBvcnRlci5pc19wYWNrYWdlWAEAAAAtdHLhQQAAWCYAAAB1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnROb3RBbG1vc3RFcXVhbHLiQQAAKGppAQAAamoBAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydE5vdEFsbW9zdEVxdWFsWAEAAAAtdHLjQQAAWB8AAABlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuYXNfc3RyaW5ncuRBAAAoamkBAABqagEAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuYXNfc3RyaW5nWAEAAAAtdHLlQQAAWAsAAABkaWN0LnVwZGF0ZXLmQQAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2RpY3QudXBkYXRlWAEAAAAtdHLnQQAAWCQAAABzZ21sbGliLlNHTUxQYXJzZXIuZ2V0X3N0YXJ0dGFnX3RleHRy6EEAAChqaQEAAGpqAQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2dtbGxpYi5odG1sI3NnbWxsaWIuU0dNTFBhcnNlci5nZXRfc3RhcnR0YWdfdGV4dFgBAAAALXRy6UEAAFgiAAAAb3NzYXVkaW9kZXYub3NzX2F1ZGlvX2RldmljZS5zcGVlZHLqQQAAKGppAQAAamoBAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vc3NhdWRpb2Rldi5odG1sI29zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2Uuc3BlZWRYAQAAAC10cutBAABYGwAAAFRpeC50aXhDb21tYW5kLnRpeF9nZXRpbWFnZXLsQQAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aXguaHRtbCNUaXgudGl4Q29tbWFuZC50aXhfZ2V0aW1hZ2VYAQAAAC10cu1BAABYGwAAAG1obGliLkZvbGRlci5yZW1vdmVtZXNzYWdlc3LuQQAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taGxpYi5odG1sI21obGliLkZvbGRlci5yZW1vdmVtZXNzYWdlc1gBAAAALXRy70EAAFglAAAAZ2V0dGV4dC5OdWxsVHJhbnNsYXRpb25zLmFkZF9mYWxsYmFja3LwQQAAKGppAQAAamoBAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZXR0ZXh0Lmh0bWwjZ2V0dGV4dC5OdWxsVHJhbnNsYXRpb25zLmFkZF9mYWxsYmFja1gBAAAALXRy8UEAAFggAAAAbXVsdGlwcm9jZXNzaW5nLlF1ZXVlLnB1dF9ub3dhaXRy8kEAAChqaQEAAGpqAQAAWFcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLlF1ZXVlLnB1dF9ub3dhaXRYAQAAAC10cvNBAABYDwAAAG1tYXAubW1hcC53cml0ZXL0QQAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tbWFwLmh0bWwjbW1hcC5tbWFwLndyaXRlWAEAAAAtdHL1QQAAWB4AAAB4bWwuZG9tLkVsZW1lbnQuc2V0QXR0cmlidXRlTlNy9kEAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uRWxlbWVudC5zZXRBdHRyaWJ1dGVOU1gBAAAALXRy90EAAFghAAAAZ2V0dGV4dC5HTlVUcmFuc2xhdGlvbnMubG5nZXR0ZXh0cvhBAAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dldHRleHQuaHRtbCNnZXR0ZXh0LkdOVVRyYW5zbGF0aW9ucy5sbmdldHRleHRYAQAAAC10cvlBAABYFAAAAGZ0cGxpYi5GVFAuc3RvcmxpbmVzcvpBAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z0cGxpYi5odG1sI2Z0cGxpYi5GVFAuc3RvcmxpbmVzWAEAAAAtdHL7QQAAWCsAAABsb2dnaW5nLmhhbmRsZXJzLlNvY2tldEhhbmRsZXIuY3JlYXRlU29ja2V0cvxBAAAoamkBAABqagEAAFhjAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLlNvY2tldEhhbmRsZXIuY3JlYXRlU29ja2V0WAEAAAAtdHL9QQAAWBEAAABubnRwbGliLk5OVFAubGFzdHL+QQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ubnRwbGliLmh0bWwjbm50cGxpYi5OTlRQLmxhc3RYAQAAAC10cv9BAABYIQAAAGRlY2ltYWwuRGVjaW1hbC50b19pbnRlZ3JhbF92YWx1ZXIAQgAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLnRvX2ludGVncmFsX3ZhbHVlWAEAAAAtdHIBQgAAWCAAAABzeW10YWJsZS5TeW1ib2xUYWJsZS5nZXRfc3ltYm9sc3ICQgAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeW10YWJsZS5odG1sI3N5bXRhYmxlLlN5bWJvbFRhYmxlLmdldF9zeW1ib2xzWAEAAAAtdHIDQgAAWCIAAAB4bWwuZG9tLkVsZW1lbnQuc2V0QXR0cmlidXRlTm9kZU5TcgRCAAAoamkBAABqagEAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkVsZW1lbnQuc2V0QXR0cmlidXRlTm9kZU5TWAEAAAAtdHIFQgAAWCEAAABvc3NhdWRpb2Rldi5vc3NfYXVkaW9fZGV2aWNlLnJlYWRyBkIAAChqaQEAAGpqAQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3NzYXVkaW9kZXYuaHRtbCNvc3NhdWRpb2Rldi5vc3NfYXVkaW9fZGV2aWNlLnJlYWRYAQAAAC10cgdCAABYHQAAAGRpZmZsaWIuU2VxdWVuY2VNYXRjaGVyLnJhdGlvcghCAAAoamkBAABqagEAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RpZmZsaWIuaHRtbCNkaWZmbGliLlNlcXVlbmNlTWF0Y2hlci5yYXRpb1gBAAAALXRyCUIAAFgaAAAAeG1sLmRvbS5Ob2RlLmhhc0F0dHJpYnV0ZXNyCkIAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uTm9kZS5oYXNBdHRyaWJ1dGVzWAEAAAAtdHILQgAAWBAAAABiZGIuQmRiLmRvX2NsZWFycgxCAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JkYi5odG1sI2JkYi5CZGIuZG9fY2xlYXJYAQAAAC10cg1CAABYGgAAAGltYXBsaWIuSU1BUDQuYXV0aGVudGljYXRlcg5CAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LmF1dGhlbnRpY2F0ZVgBAAAALXRyD0IAAFgjAAAAbG9nZ2luZy5oYW5kbGVycy5TeXNMb2dIYW5kbGVyLmVtaXRyEEIAAChqaQEAAGpqAQAAWFsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuU3lzTG9nSGFuZGxlci5lbWl0WAEAAAAtdHIRQgAAWCIAAABzeW10YWJsZS5TeW1ib2wuaXNfZGVjbGFyZWRfZ2xvYmFschJCAAAoamkBAABqagEAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5bXRhYmxlLmh0bWwjc3ltdGFibGUuU3ltYm9sLmlzX2RlY2xhcmVkX2dsb2JhbFgBAAAALXRyE0IAAFgfAAAAY2FsZW5kYXIuQ2FsZW5kYXIuaXRlcm1vbnRoZGF5c3IUQgAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLkNhbGVuZGFyLml0ZXJtb250aGRheXNYAQAAAC10chVCAABYFQAAAHNvY2tldC5zb2NrZXQuc2VuZGFsbHIWQgAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuc29ja2V0LnNlbmRhbGxYAQAAAC10chdCAABYFgAAAGRlY2ltYWwuQ29udGV4dC5yb3RhdGVyGEIAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5yb3RhdGVYAQAAAC10chlCAABYFgAAAGZ0cGxpYi5GVFAudHJhbnNmZXJjbWRyGkIAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnRwbGliLmh0bWwjZnRwbGliLkZUUC50cmFuc2ZlcmNtZFgBAAAALXRyG0IAAFgbAAAAZW1haWwuaGVhZGVyLkhlYWRlci5fX3N0cl9fchxCAAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLmhlYWRlci5odG1sI2VtYWlsLmhlYWRlci5IZWFkZXIuX19zdHJfX1gBAAAALXRyHUIAAFgRAAAAdHRrLlRyZWV2aWV3LmJib3hyHkIAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLlRyZWV2aWV3LmJib3hYAQAAAC10ch9CAABYGQAAAHhtbC5kb20uTm9kZS5pbnNlcnRCZWZvcmVyIEIAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uTm9kZS5pbnNlcnRCZWZvcmVYAQAAAC10ciFCAABYKAAAAGVtYWlsLmNoYXJzZXQuQ2hhcnNldC5nZXRfb3V0cHV0X2NoYXJzZXRyIkIAAChqaQEAAGpqAQAAWF0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwuY2hhcnNldC5odG1sI2VtYWlsLmNoYXJzZXQuQ2hhcnNldC5nZXRfb3V0cHV0X2NoYXJzZXRYAQAAAC10ciNCAABYIQAAAHNzbC5TU0xDb250ZXh0LnNldF9hbHBuX3Byb3RvY29sc3IkQgAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMQ29udGV4dC5zZXRfYWxwbl9wcm90b2NvbHNYAQAAAC10ciVCAABYLAAAAG11bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5CYXNlTWFuYWdlci5jb25uZWN0ciZCAAAoamkBAABqagEAAFhjAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5CYXNlTWFuYWdlci5jb25uZWN0WAEAAAAtdHInQgAAWDgAAAB4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuUHJvY2Vzc2luZ0luc3RydWN0aW9uSGFuZGxlcnIoQgAAKGppAQAAamoBAABYZwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLlByb2Nlc3NpbmdJbnN0cnVjdGlvbkhhbmRsZXJYAQAAAC10cilCAABYGwAAAGh0bWxsaWIuSFRNTFBhcnNlci5zYXZlX2VuZHIqQgAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odG1sbGliLmh0bWwjaHRtbGxpYi5IVE1MUGFyc2VyLnNhdmVfZW5kWAEAAAAtdHIrQgAAWBgAAAB1bml0dGVzdC5UZXN0UmVzdWx0LnN0b3ByLEIAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0UmVzdWx0LnN0b3BYAQAAAC10ci1CAABYFQAAAGJkYi5CcmVha3BvaW50LnBwcmludHIuQgAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iZGIuaHRtbCNiZGIuQnJlYWtwb2ludC5wcHJpbnRYAQAAAC10ci9CAABYGgAAAHhkcmxpYi5VbnBhY2tlci5nZXRfYnVmZmVycjBCAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3hkcmxpYi5odG1sI3hkcmxpYi5VbnBhY2tlci5nZXRfYnVmZmVyWAEAAAAtdHIxQgAAWBIAAABhcnJheS5hcnJheS5leHRlbmRyMkIAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXJyYXkuaHRtbCNhcnJheS5hcnJheS5leHRlbmRYAQAAAC10cjNCAABYIAAAAGdldHRleHQuR05VVHJhbnNsYXRpb25zLmxnZXR0ZXh0cjRCAAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dldHRleHQuaHRtbCNnZXR0ZXh0LkdOVVRyYW5zbGF0aW9ucy5sZ2V0dGV4dFgBAAAALXRyNUIAAFgcAAAAVGl4LnRpeENvbW1hbmQudGl4X2dldGJpdG1hcHI2QgAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aXguaHRtbCNUaXgudGl4Q29tbWFuZC50aXhfZ2V0Yml0bWFwWAEAAAAtdHI3QgAAWCQAAABzeW10YWJsZS5TeW1ib2xUYWJsZS5nZXRfaWRlbnRpZmllcnNyOEIAAChqaQEAAGpqAQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3ltdGFibGUuaHRtbCNzeW10YWJsZS5TeW1ib2xUYWJsZS5nZXRfaWRlbnRpZmllcnNYAQAAAC10cjlCAABYFwAAAGpzb24uSlNPTkVuY29kZXIuZW5jb2RlcjpCAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2pzb24uaHRtbCNqc29uLkpTT05FbmNvZGVyLmVuY29kZVgBAAAALXRyO0IAAFggAAAAc3NsLlNTTENvbnRleHQuc2V0X25wbl9wcm90b2NvbHNyPEIAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTENvbnRleHQuc2V0X25wbl9wcm90b2NvbHNYAQAAAC10cj1CAABYGwAAAHN1bmF1LkFVX3dyaXRlLnNldGZyYW1lcmF0ZXI+QgAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdW5hdS5odG1sI3N1bmF1LkFVX3dyaXRlLnNldGZyYW1lcmF0ZVgBAAAALXRyP0IAAFgYAAAAc3FsaXRlMy5Db25uZWN0aW9uLmNsb3NlckBCAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLkNvbm5lY3Rpb24uY2xvc2VYAQAAAC10ckFCAABYGgAAAGJkYi5CZGIuZm9ybWF0X3N0YWNrX2VudHJ5ckJCAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JkYi5odG1sI2JkYi5CZGIuZm9ybWF0X3N0YWNrX2VudHJ5WAEAAAAtdHJDQgAAWBYAAAB0YXJmaWxlLlRhckluZm8uaXNmaWZvckRCAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLlRhckluZm8uaXNmaWZvWAEAAAAtdHJFQgAAWDQAAABkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5zaGFyZWRfb2JqZWN0X2ZpbGVuYW1lckZCAAAoamkBAABqagEAAFhkAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuc2hhcmVkX29iamVjdF9maWxlbmFtZVgBAAAALXRyR0IAAFglAAAAY29va2llbGliLkNvb2tpZVBvbGljeS5wYXRoX3JldHVybl9va3JIQgAAKGppAQAAamoBAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuQ29va2llUG9saWN5LnBhdGhfcmV0dXJuX29rWAEAAAAtdHJJQgAAWBMAAABvYmplY3QuX19nZXRzbGljZV9fckpCAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fZ2V0c2xpY2VfX1gBAAAALXRyS0IAAFgRAAAAb2JqZWN0Ll9fcmVkdWNlX19yTEIAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGlja2xlLmh0bWwjb2JqZWN0Ll9fcmVkdWNlX19YAQAAAC10ck1CAABYGgAAAHJmYzgyMi5BZGRyZXNzTGlzdC5fX3N1Yl9fck5CAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JmYzgyMi5odG1sI3JmYzgyMi5BZGRyZXNzTGlzdC5fX3N1Yl9fWAEAAAAtdHJPQgAAWCQAAAB4bWwuZG9tLkVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWVyUEIAAChqaQEAAGpqAQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uRWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZVgBAAAALXRyUUIAAFgrAAAAZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIuZ2V0X21hdGNoaW5nX2Jsb2Nrc3JSQgAAKGppAQAAamoBAABYWgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaWZmbGliLmh0bWwjZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIuZ2V0X21hdGNoaW5nX2Jsb2Nrc1gBAAAALXRyU0IAAFgdAAAAQ29uZmlnUGFyc2VyLkNvbmZpZ1BhcnNlci5nZXRyVEIAAChqaQEAAGpqAQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjQ29uZmlnUGFyc2VyLkNvbmZpZ1BhcnNlci5nZXRYAQAAAC10clVCAABYHQAAAGltcHV0aWwuSW1wb3J0TWFuYWdlci5pbnN0YWxsclZCAAAoamkBAABqagEAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltcHV0aWwuaHRtbCNpbXB1dGlsLkltcG9ydE1hbmFnZXIuaW5zdGFsbFgBAAAALXRyV0IAAFgkAAAAdXJsbGliMi5IVFRQUGFzc3dvcmRNZ3IuYWRkX3Bhc3N3b3JkclhCAAAoamkBAABqagEAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLkhUVFBQYXNzd29yZE1nci5hZGRfcGFzc3dvcmRYAQAAAC10cllCAABYDwAAAG9iamVjdC5fX3JhbmRfX3JaQgAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX3JhbmRfX1gBAAAALXRyW0IAAFgnAAAAY29va2llbGliLkNvb2tpZVBvbGljeS5kb21haW5fcmV0dXJuX29rclxCAAAoamkBAABqagEAAFhYAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5Db29raWVQb2xpY3kuZG9tYWluX3JldHVybl9va1gBAAAALXRyXUIAAFgnAAAAd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5nZXRfc3RkZXJycl5CAAAoamkBAABqagEAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLmdldF9zdGRlcnJYAQAAAC10cl9CAABYIgAAAGZvcm1hdHRlci53cml0ZXIuc2VuZF9saXRlcmFsX2RhdGFyYEIAAChqaQEAAGpqAQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZm9ybWF0dGVyLmh0bWwjZm9ybWF0dGVyLndyaXRlci5zZW5kX2xpdGVyYWxfZGF0YVgBAAAALXRyYUIAAFgXAAAAbWhsaWIuTUgubGlzdGFsbGZvbGRlcnNyYkIAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWhsaWIuaHRtbCNtaGxpYi5NSC5saXN0YWxsZm9sZGVyc1gBAAAALXRyY0IAAFgOAAAAb2JqZWN0Ll9fYWJzX19yZEIAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19hYnNfX1gBAAAALXRyZUIAAFgUAAAAaW1hcGxpYi5JTUFQNC5yZWNlbnRyZkIAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQucmVjZW50WAEAAAAtdHJnQgAAWC0AAABtdWx0aXByb2Nlc3NpbmcucG9vbC5tdWx0aXByb2Nlc3NpbmcuUG9vbC5tYXByaEIAAChqaQEAAGpqAQAAWGQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLnBvb2wubXVsdGlwcm9jZXNzaW5nLlBvb2wubWFwWAEAAAAtdHJpQgAAWB4AAABkZWNpbWFsLkNvbnRleHQubG9naWNhbF9pbnZlcnRyakIAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5sb2dpY2FsX2ludmVydFgBAAAALXRya0IAAFgOAAAAc2hhLnNoYS5kaWdlc3RybEIAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2hhLmh0bWwjc2hhLnNoYS5kaWdlc3RYAQAAAC10cm1CAABYFAAAAGltYXBsaWIuSU1BUDQuc29ja2V0cm5CAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LnNvY2tldFgBAAAALXRyb0IAAFgTAAAAb2JqZWN0Ll9fc2V0c2xpY2VfX3JwQgAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX3NldHNsaWNlX19YAQAAAC10cnFCAABYFwAAAHR0ay5TdHlsZS5lbGVtZW50X25hbWVzcnJCAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5TdHlsZS5lbGVtZW50X25hbWVzWAEAAAAtdHJzQgAAWBEAAABmdHBsaWIuRlRQLnJlbmFtZXJ0QgAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuRlRQLnJlbmFtZVgBAAAALXRydUIAAFgcAAAAY29sbGVjdGlvbnMuQ291bnRlci5lbGVtZW50c3J2QgAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2xsZWN0aW9ucy5odG1sI2NvbGxlY3Rpb25zLkNvdW50ZXIuZWxlbWVudHNYAQAAAC10cndCAABYIwAAAGRpZmZsaWIuU2VxdWVuY2VNYXRjaGVyLmdldF9vcGNvZGVzcnhCAAAoamkBAABqagEAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RpZmZsaWIuaHRtbCNkaWZmbGliLlNlcXVlbmNlTWF0Y2hlci5nZXRfb3Bjb2Rlc1gBAAAALXRyeUIAAFgTAAAAc2VsZWN0LmVwb2xsLmZyb21mZHJ6QgAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZWxlY3QuaHRtbCNzZWxlY3QuZXBvbGwuZnJvbWZkWAEAAAAtdHJ7QgAAWCQAAAB4bWwuZG9tLkRPTUltcGxlbWVudGF0aW9uLmhhc0ZlYXR1cmVyfEIAAChqaQEAAGpqAQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uRE9NSW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZVgBAAAALXRyfUIAAFgtAAAAbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLkJhc2VNYW5hZ2VyLnJlZ2lzdGVycn5CAAAoamkBAABqagEAAFhkAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5CYXNlTWFuYWdlci5yZWdpc3RlclgBAAAALXRyf0IAAFgQAAAAbXV0ZXgubXV0ZXgubG9ja3KAQgAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdXRleC5odG1sI211dGV4Lm11dGV4LmxvY2tYAQAAAC10coFCAABYIAAAAHNxbGl0ZTMuQ29ubmVjdGlvbi5leGVjdXRlc2NyaXB0coJCAAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLkNvbm5lY3Rpb24uZXhlY3V0ZXNjcmlwdFgBAAAALXRyg0IAAFgWAAAAYnNkZGIuYnNkZGJvYmplY3QubmV4dHKEQgAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ic2RkYi5odG1sI2JzZGRiLmJzZGRib2JqZWN0Lm5leHRYAQAAAC10coVCAABYDgAAAG1tYXAubW1hcC50ZWxscoZCAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21tYXAuaHRtbCNtbWFwLm1tYXAudGVsbFgBAAAALXRyh0IAAFgjAAAAd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5fd3JpdGVyiEIAAChqaQEAAGpqAQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd3NnaXJlZi5odG1sI3dzZ2lyZWYuaGFuZGxlcnMuQmFzZUhhbmRsZXIuX3dyaXRlWAEAAAAtdHKJQgAAWBMAAABpby5CeXRlc0lPLmdldHZhbHVlcopCAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uQnl0ZXNJTy5nZXR2YWx1ZVgBAAAALXRyi0IAAFgRAAAAYXJyYXkuYXJyYXkuaW5kZXhyjEIAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXJyYXkuaHRtbCNhcnJheS5hcnJheS5pbmRleFgBAAAALXRyjUIAAFgqAAAAZW1haWwubWVzc2FnZS5NZXNzYWdlLmdldF9jb250ZW50X21haW50eXBlco5CAAAoamkBAABqagEAAFhfAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuZ2V0X2NvbnRlbnRfbWFpbnR5cGVYAQAAAC10co9CAABYOAAAAGRpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLnJ1bnRpbWVfbGlicmFyeV9kaXJfb3B0aW9ucpBCAAAoamkBAABqagEAAFhoAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIucnVudGltZV9saWJyYXJ5X2Rpcl9vcHRpb25YAQAAAC10cpFCAABYFgAAAHR0ay5UcmVldmlldy5zZWxlY3Rpb25ykkIAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLlRyZWV2aWV3LnNlbGVjdGlvblgBAAAALXRyk0IAAFgkAAAAb3NzYXVkaW9kZXYub3NzX2F1ZGlvX2RldmljZS5nZXRmbXRzcpRCAAAoamkBAABqagEAAFhXAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zc2F1ZGlvZGV2Lmh0bWwjb3NzYXVkaW9kZXYub3NzX2F1ZGlvX2RldmljZS5nZXRmbXRzWAEAAAAtdHKVQgAAWBsAAABtdWx0aWZpbGUuTXVsdGlGaWxlLmlzX2RhdGFylkIAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlmaWxlLmh0bWwjbXVsdGlmaWxlLk11bHRpRmlsZS5pc19kYXRhWAEAAAAtdHKXQgAAWBkAAAB3YXZlLldhdmVfcmVhZC5yZWFkZnJhbWVzcphCAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dhdmUuaHRtbCN3YXZlLldhdmVfcmVhZC5yZWFkZnJhbWVzWAEAAAAtdHKZQgAAWCIAAABvc3NhdWRpb2Rldi5vc3NfYXVkaW9fZGV2aWNlLndyaXRlcppCAAAoamkBAABqagEAAFhVAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zc2F1ZGlvZGV2Lmh0bWwjb3NzYXVkaW9kZXYub3NzX2F1ZGlvX2RldmljZS53cml0ZVgBAAAALXRym0IAAFgLAAAAc3RyLmlzdGl0bGVynEIAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNzdHIuaXN0aXRsZVgBAAAALXRynUIAAFgqAAAAeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLlhtbERlY2xIYW5kbGVycp5CAAAoamkBAABqagEAAFhZAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuWG1sRGVjbEhhbmRsZXJYAQAAAC10cp9CAABYIAAAAGFzeW5jb3JlLmRpc3BhdGNoZXIuaGFuZGxlX3dyaXRlcqBCAAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzeW5jb3JlLmh0bWwjYXN5bmNvcmUuZGlzcGF0Y2hlci5oYW5kbGVfd3JpdGVYAQAAAC10cqFCAABYEwAAAGN1cnNlcy53aW5kb3cuaGxpbmVyokIAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5obGluZVgBAAAALXRyo0IAAFgNAAAAYmRiLkJkYi5yZXNldHKkQgAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iZGIuaHRtbCNiZGIuQmRiLnJlc2V0WAEAAAAtdHKlQgAAWBYAAABDb29raWUuQmFzZUNvb2tpZS5sb2FkcqZCAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZS5odG1sI0Nvb2tpZS5CYXNlQ29va2llLmxvYWRYAQAAAC10cqdCAABYEQAAAG1zaWxpYi5WaWV3LkNsb3NlcqhCAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5WaWV3LkNsb3NlWAEAAAAtdHKpQgAAWBsAAABkYXRldGltZS5kYXRldGltZS50aW1ldHVwbGVyqkIAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS50aW1ldHVwbGVYAQAAAC10cqtCAABYGwAAAEZyYW1lV29yay5EaWFsb2dXaW5kb3cub3BlbnKsQgAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcmFtZXdvcmsuaHRtbCNGcmFtZVdvcmsuRGlhbG9nV2luZG93Lm9wZW5YAQAAAC10cq1CAABYHQAAAHN5bXRhYmxlLlN5bWJvbC5pc19yZWZlcmVuY2Vkcq5CAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5bXRhYmxlLmh0bWwjc3ltdGFibGUuU3ltYm9sLmlzX3JlZmVyZW5jZWRYAQAAAC10cq9CAABYHwAAAGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0LnBvcGl0ZW1ysEIAAChqaQEAAGpqAQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5PcmRlcmVkRGljdC5wb3BpdGVtWAEAAAAtdHKxQgAAWBYAAABjdXJzZXMud2luZG93LmNscnRvYm90crJCAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cuY2xydG9ib3RYAQAAAC10crNCAABYGwAAAG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzLnJ1bnK0QgAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcy5ydW5YAQAAAC10crVCAABYIgAAAGRpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmxpbmtytkIAAChqaQEAAGpqAQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5saW5rWAEAAAAtdHK3QgAAWAsAAABkaWN0LnZhbHVlc3K4QgAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2RpY3QudmFsdWVzWAEAAAAtdHK5QgAAWAkAAABmaWxlLnJlYWRyukIAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNmaWxlLnJlYWRYAQAAAC10crtCAABYGQAAAGRhdGV0aW1lLmRhdGV0aW1lLnJlcGxhY2VyvEIAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS5yZXBsYWNlWAEAAAAtdHK9QgAAWBsAAABpbXB1dGlsLkltcG9ydGVyLmltcG9ydF90b3ByvkIAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1wdXRpbC5odG1sI2ltcHV0aWwuSW1wb3J0ZXIuaW1wb3J0X3RvcFgBAAAALXRyv0IAAFgkAAAAdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0R3JlYXRlckVxdWFscsBCAAAoamkBAABqagEAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0R3JlYXRlckVxdWFsWAEAAAAtdHLBQgAAWAkAAABzdHIuc3RyaXBywkIAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNzdHIuc3RyaXBYAQAAAC10csNCAABYFAAAAHR0ay5Qcm9ncmVzc2Jhci5zdGVwcsRCAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5Qcm9ncmVzc2Jhci5zdGVwWAEAAAAtdHLFQgAAWCAAAAB1cmxsaWIyLkJhc2VIYW5kbGVyLnVua25vd25fb3BlbnLGQgAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5CYXNlSGFuZGxlci51bmtub3duX29wZW5YAQAAAC10csdCAABYFAAAAHBpcGVzLlRlbXBsYXRlLnJlc2V0cshCAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BpcGVzLmh0bWwjcGlwZXMuVGVtcGxhdGUucmVzZXRYAQAAAC10cslCAABYLAAAAHhtbC5kb20uRG9jdW1lbnQuY3JlYXRlUHJvY2Vzc2luZ0luc3RydWN0aW9ucspCAAAoamkBAABqagEAAFhbAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkRvY3VtZW50LmNyZWF0ZVByb2Nlc3NpbmdJbnN0cnVjdGlvblgBAAAALXRyy0IAAFgVAAAAZGF0ZXRpbWUuZGF0ZS5fX3N0cl9fcsxCAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZS5fX3N0cl9fWAEAAAAtdHLNQgAAWCMAAAB4bWwuZG9tLkVsZW1lbnQucmVtb3ZlQXR0cmlidXRlTm9kZXLOQgAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZU5vZGVYAQAAAC10cs9CAABYFwAAAGN1cnNlcy53aW5kb3cub3ZlcndyaXRlctBCAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cub3ZlcndyaXRlWAEAAAAtdHLRQgAAWBMAAAB3YXZlLldhdmVfcmVhZC50ZWxsctJCAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dhdmUuaHRtbCN3YXZlLldhdmVfcmVhZC50ZWxsWAEAAAAtdHLTQgAAWB4AAABjYWxlbmRhci5DYWxlbmRhci5pdGVyd2Vla2RheXNy1EIAAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci5DYWxlbmRhci5pdGVyd2Vla2RheXNYAQAAAC10ctVCAABYFgAAAHJleGVjLlJFeGVjLnJfZXhlY2ZpbGVy1kIAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmV4ZWMuaHRtbCNyZXhlYy5SRXhlYy5yX2V4ZWNmaWxlWAEAAAAtdHLXQgAAWCMAAABzbXRwbGliLlNNVFAuZWhsb19vcl9oZWxvX2lmX25lZWRlZHLYQgAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zbXRwbGliLmh0bWwjc210cGxpYi5TTVRQLmVobG9fb3JfaGVsb19pZl9uZWVkZWRYAQAAAC10ctlCAABYGgAAAG1pbWV0b29scy5NZXNzYWdlLmdldHBhcmFtctpCAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbWV0b29scy5odG1sI21pbWV0b29scy5NZXNzYWdlLmdldHBhcmFtWAEAAAAtdHLbQgAAWBwAAAB4bWwuZG9tLkVsZW1lbnQuZ2V0QXR0cmlidXRlctxCAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkVsZW1lbnQuZ2V0QXR0cmlidXRlWAEAAAAtdHLdQgAAWDcAAABTaW1wbGVYTUxSUENTZXJ2ZXIuU2ltcGxlWE1MUlBDU2VydmVyLnJlZ2lzdGVyX2luc3RhbmNlct5CAAAoamkBAABqagEAAFhxAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NpbXBsZXhtbHJwY3NlcnZlci5odG1sI1NpbXBsZVhNTFJQQ1NlcnZlci5TaW1wbGVYTUxSUENTZXJ2ZXIucmVnaXN0ZXJfaW5zdGFuY2VYAQAAAC10ct9CAABYIAAAAGFzeW5jb3JlLmRpc3BhdGNoZXIuaGFuZGxlX2Nsb3NlcuBCAAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzeW5jb3JlLmh0bWwjYXN5bmNvcmUuZGlzcGF0Y2hlci5oYW5kbGVfY2xvc2VYAQAAAC10cuFCAABYFgAAAGxvZ2dpbmcuSGFuZGxlci5maWx0ZXJy4kIAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuSGFuZGxlci5maWx0ZXJYAQAAAC10cuNCAABYHAAAAGVtYWlsLnBhcnNlci5GZWVkUGFyc2VyLmZlZWRy5EIAAChqaQEAAGpqAQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwucGFyc2VyLmh0bWwjZW1haWwucGFyc2VyLkZlZWRQYXJzZXIuZmVlZFgBAAAALXRy5UIAAFgVAAAAemxpYi5EZWNvbXByZXNzLmZsdXNocuZCAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3psaWIuaHRtbCN6bGliLkRlY29tcHJlc3MuZmx1c2hYAQAAAC10cudCAABYCQAAAHN0ci50aXRsZXLoQgAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0ci50aXRsZVgBAAAALXRy6UIAAFgcAAAAc3FsaXRlMy5Db25uZWN0aW9uLmludGVycnVwdHLqQgAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy5Db25uZWN0aW9uLmludGVycnVwdFgBAAAALXRy60IAAFgOAAAAb2JqZWN0Ll9feG9yX19y7EIAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX194b3JfX1gBAAAALXRy7UIAAFgTAAAAdHJhY2UuVHJhY2UucmVzdWx0c3LuQgAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90cmFjZS5odG1sI3RyYWNlLlRyYWNlLnJlc3VsdHNYAQAAAC10cu9CAABYFgAAAGRhdGV0aW1lLnR6aW5mby50em5hbWVy8EIAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS50emluZm8udHpuYW1lWAEAAAAtdHLxQgAAWBIAAABvYmplY3QuX19yZGl2bW9kX19y8kIAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19yZGl2bW9kX19YAQAAAC10cvNCAABYDgAAAG9iamVjdC5fX2RlbF9fcvRCAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fZGVsX19YAQAAAC10cvVCAABYFgAAAG1haWxib3guTWFpbGJveC51bmxvY2ty9kIAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGJveC51bmxvY2tYAQAAAC10cvdCAABYEwAAAG1obGliLk1ILmdldHByb2ZpbGVy+EIAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWhsaWIuaHRtbCNtaGxpYi5NSC5nZXRwcm9maWxlWAEAAAAtdHL5QgAAWBYAAABpbWFwbGliLklNQVA0LnNldHF1b3RhcvpCAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LnNldHF1b3RhWAEAAAAtdHL7QgAAWBAAAAB0dGsuQ29tYm9ib3guc2V0cvxCAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5Db21ib2JveC5zZXRYAQAAAC10cv1CAABYHAAAAGRlY2ltYWwuRGVjaW1hbC5pc19zdWJub3JtYWxy/kIAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5pc19zdWJub3JtYWxYAQAAAC10cv9CAABYDwAAAHRyYWNlLlRyYWNlLnJ1bnIAQwAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90cmFjZS5odG1sI3RyYWNlLlRyYWNlLnJ1blgBAAAALXRyAUMAAFgdAAAAZm9ybWF0dGVyLmZvcm1hdHRlci5wdXNoX2ZvbnRyAkMAAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZm9ybWF0dGVyLmh0bWwjZm9ybWF0dGVyLmZvcm1hdHRlci5wdXNoX2ZvbnRYAQAAAC10cgNDAABYEwAAAGN1cnNlcy53aW5kb3cubXZ3aW5yBEMAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5tdndpblgBAAAALXRyBUMAAFgTAAAAZnRwbGliLkZUUF9UTFMuYXV0aHIGQwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuRlRQX1RMUy5hdXRoWAEAAAAtdHIHQwAAWCsAAAB4bWwuc2F4LnhtbHJlYWRlci5YTUxSZWFkZXIuZ2V0RXJyb3JIYW5kbGVycghDAAAoamkBAABqagEAAFhhAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuWE1MUmVhZGVyLmdldEVycm9ySGFuZGxlclgBAAAALXRyCUMAAFgVAAAAdHRrLk5vdGVib29rLmlkZW50aWZ5cgpDAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5Ob3RlYm9vay5pZGVudGlmeVgBAAAALXRyC0MAAFgaAAAAQ29ubmVjdGlvbi5yZWN2X2J5dGVzX2ludG9yDEMAAChqaQEAAGpqAQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjQ29ubmVjdGlvbi5yZWN2X2J5dGVzX2ludG9YAQAAAC10cg1DAABYKgAAAHVybGxpYjIuSFRUUFJlZGlyZWN0SGFuZGxlci5odHRwX2Vycm9yXzMwN3IOQwAAKGppAQAAamoBAABYWQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5IVFRQUmVkaXJlY3RIYW5kbGVyLmh0dHBfZXJyb3JfMzA3WAEAAAAtdHIPQwAAWBgAAABtc2lsaWIuRGF0YWJhc2UuT3BlblZpZXdyEEMAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLkRhdGFiYXNlLk9wZW5WaWV3WAEAAAAtdHIRQwAAWBEAAAB1bmljb2RlLmlzbnVtZXJpY3ISQwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3VuaWNvZGUuaXNudW1lcmljWAEAAAAtdHITQwAAWCoAAAB1cmxsaWIyLkhUVFBSZWRpcmVjdEhhbmRsZXIuaHR0cF9lcnJvcl8zMDNyFEMAAChqaQEAAGpqAQAAWFkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuSFRUUFJlZGlyZWN0SGFuZGxlci5odHRwX2Vycm9yXzMwM1gBAAAALXRyFUMAAFgqAAAAdXJsbGliMi5IVFRQUmVkaXJlY3RIYW5kbGVyLmh0dHBfZXJyb3JfMzAychZDAAAoamkBAABqagEAAFhZAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLkhUVFBSZWRpcmVjdEhhbmRsZXIuaHR0cF9lcnJvcl8zMDJYAQAAAC10chdDAABYJQAAAHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydE5vdElzSW5zdGFuY2VyGEMAAChqaQEAAGpqAQAAWFUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnROb3RJc0luc3RhbmNlWAEAAAAtdHIZQwAAWBYAAABpbWFwbGliLklNQVA0LnNodXRkb3duchpDAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LnNodXRkb3duWAEAAAAtdHIbQwAAWBgAAABtdWx0aWZpbGUuTXVsdGlGaWxlLnNlZWtyHEMAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlmaWxlLmh0bWwjbXVsdGlmaWxlLk11bHRpRmlsZS5zZWVrWAEAAAAtdHIdQwAAWCEAAAB3ZWFrcmVmLldlYWtLZXlEaWN0aW9uYXJ5LmtleXJlZnNyHkMAAChqaQEAAGpqAQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2Vha3JlZi5odG1sI3dlYWtyZWYuV2Vha0tleURpY3Rpb25hcnkua2V5cmVmc1gBAAAALXRyH0MAAFgVAAAAc2hsZXguc2hsZXguZ2V0X3Rva2VuciBDAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NobGV4Lmh0bWwjc2hsZXguc2hsZXguZ2V0X3Rva2VuWAEAAAAtdHIhQwAAWA4AAABzdHIuY2FwaXRhbGl6ZXIiQwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0ci5jYXBpdGFsaXplWAEAAAAtdHIjQwAAWBsAAABzcWxpdGUzLkNvbm5lY3Rpb24ucm9sbGJhY2tyJEMAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuQ29ubmVjdGlvbi5yb2xsYmFja1gBAAAALXRyJUMAAFgTAAAAaGFzaGxpYi5oYXNoLnVwZGF0ZXImQwAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9oYXNobGliLmh0bWwjaGFzaGxpYi5oYXNoLnVwZGF0ZVgBAAAALXRyJ0MAAFgjAAAAdXJsbGliMi5Vbmtub3duSGFuZGxlci51bmtub3duX29wZW5yKEMAAChqaQEAAGpqAQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuVW5rbm93bkhhbmRsZXIudW5rbm93bl9vcGVuWAEAAAAtdHIpQwAAWA0AAABmcm96ZW5zZXQucG9wcipDAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZnJvemVuc2V0LnBvcFgBAAAALXRyK0MAAFgTAAAAeGRybGliLlBhY2tlci5yZXNldHIsQwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94ZHJsaWIuaHRtbCN4ZHJsaWIuUGFja2VyLnJlc2V0WAEAAAAtdHItQwAAWBcAAABDb29raWUuTW9yc2VsLmpzX291dHB1dHIuQwAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWUuaHRtbCNDb29raWUuTW9yc2VsLmpzX291dHB1dFgBAAAALXRyL0MAAFgZAAAAY3R5cGVzLl9DRGF0YS5mcm9tX2J1ZmZlcnIwQwAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuX0NEYXRhLmZyb21fYnVmZmVyWAEAAAAtdHIxQwAAWB4AAABDb29raWUuQmFzZUNvb2tpZS52YWx1ZV9kZWNvZGVyMkMAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llLmh0bWwjQ29va2llLkJhc2VDb29raWUudmFsdWVfZGVjb2RlWAEAAAAtdHIzQwAAWCMAAAB1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRBbG1vc3RFcXVhbHI0QwAAKGppAQAAamoBAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydEFsbW9zdEVxdWFsWAEAAAAtdHI1QwAAWB4AAABmb3JtYXR0ZXIud3JpdGVyLnNlbmRfaG9yX3J1bGVyNkMAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZm9ybWF0dGVyLmh0bWwjZm9ybWF0dGVyLndyaXRlci5zZW5kX2hvcl9ydWxlWAEAAAAtdHI3QwAAWBcAAABmbC5mb3JtLmFkZF9yb3VuZGJ1dHRvbnI4QwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbC5odG1sI2ZsLmZvcm0uYWRkX3JvdW5kYnV0dG9uWAEAAAAtdHI5QwAAWCwAAAB4bWwuc2F4LmhhbmRsZXIuRW50aXR5UmVzb2x2ZXIucmVzb2x2ZUVudGl0eXI6QwAAKGppAQAAamoBAABYYwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LmhhbmRsZXIuaHRtbCN4bWwuc2F4LmhhbmRsZXIuRW50aXR5UmVzb2x2ZXIucmVzb2x2ZUVudGl0eVgBAAAALXRyO0MAAFggAAAAY29kZWNzLkluY3JlbWVudGFsRW5jb2Rlci5lbmNvZGVyPEMAAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLkluY3JlbWVudGFsRW5jb2Rlci5lbmNvZGVYAQAAAC10cj1DAABYEgAAAG9iamVjdC5fX25vbnplcm9fX3I+QwAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX25vbnplcm9fX1gBAAAALXRyP0MAAFgaAAAAdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0SW5yQEMAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRJblgBAAAALXRyQUMAAFgbAAAAZGVjaW1hbC5Db250ZXh0LmxvZ2ljYWxfYW5kckJDAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQubG9naWNhbF9hbmRYAQAAAC10ckNDAABYEQAAAGl0ZXJhdG9yLl9faXRlcl9fckRDAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjaXRlcmF0b3IuX19pdGVyX19YAQAAAC10ckVDAABYGgAAAHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydElzckZDAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0SXNYAQAAAC10ckdDAABYFQAAAGltYXBsaWIuSU1BUDRfU1NMLnNzbHJIQwAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNF9TU0wuc3NsWAEAAAAtdHJJQwAAWBcAAABkZWNpbWFsLkNvbnRleHQuaXNfemVyb3JKQwAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmlzX3plcm9YAQAAAC10cktDAABYIgAAAGVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5zZXRfdW5peGZyb21yTEMAAChqaQEAAGpqAQAAWFcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS5zZXRfdW5peGZyb21YAQAAAC10ck1DAABYDgAAAG1obGliLk1ILmVycm9yck5DAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21obGliLmh0bWwjbWhsaWIuTUguZXJyb3JYAQAAAC10ck9DAABYHwAAAHVuaXR0ZXN0LlRlc3RDYXNlLnRlYXJEb3duQ2xhc3NyUEMAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS50ZWFyRG93bkNsYXNzWAEAAAAtdHJRQwAAWCEAAABnZXR0ZXh0Lk51bGxUcmFuc2xhdGlvbnMubmdldHRleHRyUkMAAChqaQEAAGpqAQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2V0dGV4dC5odG1sI2dldHRleHQuTnVsbFRyYW5zbGF0aW9ucy5uZ2V0dGV4dFgBAAAALXRyU0MAAFghAAAAeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQuc2V0clRDAAAoamkBAABqagEAAFheAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50LnNldFgBAAAALXRyVUMAAFgQAAAAdHRrLlN0eWxlLmxvb2t1cHJWQwAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuU3R5bGUubG9va3VwWAEAAAAtdHJXQwAAWCwAAAB4bWxycGNsaWIuU2VydmVyUHJveHkuc3lzdGVtLm1ldGhvZFNpZ25hdHVyZXJYQwAAKGppAQAAamoBAABYXQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWxycGNsaWIuaHRtbCN4bWxycGNsaWIuU2VydmVyUHJveHkuc3lzdGVtLm1ldGhvZFNpZ25hdHVyZVgBAAAALXRyWUMAAFgVAAAAZmwuZm9ybS5hY3RpdmF0ZV9mb3JtclpDAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZsLmh0bWwjZmwuZm9ybS5hY3RpdmF0ZV9mb3JtWAEAAAAtdHJbQwAAWBcAAABjdXJzZXMud2luZG93Lm5vdGltZW91dHJcQwAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93Lm5vdGltZW91dFgBAAAALXRyXUMAAFgRAAAAbWFpbGJveC5tYm94LmxvY2tyXkMAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3gubWJveC5sb2NrWAEAAAAtdHJfQwAAWCIAAABvc3NhdWRpb2Rldi5vc3NfbWl4ZXJfZGV2aWNlLmNsb3NlcmBDAAAoamkBAABqagEAAFhVAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zc2F1ZGlvZGV2Lmh0bWwjb3NzYXVkaW9kZXYub3NzX21peGVyX2RldmljZS5jbG9zZVgBAAAALXRyYUMAAFgTAAAAbWFpbGJveC5NTURGLnVubG9ja3JiQwAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NTURGLnVubG9ja1gBAAAALXRyY0MAAFgWAAAAZmxvYXQuYXNfaW50ZWdlcl9yYXRpb3JkQwAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2Zsb2F0LmFzX2ludGVnZXJfcmF0aW9YAQAAAC10cmVDAABYFAAAAGlvLlRleHRJT0Jhc2UuZGV0YWNocmZDAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uVGV4dElPQmFzZS5kZXRhY2hYAQAAAC10cmdDAABYHgAAAHRocmVhZGluZy5Db25kaXRpb24ubm90aWZ5X2FsbHJoQwAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuQ29uZGl0aW9uLm5vdGlmeV9hbGxYAQAAAC10cmlDAABYFgAAAGN1cnNlcy53aW5kb3cuZ2V0bWF4eXhyakMAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5nZXRtYXh5eFgBAAAALXRya0MAAFgbAAAARnJhbWVXb3JrLkFwcGxpY2F0aW9uLl9xdWl0cmxDAAAoamkBAABqagEAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZyYW1ld29yay5odG1sI0ZyYW1lV29yay5BcHBsaWNhdGlvbi5fcXVpdFgBAAAALXRybUMAAFgeAAAAeG1sLmRvbS5FbGVtZW50LmdldEF0dHJpYnV0ZU5Tcm5DAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkVsZW1lbnQuZ2V0QXR0cmlidXRlTlNYAQAAAC10cm9DAABYEgAAAGRiaGFzaC5kYmhhc2gubmV4dHJwQwAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYmhhc2guaHRtbCNkYmhhc2guZGJoYXNoLm5leHRYAQAAAC10cnFDAABYIwAAAHhtbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5TZXRCYXNlcnJDAAAoamkBAABqagEAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuU2V0QmFzZVgBAAAALXRyc0MAAFgXAAAAbXNpbGliLlJlY29yZC5HZXRTdHJpbmdydEMAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLlJlY29yZC5HZXRTdHJpbmdYAQAAAC10cnVDAABYEgAAAG9iamVjdC5fX2lsc2hpZnRfX3J2QwAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2lsc2hpZnRfX1gBAAAALXRyd0MAAFgcAAAAbWFpbGJveC5NYWlsYm94Ll9fY29udGFpbnNfX3J4QwAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsYm94Ll9fY29udGFpbnNfX1gBAAAALXRyeUMAAFgfAAAAYXN5bmNvcmUuZGlzcGF0Y2hlci5oYW5kbGVfcmVhZHJ6QwAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hc3luY29yZS5odG1sI2FzeW5jb3JlLmRpc3BhdGNoZXIuaGFuZGxlX3JlYWRYAQAAAC10cntDAABYJQAAAGZyb3plbnNldC5zeW1tZXRyaWNfZGlmZmVyZW5jZV91cGRhdGVyfEMAAChqaQEAAGpqAQAAWFUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNmcm96ZW5zZXQuc3ltbWV0cmljX2RpZmZlcmVuY2VfdXBkYXRlWAEAAAAtdHJ9QwAAWCkAAAB4bWwuZXRyZWUuRWxlbWVudFRyZWUuVHJlZUJ1aWxkZXIuZG9jdHlwZXJ+QwAAKGppAQAAamoBAABYZgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuVHJlZUJ1aWxkZXIuZG9jdHlwZVgBAAAALXRyf0MAAFgcAAAAbWFpbGJveC5tYm94TWVzc2FnZS5nZXRfZnJvbXKAQwAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5tYm94TWVzc2FnZS5nZXRfZnJvbVgBAAAALXRygUMAAFgeAAAAaHR0cGxpYi5IVFRQQ29ubmVjdGlvbi5jb25uZWN0coJDAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0dHBsaWIuaHRtbCNodHRwbGliLkhUVFBDb25uZWN0aW9uLmNvbm5lY3RYAQAAAC10coNDAABYFwAAAG1haWxib3guTUgubGlzdF9mb2xkZXJzcoRDAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1ILmxpc3RfZm9sZGVyc1gBAAAALXRyhUMAAFgRAAAAZnJvemVuc2V0LmRpc2NhcmRyhkMAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNmcm96ZW5zZXQuZGlzY2FyZFgBAAAALXRyh0MAAFgmAAAAYXN5bmNoYXQuYXN5bmNfY2hhdC5wdXNoX3dpdGhfcHJvZHVjZXJyiEMAAChqaQEAAGpqAQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXN5bmNoYXQuaHRtbCNhc3luY2hhdC5hc3luY19jaGF0LnB1c2hfd2l0aF9wcm9kdWNlclgBAAAALXRyiUMAAFgSAAAAb2JqZWN0Ll9fcmxzaGlmdF9fcopDAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fcmxzaGlmdF9fWAEAAAAtdHKLQwAAWA0AAAB0dGsuU3R5bGUubWFwcoxDAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5TdHlsZS5tYXBYAQAAAC10co1DAABYHgAAAHN0cmluZy5Gb3JtYXR0ZXIuY29udmVydF9maWVsZHKOQwAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNzdHJpbmcuRm9ybWF0dGVyLmNvbnZlcnRfZmllbGRYAQAAAC10co9DAABYHQAAAGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLmVycm9ycpBDAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FyZ3BhcnNlLmh0bWwjYXJncGFyc2UuQXJndW1lbnRQYXJzZXIuZXJyb3JYAQAAAC10cpFDAABYFwAAAGRlY2ltYWwuQ29udGV4dC5jb21wYXJlcpJDAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQuY29tcGFyZVgBAAAALXRyk0MAAFgfAAAAZm9ybWF0dGVyLndyaXRlci5zZW5kX3BhcmFncmFwaHKUQwAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIud3JpdGVyLnNlbmRfcGFyYWdyYXBoWAEAAAAtdHKVQwAAWCIAAABzZ21sbGliLlNHTUxQYXJzZXIuaGFuZGxlX3N0YXJ0dGFncpZDAAAoamkBAABqagEAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NnbWxsaWIuaHRtbCNzZ21sbGliLlNHTUxQYXJzZXIuaGFuZGxlX3N0YXJ0dGFnWAEAAAAtdHKXQwAAWCEAAABGcmFtZVdvcmsuQXBwbGljYXRpb24uYXN5bmNldmVudHNymEMAAChqaQEAAGpqAQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnJhbWV3b3JrLmh0bWwjRnJhbWVXb3JrLkFwcGxpY2F0aW9uLmFzeW5jZXZlbnRzWAEAAAAtdHKZQwAAWBsAAABzb2NrZXQuc29ja2V0LnJlY3Zmcm9tX2ludG9ymkMAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LnNvY2tldC5yZWN2ZnJvbV9pbnRvWAEAAAAtdHKbQwAAWCQAAABzZ21sbGliLlNHTUxQYXJzZXIuY29udmVydF9lbnRpdHlyZWZynEMAAChqaQEAAGpqAQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2dtbGxpYi5odG1sI3NnbWxsaWIuU0dNTFBhcnNlci5jb252ZXJ0X2VudGl0eXJlZlgBAAAALXRynUMAAFgWAAAAbWFpbGJveC5CYWJ5bC5nZXRfZmlsZXKeQwAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5CYWJ5bC5nZXRfZmlsZVgBAAAALXRyn0MAAFgPAAAAZmwuZm9ybS5hZGRfYm94cqBDAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZsLmh0bWwjZmwuZm9ybS5hZGRfYm94WAEAAAAtdHKhQwAAWC0AAABkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5kZXRlY3RfbGFuZ3VhZ2VyokMAAChqaQEAAGpqAQAAWF0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5kZXRlY3RfbGFuZ3VhZ2VYAQAAAC10cqNDAABYHQAAAGVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5fX3N0cl9fcqRDAAAoamkBAABqagEAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuX19zdHJfX1gBAAAALXRypUMAAFgWAAAAY3Vyc2VzLndpbmRvdy5zeW5jZG93bnKmQwAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LnN5bmNkb3duWAEAAAAtdHKnQwAAWBAAAABwc3RhdHMuU3RhdHMuYWRkcqhDAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Byb2ZpbGUuaHRtbCNwc3RhdHMuU3RhdHMuYWRkWAEAAAAtdHKpQwAAWBQAAABmdHBsaWIuRlRQLnJldHJsaW5lc3KqQwAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuRlRQLnJldHJsaW5lc1gBAAAALXRyq0MAAFgPAAAAbW1hcC5tbWFwLmZsdXNocqxDAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21tYXAuaHRtbCNtbWFwLm1tYXAuZmx1c2hYAQAAAC10cq1DAABYJgAAAGRpc3R1dGlscy5jbWQuQ29tbWFuZC5maW5hbGl6ZV9vcHRpb25zcq5DAAAoamkBAABqagEAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNtZC5Db21tYW5kLmZpbmFsaXplX29wdGlvbnNYAQAAAC10cq9DAABYFAAAAGFpZmMuYWlmYy5nZXRuZnJhbWVzcrBDAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FpZmMuaHRtbCNhaWZjLmFpZmMuZ2V0bmZyYW1lc1gBAAAALXRysUMAAFgcAAAAeGRybGliLlVucGFja2VyLnVucGFja19hcnJheXKyQwAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94ZHJsaWIuaHRtbCN4ZHJsaWIuVW5wYWNrZXIudW5wYWNrX2FycmF5WAEAAAAtdHKzQwAAWBUAAAB0aHJlYWRpbmcuRXZlbnQuaXNTZXRytEMAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLkV2ZW50LmlzU2V0WAEAAAAtdHK1QwAAWCEAAABzZ21sbGliLlNHTUxQYXJzZXIuaGFuZGxlX2NoYXJyZWZytkMAAChqaQEAAGpqAQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2dtbGxpYi5odG1sI3NnbWxsaWIuU0dNTFBhcnNlci5oYW5kbGVfY2hhcnJlZlgBAAAALXRyt0MAAFgbAAAAcmZjODIyLkFkZHJlc3NMaXN0Ll9faWFkZF9fcrhDAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JmYzgyMi5odG1sI3JmYzgyMi5BZGRyZXNzTGlzdC5fX2lhZGRfX1gBAAAALXRyuUMAAFgUAAAAY3Vyc2VzLndpbmRvdy5zY3JvbGxyukMAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5zY3JvbGxYAQAAAC10crtDAABYEgAAAG9iamVjdC5fX2dldGl0ZW1fX3K8QwAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2dldGl0ZW1fX1gBAAAALXRyvUMAAFglAAAAU29ja2V0U2VydmVyLkJhc2VTZXJ2ZXIuc2VydmVfZm9yZXZlcnK+QwAAKGppAQAAamoBAABYWQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXRzZXJ2ZXIuaHRtbCNTb2NrZXRTZXJ2ZXIuQmFzZVNlcnZlci5zZXJ2ZV9mb3JldmVyWAEAAAAtdHK/QwAAWCUAAABkaXN0dXRpbHMudGV4dF9maWxlLlRleHRGaWxlLnJlYWRsaW5lcsBDAAAoamkBAABqagEAAFhVAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLnRleHRfZmlsZS5UZXh0RmlsZS5yZWFkbGluZVgBAAAALXRywUMAAFgkAAAAY29va2llbGliLkNvb2tpZUphci5zZXRfY29va2llX2lmX29rcsJDAAAoamkBAABqagEAAFhVAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5Db29raWVKYXIuc2V0X2Nvb2tpZV9pZl9va1gBAAAALXRyw0MAAFgXAAAAcG9zaXhmaWxlLnBvc2l4ZmlsZS5kdXByxEMAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcG9zaXhmaWxlLmh0bWwjcG9zaXhmaWxlLnBvc2l4ZmlsZS5kdXBYAQAAAC10csVDAABYFAAAAGltYXBsaWIuSU1BUDQuc2V0YWNscsZDAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LnNldGFjbFgBAAAALXRyx0MAAFgRAAAAYnoyLkJaMkZpbGUuY2xvc2VyyEMAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYnoyLmh0bWwjYnoyLkJaMkZpbGUuY2xvc2VYAQAAAC10cslDAABYDwAAAG9iamVjdC5fX3J4b3JfX3LKQwAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX3J4b3JfX1gBAAAALXRyy0MAAFgQAAAAbWFpbGJveC5NSC5mbHVzaHLMQwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NSC5mbHVzaFgBAAAALXRyzUMAAFgaAAAAemxpYi5EZWNvbXByZXNzLmRlY29tcHJlc3NyzkMAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemxpYi5odG1sI3psaWIuRGVjb21wcmVzcy5kZWNvbXByZXNzWAEAAAAtdHLPQwAAWBUAAABjdXJzZXMud2luZG93LmJrZ2RzZXRy0EMAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5ia2dkc2V0WAEAAAAtdHLRQwAAWBkAAAB4ZHJsaWIuUGFja2VyLnBhY2tfZG91YmxlctJDAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3hkcmxpYi5odG1sI3hkcmxpYi5QYWNrZXIucGFja19kb3VibGVYAQAAAC10ctNDAABYIgAAAGNvbGxlY3Rpb25zLnNvbWVuYW1lZHR1cGxlLl9hc2RpY3Ry1EMAAChqaQEAAGpqAQAAWFUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5zb21lbmFtZWR0dXBsZS5fYXNkaWN0WAEAAAAtdHLVQwAAWBsAAABkZWNpbWFsLkNvbnRleHQubmV4dF90b3dhcmRy1kMAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5uZXh0X3Rvd2FyZFgBAAAALXRy10MAAFgiAAAAZm9ybWF0dGVyLmZvcm1hdHRlci5wdXNoX2FsaWdubWVudHLYQwAAKGppAQAAamoBAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIuZm9ybWF0dGVyLnB1c2hfYWxpZ25tZW50WAEAAAAtdHLZQwAAWBoAAABwc3RhdHMuU3RhdHMucmV2ZXJzZV9vcmRlcnLaQwAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wcm9maWxlLmh0bWwjcHN0YXRzLlN0YXRzLnJldmVyc2Vfb3JkZXJYAQAAAC10cttDAABYGgAAAHRhcmZpbGUuVGFyRmlsZS5nZXRtZW1iZXJzctxDAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLlRhckZpbGUuZ2V0bWVtYmVyc1gBAAAALXRy3UMAAFggAAAAZ2V0dGV4dC5OdWxsVHJhbnNsYXRpb25zLmNoYXJzZXRy3kMAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2V0dGV4dC5odG1sI2dldHRleHQuTnVsbFRyYW5zbGF0aW9ucy5jaGFyc2V0WAEAAAAtdHLfQwAAWBQAAAB0ZWxuZXRsaWIuVGVsbmV0Lm1zZ3LgQwAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZWxuZXRsaWIuaHRtbCN0ZWxuZXRsaWIuVGVsbmV0Lm1zZ1gBAAAALXRy4UMAAFgvAAAAeG1sLnNheC5oYW5kbGVyLkNvbnRlbnRIYW5kbGVyLmVuZFByZWZpeE1hcHBpbmdy4kMAAChqaQEAAGpqAQAAWGYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLkNvbnRlbnRIYW5kbGVyLmVuZFByZWZpeE1hcHBpbmdYAQAAAC10cuNDAABYGwAAAHRhcmZpbGUuVGFyRmlsZS5leHRyYWN0ZmlsZXLkQwAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJGaWxlLmV4dHJhY3RmaWxlWAEAAAAtdHLlQwAAWBcAAABmbC5mb3JtLmFkZF9saWdodGJ1dHRvbnLmQwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbC5odG1sI2ZsLmZvcm0uYWRkX2xpZ2h0YnV0dG9uWAEAAAAtdHLnQwAAWCgAAAB1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnROb3RSZWdleHBNYXRjaGVzcuhDAAAoamkBAABqagEAAFhYAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0Tm90UmVnZXhwTWF0Y2hlc1gBAAAALXRy6UMAAFgTAAAAdHRrLk5vdGVib29rLmZvcmdldHLqQwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuTm90ZWJvb2suZm9yZ2V0WAEAAAAtdHLrQwAAWBoAAABjc3YuRGljdFdyaXRlci53cml0ZWhlYWRlcnLsQwAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jc3YuaHRtbCNjc3YuRGljdFdyaXRlci53cml0ZWhlYWRlclgBAAAALXRy7UMAAFgdAAAAbWFpbGJveC5NYWlsZGlyLnJlbW92ZV9mb2xkZXJy7kMAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGRpci5yZW1vdmVfZm9sZGVyWAEAAAAtdHLvQwAAWBAAAABiZGIuQmRiLnNldF9uZXh0cvBDAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JkYi5odG1sI2JkYi5CZGIuc2V0X25leHRYAQAAAC10cvFDAABYEwAAAHNlbGVjdC5rcXVldWUuY2xvc2Vy8kMAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2VsZWN0Lmh0bWwjc2VsZWN0LmtxdWV1ZS5jbG9zZVgBAAAALXRy80MAAFgoAAAAbG9nZ2luZy5oYW5kbGVycy5NZW1vcnlIYW5kbGVyLnNldFRhcmdldHL0QwAAKGppAQAAamoBAABYYAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5NZW1vcnlIYW5kbGVyLnNldFRhcmdldFgBAAAALXRy9UMAAFgJAAAAc3RyLmxqdXN0cvZDAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLmxqdXN0WAEAAAAtdHL3QwAAWBwAAAB1bml0dGVzdC5UZXN0Q2FzZS5zZXRVcENsYXNzcvhDAAAoamkBAABqagEAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2Uuc2V0VXBDbGFzc1gBAAAALXRy+UMAAFgPAAAAcGRiLlBkYi5ydW5jYWxscvpDAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BkYi5odG1sI3BkYi5QZGIucnVuY2FsbFgBAAAALXRy+0MAAFgZAAAAbWFpbGJveC5NYWlsYm94Lml0ZXJpdGVtc3L8QwAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsYm94Lml0ZXJpdGVtc1gBAAAALXRy/UMAAFgPAAAAaW8uSU9CYXNlLmNsb3Nlcv5DAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uSU9CYXNlLmNsb3NlWAEAAAAtdHL/QwAAWBoAAABzdW5hdS5BVV93cml0ZS5zZXRjb21wdHlwZXIARAAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdW5hdS5odG1sI3N1bmF1LkFVX3dyaXRlLnNldGNvbXB0eXBlWAEAAAAtdHIBRAAAWBIAAABvYmplY3QuX19zZXRpdGVtX19yAkQAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19zZXRpdGVtX19YAQAAAC10cgNEAABYGwAAAGNvb2tpZWxpYi5Db29raWUuaXNfZXhwaXJlZHIERAAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuQ29va2llLmlzX2V4cGlyZWRYAQAAAC10cgVEAABYHAAAAGh0dHBsaWIuSFRUUENvbm5lY3Rpb24uY2xvc2VyBkQAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHR0cGxpYi5odG1sI2h0dHBsaWIuSFRUUENvbm5lY3Rpb24uY2xvc2VYAQAAAC10cgdEAABYEgAAAHVuaWNvZGUuc3BsaXRsaW5lc3IIRAAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3VuaWNvZGUuc3BsaXRsaW5lc1gBAAAALXRyCUQAAFgXAAAAbWFpbGJveC5vbGRtYWlsYm94Lm5leHRyCkQAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3gub2xkbWFpbGJveC5uZXh0WAEAAAAtdHILRAAAWBoAAABlbWFpbC5oZWFkZXIuSGVhZGVyLl9fZXFfX3IMRAAAKGppAQAAamoBAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5oZWFkZXIuaHRtbCNlbWFpbC5oZWFkZXIuSGVhZGVyLl9fZXFfX1gBAAAALXRyDUQAAFgfAAAAeG1sLnNheC5TQVhFeGNlcHRpb24uZ2V0TWVzc2FnZXIORAAAKGppAQAAamoBAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4Lmh0bWwjeG1sLnNheC5TQVhFeGNlcHRpb24uZ2V0TWVzc2FnZVgBAAAALXRyD0QAAFgOAAAAbW1hcC5tbWFwLnNlZWtyEEQAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbW1hcC5odG1sI21tYXAubW1hcC5zZWVrWAEAAAAtdHIRRAAAWBQAAABob3RzaG90LlByb2ZpbGUuc3RvcHISRAAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ob3RzaG90Lmh0bWwjaG90c2hvdC5Qcm9maWxlLnN0b3BYAQAAAC10chNEAABYIwAAAG9zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2Uuc2V0Zm10chREAAAoamkBAABqagEAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zc2F1ZGlvZGV2Lmh0bWwjb3NzYXVkaW9kZXYub3NzX2F1ZGlvX2RldmljZS5zZXRmbXRYAQAAAC10chVEAABYFAAAAGZyb3plbnNldC5pc2Rpc2pvaW50chZEAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZnJvemVuc2V0LmlzZGlzam9pbnRYAQAAAC10chdEAABYFQAAAGZ0cGxpYi5GVFAuc3RvcmJpbmFyeXIYRAAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuRlRQLnN0b3JiaW5hcnlYAQAAAC10chlEAABYEAAAAENvbm5lY3Rpb24uY2xvc2VyGkQAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjQ29ubmVjdGlvbi5jbG9zZVgBAAAALXRyG0QAAFgVAAAAZnRwbGliLkZUUF9UTFMucHJvdF9wchxEAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z0cGxpYi5odG1sI2Z0cGxpYi5GVFBfVExTLnByb3RfcFgBAAAALXRyHUQAAFgSAAAAcmZjODIyLk1lc3NhZ2UuZ2V0ch5EAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JmYzgyMi5odG1sI3JmYzgyMi5NZXNzYWdlLmdldFgBAAAALXRyH0QAAFgkAAAAZm9ybWF0dGVyLmZvcm1hdHRlci5hZGRfZmxvd2luZ19kYXRhciBEAAAoamkBAABqagEAAFhVAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Zvcm1hdHRlci5odG1sI2Zvcm1hdHRlci5mb3JtYXR0ZXIuYWRkX2Zsb3dpbmdfZGF0YVgBAAAALXRyIUQAAFgOAAAAb2JqZWN0Ll9fc3RyX19yIkQAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19zdHJfX1gBAAAALXRyI0QAAFgeAAAAbG9nZ2luZy5OdWxsSGFuZGxlci5jcmVhdGVMb2NrciREAAAoamkBAABqagEAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLk51bGxIYW5kbGVyLmNyZWF0ZUxvY2tYAQAAAC10ciVEAABYGQAAAGRlY2ltYWwuRGVjaW1hbC5pc19maW5pdGVyJkQAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5pc19maW5pdGVYAQAAAC10cidEAABYJAAAAHhtbC5zYXgueG1scmVhZGVyLkF0dHJpYnV0ZXMuZ2V0VHlwZXIoRAAAKGppAQAAamoBAABYWgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLkF0dHJpYnV0ZXMuZ2V0VHlwZVgBAAAALXRyKUQAAFgTAAAAbWFpbGJveC5NSC5nZXRfZmlsZXIqRAAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NSC5nZXRfZmlsZVgBAAAALXRyK0QAAFgPAAAAb2JqZWN0Ll9faXhvcl9fcixEAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9faXhvcl9fWAEAAAAtdHItRAAAWBwAAAB4bWwuZG9tLkVsZW1lbnQuaGFzQXR0cmlidXRlci5EAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkVsZW1lbnQuaGFzQXR0cmlidXRlWAEAAAAtdHIvRAAAWBoAAAB0dGsuVHJlZXZpZXcuc2VsZWN0aW9uX3NldHIwRAAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuVHJlZXZpZXcuc2VsZWN0aW9uX3NldFgBAAAALXRyMUQAAFgnAAAAeG1sLnNheC54bWxyZWFkZXIuWE1MUmVhZGVyLmdldFByb3BlcnR5cjJEAAAoamkBAABqagEAAFhdAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuWE1MUmVhZGVyLmdldFByb3BlcnR5WAEAAAAtdHIzRAAAWBgAAAB4ZHJsaWIuUGFja2VyLnBhY2tfYXJyYXlyNEQAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveGRybGliLmh0bWwjeGRybGliLlBhY2tlci5wYWNrX2FycmF5WAEAAAAtdHI1RAAAWBcAAABfd2lucmVnLlB5SEtFWS5fX2V4aXRfX3I2RAAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9fd2lucmVnLmh0bWwjX3dpbnJlZy5QeUhLRVkuX19leGl0X19YAQAAAC10cjdEAABYFAAAAGltYXBsaWIuSU1BUDQucmVuYW1lcjhEAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LnJlbmFtZVgBAAAALXRyOUQAAFgUAAAAbG9nZ2luZy5Mb2dnZXIuZXJyb3JyOkQAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuTG9nZ2VyLmVycm9yWAEAAAAtdHI7RAAAWB8AAABpbXB1dGlsLkltcG9ydE1hbmFnZXIudW5pbnN0YWxscjxEAAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltcHV0aWwuaHRtbCNpbXB1dGlsLkltcG9ydE1hbmFnZXIudW5pbnN0YWxsWAEAAAAtdHI9RAAAWBwAAABIVE1MUGFyc2VyLkhUTUxQYXJzZXIuZ2V0cG9zcj5EAAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0bWxwYXJzZXIuaHRtbCNIVE1MUGFyc2VyLkhUTUxQYXJzZXIuZ2V0cG9zWAEAAAAtdHI/RAAAWBQAAAByZS5SZWdleE9iamVjdC5zcGxpdHJARAAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sI3JlLlJlZ2V4T2JqZWN0LnNwbGl0WAEAAAAtdHJBRAAAWBYAAAB0aW1laXQuVGltZXIucHJpbnRfZXhjckJEAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpbWVpdC5odG1sI3RpbWVpdC5UaW1lci5wcmludF9leGNYAQAAAC10ckNEAABYMAAAAGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLmNvbnZlcnRfYXJnX2xpbmVfdG9fYXJnc3JERAAAKGppAQAAamoBAABYYAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hcmdwYXJzZS5odG1sI2FyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLmNvbnZlcnRfYXJnX2xpbmVfdG9fYXJnc1gBAAAALXRyRUQAAFgbAAAAbm50cGxpYi5OTlRQLnNldF9kZWJ1Z2xldmVsckZEAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L25udHBsaWIuaHRtbCNubnRwbGliLk5OVFAuc2V0X2RlYnVnbGV2ZWxYAQAAAC10ckdEAABYFQAAAGhvdHNob3QuUHJvZmlsZS5zdGFydHJIRAAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ob3RzaG90Lmh0bWwjaG90c2hvdC5Qcm9maWxlLnN0YXJ0WAEAAAAtdHJJRAAAWCoAAABtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuU3luY01hbmFnZXIuRXZlbnRySkQAAChqaQEAAGpqAQAAWGEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLlN5bmNNYW5hZ2VyLkV2ZW50WAEAAAAtdHJLRAAAWCMAAABUa2ludGVyLldpZGdldC50ay5kZWxldGVmaWxlaGFuZGxlcnJMRAAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90a2ludGVyLmh0bWwjVGtpbnRlci5XaWRnZXQudGsuZGVsZXRlZmlsZWhhbmRsZXJYAQAAAC10ck1EAABYGQAAAGNvZGVjcy5TdHJlYW1Xcml0ZXIud3JpdGVyTkQAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLlN0cmVhbVdyaXRlci53cml0ZVgBAAAALXRyT0QAAFgmAAAAbG9nZ2luZy5oYW5kbGVycy5CdWZmZXJpbmdIYW5kbGVyLmVtaXRyUEQAAChqaQEAAGpqAQAAWF4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuQnVmZmVyaW5nSGFuZGxlci5lbWl0WAEAAAAtdHJRRAAAWBUAAAByZS5NYXRjaE9iamVjdC5ncm91cHNyUkQAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmUuaHRtbCNyZS5NYXRjaE9iamVjdC5ncm91cHNYAQAAAC10clNEAABYIQAAAHNzbC5TU0xTb2NrZXQuZ2V0X2NoYW5uZWxfYmluZGluZ3JURAAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMU29ja2V0LmdldF9jaGFubmVsX2JpbmRpbmdYAQAAAC10clVEAABYFgAAAHNobGV4LnNobGV4LnB1c2hfdG9rZW5yVkQAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2hsZXguaHRtbCNzaGxleC5zaGxleC5wdXNoX3Rva2VuWAEAAAAtdHJXRAAAWBkAAABlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuZ2V0clhEAAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuZ2V0WAEAAAAtdHJZRAAAWCgAAABkaWZmbGliLlNlcXVlbmNlTWF0Y2hlci5yZWFsX3F1aWNrX3JhdGlvclpEAAAoamkBAABqagEAAFhXAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RpZmZsaWIuaHRtbCNkaWZmbGliLlNlcXVlbmNlTWF0Y2hlci5yZWFsX3F1aWNrX3JhdGlvWAEAAAAtdHJbRAAAWBQAAABjdXJzZXMud2luZG93LmFkZHN0cnJcRAAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmFkZHN0clgBAAAALXRyXUQAAFgjAAAAY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QuX19taXNzaW5nX19yXkQAAChqaQEAAGpqAQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdC5fX21pc3NpbmdfX1gBAAAALXRyX0QAAFgeAAAAc2dtbGxpYi5TR01MUGFyc2VyLmhhbmRsZV9kYXRhcmBEAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NnbWxsaWIuaHRtbCNzZ21sbGliLlNHTUxQYXJzZXIuaGFuZGxlX2RhdGFYAQAAAC10cmFEAABYDAAAAHN0ci5lbmRzd2l0aHJiRAAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0ci5lbmRzd2l0aFgBAAAALXRyY0QAAFgPAAAAQ29ubmVjdGlvbi5yZWN2cmREAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI0Nvbm5lY3Rpb24ucmVjdlgBAAAALXRyZUQAAFgdAAAAdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0RXF1YWxyZkQAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRFcXVhbFgBAAAALXRyZ0QAAFgXAAAAbWFpbGJveC5NYWlsYm94Ll9fbGVuX19yaEQAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGJveC5fX2xlbl9fWAEAAAAtdHJpRAAAWCkAAABtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuU3luY01hbmFnZXIubGlzdHJqRAAAKGppAQAAamoBAABYYAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuU3luY01hbmFnZXIubGlzdFgBAAAALXRya0QAAFgOAAAAb2JqZWN0Ll9fb2N0X19ybEQAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19vY3RfX1gBAAAALXRybUQAAFgtAAAAZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuYWRkX2xpbmtfb2JqZWN0cm5EAAAoamkBAABqagEAAFhdAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuYWRkX2xpbmtfb2JqZWN0WAEAAAAtdHJvRAAAWBMAAABzZWxlY3QuZXBvbGwubW9kaWZ5cnBEAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NlbGVjdC5odG1sI3NlbGVjdC5lcG9sbC5tb2RpZnlYAQAAAC10cnFEAABYNgAAAEJhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuZGF0ZV90aW1lX3N0cmluZ3JyRAAAKGppAQAAamoBAABYbAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXNlaHR0cHNlcnZlci5odG1sI0Jhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuZGF0ZV90aW1lX3N0cmluZ1gBAAAALXRyc0QAAFgkAAAAY2FsZW5kYXIuQ2FsZW5kYXIubW9udGhkYXRlc2NhbGVuZGFycnREAAAoamkBAABqagEAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhbGVuZGFyLmh0bWwjY2FsZW5kYXIuQ2FsZW5kYXIubW9udGhkYXRlc2NhbGVuZGFyWAEAAAAtdHJ1RAAAWB8AAABodHRwbGliLkhUVFBSZXNwb25zZS5nZXRoZWFkZXJzcnZEAAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0dHBsaWIuaHRtbCNodHRwbGliLkhUVFBSZXNwb25zZS5nZXRoZWFkZXJzWAEAAAAtdHJ3RAAAWBYAAABhaWZjLmFpZmMuZ2V0bmNoYW5uZWxzcnhEAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FpZmMuaHRtbCNhaWZjLmFpZmMuZ2V0bmNoYW5uZWxzWAEAAAAtdHJ5RAAAWBIAAABubnRwbGliLk5OVFAueG92ZXJyekQAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbm50cGxpYi5odG1sI25udHBsaWIuTk5UUC54b3ZlclgBAAAALXRye0QAAFgTAAAAaGFzaGxpYi5oYXNoLmRpZ2VzdHJ8RAAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9oYXNobGliLmh0bWwjaGFzaGxpYi5oYXNoLmRpZ2VzdFgBAAAALXRyfUQAAFgaAAAAQ29va2llLk1vcnNlbC5PdXRwdXRTdHJpbmdyfkQAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llLmh0bWwjQ29va2llLk1vcnNlbC5PdXRwdXRTdHJpbmdYAQAAAC10cn9EAABYEQAAAGNodW5rLkNodW5rLmNsb3NlcoBEAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NodW5rLmh0bWwjY2h1bmsuQ2h1bmsuY2xvc2VYAQAAAC10coFEAABYFwAAAHN1bmF1LkFVX3JlYWQuZ2V0cGFyYW1zcoJEAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUuQVVfcmVhZC5nZXRwYXJhbXNYAQAAAC10coNEAABYIgAAAHN0cmluZy5Gb3JtYXR0ZXIuY2hlY2tfdW51c2VkX2FyZ3NyhEQAAChqaQEAAGpqAQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLkZvcm1hdHRlci5jaGVja191bnVzZWRfYXJnc1gBAAAALXRyhUQAAFgqAAAAbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLlN5bmNNYW5hZ2VyLlJMb2NrcoZEAAAoamkBAABqagEAAFhhAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5TeW5jTWFuYWdlci5STG9ja1gBAAAALXRyh0QAAFgoAAAAZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIucHJlcHJvY2Vzc3KIRAAAKGppAQAAamoBAABYWAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLnByZXByb2Nlc3NYAQAAAC10colEAABYJwAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50VHJlZS53cml0ZXKKRAAAKGppAQAAamoBAABYZAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudFRyZWUud3JpdGVYAQAAAC10cotEAABYEQAAAG9iamVjdC5fX2NvZXJjZV9fcoxEAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fY29lcmNlX19YAQAAAC10co1EAABYGQAAAGN1cnNlcy53aW5kb3cubm91dHJlZnJlc2hyjkQAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5ub3V0cmVmcmVzaFgBAAAALXRyj0QAAFgdAAAAdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0RmFsc2VykEQAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRGYWxzZVgBAAAALXRykUQAAFgUAAAAY3Vyc2VzLndpbmRvdy5zdWJwYWRykkQAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5zdWJwYWRYAQAAAC10cpNEAABYKQAAAG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLkxpc3RlbmVyLmNsb3NlcpREAAAoamkBAABqagEAAFhgAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLkxpc3RlbmVyLmNsb3NlWAEAAAAtdHKVRAAAWCoAAABtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuQmFzZU1hbmFnZXIuc3RhcnRylkQAAChqaQEAAGpqAQAAWGEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLkJhc2VNYW5hZ2VyLnN0YXJ0WAEAAAAtdHKXRAAAWBEAAABmbC5mb3JtLmVuZF9ncm91cHKYRAAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbC5odG1sI2ZsLmZvcm0uZW5kX2dyb3VwWAEAAAAtdHKZRAAAWBYAAABtc2lsaWIuRGlhbG9nLmNoZWNrYm94cppEAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5EaWFsb2cuY2hlY2tib3hYAQAAAC10cptEAABYFAAAAG5udHBsaWIuTk5UUC5hcnRpY2xlcpxEAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L25udHBsaWIuaHRtbCNubnRwbGliLk5OVFAuYXJ0aWNsZVgBAAAALXRynUQAAFgSAAAAb2JqZWN0Ll9fZ2V0YXR0cl9fcp5EAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fZ2V0YXR0cl9fWAEAAAAtdHKfRAAAWBkAAABwaWNrbGUuUGlja2xlci5jbGVhcl9tZW1vcqBEAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BpY2tsZS5odG1sI3BpY2tsZS5QaWNrbGVyLmNsZWFyX21lbW9YAQAAAC10cqFEAABYGgAAAGFzeW5jb3JlLmRpc3BhdGNoZXIubGlzdGVucqJEAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzeW5jb3JlLmh0bWwjYXN5bmNvcmUuZGlzcGF0Y2hlci5saXN0ZW5YAQAAAC10cqNEAABYIwAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50LmNsZWFycqREAAAoamkBAABqagEAAFhgAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50LmNsZWFyWAEAAAAtdHKlRAAAWBIAAABvYmplY3QuX19kZWxhdHRyX19ypkQAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19kZWxhdHRyX19YAQAAAC10cqdEAABYJAAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS5YTUxQYXJzZXIuZmVlZHKoRAAAKGppAQAAamoBAABYYQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuWE1MUGFyc2VyLmZlZWRYAQAAAC10cqlEAABYEwAAAGRlY2ltYWwuRGVjaW1hbC5taW5yqkQAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5taW5YAQAAAC10cqtEAABYGgAAAHVuaXR0ZXN0LlRlc3RDYXNlLnRlYXJEb3ducqxEAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UudGVhckRvd25YAQAAAC10cq1EAABYCwAAAHN0ci5pc3NwYWNlcq5EAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLmlzc3BhY2VYAQAAAC10cq9EAABYFwAAAGltYXBsaWIuSU1BUDQuZGVsZXRlYWNscrBEAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LmRlbGV0ZWFjbFgBAAAALXRysUQAAFgtAAAAbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLkJhc2VNYW5hZ2VyLnNodXRkb3ducrJEAAAoamkBAABqagEAAFhkAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5CYXNlTWFuYWdlci5zaHV0ZG93blgBAAAALXRys0QAAFgdAAAAY29va2llbGliLkNvb2tpZVBvbGljeS5zZXRfb2tytEQAAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llbGliLmh0bWwjY29va2llbGliLkNvb2tpZVBvbGljeS5zZXRfb2tYAQAAAC10crVEAABYEwAAAHR0ay5UcmVldmlldy5leGlzdHNytkQAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLlRyZWV2aWV3LmV4aXN0c1gBAAAALXRyt0QAAFgXAAAAY21kLkNtZC5jb21wbGV0ZWRlZmF1bHRyuEQAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY21kLmh0bWwjY21kLkNtZC5jb21wbGV0ZWRlZmF1bHRYAQAAAC10crlEAABYJQAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50LmZpbmRhbGxyukQAAChqaQEAAGpqAQAAWGIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQuZmluZGFsbFgBAAAALXRyu0QAAFgWAAAAbWFpbGJveC5NYWlsZGlyLnVubG9ja3K8RAAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsZGlyLnVubG9ja1gBAAAALXRyvUQAAFgbAAAAcHByaW50LlByZXR0eVByaW50ZXIuZm9ybWF0cr5EAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BwcmludC5odG1sI3BwcmludC5QcmV0dHlQcmludGVyLmZvcm1hdFgBAAAALXRyv0QAAFgnAAAAdW5pdHRlc3QuVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlcsBEAAAoamkBAABqagEAAFhXAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlWAEAAAAtdHLBRAAAWCUAAABlbWFpbC5jaGFyc2V0LkNoYXJzZXQuZnJvbV9zcGxpdHRhYmxlcsJEAAAoamkBAABqagEAAFhaAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLmNoYXJzZXQuaHRtbCNlbWFpbC5jaGFyc2V0LkNoYXJzZXQuZnJvbV9zcGxpdHRhYmxlWAEAAAAtdHLDRAAAWB0AAAB0dGsuTm90ZWJvb2suZW5hYmxlX3RyYXZlcnNhbHLERAAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuTm90ZWJvb2suZW5hYmxlX3RyYXZlcnNhbFgBAAAALXRyxUQAAFgeAAAAdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0SXNOb25lcsZEAAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0SXNOb25lWAEAAAAtdHLHRAAAWBoAAAB6aXBmaWxlLlppcEZpbGUuZXh0cmFjdGFsbHLIRAAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5aaXBGaWxlLmV4dHJhY3RhbGxYAQAAAC10cslEAABYHwAAAHNzbC5TU0xDb250ZXh0LmNlcnRfc3RvcmVfc3RhdHNyykQAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTENvbnRleHQuY2VydF9zdG9yZV9zdGF0c1gBAAAALXRyy0QAAFggAAAAcm9ib3RwYXJzZXIuUm9ib3RGaWxlUGFyc2VyLnJlYWRyzEQAAChqaQEAAGpqAQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcm9ib3RwYXJzZXIuaHRtbCNyb2JvdHBhcnNlci5Sb2JvdEZpbGVQYXJzZXIucmVhZFgBAAAALXRyzUQAAFgUAAAAY3Vyc2VzLndpbmRvdy5pbnNzdHJyzkQAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5pbnNzdHJYAQAAAC10cs9EAABYHAAAAGxvZ2dpbmcuTG9nZ2VyLnJlbW92ZUhhbmRsZXJy0EQAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuTG9nZ2VyLnJlbW92ZUhhbmRsZXJYAQAAAC10ctFEAABYJgAAAHVuaXR0ZXN0LlRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzctJEAAAoamkBAABqagEAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXNYAQAAAC10ctNEAABYGwAAAGVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5pdGVtc3LURAAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5NZXNzYWdlLml0ZW1zWAEAAAAtdHLVRAAAWCgAAAB4bWwuc2F4LnhtbHJlYWRlci5JbmNyZW1lbnRhbFBhcnNlci5mZWVkctZEAAAoamkBAABqagEAAFheAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuSW5jcmVtZW50YWxQYXJzZXIuZmVlZFgBAAAALXRy10QAAFgYAAAAQ29va2llLkJhc2VDb29raWUub3V0cHV0cthEAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZS5odG1sI0Nvb2tpZS5CYXNlQ29va2llLm91dHB1dFgBAAAALXRy2UQAAFgjAAAAdW5pdHRlc3QuVGVzdENhc2UuZGVmYXVsdFRlc3RSZXN1bHRy2kQAAChqaQEAAGpqAQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5kZWZhdWx0VGVzdFJlc3VsdFgBAAAALXRy20QAAFgiAAAAaHR0cGxpYi5IVFRQQ29ubmVjdGlvbi5nZXRyZXNwb25zZXLcRAAAKGppAQAAamoBAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odHRwbGliLmh0bWwjaHR0cGxpYi5IVFRQQ29ubmVjdGlvbi5nZXRyZXNwb25zZVgBAAAALXRy3UQAAFgVAAAAZGVjaW1hbC5EZWNpbWFsLnNoaWZ0ct5EAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwuc2hpZnRYAQAAAC10ct9EAABYFAAAAGN0eXBlcy5fQ0RhdGEuaW5fZGxscuBEAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5fQ0RhdGEuaW5fZGxsWAEAAAAtdHLhRAAAWB0AAABtdWx0aWZpbGUuTXVsdGlGaWxlLnJlYWRsaW5lc3LiRAAAKGppAQAAamoBAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aWZpbGUuaHRtbCNtdWx0aWZpbGUuTXVsdGlGaWxlLnJlYWRsaW5lc1gBAAAALXRy40QAAFgRAAAAbWFpbGJveC5NSC5yZW1vdmVy5EQAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTUgucmVtb3ZlWAEAAAAtdHLlRAAAWBoAAAB3YXZlLldhdmVfcmVhZC5nZXRjb21wbmFtZXLmRAAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93YXZlLmh0bWwjd2F2ZS5XYXZlX3JlYWQuZ2V0Y29tcG5hbWVYAQAAAC10cudEAABYIwAAAG9wdHBhcnNlLk9wdGlvblBhcnNlci5yZW1vdmVfb3B0aW9ucuhEAAAoamkBAABqagEAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UuT3B0aW9uUGFyc2VyLnJlbW92ZV9vcHRpb25YAQAAAC10culEAABYCQAAAHN0ci5yanVzdHLqRAAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0ci5yanVzdFgBAAAALXRy60QAAFgeAAAAc3FsaXRlMy5Db25uZWN0aW9uLmV4ZWN1dGVtYW55cuxEAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLkNvbm5lY3Rpb24uZXhlY3V0ZW1hbnlYAQAAAC10cu1EAABYIAAAAHNnbWxsaWIuU0dNTFBhcnNlci5oYW5kbGVfZW5kdGFncu5EAAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NnbWxsaWIuaHRtbCNzZ21sbGliLlNHTUxQYXJzZXIuaGFuZGxlX2VuZHRhZ1gBAAAALXRy70QAAFgTAAAAaW1hcGxpYi5JTUFQNC5mZXRjaHLwRAAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5mZXRjaFgBAAAALXRy8UQAAFgYAAAAbXVsdGlmaWxlLk11bHRpRmlsZS50ZWxscvJEAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpZmlsZS5odG1sI211bHRpZmlsZS5NdWx0aUZpbGUudGVsbFgBAAAALXRy80QAAFgWAAAAdGhyZWFkaW5nLkV2ZW50LmlzX3NldHL0RAAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuRXZlbnQuaXNfc2V0WAEAAAAtdHL1RAAAWCAAAAB1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnROb3RFcXVhbHL2RAAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydE5vdEVxdWFsWAEAAAAtdHL3RAAAWCoAAABsb2dnaW5nLmhhbmRsZXJzLk1lbW9yeUhhbmRsZXIuc2hvdWxkRmx1c2hy+EQAAChqaQEAAGpqAQAAWGIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuTWVtb3J5SGFuZGxlci5zaG91bGRGbHVzaFgBAAAALXRy+UQAAFgzAAAAeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkVuZE5hbWVzcGFjZURlY2xIYW5kbGVycvpEAAAoamkBAABqagEAAFhiAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuRW5kTmFtZXNwYWNlRGVjbEhhbmRsZXJYAQAAAC10cvtEAABYEgAAAGRlY2ltYWwuQ29udGV4dC5sbnL8RAAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmxuWAEAAAAtdHL9RAAAWC0AAABkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5saW5rX3NoYXJlZF9saWJy/kQAAChqaQEAAGpqAQAAWF0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5saW5rX3NoYXJlZF9saWJYAQAAAC10cv9EAABYDgAAAHN0ci5ycGFydGl0aW9ucgBFAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLnJwYXJ0aXRpb25YAQAAAC10cgFFAABYEwAAAGN1cnNlcy53aW5kb3cuaWRsb2tyAkUAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5pZGxva1gBAAAALXRyA0UAAFggAAAAY3R5cGVzLkxpYnJhcnlMb2FkZXIuTG9hZExpYnJhcnlyBEUAAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLkxpYnJhcnlMb2FkZXIuTG9hZExpYnJhcnlYAQAAAC10cgVFAABYEQAAAGFzeW5jaGF0LmZpZm8ucG9wcgZFAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzeW5jaGF0Lmh0bWwjYXN5bmNoYXQuZmlmby5wb3BYAQAAAC10cgdFAABYMAAAAERvY1hNTFJQQ1NlcnZlci5Eb2NYTUxSUENTZXJ2ZXIuc2V0X3NlcnZlcl90aXRsZXIIRQAAKGppAQAAamoBAABYZwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N4bWxycGNzZXJ2ZXIuaHRtbCNEb2NYTUxSUENTZXJ2ZXIuRG9jWE1MUlBDU2VydmVyLnNldF9zZXJ2ZXJfdGl0bGVYAQAAAC10cglFAABYFwAAAHNnbWxsaWIuU0dNTFBhcnNlci5mZWVkcgpFAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NnbWxsaWIuaHRtbCNzZ21sbGliLlNHTUxQYXJzZXIuZmVlZFgBAAAALXRyC0UAAFgWAAAAcGlwZXMuVGVtcGxhdGUucHJlcGVuZHIMRQAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9waXBlcy5odG1sI3BpcGVzLlRlbXBsYXRlLnByZXBlbmRYAQAAAC10cg1FAABYDAAAAHN0ci5zd2FwY2FzZXIORQAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0ci5zd2FwY2FzZVgBAAAALXRyD0UAAFgcAAAAdW5pdHRlc3QuVGVzdENhc2UuYWRkQ2xlYW51cHIQRQAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmFkZENsZWFudXBYAQAAAC10chFFAABYIwAAAGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLnByaW50X3VzYWdlchJFAAAoamkBAABqagEAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FyZ3BhcnNlLmh0bWwjYXJncGFyc2UuQXJndW1lbnRQYXJzZXIucHJpbnRfdXNhZ2VYAQAAAC10chNFAABYJQAAAHhtbC5zYXgueG1scmVhZGVyLkxvY2F0b3IuZ2V0U3lzdGVtSWRyFEUAAChqaQEAAGpqAQAAWFsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCN4bWwuc2F4LnhtbHJlYWRlci5Mb2NhdG9yLmdldFN5c3RlbUlkWAEAAAAtdHIVRQAAWBYAAAByZS5SZWdleE9iamVjdC5maW5kYWxschZFAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JlLmh0bWwjcmUuUmVnZXhPYmplY3QuZmluZGFsbFgBAAAALXRyF0UAAFgQAAAAcGFyc2VyLlNULmlzZXhwcnIYRQAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wYXJzZXIuaHRtbCNwYXJzZXIuU1QuaXNleHByWAEAAAAtdHIZRQAAWCIAAABlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuaXNfbXVsdGlwYXJ0chpFAAAoamkBAABqagEAAFhXAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuaXNfbXVsdGlwYXJ0WAEAAAAtdHIbRQAAWBEAAABmbC5mb3JtLmJnbl9ncm91cHIcRQAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbC5odG1sI2ZsLmZvcm0uYmduX2dyb3VwWAEAAAAtdHIdRQAAWBEAAABiZGIuQmRiLmdldF9icmVha3IeRQAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iZGIuaHRtbCNiZGIuQmRiLmdldF9icmVha1gBAAAALXRyH0UAAFgRAAAAbm50cGxpYi5OTlRQLm5leHRyIEUAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbm50cGxpYi5odG1sI25udHBsaWIuTk5UUC5uZXh0WAEAAAAtdHIhRQAAWBYAAABwcm9maWxlLlByb2ZpbGUuZW5hYmxlciJFAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Byb2ZpbGUuaHRtbCNwcm9maWxlLlByb2ZpbGUuZW5hYmxlWAEAAAAtdHIjRQAAWCQAAABkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIucmVwb3J0X3N1Y2Nlc3NyJEUAAChqaQEAAGpqAQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRG9jVGVzdFJ1bm5lci5yZXBvcnRfc3VjY2Vzc1gBAAAALXRyJUUAAFgUAAAAYXJyYXkuYXJyYXkuZnJvbWZpbGVyJkUAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXJyYXkuaHRtbCNhcnJheS5hcnJheS5mcm9tZmlsZVgBAAAALXRyJ0UAAFgiAAAAZ2V0dGV4dC5OdWxsVHJhbnNsYXRpb25zLnVuZ2V0dGV4dHIoRQAAKGppAQAAamoBAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZXR0ZXh0Lmh0bWwjZ2V0dGV4dC5OdWxsVHJhbnNsYXRpb25zLnVuZ2V0dGV4dFgBAAAALXRyKUUAAFghAAAAY29kZS5JbnRlcmFjdGl2ZUNvbnNvbGUucmF3X2lucHV0cipFAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGUuaHRtbCNjb2RlLkludGVyYWN0aXZlQ29uc29sZS5yYXdfaW5wdXRYAQAAAC10citFAABYDAAAAG1kNS5tZDUuY29weXIsRQAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tZDUuaHRtbCNtZDUubWQ1LmNvcHlYAQAAAC10ci1FAABYIgAAAG9wdHBhcnNlLk9wdGlvblBhcnNlci5zZXRfZGVmYXVsdHNyLkUAAChqaQEAAGpqAQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS5PcHRpb25QYXJzZXIuc2V0X2RlZmF1bHRzWAEAAAAtdHIvRQAAWCQAAABjb21waWxlci52aXNpdG9yLkFTVFZpc2l0b3IucHJlb3JkZXJyMEUAAChqaQEAAGpqAQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29tcGlsZXIuaHRtbCNjb21waWxlci52aXNpdG9yLkFTVFZpc2l0b3IucHJlb3JkZXJYAQAAAC10cjFFAABYIQAAAHVuaXR0ZXN0LlRlc3RTdWl0ZS5jb3VudFRlc3RDYXNlc3IyRQAAKGppAQAAamoBAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RTdWl0ZS5jb3VudFRlc3RDYXNlc1gBAAAALXRyM0UAAFgaAAAARnJhbWVXb3JrLkFwcGxpY2F0aW9uLmlkbGVyNEUAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnJhbWV3b3JrLmh0bWwjRnJhbWVXb3JrLkFwcGxpY2F0aW9uLmlkbGVYAQAAAC10cjVFAABYGwAAAHdhdmUuV2F2ZV9yZWFkLmdldHNhbXB3aWR0aHI2RQAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93YXZlLmh0bWwjd2F2ZS5XYXZlX3JlYWQuZ2V0c2FtcHdpZHRoWAEAAAAtdHI3RQAAWDEAAABCYXNlSFRUUFNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLmxvZ19tZXNzYWdlcjhFAAAoamkBAABqagEAAFhnAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Jhc2VodHRwc2VydmVyLmh0bWwjQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5sb2dfbWVzc2FnZVgBAAAALXRyOUUAAFghAAAAZ2V0dGV4dC5OdWxsVHJhbnNsYXRpb25zLmxnZXR0ZXh0cjpFAAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dldHRleHQuaHRtbCNnZXR0ZXh0Lk51bGxUcmFuc2xhdGlvbnMubGdldHRleHRYAQAAAC10cjtFAABYIgAAAEhUTUxQYXJzZXIuSFRNTFBhcnNlci51bmtub3duX2RlY2xyPEUAAChqaQEAAGpqAQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHRtbHBhcnNlci5odG1sI0hUTUxQYXJzZXIuSFRNTFBhcnNlci51bmtub3duX2RlY2xYAQAAAC10cj1FAABYIQAAAGRlY2ltYWwuRGVjaW1hbC50b19pbnRlZ3JhbF9leGFjdHI+RQAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLnRvX2ludGVncmFsX2V4YWN0WAEAAAAtdHI/RQAAWBkAAABzcWxpdGUzLkNvbm5lY3Rpb24uY29tbWl0ckBFAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLkNvbm5lY3Rpb24uY29tbWl0WAEAAAAtdHJBRQAAWDgAAABtdWx0aXByb2Nlc3NpbmcubXVsdGlwcm9jZXNzaW5nLnF1ZXVlcy5TaW1wbGVRdWV1ZS5lbXB0eXJCRQAAKGppAQAAamoBAABYbwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcubXVsdGlwcm9jZXNzaW5nLnF1ZXVlcy5TaW1wbGVRdWV1ZS5lbXB0eVgBAAAALXRyQ0UAAFgQAAAAcG9wbGliLlBPUDMudWlkbHJERQAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wb3BsaWIuaHRtbCNwb3BsaWIuUE9QMy51aWRsWAEAAAAtdHJFRQAAWBsAAABkZWNpbWFsLkNvbnRleHQubG9naWNhbF94b3JyRkUAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5sb2dpY2FsX3hvclgBAAAALXRyR0UAAFgUAAAAaW1hcGxpYi5JTUFQNC5jcmVhdGVySEUAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQuY3JlYXRlWAEAAAAtdHJJRQAAWBsAAABzeW10YWJsZS5TeW1ib2wuaXNfYXNzaWduZWRySkUAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3ltdGFibGUuaHRtbCNzeW10YWJsZS5TeW1ib2wuaXNfYXNzaWduZWRYAQAAAC10cktFAABYEwAAAGN1cnNlcy53aW5kb3cuZXJhc2VyTEUAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5lcmFzZVgBAAAALXRyTUUAAFgTAAAAdGhyZWFkLmxvY2suYWNxdWlyZXJORQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWQuaHRtbCN0aHJlYWQubG9jay5hY3F1aXJlWAEAAAAtdHJPRQAAWB4AAAB4bWwuZG9tLkRvY3VtZW50LmNyZWF0ZUNvbW1lbnRyUEUAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uRG9jdW1lbnQuY3JlYXRlQ29tbWVudFgBAAAALXRyUUUAAFgaAAAAYmRiLkJkYi5kaXNwYXRjaF9leGNlcHRpb25yUkUAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYi5kaXNwYXRjaF9leGNlcHRpb25YAQAAAC10clNFAABYFwAAAGJ6Mi5CWjJDb21wcmVzc29yLmZsdXNoclRFAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2J6Mi5odG1sI2J6Mi5CWjJDb21wcmVzc29yLmZsdXNoWAEAAAAtdHJVRQAAWBsAAAB1cmxsaWIyLk9wZW5lckRpcmVjdG9yLm9wZW5yVkUAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuT3BlbmVyRGlyZWN0b3Iub3BlblgBAAAALXRyV0UAAFgUAAAAc29ja2V0LnNvY2tldC5zZW5kdG9yWEUAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LnNvY2tldC5zZW5kdG9YAQAAAC10cllFAABYKAAAAHdzZ2lyZWYuc2ltcGxlX3NlcnZlci5XU0dJU2VydmVyLmdldF9hcHByWkUAAChqaQEAAGpqAQAAWFcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd3NnaXJlZi5odG1sI3dzZ2lyZWYuc2ltcGxlX3NlcnZlci5XU0dJU2VydmVyLmdldF9hcHBYAQAAAC10cltFAABYEAAAAHR0ay5Ob3RlYm9vay50YWJyXEUAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLk5vdGVib29rLnRhYlgBAAAALXRyXUUAAFgjAAAAQ29uZmlnUGFyc2VyLlJhd0NvbmZpZ1BhcnNlci5yZWFkZnByXkUAAChqaQEAAGpqAQAAWFcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjQ29uZmlnUGFyc2VyLlJhd0NvbmZpZ1BhcnNlci5yZWFkZnBYAQAAAC10cl9FAABYFAAAAHRocmVhZGluZy5FdmVudC53YWl0cmBFAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5FdmVudC53YWl0WAEAAAAtdHJhRQAAWBcAAABkZWNpbWFsLkRlY2ltYWwuaXNfc25hbnJiRQAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLmlzX3NuYW5YAQAAAC10cmNFAABYKQAAAGRpc3R1dGlscy5mYW5jeV9nZXRvcHQuRmFuY3lHZXRvcHQuZ2V0b3B0cmRFAAAoamkBAABqagEAAFhZAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmZhbmN5X2dldG9wdC5GYW5jeUdldG9wdC5nZXRvcHRYAQAAAC10cmVFAABYDwAAAGRpY3QuaXRlcnZhbHVlc3JmRQAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2RpY3QuaXRlcnZhbHVlc1gBAAAALXRyZ0UAAFg4AAAAQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5oYW5kbGVfb25lX3JlcXVlc3RyaEUAAChqaQEAAGpqAQAAWG4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmFzZWh0dHBzZXJ2ZXIuaHRtbCNCYXNlSFRUUFNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLmhhbmRsZV9vbmVfcmVxdWVzdFgBAAAALXRyaUUAAFgZAAAAc3VuYXUuQVVfcmVhZC5nZXRjb21wbmFtZXJqRQAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdW5hdS5odG1sI3N1bmF1LkFVX3JlYWQuZ2V0Y29tcG5hbWVYAQAAAC10cmtFAABYFwAAAGN1cnNlcy53aW5kb3cudG91Y2hsaW5lcmxFAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cudG91Y2hsaW5lWAEAAAAtdHJtRQAAWBgAAABzdW5hdS5BVV9yZWFkLmdldG5mcmFtZXNybkUAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VuYXUuaHRtbCNzdW5hdS5BVV9yZWFkLmdldG5mcmFtZXNYAQAAAC10cm9FAABYGwAAAGxvZ2dpbmcuTG9nZ2VyLnJlbW92ZUZpbHRlcnJwRQAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5Mb2dnZXIucmVtb3ZlRmlsdGVyWAEAAAAtdHJxRQAAWBYAAABzY2hlZC5zY2hlZHVsZXIuY2FuY2VscnJFAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NjaGVkLmh0bWwjc2NoZWQuc2NoZWR1bGVyLmNhbmNlbFgBAAAALXRyc0UAAFgXAAAAaW8uQnVmZmVyZWRSZWFkZXIucmVhZDFydEUAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW8uaHRtbCNpby5CdWZmZXJlZFJlYWRlci5yZWFkMVgBAAAALXRydUUAAFgZAAAAbG9nZ2luZy5Mb2dnZXIuYWRkSGFuZGxlcnJ2RQAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5Mb2dnZXIuYWRkSGFuZGxlclgBAAAALXRyd0UAAFgRAAAAbWQ1Lm1kNS5oZXhkaWdlc3RyeEUAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWQ1Lmh0bWwjbWQ1Lm1kNS5oZXhkaWdlc3RYAQAAAC10cnlFAABYFAAAAHJleGVjLlJFeGVjLnJfcmVsb2FkcnpFAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JleGVjLmh0bWwjcmV4ZWMuUkV4ZWMucl9yZWxvYWRYAQAAAC10cntFAABYFgAAAG1haWxib3guTWFpbGRpci51cGRhdGVyfEUAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGRpci51cGRhdGVYAQAAAC10cn1FAABYFQAAAGRhdGV0aW1lLnRpbWUuX19zdHJfX3J+RQAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLnRpbWUuX19zdHJfX1gBAAAALXRyf0UAAFgRAAAAbm50cGxpYi5OTlRQLmhlYWRygEUAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbm50cGxpYi5odG1sI25udHBsaWIuTk5UUC5oZWFkWAEAAAAtdHKBRQAAWC8AAABtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuQmFzZU1hbmFnZXIuZ2V0X3NlcnZlcnKCRQAAKGppAQAAamoBAABYZgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuQmFzZU1hbmFnZXIuZ2V0X3NlcnZlclgBAAAALXRyg0UAAFgSAAAAaW1hcGxpYi5JTUFQNC5vcGVucoRFAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0Lm9wZW5YAQAAAC10coVFAABYJgAAAEZyYW1lV29yay5TY3JvbGxlZFdpbmRvdy5kb19jb250cm9saGl0coZFAAAoamkBAABqagEAAFhXAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZyYW1ld29yay5odG1sI0ZyYW1lV29yay5TY3JvbGxlZFdpbmRvdy5kb19jb250cm9saGl0WAEAAAAtdHKHRQAAWBcAAABwaWNrbGUuVW5waWNrbGVyLm5vbG9hZHKIRQAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9waWNrbGUuaHRtbCNwaWNrbGUuVW5waWNrbGVyLm5vbG9hZFgBAAAALXRyiUUAAFgZAAAAd2F2ZS5XYXZlX3JlYWQuZ2V0bmZyYW1lc3KKRQAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93YXZlLmh0bWwjd2F2ZS5XYXZlX3JlYWQuZ2V0bmZyYW1lc1gBAAAALXRyi0UAAFgdAAAAZW1haWwubWVzc2FnZS5NZXNzYWdlLmhhc19rZXlyjEUAAChqaQEAAGpqAQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS5oYXNfa2V5WAEAAAAtdHKNRQAAWBUAAABkZWNpbWFsLkNvbnRleHQubWludXNyjkUAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5taW51c1gBAAAALXRyj0UAAFgpAAAAeG1sLnNheC5oYW5kbGVyLkNvbnRlbnRIYW5kbGVyLmNoYXJhY3RlcnNykEUAAChqaQEAAGpqAQAAWGAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLkNvbnRlbnRIYW5kbGVyLmNoYXJhY3RlcnNYAQAAAC10cpFFAABYDQAAAG9iamVjdC5fX2xlX19ykkUAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19sZV9fWAEAAAAtdHKTRQAAWCkAAAB3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLmFkZF9jZ2lfdmFyc3KURQAAKGppAQAAamoBAABYWAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5hZGRfY2dpX3ZhcnNYAQAAAC10cpVFAABYHQAAAG1haWxib3guTU1ERk1lc3NhZ2UuZ2V0X2ZsYWdzcpZFAAAoamkBAABqagEAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1NREZNZXNzYWdlLmdldF9mbGFnc1gBAAAALXRyl0UAAFgZAAAAdGV4dHdyYXAuVGV4dFdyYXBwZXIuZmlsbHKYRQAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZXh0d3JhcC5odG1sI3RleHR3cmFwLlRleHRXcmFwcGVyLmZpbGxYAQAAAC10cplFAABYDgAAAG9iamVjdC5fX2Rpdl9fcppFAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fZGl2X19YAQAAAC10cptFAABYGgAAAHJmYzgyMi5BZGRyZXNzTGlzdC5fX2xlbl9fcpxFAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JmYzgyMi5odG1sI3JmYzgyMi5BZGRyZXNzTGlzdC5fX2xlbl9fWAEAAAAtdHKdRQAAWBMAAAB0aHJlYWQubG9jay5yZWxlYXNlcp5FAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZC5odG1sI3RocmVhZC5sb2NrLnJlbGVhc2VYAQAAAC10cp9FAABYHwAAAGNvZGVjcy5JbmNyZW1lbnRhbEVuY29kZXIucmVzZXRyoEUAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLkluY3JlbWVudGFsRW5jb2Rlci5yZXNldFgBAAAALXRyoUUAAFggAAAAdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0U2V0RXF1YWxyokUAAChqaQEAAGpqAQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRTZXRFcXVhbFgBAAAALXRyo0UAAFgdAAAAc3ltdGFibGUuU3ltYm9sVGFibGUuZ2V0X3R5cGVypEUAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3ltdGFibGUuaHRtbCNzeW10YWJsZS5TeW1ib2xUYWJsZS5nZXRfdHlwZVgBAAAALXRypUUAAFghAAAAbG9nZ2luZy5oYW5kbGVycy5TTVRQSGFuZGxlci5lbWl0cqZFAAAoamkBAABqagEAAFhZAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLlNNVFBIYW5kbGVyLmVtaXRYAQAAAC10cqdFAABYKgAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50VHJlZS5maW5kdGV4dHKoRQAAKGppAQAAamoBAABYZwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudFRyZWUuZmluZHRleHRYAQAAAC10cqlFAABYIQAAAG9zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2UucG9zdHKqRQAAKGppAQAAamoBAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vc3NhdWRpb2Rldi5odG1sI29zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2UucG9zdFgBAAAALXRyq0UAAFgaAAAAc3VuYXUuQVVfcmVhZC5nZXRmcmFtZXJhdGVyrEUAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VuYXUuaHRtbCNzdW5hdS5BVV9yZWFkLmdldGZyYW1lcmF0ZVgBAAAALXRyrUUAAFgUAAAAZGVjaW1hbC5EZWNpbWFsLnNxcnRyrkUAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5zcXJ0WAEAAAAtdHKvRQAAWBwAAAB4bWwuZG9tLkVsZW1lbnQuc2V0QXR0cmlidXRlcrBFAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkVsZW1lbnQuc2V0QXR0cmlidXRlWAEAAAAtdHKxRQAAWBcAAABic2RkYi5ic2RkYm9iamVjdC5jbG9zZXKyRQAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ic2RkYi5odG1sI2JzZGRiLmJzZGRib2JqZWN0LmNsb3NlWAEAAAAtdHKzRQAAWBAAAABwb3BsaWIuUE9QMy5saXN0crRFAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BvcGxpYi5odG1sI3BvcGxpYi5QT1AzLmxpc3RYAQAAAC10crVFAABYGQAAAHR0ay5UcmVldmlldy5zZXRfY2hpbGRyZW5ytkUAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLlRyZWV2aWV3LnNldF9jaGlsZHJlblgBAAAALXRyt0UAAFggAAAAb3B0cGFyc2UuT3B0aW9uUGFyc2VyLmFkZF9vcHRpb25yuEUAAChqaQEAAGpqAQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS5PcHRpb25QYXJzZXIuYWRkX29wdGlvblgBAAAALXRyuUUAAFgsAAAAdXJsbGliMi5IVFRQUmVkaXJlY3RIYW5kbGVyLnJlZGlyZWN0X3JlcXVlc3RyukUAAChqaQEAAGpqAQAAWFsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuSFRUUFJlZGlyZWN0SGFuZGxlci5yZWRpcmVjdF9yZXF1ZXN0WAEAAAAtdHK7RQAAWCMAAABkaWZmbGliLlNlcXVlbmNlTWF0Y2hlci5xdWlja19yYXRpb3K8RQAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaWZmbGliLmh0bWwjZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIucXVpY2tfcmF0aW9YAQAAAC10cr1FAABYEwAAAGltYXBsaWIuSU1BUDQueGF0b21yvkUAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQueGF0b21YAQAAAC10cr9FAABYIQAAAGxvZ2dpbmcuaGFuZGxlcnMuSFRUUEhhbmRsZXIuZW1pdHLARQAAKGppAQAAamoBAABYWQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5IVFRQSGFuZGxlci5lbWl0WAEAAAAtdHLBRQAAWBIAAABtYWlsYm94Lk1ILmRpc2NhcmRywkUAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTUguZGlzY2FyZFgBAAAALXRyw0UAAFghAAAASFRNTFBhcnNlci5IVE1MUGFyc2VyLmhhbmRsZV9kYXRhcsRFAAAoamkBAABqagEAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0bWxwYXJzZXIuaHRtbCNIVE1MUGFyc2VyLkhUTUxQYXJzZXIuaGFuZGxlX2RhdGFYAQAAAC10csVFAABYFAAAAG1haWxib3guTWFpbGJveC5sb2NrcsZFAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxib3gubG9ja1gBAAAALXRyx0UAAFgSAAAAbXNpbGliLkRpYWxvZy50ZXh0cshFAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5EaWFsb2cudGV4dFgBAAAALXRyyUUAAFgRAAAAbXNpbGliLkNBQi5hcHBlbmRyykUAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLkNBQi5hcHBlbmRYAQAAAC10cstFAABYHAAAAHdhdmUuV2F2ZV93cml0ZS5zZXRzYW1wd2lkdGhyzEUAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2F2ZS5odG1sI3dhdmUuV2F2ZV93cml0ZS5zZXRzYW1wd2lkdGhYAQAAAC10cs1FAABYGQAAAHRlbG5ldGxpYi5UZWxuZXQuaW50ZXJhY3RyzkUAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGVsbmV0bGliLmh0bWwjdGVsbmV0bGliLlRlbG5ldC5pbnRlcmFjdFgBAAAALXRyz0UAAFgcAAAAd2F2ZS5XYXZlX3dyaXRlLnNldG5jaGFubmVsc3LQRQAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93YXZlLmh0bWwjd2F2ZS5XYXZlX3dyaXRlLnNldG5jaGFubmVsc1gBAAAALXRy0UUAAFgbAAAAbXVsdGlwcm9jZXNzaW5nLlF1ZXVlLnFzaXplctJFAAAoamkBAABqagEAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5RdWV1ZS5xc2l6ZVgBAAAALXRy00UAAFgYAAAAbXNpbGliLkRpYWxvZy5wdXNoYnV0dG9uctRFAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5EaWFsb2cucHVzaGJ1dHRvblgBAAAALXRy1UUAAFgVAAAAY3Vyc2VzLndpbmRvdy5hdHRyc2V0ctZFAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cuYXR0cnNldFgBAAAALXRy10UAAFgvAAAAZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuY3JlYXRlX3N0YXRpY19saWJy2EUAAChqaQEAAGpqAQAAWF8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5jcmVhdGVfc3RhdGljX2xpYlgBAAAALXRy2UUAAFgaAAAASFRNTFBhcnNlci5IVE1MUGFyc2VyLmZlZWRy2kUAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHRtbHBhcnNlci5odG1sI0hUTUxQYXJzZXIuSFRNTFBhcnNlci5mZWVkWAEAAAAtdHLbRQAAWBgAAABjdXJzZXMud2luZG93LnVudG91Y2h3aW5y3EUAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy51bnRvdWNod2luWAEAAAAtdHLdRQAAWCUAAAB3ZWFrcmVmLldlYWtLZXlEaWN0aW9uYXJ5Lml0ZXJrZXlyZWZzct5FAAAoamkBAABqagEAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dlYWtyZWYuaHRtbCN3ZWFrcmVmLldlYWtLZXlEaWN0aW9uYXJ5Lml0ZXJrZXlyZWZzWAEAAAAtdHLfRQAAWB8AAAB1cmxsaWIyLlJlcXVlc3QuaXNfdW52ZXJpZmlhYmxlcuBFAAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLlJlcXVlc3QuaXNfdW52ZXJpZmlhYmxlWAEAAAAtdHLhRQAAWCYAAAB4bWwuc2F4LnhtbHJlYWRlci5YTUxSZWFkZXIuZ2V0RmVhdHVyZXLiRQAAKGppAQAAamoBAABYXAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlci5nZXRGZWF0dXJlWAEAAAAtdHLjRQAAWBwAAABlbWFpbC5tZXNzYWdlLk1lc3NhZ2UudmFsdWVzcuRFAAAoamkBAABqagEAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2UudmFsdWVzWAEAAAAtdHLlRQAAWBwAAAB1bml0dGVzdC5UZXN0UmVzdWx0LmFkZEVycm9ycuZFAAAoamkBAABqagEAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdFJlc3VsdC5hZGRFcnJvclgBAAAALXRy50UAAFgfAAAAd3NnaXJlZi5oZWFkZXJzLkhlYWRlcnMuZ2V0X2FsbHLoRQAAKGppAQAAamoBAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi5oZWFkZXJzLkhlYWRlcnMuZ2V0X2FsbFgBAAAALXRy6UUAAFghAAAAY2FsZW5kYXIuVGV4dENhbGVuZGFyLmZvcm1hdG1vbnRocupFAAAoamkBAABqagEAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhbGVuZGFyLmh0bWwjY2FsZW5kYXIuVGV4dENhbGVuZGFyLmZvcm1hdG1vbnRoWAEAAAAtdHLrRQAAWAsAAABzdHIuaXNkaWdpdHLsRQAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0ci5pc2RpZ2l0WAEAAAAtdHLtRQAAWBMAAABzbXRwbGliLlNNVFAudmVyaWZ5cu5FAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NtdHBsaWIuaHRtbCNzbXRwbGliLlNNVFAudmVyaWZ5WAEAAAAtdHLvRQAAWBQAAABpYy5JQy5zZXR0eXBlY3JlYXRvcnLwRQAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pYy5odG1sI2ljLklDLnNldHR5cGVjcmVhdG9yWAEAAAAtdHLxRQAAWC0AAABkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5hZGRfaW5jbHVkZV9kaXJy8kUAAChqaQEAAGpqAQAAWF0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5hZGRfaW5jbHVkZV9kaXJYAQAAAC10cvNFAABYEQAAAHNoZWx2ZS5TaGVsZi5zeW5jcvRFAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NoZWx2ZS5odG1sI3NoZWx2ZS5TaGVsZi5zeW5jWAEAAAAtdHL1RQAAWB8AAABtYWlsYm94Lk1ITWVzc2FnZS5nZXRfc2VxdWVuY2VzcvZFAAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1ITWVzc2FnZS5nZXRfc2VxdWVuY2VzWAEAAAAtdHL3RQAAWBUAAABjdXJzZXMud2luZG93LmVuY2xvc2Vy+EUAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5lbmNsb3NlWAEAAAAtdHL5RQAAWCIAAAB1cmxsaWIyLkNhY2hlRlRQSGFuZGxlci5zZXRUaW1lb3V0cvpFAAAoamkBAABqagEAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLkNhY2hlRlRQSGFuZGxlci5zZXRUaW1lb3V0WAEAAAAtdHL7RQAAWCgAAABzcWxpdGUzLkNvbm5lY3Rpb24uZW5hYmxlX2xvYWRfZXh0ZW5zaW9ucvxFAAAoamkBAABqagEAAFhXAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLkNvbm5lY3Rpb24uZW5hYmxlX2xvYWRfZXh0ZW5zaW9uWAEAAAAtdHL9RQAAWBYAAABiejIuQloyRmlsZS53cml0ZWxpbmVzcv5FAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2J6Mi5odG1sI2J6Mi5CWjJGaWxlLndyaXRlbGluZXNYAQAAAC10cv9FAABYFgAAAHNvY2tldC5zb2NrZXQucmVjdmZyb21yAEYAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LnNvY2tldC5yZWN2ZnJvbVgBAAAALXRyAUYAAFhHAAAAU2ltcGxlWE1MUlBDU2VydmVyLkNHSVhNTFJQQ1JlcXVlc3RIYW5kbGVyLnJlZ2lzdGVyX211bHRpY2FsbF9mdW5jdGlvbnNyAkYAAChqaQEAAGpqAQAAWIEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2ltcGxleG1scnBjc2VydmVyLmh0bWwjU2ltcGxlWE1MUlBDU2VydmVyLkNHSVhNTFJQQ1JlcXVlc3RIYW5kbGVyLnJlZ2lzdGVyX211bHRpY2FsbF9mdW5jdGlvbnNYAQAAAC10cgNGAABYEgAAAGRiaGFzaC5kYmhhc2gubGFzdHIERgAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYmhhc2guaHRtbCNkYmhhc2guZGJoYXNoLmxhc3RYAQAAAC10cgVGAABYEgAAAG5udHBsaWIuTk5UUC54cGF0aHIGRgAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ubnRwbGliLmh0bWwjbm50cGxpYi5OTlRQLnhwYXRoWAEAAAAtdHIHRgAAWCsAAAB4bWwuc2F4LnhtbHJlYWRlci5JbnB1dFNvdXJjZS5nZXRCeXRlU3RyZWFtcghGAAAoamkBAABqagEAAFhhAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuSW5wdXRTb3VyY2UuZ2V0Qnl0ZVN0cmVhbVgBAAAALXRyCUYAAFggAAAAY2FsZW5kYXIuVGV4dENhbGVuZGFyLmZvcm1hdHllYXJyCkYAAChqaQEAAGpqAQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci5UZXh0Q2FsZW5kYXIuZm9ybWF0eWVhclgBAAAALXRyC0YAAFgYAAAAZGF0ZXRpbWUudGltZS5fX2Zvcm1hdF9fcgxGAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUudGltZS5fX2Zvcm1hdF9fWAEAAAAtdHINRgAAWA4AAABobWFjLkhNQUMuY29weXIORgAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9obWFjLmh0bWwjaG1hYy5ITUFDLmNvcHlYAQAAAC10cg9GAABYCQAAAGZpbGUudGVsbHIQRgAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2ZpbGUudGVsbFgBAAAALXRyEUYAAFgqAAAAeG1sLnNheC5oYW5kbGVyLkNvbnRlbnRIYW5kbGVyLmVuZERvY3VtZW50chJGAAAoamkBAABqagEAAFhhAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5odG1sI3htbC5zYXguaGFuZGxlci5Db250ZW50SGFuZGxlci5lbmREb2N1bWVudFgBAAAALXRyE0YAAFgOAAAAb2JqZWN0Ll9fc2V0X19yFEYAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19zZXRfX1gBAAAALXRyFUYAAFgaAAAAZGF0ZXRpbWUuZGF0ZXRpbWUuc3RyZnRpbWVyFkYAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS5zdHJmdGltZVgBAAAALXRyF0YAAFgPAAAAbW1hcC5tbWFwLmNsb3NlchhGAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21tYXAuaHRtbCNtbWFwLm1tYXAuY2xvc2VYAQAAAC10chlGAABYHgAAAGRlY2ltYWwuQ29udGV4dC5yZW1haW5kZXJfbmVhcnIaRgAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LnJlbWFpbmRlcl9uZWFyWAEAAAAtdHIbRgAAWBkAAAB4bWxycGNsaWIuRGF0ZVRpbWUuZW5jb2RlchxGAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbHJwY2xpYi5odG1sI3htbHJwY2xpYi5EYXRlVGltZS5lbmNvZGVYAQAAAC10ch1GAABYGwAAAG1obGliLkZvbGRlci5yZWZpbGVtZXNzYWdlc3IeRgAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taGxpYi5odG1sI21obGliLkZvbGRlci5yZWZpbGVtZXNzYWdlc1gBAAAALXRyH0YAAFgYAAAAbG9nZ2luZy5Gb3JtYXR0ZXIuZm9ybWF0ciBGAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkZvcm1hdHRlci5mb3JtYXRYAQAAAC10ciFGAABYIwAAAHNnbWxsaWIuU0dNTFBhcnNlci5oYW5kbGVfZW50aXR5cmVmciJGAAAoamkBAABqagEAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NnbWxsaWIuaHRtbCNzZ21sbGliLlNHTUxQYXJzZXIuaGFuZGxlX2VudGl0eXJlZlgBAAAALXRyI0YAAFgaAAAAbWFpbGJveC5NYWlsZGlyLmFkZF9mb2xkZXJyJEYAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGRpci5hZGRfZm9sZGVyWAEAAAAtdHIlRgAAWBEAAABiejIuQloyRmlsZS53cml0ZXImRgAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iejIuaHRtbCNiejIuQloyRmlsZS53cml0ZVgBAAAALXRyJ0YAAFgoAAAAbG9nZ2luZy5oYW5kbGVycy5XYXRjaGVkRmlsZUhhbmRsZXIuZW1pdHIoRgAAKGppAQAAamoBAABYYAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5XYXRjaGVkRmlsZUhhbmRsZXIuZW1pdFgBAAAALXRyKUYAAFghAAAAYXN5bmNvcmUuZGlzcGF0Y2hlci5jcmVhdGVfc29ja2V0cipGAAAoamkBAABqagEAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzeW5jb3JlLmh0bWwjYXN5bmNvcmUuZGlzcGF0Y2hlci5jcmVhdGVfc29ja2V0WAEAAAAtdHIrRgAAWCEAAABkZWNpbWFsLkRlY2ltYWwuY29tcGFyZV90b3RhbF9tYWdyLEYAAChqaQEAAGpqAQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5jb21wYXJlX3RvdGFsX21hZ1gBAAAALXRyLUYAAFgSAAAAcG9wZW4yLlBvcGVuMy5wb2xsci5GAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BvcGVuMi5odG1sI3BvcGVuMi5Qb3BlbjMucG9sbFgBAAAALXRyL0YAAFgYAAAAcG9zaXhmaWxlLnBvc2l4ZmlsZS5sb2NrcjBGAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Bvc2l4ZmlsZS5odG1sI3Bvc2l4ZmlsZS5wb3NpeGZpbGUubG9ja1gBAAAALXRyMUYAAFgVAAAAY3Vyc2VzLndpbmRvdy5ub2RlbGF5cjJGAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cubm9kZWxheVgBAAAALXRyM0YAAFgfAAAAdGVsbmV0bGliLlRlbG5ldC5yZWFkX3ZlcnlfbGF6eXI0RgAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZWxuZXRsaWIuaHRtbCN0ZWxuZXRsaWIuVGVsbmV0LnJlYWRfdmVyeV9sYXp5WAEAAAAtdHI1RgAAWBAAAABtbWFwLm1tYXAucmVzaXplcjZGAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21tYXAuaHRtbCNtbWFwLm1tYXAucmVzaXplWAEAAAAtdHI3RgAAWCQAAABvc3NhdWRpb2Rldi5vc3NfYXVkaW9fZGV2aWNlLmJ1ZnNpemVyOEYAAChqaQEAAGpqAQAAWFcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3NzYXVkaW9kZXYuaHRtbCNvc3NhdWRpb2Rldi5vc3NfYXVkaW9fZGV2aWNlLmJ1ZnNpemVYAQAAAC10cjlGAABYFQAAAHVuaXR0ZXN0LlRlc3RDYXNlLnJ1bnI6RgAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLnJ1blgBAAAALXRyO0YAAFgSAAAAaW8uUmF3SU9CYXNlLndyaXRlcjxGAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uUmF3SU9CYXNlLndyaXRlWAEAAAAtdHI9RgAAWCQAAAB4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC5yZW1vdmVyPkYAAChqaQEAAGpqAQAAWGEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQucmVtb3ZlWAEAAAAtdHI/RgAAWBYAAABkZWNpbWFsLkRlY2ltYWwuc2NhbGVickBGAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwuc2NhbGViWAEAAAAtdHJBRgAAWCAAAABtYWlsYm94Lk1haWxkaXJNZXNzYWdlLmdldF9mbGFnc3JCRgAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsZGlyTWVzc2FnZS5nZXRfZmxhZ3NYAQAAAC10ckNGAABYGAAAAG11bHRpZmlsZS5NdWx0aUZpbGUucHVzaHJERgAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aWZpbGUuaHRtbCNtdWx0aWZpbGUuTXVsdGlGaWxlLnB1c2hYAQAAAC10ckVGAABYFQAAAHRlbG5ldGxpYi5UZWxuZXQub3BlbnJGRgAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZWxuZXRsaWIuaHRtbCN0ZWxuZXRsaWIuVGVsbmV0Lm9wZW5YAQAAAC10ckdGAABYLQAAAHVybGxpYjIuUHJveHlEaWdlc3RBdXRoSGFuZGxlci5odHRwX2Vycm9yXzQwN3JIRgAAKGppAQAAamoBAABYXAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5Qcm94eURpZ2VzdEF1dGhIYW5kbGVyLmh0dHBfZXJyb3JfNDA3WAEAAAAtdHJJRgAAWBkAAABudW1iZXJzLkNvbXBsZXguY29uanVnYXRlckpGAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L251bWJlcnMuaHRtbCNudW1iZXJzLkNvbXBsZXguY29uanVnYXRlWAEAAAAtdHJLRgAAWBkAAABjb29raWVsaWIuQ29va2llSmFyLmNsZWFyckxGAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5Db29raWVKYXIuY2xlYXJYAQAAAC10ck1GAABYHgAAAGNvb2tpZWxpYi5Db29raWVKYXIuc2V0X3BvbGljeXJORgAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuQ29va2llSmFyLnNldF9wb2xpY3lYAQAAAC10ck9GAABYGwAAAGRlY2ltYWwuQ29udGV4dC5jbGVhcl9mbGFnc3JQRgAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmNsZWFyX2ZsYWdzWAEAAAAtdHJRRgAAWBcAAABwc3RhdHMuU3RhdHMuc29ydF9zdGF0c3JSRgAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wcm9maWxlLmh0bWwjcHN0YXRzLlN0YXRzLnNvcnRfc3RhdHNYAQAAAC10clNGAABYHwAAAGZyYWN0aW9ucy5GcmFjdGlvbi5mcm9tX2RlY2ltYWxyVEYAAChqaQEAAGpqAQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnJhY3Rpb25zLmh0bWwjZnJhY3Rpb25zLkZyYWN0aW9uLmZyb21fZGVjaW1hbFgBAAAALXRyVUYAAFgZAAAAZGVjaW1hbC5Db250ZXh0LmlzX3NpZ25lZHJWRgAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmlzX3NpZ25lZFgBAAAALXRyV0YAAFgqAAAAdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0RGljdENvbnRhaW5zU3Vic2V0clhGAAAoamkBAABqagEAAFhaAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0RGljdENvbnRhaW5zU3Vic2V0WAEAAAAtdHJZRgAAWCAAAAB4bWwuZG9tLkRvY3VtZW50LmNyZWF0ZUF0dHJpYnV0ZXJaRgAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Eb2N1bWVudC5jcmVhdGVBdHRyaWJ1dGVYAQAAAC10cltGAABYIAAAAGNvZGVjcy5JbmNyZW1lbnRhbERlY29kZXIuZGVjb2RlclxGAAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5JbmNyZW1lbnRhbERlY29kZXIuZGVjb2RlWAEAAAAtdHJdRgAAWCgAAAB1cmxsaWIuRmFuY3lVUkxvcGVuZXIucHJvbXB0X3VzZXJfcGFzc3dkcl5GAAAoamkBAABqagEAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYi5odG1sI3VybGxpYi5GYW5jeVVSTG9wZW5lci5wcm9tcHRfdXNlcl9wYXNzd2RYAQAAAC10cl9GAABYMwAAAHdzZ2lyZWYuc2ltcGxlX3NlcnZlci5XU0dJUmVxdWVzdEhhbmRsZXIuZ2V0X3N0ZGVycnJgRgAAKGppAQAAamoBAABYYgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi5zaW1wbGVfc2VydmVyLldTR0lSZXF1ZXN0SGFuZGxlci5nZXRfc3RkZXJyWAEAAAAtdHJhRgAAWB4AAABkZWNpbWFsLkRlY2ltYWwuY29tcGFyZV9zaWduYWxyYkYAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5jb21wYXJlX3NpZ25hbFgBAAAALXRyY0YAAFgeAAAAemlwaW1wb3J0LnppcGltcG9ydGVyLmdldF9jb2RlcmRGAAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGltcG9ydC5odG1sI3ppcGltcG9ydC56aXBpbXBvcnRlci5nZXRfY29kZVgBAAAALXRyZUYAAFgTAAAAZmwuZm9ybS5yZWRyYXdfZm9ybXJmRgAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbC5odG1sI2ZsLmZvcm0ucmVkcmF3X2Zvcm1YAQAAAC10cmdGAABYHQAAAEVhc3lEaWFsb2dzLlByb2dyZXNzQmFyLmxhYmVscmhGAAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Vhc3lkaWFsb2dzLmh0bWwjRWFzeURpYWxvZ3MuUHJvZ3Jlc3NCYXIubGFiZWxYAQAAAC10cmlGAABYFgAAAGN1cnNlcy53aW5kb3cucmVkcmF3bG5yakYAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5yZWRyYXdsblgBAAAALXRya0YAAFghAAAAZ2V0dGV4dC5HTlVUcmFuc2xhdGlvbnMudW5nZXR0ZXh0cmxGAAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dldHRleHQuaHRtbCNnZXR0ZXh0LkdOVVRyYW5zbGF0aW9ucy51bmdldHRleHRYAQAAAC10cm1GAABYIgAAAENvbmZpZ1BhcnNlci5SYXdDb25maWdQYXJzZXIud3JpdGVybkYAAChqaQEAAGpqAQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjQ29uZmlnUGFyc2VyLlJhd0NvbmZpZ1BhcnNlci53cml0ZVgBAAAALXRyb0YAAFgaAAAAeG1sLmRvbS5taW5pZG9tLk5vZGUudG94bWxycEYAAChqaQEAAGpqAQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5taW5pZG9tLmh0bWwjeG1sLmRvbS5taW5pZG9tLk5vZGUudG94bWxYAQAAAC10cnFGAABYFQAAAHRocmVhZGluZy5FdmVudC5jbGVhcnJyRgAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuRXZlbnQuY2xlYXJYAQAAAC10cnNGAABYEgAAAGlvLklPQmFzZS5zZWVrYWJsZXJ0RgAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pby5odG1sI2lvLklPQmFzZS5zZWVrYWJsZVgBAAAALXRydUYAAFgpAAAAZW1haWwubWVzc2FnZS5NZXNzYWdlLmdldF9jb250ZW50X3N1YnR5cGVydkYAAChqaQEAAGpqAQAAWF4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS5nZXRfY29udGVudF9zdWJ0eXBlWAEAAAAtdHJ3RgAAWC0AAAB4bWwuc2F4LnhtbHJlYWRlci5BdHRyaWJ1dGVzTlMuZ2V0UU5hbWVCeU5hbWVyeEYAAChqaQEAAGpqAQAAWGMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCN4bWwuc2F4LnhtbHJlYWRlci5BdHRyaWJ1dGVzTlMuZ2V0UU5hbWVCeU5hbWVYAQAAAC10cnlGAABYJAAAAGNvbXBpbGVyLnZpc2l0b3IuQVNUVmlzaXRvci5kaXNwYXRjaHJ6RgAAKGppAQAAamoBAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb21waWxlci5odG1sI2NvbXBpbGVyLnZpc2l0b3IuQVNUVmlzaXRvci5kaXNwYXRjaFgBAAAALXRye0YAAFgOAAAAaW8uSU9CYXNlLnRlbGxyfEYAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW8uaHRtbCNpby5JT0Jhc2UudGVsbFgBAAAALXRyfUYAAFgcAAAAZm9ybWF0dGVyLmZvcm1hdHRlci5wb3BfZm9udHJ+RgAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIuZm9ybWF0dGVyLnBvcF9mb250WAEAAAAtdHJ/RgAAWBgAAABzaGxleC5zaGxleC5lcnJvcl9sZWFkZXJygEYAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2hsZXguaHRtbCNzaGxleC5zaGxleC5lcnJvcl9sZWFkZXJYAQAAAC10coFGAABYKgAAAG1zaWxpYi5TdW1tYXJ5SW5mb3JtYXRpb24uR2V0UHJvcGVydHlDb3VudHKCRgAAKGppAQAAamoBAABYWAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuU3VtbWFyeUluZm9ybWF0aW9uLkdldFByb3BlcnR5Q291bnRYAQAAAC10coNGAABYGgAAAHhkcmxpYi5QYWNrZXIucGFja19mc3RyaW5ncoRGAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3hkcmxpYi5odG1sI3hkcmxpYi5QYWNrZXIucGFja19mc3RyaW5nWAEAAAAtdHKFRgAAWCYAAABlbWFpbC5tZXNzYWdlLk1lc3NhZ2Uuc2V0X2RlZmF1bHRfdHlwZXKGRgAAKGppAQAAamoBAABYWwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5NZXNzYWdlLnNldF9kZWZhdWx0X3R5cGVYAQAAAC10codGAABYGQAAAGNvbGxlY3Rpb25zLmRlcXVlLnJldmVyc2VyiEYAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5kZXF1ZS5yZXZlcnNlWAEAAAAtdHKJRgAAWBwAAABlbWFpbC5wYXJzZXIuUGFyc2VyLnBhcnNlc3RycopGAAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLnBhcnNlci5odG1sI2VtYWlsLnBhcnNlci5QYXJzZXIucGFyc2VzdHJYAQAAAC10cotGAABYKgAAAHhtbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5EZWZhdWx0SGFuZGxlcnKMRgAAKGppAQAAamoBAABYWQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkRlZmF1bHRIYW5kbGVyWAEAAAAtdHKNRgAAWBkAAABkZWNpbWFsLkRlY2ltYWwuY2Fub25pY2Fsco5GAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwuY2Fub25pY2FsWAEAAAAtdHKPRgAAWBcAAABzdHJpbmcuRm9ybWF0dGVyLmZvcm1hdHKQRgAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNzdHJpbmcuRm9ybWF0dGVyLmZvcm1hdFgBAAAALXRykUYAAFgRAAAAbXNpbGliLkNBQi5jb21taXRykkYAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLkNBQi5jb21taXRYAQAAAC10cpNGAABYKgAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50VHJlZS5fc2V0cm9vdHKURgAAKGppAQAAamoBAABYZwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudFRyZWUuX3NldHJvb3RYAQAAAC10cpVGAABYHwAAAE1pbWVXcml0ZXIuTWltZVdyaXRlci5hZGRoZWFkZXJylkYAAChqaQEAAGpqAQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWltZXdyaXRlci5odG1sI01pbWVXcml0ZXIuTWltZVdyaXRlci5hZGRoZWFkZXJYAQAAAC10cpdGAABYFQAAAGFpZmMuYWlmYy5nZXRjb21wdHlwZXKYRgAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9haWZjLmh0bWwjYWlmYy5haWZjLmdldGNvbXB0eXBlWAEAAAAtdHKZRgAAWBwAAABjb29raWVsaWIuRmlsZUNvb2tpZUphci5zYXZlcppGAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5GaWxlQ29va2llSmFyLnNhdmVYAQAAAC10cptGAABYGAAAAHNvY2tldC5zb2NrZXQuZ2V0dGltZW91dHKcRgAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuc29ja2V0LmdldHRpbWVvdXRYAQAAAC10cp1GAABYJwAAAHhtbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlci5zZXRQcm9wZXJ0eXKeRgAAKGppAQAAamoBAABYXQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlci5zZXRQcm9wZXJ0eVgBAAAALXRyn0YAAFgpAAAAeG1sLnNheC54bWxyZWFkZXIuSW5jcmVtZW50YWxQYXJzZXIucmVzZXRyoEYAAChqaQEAAGpqAQAAWF8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCN4bWwuc2F4LnhtbHJlYWRlci5JbmNyZW1lbnRhbFBhcnNlci5yZXNldFgBAAAALXRyoUYAAFgcAAAAdXJsbGliMi5PcGVuZXJEaXJlY3Rvci5lcnJvcnKiRgAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5PcGVuZXJEaXJlY3Rvci5lcnJvclgBAAAALXRyo0YAAFgRAAAAY3N2LlNuaWZmZXIuc25pZmZypEYAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3N2Lmh0bWwjY3N2LlNuaWZmZXIuc25pZmZYAQAAAC10cqVGAABYHQAAAHN5bXRhYmxlLkZ1bmN0aW9uLmdldF9nbG9iYWxzcqZGAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5bXRhYmxlLmh0bWwjc3ltdGFibGUuRnVuY3Rpb24uZ2V0X2dsb2JhbHNYAQAAAC10cqdGAABYGwAAAHhtbC5kb20ubWluaWRvbS5Ob2RlLnVubGlua3KoRgAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLm1pbmlkb20uaHRtbCN4bWwuZG9tLm1pbmlkb20uTm9kZS51bmxpbmtYAQAAAC10cqlGAABYEgAAAHR0ay5UcmVldmlldy5pbmRleHKqRgAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuVHJlZXZpZXcuaW5kZXhYAQAAAC10cqtGAABYFgAAAG9iamVjdC5fX2dldGluaXRhcmdzX19yrEYAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGlja2xlLmh0bWwjb2JqZWN0Ll9fZ2V0aW5pdGFyZ3NfX1gBAAAALXRyrUYAAFgfAAAAZW1haWwuZ2VuZXJhdG9yLkdlbmVyYXRvci53cml0ZXKuRgAAKGppAQAAamoBAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5nZW5lcmF0b3IuaHRtbCNlbWFpbC5nZW5lcmF0b3IuR2VuZXJhdG9yLndyaXRlWAEAAAAtdHKvRgAAWBkAAAB4ZHJsaWIuUGFja2VyLnBhY2tfZmFycmF5crBGAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3hkcmxpYi5odG1sI3hkcmxpYi5QYWNrZXIucGFja19mYXJyYXlYAQAAAC10crFGAABYDwAAAGZpbGUueHJlYWRsaW5lc3KyRgAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2ZpbGUueHJlYWRsaW5lc1gBAAAALXRys0YAAFgVAAAAZnRwbGliLkZUUC5yZXRyYmluYXJ5crRGAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z0cGxpYi5odG1sI2Z0cGxpYi5GVFAucmV0cmJpbmFyeVgBAAAALXRytUYAAFgaAAAAcHN0YXRzLlN0YXRzLnByaW50X2NhbGxlZXNytkYAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHJvZmlsZS5odG1sI3BzdGF0cy5TdGF0cy5wcmludF9jYWxsZWVzWAEAAAAtdHK3RgAAWBQAAABzc2wuU1NMU29ja2V0LnVud3JhcHK4RgAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMU29ja2V0LnVud3JhcFgBAAAALXRyuUYAAFgRAAAAbm50cGxpYi5OTlRQLnhoZHJyukYAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbm50cGxpYi5odG1sI25udHBsaWIuTk5UUC54aGRyWAEAAAAtdHK7RgAAWC8AAABtdWx0aXByb2Nlc3NpbmcucG9vbC5tdWx0aXByb2Nlc3NpbmcuUG9vbC5jbG9zZXK8RgAAKGppAQAAamoBAABYZgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcucG9vbC5tdWx0aXByb2Nlc3NpbmcuUG9vbC5jbG9zZVgBAAAALXRyvUYAAFgLAAAAcGRiLlBkYi5ydW5yvkYAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGRiLmh0bWwjcGRiLlBkYi5ydW5YAQAAAC10cr9GAABYGQAAAHhkcmxpYi5QYWNrZXIucGFja19vcGFxdWVywEYAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveGRybGliLmh0bWwjeGRybGliLlBhY2tlci5wYWNrX29wYXF1ZVgBAAAALXRywUYAAFgbAAAAdW5pdHRlc3QuVGVzdFJlc3VsdC5hZGRTa2lwcsJGAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdFJlc3VsdC5hZGRTa2lwWAEAAAAtdHLDRgAAWA4AAABtbWFwLm1tYXAucmVhZHLERgAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tbWFwLmh0bWwjbW1hcC5tbWFwLnJlYWRYAQAAAC10csVGAABYFwAAAGNvbGxlY3Rpb25zLmRlcXVlLmNvdW50csZGAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuZGVxdWUuY291bnRYAQAAAC10csdGAABYHwAAAG9wdHBhcnNlLk9wdGlvblBhcnNlci5nZXRfdXNhZ2VyyEYAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS5PcHRpb25QYXJzZXIuZ2V0X3VzYWdlWAEAAAAtdHLJRgAAWDEAAABkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIucmVwb3J0X3VuZXhwZWN0ZWRfZXhjZXB0aW9ucspGAAAoamkBAABqagEAAFhgAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIucmVwb3J0X3VuZXhwZWN0ZWRfZXhjZXB0aW9uWAEAAAAtdHLLRgAAWBAAAABvYmplY3QuX19lbnRlcl9fcsxGAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fZW50ZXJfX1gBAAAALXRyzUYAAFgiAAAAYXN5bmNvcmUuZGlzcGF0Y2hlci5oYW5kbGVfY29ubmVjdHLORgAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hc3luY29yZS5odG1sI2FzeW5jb3JlLmRpc3BhdGNoZXIuaGFuZGxlX2Nvbm5lY3RYAQAAAC10cs9GAABYEgAAAHJleGVjLlJFeGVjLnJfZXhlY3LQRgAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXhlYy5odG1sI3JleGVjLlJFeGVjLnJfZXhlY1gBAAAALXRy0UYAAFgVAAAAb2JqZWN0Ll9fZ2V0bmV3YXJnc19fctJGAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BpY2tsZS5odG1sI29iamVjdC5fX2dldG5ld2FyZ3NfX1gBAAAALXRy00YAAFgWAAAAZGF0ZXRpbWUuZGF0ZXRpbWUuZGF0ZXLURgAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGV0aW1lLmRhdGVYAQAAAC10ctVGAABYEAAAAHBhcnNlci5TVC50b2xpc3Ry1kYAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGFyc2VyLmh0bWwjcGFyc2VyLlNULnRvbGlzdFgBAAAALXRy10YAAFgXAAAAeG1scnBjbGliLkJpbmFyeS5kZWNvZGVy2EYAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1scnBjbGliLmh0bWwjeG1scnBjbGliLkJpbmFyeS5kZWNvZGVYAQAAAC10ctlGAABYGwAAAGZvcm1hdHRlci53cml0ZXIubmV3X3N0eWxlc3LaRgAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIud3JpdGVyLm5ld19zdHlsZXNYAQAAAC10cttGAABYGAAAAGRlY2ltYWwuRGVjaW1hbC5hZGp1c3RlZHLcRgAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLmFkanVzdGVkWAEAAAAtdHLdRgAAWBcAAABqc29uLkpTT05EZWNvZGVyLmRlY29kZXLeRgAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9qc29uLmh0bWwjanNvbi5KU09ORGVjb2Rlci5kZWNvZGVYAQAAAC10ct9GAABYCgAAAGZpbGUuY2xvc2Vy4EYAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNmaWxlLmNsb3NlWAEAAAAtdHLhRgAAWCYAAABvcHRwYXJzZS5PcHRpb25QYXJzZXIuZ2V0X29wdGlvbl9ncm91cHLiRgAAKGppAQAAamoBAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLk9wdGlvblBhcnNlci5nZXRfb3B0aW9uX2dyb3VwWAEAAAAtdHLjRgAAWCEAAABIVE1MUGFyc2VyLkhUTUxQYXJzZXIuaGFuZGxlX2RlY2xy5EYAAChqaQEAAGpqAQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHRtbHBhcnNlci5odG1sI0hUTUxQYXJzZXIuSFRNTFBhcnNlci5oYW5kbGVfZGVjbFgBAAAALXRy5UYAAFgdAAAAdHRrLlRyZWV2aWV3LnNlbGVjdGlvbl9yZW1vdmVy5kYAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLlRyZWV2aWV3LnNlbGVjdGlvbl9yZW1vdmVYAQAAAC10cudGAABYDgAAAGNtZC5DbWQub25lY21kcuhGAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NtZC5odG1sI2NtZC5DbWQub25lY21kWAEAAAAtdHLpRgAAWBwAAAB0dGsuVHJlZXZpZXcuaWRlbnRpZnlfY29sdW1ucupGAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5UcmVldmlldy5pZGVudGlmeV9jb2x1bW5YAQAAAC10cutGAABYGQAAAGltYXBsaWIuSU1BUDQudW5zdWJzY3JpYmVy7EYAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQudW5zdWJzY3JpYmVYAQAAAC10cu1GAABYIQAAAG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzLnRlcm1pbmF0ZXLuRgAAKGppAQAAamoBAABYWAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcy50ZXJtaW5hdGVYAQAAAC10cu9GAABYLAAAAGRpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmxpYnJhcnlfb3B0aW9ucvBGAAAoamkBAABqagEAAFhcAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIubGlicmFyeV9vcHRpb25YAQAAAC10cvFGAABYHAAAAG1haWxib3guTWFpbGRpci5saXN0X2ZvbGRlcnNy8kYAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGRpci5saXN0X2ZvbGRlcnNYAQAAAC10cvNGAABYHQAAAG1haWxib3guTU1ERk1lc3NhZ2Uuc2V0X2ZsYWdzcvRGAAAoamkBAABqagEAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1NREZNZXNzYWdlLnNldF9mbGFnc1gBAAAALXRy9UYAAFglAAAAeG1sLmV0cmVlLkVsZW1lbnRUcmVlLlRyZWVCdWlsZGVyLmVuZHL2RgAAKGppAQAAamoBAABYYgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuVHJlZUJ1aWxkZXIuZW5kWAEAAAAtdHL3RgAAWA4AAAByZXByLlJlcHIucmVwcnL4RgAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXByLmh0bWwjcmVwci5SZXByLnJlcHJYAQAAAC10cvlGAABYFgAAAGJkYi5CZGIudHJhY2VfZGlzcGF0Y2hy+kYAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYi50cmFjZV9kaXNwYXRjaFgBAAAALXRy+0YAAFgWAAAAYWlmYy5haWZjLnNldGZyYW1lcmF0ZXL8RgAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9haWZjLmh0bWwjYWlmYy5haWZjLnNldGZyYW1lcmF0ZVgBAAAALXRy/UYAAFgbAAAAbWFpbGJveC5NYWlsYm94Ll9fZGVsaXRlbV9fcv5GAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxib3guX19kZWxpdGVtX19YAQAAAC10cv9GAABYDwAAAG9iamVjdC5fX2luaXRfX3IARwAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2luaXRfX1gBAAAALXRyAUcAAFgTAAAAdHRrLldpZGdldC5pZGVudGlmeXICRwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuV2lkZ2V0LmlkZW50aWZ5WAEAAAAtdHIDRwAAWCoAAABkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5kZWZpbmVfbWFjcm9yBEcAAChqaQEAAGpqAQAAWFoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5kZWZpbmVfbWFjcm9YAQAAAC10cgVHAABYEAAAAGJ6Mi5CWjJGaWxlLnNlZWtyBkcAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYnoyLmh0bWwjYnoyLkJaMkZpbGUuc2Vla1gBAAAALXRyB0cAAFgcAAAAY29kZWNzLlN0cmVhbVJlYWRlci5yZWFkbGluZXIIRwAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuU3RyZWFtUmVhZGVyLnJlYWRsaW5lWAEAAAAtdHIJRwAAWBQAAABjdXJzZXMud2luZG93LnN5bmN1cHIKRwAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LnN5bmN1cFgBAAAALXRyC0cAAFgXAAAAYXJyYXkuYXJyYXkuYnVmZmVyX2luZm9yDEcAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXJyYXkuaHRtbCNhcnJheS5hcnJheS5idWZmZXJfaW5mb1gBAAAALXRyDUcAAFgLAAAAYmRiLkJkYi5ydW5yDkcAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYi5ydW5YAQAAAC10cg9HAABYFQAAAGFpZmMuYWlmYy5zZXRjb21wdHlwZXIQRwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9haWZjLmh0bWwjYWlmYy5haWZjLnNldGNvbXB0eXBlWAEAAAAtdHIRRwAAWCcAAABlbWFpbC5jaGFyc2V0LkNoYXJzZXQuZ2V0X2JvZHlfZW5jb2RpbmdyEkcAAChqaQEAAGpqAQAAWFwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwuY2hhcnNldC5odG1sI2VtYWlsLmNoYXJzZXQuQ2hhcnNldC5nZXRfYm9keV9lbmNvZGluZ1gBAAAALXRyE0cAAFgSAAAAZmwuZm9ybS5hZGRfYnV0dG9uchRHAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZsLmh0bWwjZmwuZm9ybS5hZGRfYnV0dG9uWAEAAAAtdHIVRwAAWBcAAABjdXJzZXMud2luZG93LnNldHNjcnJlZ3IWRwAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LnNldHNjcnJlZ1gBAAAALXRyF0cAAFgpAAAAeG1sLnNheC5oYW5kbGVyLkNvbnRlbnRIYW5kbGVyLmVuZEVsZW1lbnRyGEcAAChqaQEAAGpqAQAAWGAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLkNvbnRlbnRIYW5kbGVyLmVuZEVsZW1lbnRYAQAAAC10chlHAABYEAAAAGlvLklPQmFzZS5maWxlbm9yGkcAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW8uaHRtbCNpby5JT0Jhc2UuZmlsZW5vWAEAAAAtdHIbRwAAWBgAAABsb2dnaW5nLkhhbmRsZXIuX19pbml0X19yHEcAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuSGFuZGxlci5fX2luaXRfX1gBAAAALXRyHUcAAFgaAAAAcG9wbGliLlBPUDMuc2V0X2RlYnVnbGV2ZWxyHkcAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcG9wbGliLmh0bWwjcG9wbGliLlBPUDMuc2V0X2RlYnVnbGV2ZWxYAQAAAC10ch9HAABYLwAAAGxvZ2dpbmcuaGFuZGxlcnMuTlRFdmVudExvZ0hhbmRsZXIuZ2V0TWVzc2FnZUlEciBHAAAoamkBAABqagEAAFhnAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLk5URXZlbnRMb2dIYW5kbGVyLmdldE1lc3NhZ2VJRFgBAAAALXRyIUcAAFgwAAAAeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkNoYXJhY3RlckRhdGFIYW5kbGVyciJHAAAoamkBAABqagEAAFhfAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuQ2hhcmFjdGVyRGF0YUhhbmRsZXJYAQAAAC10ciNHAABYJAAAAGxvZ2dpbmcuaGFuZGxlcnMuU3lzTG9nSGFuZGxlci5jbG9zZXIkRwAAKGppAQAAamoBAABYXAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5TeXNMb2dIYW5kbGVyLmNsb3NlWAEAAAAtdHIlRwAAWBQAAABjbGFzcy5fX3N1YmNsYXNzZXNfX3ImRwAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2NsYXNzLl9fc3ViY2xhc3Nlc19fWAEAAAAtdHInRwAAWCIAAAB1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRJc0luc3RhbmNlcihHAAAoamkBAABqagEAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0SXNJbnN0YW5jZVgBAAAALXRyKUcAAFgSAAAAaW1hcGxpYi5JTUFQNC5yZWFkcipHAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LnJlYWRYAQAAAC10citHAABYGwAAAG11bHRpcHJvY2Vzc2luZy5RdWV1ZS5jbG9zZXIsRwAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuUXVldWUuY2xvc2VYAQAAAC10ci1HAABYFQAAAGFzdC5Ob2RlVmlzaXRvci52aXNpdHIuRwAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hc3QuaHRtbCNhc3QuTm9kZVZpc2l0b3IudmlzaXRYAQAAAC10ci9HAABYEwAAAHpsaWIuQ29tcHJlc3MuZmx1c2hyMEcAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemxpYi5odG1sI3psaWIuQ29tcHJlc3MuZmx1c2hYAQAAAC10cjFHAABYDwAAAG9iamVjdC5fX2ltdWxfX3IyRwAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2ltdWxfX1gBAAAALXRyM0cAAFggAAAAbW9kdWxlZmluZGVyLk1vZHVsZUZpbmRlci5yZXBvcnRyNEcAAChqaQEAAGpqAQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbW9kdWxlZmluZGVyLmh0bWwjbW9kdWxlZmluZGVyLk1vZHVsZUZpbmRlci5yZXBvcnRYAQAAAC10cjVHAABYGgAAAGNvbGxlY3Rpb25zLkNvdW50ZXIudXBkYXRlcjZHAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuQ291bnRlci51cGRhdGVYAQAAAC10cjdHAABYEwAAAGZsLmZvcm0uYWRkX2NvdW50ZXJyOEcAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmwuaHRtbCNmbC5mb3JtLmFkZF9jb3VudGVyWAEAAAAtdHI5RwAAWBUAAABtYWlsYm94Lk1haWxib3guaXRlbXNyOkcAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGJveC5pdGVtc1gBAAAALXRyO0cAAFgjAAAAdHJhY2UuQ292ZXJhZ2VSZXN1bHRzLndyaXRlX3Jlc3VsdHNyPEcAAChqaQEAAGpqAQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHJhY2UuaHRtbCN0cmFjZS5Db3ZlcmFnZVJlc3VsdHMud3JpdGVfcmVzdWx0c1gBAAAALXRyPUcAAFgRAAAAYmRiLkJkYi51c2VyX2xpbmVyPkcAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYi51c2VyX2xpbmVYAQAAAC10cj9HAABYJAAAAGxvZ2dpbmcuaGFuZGxlcnMuTWVtb3J5SGFuZGxlci5jbG9zZXJARwAAKGppAQAAamoBAABYXAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5NZW1vcnlIYW5kbGVyLmNsb3NlWAEAAAAtdHJBRwAAWBkAAABkZWNpbWFsLkRlY2ltYWwubm9ybWFsaXplckJHAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwubm9ybWFsaXplWAEAAAAtdHJDRwAAWCUAAAB4bWwuc2F4LnhtbHJlYWRlci5BdHRyaWJ1dGVzLmdldFZhbHVlckRHAAAoamkBAABqagEAAFhbAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuQXR0cmlidXRlcy5nZXRWYWx1ZVgBAAAALXRyRUcAAFggAAAAaW1wdXRpbC5CdWlsdGluSW1wb3J0ZXIuZ2V0X2NvZGVyRkcAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1wdXRpbC5odG1sI2ltcHV0aWwuQnVpbHRpbkltcG9ydGVyLmdldF9jb2RlWAEAAAAtdHJHRwAAWBgAAABkZWNpbWFsLkNvbnRleHQubXVsdGlwbHlySEcAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5tdWx0aXBseVgBAAAALXRySUcAAFgYAAAAZGVjaW1hbC5EZWNpbWFsLmNvcHlfYWJzckpHAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwuY29weV9hYnNYAQAAAC10cktHAABYFAAAAG1obGliLkZvbGRlci5nZXRsYXN0ckxHAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21obGliLmh0bWwjbWhsaWIuRm9sZGVyLmdldGxhc3RYAQAAAC10ck1HAABYGAAAAHhtbC5kb20uTm9kZS5yZW1vdmVDaGlsZHJORwAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Ob2RlLnJlbW92ZUNoaWxkWAEAAAAtdHJPRwAAWB0AAABzc2wuU1NMQ29udGV4dC5sb2FkX2RoX3BhcmFtc3JQRwAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMQ29udGV4dC5sb2FkX2RoX3BhcmFtc1gBAAAALXRyUUcAAFgbAAAAbXNpbGliLkRpcmVjdG9yeS5yZW1vdmVfcHljclJHAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5EaXJlY3RvcnkucmVtb3ZlX3B5Y1gBAAAALXRyU0cAAFgWAAAAbm50cGxpYi5OTlRQLm5ld2dyb3Vwc3JURwAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ubnRwbGliLmh0bWwjbm50cGxpYi5OTlRQLm5ld2dyb3Vwc1gBAAAALXRyVUcAAFgjAAAAc3NsLlNTTFNvY2tldC5zZWxlY3RlZF9ucG5fcHJvdG9jb2xyVkcAAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTFNvY2tldC5zZWxlY3RlZF9ucG5fcHJvdG9jb2xYAQAAAC10cldHAABYFQAAAGN1cnNlcy53aW5kb3cuYXR0cm9mZnJYRwAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmF0dHJvZmZYAQAAAC10cllHAABYGgAAAGxvZ2dpbmcuSGFuZGxlci5jcmVhdGVMb2NrclpHAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkhhbmRsZXIuY3JlYXRlTG9ja1gBAAAALXRyW0cAAFgoAAAAQ29uZmlnUGFyc2VyLlJhd0NvbmZpZ1BhcnNlci5hZGRfc2VjdGlvbnJcRwAAKGppAQAAamoBAABYXAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNDb25maWdQYXJzZXIuUmF3Q29uZmlnUGFyc2VyLmFkZF9zZWN0aW9uWAEAAAAtdHJdRwAAWBcAAABzb2NrZXQuc29ja2V0LnJlY3ZfaW50b3JeRwAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuc29ja2V0LnJlY3ZfaW50b1gBAAAALXRyX0cAAFgjAAAAbWltZXR5cGVzLk1pbWVUeXBlcy5ndWVzc19leHRlbnNpb25yYEcAAChqaQEAAGpqAQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWltZXR5cGVzLmh0bWwjbWltZXR5cGVzLk1pbWVUeXBlcy5ndWVzc19leHRlbnNpb25YAQAAAC10cmFHAABYFQAAAHRhcmZpbGUuVGFySW5mby5pc3N5bXJiRwAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJJbmZvLmlzc3ltWAEAAAAtdHJjRwAAWBwAAABkYXRldGltZS5kYXRldGltZS5hc3RpbWV6b25lcmRHAAAoamkBAABqagEAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZXRpbWUuYXN0aW1lem9uZVgBAAAALXRyZUcAAFgUAAAAd2F2ZS5XYXZlX3JlYWQuY2xvc2VyZkcAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2F2ZS5odG1sI3dhdmUuV2F2ZV9yZWFkLmNsb3NlWAEAAAAtdHJnRwAAWDQAAABCYXNlSFRUUFNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLnZlcnNpb25fc3RyaW5ncmhHAAAoamkBAABqagEAAFhqAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Jhc2VodHRwc2VydmVyLmh0bWwjQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci52ZXJzaW9uX3N0cmluZ1gBAAAALXRyaUcAAFgdAAAAdGVsbmV0bGliLlRlbG5ldC5yZWFkX3NiX2RhdGFyakcAAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGVsbmV0bGliLmh0bWwjdGVsbmV0bGliLlRlbG5ldC5yZWFkX3NiX2RhdGFYAQAAAC10cmtHAABYIAAAAHNnbWxsaWIuU0dNTFBhcnNlci5zZXRub21vcmV0YWdzcmxHAAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NnbWxsaWIuaHRtbCNzZ21sbGliLlNHTUxQYXJzZXIuc2V0bm9tb3JldGFnc1gBAAAALXRybUcAAFghAAAAaHR0cGxpYi5IVFRQQ29ubmVjdGlvbi5wdXRyZXF1ZXN0cm5HAAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0dHBsaWIuaHRtbCNodHRwbGliLkhUVFBDb25uZWN0aW9uLnB1dHJlcXVlc3RYAQAAAC10cm9HAABYHQAAAHhkcmxpYi5VbnBhY2tlci51bnBhY2tfZG91YmxlcnBHAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3hkcmxpYi5odG1sI3hkcmxpYi5VbnBhY2tlci51bnBhY2tfZG91YmxlWAEAAAAtdHJxRwAAWBsAAAB0YXJmaWxlLlRhckluZm8uZnJvbXRhcmZpbGVyckcAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuVGFySW5mby5mcm9tdGFyZmlsZVgBAAAALXRyc0cAAFgWAAAAY3Vyc2VzLndpbmRvdy5pbnNlcnRsbnJ0RwAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93Lmluc2VydGxuWAEAAAAtdHJ1RwAAWBoAAABwcm9maWxlLlByb2ZpbGUuZHVtcF9zdGF0c3J2RwAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wcm9maWxlLmh0bWwjcHJvZmlsZS5Qcm9maWxlLmR1bXBfc3RhdHNYAQAAAC10cndHAABYDgAAAG1tYXAubW1hcC5maW5kcnhHAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21tYXAuaHRtbCNtbWFwLm1tYXAuZmluZFgBAAAALXRyeUcAAFgoAAAAbG9nZ2luZy5oYW5kbGVycy5OVEV2ZW50TG9nSGFuZGxlci5jbG9zZXJ6RwAAKGppAQAAamoBAABYYAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5OVEV2ZW50TG9nSGFuZGxlci5jbG9zZVgBAAAALXRye0cAAFgKAAAAc3RyLmxzdHJpcHJ8RwAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0ci5sc3RyaXBYAQAAAC10cn1HAABYGwAAAGRlY2ltYWwuRGVjaW1hbC50b19pbnRlZ3JhbHJ+RwAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLnRvX2ludGVncmFsWAEAAAAtdHJ/RwAAWC8AAABCYXNlSFRUUFNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLmxvZ19lcnJvcnKARwAAKGppAQAAamoBAABYZQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXNlaHR0cHNlcnZlci5odG1sI0Jhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIubG9nX2Vycm9yWAEAAAAtdHKBRwAAWB4AAABmb3JtYXR0ZXIuZm9ybWF0dGVyLnB1c2hfc3R5bGVygkcAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZm9ybWF0dGVyLmh0bWwjZm9ybWF0dGVyLmZvcm1hdHRlci5wdXNoX3N0eWxlWAEAAAAtdHKDRwAAWCUAAAB1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRTZXF1ZW5jZUVxdWFscoRHAAAoamkBAABqagEAAFhVAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0U2VxdWVuY2VFcXVhbFgBAAAALXRyhUcAAFgTAAAAZGVjaW1hbC5EZWNpbWFsLmV4cHKGRwAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLmV4cFgBAAAALXRyh0cAAFgmAAAAU29ja2V0U2VydmVyLkJhc2VSZXF1ZXN0SGFuZGxlci5maW5pc2hyiEcAAChqaQEAAGpqAQAAWFoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0c2VydmVyLmh0bWwjU29ja2V0U2VydmVyLkJhc2VSZXF1ZXN0SGFuZGxlci5maW5pc2hYAQAAAC10colHAABYIQAAAHhtbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5QYXJzZXKKRwAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLlBhcnNlWAEAAAAtdHKLRwAAWB8AAABtYWlsYm94Lk1NREZNZXNzYWdlLnJlbW92ZV9mbGFncoxHAAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1NREZNZXNzYWdlLnJlbW92ZV9mbGFnWAEAAAAtdHKNRwAAWB8AAABtYWlsYm94Lk1haWxkaXJNZXNzYWdlLmdldF9pbmZvco5HAAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxkaXJNZXNzYWdlLmdldF9pbmZvWAEAAAAtdHKPRwAAWBsAAABkYXRldGltZS5kYXRldGltZS50b29yZGluYWxykEcAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS50b29yZGluYWxYAQAAAC10cpFHAABYFQAAAHN1YnByb2Nlc3MuUG9wZW4ucG9sbHKSRwAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5Qb3Blbi5wb2xsWAEAAAAtdHKTRwAAWBIAAABvYmplY3QuX190cnVlZGl2X19ylEcAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX190cnVlZGl2X19YAQAAAC10cpVHAABYFQAAAHNvY2tldC5zb2NrZXQuY29ubmVjdHKWRwAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuc29ja2V0LmNvbm5lY3RYAQAAAC10cpdHAABYRgAAAFNpbXBsZVhNTFJQQ1NlcnZlci5TaW1wbGVYTUxSUENTZXJ2ZXIucmVnaXN0ZXJfaW50cm9zcGVjdGlvbl9mdW5jdGlvbnNymEcAAChqaQEAAGpqAQAAWIAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2ltcGxleG1scnBjc2VydmVyLmh0bWwjU2ltcGxlWE1MUlBDU2VydmVyLlNpbXBsZVhNTFJQQ1NlcnZlci5yZWdpc3Rlcl9pbnRyb3NwZWN0aW9uX2Z1bmN0aW9uc1gBAAAALXRymUcAAFguAAAAZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuc2V0X2luY2x1ZGVfZGlyc3KaRwAAKGppAQAAamoBAABYXgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLnNldF9pbmNsdWRlX2RpcnNYAQAAAC10cptHAABYJwAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50VHJlZS5wYXJzZXKcRwAAKGppAQAAamoBAABYZAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudFRyZWUucGFyc2VYAQAAAC10cp1HAABYFQAAAHhkcmxpYi5VbnBhY2tlci5yZXNldHKeRwAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94ZHJsaWIuaHRtbCN4ZHJsaWIuVW5wYWNrZXIucmVzZXRYAQAAAC10cp9HAABYIQAAAGZvcm1hdHRlci5mb3JtYXR0ZXIuZW5kX3BhcmFncmFwaHKgRwAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIuZm9ybWF0dGVyLmVuZF9wYXJhZ3JhcGhYAQAAAC10cqFHAABYPAAAAFNpbXBsZVhNTFJQQ1NlcnZlci5DR0lYTUxSUENSZXF1ZXN0SGFuZGxlci5yZWdpc3Rlcl9pbnN0YW5jZXKiRwAAKGppAQAAamoBAABYdgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaW1wbGV4bWxycGNzZXJ2ZXIuaHRtbCNTaW1wbGVYTUxSUENTZXJ2ZXIuQ0dJWE1MUlBDUmVxdWVzdEhhbmRsZXIucmVnaXN0ZXJfaW5zdGFuY2VYAQAAAC10cqNHAABYDgAAAG9iamVjdC5fX25ld19fcqRHAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fbmV3X19YAQAAAC10cqVHAABYDwAAAENvbm5lY3Rpb24ucG9sbHKmRwAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNDb25uZWN0aW9uLnBvbGxYAQAAAC10cqdHAABYJQAAAG9zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2UuY2hhbm5lbHNyqEcAAChqaQEAAGpqAQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3NzYXVkaW9kZXYuaHRtbCNvc3NhdWRpb2Rldi5vc3NfYXVkaW9fZGV2aWNlLmNoYW5uZWxzWAEAAAAtdHKpRwAAWBQAAABpby5JT0Jhc2Uud3JpdGVsaW5lc3KqRwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pby5odG1sI2lvLklPQmFzZS53cml0ZWxpbmVzWAEAAAAtdHKrRwAAWCsAAABtdWx0aXByb2Nlc3NpbmcucG9vbC5Bc3luY1Jlc3VsdC5zdWNjZXNzZnVscqxHAAAoamkBAABqagEAAFhiAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5wb29sLkFzeW5jUmVzdWx0LnN1Y2Nlc3NmdWxYAQAAAC10cq1HAABYFQAAAGltYXBsaWIuSU1BUDQuZXhwdW5nZXKuRwAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5leHB1bmdlWAEAAAAtdHKvRwAAWDQAAAB4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuRXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVycrBHAAAoamkBAABqagEAAFhjAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuRXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVyWAEAAAAtdHKxRwAAWBUAAABzZWxlY3Qua3F1ZXVlLmNvbnRyb2xyskcAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2VsZWN0Lmh0bWwjc2VsZWN0LmtxdWV1ZS5jb250cm9sWAEAAAAtdHKzRwAAWBcAAABkZWNpbWFsLkRlY2ltYWwubWluX21hZ3K0RwAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLm1pbl9tYWdYAQAAAC10crVHAABYEgAAAHNlbGVjdC5lcG9sbC5jbG9zZXK2RwAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZWxlY3QuaHRtbCNzZWxlY3QuZXBvbGwuY2xvc2VYAQAAAC10crdHAABYIQAAAHNxbGl0ZTMuQ29ubmVjdGlvbi5sb2FkX2V4dGVuc2lvbnK4RwAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy5Db25uZWN0aW9uLmxvYWRfZXh0ZW5zaW9uWAEAAAAtdHK5RwAAWCwAAAB1cmxsaWIyLlByb3h5QmFzaWNBdXRoSGFuZGxlci5odHRwX2Vycm9yXzQwN3K6RwAAKGppAQAAamoBAABYWwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5Qcm94eUJhc2ljQXV0aEhhbmRsZXIuaHR0cF9lcnJvcl80MDdYAQAAAC10crtHAABYKQAAAGRpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmFkZF9saWJyYXJ5crxHAAAoamkBAABqagEAAFhZAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuYWRkX2xpYnJhcnlYAQAAAC10cr1HAABYHQAAAGZvcm1hdHRlci5mb3JtYXR0ZXIucG9wX3N0eWxlcr5HAAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Zvcm1hdHRlci5odG1sI2Zvcm1hdHRlci5mb3JtYXR0ZXIucG9wX3N0eWxlWAEAAAAtdHK/RwAAWBQAAAB0YXJmaWxlLlRhckZpbGUubGlzdHLARwAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJGaWxlLmxpc3RYAQAAAC10csFHAABYHQAAAHVuaXR0ZXN0LlRlc3RSZXN1bHQuc3RhcnRUZXN0csJHAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdFJlc3VsdC5zdGFydFRlc3RYAQAAAC10csNHAABYKQAAAHhtbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5Vc2VGb3JlaWduRFREcsRHAAAoamkBAABqagEAAFhYAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuVXNlRm9yZWlnbkRURFgBAAAALXRyxUcAAFghAAAAZW1haWwuZ2VuZXJhdG9yLkdlbmVyYXRvci5mbGF0dGVucsZHAAAoamkBAABqagEAAFhYAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLmdlbmVyYXRvci5odG1sI2VtYWlsLmdlbmVyYXRvci5HZW5lcmF0b3IuZmxhdHRlblgBAAAALXRyx0cAAFgTAAAAbXNpbGliLlZpZXcuRXhlY3V0ZXLIRwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuVmlldy5FeGVjdXRlWAEAAAAtdHLJRwAAWDQAAAB4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuU3RhcnRDZGF0YVNlY3Rpb25IYW5kbGVycspHAAAoamkBAABqagEAAFhjAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuU3RhcnRDZGF0YVNlY3Rpb25IYW5kbGVyWAEAAAAtdHLLRwAAWCYAAAB1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRNdWx0aUxpbmVFcXVhbHLMRwAAKGppAQAAamoBAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydE11bHRpTGluZUVxdWFsWAEAAAAtdHLNRwAAWBkAAABkZWNpbWFsLkRlY2ltYWwubmV4dF9wbHVzcs5HAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwubmV4dF9wbHVzWAEAAAAtdHLPRwAAWBQAAABzb2NrZXQuc29ja2V0Lmxpc3RlbnLQRwAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuc29ja2V0Lmxpc3RlblgBAAAALXRy0UcAAFgaAAAAdHRrLlRyZWV2aWV3LnRhZ19jb25maWd1cmVy0kcAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLlRyZWV2aWV3LnRhZ19jb25maWd1cmVYAQAAAC10ctNHAABYQwAAAERvY1hNTFJQQ1NlcnZlci5Eb2NDR0lYTUxSUENSZXF1ZXN0SGFuZGxlci5zZXRfc2VydmVyX2RvY3VtZW50YXRpb25y1EcAAChqaQEAAGpqAQAAWHoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jeG1scnBjc2VydmVyLmh0bWwjRG9jWE1MUlBDU2VydmVyLkRvY0NHSVhNTFJQQ1JlcXVlc3RIYW5kbGVyLnNldF9zZXJ2ZXJfZG9jdW1lbnRhdGlvblgBAAAALXRy1UcAAFgcAAAAcHJvZmlsZS5Qcm9maWxlLmNyZWF0ZV9zdGF0c3LWRwAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wcm9maWxlLmh0bWwjcHJvZmlsZS5Qcm9maWxlLmNyZWF0ZV9zdGF0c1gBAAAALXRy10cAAFgaAAAAdW5pdHRlc3QuVGVzdFN1aXRlLmFkZFRlc3Ry2EcAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0U3VpdGUuYWRkVGVzdFgBAAAALXRy2UcAAFgQAAAAZmwuZm9ybS5hZGRfZGlhbHLaRwAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbC5odG1sI2ZsLmZvcm0uYWRkX2RpYWxYAQAAAC10cttHAABYJgAAAHRlc3Quc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkLnVuc2V0ctxHAAAoamkBAABqagEAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZC51bnNldFgBAAAALXRy3UcAAFgaAAAAeGRybGliLlBhY2tlci5wYWNrX2ZvcGFxdWVy3kcAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveGRybGliLmh0bWwjeGRybGliLlBhY2tlci5wYWNrX2ZvcGFxdWVYAQAAAC10ct9HAABYEwAAAG9iamVjdC5fX3J0cnVlZGl2X19y4EcAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19ydHJ1ZWRpdl9fWAEAAAAtdHLhRwAAWAkAAABkaWN0LmNvcHly4kcAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNkaWN0LmNvcHlYAQAAAC10cuNHAABYGQAAAGNvZGVjcy5TdHJlYW1Xcml0ZXIucmVzZXRy5EcAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLlN0cmVhbVdyaXRlci5yZXNldFgBAAAALXRy5UcAAFgYAAAAdGhyZWFkaW5nLlRocmVhZC5zZXROYW1lcuZHAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5UaHJlYWQuc2V0TmFtZVgBAAAALXRy50cAAFgoAAAASFRNTFBhcnNlci5IVE1MUGFyc2VyLmhhbmRsZV9zdGFydGVuZHRhZ3LoRwAAKGppAQAAamoBAABYWgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odG1scGFyc2VyLmh0bWwjSFRNTFBhcnNlci5IVE1MUGFyc2VyLmhhbmRsZV9zdGFydGVuZHRhZ1gBAAAALXRy6UcAAFghAAAAeG1sLnNheC5TQVhFeGNlcHRpb24uZ2V0RXhjZXB0aW9ucupHAAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXguaHRtbCN4bWwuc2F4LlNBWEV4Y2VwdGlvbi5nZXRFeGNlcHRpb25YAQAAAC10cutHAABYEgAAAHR0ay5UcmVldmlldy5mb2N1c3LsRwAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuVHJlZXZpZXcuZm9jdXNYAQAAAC10cu1HAABYFgAAAGRhdGV0aW1lLnRpbWUuc3RyZnRpbWVy7kcAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS50aW1lLnN0cmZ0aW1lWAEAAAAtdHLvRwAAWA8AAABwb3BsaWIuUE9QMy50b3By8EcAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcG9wbGliLmh0bWwjcG9wbGliLlBPUDMudG9wWAEAAAAtdHLxRwAAWBUAAABiZGIuQmRiLmRpc3BhdGNoX2xpbmVy8kcAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYi5kaXNwYXRjaF9saW5lWAEAAAAtdHLzRwAAWCUAAABjb29raWVsaWIuQ29va2llLmdldF9ub25zdGFuZGFyZF9hdHRycvRHAAAoamkBAABqagEAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5Db29raWUuZ2V0X25vbnN0YW5kYXJkX2F0dHJYAQAAAC10cvVHAABYIwAAAHNxbGl0ZTMuQ29ubmVjdGlvbi5jcmVhdGVfYWdncmVnYXRlcvZHAAAoamkBAABqagEAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLkNvbm5lY3Rpb24uY3JlYXRlX2FnZ3JlZ2F0ZVgBAAAALXRy90cAAFggAAAAYXN5bmNvcmUuZGlzcGF0Y2hlci5oYW5kbGVfZXJyb3Jy+EcAAChqaQEAAGpqAQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXN5bmNvcmUuaHRtbCNhc3luY29yZS5kaXNwYXRjaGVyLmhhbmRsZV9lcnJvclgBAAAALXRy+UcAAFgZAAAAdHRrLlN0eWxlLmVsZW1lbnRfb3B0aW9uc3L6RwAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuU3R5bGUuZWxlbWVudF9vcHRpb25zWAEAAAAtdHL7RwAAWBgAAAB6aXBmaWxlLlppcEZpbGUucHJpbnRkaXJy/EcAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGZpbGUuWmlwRmlsZS5wcmludGRpclgBAAAALXRy/UcAAFgWAAAAaW8uQnVmZmVyZWRSZWFkZXIucGVla3L+RwAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pby5odG1sI2lvLkJ1ZmZlcmVkUmVhZGVyLnBlZWtYAQAAAC10cv9HAABYCQAAAGRsLmRsLnN5bXIASAAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kbC5odG1sI2RsLmRsLnN5bVgBAAAALXRyAUgAAFgQAAAAZmxvYXQuaXNfaW50ZWdlcnICSAAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2Zsb2F0LmlzX2ludGVnZXJYAQAAAC10cgNIAABYEwAAAGN1cnNlcy53aW5kb3cuaW5zdHJyBEgAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5pbnN0clgBAAAALXRyBUgAAFgVAAAAd2F2ZS5XYXZlX3JlYWQucmV3aW5kcgZIAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dhdmUuaHRtbCN3YXZlLldhdmVfcmVhZC5yZXdpbmRYAQAAAC10cgdIAABYNgAAAHVybGxpYjIuQWJzdHJhY3RCYXNpY0F1dGhIYW5kbGVyLmh0dHBfZXJyb3JfYXV0aF9yZXFlZHIISAAAKGppAQAAamoBAABYZQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5BYnN0cmFjdEJhc2ljQXV0aEhhbmRsZXIuaHR0cF9lcnJvcl9hdXRoX3JlcWVkWAEAAAAtdHIJSAAAWCAAAABjb2RlLkludGVyYWN0aXZlQ29uc29sZS5pbnRlcmFjdHIKSAAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlLmh0bWwjY29kZS5JbnRlcmFjdGl2ZUNvbnNvbGUuaW50ZXJhY3RYAQAAAC10cgtIAABYGAAAAGNvbnRleHRtYW5hZ2VyLl9fZW50ZXJfX3IMSAAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2NvbnRleHRtYW5hZ2VyLl9fZW50ZXJfX1gBAAAALXRyDUgAAFgOAAAAaW50LmJpdF9sZW5ndGhyDkgAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNpbnQuYml0X2xlbmd0aFgBAAAALXRyD0gAAFgNAAAAZGljdC52aWV3a2V5c3IQSAAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2RpY3Qudmlld2tleXNYAQAAAC10chFIAABYFQAAAGRlY2ltYWwuQ29udGV4dC5FdGlueXISSAAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LkV0aW55WAEAAAAtdHITSAAAWCYAAAB1bml0dGVzdC5UZXN0UmVzdWx0LmFkZEV4cGVjdGVkRmFpbHVyZXIUSAAAKGppAQAAamoBAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RSZXN1bHQuYWRkRXhwZWN0ZWRGYWlsdXJlWAEAAAAtdHIVSAAAWCYAAAB4bWwuZG9tLkVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWVOU3IWSAAAKGppAQAAamoBAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5FbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lTlNYAQAAAC10chdIAABYGgAAAGRvY3Rlc3QuRG9jVGVzdEZpbmRlci5maW5kchhIAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIuZmluZFgBAAAALXRyGUgAAFgXAAAAaW1hcGxpYi5JTUFQNC5zdWJzY3JpYmVyGkgAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQuc3Vic2NyaWJlWAEAAAAtdHIbSAAAWBEAAABzaGEuc2hhLmhleGRpZ2VzdHIcSAAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaGEuaHRtbCNzaGEuc2hhLmhleGRpZ2VzdFgBAAAALXRyHUgAAFg1AAAAeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLlVucGFyc2VkRW50aXR5RGVjbEhhbmRsZXJyHkgAAChqaQEAAGpqAQAAWGQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5VbnBhcnNlZEVudGl0eURlY2xIYW5kbGVyWAEAAAAtdHIfSAAAWBEAAABwYXJzZXIuU1QuaXNzdWl0ZXIgSAAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wYXJzZXIuaHRtbCNwYXJzZXIuU1QuaXNzdWl0ZVgBAAAALXRyIUgAAFghAAAAb3B0cGFyc2UuT3B0aW9uUGFyc2VyLnByaW50X3VzYWdlciJIAAAoamkBAABqagEAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UuT3B0aW9uUGFyc2VyLnByaW50X3VzYWdlWAEAAAAtdHIjSAAAWDAAAABkaXN0dXRpbHMuZmFuY3lfZ2V0b3B0LkZhbmN5R2V0b3B0LmdlbmVyYXRlX2hlbHByJEgAAChqaQEAAGpqAQAAWGAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuZmFuY3lfZ2V0b3B0LkZhbmN5R2V0b3B0LmdlbmVyYXRlX2hlbHBYAQAAAC10ciVIAABYHAAAAGRhdGV0aW1lLmRhdGV0aW1lLmlzb3dlZWtkYXlyJkgAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS5pc293ZWVrZGF5WAEAAAAtdHInSAAAWBgAAABkZWNpbWFsLkNvbnRleHQucXVhbnRpemVyKEgAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5xdWFudGl6ZVgBAAAALXRyKUgAAFgiAAAAZm9ybWF0dGVyLmZvcm1hdHRlci5hZGRfbGFiZWxfZGF0YXIqSAAAKGppAQAAamoBAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIuZm9ybWF0dGVyLmFkZF9sYWJlbF9kYXRhWAEAAAAtdHIrSAAAWBUAAABzdWJwcm9jZXNzLlBvcGVuLmtpbGxyLEgAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI3N1YnByb2Nlc3MuUG9wZW4ua2lsbFgBAAAALXRyLUgAAFgOAAAAb2JqZWN0Ll9faW50X19yLkgAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19pbnRfX1gBAAAALXRyL0gAAFgKAAAAc3RyLmVuY29kZXIwSAAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0ci5lbmNvZGVYAQAAAC10cjFIAABYFAAAAG1zaWxpYi5Db250cm9sLmV2ZW50cjJIAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5Db250cm9sLmV2ZW50WAEAAAAtdHIzSAAAWBQAAABpbWFwbGliLklNQVA0LmdldGFjbHI0SAAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5nZXRhY2xYAQAAAC10cjVIAABYGAAAAG1haWxib3guTWFpbGJveC5nZXRfZmlsZXI2SAAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsYm94LmdldF9maWxlWAEAAAAtdHI3SAAAWBcAAABmdHBsaWIuRlRQLm50cmFuc2ZlcmNtZHI4SAAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuRlRQLm50cmFuc2ZlcmNtZFgBAAAALXRyOUgAAFgdAAAAbWltZXRvb2xzLk1lc3NhZ2UuZ2V0bWFpbnR5cGVyOkgAAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWltZXRvb2xzLmh0bWwjbWltZXRvb2xzLk1lc3NhZ2UuZ2V0bWFpbnR5cGVYAQAAAC10cjtIAABYEwAAAGZsLmZvcm0uYWRkX2Jyb3dzZXJyPEgAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmwuaHRtbCNmbC5mb3JtLmFkZF9icm93c2VyWAEAAAAtdHI9SAAAWBQAAABjdXJzZXMud2luZG93LnN1YndpbnI+SAAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LnN1YndpblgBAAAALXRyP0gAAFgVAAAAY3Vyc2VzLndpbmRvdy5pbnNuc3RyckBIAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cuaW5zbnN0clgBAAAALXRyQUgAAFgYAAAAbWhsaWIuRm9sZGVyLmNvcHltZXNzYWdlckJIAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21obGliLmh0bWwjbWhsaWIuRm9sZGVyLmNvcHltZXNzYWdlWAEAAAAtdHJDSAAAWCMAAABjb29raWVsaWIuQ29va2llSmFyLmV4dHJhY3RfY29va2llc3JESAAAKGppAQAAamoBAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuQ29va2llSmFyLmV4dHJhY3RfY29va2llc1gBAAAALXRyRUgAAFgyAAAAeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkVuZENkYXRhU2VjdGlvbkhhbmRsZXJyRkgAAChqaQEAAGpqAQAAWGEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5FbmRDZGF0YVNlY3Rpb25IYW5kbGVyWAEAAAAtdHJHSAAAWCMAAABvc3NhdWRpb2Rldi5vc3NfbWl4ZXJfZGV2aWNlLmZpbGVub3JISAAAKGppAQAAamoBAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vc3NhdWRpb2Rldi5odG1sI29zc2F1ZGlvZGV2Lm9zc19taXhlcl9kZXZpY2UuZmlsZW5vWAEAAAAtdHJJSAAAWBQAAABzdW5hdS5BVV9yZWFkLnNldHBvc3JKSAAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdW5hdS5odG1sI3N1bmF1LkFVX3JlYWQuc2V0cG9zWAEAAAAtdHJLSAAAWBYAAABjdXJzZXMud2luZG93LnN0YW5kb3V0ckxIAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cuc3RhbmRvdXRYAQAAAC10ck1IAABYFgAAAGFzeW5jaGF0LmZpZm8uaXNfZW1wdHlyTkgAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXN5bmNoYXQuaHRtbCNhc3luY2hhdC5maWZvLmlzX2VtcHR5WAEAAAAtdHJPSAAAWBcAAABkZWNpbWFsLkNvbnRleHQuaXNfc25hbnJQSAAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmlzX3NuYW5YAQAAAC10clFIAABYJQAAAENvbmZpZ1BhcnNlci5SYXdDb25maWdQYXJzZXIuc2VjdGlvbnNyUkgAAChqaQEAAGpqAQAAWFkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjQ29uZmlnUGFyc2VyLlJhd0NvbmZpZ1BhcnNlci5zZWN0aW9uc1gBAAAALXRyU0gAAFgIAAAAZGljdC5wb3ByVEgAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNkaWN0LnBvcFgBAAAALXRyVUgAAFgbAAAAc3ltdGFibGUuRnVuY3Rpb24uZ2V0X2ZyZWVzclZIAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5bXRhYmxlLmh0bWwjc3ltdGFibGUuRnVuY3Rpb24uZ2V0X2ZyZWVzWAEAAAAtdHJXSAAAWBAAAABjaHVuay5DaHVuay5za2lwclhIAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NodW5rLmh0bWwjY2h1bmsuQ2h1bmsuc2tpcFgBAAAALXRyWUgAAFgdAAAAZW1haWwucGFyc2VyLkZlZWRQYXJzZXIuY2xvc2VyWkgAAChqaQEAAGpqAQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwucGFyc2VyLmh0bWwjZW1haWwucGFyc2VyLkZlZWRQYXJzZXIuY2xvc2VYAQAAAC10cltIAABYNgAAAG11bHRpcHJvY2Vzc2luZy5tdWx0aXByb2Nlc3NpbmcucXVldWVzLlNpbXBsZVF1ZXVlLmdldHJcSAAAKGppAQAAamoBAABYbQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcubXVsdGlwcm9jZXNzaW5nLnF1ZXVlcy5TaW1wbGVRdWV1ZS5nZXRYAQAAAC10cl1IAABYGgAAAHdhdmUuV2F2ZV93cml0ZS5zZXRuZnJhbWVzcl5IAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dhdmUuaHRtbCN3YXZlLldhdmVfd3JpdGUuc2V0bmZyYW1lc1gBAAAALXRyX0gAAFgRAAAAYWlmYy5haWZjLnNldG1hcmtyYEgAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWlmYy5odG1sI2FpZmMuYWlmYy5zZXRtYXJrWAEAAAAtdHJhSAAAWBkAAABkaXN0dXRpbHMuY21kLkNvbW1hbmQucnVucmJIAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNtZC5Db21tYW5kLnJ1blgBAAAALXRyY0gAAFgbAAAAaW1hcGxpYi5JTUFQNC5nZXRhbm5vdGF0aW9ucmRIAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LmdldGFubm90YXRpb25YAQAAAC10cmVIAABYGQAAAHNzbC5TU0xTb2NrZXQuZ2V0cGVlcmNlcnRyZkgAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTFNvY2tldC5nZXRwZWVyY2VydFgBAAAALXRyZ0gAAFglAAAAdW5pdHRlc3QuVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXJoSAAAKGppAQAAamoBAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVYAQAAAC10cmlIAABYIAAAAGNhbGVuZGFyLkNhbGVuZGFyLml0ZXJtb250aGRheXMycmpIAAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhbGVuZGFyLmh0bWwjY2FsZW5kYXIuQ2FsZW5kYXIuaXRlcm1vbnRoZGF5czJYAQAAAC10cmtIAABYEgAAAGltYXBsaWIuSU1BUDQuc29ydHJsSAAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5zb3J0WAEAAAAtdHJtSAAAWBgAAABsb2dnaW5nLk51bGxIYW5kbGVyLmVtaXRybkgAAChqaQEAAGpqAQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuTnVsbEhhbmRsZXIuZW1pdFgBAAAALXRyb0gAAFgxAAAAeG1sLnNheC5oYW5kbGVyLkNvbnRlbnRIYW5kbGVyLnN0YXJ0UHJlZml4TWFwcGluZ3JwSAAAKGppAQAAamoBAABYaAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LmhhbmRsZXIuaHRtbCN4bWwuc2F4LmhhbmRsZXIuQ29udGVudEhhbmRsZXIuc3RhcnRQcmVmaXhNYXBwaW5nWAEAAAAtdHJxSAAAWCAAAAB4bWwuZG9tLkRvY3VtZW50LmNyZWF0ZUVsZW1lbnROU3JySAAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Eb2N1bWVudC5jcmVhdGVFbGVtZW50TlNYAQAAAC10cnNIAABYCwAAAHN0ci5pc3VwcGVycnRIAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLmlzdXBwZXJYAQAAAC10cnVIAABYFgAAAG1zaWxpYi5EYXRhYmFzZS5Db21taXRydkgAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLkRhdGFiYXNlLkNvbW1pdFgBAAAALXRyd0gAAFghAAAAY29kZS5JbnRlcmFjdGl2ZUludGVycHJldGVyLndyaXRlcnhIAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGUuaHRtbCNjb2RlLkludGVyYWN0aXZlSW50ZXJwcmV0ZXIud3JpdGVYAQAAAC10cnlIAABYHgAAAG11bHRpZmlsZS5NdWx0aUZpbGUuZW5kX21hcmtlcnJ6SAAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aWZpbGUuaHRtbCNtdWx0aWZpbGUuTXVsdGlGaWxlLmVuZF9tYXJrZXJYAQAAAC10cntIAABYEgAAAHNvY2tldC5zb2NrZXQuYmluZHJ8SAAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuc29ja2V0LmJpbmRYAQAAAC10cn1IAABYIQAAAGRlY2ltYWwuQ29udGV4dC5jb21wYXJlX3RvdGFsX21hZ3J+SAAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmNvbXBhcmVfdG90YWxfbWFnWAEAAAAtdHJ/SAAAWBcAAABpby5CdWZmZXJlZFdyaXRlci53cml0ZXKASAAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pby5odG1sI2lvLkJ1ZmZlcmVkV3JpdGVyLndyaXRlWAEAAAAtdHKBSAAAWCEAAABodHRwbGliLkhUVFBDb25uZWN0aW9uLmVuZGhlYWRlcnNygkgAAChqaQEAAGpqAQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHR0cGxpYi5odG1sI2h0dHBsaWIuSFRUUENvbm5lY3Rpb24uZW5kaGVhZGVyc1gBAAAALXRyg0gAAFgiAAAAQ29uZmlnUGFyc2VyLlJhd0NvbmZpZ1BhcnNlci5pdGVtc3KESAAAKGppAQAAamoBAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNDb25maWdQYXJzZXIuUmF3Q29uZmlnUGFyc2VyLml0ZW1zWAEAAAAtdHKFSAAAWCkAAABsb2dnaW5nLmhhbmRsZXJzLkhUVFBIYW5kbGVyLm1hcExvZ1JlY29yZHKGSAAAKGppAQAAamoBAABYYQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5IVFRQSGFuZGxlci5tYXBMb2dSZWNvcmRYAQAAAC10codIAABYGgAAAHVybGxpYjIuUmVxdWVzdC5nZXRfaGVhZGVycohIAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLlJlcXVlc3QuZ2V0X2hlYWRlclgBAAAALXRyiUgAAFgfAAAAY29kZWNzLkluY3JlbWVudGFsRGVjb2Rlci5yZXNldHKKSAAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuSW5jcmVtZW50YWxEZWNvZGVyLnJlc2V0WAEAAAAtdHKLSAAAWBMAAABpby5UZXh0SU9CYXNlLndyaXRlcoxIAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uVGV4dElPQmFzZS53cml0ZVgBAAAALXRyjUgAAFgWAAAAc2hsZXguc2hsZXgucG9wX3NvdXJjZXKOSAAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaGxleC5odG1sI3NobGV4LnNobGV4LnBvcF9zb3VyY2VYAQAAAC10co9IAABYGAAAAG1obGliLkZvbGRlci5nZXRmdWxsbmFtZXKQSAAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taGxpYi5odG1sI21obGliLkZvbGRlci5nZXRmdWxsbmFtZVgBAAAALXRykUgAAFggAAAAbG9nZ2luZy5Mb2dnZXIuZ2V0RWZmZWN0aXZlTGV2ZWxykkgAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuTG9nZ2VyLmdldEVmZmVjdGl2ZUxldmVsWAEAAAAtdHKTSAAAWA4AAABtbWFwLm1tYXAuc2l6ZXKUSAAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tbWFwLmh0bWwjbW1hcC5tbWFwLnNpemVYAQAAAC10cpVIAABYGAAAAHhtbC5kb20uTm9kZS5hcHBlbmRDaGlsZHKWSAAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Ob2RlLmFwcGVuZENoaWxkWAEAAAAtdHKXSAAAWB4AAAB6aXBpbXBvcnQuemlwaW1wb3J0ZXIuZ2V0X2RhdGFymEgAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemlwaW1wb3J0Lmh0bWwjemlwaW1wb3J0LnppcGltcG9ydGVyLmdldF9kYXRhWAEAAAAtdHKZSAAAWBwAAABjdXJzZXMud2luZG93LmlzX2xpbmV0b3VjaGVkcppIAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cuaXNfbGluZXRvdWNoZWRYAQAAAC10cptIAABYEQAAAHR0ay5Ob3RlYm9vay5oaWRlcpxIAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5Ob3RlYm9vay5oaWRlWAEAAAAtdHKdSAAAWBIAAAByZXhlYy5SRXhlYy5zX2V4ZWNynkgAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmV4ZWMuaHRtbCNyZXhlYy5SRXhlYy5zX2V4ZWNYAQAAAC10cp9IAABYGQAAAHBvc2l4ZmlsZS5wb3NpeGZpbGUuZmxhZ3NyoEgAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcG9zaXhmaWxlLmh0bWwjcG9zaXhmaWxlLnBvc2l4ZmlsZS5mbGFnc1gBAAAALXRyoUgAAFgQAAAAcG9wbGliLlBPUDMuZGVsZXKiSAAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wb3BsaWIuaHRtbCNwb3BsaWIuUE9QMy5kZWxlWAEAAAAtdHKjSAAAWC4AAABkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5vYmplY3RfZmlsZW5hbWVzcqRIAAAoamkBAABqagEAAFheAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIub2JqZWN0X2ZpbGVuYW1lc1gBAAAALXRypUgAAFgvAAAAbXVsdGlwcm9jZXNzaW5nLnBvb2wubXVsdGlwcm9jZXNzaW5nLlBvb2wuYXBwbHlypkgAAChqaQEAAGpqAQAAWGYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLnBvb2wubXVsdGlwcm9jZXNzaW5nLlBvb2wuYXBwbHlYAQAAAC10cqdIAABYGwAAAHdhdmUuV2F2ZV93cml0ZS53cml0ZWZyYW1lc3KoSAAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93YXZlLmh0bWwjd2F2ZS5XYXZlX3dyaXRlLndyaXRlZnJhbWVzWAEAAAAtdHKpSAAAWBEAAABmbC5mb3JtLmFkZF9pbnB1dHKqSAAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbC5odG1sI2ZsLmZvcm0uYWRkX2lucHV0WAEAAAAtdHKrSAAAWBUAAAByZmM4MjIuTWVzc2FnZS5pc2xhc3RyrEgAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmZjODIyLmh0bWwjcmZjODIyLk1lc3NhZ2UuaXNsYXN0WAEAAAAtdHKtSAAAWCcAAAB4bWwuZXRyZWUuRWxlbWVudFRyZWUuVHJlZUJ1aWxkZXIuc3RhcnRyrkgAAChqaQEAAGpqAQAAWGQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLlRyZWVCdWlsZGVyLnN0YXJ0WAEAAAAtdHKvSAAAWCkAAAB4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudFRyZWUuZ2V0cm9vdHKwSAAAKGppAQAAamoBAABYZgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudFRyZWUuZ2V0cm9vdFgBAAAALXRysUgAAFgYAAAAdXJsbGliMi5SZXF1ZXN0LmdldF9kYXRhcrJIAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLlJlcXVlc3QuZ2V0X2RhdGFYAQAAAC10crNIAABYFgAAAGFpZmMuYWlmYy5nZXRzYW1wd2lkdGhytEgAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWlmYy5odG1sI2FpZmMuYWlmYy5nZXRzYW1wd2lkdGhYAQAAAC10crVIAABYFgAAAGN1cnNlcy53aW5kb3cubXZkZXJ3aW5ytkgAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5tdmRlcndpblgBAAAALXRyt0gAAFgPAAAAb2JqZWN0Ll9fcnBvd19fcrhIAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fcnBvd19fWAEAAAAtdHK5SAAAWB0AAABkZWNpbWFsLkNvbnRleHQudG9fZW5nX3N0cmluZ3K6SAAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LnRvX2VuZ19zdHJpbmdYAQAAAC10crtIAABYJwAAAGdldHRleHQuTnVsbFRyYW5zbGF0aW9ucy5vdXRwdXRfY2hhcnNldHK8SAAAKGppAQAAamoBAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZXR0ZXh0Lmh0bWwjZ2V0dGV4dC5OdWxsVHJhbnNsYXRpb25zLm91dHB1dF9jaGFyc2V0WAEAAAAtdHK9SAAAWBkAAABzb2NrZXQuc29ja2V0LmdldHBlZXJuYW1lcr5IAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5zb2NrZXQuZ2V0cGVlcm5hbWVYAQAAAC10cr9IAABYDgAAAG9iamVjdC5fX2hleF9fcsBIAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9faGV4X19YAQAAAC10csFIAABYIQAAAGVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5zZXRfcGF5bG9hZHLCSAAAKGppAQAAamoBAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5NZXNzYWdlLnNldF9wYXlsb2FkWAEAAAAtdHLDSAAAWBsAAABjdXJzZXMudGV4dHBhZC5UZXh0Ym94LmVkaXRyxEgAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLnRleHRwYWQuVGV4dGJveC5lZGl0WAEAAAAtdHLFSAAAWA8AAABtYWlsYm94Lk1ILnBhY2tyxkgAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTUgucGFja1gBAAAALXRyx0gAAFgLAAAAZmlsZS5pc2F0dHlyyEgAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNmaWxlLmlzYXR0eVgBAAAALXRyyUgAAFgaAAAAc3FsaXRlMy5DdXJzb3IuZXhlY3V0ZW1hbnlyykgAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuQ3Vyc29yLmV4ZWN1dGVtYW55WAEAAAAtdHLLSAAAWBQAAABjdXJzZXMud2luZG93LmRlcndpbnLMSAAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmRlcndpblgBAAAALXRyzUgAAFhLAAAAU2ltcGxlWE1MUlBDU2VydmVyLkNHSVhNTFJQQ1JlcXVlc3RIYW5kbGVyLnJlZ2lzdGVyX2ludHJvc3BlY3Rpb25fZnVuY3Rpb25zcs5IAAAoamkBAABqagEAAFiFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NpbXBsZXhtbHJwY3NlcnZlci5odG1sI1NpbXBsZVhNTFJQQ1NlcnZlci5DR0lYTUxSUENSZXF1ZXN0SGFuZGxlci5yZWdpc3Rlcl9pbnRyb3NwZWN0aW9uX2Z1bmN0aW9uc1gBAAAALXRyz0gAAFgYAAAAdGhyZWFkaW5nLkNvbmRpdGlvbi53YWl0ctBIAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5Db25kaXRpb24ud2FpdFgBAAAALXRy0UgAAFgaAAAAbXVsdGlwcm9jZXNzaW5nLlF1ZXVlLmZ1bGxy0kgAAChqaQEAAGpqAQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLlF1ZXVlLmZ1bGxYAQAAAC10ctNIAABYFwAAAGRlY2ltYWwuRGVjaW1hbC5pc196ZXJvctRIAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwuaXNfemVyb1gBAAAALXRy1UgAAFgbAAAAdGVsbmV0bGliLlRlbG5ldC5yZWFkX2VhZ2VyctZIAAAoamkBAABqagEAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RlbG5ldGxpYi5odG1sI3RlbG5ldGxpYi5UZWxuZXQucmVhZF9lYWdlclgBAAAALXRy10gAAFgYAAAAbWFpbGJveC5NYWlsZGlyLmdldF9maWxlcthIAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxkaXIuZ2V0X2ZpbGVYAQAAAC10ctlIAABYLwAAAHhtbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5Ob3RhdGlvbkRlY2xIYW5kbGVyctpIAAAoamkBAABqagEAAFheAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuTm90YXRpb25EZWNsSGFuZGxlclgBAAAALXRy20gAAFgOAAAAc3RyLnNwbGl0bGluZXNy3EgAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNzdHIuc3BsaXRsaW5lc1gBAAAALXRy3UgAAFgaAAAAc3RyaW5nLkZvcm1hdHRlci5nZXRfZmllbGRy3kgAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLkZvcm1hdHRlci5nZXRfZmllbGRYAQAAAC10ct9IAABYEgAAAHR0ay5XaWRnZXQuaW5zdGF0ZXLgSAAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuV2lkZ2V0Lmluc3RhdGVYAQAAAC10cuFIAABYJwAAAHhtbC5zYXguaGFuZGxlci5EVERIYW5kbGVyLm5vdGF0aW9uRGVjbHLiSAAAKGppAQAAamoBAABYXgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LmhhbmRsZXIuaHRtbCN4bWwuc2F4LmhhbmRsZXIuRFRESGFuZGxlci5ub3RhdGlvbkRlY2xYAQAAAC10cuNIAABYDwAAAGxvbmcuYml0X2xlbmd0aHLkSAAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2xvbmcuYml0X2xlbmd0aFgBAAAALXRy5UgAAFggAAAAY2FsZW5kYXIuQ2FsZW5kYXIuaXRlcm1vbnRoZGF0ZXNy5kgAAChqaQEAAGpqAQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci5DYWxlbmRhci5pdGVybW9udGhkYXRlc1gBAAAALXRy50gAAFgeAAAAQ29va2llLkJhc2VDb29raWUudmFsdWVfZW5jb2RlcuhIAAAoamkBAABqagEAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZS5odG1sI0Nvb2tpZS5CYXNlQ29va2llLnZhbHVlX2VuY29kZVgBAAAALXRy6UgAAFgqAAAAdXJsbGliMi5IVFRQUmVkaXJlY3RIYW5kbGVyLmh0dHBfZXJyb3JfMzAxcupIAAAoamkBAABqagEAAFhZAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLkhUVFBSZWRpcmVjdEhhbmRsZXIuaHR0cF9lcnJvcl8zMDFYAQAAAC10cutIAABYFgAAAGN1cnNlcy5wYW5lbC5QYW5lbC50b3By7EgAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLnBhbmVsLmh0bWwjY3Vyc2VzLnBhbmVsLlBhbmVsLnRvcFgBAAAALXRy7UgAAFgkAAAAeG1sLmRvbS5wdWxsZG9tLkRPTUV2ZW50U3RyZWFtLnJlc2V0cu5IAAAoamkBAABqagEAAFhbAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20ucHVsbGRvbS5odG1sI3htbC5kb20ucHVsbGRvbS5ET01FdmVudFN0cmVhbS5yZXNldFgBAAAALXRy70gAAFgXAAAAZGF0ZXRpbWUuZGF0ZS50aW1ldHVwbGVy8EgAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRlLnRpbWV0dXBsZVgBAAAALXRy8UgAAFgTAAAAcGlwZXMuVGVtcGxhdGUub3BlbnLySAAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9waXBlcy5odG1sI3BpcGVzLlRlbXBsYXRlLm9wZW5YAQAAAC10cvNIAABYMQAAAFNpbXBsZUhUVFBTZXJ2ZXIuU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyLmRvX0hFQURy9EgAAChqaQEAAGpqAQAAWGkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2ltcGxlaHR0cHNlcnZlci5odG1sI1NpbXBsZUhUVFBTZXJ2ZXIuU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyLmRvX0hFQURYAQAAAC10cvVIAABYHgAAAHN5bXRhYmxlLlN5bWJvbC5nZXRfbmFtZXNwYWNlc3L2SAAAKGppAQAAamoBAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeW10YWJsZS5odG1sI3N5bXRhYmxlLlN5bWJvbC5nZXRfbmFtZXNwYWNlc1gBAAAALXRy90gAAFgbAAAAdGVsbmV0bGliLlRlbG5ldC5nZXRfc29ja2V0cvhIAAAoamkBAABqagEAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RlbG5ldGxpYi5odG1sI3RlbG5ldGxpYi5UZWxuZXQuZ2V0X3NvY2tldFgBAAAALXRy+UgAAFgPAAAAb2JqZWN0Ll9faWRpdl9fcvpIAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9faWRpdl9fWAEAAAAtdHL7SAAAWCkAAAB4bWwuc2F4LnhtbHJlYWRlci5JbnB1dFNvdXJjZS5zZXRQdWJsaWNJZHL8SAAAKGppAQAAamoBAABYXwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLklucHV0U291cmNlLnNldFB1YmxpY0lkWAEAAAAtdHL9SAAAWBoAAABzcWxpdGUzLkNvbm5lY3Rpb24uZXhlY3V0ZXL+SAAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy5Db25uZWN0aW9uLmV4ZWN1dGVYAQAAAC10cv9IAABYKAAAAE1pbWVXcml0ZXIuTWltZVdyaXRlci5zdGFydG11bHRpcGFydGJvZHlyAEkAAChqaQEAAGpqAQAAWFoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWltZXdyaXRlci5odG1sI01pbWVXcml0ZXIuTWltZVdyaXRlci5zdGFydG11bHRpcGFydGJvZHlYAQAAAC10cgFJAABYFgAAAGN1cnNlcy53aW5kb3cuc2Nyb2xsb2tyAkkAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5zY3JvbGxva1gBAAAALXRyA0kAAFgVAAAAdHRrLlRyZWV2aWV3LnRhZ19iaW5kcgRJAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5UcmVldmlldy50YWdfYmluZFgBAAAALXRyBUkAAFglAAAAZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuZXhlY3V0ZXIGSQAAKGppAQAAamoBAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmV4ZWN1dGVYAQAAAC10cgdJAABYEAAAAGNodW5rLkNodW5rLnNlZWtyCEkAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2h1bmsuaHRtbCNjaHVuay5DaHVuay5zZWVrWAEAAAAtdHIJSQAAWCAAAABnZXR0ZXh0Lk51bGxUcmFuc2xhdGlvbnMuaW5zdGFsbHIKSQAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZXR0ZXh0Lmh0bWwjZ2V0dGV4dC5OdWxsVHJhbnNsYXRpb25zLmluc3RhbGxYAQAAAC10cgtJAABYFgAAAG1haWxib3guTUguX19kZWxpdGVtX19yDEkAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTUguX19kZWxpdGVtX19YAQAAAC10cg1JAABYHwAAAG1haWxib3gubWJveE1lc3NhZ2UucmVtb3ZlX2ZsYWdyDkkAAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3gubWJveE1lc3NhZ2UucmVtb3ZlX2ZsYWdYAQAAAC10cg9JAABYJgAAAHdzZ2lyZWYuaGFuZGxlcnMuQmFzZUhhbmRsZXIuZ2V0X3N0ZGluchBJAAAoamkBAABqagEAAFhVAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLmdldF9zdGRpblgBAAAALXRyEUkAAFgfAAAAdXJsbGliMi5IVFRQU0hhbmRsZXIuaHR0cHNfb3BlbnISSQAAKGppAQAAamoBAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5IVFRQU0hhbmRsZXIuaHR0cHNfb3BlblgBAAAALXRyE0kAAFgdAAAAY2FsZW5kYXIuVGV4dENhbGVuZGFyLnBybW9udGhyFEkAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci5UZXh0Q2FsZW5kYXIucHJtb250aFgBAAAALXRyFUkAAHUoWBgAAABkYXRldGltZS5kYXRlLmlzb3dlZWtkYXlyFkkAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRlLmlzb3dlZWtkYXlYAQAAAC10chdJAABYFAAAAHJleGVjLlJFeGVjLnJfdW5sb2FkchhJAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JleGVjLmh0bWwjcmV4ZWMuUkV4ZWMucl91bmxvYWRYAQAAAC10chlJAABYFQAAAGxvZ2dpbmcuTG9nZ2VyLmZpbHRlcnIaSQAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5Mb2dnZXIuZmlsdGVyWAEAAAAtdHIbSQAAWBYAAAB1bml0dGVzdC5UZXN0U3VpdGUucnVuchxJAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdFN1aXRlLnJ1blgBAAAALXRyHUkAAFgOAAAAbWQ1Lm1kNS51cGRhdGVyHkkAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWQ1Lmh0bWwjbWQ1Lm1kNS51cGRhdGVYAQAAAC10ch9JAABYEwAAAG1haWxib3gubWJveC51bmxvY2tyIEkAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3gubWJveC51bmxvY2tYAQAAAC10ciFJAABYJAAAAG1vZHVsZWZpbmRlci5Nb2R1bGVGaW5kZXIucnVuX3NjcmlwdHIiSQAAKGppAQAAamoBAABYWAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tb2R1bGVmaW5kZXIuaHRtbCNtb2R1bGVmaW5kZXIuTW9kdWxlRmluZGVyLnJ1bl9zY3JpcHRYAQAAAC10ciNJAABYFAAAAG9iamVjdC5fX3JmbG9vcmRpdl9fciRJAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fcmZsb29yZGl2X19YAQAAAC10ciVJAABYHAAAAG11bHRpcHJvY2Vzc2luZy5Mb2NrLnJlbGVhc2VyJkkAAChqaQEAAGpqAQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLkxvY2sucmVsZWFzZVgBAAAALXRyJ0kAAFgZAAAAbXNpbGliLkRpcmVjdG9yeS5hZGRfZmlsZXIoSQAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuRGlyZWN0b3J5LmFkZF9maWxlWAEAAAAtdHIpSQAAWBQAAABubnRwbGliLk5OVFAueGd0aXRsZXIqSQAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ubnRwbGliLmh0bWwjbm50cGxpYi5OTlRQLnhndGl0bGVYAQAAAC10citJAABYEQAAAG1zaWxpYi5WaWV3LkZldGNocixJAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5WaWV3LkZldGNoWAEAAAAtdHItSQAAWBAAAABzZWxlY3QucG9sbC5wb2xsci5JAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NlbGVjdC5odG1sI3NlbGVjdC5wb2xsLnBvbGxYAQAAAC10ci9JAABYKgAAAG9zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2Uuc2V0cGFyYW1ldGVyc3IwSQAAKGppAQAAamoBAABYXQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vc3NhdWRpb2Rldi5odG1sI29zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2Uuc2V0cGFyYW1ldGVyc1gBAAAALXRyMUkAAFgUAAAAc3VuYXUuQVVfcmVhZC5yZXdpbmRyMkkAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VuYXUuaHRtbCNzdW5hdS5BVV9yZWFkLnJld2luZFgBAAAALXRyM0kAAFgWAAAAZGF0ZXRpbWUuZGF0ZXRpbWUudGltZXI0SQAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGV0aW1lLnRpbWVYAQAAAC10cjVJAABYFQAAAG1haWxib3guTWFpbGRpci5jbGVhbnI2SQAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsZGlyLmNsZWFuWAEAAAAtdHI3SQAAWBwAAAB0ZWxuZXRsaWIuVGVsbmV0Lm10X2ludGVyYWN0cjhJAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RlbG5ldGxpYi5odG1sI3RlbG5ldGxpYi5UZWxuZXQubXRfaW50ZXJhY3RYAQAAAC10cjlJAABYFAAAAG1obGliLkZvbGRlci5zZXRsYXN0cjpJAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21obGliLmh0bWwjbWhsaWIuRm9sZGVyLnNldGxhc3RYAQAAAC10cjtJAABYFAAAAGZyb3plbnNldC5kaWZmZXJlbmNlcjxJAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZnJvemVuc2V0LmRpZmZlcmVuY2VYAQAAAC10cj1JAABYIwAAAGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLmZvcm1hdF9oZWxwcj5JAAAoamkBAABqagEAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FyZ3BhcnNlLmh0bWwjYXJncGFyc2UuQXJndW1lbnRQYXJzZXIuZm9ybWF0X2hlbHBYAQAAAC10cj9JAABYEwAAAG1tYXAubW1hcC5yZWFkX2J5dGVyQEkAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbW1hcC5odG1sI21tYXAubW1hcC5yZWFkX2J5dGVYAQAAAC10ckFJAABYKQAAAHhtbC5zYXgueG1scmVhZGVyLklucHV0U291cmNlLmdldEVuY29kaW5nckJJAAAoamkBAABqagEAAFhfAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuSW5wdXRTb3VyY2UuZ2V0RW5jb2RpbmdYAQAAAC10ckNJAABYEQAAAG5udHBsaWIuTk5UUC5kYXRlckRJAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L25udHBsaWIuaHRtbCNubnRwbGliLk5OVFAuZGF0ZVgBAAAALXRyRUkAAFggAAAAc3ltdGFibGUuRnVuY3Rpb24uZ2V0X3BhcmFtZXRlcnNyRkkAAChqaQEAAGpqAQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3ltdGFibGUuaHRtbCNzeW10YWJsZS5GdW5jdGlvbi5nZXRfcGFyYW1ldGVyc1gBAAAALXRyR0kAAFgXAAAAZGF0ZXRpbWUudGltZS51dGNvZmZzZXRySEkAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS50aW1lLnV0Y29mZnNldFgBAAAALXRySUkAAFghAAAAZG9jdGVzdC5Eb2NUZXN0UGFyc2VyLmdldF9kb2N0ZXN0ckpJAAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LkRvY1Rlc3RQYXJzZXIuZ2V0X2RvY3Rlc3RYAQAAAC10cktJAABYEwAAAHR0ay5UcmVldmlldy5kZXRhY2hyTEkAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLlRyZWV2aWV3LmRldGFjaFgBAAAALXRyTUkAAFgZAAAAY3Vyc2VzLnBhbmVsLlBhbmVsLmJvdHRvbXJOSQAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMucGFuZWwuaHRtbCNjdXJzZXMucGFuZWwuUGFuZWwuYm90dG9tWAEAAAAtdHJPSQAAWB0AAABNaW5pQUVGcmFtZS5BRVNlcnZlci5jYWxsYmFja3JQSQAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW5pYWVmcmFtZS5odG1sI01pbmlBRUZyYW1lLkFFU2VydmVyLmNhbGxiYWNrWAEAAAAtdHJRSQAAWBoAAABlbWFpbC5tZXNzYWdlLk1lc3NhZ2Uua2V5c3JSSQAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5NZXNzYWdlLmtleXNYAQAAAC10clNJAABYFQAAAHR0ay5UcmVldmlldy5yZWF0dGFjaHJUSQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuVHJlZXZpZXcucmVhdHRhY2hYAQAAAC10clVJAABYGQAAAHhtbC5kb20uTmFtZWROb2RlTWFwLml0ZW1yVkkAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uTmFtZWROb2RlTWFwLml0ZW1YAQAAAC10cldJAABYEQAAAGlvLklPQmFzZS5fX2RlbF9fclhJAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uSU9CYXNlLl9fZGVsX19YAQAAAC10cllJAABYHgAAAG1haWxib3guQmFieWxNZXNzYWdlLmFkZF9sYWJlbHJaSQAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5CYWJ5bE1lc3NhZ2UuYWRkX2xhYmVsWAEAAAAtdHJbSQAAWBMAAABjdXJzZXMud2luZG93LnZsaW5lclxJAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cudmxpbmVYAQAAAC10cl1JAABYEwAAAGRlY2ltYWwuQ29udGV4dC5hZGRyXkkAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5hZGRYAQAAAC10cl9JAABYGgAAAGRlY2ltYWwuQ29udGV4dC5kaXZpZGVfaW50cmBJAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQuZGl2aWRlX2ludFgBAAAALXRyYUkAAFgJAAAAZmxvYXQuaGV4cmJJAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZmxvYXQuaGV4WAEAAAAtdHJjSQAAWCgAAAB3c2dpcmVmLnNpbXBsZV9zZXJ2ZXIuV1NHSVNlcnZlci5zZXRfYXBwcmRJAAAoamkBAABqagEAAFhXAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLnNpbXBsZV9zZXJ2ZXIuV1NHSVNlcnZlci5zZXRfYXBwWAEAAAAtdHJlSQAAWBwAAABkZWNpbWFsLkNvbnRleHQuc2FtZV9xdWFudHVtcmZJAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQuc2FtZV9xdWFudHVtWAEAAAAtdHJnSQAAWCcAAAB4bWwuZXRyZWUuRWxlbWVudFRyZWUuVHJlZUJ1aWxkZXIuY2xvc2VyaEkAAChqaQEAAGpqAQAAWGQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLlRyZWVCdWlsZGVyLmNsb3NlWAEAAAAtdHJpSQAAWBEAAABubnRwbGliLk5OVFAucG9zdHJqSQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ubnRwbGliLmh0bWwjbm50cGxpYi5OTlRQLnBvc3RYAQAAAC10cmtJAABYIgAAAGVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5nZXRfYm91bmRhcnlybEkAAChqaQEAAGpqAQAAWFcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS5nZXRfYm91bmRhcnlYAQAAAC10cm1JAABYDwAAAG9iamVjdC5fX3JjbXBfX3JuSQAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX3JjbXBfX1gBAAAALXRyb0kAAFgVAAAAc210cGxpYi5TTVRQLnN0YXJ0dGxzcnBJAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NtdHBsaWIuaHRtbCNzbXRwbGliLlNNVFAuc3RhcnR0bHNYAQAAAC10cnFJAABYJAAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50LmFwcGVuZHJySQAAKGppAQAAamoBAABYYQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC5hcHBlbmRYAQAAAC10cnNJAABYHgAAAGN0eXBlcy5fQ0RhdGEuZnJvbV9idWZmZXJfY29weXJ0SQAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuX0NEYXRhLmZyb21fYnVmZmVyX2NvcHlYAQAAAC10cnVJAABYEQAAAENvbm5lY3Rpb24uZmlsZW5vcnZJAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI0Nvbm5lY3Rpb24uZmlsZW5vWAEAAAAtdHJ3SQAAWA4AAABvYmplY3QuX19jbXBfX3J4SQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2NtcF9fWAEAAAAtdHJ5SQAAWBYAAABzaGxleC5zaGxleC5yZWFkX3Rva2VucnpJAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NobGV4Lmh0bWwjc2hsZXguc2hsZXgucmVhZF90b2tlblgBAAAALXRye0kAAFgNAAAAc2xpY2UuaW5kaWNlc3J8SQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI3NsaWNlLmluZGljZXNYAQAAAC10cn1JAABYGgAAAGVtYWlsLm1lc3NhZ2UuTWVzc2FnZS53YWxrcn5JAAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2Uud2Fsa1gBAAAALXRyf0kAAFgUAAAAc3VuYXUuQVVfd3JpdGUuY2xvc2VygEkAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3VuYXUuaHRtbCNzdW5hdS5BVV93cml0ZS5jbG9zZVgBAAAALXRygUkAAFghAAAAb3NzYXVkaW9kZXYub3NzX2F1ZGlvX2RldmljZS5zeW5jcoJJAAAoamkBAABqagEAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29zc2F1ZGlvZGV2Lmh0bWwjb3NzYXVkaW9kZXYub3NzX2F1ZGlvX2RldmljZS5zeW5jWAEAAAAtdHKDSQAAWBgAAABhc3luY2hhdC5hc3luY19jaGF0LnB1c2hyhEkAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXN5bmNoYXQuaHRtbCNhc3luY2hhdC5hc3luY19jaGF0LnB1c2hYAQAAAC10coVJAABYFQAAAGN1cnNlcy53aW5kb3cuZ2V0YmtnZHKGSQAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmdldGJrZ2RYAQAAAC10codJAABYIAAAAG1haWxib3guTWFpbGRpck1lc3NhZ2Uuc2V0X2ZsYWdzcohJAAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxkaXJNZXNzYWdlLnNldF9mbGFnc1gBAAAALXRyiUkAAFguAAAAeG1sLnNheC54bWxyZWFkZXIuQXR0cmlidXRlc05TLmdldFZhbHVlQnlRTmFtZXKKSQAAKGppAQAAamoBAABYZAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLkF0dHJpYnV0ZXNOUy5nZXRWYWx1ZUJ5UU5hbWVYAQAAAC10cotJAABYFwAAAG1obGliLkZvbGRlci5zZXRjdXJyZW50coxJAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21obGliLmh0bWwjbWhsaWIuRm9sZGVyLnNldGN1cnJlbnRYAQAAAC10co1JAABYKwAAAENvbmZpZ1BhcnNlci5SYXdDb25maWdQYXJzZXIucmVtb3ZlX3NlY3Rpb25yjkkAAChqaQEAAGpqAQAAWF8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjQ29uZmlnUGFyc2VyLlJhd0NvbmZpZ1BhcnNlci5yZW1vdmVfc2VjdGlvblgBAAAALXRyj0kAAFgcAAAAbWltZXRvb2xzLk1lc3NhZ2UuZ2V0c3VidHlwZXKQSQAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW1ldG9vbHMuaHRtbCNtaW1ldG9vbHMuTWVzc2FnZS5nZXRzdWJ0eXBlWAEAAAAtdHKRSQAAWCsAAABDR0lIVFRQU2VydmVyLkNHSUhUVFBSZXF1ZXN0SGFuZGxlci5kb19QT1NUcpJJAAAoamkBAABqagEAAFhgAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NnaWh0dHBzZXJ2ZXIuaHRtbCNDR0lIVFRQU2VydmVyLkNHSUhUVFBSZXF1ZXN0SGFuZGxlci5kb19QT1NUWAEAAAAtdHKTSQAAWBgAAABzZ21sbGliLlNHTUxQYXJzZXIuY2xvc2VylEkAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2dtbGxpYi5odG1sI3NnbWxsaWIuU0dNTFBhcnNlci5jbG9zZVgBAAAALXRylUkAAFgxAAAAQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5lbmRfaGVhZGVyc3KWSQAAKGppAQAAamoBAABYZwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXNlaHR0cHNlcnZlci5odG1sI0Jhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuZW5kX2hlYWRlcnNYAQAAAC10cpdJAABYHgAAAHhkcmxpYi5VbnBhY2tlci51bnBhY2tfZnN0cmluZ3KYSQAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94ZHJsaWIuaHRtbCN4ZHJsaWIuVW5wYWNrZXIudW5wYWNrX2ZzdHJpbmdYAQAAAC10cplJAABYIAAAAGNvb2tpZWxpYi5Db29raWVQb2xpY3kucmV0dXJuX29rcppJAAAoamkBAABqagEAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5Db29raWVQb2xpY3kucmV0dXJuX29rWAEAAAAtdHKbSQAAWB8AAABmb3JtYXR0ZXIuZm9ybWF0dGVyLnNldF9zcGFjaW5ncpxJAAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Zvcm1hdHRlci5odG1sI2Zvcm1hdHRlci5mb3JtYXR0ZXIuc2V0X3NwYWNpbmdYAQAAAC10cp1JAABYEgAAAGlvLklPQmFzZS5yZWFkYWJsZXKeSQAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pby5odG1sI2lvLklPQmFzZS5yZWFkYWJsZVgBAAAALXRyn0kAAFggAAAAY29va2llbGliLkNvb2tpZUphci5tYWtlX2Nvb2tpZXNyoEkAAChqaQEAAGpqAQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llbGliLmh0bWwjY29va2llbGliLkNvb2tpZUphci5tYWtlX2Nvb2tpZXNYAQAAAC10cqFJAABYHwAAAHRlbG5ldGxpYi5UZWxuZXQuc2V0X2RlYnVnbGV2ZWxyokkAAChqaQEAAGpqAQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGVsbmV0bGliLmh0bWwjdGVsbmV0bGliLlRlbG5ldC5zZXRfZGVidWdsZXZlbFgBAAAALXRyo0kAAFgRAAAAb2JqZWN0Ll9fcnNoaWZ0X19ypEkAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19yc2hpZnRfX1gBAAAALXRypUkAAFgZAAAAZGVjaW1hbC5Db250ZXh0Lm5vcm1hbGl6ZXKmSQAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0Lm5vcm1hbGl6ZVgBAAAALXRyp0kAAFgUAAAAaW1hcGxpYi5JTUFQNC5zZWFyY2hyqEkAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQuc2VhcmNoWAEAAAAtdHKpSQAAWBgAAABtc2lsaWIuRGlhbG9nLnJhZGlvZ3JvdXByqkkAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLkRpYWxvZy5yYWRpb2dyb3VwWAEAAAAtdHKrSQAAWA8AAABjbWQuQ21kLmNtZGxvb3ByrEkAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY21kLmh0bWwjY21kLkNtZC5jbWRsb29wWAEAAAAtdHKtSQAAWBkAAABmbC5mb3JtLnNldF9mb3JtX3Bvc2l0aW9ucq5JAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZsLmh0bWwjZmwuZm9ybS5zZXRfZm9ybV9wb3NpdGlvblgBAAAALXRyr0kAAFgbAAAAZGF0ZXRpbWUuZGF0ZXRpbWUuaXNvZm9ybWF0crBJAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZXRpbWUuaXNvZm9ybWF0WAEAAAAtdHKxSQAAWB8AAABvcHRwYXJzZS5PcHRpb25QYXJzZXIuc2V0X3VzYWdlcrJJAAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UuT3B0aW9uUGFyc2VyLnNldF91c2FnZVgBAAAALXRys0kAAFgeAAAAZGVjaW1hbC5Db250ZXh0LmNyZWF0ZV9kZWNpbWFscrRJAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQuY3JlYXRlX2RlY2ltYWxYAQAAAC10crVJAABYHAAAAGRlY2ltYWwuRGVjaW1hbC5udW1iZXJfY2xhc3NytkkAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5udW1iZXJfY2xhc3NYAQAAAC10crdJAABYGwAAAGRlY2ltYWwuRGVjaW1hbC5pc19pbmZpbml0ZXK4SQAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLmlzX2luZmluaXRlWAEAAAAtdHK5SQAAWB8AAABtYWlsYm94Lk1haWxkaXJNZXNzYWdlLmdldF9kYXRlcrpJAAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxkaXJNZXNzYWdlLmdldF9kYXRlWAEAAAAtdHK7SQAAWCQAAABjYWxlbmRhci5DYWxlbmRhci5tb250aGRheXMyY2FsZW5kYXJyvEkAAChqaQEAAGpqAQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci5DYWxlbmRhci5tb250aGRheXMyY2FsZW5kYXJYAQAAAC10cr1JAABYEQAAAHNtdHBsaWIuU01UUC5xdWl0cr5JAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NtdHBsaWIuaHRtbCNzbXRwbGliLlNNVFAucXVpdFgBAAAALXRyv0kAAFgvAAAAbG9nZ2luZy5oYW5kbGVycy5Sb3RhdGluZ0ZpbGVIYW5kbGVyLmRvUm9sbG92ZXJywEkAAChqaQEAAGpqAQAAWGcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuUm90YXRpbmdGaWxlSGFuZGxlci5kb1JvbGxvdmVyWAEAAAAtdHLBSQAAWBEAAABRdWV1ZS5RdWV1ZS5lbXB0eXLCSQAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9xdWV1ZS5odG1sI1F1ZXVlLlF1ZXVlLmVtcHR5WAEAAAAtdHLDSQAAWBYAAABhaWZjLmFpZmMuc2V0c2FtcHdpZHRocsRJAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FpZmMuaHRtbCNhaWZjLmFpZmMuc2V0c2FtcHdpZHRoWAEAAAAtdHLFSQAAWCUAAAB3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLnNlbmRmaWxlcsZJAAAoamkBAABqagEAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLnNlbmRmaWxlWAEAAAAtdHLHSQAAWBkAAABzcWxpdGUzLkNvbm5lY3Rpb24uY3Vyc29ycshJAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLkNvbm5lY3Rpb24uY3Vyc29yWAEAAAAtdHLJSQAAWAgAAABzdHIuZmluZHLKSQAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0ci5maW5kWAEAAAAtdHLLSQAAWBQAAAByZS5NYXRjaE9iamVjdC5zdGFydHLMSQAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sI3JlLk1hdGNoT2JqZWN0LnN0YXJ0WAEAAAAtdHLNSQAAWBYAAABsb2dnaW5nLkhhbmRsZXIuZm9ybWF0cs5JAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkhhbmRsZXIuZm9ybWF0WAEAAAAtdHLPSQAAWCcAAABvc3NhdWRpb2Rldi5vc3NfbWl4ZXJfZGV2aWNlLmdldF9yZWNzcmNy0EkAAChqaQEAAGpqAQAAWFoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3NzYXVkaW9kZXYuaHRtbCNvc3NhdWRpb2Rldi5vc3NfbWl4ZXJfZGV2aWNlLmdldF9yZWNzcmNYAQAAAC10ctFJAABYFgAAAGJzZGRiLmJzZGRib2JqZWN0Lmxhc3Ry0kkAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYnNkZGIuaHRtbCNic2RkYi5ic2RkYm9iamVjdC5sYXN0WAEAAAAtdHLTSQAAWBkAAABzb2NrZXQuc29ja2V0LmdldHNvY2tuYW1lctRJAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5zb2NrZXQuZ2V0c29ja25hbWVYAQAAAC10ctVJAABYIgAAAGVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5nZXRfY2hhcnNldHNy1kkAAChqaQEAAGpqAQAAWFcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS5nZXRfY2hhcnNldHNYAQAAAC10ctdJAABYLAAAAHhtbC5kb20uRE9NSW1wbGVtZW50YXRpb24uY3JlYXRlRG9jdW1lbnRUeXBlcthJAAAoamkBAABqagEAAFhbAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkRPTUltcGxlbWVudGF0aW9uLmNyZWF0ZURvY3VtZW50VHlwZVgBAAAALXRy2UkAAFgKAAAAZmlsZS53cml0ZXLaSQAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2ZpbGUud3JpdGVYAQAAAC10cttJAABYCwAAAGZpbGUuZmlsZW5vctxJAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZmlsZS5maWxlbm9YAQAAAC10ct1JAABYIwAAAFNvY2tldFNlcnZlci5CYXNlU2VydmVyLmdldF9yZXF1ZXN0ct5JAAAoamkBAABqagEAAFhXAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI1NvY2tldFNlcnZlci5CYXNlU2VydmVyLmdldF9yZXF1ZXN0WAEAAAAtdHLfSQAAWCMAAAB4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuR2V0QmFzZXLgSQAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkdldEJhc2VYAQAAAC10cuFJAABYEgAAAG1zaWxpYi5EaWFsb2cubGluZXLiSQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuRGlhbG9nLmxpbmVYAQAAAC10cuNJAABYNQAAAG11bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5TeW5jTWFuYWdlci5Cb3VuZGVkU2VtYXBob3JlcuRJAAAoamkBAABqagEAAFhsAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5TeW5jTWFuYWdlci5Cb3VuZGVkU2VtYXBob3JlWAEAAAAtdHLlSQAAWCQAAABmb3JtYXR0ZXIuZm9ybWF0dGVyLmFkZF9saXRlcmFsX2RhdGFy5kkAAChqaQEAAGpqAQAAWFUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZm9ybWF0dGVyLmh0bWwjZm9ybWF0dGVyLmZvcm1hdHRlci5hZGRfbGl0ZXJhbF9kYXRhWAEAAAAtdHLnSQAAWC4AAABvcHRwYXJzZS5PcHRpb25QYXJzZXIuZW5hYmxlX2ludGVyc3BlcnNlZF9hcmdzcuhJAAAoamkBAABqagEAAFheAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UuT3B0aW9uUGFyc2VyLmVuYWJsZV9pbnRlcnNwZXJzZWRfYXJnc1gBAAAALXRy6UkAAFgYAAAAdW5pdHRlc3QuVGVzdFN1aXRlLmRlYnVncupJAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdFN1aXRlLmRlYnVnWAEAAAAtdHLrSQAAWBoAAABkZWNpbWFsLkRlY2ltYWwubmV4dF9taW51c3LsSQAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLm5leHRfbWludXNYAQAAAC10cu1JAABYIgAAAG9zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2UuY2xvc2Vy7kkAAChqaQEAAGpqAQAAWFUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3NzYXVkaW9kZXYuaHRtbCNvc3NhdWRpb2Rldi5vc3NfYXVkaW9fZGV2aWNlLmNsb3NlWAEAAAAtdHLvSQAAWCQAAABmcmFjdGlvbnMuRnJhY3Rpb24ubGltaXRfZGVub21pbmF0b3Jy8EkAAChqaQEAAGpqAQAAWFUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnJhY3Rpb25zLmh0bWwjZnJhY3Rpb25zLkZyYWN0aW9uLmxpbWl0X2Rlbm9taW5hdG9yWAEAAAAtdHLxSQAAWA0AAABzdHIudHJhbnNsYXRlcvJJAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLnRyYW5zbGF0ZVgBAAAALXRy80kAAFggAAAAaHR0cGxpYi5IVFRQQ29ubmVjdGlvbi5wdXRoZWFkZXJy9EkAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHR0cGxpYi5odG1sI2h0dHBsaWIuSFRUUENvbm5lY3Rpb24ucHV0aGVhZGVyWAEAAAAtdHL1SQAAWBcAAABzeW10YWJsZS5TeW1ib2wuaXNfZnJlZXL2SQAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeW10YWJsZS5odG1sI3N5bXRhYmxlLlN5bWJvbC5pc19mcmVlWAEAAAAtdHL3SQAAWCwAAABjb29raWVsaWIuRGVmYXVsdENvb2tpZVBvbGljeS5pc19ub3RfYWxsb3dlZHL4SQAAKGppAQAAamoBAABYXQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuRGVmYXVsdENvb2tpZVBvbGljeS5pc19ub3RfYWxsb3dlZFgBAAAALXRy+UkAAFgeAAAAYnoyLkJaMkRlY29tcHJlc3Nvci5kZWNvbXByZXNzcvpJAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2J6Mi5odG1sI2J6Mi5CWjJEZWNvbXByZXNzb3IuZGVjb21wcmVzc1gBAAAALXRy+0kAAFgWAAAAaW8uVGV4dElPQmFzZS5yZWFkbGluZXL8SQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pby5odG1sI2lvLlRleHRJT0Jhc2UucmVhZGxpbmVYAQAAAC10cv1JAABYIQAAAGVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5fX2dldGl0ZW1fX3L+SQAAKGppAQAAamoBAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5NZXNzYWdlLl9fZ2V0aXRlbV9fWAEAAAAtdHL/SQAAWA8AAABhaWZjLmFpZmMuY2xvc2VyAEoAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWlmYy5odG1sI2FpZmMuYWlmYy5jbG9zZVgBAAAALXRyAUoAAFgPAAAAb2JqZWN0Ll9fcmRpdl9fcgJKAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fcmRpdl9fWAEAAAAtdHIDSgAAWCMAAABGcmFtZVdvcmsuU2Nyb2xsZWRXaW5kb3cuc2Nyb2xsYmFyc3IESgAAKGppAQAAamoBAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcmFtZXdvcmsuaHRtbCNGcmFtZVdvcmsuU2Nyb2xsZWRXaW5kb3cuc2Nyb2xsYmFyc1gBAAAALXRyBUoAAFgpAAAAbG9nZ2luZy5oYW5kbGVycy5Sb3RhdGluZ0ZpbGVIYW5kbGVyLmVtaXRyBkoAAChqaQEAAGpqAQAAWGEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuUm90YXRpbmdGaWxlSGFuZGxlci5lbWl0WAEAAAAtdHIHSgAAWB8AAABjb21waWxlci5hc3QuTm9kZS5nZXRDaGlsZE5vZGVzcghKAAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbXBpbGVyLmh0bWwjY29tcGlsZXIuYXN0Lk5vZGUuZ2V0Q2hpbGROb2Rlc1gBAAAALXRyCUoAAFgXAAAAbG9nZ2luZy5IYW5kbGVyLnJlbGVhc2VyCkoAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuSGFuZGxlci5yZWxlYXNlWAEAAAAtdHILSgAAWCMAAABsb2dnaW5nLmhhbmRsZXJzLlNvY2tldEhhbmRsZXIuc2VuZHIMSgAAKGppAQAAamoBAABYWwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5Tb2NrZXRIYW5kbGVyLnNlbmRYAQAAAC10cg1KAABYCQAAAHN0ci51cHBlcnIOSgAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0ci51cHBlclgBAAAALXRyD0oAAFgXAAAAbXNpbGliLlJlY29yZC5DbGVhckRhdGFyEEoAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLlJlY29yZC5DbGVhckRhdGFYAQAAAC10chFKAABYFAAAAGR1bWJkYm0uZHVtYmRibS5zeW5jchJKAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2R1bWJkYm0uaHRtbCNkdW1iZGJtLmR1bWJkYm0uc3luY1gBAAAALXRyE0oAAFgOAAAAZGljdC52aWV3aXRlbXNyFEoAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNkaWN0LnZpZXdpdGVtc1gBAAAALXRyFUoAAFgXAAAAb2JqZWN0Ll9fZ2V0YXR0cmlidXRlX19yFkoAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19nZXRhdHRyaWJ1dGVfX1gBAAAALXRyF0oAAFgxAAAAQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5zZW5kX2hlYWRlcnIYSgAAKGppAQAAamoBAABYZwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXNlaHR0cHNlcnZlci5odG1sI0Jhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuc2VuZF9oZWFkZXJYAQAAAC10chlKAABYFwAAAG1haWxib3guTWFpbGJveC5kaXNjYXJkchpKAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxib3guZGlzY2FyZFgBAAAALXRyG0oAAFgbAAAAc3VuYXUuQVVfd3JpdGUuc2V0c2FtcHdpZHRochxKAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUuQVVfd3JpdGUuc2V0c2FtcHdpZHRoWAEAAAAtdHIdSgAAWCMAAABsb2dnaW5nLmhhbmRsZXJzLlNvY2tldEhhbmRsZXIuZW1pdHIeSgAAKGppAQAAamoBAABYWwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5Tb2NrZXRIYW5kbGVyLmVtaXRYAQAAAC10ch9KAABYFgAAAGN1cnNlcy53aW5kb3cuaW5zZGVsbG5yIEoAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5pbnNkZWxsblgBAAAALXRyIUoAAFgnAAAAbG9nZ2luZy5oYW5kbGVycy5OVEV2ZW50TG9nSGFuZGxlci5lbWl0ciJKAAAoamkBAABqagEAAFhfAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLk5URXZlbnRMb2dIYW5kbGVyLmVtaXRYAQAAAC10ciNKAABYFAAAAHNlbGVjdC5rcXVldWUuZnJvbWZkciRKAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NlbGVjdC5odG1sI3NlbGVjdC5rcXVldWUuZnJvbWZkWAEAAAAtdHIlSgAAWCQAAAByZmM4MjIuTWVzc2FnZS5nZXRhbGxtYXRjaGluZ2hlYWRlcnNyJkoAAChqaQEAAGpqAQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmZjODIyLmh0bWwjcmZjODIyLk1lc3NhZ2UuZ2V0YWxsbWF0Y2hpbmdoZWFkZXJzWAEAAAAtdHInSgAAWA4AAABzdHIuc3RhcnRzd2l0aHIoSgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0ci5zdGFydHN3aXRoWAEAAAAtdHIpSgAAWBIAAABiZGIuQmRiLmdldF9icmVha3NyKkoAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYi5nZXRfYnJlYWtzWAEAAAAtdHIrSgAAWBkAAABtdWx0aXByb2Nlc3NpbmcuUXVldWUucHV0cixKAAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5RdWV1ZS5wdXRYAQAAAC10ci1KAABYJAAAAGFzeW5jaGF0LmFzeW5jX2NoYXQuZm91bmRfdGVybWluYXRvcnIuSgAAKGppAQAAamoBAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hc3luY2hhdC5odG1sI2FzeW5jaGF0LmFzeW5jX2NoYXQuZm91bmRfdGVybWluYXRvclgBAAAALXRyL0oAAFgZAAAAbG9nZ2luZy5IYW5kbGVyLmFkZEZpbHRlcnIwSgAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5IYW5kbGVyLmFkZEZpbHRlclgBAAAALXRyMUoAAFgcAAAAbWFpbGJveC5tYm94TWVzc2FnZS5zZXRfZnJvbXIySgAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5tYm94TWVzc2FnZS5zZXRfZnJvbVgBAAAALXRyM0oAAFgdAAAAY29tcGlsZXIuYXN0Lk5vZGUuZ2V0Q2hpbGRyZW5yNEoAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29tcGlsZXIuaHRtbCNjb21waWxlci5hc3QuTm9kZS5nZXRDaGlsZHJlblgBAAAALXRyNUoAAFgTAAAAYmRiLkJkYi5jbGVhcl9icmVha3I2SgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iZGIuaHRtbCNiZGIuQmRiLmNsZWFyX2JyZWFrWAEAAAAtdHI3SgAAWBkAAABpbXB1dGlsLkltcG9ydGVyLmdldF9jb2RlcjhKAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltcHV0aWwuaHRtbCNpbXB1dGlsLkltcG9ydGVyLmdldF9jb2RlWAEAAAAtdHI5SgAAWBUAAAB0YXJmaWxlLlRhckluZm8uaXNibGtyOkoAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuVGFySW5mby5pc2Jsa1gBAAAALXRyO0oAAFgQAAAAdHRrLk5vdGVib29rLmFkZHI8SgAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuTm90ZWJvb2suYWRkWAEAAAAtdHI9SgAAWCkAAABtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuU3luY01hbmFnZXIuTG9ja3I+SgAAKGppAQAAamoBAABYYAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuU3luY01hbmFnZXIuTG9ja1gBAAAALXRyP0oAAFgYAAAAc29ja2V0LnNvY2tldC5zZXRzb2Nrb3B0ckBKAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5zb2NrZXQuc2V0c29ja29wdFgBAAAALXRyQUoAAFgYAAAAcHN0YXRzLlN0YXRzLnByaW50X3N0YXRzckJKAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Byb2ZpbGUuaHRtbCNwc3RhdHMuU3RhdHMucHJpbnRfc3RhdHNYAQAAAC10ckNKAABYEgAAAGN1cnNlcy53aW5kb3cuYmtnZHJESgAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmJrZ2RYAQAAAC10ckVKAABYMAAAAEJhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuc2VuZF9lcnJvcnJGSgAAKGppAQAAamoBAABYZgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXNlaHR0cHNlcnZlci5odG1sI0Jhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuc2VuZF9lcnJvclgBAAAALXRyR0oAAFgRAAAAYmRiLkJkYi5nZXRfc3RhY2tySEoAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYi5nZXRfc3RhY2tYAQAAAC10cklKAABYEAAAAHR0ay5UcmVldmlldy5zZXRySkoAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLlRyZWV2aWV3LnNldFgBAAAALXRyS0oAAFgSAAAAZGVjaW1hbC5EZWNpbWFsLmxuckxKAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwubG5YAQAAAC10ck1KAABYLAAAAHhtbC5zYXguaGFuZGxlci5Db250ZW50SGFuZGxlci5zdGFydERvY3VtZW50ck5KAAAoamkBAABqagEAAFhjAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5odG1sI3htbC5zYXguaGFuZGxlci5Db250ZW50SGFuZGxlci5zdGFydERvY3VtZW50WAEAAAAtdHJPSgAAWBUAAABiZGIuQnJlYWtwb2ludC5lbmFibGVyUEoAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJyZWFrcG9pbnQuZW5hYmxlWAEAAAAtdHJRSgAAWBAAAAB0dGsuVHJlZXZpZXcuc2VlclJKAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5UcmVldmlldy5zZWVYAQAAAC10clNKAABYHAAAAGFzeW5jb3JlLmRpc3BhdGNoZXIud3JpdGFibGVyVEoAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXN5bmNvcmUuaHRtbCNhc3luY29yZS5kaXNwYXRjaGVyLndyaXRhYmxlWAEAAAAtdHJVSgAAWBUAAABDb25uZWN0aW9uLnNlbmRfYnl0ZXNyVkoAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjQ29ubmVjdGlvbi5zZW5kX2J5dGVzWAEAAAAtdHJXSgAAWBwAAAB1bml0dGVzdC5UZXN0Q2FzZS5kb0NsZWFudXBzclhKAAAoamkBAABqagEAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UuZG9DbGVhbnVwc1gBAAAALXRyWUoAAFgVAAAAZnRwbGliLkZUUC5nZXR3ZWxjb21lclpKAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z0cGxpYi5odG1sI2Z0cGxpYi5GVFAuZ2V0d2VsY29tZVgBAAAALXRyW0oAAFgoAAAAeG1scnBjbGliLlNlcnZlclByb3h5LnN5c3RlbS5saXN0TWV0aG9kc3JcSgAAKGppAQAAamoBAABYWQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWxycGNsaWIuaHRtbCN4bWxycGNsaWIuU2VydmVyUHJveHkuc3lzdGVtLmxpc3RNZXRob2RzWAEAAAAtdHJdSgAAWCkAAAB4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudFRyZWUuZmluZGFsbHJeSgAAKGppAQAAamoBAABYZgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudFRyZWUuZmluZGFsbFgBAAAALXRyX0oAAFgUAAAAZGVjaW1hbC5Db250ZXh0LnBsdXNyYEoAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5wbHVzWAEAAAAtdHJhSgAAWBkAAAByZmM4MjIuTWVzc2FnZS5nZXRkYXRlX3R6cmJKAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JmYzgyMi5odG1sI3JmYzgyMi5NZXNzYWdlLmdldGRhdGVfdHpYAQAAAC10cmNKAABYIQAAAHhtbC5kb20uRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGVOU3JkSgAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZU5TWAEAAAAtdHJlSgAAWBYAAABzb2NrZXQuc29ja2V0Lm1ha2VmaWxlcmZKAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5zb2NrZXQubWFrZWZpbGVYAQAAAC10cmdKAABYFQAAAEZyYW1lV29yay5XaW5kb3cub3BlbnJoSgAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcmFtZXdvcmsuaHRtbCNGcmFtZVdvcmsuV2luZG93Lm9wZW5YAQAAAC10cmlKAABYIwAAAGNhbGVuZGFyLkNhbGVuZGFyLm1vbnRoZGF5c2NhbGVuZGFycmpKAAAoamkBAABqagEAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhbGVuZGFyLmh0bWwjY2FsZW5kYXIuQ2FsZW5kYXIubW9udGhkYXlzY2FsZW5kYXJYAQAAAC10cmtKAABYEwAAAG9iamVjdC5fX2NvbnRhaW5zX19ybEoAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19jb250YWluc19fWAEAAAAtdHJtSgAAWBEAAAB0dGsuTm90ZWJvb2sudGFic3JuSgAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuTm90ZWJvb2sudGFic1gBAAAALXRyb0oAAFgiAAAAYXN5bmNoYXQuYXN5bmNfY2hhdC5zZXRfdGVybWluYXRvcnJwSgAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hc3luY2hhdC5odG1sI2FzeW5jaGF0LmFzeW5jX2NoYXQuc2V0X3Rlcm1pbmF0b3JYAQAAAC10cnFKAABYEQAAAG5udHBsaWIuTk5UUC5zdGF0cnJKAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L25udHBsaWIuaHRtbCNubnRwbGliLk5OVFAuc3RhdFgBAAAALXRyc0oAAFgWAAAAZGVjaW1hbC5Db250ZXh0LnNjYWxlYnJ0SgAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LnNjYWxlYlgBAAAALXRydUoAAFgbAAAAdGhyZWFkaW5nLkNvbmRpdGlvbi5hY3F1aXJlcnZKAAAoamkBAABqagEAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5Db25kaXRpb24uYWNxdWlyZVgBAAAALXRyd0oAAFgWAAAAaW1hcGxpYi5JTUFQNC5nZXRxdW90YXJ4SgAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5nZXRxdW90YVgBAAAALXRyeUoAAFgmAAAAU29ja2V0U2VydmVyLkJhc2VTZXJ2ZXIuaGFuZGxlX3RpbWVvdXRyekoAAChqaQEAAGpqAQAAWFoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0c2VydmVyLmh0bWwjU29ja2V0U2VydmVyLkJhc2VTZXJ2ZXIuaGFuZGxlX3RpbWVvdXRYAQAAAC10cntKAABYJgAAAHhtbC5zYXgueG1scmVhZGVyLkF0dHJpYnV0ZXMuZ2V0TGVuZ3RocnxKAAAoamkBAABqagEAAFhcAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuQXR0cmlidXRlcy5nZXRMZW5ndGhYAQAAAC10cn1KAABYEwAAAGFpZmMuYWlmYy5nZXRwYXJhbXNyfkoAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWlmYy5odG1sI2FpZmMuYWlmYy5nZXRwYXJhbXNYAQAAAC10cn9KAABYKwAAAG11bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5CYXNlUHJveHkuX19yZXByX19ygEoAAChqaQEAAGpqAQAAWGIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLkJhc2VQcm94eS5fX3JlcHJfX1gBAAAALXRygUoAAFggAAAAc210cGQuU01UUFNlcnZlci5wcm9jZXNzX21lc3NhZ2VygkoAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc210cGQuaHRtbCNzbXRwZC5TTVRQU2VydmVyLnByb2Nlc3NfbWVzc2FnZVgBAAAALXRyg0oAAFgjAAAAZW1haWwuY2hhcnNldC5DaGFyc2V0LmhlYWRlcl9lbmNvZGVyhEoAAChqaQEAAGpqAQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwuY2hhcnNldC5odG1sI2VtYWlsLmNoYXJzZXQuQ2hhcnNldC5oZWFkZXJfZW5jb2RlWAEAAAAtdHKFSgAAWBYAAABic2RkYi5ic2RkYm9iamVjdC5rZXlzcoZKAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JzZGRiLmh0bWwjYnNkZGIuYnNkZGJvYmplY3Qua2V5c1gBAAAALXRyh0oAAFghAAAAZW1haWwubWVzc2FnZS5NZXNzYWdlLmdldF9wYXlsb2FkcohKAAAoamkBAABqagEAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuZ2V0X3BheWxvYWRYAQAAAC10colKAABYEwAAAGN1cnNlcy53aW5kb3cuZ2V0Y2hyikoAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5nZXRjaFgBAAAALXRyi0oAAFgeAAAARnJhbWVXb3JrLldpbmRvdy5kb19wb3N0cmVzaXplcoxKAAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZyYW1ld29yay5odG1sI0ZyYW1lV29yay5XaW5kb3cuZG9fcG9zdHJlc2l6ZVgBAAAALXRyjUoAAFgKAAAAZGwuZGwuY2FsbHKOSgAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kbC5odG1sI2RsLmRsLmNhbGxYAQAAAC10co9KAABYKwAAAGNvZGUuSW50ZXJhY3RpdmVJbnRlcnByZXRlci5zaG93c3ludGF4ZXJyb3JykEoAAChqaQEAAGpqAQAAWFcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZS5odG1sI2NvZGUuSW50ZXJhY3RpdmVJbnRlcnByZXRlci5zaG93c3ludGF4ZXJyb3JYAQAAAC10cpFKAABYDgAAAG9iamVjdC5fX25lZ19fcpJKAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fbmVnX19YAQAAAC10cpNKAABYKAAAAG1pbWV0eXBlcy5NaW1lVHlwZXMuZ3Vlc3NfYWxsX2V4dGVuc2lvbnNylEoAAChqaQEAAGpqAQAAWFkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWltZXR5cGVzLmh0bWwjbWltZXR5cGVzLk1pbWVUeXBlcy5ndWVzc19hbGxfZXh0ZW5zaW9uc1gBAAAALXRylUoAAFghAAAAZGVjaW1hbC5Db250ZXh0LnRvX2ludGVncmFsX2V4YWN0cpZKAAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQudG9faW50ZWdyYWxfZXhhY3RYAQAAAC10cpdKAABYEQAAAGltYXBsaWIuSU1BUDQudWlkcphKAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LnVpZFgBAAAALXRymUoAAFgcAAAAY29kZS5JbnRlcmFjdGl2ZUNvbnNvbGUucHVzaHKaSgAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlLmh0bWwjY29kZS5JbnRlcmFjdGl2ZUNvbnNvbGUucHVzaFgBAAAALXRym0oAAFgOAAAAc3RyLmV4cGFuZHRhYnNynEoAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNzdHIuZXhwYW5kdGFic1gBAAAALXRynUoAAFgOAAAAZGljdC5pdGVyaXRlbXNynkoAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNkaWN0Lml0ZXJpdGVtc1gBAAAALXRyn0oAAFgpAAAAeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQuZ2V0aXRlcmF0b3JyoEoAAChqaQEAAGpqAQAAWGYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQuZ2V0aXRlcmF0b3JYAQAAAC10cqFKAABYHAAAAGVtYWlsLmNoYXJzZXQuQ2hhcnNldC5fX25lX19yokoAAChqaQEAAGpqAQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwuY2hhcnNldC5odG1sI2VtYWlsLmNoYXJzZXQuQ2hhcnNldC5fX25lX19YAQAAAC10cqNKAABYDwAAAG9iamVjdC5fX2lhZGRfX3KkSgAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2lhZGRfX1gBAAAALXRypUoAAFgiAAAAdXJsbGliMi5CYXNlSGFuZGxlci5odHRwX2Vycm9yX25ubnKmSgAAKGppAQAAamoBAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5CYXNlSGFuZGxlci5odHRwX2Vycm9yX25ublgBAAAALXRyp0oAAFgNAAAAZGljdC5mcm9ta2V5c3KoSgAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2RpY3QuZnJvbWtleXNYAQAAAC10cqlKAABYGgAAAHRhcmZpbGUuVGFyRmlsZS5nZXR0YXJpbmZvcqpKAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLlRhckZpbGUuZ2V0dGFyaW5mb1gBAAAALXRyq0oAAFgkAAAAZG9jdGVzdC5Eb2NUZXN0UnVubmVyLnJlcG9ydF9mYWlsdXJlcqxKAAAoamkBAABqagEAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIucmVwb3J0X2ZhaWx1cmVYAQAAAC10cq1KAABYHwAAAGRvY3Rlc3QuRG9jVGVzdFJ1bm5lci5zdW1tYXJpemVyrkoAAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRG9jVGVzdFJ1bm5lci5zdW1tYXJpemVYAQAAAC10cq9KAABYGQAAAGNvbGxlY3Rpb25zLmRlcXVlLnBvcGxlZnRysEoAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5kZXF1ZS5wb3BsZWZ0WAEAAAAtdHKxSgAAWBgAAAB1cmxsaWIyLlJlcXVlc3QuYWRkX2RhdGFyskoAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuUmVxdWVzdC5hZGRfZGF0YVgBAAAALXRys0oAAFgZAAAAZGVjaW1hbC5EZWNpbWFsLmlzX25vcm1hbHK0SgAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLmlzX25vcm1hbFgBAAAALXRytUoAAFgPAAAAY21kLkNtZC5wb3N0Y21kcrZKAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NtZC5odG1sI2NtZC5DbWQucG9zdGNtZFgBAAAALXRyt0oAAFgUAAAAaW1hcGxpYi5JTUFQNC5sb2dvdXRyuEoAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQubG9nb3V0WAEAAAAtdHK5SgAAWBgAAAB0aHJlYWRpbmcuVGhyZWFkLmdldE5hbWVyukoAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLlRocmVhZC5nZXROYW1lWAEAAAAtdHK7SgAAWCIAAABkb2N0ZXN0LkRvY1Rlc3RQYXJzZXIuZ2V0X2V4YW1wbGVzcrxKAAAoamkBAABqagEAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LkRvY1Rlc3RQYXJzZXIuZ2V0X2V4YW1wbGVzWAEAAAAtdHK9SgAAWDAAAAB4bWwuc2F4LnhtbHJlYWRlci5JbnB1dFNvdXJjZS5zZXRDaGFyYWN0ZXJTdHJlYW1yvkoAAChqaQEAAGpqAQAAWGYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCN4bWwuc2F4LnhtbHJlYWRlci5JbnB1dFNvdXJjZS5zZXRDaGFyYWN0ZXJTdHJlYW1YAQAAAC10cr9KAABYKwAAAGxvZ2dpbmcuaGFuZGxlcnMuRGF0YWdyYW1IYW5kbGVyLm1ha2VTb2NrZXRywEoAAChqaQEAAGpqAQAAWGMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuRGF0YWdyYW1IYW5kbGVyLm1ha2VTb2NrZXRYAQAAAC10csFKAABYGAAAAGN0eXBlcy5fQ0RhdGEuZnJvbV9wYXJhbXLCSgAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuX0NEYXRhLmZyb21fcGFyYW1YAQAAAC10csNKAABYDgAAAHNoYS5zaGEudXBkYXRlcsRKAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NoYS5odG1sI3NoYS5zaGEudXBkYXRlWAEAAAAtdHLFSgAAWBgAAABzeW10YWJsZS5TeW1ib2wuaXNfbG9jYWxyxkoAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3ltdGFibGUuaHRtbCNzeW10YWJsZS5TeW1ib2wuaXNfbG9jYWxYAQAAAC10csdKAABYFgAAAHNxbGl0ZTMuQ3Vyc29yLmV4ZWN1dGVyyEoAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuQ3Vyc29yLmV4ZWN1dGVYAQAAAC10cslKAABYEwAAAHR0ay5UcmVldmlldy5jb2x1bW5yykoAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLlRyZWV2aWV3LmNvbHVtblgBAAAALXRyy0oAAFgjAAAAZm9ybWF0dGVyLmZvcm1hdHRlci5mbHVzaF9zb2Z0c3BhY2VyzEoAAChqaQEAAGpqAQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZm9ybWF0dGVyLmh0bWwjZm9ybWF0dGVyLmZvcm1hdHRlci5mbHVzaF9zb2Z0c3BhY2VYAQAAAC10cs1KAABYLgAAAG11bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5TeW5jTWFuYWdlci5OYW1lc3BhY2VyzkoAAChqaQEAAGpqAQAAWGUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLlN5bmNNYW5hZ2VyLk5hbWVzcGFjZVgBAAAALXRyz0oAAFgZAAAAY3Vyc2VzLnBhbmVsLlBhbmVsLmhpZGRlbnLQSgAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMucGFuZWwuaHRtbCNjdXJzZXMucGFuZWwuUGFuZWwuaGlkZGVuWAEAAAAtdHLRSgAAWDEAAAB4bWwuc2F4LmhhbmRsZXIuQ29udGVudEhhbmRsZXIuc2V0RG9jdW1lbnRMb2NhdG9yctJKAAAoamkBAABqagEAAFhoAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5odG1sI3htbC5zYXguaGFuZGxlci5Db250ZW50SGFuZGxlci5zZXREb2N1bWVudExvY2F0b3JYAQAAAC10ctNKAABYFAAAAHR0ay5UcmVldmlldy5oZWFkaW5nctRKAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5UcmVldmlldy5oZWFkaW5nWAEAAAAtdHLVSgAAWBoAAAB1cmxsaWIyLlJlcXVlc3QuYWRkX2hlYWRlcnLWSgAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5SZXF1ZXN0LmFkZF9oZWFkZXJYAQAAAC10ctdKAABYHwAAAG1obGliLkZvbGRlci5nZXRtZXNzYWdlZmlsZW5hbWVy2EoAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWhsaWIuaHRtbCNtaGxpYi5Gb2xkZXIuZ2V0bWVzc2FnZWZpbGVuYW1lWAEAAAAtdHLZSgAAWBwAAABkZWNpbWFsLkRlY2ltYWwuc2FtZV9xdWFudHVtctpKAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwuc2FtZV9xdWFudHVtWAEAAAAtdHLbSgAAWCgAAABhcmdwYXJzZS5Bcmd1bWVudFBhcnNlci5wYXJzZV9rbm93bl9hcmdzctxKAAAoamkBAABqagEAAFhYAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FyZ3BhcnNlLmh0bWwjYXJncGFyc2UuQXJndW1lbnRQYXJzZXIucGFyc2Vfa25vd25fYXJnc1gBAAAALXRy3UoAAFglAAAAY29va2llbGliLkNvb2tpZS5oYXNfbm9uc3RhbmRhcmRfYXR0cnLeSgAAKGppAQAAamoBAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuQ29va2llLmhhc19ub25zdGFuZGFyZF9hdHRyWAEAAAAtdHLfSgAAWCIAAAB4bWwuc2F4LmhhbmRsZXIuRXJyb3JIYW5kbGVyLmVycm9ycuBKAAAoamkBAABqagEAAFhZAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5odG1sI3htbC5zYXguaGFuZGxlci5FcnJvckhhbmRsZXIuZXJyb3JYAQAAAC10cuFKAABYEgAAAGZsLmZvcm0uZmluZF9maXJzdHLiSgAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbC5odG1sI2ZsLmZvcm0uZmluZF9maXJzdFgBAAAALXRy40oAAFgQAAAAb2JqZWN0Ll9fZmxvYXRfX3LkSgAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2Zsb2F0X19YAQAAAC10cuVKAABYKQAAAGNvb2tpZWxpYi5Db29raWVKYXIuY2xlYXJfc2Vzc2lvbl9jb29raWVzcuZKAAAoamkBAABqagEAAFhaAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5Db29raWVKYXIuY2xlYXJfc2Vzc2lvbl9jb29raWVzWAEAAAAtdHLnSgAAWB0AAABtdWx0aXByb2Nlc3NpbmcuUkxvY2sucmVsZWFzZXLoSgAAKGppAQAAamoBAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuUkxvY2sucmVsZWFzZVgBAAAALXRy6UoAAFgSAAAAaW8uSU9CYXNlLnJlYWRsaW5lcupKAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uSU9CYXNlLnJlYWRsaW5lWAEAAAAtdHLrSgAAWBQAAABvYmplY3QuX19yZWR1Y2VfZXhfX3LsSgAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9waWNrbGUuaHRtbCNvYmplY3QuX19yZWR1Y2VfZXhfX1gBAAAALXRy7UoAAFgiAAAAYXJncGFyc2UuQXJndW1lbnRQYXJzZXIucGFyc2VfYXJnc3LuSgAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hcmdwYXJzZS5odG1sI2FyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLnBhcnNlX2FyZ3NYAQAAAC10cu9KAABYHQAAAG1haWxib3gubWJveE1lc3NhZ2UuZ2V0X2ZsYWdzcvBKAAAoamkBAABqagEAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lm1ib3hNZXNzYWdlLmdldF9mbGFnc1gBAAAALXRy8UoAAFgcAAAAc3ltdGFibGUuU3ltYm9sLmlzX25hbWVzcGFjZXLySgAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeW10YWJsZS5odG1sI3N5bXRhYmxlLlN5bWJvbC5pc19uYW1lc3BhY2VYAQAAAC10cvNKAABYEAAAAGZyb3plbnNldC51cGRhdGVy9EoAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNmcm96ZW5zZXQudXBkYXRlWAEAAAAtdHL1SgAAWBoAAABlbWFpbC5oZWFkZXIuSGVhZGVyLmFwcGVuZHL2SgAAKGppAQAAamoBAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5oZWFkZXIuaHRtbCNlbWFpbC5oZWFkZXIuSGVhZGVyLmFwcGVuZFgBAAAALXRy90oAAFgXAAAAbG9nZ2luZy5IYW5kbGVyLmFjcXVpcmVy+EoAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuSGFuZGxlci5hY3F1aXJlWAEAAAAtdHL5SgAAWB0AAAB4bWwuZG9tLm1pbmlkb20uTm9kZS53cml0ZXhtbHL6SgAAKGppAQAAamoBAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLm1pbmlkb20uaHRtbCN4bWwuZG9tLm1pbmlkb20uTm9kZS53cml0ZXhtbFgBAAAALXRy+0oAAFglAAAAb3NzYXVkaW9kZXYub3NzX2F1ZGlvX2RldmljZS53cml0ZWFsbHL8SgAAKGppAQAAamoBAABYWAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vc3NhdWRpb2Rldi5odG1sI29zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2Uud3JpdGVhbGxYAQAAAC10cv1KAABYDwAAAGZyb3plbnNldC5jbGVhcnL+SgAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2Zyb3plbnNldC5jbGVhclgBAAAALXRy/0oAAFgUAAAAemlwZmlsZS5aaXBGaWxlLm9wZW5yAEsAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGZpbGUuWmlwRmlsZS5vcGVuWAEAAAAtdHIBSwAAWBUAAABzbXRwbGliLlNNVFAuc2VuZG1haWxyAksAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc210cGxpYi5odG1sI3NtdHBsaWIuU01UUC5zZW5kbWFpbFgBAAAALXRyA0sAAFgZAAAAZGVjaW1hbC5Db250ZXh0LmNhbm9uaWNhbHIESwAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmNhbm9uaWNhbFgBAAAALXRyBUsAAFgUAAAAc29ja2V0LnNvY2tldC5maWxlbm9yBksAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LnNvY2tldC5maWxlbm9YAQAAAC10cgdLAABYFQAAAG1haWxib3gubWJveC5nZXRfZmlsZXIISwAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5tYm94LmdldF9maWxlWAEAAAAtdHIJSwAAWBwAAABjb29raWVsaWIuRmlsZUNvb2tpZUphci5sb2FkcgpLAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5GaWxlQ29va2llSmFyLmxvYWRYAQAAAC10cgtLAABYDwAAAGdlbmVyYXRvci50aHJvd3IMSwAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ2VuZXJhdG9yLnRocm93WAEAAAAtdHINSwAAWBIAAABzdHJ1Y3QuU3RydWN0LnBhY2tyDksAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RydWN0Lmh0bWwjc3RydWN0LlN0cnVjdC5wYWNrWAEAAAAtdHIPSwAAWBkAAABkYXRldGltZS5kYXRldGltZS5fX3N0cl9fchBLAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZXRpbWUuX19zdHJfX1gBAAAALXRyEUsAAFgYAAAAbG9nZ2luZy5IYW5kbGVyLnNldExldmVschJLAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkhhbmRsZXIuc2V0TGV2ZWxYAQAAAC10chNLAABYFQAAAGxvZ2dpbmcuSGFuZGxlci5mbHVzaHIUSwAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5IYW5kbGVyLmZsdXNoWAEAAAAtdHIVSwAAWBcAAABkZWNpbWFsLkNvbnRleHQubWF4X21hZ3IWSwAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0Lm1heF9tYWdYAQAAAC10chdLAABYEQAAAG5udHBsaWIuTk5UUC5xdWl0chhLAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L25udHBsaWIuaHRtbCNubnRwbGliLk5OVFAucXVpdFgBAAAALXRyGUsAAFgoAAAAdXJsbGliMi5IVFRQRXJyb3JQcm9jZXNzb3IuaHR0cF9yZXNwb25zZXIaSwAAKGppAQAAamoBAABYVwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5IVFRQRXJyb3JQcm9jZXNzb3IuaHR0cF9yZXNwb25zZVgBAAAALXRyG0sAAFgXAAAAZGF0ZXRpbWUuZGF0ZS5pc29mb3JtYXRyHEsAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRlLmlzb2Zvcm1hdFgBAAAALXRyHUsAAFgaAAAAY3R5cGVzLl9DRGF0YS5mcm9tX2FkZHJlc3NyHksAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLl9DRGF0YS5mcm9tX2FkZHJlc3NYAQAAAC10ch9LAABYGwAAAHdhdmUuV2F2ZV9yZWFkLmdldG5jaGFubmVsc3IgSwAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93YXZlLmh0bWwjd2F2ZS5XYXZlX3JlYWQuZ2V0bmNoYW5uZWxzWAEAAAAtdHIhSwAAWBcAAABpby5CdWZmZXJlZElPQmFzZS53cml0ZXIiSwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pby5odG1sI2lvLkJ1ZmZlcmVkSU9CYXNlLndyaXRlWAEAAAAtdHIjSwAAWB4AAAB3YXZlLldhdmVfd3JpdGUud3JpdGVmcmFtZXNyYXdyJEsAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2F2ZS5odG1sI3dhdmUuV2F2ZV93cml0ZS53cml0ZWZyYW1lc3Jhd1gBAAAALXRyJUsAAFgYAAAAYXN5bmNvcmUuZGlzcGF0Y2hlci5yZWN2ciZLAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzeW5jb3JlLmh0bWwjYXN5bmNvcmUuZGlzcGF0Y2hlci5yZWN2WAEAAAAtdHInSwAAWB8AAABlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuZGVsX3BhcmFtcihLAAAoamkBAABqagEAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuZGVsX3BhcmFtWAEAAAAtdHIpSwAAWCYAAABhcmdwYXJzZS5Bcmd1bWVudFBhcnNlci5hZGRfc3VicGFyc2Vyc3IqSwAAKGppAQAAamoBAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hcmdwYXJzZS5odG1sI2FyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLmFkZF9zdWJwYXJzZXJzWAEAAAAtdHIrSwAAWB0AAABnZXR0ZXh0Lk51bGxUcmFuc2xhdGlvbnMuaW5mb3IsSwAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9nZXR0ZXh0Lmh0bWwjZ2V0dGV4dC5OdWxsVHJhbnNsYXRpb25zLmluZm9YAQAAAC10ci1LAABYGQAAAG1obGliLkZvbGRlci5nZXRzZXF1ZW5jZXNyLksAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWhsaWIuaHRtbCNtaGxpYi5Gb2xkZXIuZ2V0c2VxdWVuY2VzWAEAAAAtdHIvSwAAWBIAAABubnRwbGliLk5OVFAuZ3JvdXByMEsAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbm50cGxpYi5odG1sI25udHBsaWIuTk5UUC5ncm91cFgBAAAALXRyMUsAAFggAAAAZ2V0dGV4dC5HTlVUcmFuc2xhdGlvbnMudWdldHRleHRyMksAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2V0dGV4dC5odG1sI2dldHRleHQuR05VVHJhbnNsYXRpb25zLnVnZXR0ZXh0WAEAAAAtdHIzSwAAWCQAAABhcmdwYXJzZS5Bcmd1bWVudFBhcnNlci5mb3JtYXRfdXNhZ2VyNEsAAChqaQEAAGpqAQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXJncGFyc2UuaHRtbCNhcmdwYXJzZS5Bcmd1bWVudFBhcnNlci5mb3JtYXRfdXNhZ2VYAQAAAC10cjVLAABYHQAAAGRlY2ltYWwuQ29udGV4dC5jb21wYXJlX3RvdGFscjZLAAAoamkBAABqagEAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQuY29tcGFyZV90b3RhbFgBAAAALXRyN0sAAFgWAAAAdGhyZWFkaW5nLlRpbWVyLmNhbmNlbHI4SwAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuVGltZXIuY2FuY2VsWAEAAAAtdHI5SwAAWB8AAABDb25maWdQYXJzZXIuQ29uZmlnUGFyc2VyLml0ZW1zcjpLAAAoamkBAABqagEAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbmZpZ3BhcnNlci5odG1sI0NvbmZpZ1BhcnNlci5Db25maWdQYXJzZXIuaXRlbXNYAQAAAC10cjtLAABYLwAAAERvY1hNTFJQQ1NlcnZlci5Eb2NYTUxSUENTZXJ2ZXIuc2V0X3NlcnZlcl9uYW1lcjxLAAAoamkBAABqagEAAFhmAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3htbHJwY3NlcnZlci5odG1sI0RvY1hNTFJQQ1NlcnZlci5Eb2NYTUxSUENTZXJ2ZXIuc2V0X3NlcnZlcl9uYW1lWAEAAAAtdHI9SwAAWBYAAABtc2lsaWIuQ29udHJvbC5tYXBwaW5ncj5LAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5Db250cm9sLm1hcHBpbmdYAQAAAC10cj9LAABYLwAAAHhtbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5TdGFydEVsZW1lbnRIYW5kbGVyckBLAAAoamkBAABqagEAAFheAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuU3RhcnRFbGVtZW50SGFuZGxlclgBAAAALXRyQUsAAFgXAAAAc3RydWN0LlN0cnVjdC5wYWNrX2ludG9yQksAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RydWN0Lmh0bWwjc3RydWN0LlN0cnVjdC5wYWNrX2ludG9YAQAAAC10ckNLAABYGAAAAG1zaWxpYi5Db250cm9sLmNvbmRpdGlvbnJESwAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuQ29udHJvbC5jb25kaXRpb25YAQAAAC10ckVLAABYHgAAAHN5bXRhYmxlLlN5bWJvbFRhYmxlLmlzX25lc3RlZHJGSwAAKGppAQAAamoBAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeW10YWJsZS5odG1sI3N5bXRhYmxlLlN5bWJvbFRhYmxlLmlzX25lc3RlZFgBAAAALXRyR0sAAFgvAAAAb3B0cGFyc2UuT3B0aW9uUGFyc2VyLmRpc2FibGVfaW50ZXJzcGVyc2VkX2FyZ3NySEsAAChqaQEAAGpqAQAAWF8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS5PcHRpb25QYXJzZXIuZGlzYWJsZV9pbnRlcnNwZXJzZWRfYXJnc1gBAAAALXRySUsAAFgYAAAAc3VuYXUuQVVfcmVhZC5yZWFkZnJhbWVzckpLAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUuQVVfcmVhZC5yZWFkZnJhbWVzWAEAAAAtdHJLSwAAWBgAAAB4ZHJsaWIuUGFja2VyLnBhY2tfZmxvYXRyTEsAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveGRybGliLmh0bWwjeGRybGliLlBhY2tlci5wYWNrX2Zsb2F0WAEAAAAtdHJNSwAAWC4AAABkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5zZXRfbGlua19vYmplY3Rzck5LAAAoamkBAABqagEAAFheAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuc2V0X2xpbmtfb2JqZWN0c1gBAAAALXRyT0sAAFgSAAAAaW8uSU9CYXNlLnRydW5jYXRlclBLAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uSU9CYXNlLnRydW5jYXRlWAEAAAAtdHJRSwAAWB4AAABlbWFpbC5tZXNzYWdlLk1lc3NhZ2Uuc2V0X3R5cGVyUksAAChqaQEAAGpqAQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS5zZXRfdHlwZVgBAAAALXRyU0sAAFgwAAAAeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkRlZmF1bHRIYW5kbGVyRXhwYW5kclRLAAAoamkBAABqagEAAFhfAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuRGVmYXVsdEhhbmRsZXJFeHBhbmRYAQAAAC10clVLAABYGgAAAHN0cmluZy5Gb3JtYXR0ZXIuZ2V0X3ZhbHVlclZLAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZy5odG1sI3N0cmluZy5Gb3JtYXR0ZXIuZ2V0X3ZhbHVlWAEAAAAtdHJXSwAAWCYAAABzc2wuU1NMQ29udGV4dC5zZXRfc2VydmVybmFtZV9jYWxsYmFja3JYSwAAKGppAQAAamoBAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMQ29udGV4dC5zZXRfc2VydmVybmFtZV9jYWxsYmFja1gBAAAALXRyWUsAAFgUAAAAY3Vyc2VzLndpbmRvdy5yZXNpemVyWksAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5yZXNpemVYAQAAAC10cltLAABYJAAAAEhUTUxQYXJzZXIuSFRNTFBhcnNlci5oYW5kbGVfY2hhcnJlZnJcSwAAKGppAQAAamoBAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odG1scGFyc2VyLmh0bWwjSFRNTFBhcnNlci5IVE1MUGFyc2VyLmhhbmRsZV9jaGFycmVmWAEAAAAtdHJdSwAAWBUAAABtc2lsaWIuRGlhbG9nLmNvbnRyb2xyXksAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLkRpYWxvZy5jb250cm9sWAEAAAAtdHJfSwAAWCcAAAB4bWwuZG9tLnB1bGxkb20uRE9NRXZlbnRTdHJlYW0uZ2V0RXZlbnRyYEsAAChqaQEAAGpqAQAAWF4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5wdWxsZG9tLmh0bWwjeG1sLmRvbS5wdWxsZG9tLkRPTUV2ZW50U3RyZWFtLmdldEV2ZW50WAEAAAAtdHJhSwAAWBMAAABsb2dnaW5nLkxvZ2dlci5pbmZvcmJLAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkxvZ2dlci5pbmZvWAEAAAAtdHJjSwAAWBEAAAB0dGsuVHJlZXZpZXcucHJldnJkSwAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuVHJlZXZpZXcucHJldlgBAAAALXRyZUsAAFgXAAAAVGl4LnRpeENvbW1hbmQudGl4X2NnZXRyZksAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGl4Lmh0bWwjVGl4LnRpeENvbW1hbmQudGl4X2NnZXRYAQAAAC10cmdLAABYDwAAAHJlcHIuUmVwci5yZXByMXJoSwAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXByLmh0bWwjcmVwci5SZXByLnJlcHIxWAEAAAAtdHJpSwAAWCEAAABjdXJzZXMudGV4dHBhZC5UZXh0Ym94LmRvX2NvbW1hbmRyaksAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLnRleHRwYWQuVGV4dGJveC5kb19jb21tYW5kWAEAAAAtdHJrSwAAWBEAAABkYXRldGltZS50aW1lLmRzdHJsSwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLnRpbWUuZHN0WAEAAAAtdHJtSwAAWCIAAAB6aXBpbXBvcnQuemlwaW1wb3J0ZXIuZ2V0X2ZpbGVuYW1lcm5LAAAoamkBAABqagEAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGltcG9ydC5odG1sI3ppcGltcG9ydC56aXBpbXBvcnRlci5nZXRfZmlsZW5hbWVYAQAAAC10cm9LAABYDgAAAG9iamVjdC5fX211bF9fcnBLAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fbXVsX19YAQAAAC10cnFLAABYEwAAAHR0ay5TdHlsZS5jb25maWd1cmVycksAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLlN0eWxlLmNvbmZpZ3VyZVgBAAAALXRyc0sAAFg0AAAAeG1sLnNheC5oYW5kbGVyLkNvbnRlbnRIYW5kbGVyLnByb2Nlc3NpbmdJbnN0cnVjdGlvbnJ0SwAAKGppAQAAamoBAABYawAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LmhhbmRsZXIuaHRtbCN4bWwuc2F4LmhhbmRsZXIuQ29udGVudEhhbmRsZXIucHJvY2Vzc2luZ0luc3RydWN0aW9uWAEAAAAtdHJ1SwAAWCEAAABDb25maWdQYXJzZXIuUmF3Q29uZmlnUGFyc2VyLnJlYWRydksAAChqaQEAAGpqAQAAWFUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjQ29uZmlnUGFyc2VyLlJhd0NvbmZpZ1BhcnNlci5yZWFkWAEAAAAtdHJ3SwAAWBgAAABubnRwbGliLk5OVFAuZGVzY3JpcHRpb25yeEsAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbm50cGxpYi5odG1sI25udHBsaWIuTk5UUC5kZXNjcmlwdGlvblgBAAAALXRyeUsAAFgJAAAAc3RyLnJmaW5kcnpLAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLnJmaW5kWAEAAAAtdHJ7SwAAWA8AAABmdHBsaWIuRlRQLm5sc3RyfEsAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnRwbGliLmh0bWwjZnRwbGliLkZUUC5ubHN0WAEAAAAtdHJ9SwAAWA8AAABmdHBsaWIuRlRQLnF1aXRyfksAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnRwbGliLmh0bWwjZnRwbGliLkZUUC5xdWl0WAEAAAAtdHJ/SwAAWAwAAABkaWN0LnBvcGl0ZW1ygEsAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNkaWN0LnBvcGl0ZW1YAQAAAC10coFLAABYJgAAAGVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5nZXRfZGVmYXVsdF90eXBlcoJLAAAoamkBAABqagEAAFhbAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuZ2V0X2RlZmF1bHRfdHlwZVgBAAAALXRyg0sAAFgcAAAAaW1hcGxpYi5JTUFQNC5sb2dpbl9jcmFtX21kNXKESwAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5sb2dpbl9jcmFtX21kNVgBAAAALXRyhUsAAFgYAAAAd2F2ZS5XYXZlX3JlYWQuZ2V0cGFyYW1zcoZLAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dhdmUuaHRtbCN3YXZlLldhdmVfcmVhZC5nZXRwYXJhbXNYAQAAAC10codLAABYGgAAAGltYXBsaWIuSU1BUDQuZ2V0cXVvdGFyb290cohLAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LmdldHF1b3Rhcm9vdFgBAAAALXRyiUsAAFgkAAAAYXJncGFyc2UuQXJndW1lbnRQYXJzZXIuc2V0X2RlZmF1bHRzcopLAAAoamkBAABqagEAAFhUAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FyZ3BhcnNlLmh0bWwjYXJncGFyc2UuQXJndW1lbnRQYXJzZXIuc2V0X2RlZmF1bHRzWAEAAAAtdHKLSwAAWCAAAABTb2NrZXRTZXJ2ZXIuQmFzZVNlcnZlci5zaHV0ZG93bnKMSwAAKGppAQAAamoBAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXRzZXJ2ZXIuaHRtbCNTb2NrZXRTZXJ2ZXIuQmFzZVNlcnZlci5zaHV0ZG93blgBAAAALXRyjUsAAFgVAAAAbWFpbGJveC5NYWlsZGlyLmZsdXNoco5LAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxkaXIuZmx1c2hYAQAAAC10co9LAABYMwAAAEJhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuc2VuZF9yZXNwb25zZXKQSwAAKGppAQAAamoBAABYaQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXNlaHR0cHNlcnZlci5odG1sI0Jhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuc2VuZF9yZXNwb25zZVgBAAAALXRykUsAAFgYAAAAemlwZmlsZS5aaXBGaWxlLndyaXRlc3RycpJLAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLlppcEZpbGUud3JpdGVzdHJYAQAAAC10cpNLAABYGgAAAHRocmVhZGluZy5UaHJlYWQuc2V0RGFlbW9ucpRLAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5UaHJlYWQuc2V0RGFlbW9uWAEAAAAtdHKVSwAAWCkAAABpbXB1dGlsLkR5bkxvYWRTdWZmaXhJbXBvcnRlci5pbXBvcnRfZmlsZXKWSwAAKGppAQAAamoBAABYWAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbXB1dGlsLmh0bWwjaW1wdXRpbC5EeW5Mb2FkU3VmZml4SW1wb3J0ZXIuaW1wb3J0X2ZpbGVYAQAAAC10cpdLAABYDgAAAG1kNS5tZDUuZGlnZXN0cphLAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21kNS5odG1sI21kNS5tZDUuZGlnZXN0WAEAAAAtdHKZSwAAWBoAAABzc2wuU1NMU29ja2V0LmRvX2hhbmRzaGFrZXKaSwAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMU29ja2V0LmRvX2hhbmRzaGFrZVgBAAAALXRym0sAAFgnAAAAeG1sLnNheC5oYW5kbGVyLkVycm9ySGFuZGxlci5mYXRhbEVycm9ycpxLAAAoamkBAABqagEAAFheAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5odG1sI3htbC5zYXguaGFuZGxlci5FcnJvckhhbmRsZXIuZmF0YWxFcnJvclgBAAAALXRynUsAAFgcAAAAbG9nZ2luZy5Gb3JtYXR0ZXIuZm9ybWF0VGltZXKeSwAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5Gb3JtYXR0ZXIuZm9ybWF0VGltZVgBAAAALXRyn0sAAFguAAAAbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLlN5bmNNYW5hZ2VyLlNlbWFwaG9yZXKgSwAAKGppAQAAamoBAABYZQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuU3luY01hbmFnZXIuU2VtYXBob3JlWAEAAAAtdHKhSwAAWBQAAABtYWlsYm94LkJhYnlsLnVubG9ja3KiSwAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5CYWJ5bC51bmxvY2tYAQAAAC10cqNLAABYCwAAAHN0ci5pc2FsbnVtcqRLAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLmlzYWxudW1YAQAAAC10cqVLAABYGwAAAGRlY2ltYWwuQ29udGV4dC5pc19pbmZpbml0ZXKmSwAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmlzX2luZmluaXRlWAEAAAAtdHKnSwAAWBIAAAB0dGsuVHJlZXZpZXcueHZpZXdyqEsAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLlRyZWV2aWV3Lnh2aWV3WAEAAAAtdHKpSwAAWB4AAABGcmFtZVdvcmsuQXBwbGljYXRpb24ubWFpbmxvb3ByqksAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnJhbWV3b3JrLmh0bWwjRnJhbWVXb3JrLkFwcGxpY2F0aW9uLm1haW5sb29wWAEAAAAtdHKrSwAAWB0AAAB1cmxsaWIyLkZpbGVIYW5kbGVyLmZpbGVfb3BlbnKsSwAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5GaWxlSGFuZGxlci5maWxlX29wZW5YAQAAAC10cq1LAABYIgAAAHNxbGl0ZTMuQ29ubmVjdGlvbi5jcmVhdGVfZnVuY3Rpb25yrksAAChqaQEAAGpqAQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuQ29ubmVjdGlvbi5jcmVhdGVfZnVuY3Rpb25YAQAAAC10cq9LAABYJwAAAHhtbC5zYXgueG1scmVhZGVyLkxvY2F0b3IuZ2V0TGluZU51bWJlcnKwSwAAKGppAQAAamoBAABYXQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLkxvY2F0b3IuZ2V0TGluZU51bWJlclgBAAAALXRysUsAAFgVAAAAdGFyZmlsZS5UYXJJbmZvLmlzZGV2crJLAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLlRhckluZm8uaXNkZXZYAQAAAC10crNLAABYHAAAAG11bHRpZmlsZS5NdWx0aUZpbGUucmVhZGxpbmVytEsAAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlmaWxlLmh0bWwjbXVsdGlmaWxlLk11bHRpRmlsZS5yZWFkbGluZVgBAAAALXRytUsAAFghAAAAbG9nZ2luZy5Gb3JtYXR0ZXIuZm9ybWF0RXhjZXB0aW9ucrZLAAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkZvcm1hdHRlci5mb3JtYXRFeGNlcHRpb25YAQAAAC10crdLAABYGQAAAGRhdGV0aW1lLmRhdGUuaXNvY2FsZW5kYXJyuEsAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRlLmlzb2NhbGVuZGFyWAEAAAAtdHK5SwAAWBEAAABhcnJheS5hcnJheS5jb3VudHK6SwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hcnJheS5odG1sI2FycmF5LmFycmF5LmNvdW50WAEAAAAtdHK7SwAAWBoAAABzdHJpbmcuVGVtcGxhdGUuc3Vic3RpdHV0ZXK8SwAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmcuaHRtbCNzdHJpbmcuVGVtcGxhdGUuc3Vic3RpdHV0ZVgBAAAALXRyvUsAAFgaAAAAZGVjaW1hbC5Db250ZXh0Lm5leHRfbWludXNyvksAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5uZXh0X21pbnVzWAEAAAAtdHK/SwAAWBYAAABwb3BsaWIuUE9QMy5nZXR3ZWxjb21lcsBLAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BvcGxpYi5odG1sI3BvcGxpYi5QT1AzLmdldHdlbGNvbWVYAQAAAC10csFLAABYFgAAAHJmYzgyMi5NZXNzYWdlLmdldGRhdGVywksAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmZjODIyLmh0bWwjcmZjODIyLk1lc3NhZ2UuZ2V0ZGF0ZVgBAAAALXRyw0sAAFgXAAAAeGRybGliLlBhY2tlci5wYWNrX2xpc3RyxEsAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveGRybGliLmh0bWwjeGRybGliLlBhY2tlci5wYWNrX2xpc3RYAQAAAC10csVLAABYFwAAAGZsLmZvcm0uZGVhY3RpdmF0ZV9mb3JtcsZLAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZsLmh0bWwjZmwuZm9ybS5kZWFjdGl2YXRlX2Zvcm1YAQAAAC10csdLAABYCQAAAGZpbGUuc2Vla3LISwAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2ZpbGUuc2Vla1gBAAAALXRyyUsAAFgXAAAAemlwZmlsZS5aaXBGaWxlLnRlc3R6aXByyksAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGZpbGUuWmlwRmlsZS50ZXN0emlwWAEAAAAtdHLLSwAAWBIAAAB0aHJlYWQubG9jay5sb2NrZWRyzEsAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkLmh0bWwjdGhyZWFkLmxvY2subG9ja2VkWAEAAAAtdHLNSwAAWBgAAABhaWZjLmFpZmMud3JpdGVmcmFtZXNyYXdyzksAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWlmYy5odG1sI2FpZmMuYWlmYy53cml0ZWZyYW1lc3Jhd1gBAAAALXRyz0sAAFgeAAAAeGRybGliLlVucGFja2VyLnVucGFja19mb3BhcXVlctBLAAAoamkBAABqagEAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3hkcmxpYi5odG1sI3hkcmxpYi5VbnBhY2tlci51bnBhY2tfZm9wYXF1ZVgBAAAALXRy0UsAAFg1AAAAbXVsdGlwcm9jZXNzaW5nLnBvb2wubXVsdGlwcm9jZXNzaW5nLlBvb2wuYXBwbHlfYXN5bmNy0ksAAChqaQEAAGpqAQAAWGwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLnBvb2wubXVsdGlwcm9jZXNzaW5nLlBvb2wuYXBwbHlfYXN5bmNYAQAAAC10ctNLAABYFgAAAGFpZmMuYWlmYy5zZXRuY2hhbm5lbHNy1EsAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWlmYy5odG1sI2FpZmMuYWlmYy5zZXRuY2hhbm5lbHNYAQAAAC10ctVLAABYGQAAAGRhdGV0aW1lLmRhdGV0aW1lLndlZWtkYXly1ksAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS53ZWVrZGF5WAEAAAAtdHLXSwAAWBwAAAB0cmFjZS5Db3ZlcmFnZVJlc3VsdHMudXBkYXRlcthLAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RyYWNlLmh0bWwjdHJhY2UuQ292ZXJhZ2VSZXN1bHRzLnVwZGF0ZVgBAAAALXRy2UsAAFgVAAAAbWhsaWIuTUguZGVsZXRlZm9sZGVyctpLAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21obGliLmh0bWwjbWhsaWIuTUguZGVsZXRlZm9sZGVyWAEAAAAtdHLbSwAAWBoAAABzc2wuU1NMQ29udGV4dC53cmFwX3NvY2tldHLcSwAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMQ29udGV4dC53cmFwX3NvY2tldFgBAAAALXRy3UsAAFgXAAAAY3Vyc2VzLndpbmRvdy5jdXJzeW5jdXBy3ksAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5jdXJzeW5jdXBYAQAAAC10ct9LAABYHwAAAG1haWxib3guQmFieWxNZXNzYWdlLmdldF9sYWJlbHNy4EsAAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guQmFieWxNZXNzYWdlLmdldF9sYWJlbHNYAQAAAC10cuFLAABYEwAAAGRlY2ltYWwuQ29udGV4dC5tYXhy4ksAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5tYXhYAQAAAC10cuNLAABYIgAAAHdzZ2lyZWYuaGVhZGVycy5IZWFkZXJzLmFkZF9oZWFkZXJy5EsAAChqaQEAAGpqAQAAWFEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd3NnaXJlZi5odG1sI3dzZ2lyZWYuaGVhZGVycy5IZWFkZXJzLmFkZF9oZWFkZXJYAQAAAC10cuVLAABYIQAAAGRpc3R1dGlscy50ZXh0X2ZpbGUuVGV4dEZpbGUud2FybnLmSwAAKGppAQAAamoBAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy50ZXh0X2ZpbGUuVGV4dEZpbGUud2FyblgBAAAALXRy50sAAFgTAAAAcGlwZXMuVGVtcGxhdGUuY29weXLoSwAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9waXBlcy5odG1sI3BpcGVzLlRlbXBsYXRlLmNvcHlYAQAAAC10culLAABYJwAAAG11bHRpcHJvY2Vzc2luZy5Kb2luYWJsZVF1ZXVlLnRhc2tfZG9uZXLqSwAAKGppAQAAamoBAABYXgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuSm9pbmFibGVRdWV1ZS50YXNrX2RvbmVYAQAAAC10cutLAABYHgAAAGZyb3plbnNldC5zeW1tZXRyaWNfZGlmZmVyZW5jZXLsSwAAKGppAQAAamoBAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2Zyb3plbnNldC5zeW1tZXRyaWNfZGlmZmVyZW5jZVgBAAAALXRy7UsAAFgiAAAAY2FsZW5kYXIuQ2FsZW5kYXIueWVhcmRheXNjYWxlbmRhcnLuSwAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLkNhbGVuZGFyLnllYXJkYXlzY2FsZW5kYXJYAQAAAC10cu9LAABYKwAAAHVybGxpYjIuSFRUUEJhc2ljQXV0aEhhbmRsZXIuaHR0cF9lcnJvcl80MDFy8EsAAChqaQEAAGpqAQAAWFoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuSFRUUEJhc2ljQXV0aEhhbmRsZXIuaHR0cF9lcnJvcl80MDFYAQAAAC10cvFLAABYHAAAAGRlY2ltYWwuQ29udGV4dC5pc19jYW5vbmljYWxy8ksAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5pc19jYW5vbmljYWxYAQAAAC10cvNLAABYCgAAAHN0ci5yaW5kZXhy9EsAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNzdHIucmluZGV4WAEAAAAtdHL1SwAAWCcAAABDb25maWdQYXJzZXIuUmF3Q29uZmlnUGFyc2VyLmhhc19vcHRpb25y9ksAAChqaQEAAGpqAQAAWFsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjQ29uZmlnUGFyc2VyLlJhd0NvbmZpZ1BhcnNlci5oYXNfb3B0aW9uWAEAAAAtdHL3SwAAWCUAAABTb2NrZXRTZXJ2ZXIuQmFzZVJlcXVlc3RIYW5kbGVyLnNldHVwcvhLAAAoamkBAABqagEAAFhZAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI1NvY2tldFNlcnZlci5CYXNlUmVxdWVzdEhhbmRsZXIuc2V0dXBYAQAAAC10cvlLAABYFAAAAGFiYy5BQkNNZXRhLnJlZ2lzdGVycvpLAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FiYy5odG1sI2FiYy5BQkNNZXRhLnJlZ2lzdGVyWAEAAAAtdHL7SwAAWBgAAABtdWx0aWZpbGUuTXVsdGlGaWxlLnJlYWRy/EsAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlmaWxlLmh0bWwjbXVsdGlmaWxlLk11bHRpRmlsZS5yZWFkWAEAAAAtdHL9SwAAWBEAAAB1bmljb2RlLmlzZGVjaW1hbHL+SwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3VuaWNvZGUuaXNkZWNpbWFsWAEAAAAtdHL/SwAAWCEAAABnZXR0ZXh0Lk51bGxUcmFuc2xhdGlvbnMudWdldHRleHRyAEwAAChqaQEAAGpqAQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ2V0dGV4dC5odG1sI2dldHRleHQuTnVsbFRyYW5zbGF0aW9ucy51Z2V0dGV4dFgBAAAALXRyAUwAAFgeAAAAd2ViYnJvd3Nlci5jb250cm9sbGVyLm9wZW5fbmV3cgJMAAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dlYmJyb3dzZXIuaHRtbCN3ZWJicm93c2VyLmNvbnRyb2xsZXIub3Blbl9uZXdYAQAAAC10cgNMAABYIgAAAHVuaXR0ZXN0LlRlc3RDYXNlLnNob3J0RGVzY3JpcHRpb25yBEwAAChqaQEAAGpqAQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5zaG9ydERlc2NyaXB0aW9uWAEAAAAtdHIFTAAAWBUAAABkZWNpbWFsLkNvbnRleHQubG9nMTByBkwAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5sb2cxMFgBAAAALXRyB0wAAFgTAAAAdHRrLlRyZWV2aWV3Lmluc2VydHIITAAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuVHJlZXZpZXcuaW5zZXJ0WAEAAAAtdHIJTAAAWC4AAABtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuU3luY01hbmFnZXIuQ29uZGl0aW9ucgpMAAAoamkBAABqagEAAFhlAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5TeW5jTWFuYWdlci5Db25kaXRpb25YAQAAAC10cgtMAABYFQAAAHRhcmZpbGUuVGFySW5mby50b2J1ZnIMTAAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJJbmZvLnRvYnVmWAEAAAAtdHINTAAAWBsAAABjdXJzZXMud2luZG93LmlzX3dpbnRvdWNoZWRyDkwAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5pc193aW50b3VjaGVkWAEAAAAtdHIPTAAAWBoAAAByZmM4MjIuQWRkcmVzc0xpc3QuX19zdHJfX3IQTAAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZmM4MjIuaHRtbCNyZmM4MjIuQWRkcmVzc0xpc3QuX19zdHJfX1gBAAAALXRyEUwAAFgSAAAAaW8uVGV4dElPQmFzZS5yZWFkchJMAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uVGV4dElPQmFzZS5yZWFkWAEAAAAtdHITTAAAWBkAAAB0ZWxuZXRsaWIuVGVsbmV0LnJlYWRfYWxschRMAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RlbG5ldGxpYi5odG1sI3RlbG5ldGxpYi5UZWxuZXQucmVhZF9hbGxYAQAAAC10chVMAABYEAAAAHBvcGxpYi5QT1AzLm5vb3ByFkwAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcG9wbGliLmh0bWwjcG9wbGliLlBPUDMubm9vcFgBAAAALXRyF0wAAFgYAAAAc3RyaW5nLkZvcm1hdHRlci52Zm9ybWF0chhMAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cmluZy5odG1sI3N0cmluZy5Gb3JtYXR0ZXIudmZvcm1hdFgBAAAALXRyGUwAAFgUAAAAY3Vyc2VzLndpbmRvdy5hdHRyb25yGkwAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5hdHRyb25YAQAAAC10chtMAABYJgAAAEZyYW1lV29yay5Db250cm9sc1dpbmRvdy5kb19jb250cm9saGl0chxMAAAoamkBAABqagEAAFhXAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZyYW1ld29yay5odG1sI0ZyYW1lV29yay5Db250cm9sc1dpbmRvdy5kb19jb250cm9saGl0WAEAAAAtdHIdTAAAWA0AAABvYmplY3QuX19lcV9fch5MAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fZXFfX1gBAAAALXRyH0wAAFgaAAAAZW1haWwuaGVhZGVyLkhlYWRlci5lbmNvZGVyIEwAAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwuaGVhZGVyLmh0bWwjZW1haWwuaGVhZGVyLkhlYWRlci5lbmNvZGVYAQAAAC10ciFMAABYGwAAAGRlY2ltYWwuQ29udGV4dC5jb3B5X25lZ2F0ZXIiTAAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmNvcHlfbmVnYXRlWAEAAAAtdHIjTAAAWCUAAABDb25maWdQYXJzZXIuUmF3Q29uZmlnUGFyc2VyLmRlZmF1bHRzciRMAAAoamkBAABqagEAAFhZAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbmZpZ3BhcnNlci5odG1sI0NvbmZpZ1BhcnNlci5SYXdDb25maWdQYXJzZXIuZGVmYXVsdHNYAQAAAC10ciVMAABYKAAAAHVuaXR0ZXN0LlRlc3RSZXN1bHQuYWRkVW5leHBlY3RlZFN1Y2Nlc3NyJkwAAChqaQEAAGpqAQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0UmVzdWx0LmFkZFVuZXhwZWN0ZWRTdWNjZXNzWAEAAAAtdHInTAAAWC0AAABkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5saW5rX2V4ZWN1dGFibGVyKEwAAChqaQEAAGpqAQAAWF0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5saW5rX2V4ZWN1dGFibGVYAQAAAC10cilMAABYFAAAAGRlY2ltYWwuQ29udGV4dC5sb2dicipMAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQubG9nYlgBAAAALXRyK0wAAFgVAAAAdGFyZmlsZS5UYXJJbmZvLmlzcmVncixMAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLlRhckluZm8uaXNyZWdYAQAAAC10ci1MAABYEgAAAGltYXBsaWIuSU1BUDQubHN1YnIuTAAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5sc3ViWAEAAAAtdHIvTAAAWCcAAABkaXN0dXRpbHMudGV4dF9maWxlLlRleHRGaWxlLnVucmVhZGxpbmVyMEwAAChqaQEAAGpqAQAAWFcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMudGV4dF9maWxlLlRleHRGaWxlLnVucmVhZGxpbmVYAQAAAC10cjFMAABYFQAAAGRlY2ltYWwuQ29udGV4dC5wb3dlcnIyTAAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LnBvd2VyWAEAAAAtdHIzTAAAWB0AAABzeW10YWJsZS5TeW1ib2xUYWJsZS5nZXRfbmFtZXI0TAAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeW10YWJsZS5odG1sI3N5bXRhYmxlLlN5bWJvbFRhYmxlLmdldF9uYW1lWAEAAAAtdHI1TAAAWA4AAABhaWZjLmFpZmMuYWlmZnI2TAAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9haWZjLmh0bWwjYWlmYy5haWZjLmFpZmZYAQAAAC10cjdMAABYFwAAAGRhdGV0aW1lLmRhdGUudG9vcmRpbmFscjhMAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZS50b29yZGluYWxYAQAAAC10cjlMAABYFgAAAHRlbG5ldGxpYi5UZWxuZXQud3JpdGVyOkwAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGVsbmV0bGliLmh0bWwjdGVsbmV0bGliLlRlbG5ldC53cml0ZVgBAAAALXRyO0wAAFgOAAAAYWlmYy5haWZjLmFpZmNyPEwAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWlmYy5odG1sI2FpZmMuYWlmYy5haWZjWAEAAAAtdHI9TAAAWBAAAABwb3BsaWIuUE9QMy5zdGF0cj5MAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BvcGxpYi5odG1sI3BvcGxpYi5QT1AzLnN0YXRYAQAAAC10cj9MAABYIwAAAGRpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLnNwYXduckBMAAAoamkBAABqagEAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuc3Bhd25YAQAAAC10ckFMAABYFQAAAGRlY2ltYWwuQ29udGV4dC5zaGlmdHJCTAAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LnNoaWZ0WAEAAAAtdHJDTAAAWBcAAABtc2lsaWIuUmVjb3JkLlNldFN0cmluZ3JETAAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuUmVjb3JkLlNldFN0cmluZ1gBAAAALXRyRUwAAFgoAAAAQ29uZmlnUGFyc2VyLlJhd0NvbmZpZ1BhcnNlci5vcHRpb254Zm9ybXJGTAAAKGppAQAAamoBAABYXAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNDb25maWdQYXJzZXIuUmF3Q29uZmlnUGFyc2VyLm9wdGlvbnhmb3JtWAEAAAAtdHJHTAAAWB0AAAB1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRJc05vdHJITAAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydElzTm90WAEAAAAtdHJJTAAAWBYAAABmb3JtYXR0ZXIud3JpdGVyLmZsdXNockpMAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Zvcm1hdHRlci5odG1sI2Zvcm1hdHRlci53cml0ZXIuZmx1c2hYAQAAAC10cktMAABYDwAAAGljLklDLmxhdW5jaHVybHJMTAAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pYy5odG1sI2ljLklDLmxhdW5jaHVybFgBAAAALXRyTUwAAFgdAAAAZGVjaW1hbC5Db250ZXh0LnRvX3NjaV9zdHJpbmdyTkwAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC50b19zY2lfc3RyaW5nWAEAAAAtdHJPTAAAWA4AAABvYmplY3QuX19hbmRfX3JQTAAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2FuZF9fWAEAAAAtdHJRTAAAWA4AAABmdHBsaWIuRlRQLmN3ZHJSTAAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuRlRQLmN3ZFgBAAAALXRyU0wAAFgwAAAAeG1sLnNheC54bWxyZWFkZXIuSW5wdXRTb3VyY2UuZ2V0Q2hhcmFjdGVyU3RyZWFtclRMAAAoamkBAABqagEAAFhmAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuSW5wdXRTb3VyY2UuZ2V0Q2hhcmFjdGVyU3RyZWFtWAEAAAAtdHJVTAAAWBUAAABkZWNpbWFsLkNvbnRleHQucmFkaXhyVkwAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5yYWRpeFgBAAAALXRyV0wAAFgoAAAAbXVsdGlwcm9jZXNzaW5nLlF1ZXVlLmNhbmNlbF9qb2luX3RocmVhZHJYTAAAKGppAQAAamoBAABYXwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuUXVldWUuY2FuY2VsX2pvaW5fdGhyZWFkWAEAAAAtdHJZTAAAWBQAAABtYWlsYm94Lk1haWxkaXIubG9ja3JaTAAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsZGlyLmxvY2tYAQAAAC10cltMAABYGAAAAHNnbWxsaWIuU0dNTFBhcnNlci5yZXNldHJcTAAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZ21sbGliLmh0bWwjc2dtbGxpYi5TR01MUGFyc2VyLnJlc2V0WAEAAAAtdHJdTAAAWC4AAABsb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlci5lbWl0cl5MAAAoamkBAABqagEAAFhmAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlci5lbWl0WAEAAAAtdHJfTAAAWBYAAABtYWlsYm94Lk1haWxib3gucmVtb3ZlcmBMAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxib3gucmVtb3ZlWAEAAAAtdHJhTAAAWCkAAAB4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC5tYWtlZWxlbWVudHJiTAAAKGppAQAAamoBAABYZgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC5tYWtlZWxlbWVudFgBAAAALXRyY0wAAFgcAAAAc3ltdGFibGUuRnVuY3Rpb24uZ2V0X2xvY2Fsc3JkTAAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeW10YWJsZS5odG1sI3N5bXRhYmxlLkZ1bmN0aW9uLmdldF9sb2NhbHNYAQAAAC10cmVMAABYEwAAAHNvY2tldC5zb2NrZXQuaW9jdGxyZkwAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LnNvY2tldC5pb2N0bFgBAAAALXRyZ0wAAFgkAAAAeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQuaW5zZXJ0cmhMAAAoamkBAABqagEAAFhhAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50Lmluc2VydFgBAAAALXRyaUwAAFgQAAAAZnRwbGliLkZUUC5hYm9ydHJqTAAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuRlRQLmFib3J0WAEAAAAtdHJrTAAAWCMAAABUa2ludGVyLldpZGdldC50ay5jcmVhdGVmaWxlaGFuZGxlcnJsTAAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90a2ludGVyLmh0bWwjVGtpbnRlci5XaWRnZXQudGsuY3JlYXRlZmlsZWhhbmRsZXJYAQAAAC10cm1MAABYGAAAAG1pbWV0eXBlcy5NaW1lVHlwZXMucmVhZHJuTAAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW1ldHlwZXMuaHRtbCNtaW1ldHlwZXMuTWltZVR5cGVzLnJlYWRYAQAAAC10cm9MAABYGQAAAGxvZ2dpbmcuTG9nZ2VyLm1ha2VSZWNvcmRycEwAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuTG9nZ2VyLm1ha2VSZWNvcmRYAQAAAC10cnFMAABYKgAAAGxvZ2dpbmcuaGFuZGxlcnMuU29ja2V0SGFuZGxlci5oYW5kbGVFcnJvcnJyTAAAKGppAQAAamoBAABYYgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5Tb2NrZXRIYW5kbGVyLmhhbmRsZUVycm9yWAEAAAAtdHJzTAAAWBkAAABkZWNpbWFsLkNvbnRleHQuaXNfZmluaXRlcnRMAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQuaXNfZmluaXRlWAEAAAAtdHJ1TAAAWBcAAABzZWxlY3QuZXBvbGwudW5yZWdpc3RlcnJ2TAAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZWxlY3QuaHRtbCNzZWxlY3QuZXBvbGwudW5yZWdpc3RlclgBAAAALXRyd0wAAFgZAAAAc3VuYXUuQVVfcmVhZC5nZXRjb21wdHlwZXJ4TAAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdW5hdS5odG1sI3N1bmF1LkFVX3JlYWQuZ2V0Y29tcHR5cGVYAQAAAC10cnlMAABYDgAAAGFpZmMuYWlmYy50ZWxscnpMAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FpZmMuaHRtbCNhaWZjLmFpZmMudGVsbFgBAAAALXRye0wAAFgbAAAAbWFpbGJveC5NYWlsZGlyLl9fc2V0aXRlbV9fcnxMAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxkaXIuX19zZXRpdGVtX19YAQAAAC10cn1MAABYCwAAAHN0ci5pc2xvd2Vycn5MAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLmlzbG93ZXJYAQAAAC10cn9MAABYIwAAAGNvZGUuSW50ZXJhY3RpdmVJbnRlcnByZXRlci5ydW5jb2RlcoBMAAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGUuaHRtbCNjb2RlLkludGVyYWN0aXZlSW50ZXJwcmV0ZXIucnVuY29kZVgBAAAALXRygUwAAFgtAAAAeG1sLnNheC54bWxyZWFkZXIuQXR0cmlidXRlc05TLmdldE5hbWVCeVFOYW1lcoJMAAAoamkBAABqagEAAFhjAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuQXR0cmlidXRlc05TLmdldE5hbWVCeVFOYW1lWAEAAAAtdHKDTAAAWBsAAABkZWNpbWFsLkRlY2ltYWwubG9naWNhbF94b3JyhEwAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5sb2dpY2FsX3hvclgBAAAALXRyhUwAAFgfAAAAZW1haWwuaGVhZGVyLkhlYWRlci5fX3VuaWNvZGVfX3KGTAAAKGppAQAAamoBAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5oZWFkZXIuaHRtbCNlbWFpbC5oZWFkZXIuSGVhZGVyLl9fdW5pY29kZV9fWAEAAAAtdHKHTAAAWBcAAABkZWNpbWFsLkNvbnRleHQuaXNfcW5hbnKITAAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmlzX3FuYW5YAQAAAC10colMAABYEgAAAHJlLk1hdGNoT2JqZWN0LmVuZHKKTAAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZS5odG1sI3JlLk1hdGNoT2JqZWN0LmVuZFgBAAAALXRyi0wAAFgXAAAAZGF0ZXRpbWUudHppbmZvLmZyb211dGNyjEwAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS50emluZm8uZnJvbXV0Y1gBAAAALXRyjUwAAFgaAAAAaW8uQnVmZmVyZWRJT0Jhc2UucmVhZGludG9yjkwAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW8uaHRtbCNpby5CdWZmZXJlZElPQmFzZS5yZWFkaW50b1gBAAAALXRyj0wAAFgTAAAAaW1hcGxpYi5JTUFQNC5jbG9zZXKQTAAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5jbG9zZVgBAAAALXRykUwAAFgmAAAAZW1haWwubWVzc2FnZS5NZXNzYWdlLmdldF9jb250ZW50X3R5cGVykkwAAChqaQEAAGpqAQAAWFsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS5nZXRfY29udGVudF90eXBlWAEAAAAtdHKTTAAAWBcAAABjdXJzZXMud2luZG93LnJlZHJhd3dpbnKUTAAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LnJlZHJhd3dpblgBAAAALXRylUwAAFgXAAAAZGF0ZXRpbWUudGltZS5pc29mb3JtYXRylkwAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS50aW1lLmlzb2Zvcm1hdFgBAAAALXRyl0wAAFglAAAAb3NzYXVkaW9kZXYub3NzX2F1ZGlvX2RldmljZS5ub25ibG9ja3KYTAAAKGppAQAAamoBAABYWAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vc3NhdWRpb2Rldi5odG1sI29zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2Uubm9uYmxvY2tYAQAAAC10cplMAABYEAAAAGNtZC5DbWQucG9zdGxvb3BymkwAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY21kLmh0bWwjY21kLkNtZC5wb3N0bG9vcFgBAAAALXRym0wAAFgTAAAAbWhsaWIuTUguZ2V0Y29udGV4dHKcTAAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taGxpYi5odG1sI21obGliLk1ILmdldGNvbnRleHRYAQAAAC10cp1MAABYHAAAAHVuaXR0ZXN0LlRlc3RSZXN1bHQuc3RvcFRlc3RynkwAAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0UmVzdWx0LnN0b3BUZXN0WAEAAAAtdHKfTAAAWBUAAABmbC5mb3JtLmFkZF92YWxzbGlkZXJyoEwAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmwuaHRtbCNmbC5mb3JtLmFkZF92YWxzbGlkZXJYAQAAAC10cqFMAABYKgAAAHVybGxpYjIuSFRUUFBhc3N3b3JkTWdyLmZpbmRfdXNlcl9wYXNzd29yZHKiTAAAKGppAQAAamoBAABYWQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5IVFRQUGFzc3dvcmRNZ3IuZmluZF91c2VyX3Bhc3N3b3JkWAEAAAAtdHKjTAAAWBsAAABtYWlsYm94Lk1haWxib3guX19zZXRpdGVtX19ypEwAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGJveC5fX3NldGl0ZW1fX1gBAAAALXRypUwAAFgQAAAAc3FsaXRlMy5Sb3cua2V5c3KmTAAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy5Sb3cua2V5c1gBAAAALXRyp0wAAFguAAAAZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIubGlicmFyeV9maWxlbmFtZXKoTAAAKGppAQAAamoBAABYXgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmxpYnJhcnlfZmlsZW5hbWVYAQAAAC10cqlMAABYIQAAAGVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5fX3NldGl0ZW1fX3KqTAAAKGppAQAAamoBAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5NZXNzYWdlLl9fc2V0aXRlbV9fWAEAAAAtdHKrTAAAWBUAAABkYXRldGltZS5kYXRldGltZS5kc3RyrEwAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS5kc3RYAQAAAC10cq1MAABYNQAAAHhtbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5TdGFydE5hbWVzcGFjZURlY2xIYW5kbGVycq5MAAAoamkBAABqagEAAFhkAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuU3RhcnROYW1lc3BhY2VEZWNsSGFuZGxlclgBAAAALXRyr0wAAFggAAAAZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIuc2V0X3NlcTJysEwAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlmZmxpYi5odG1sI2RpZmZsaWIuU2VxdWVuY2VNYXRjaGVyLnNldF9zZXEyWAEAAAAtdHKxTAAAWCAAAABkaWZmbGliLlNlcXVlbmNlTWF0Y2hlci5zZXRfc2VxMXKyTAAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kaWZmbGliLmh0bWwjZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIuc2V0X3NlcTFYAQAAAC10crNMAABYGAAAAHhtbHJwY2xpYi5Cb29sZWFuLmVuY29kZXK0TAAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWxycGNsaWIuaHRtbCN4bWxycGNsaWIuQm9vbGVhbi5lbmNvZGVYAQAAAC10crVMAABYGQAAAHNvY2tldC5zb2NrZXQuc2V0YmxvY2tpbmdytkwAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LnNvY2tldC5zZXRibG9ja2luZ1gBAAAALXRyt0wAAFg2AAAAZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuc2V0X3J1bnRpbWVfbGlicmFyeV9kaXJzcrhMAAAoamkBAABqagEAAFhmAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuc2V0X3J1bnRpbWVfbGlicmFyeV9kaXJzWAEAAAAtdHK5TAAAWB0AAABhc3QuTm9kZVZpc2l0b3IuZ2VuZXJpY192aXNpdHK6TAAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hc3QuaHRtbCNhc3QuTm9kZVZpc2l0b3IuZ2VuZXJpY192aXNpdFgBAAAALXRyu0wAAFgWAAAARnJhbWVXb3JrLldpbmRvdy5jbG9zZXK8TAAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcmFtZXdvcmsuaHRtbCNGcmFtZVdvcmsuV2luZG93LmNsb3NlWAEAAAAtdHK9TAAAWCIAAABmb3JtYXR0ZXIud3JpdGVyLnNlbmRfZmxvd2luZ19kYXRhcr5MAAAoamkBAABqagEAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Zvcm1hdHRlci5odG1sI2Zvcm1hdHRlci53cml0ZXIuc2VuZF9mbG93aW5nX2RhdGFYAQAAAC10cr9MAABYEgAAAG5udHBsaWIuTk5UUC5paGF2ZXLATAAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9ubnRwbGliLmh0bWwjbm50cGxpYi5OTlRQLmloYXZlWAEAAAAtdHLBTAAAWA8AAABvYmplY3QuX19pbW9kX19ywkwAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19pbW9kX19YAQAAAC10csNMAABYDwAAAFF1ZXVlLlF1ZXVlLmdldHLETAAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9xdWV1ZS5odG1sI1F1ZXVlLlF1ZXVlLmdldFgBAAAALXRyxUwAAFgmAAAAeG1sLmV0cmVlLkVsZW1lbnRUcmVlLlRyZWVCdWlsZGVyLmRhdGFyxkwAAChqaQEAAGpqAQAAWGMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLlRyZWVCdWlsZGVyLmRhdGFYAQAAAC10csdMAABYEAAAAHBvcGxpYi5QT1AzLnJzZXRyyEwAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcG9wbGliLmh0bWwjcG9wbGliLlBPUDMucnNldFgBAAAALXRyyUwAAFgmAAAAdXJsbGliMi5CYXNlSGFuZGxlci5odHRwX2Vycm9yX2RlZmF1bHRyykwAAChqaQEAAGpqAQAAWFUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuQmFzZUhhbmRsZXIuaHR0cF9lcnJvcl9kZWZhdWx0WAEAAAAtdHLLTAAAWCQAAABzZ21sbGliLlNHTUxQYXJzZXIuY29udmVydF9jb2RlcG9pbnRyzEwAAChqaQEAAGpqAQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2dtbGxpYi5odG1sI3NnbWxsaWIuU0dNTFBhcnNlci5jb252ZXJ0X2NvZGVwb2ludFgBAAAALXRyzUwAAFgSAAAAYXJyYXkuYXJyYXkucmVtb3Zlcs5MAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FycmF5Lmh0bWwjYXJyYXkuYXJyYXkucmVtb3ZlWAEAAAAtdHLPTAAAWBQAAABjdXJzZXMud2luZG93LnB1dHdpbnLQTAAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LnB1dHdpblgBAAAALXRy0UwAAFgiAAAAbWFpbGJveC5NYWlsZGlyTWVzc2FnZS5yZW1vdmVfZmxhZ3LSTAAAKGppAQAAamoBAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsZGlyTWVzc2FnZS5yZW1vdmVfZmxhZ1gBAAAALXRy00wAAFgXAAAAbWFpbGJveC5NYWlsYm94Lmhhc19rZXly1EwAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGJveC5oYXNfa2V5WAEAAAAtdHLVTAAAWA4AAABvYmplY3QuX19zdWJfX3LWTAAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX3N1Yl9fWAEAAAAtdHLXTAAAWBYAAABtYWlsYm94Lk1haWxib3gudXBkYXRlcthMAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxib3gudXBkYXRlWAEAAAAtdHLZTAAAWBEAAABwZGIuUGRiLnNldF90cmFjZXLaTAAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wZGIuaHRtbCNwZGIuUGRiLnNldF90cmFjZVgBAAAALXRy20wAAFggAAAAZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIuc2V0X3NlcXNy3EwAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlmZmxpYi5odG1sI2RpZmZsaWIuU2VxdWVuY2VNYXRjaGVyLnNldF9zZXFzWAEAAAAtdHLdTAAAWBsAAABzeW10YWJsZS5TeW1ib2xUYWJsZS5sb29rdXBy3kwAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3ltdGFibGUuaHRtbCNzeW10YWJsZS5TeW1ib2xUYWJsZS5sb29rdXBYAQAAAC10ct9MAABYFwAAAGlvLkJ1ZmZlcmVkSU9CYXNlLnJlYWQxcuBMAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uQnVmZmVyZWRJT0Jhc2UucmVhZDFYAQAAAC10cuFMAABYFgAAAHJmYzgyMi5NZXNzYWdlLmdldGFkZHJy4kwAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmZjODIyLmh0bWwjcmZjODIyLk1lc3NhZ2UuZ2V0YWRkclgBAAAALXRy40wAAFgYAAAAYmRiLkJkYi5jbGVhcl9icGJ5bnVtYmVycuRMAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JkYi5odG1sI2JkYi5CZGIuY2xlYXJfYnBieW51bWJlclgBAAAALXRy5UwAAFgYAAAAY29sbGVjdGlvbnMuZGVxdWUuYXBwZW5kcuZMAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuZGVxdWUuYXBwZW5kWAEAAAAtdHLnTAAAWAoAAABzdHIuZm9ybWF0cuhMAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLmZvcm1hdFgBAAAALXRy6UwAAFgQAAAAbWFpbGJveC5NSC5jbG9zZXLqTAAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NSC5jbG9zZVgBAAAALXRy60wAAFg3AAAAdXJsbGliMi5BYnN0cmFjdERpZ2VzdEF1dGhIYW5kbGVyLmh0dHBfZXJyb3JfYXV0aF9yZXFlZHLsTAAAKGppAQAAamoBAABYZgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5BYnN0cmFjdERpZ2VzdEF1dGhIYW5kbGVyLmh0dHBfZXJyb3JfYXV0aF9yZXFlZFgBAAAALXRy7UwAAFgdAAAAbXVsdGlwcm9jZXNzaW5nLlJMb2NrLmFjcXVpcmVy7kwAAChqaQEAAGpqAQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLlJMb2NrLmFjcXVpcmVYAQAAAC10cu9MAABYEAAAAGFpZmMuYWlmYy5zZXRwb3Ny8EwAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWlmYy5odG1sI2FpZmMuYWlmYy5zZXRwb3NYAQAAAC10cvFMAABYFQAAAHNjaGVkLnNjaGVkdWxlci5lbnRlcnLyTAAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zY2hlZC5odG1sI3NjaGVkLnNjaGVkdWxlci5lbnRlclgBAAAALXRy80wAAFgQAAAAUXVldWUuUXVldWUuam9pbnL0TAAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9xdWV1ZS5odG1sI1F1ZXVlLlF1ZXVlLmpvaW5YAQAAAC10cvVMAABYLgAAAGRpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLnNldF9saWJyYXJ5X2RpcnNy9kwAAChqaQEAAGpqAQAAWF4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5zZXRfbGlicmFyeV9kaXJzWAEAAAAtdHL3TAAAWA4AAABvYmplY3QuX19pb3JfX3L4TAAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2lvcl9fWAEAAAAtdHL5TAAAWBQAAABsb2dnaW5nLkhhbmRsZXIuZW1pdHL6TAAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5IYW5kbGVyLmVtaXRYAQAAAC10cvtMAABYMAAAAGRpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmxpbmtfc2hhcmVkX29iamVjdHL8TAAAKGppAQAAamoBAABYYAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmxpbmtfc2hhcmVkX29iamVjdFgBAAAALXRy/UwAAFgYAAAAY29sbGVjdGlvbnMuZGVxdWUucm90YXRlcv5MAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuZGVxdWUucm90YXRlWAEAAAAtdHL/TAAAWBMAAABjdXJzZXMud2luZG93LmFkZGNocgBNAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cuYWRkY2hYAQAAAC10cgFNAABYGwAAAHVuaXR0ZXN0LlRlc3RTdWl0ZS5hZGRUZXN0c3ICTQAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RTdWl0ZS5hZGRUZXN0c1gBAAAALXRyA00AAFgZAAAAbXNpbGliLlZpZXcuR2V0Q29sdW1uSW5mb3IETQAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuVmlldy5HZXRDb2x1bW5JbmZvWAEAAAAtdHIFTQAAWBwAAABjb2xsZWN0aW9ucy5kZXF1ZS5hcHBlbmRsZWZ0cgZNAAAoamkBAABqagEAAFhPAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuZGVxdWUuYXBwZW5kbGVmdFgBAAAALXRyB00AAFgRAAAAdHRrLlRyZWV2aWV3Lml0ZW1yCE0AAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLlRyZWV2aWV3Lml0ZW1YAQAAAC10cglNAABYEQAAAG9iamVjdC5fX2xzaGlmdF9fcgpNAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fbHNoaWZ0X19YAQAAAC10cgtNAABYHAAAAG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzLmpvaW5yDE0AAChqaQEAAGpqAQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3Muam9pblgBAAAALXRyDU0AAFggAAAAbWFpbGJveC5CYWJ5bE1lc3NhZ2UuZ2V0X3Zpc2libGVyDk0AAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guQmFieWxNZXNzYWdlLmdldF92aXNpYmxlWAEAAAAtdHIPTQAAWBMAAABvYmplY3QuX19mbG9vcmRpdl9fchBNAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fZmxvb3JkaXZfX1gBAAAALXRyEU0AAFgzAAAAZGlzdHV0aWxzLmZhbmN5X2dldG9wdC5GYW5jeUdldG9wdC5nZXRfb3B0aW9uX29yZGVychJNAAAoamkBAABqagEAAFhjAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmZhbmN5X2dldG9wdC5GYW5jeUdldG9wdC5nZXRfb3B0aW9uX29yZGVyWAEAAAAtdHITTQAAWBEAAABvYmplY3QuX19pbnZlcnRfX3IUTQAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2ludmVydF9fWAEAAAAtdHIVTQAAWBEAAABmbC5mb3JtLmZpbmRfbGFzdHIWTQAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbC5odG1sI2ZsLmZvcm0uZmluZF9sYXN0WAEAAAAtdHIXTQAAWBEAAABmbC5mb3JtLmhpZGVfZm9ybXIYTQAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbC5odG1sI2ZsLmZvcm0uaGlkZV9mb3JtWAEAAAAtdHIZTQAAWBIAAABvYmplY3QuX19zZXRhdHRyX19yGk0AAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19zZXRhdHRyX19YAQAAAC10chtNAABYGAAAAGxvZ2dpbmcuTG9nZ2VyLmV4Y2VwdGlvbnIcTQAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5Mb2dnZXIuZXhjZXB0aW9uWAEAAAAtdHIdTQAAWBkAAABkZWNpbWFsLkNvbnRleHQuY29weV9zaWduch5NAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQuY29weV9zaWduWAEAAAAtdHIfTQAAWBsAAAB1cmxsaWIyLkZUUEhhbmRsZXIuZnRwX29wZW5yIE0AAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuRlRQSGFuZGxlci5mdHBfb3BlblgBAAAALXRyIU0AAFgaAAAAbWhsaWIuTUgubGlzdGFsbHN1YmZvbGRlcnNyIk0AAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWhsaWIuaHRtbCNtaGxpYi5NSC5saXN0YWxsc3ViZm9sZGVyc1gBAAAALXRyI00AAFgTAAAAZGF0ZXRpbWUuZGF0ZS5jdGltZXIkTQAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGUuY3RpbWVYAQAAAC10ciVNAABYFQAAAHdhdmUuV2F2ZV93cml0ZS5jbG9zZXImTQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93YXZlLmh0bWwjd2F2ZS5XYXZlX3dyaXRlLmNsb3NlWAEAAAAtdHInTQAAWBUAAABzbXRwbGliLlNNVFAuaGFzX2V4dG5yKE0AAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc210cGxpYi5odG1sI3NtdHBsaWIuU01UUC5oYXNfZXh0blgBAAAALXRyKU0AAFgKAAAAZGljdC5pdGVtc3IqTQAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2RpY3QuaXRlbXNYAQAAAC10citNAABYJwAAAGRvY3Rlc3QuT3V0cHV0Q2hlY2tlci5vdXRwdXRfZGlmZmVyZW5jZXIsTQAAKGppAQAAamoBAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5PdXRwdXRDaGVja2VyLm91dHB1dF9kaWZmZXJlbmNlWAEAAAAtdHItTQAAWBoAAAB0ZWxuZXRsaWIuVGVsbmV0LnJlYWRfbGF6eXIuTQAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZWxuZXRsaWIuaHRtbCN0ZWxuZXRsaWIuVGVsbmV0LnJlYWRfbGF6eVgBAAAALXRyL00AAFgtAAAAeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnRUcmVlLmdldGl0ZXJhdG9ycjBNAAAoamkBAABqagEAAFhqAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50VHJlZS5nZXRpdGVyYXRvclgBAAAALXRyMU0AAFgyAAAAeG1sLnNheC5oYW5kbGVyLkNvbnRlbnRIYW5kbGVyLmlnbm9yYWJsZVdoaXRlc3BhY2VyMk0AAChqaQEAAGpqAQAAWGkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLkNvbnRlbnRIYW5kbGVyLmlnbm9yYWJsZVdoaXRlc3BhY2VYAQAAAC10cjNNAABYGAAAAGNvbGxlY3Rpb25zLmRlcXVlLnJlbW92ZXI0TQAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2xsZWN0aW9ucy5odG1sI2NvbGxlY3Rpb25zLmRlcXVlLnJlbW92ZVgBAAAALXRyNU0AAFgWAAAAc2hsZXguc2hsZXguc291cmNlaG9va3I2TQAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaGxleC5odG1sI3NobGV4LnNobGV4LnNvdXJjZWhvb2tYAQAAAC10cjdNAABYEQAAAGJkYi5CZGIuc2V0X3VudGlscjhNAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JkYi5odG1sI2JkYi5CZGIuc2V0X3VudGlsWAEAAAAtdHI5TQAAWA8AAABmcm96ZW5zZXQudW5pb25yOk0AAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNmcm96ZW5zZXQudW5pb25YAQAAAC10cjtNAABYGAAAAGRhdGV0aW1lLmRhdGUuX19mb3JtYXRfX3I8TQAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGUuX19mb3JtYXRfX1gBAAAALXRyPU0AAFgSAAAAc3VuYXUuQVVfcmVhZC50ZWxscj5NAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUuQVVfcmVhZC50ZWxsWAEAAAAtdHI/TQAAWBgAAABzcWxpdGUzLkN1cnNvci5mZXRjaG1hbnlyQE0AAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuQ3Vyc29yLmZldGNobWFueVgBAAAALXRyQU0AAFgcAAAAZm9ybWF0dGVyLndyaXRlci5uZXdfc3BhY2luZ3JCTQAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIud3JpdGVyLm5ld19zcGFjaW5nWAEAAAAtdHJDTQAAWBYAAABjdXJzZXMud2luZG93LmdldGJlZ3l4ckRNAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cuZ2V0YmVneXhYAQAAAC10ckVNAABYEgAAAHNlbGVjdC5wb2xsLm1vZGlmeXJGTQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZWxlY3QuaHRtbCNzZWxlY3QucG9sbC5tb2RpZnlYAQAAAC10ckdNAABYEwAAAG9iamVjdC5fX2l0cnVlZGl2X19ySE0AAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19pdHJ1ZWRpdl9fWAEAAAAtdHJJTQAAWB0AAAB0dGsuVHJlZXZpZXcuaWRlbnRpZnlfZWxlbWVudHJKTQAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuVHJlZXZpZXcuaWRlbnRpZnlfZWxlbWVudFgBAAAALXRyS00AAFgpAAAAeG1sLnNheC54bWxyZWFkZXIuSW5wdXRTb3VyY2Uuc2V0RW5jb2RpbmdyTE0AAChqaQEAAGpqAQAAWF8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCN4bWwuc2F4LnhtbHJlYWRlci5JbnB1dFNvdXJjZS5zZXRFbmNvZGluZ1gBAAAALXRyTU0AAFgPAAAAZmlsZS53cml0ZWxpbmVzck5NAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZmlsZS53cml0ZWxpbmVzWAEAAAAtdHJPTQAAWBYAAAB1bml0dGVzdC5UZXN0Q2FzZS5mYWlsclBNAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UuZmFpbFgBAAAALXRyUU0AAFgQAAAAaG1hYy5ITUFDLnVwZGF0ZXJSTQAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9obWFjLmh0bWwjaG1hYy5ITUFDLnVwZGF0ZVgBAAAALXRyU00AAFgRAAAAZmwuZm9ybS5hZGRfdGltZXJyVE0AAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZmwuaHRtbCNmbC5mb3JtLmFkZF90aW1lclgBAAAALXRyVU0AAFgaAAAAbWhsaWIuRm9sZGVyLnBhcnNlc2VxdWVuY2VyVk0AAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWhsaWIuaHRtbCNtaGxpYi5Gb2xkZXIucGFyc2VzZXF1ZW5jZVgBAAAALXRyV00AAFgiAAAAZm9ybWF0dGVyLmZvcm1hdHRlci5hZGRfbGluZV9icmVha3JYTQAAKGppAQAAamoBAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIuZm9ybWF0dGVyLmFkZF9saW5lX2JyZWFrWAEAAAAtdHJZTQAAWCMAAAB1cmxsaWIyLlJlcXVlc3QuZ2V0X29yaWdpbl9yZXFfaG9zdHJaTQAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5SZXF1ZXN0LmdldF9vcmlnaW5fcmVxX2hvc3RYAQAAAC10cltNAABYKgAAAGRpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmhhc19mdW5jdGlvbnJcTQAAKGppAQAAamoBAABYWgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmhhc19mdW5jdGlvblgBAAAALXRyXU0AAFg0AAAAQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5hZGRyZXNzX3N0cmluZ3JeTQAAKGppAQAAamoBAABYagAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXNlaHR0cHNlcnZlci5odG1sI0Jhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuYWRkcmVzc19zdHJpbmdYAQAAAC10cl9NAABYFQAAAHBpcGVzLlRlbXBsYXRlLmFwcGVuZHJgTQAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9waXBlcy5odG1sI3BpcGVzLlRlbXBsYXRlLmFwcGVuZFgBAAAALXRyYU0AAFgeAAAAdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0UmFpc2VzcmJNAAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0UmFpc2VzWAEAAAAtdHJjTQAAWC0AAAB4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuRW50aXR5RGVjbEhhbmRsZXJyZE0AAChqaQEAAGpqAQAAWFwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5FbnRpdHlEZWNsSGFuZGxlclgBAAAALXRyZU0AAFgdAAAAc3ltdGFibGUuU3ltYm9sLmdldF9uYW1lc3BhY2VyZk0AAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3ltdGFibGUuaHRtbCNzeW10YWJsZS5TeW1ib2wuZ2V0X25hbWVzcGFjZVgBAAAALXRyZ00AAFgQAAAAZnRwbGliLkZUUC5sb2dpbnJoTQAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuRlRQLmxvZ2luWAEAAAAtdHJpTQAAWDQAAABhcmdwYXJzZS5Bcmd1bWVudFBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwcmpNAAAoamkBAABqagEAAFhkAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FyZ3BhcnNlLmh0bWwjYXJncGFyc2UuQXJndW1lbnRQYXJzZXIuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cFgBAAAALXRya00AAFgUAAAAZGVjaW1hbC5Db250ZXh0LkV0b3BybE0AAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5FdG9wWAEAAAAtdHJtTQAAWCcAAAB4bWwuZG9tLkRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lTlNybk0AAChqaQEAAGpqAQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uRG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWVOU1gBAAAALXRyb00AAFgUAAAAY3Vyc2VzLndpbmRvdy5zeW5jb2tycE0AAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5zeW5jb2tYAQAAAC10cnFNAABYFQAAAGN1cnNlcy53aW5kb3cubGVhdmVva3JyTQAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmxlYXZlb2tYAQAAAC10cnNNAABYGAAAAHNjaGVkLnNjaGVkdWxlci5lbnRlcmFic3J0TQAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zY2hlZC5odG1sI3NjaGVkLnNjaGVkdWxlci5lbnRlcmFic1gBAAAALXRydU0AAFgTAAAAb2JqZWN0Ll9fZGVsc2xpY2VfX3J2TQAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2RlbHNsaWNlX19YAQAAAC10cndNAABYEQAAAG5udHBsaWIuTk5UUC5oZWxwcnhNAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L25udHBsaWIuaHRtbCNubnRwbGliLk5OVFAuaGVscFgBAAAALXRyeU0AAFgXAAAAY3Vyc2VzLnBhbmVsLlBhbmVsLmhpZGVyek0AAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3Vyc2VzLnBhbmVsLmh0bWwjY3Vyc2VzLnBhbmVsLlBhbmVsLmhpZGVYAQAAAC10cntNAABYFwAAAHRlbG5ldGxpYi5UZWxuZXQuZXhwZWN0cnxNAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RlbG5ldGxpYi5odG1sI3RlbG5ldGxpYi5UZWxuZXQuZXhwZWN0WAEAAAAtdHJ9TQAAWBsAAABkYXRldGltZS5kYXRldGltZS51dGNvZmZzZXRyfk0AAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS51dGNvZmZzZXRYAQAAAC10cn9NAABYGwAAAG1zaWxpYi5SZWNvcmQuR2V0RmllbGRDb3VudHKATQAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuUmVjb3JkLkdldEZpZWxkQ291bnRYAQAAAC10coFNAABYGQAAAHN5bXRhYmxlLlN5bWJvbC5pc19nbG9iYWxygk0AAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3ltdGFibGUuaHRtbCNzeW10YWJsZS5TeW1ib2wuaXNfZ2xvYmFsWAEAAAAtdHKDTQAAWBAAAABiejIuQloyRmlsZS5yZWFkcoRNAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2J6Mi5odG1sI2J6Mi5CWjJGaWxlLnJlYWRYAQAAAC10coVNAABYDwAAAG9iamVjdC5fX2NhbGxfX3KGTQAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2NhbGxfX1gBAAAALXRyh00AAFgjAAAAY2FsZW5kYXIuQ2FsZW5kYXIueWVhcmRhdGVzY2FsZW5kYXJyiE0AAChqaQEAAGpqAQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci5DYWxlbmRhci55ZWFyZGF0ZXNjYWxlbmRhclgBAAAALXRyiU0AAFgWAAAAemxpYi5Db21wcmVzcy5jb21wcmVzc3KKTQAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96bGliLmh0bWwjemxpYi5Db21wcmVzcy5jb21wcmVzc1gBAAAALXRyi00AAFgUAAAAX3dpbnJlZy5QeUhLRVkuQ2xvc2VyjE0AAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvX3dpbnJlZy5odG1sI193aW5yZWcuUHlIS0VZLkNsb3NlWAEAAAAtdHKNTQAAWBQAAAB6bGliLkRlY29tcHJlc3MuY29weXKOTQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96bGliLmh0bWwjemxpYi5EZWNvbXByZXNzLmNvcHlYAQAAAC10co9NAABYHgAAAGNvb2tpZWxpYi5GaWxlQ29va2llSmFyLnJldmVydHKQTQAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuRmlsZUNvb2tpZUphci5yZXZlcnRYAQAAAC10cpFNAABYIwAAAGNhbGVuZGFyLkNhbGVuZGFyLnllYXJkYXlzMmNhbGVuZGFycpJNAAAoamkBAABqagEAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhbGVuZGFyLmh0bWwjY2FsZW5kYXIuQ2FsZW5kYXIueWVhcmRheXMyY2FsZW5kYXJYAQAAAC10cpNNAABYMAAAAHRlbG5ldGxpYi5UZWxuZXQuc2V0X29wdGlvbl9uZWdvdGlhdGlvbl9jYWxsYmFja3KUTQAAKGppAQAAamoBAABYYQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZWxuZXRsaWIuaHRtbCN0ZWxuZXRsaWIuVGVsbmV0LnNldF9vcHRpb25fbmVnb3RpYXRpb25fY2FsbGJhY2tYAQAAAC10cpVNAABYEQAAAG1haWxib3guTUgudW5sb2NrcpZNAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1ILnVubG9ja1gBAAAALXRyl00AAFgQAAAAcG9wbGliLlBPUDMuYXBvcHKYTQAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wb3BsaWIuaHRtbCNwb3BsaWIuUE9QMy5hcG9wWAEAAAAtdHKZTQAAWBMAAABzdW5hdS5BVV9yZWFkLmNsb3NlcppNAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUuQVVfcmVhZC5jbG9zZVgBAAAALXRym00AAFgXAAAAcHJvZmlsZS5Qcm9maWxlLmRpc2FibGVynE0AAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHJvZmlsZS5odG1sI3Byb2ZpbGUuUHJvZmlsZS5kaXNhYmxlWAEAAAAtdHKdTQAAWBcAAAB4bWxycGNsaWIuQmluYXJ5LmVuY29kZXKeTQAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWxycGNsaWIuaHRtbCN4bWxycGNsaWIuQmluYXJ5LmVuY29kZVgBAAAALXRyn00AAFgkAAAAc2dtbGxpYi5TR01MUGFyc2VyLnJlcG9ydF91bmJhbGFuY2VkcqBNAAAoamkBAABqagEAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NnbWxsaWIuaHRtbCNzZ21sbGliLlNHTUxQYXJzZXIucmVwb3J0X3VuYmFsYW5jZWRYAQAAAC10cqFNAABYGgAAAGRlY2ltYWwuRGVjaW1hbC5sb2dpY2FsX29ycqJNAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwubG9naWNhbF9vclgBAAAALXRyo00AAFgrAAAAZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuc2V0X2xpYnJhcmllc3KkTQAAKGppAQAAamoBAABYWwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLnNldF9saWJyYXJpZXNYAQAAAC10cqVNAABYHAAAAEZyYW1lV29yay5XaW5kb3cuZG9fYWN0aXZhdGVypk0AAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnJhbWV3b3JrLmh0bWwjRnJhbWVXb3JrLldpbmRvdy5kb19hY3RpdmF0ZVgBAAAALXRyp00AAFgkAAAAbG9nZ2luZy5oYW5kbGVycy5Tb2NrZXRIYW5kbGVyLmNsb3NlcqhNAAAoamkBAABqagEAAFhcAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLlNvY2tldEhhbmRsZXIuY2xvc2VYAQAAAC10cqlNAABYLQAAAHhtbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlci5zZXRDb250ZW50SGFuZGxlcnKqTQAAKGppAQAAamoBAABYYwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlci5zZXRDb250ZW50SGFuZGxlclgBAAAALXRyq00AAFgxAAAAY29va2llbGliLkRlZmF1bHRDb29raWVQb2xpY3kuc2V0X2Jsb2NrZWRfZG9tYWluc3KsTQAAKGppAQAAamoBAABYYgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuRGVmYXVsdENvb2tpZVBvbGljeS5zZXRfYmxvY2tlZF9kb21haW5zWAEAAAAtdHKtTQAAWB0AAAB0dGsuVHJlZXZpZXcuc2VsZWN0aW9uX3RvZ2dsZXKuTQAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuVHJlZXZpZXcuc2VsZWN0aW9uX3RvZ2dsZVgBAAAALXRyr00AAFgWAAAAY3N2LlNuaWZmZXIuaGFzX2hlYWRlcnKwTQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jc3YuaHRtbCNjc3YuU25pZmZlci5oYXNfaGVhZGVyWAEAAAAtdHKxTQAAWBwAAAB0dGsuVHJlZXZpZXcuaWRlbnRpZnlfcmVnaW9ucrJNAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5UcmVldmlldy5pZGVudGlmeV9yZWdpb25YAQAAAC10crNNAABYHQAAAGVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5fX2xlbl9fcrRNAAAoamkBAABqagEAAFhSAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuX19sZW5fX1gBAAAALXRytU0AAHVYCAAAAHB5OmNsYXNzfXK2TQAAKFgMAAAAY3R5cGVzLkFycmF5crdNAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5BcnJheVgBAAAALXRyuE0AAFggAAAAbG9nZ2luZy5oYW5kbGVycy5EYXRhZ3JhbUhhbmRsZXJyuU0AAChqaQEAAGpqAQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuRGF0YWdyYW1IYW5kbGVyWAEAAAAtdHK6TQAAWBUAAAB0YXJmaWxlLlRhckZpbGVDb21wYXRyu00AAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuVGFyRmlsZUNvbXBhdFgBAAAALXRyvE0AAFgEAAAAdHlwZXK9TQAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCN0eXBlWAEAAAAtdHK+TQAAWA8AAABhZXR5cGVzLkJvb2xlYW5yv00AAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWV0eXBlcy5odG1sI2FldHlwZXMuQm9vbGVhblgBAAAALXRywE0AAFgTAAAAYnoyLkJaMkRlY29tcHJlc3NvcnLBTQAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iejIuaHRtbCNiejIuQloyRGVjb21wcmVzc29yWAEAAAAtdHLCTQAAWBcAAAB4bWxycGNsaWIuUHJvdG9jb2xFcnJvcnLDTQAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWxycGNsaWIuaHRtbCN4bWxycGNsaWIuUHJvdG9jb2xFcnJvclgBAAAALXRyxE0AAFgQAAAAc3VicHJvY2Vzcy5Qb3BlbnLFTQAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5Qb3BlblgBAAAALXRyxk0AAFgiAAAAZW1haWwubWltZS5tdWx0aXBhcnQuTUlNRU11bHRpcGFydHLHTQAAKGppAQAAamoBAABYVAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5taW1lLmh0bWwjZW1haWwubWltZS5tdWx0aXBhcnQuTUlNRU11bHRpcGFydFgBAAAALXRyyE0AAFgMAAAAY3R5cGVzLlVuaW9ucslNAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5VbmlvblgBAAAALXRyyk0AAFgXAAAAYWV0eXBlcy5JbnRsV3JpdGluZ0NvZGVyy00AAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWV0eXBlcy5odG1sI2FldHlwZXMuSW50bFdyaXRpbmdDb2RlWAEAAAAtdHLMTQAAWA4AAABsb2dnaW5nLkxvZ2dlcnLNTQAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5Mb2dnZXJYAQAAAC10cs5NAABYEwAAAFRpeC5FeEZpbGVTZWxlY3RCb3hyz00AAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGl4Lmh0bWwjVGl4LkV4RmlsZVNlbGVjdEJveFgBAAAALXRy0E0AAFgPAAAAUXVldWUuTGlmb1F1ZXVlctFNAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3F1ZXVlLmh0bWwjUXVldWUuTGlmb1F1ZXVlWAEAAAAtdHLSTQAAWB0AAABpbXB1dGlsLkR5bkxvYWRTdWZmaXhJbXBvcnRlcnLTTQAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbXB1dGlsLmh0bWwjaW1wdXRpbC5EeW5Mb2FkU3VmZml4SW1wb3J0ZXJYAQAAAC10ctRNAABYCwAAAGFiYy5BQkNNZXRhctVNAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FiYy5odG1sI2FiYy5BQkNNZXRhWAEAAAAtdHLWTQAAWAkAAABieXRlYXJyYXly100AAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjYnl0ZWFycmF5WAEAAAAtdHLYTQAAWBMAAABtYWlsYm94Lk1tZGZNYWlsYm94ctlNAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1tZGZNYWlsYm94WAEAAAAtdHLaTQAAWBkAAABTb2NrZXRTZXJ2ZXIuRm9ya2luZ01peElucttNAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI1NvY2tldFNlcnZlci5Gb3JraW5nTWl4SW5YAQAAAC10ctxNAABYEwAAAGNvZGVjcy5TdHJlYW1Xcml0ZXJy3U0AAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLlN0cmVhbVdyaXRlclgBAAAALXRy3k0AAFgVAAAAc210cGQuRGVidWdnaW5nU2VydmVyct9NAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NtdHBkLmh0bWwjc210cGQuRGVidWdnaW5nU2VydmVyWAEAAAAtdHLgTQAAWBQAAABjb2xsZWN0aW9ucy5JdGVyYXRvcnLhTQAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2xsZWN0aW9ucy5odG1sI2NvbGxlY3Rpb25zLkl0ZXJhdG9yWAEAAAAtdHLiTQAAWBAAAABudW1iZXJzLlJhdGlvbmFscuNNAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L251bWJlcnMuaHRtbCNudW1iZXJzLlJhdGlvbmFsWAEAAAAtdHLkTQAAWBUAAABkaXN0dXRpbHMuY21kLkNvbW1hbmRy5U0AAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY21kLkNvbW1hbmRYAQAAAC10cuZNAABYDwAAAHBvcGxpYi5QT1AzX1NTTHLnTQAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wb3BsaWIuaHRtbCNwb3BsaWIuUE9QM19TU0xYAQAAAC10cuhNAABYIgAAAGxvZ2dpbmcuaGFuZGxlcnMuTlRFdmVudExvZ0hhbmRsZXJy6U0AAChqaQEAAGpqAQAAWFoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuTlRFdmVudExvZ0hhbmRsZXJYAQAAAC10cupNAABYCQAAAHV1aWQuVVVJRHLrTQAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91dWlkLmh0bWwjdXVpZC5VVUlEWAEAAAAtdHLsTQAAWBQAAABjb2xsZWN0aW9ucy5JdGVyYWJsZXLtTQAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2xsZWN0aW9ucy5odG1sI2NvbGxlY3Rpb25zLkl0ZXJhYmxlWAEAAAAtdHLuTQAAWCMAAABtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi5MaXN0ZW5lcnLvTQAAKGppAQAAamoBAABYWgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi5MaXN0ZW5lclgBAAAALXRy8E0AAFgNAAAAdHVydGxlLlR1cnRsZXLxTQAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuVHVydGxlWAEAAAAtdHLyTQAAWAwAAABpby5SYXdJT0Jhc2Vy800AAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW8uaHRtbCNpby5SYXdJT0Jhc2VYAQAAAC10cvRNAABYKgAAAFNpbXBsZVhNTFJQQ1NlcnZlci5DR0lYTUxSUENSZXF1ZXN0SGFuZGxlcnL1TQAAKGppAQAAamoBAABYZAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaW1wbGV4bWxycGNzZXJ2ZXIuaHRtbCNTaW1wbGVYTUxSUENTZXJ2ZXIuQ0dJWE1MUlBDUmVxdWVzdEhhbmRsZXJYAQAAAC10cvZNAABYGwAAAGNvZGUuSW50ZXJhY3RpdmVJbnRlcnByZXRlcnL3TQAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlLmh0bWwjY29kZS5JbnRlcmFjdGl2ZUludGVycHJldGVyWAEAAAAtdHL4TQAAWA4AAABjdHlwZXMuSFJFU1VMVHL5TQAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuSFJFU1VMVFgBAAAALXRy+k0AAFgVAAAAYXN5bmNvcmUuZmlsZV93cmFwcGVycvtNAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzeW5jb3JlLmh0bWwjYXN5bmNvcmUuZmlsZV93cmFwcGVyWAEAAAAtdHL8TQAAWA8AAABhZXR5cGVzLlFEUG9pbnRy/U0AAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWV0eXBlcy5odG1sI2FldHlwZXMuUURQb2ludFgBAAAALXRy/k0AAFgRAAAAY29sbGVjdGlvbnMuU2l6ZWRy/00AAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5TaXplZFgBAAAALXRyAE4AAFgRAAAAaW1hcGxpYi5JTUFQNF9TU0xyAU4AAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDRfU1NMWAEAAAAtdHICTgAAWA8AAAB0aHJlYWRpbmcuVGltZXJyA04AAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLlRpbWVyWAEAAAAtdHIETgAAWAkAAABUaXguTWV0ZXJyBU4AAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGl4Lmh0bWwjVGl4Lk1ldGVyWAEAAAAtdHIGTgAAWBEAAABsb2dnaW5nLkZvcm1hdHRlcnIHTgAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5Gb3JtYXR0ZXJYAQAAAC10cghOAABYGQAAAG1vZHVsZWZpbmRlci5Nb2R1bGVGaW5kZXJyCU4AAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbW9kdWxlZmluZGVyLmh0bWwjbW9kdWxlZmluZGVyLk1vZHVsZUZpbmRlclgBAAAALXRyCk4AAFgKAAAAVGl4LlNlbGVjdHILTgAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aXguaHRtbCNUaXguU2VsZWN0WAEAAAAtdHIMTgAAWBQAAABwcHJpbnQuUHJldHR5UHJpbnRlcnINTgAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wcHJpbnQuaHRtbCNwcHJpbnQuUHJldHR5UHJpbnRlclgBAAAALXRyDk4AAFgZAAAAY3R5cGVzLkJpZ0VuZGlhblN0cnVjdHVyZXIPTgAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuQmlnRW5kaWFuU3RydWN0dXJlWAEAAAAtdHIQTgAAWAgAAABUaXguRm9ybXIRTgAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aXguaHRtbCNUaXguRm9ybVgBAAAALXRyEk4AAFgNAAAAbXNpbGliLkRpYWxvZ3ITTgAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuRGlhbG9nWAEAAAAtdHIUTgAAWBAAAABpby5UZXh0SU9XcmFwcGVychVOAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uVGV4dElPV3JhcHBlclgBAAAALXRyFk4AAFgoAAAAd3NnaXJlZi5zaW1wbGVfc2VydmVyLldTR0lSZXF1ZXN0SGFuZGxlcnIXTgAAKGppAQAAamoBAABYVwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi5zaW1wbGVfc2VydmVyLldTR0lSZXF1ZXN0SGFuZGxlclgBAAAALXRyGE4AAFgUAAAAY29sbGVjdGlvbnMuU2VxdWVuY2VyGU4AAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5TZXF1ZW5jZVgBAAAALXRyGk4AAFgUAAAAdXJsbGliMi5IVFRQU0hhbmRsZXJyG04AAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuSFRUUFNIYW5kbGVyWAEAAAAtdHIcTgAAWAsAAABUaXguQ29udHJvbHIdTgAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aXguaHRtbCNUaXguQ29udHJvbFgBAAAALXRyHk4AAFgTAAAAY29kZWNzLlN0cmVhbVJlYWRlcnIfTgAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuU3RyZWFtUmVhZGVyWAEAAAAtdHIgTgAAWBcAAAB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcnIhTgAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRleHRUZXN0UnVubmVyWAEAAAAtdHIiTgAAWBUAAABlbWFpbC5jaGFyc2V0LkNoYXJzZXRyI04AAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwuY2hhcnNldC5odG1sI2VtYWlsLmNoYXJzZXQuQ2hhcnNldFgBAAAALXRyJE4AAFgPAAAAY3R5cGVzLmNfdm9pZF9wciVOAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5jX3ZvaWRfcFgBAAAALXRyJk4AAFgRAAAAYXJncGFyc2UuRmlsZVR5cGVyJ04AAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXJncGFyc2UuaHRtbCNhcmdwYXJzZS5GaWxlVHlwZVgBAAAALXRyKE4AAFgSAAAAZGF0ZXRpbWUudGltZWRlbHRhcilOAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUudGltZWRlbHRhWAEAAAAtdHIqTgAAWB4AAAB0ZXN0LnN1cHBvcnQuVHJhbnNpZW50UmVzb3VyY2VyK04AAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5UcmFuc2llbnRSZXNvdXJjZVgBAAAALXRyLE4AAFgPAAAAZGVjaW1hbC5Db250ZXh0ci1OAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHRYAQAAAC10ci5OAABYFgAAAHVybGxpYjIuT3BlbmVyRGlyZWN0b3JyL04AAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuT3BlbmVyRGlyZWN0b3JYAQAAAC10cjBOAABYBQAAAHNsaWNlcjFOAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3NsaWNlWAEAAAAtdHIyTgAAWA8AAABtYWlsYm94Lk1haWxkaXJyM04AAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGRpclgBAAAALXRyNE4AAFggAAAAd3NnaXJlZi5zaW1wbGVfc2VydmVyLldTR0lTZXJ2ZXJyNU4AAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd3NnaXJlZi5odG1sI3dzZ2lyZWYuc2ltcGxlX3NlcnZlci5XU0dJU2VydmVyWAEAAAAtdHI2TgAAWA8AAABzbXRwZC5QdXJlUHJveHlyN04AAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc210cGQuaHRtbCNzbXRwZC5QdXJlUHJveHlYAQAAAC10cjhOAABYDwAAAGN0eXBlcy5jX2NoYXJfcHI5TgAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuY19jaGFyX3BYAQAAAC10cjpOAABYDAAAAHNoZWx2ZS5TaGVsZnI7TgAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaGVsdmUuaHRtbCNzaGVsdmUuU2hlbGZYAQAAAC10cjxOAABYEwAAAGRvY3Rlc3QuRGVidWdSdW5uZXJyPU4AAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRGVidWdSdW5uZXJYAQAAAC10cj5OAABYDgAAAG1zaWxpYi5GZWF0dXJlcj9OAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5GZWF0dXJlWAEAAAAtdHJATgAAWBcAAAB1cmxsaWIyLkNhY2hlRlRQSGFuZGxlcnJBTgAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5DYWNoZUZUUEhhbmRsZXJYAQAAAC10ckJOAABYAwAAAHNldHJDTgAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI3NldFgBAAAALXRyRE4AAFgXAAAAZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXJyRU4AAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlmZmxpYi5odG1sI2RpZmZsaWIuU2VxdWVuY2VNYXRjaGVyWAEAAAAtdHJGTgAAWAsAAABuZXRyYy5uZXRyY3JHTgAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9uZXRyYy5odG1sI25ldHJjLm5ldHJjWAEAAAAtdHJITgAAWBMAAABhc3luY29yZS5kaXNwYXRjaGVycklOAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzeW5jb3JlLmh0bWwjYXN5bmNvcmUuZGlzcGF0Y2hlclgBAAAALXRySk4AAFgSAAAAeG1scnBjbGliLkRhdGVUaW1lcktOAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbHJwY2xpYi5odG1sI3htbHJwY2xpYi5EYXRlVGltZVgBAAAALXRyTE4AAFgcAAAAd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlcnJNTgAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlclgBAAAALXRyTk4AAFgLAAAAY3N2LlNuaWZmZXJyT04AAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3N2Lmh0bWwjY3N2LlNuaWZmZXJYAQAAAC10clBOAABYEgAAAHNxbGl0ZTMuQ29ubmVjdGlvbnJRTgAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy5Db25uZWN0aW9uWAEAAAAtdHJSTgAAWCgAAABlbWFpbC5taW1lLm5vbm11bHRpcGFydC5NSU1FTm9uTXVsdGlwYXJ0clNOAAAoamkBAABqagEAAFhaAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLm1pbWUuaHRtbCNlbWFpbC5taW1lLm5vbm11bHRpcGFydC5NSU1FTm9uTXVsdGlwYXJ0WAEAAAAtdHJUTgAAWBgAAABlbWFpbC5taW1lLmJhc2UuTUlNRUJhc2VyVU4AAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwubWltZS5odG1sI2VtYWlsLm1pbWUuYmFzZS5NSU1FQmFzZVgBAAAALXRyVk4AAFgNAAAAVGl4LkJ1dHRvbkJveHJXTgAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aXguaHRtbCNUaXguQnV0dG9uQm94WAEAAAAtdHJYTgAAWAgAAABUaXguVHJlZXJZTgAAKGppAQAAamoBAABYMwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aXguaHRtbCNUaXguVHJlZVgBAAAALXRyWk4AAFgKAAAAbXNpbGliLkNBQnJbTgAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuQ0FCWAEAAAAtdHJcTgAAWA4AAABUaXguT3B0aW9uTWVudXJdTgAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aXguaHRtbCNUaXguT3B0aW9uTWVudVgBAAAALXRyXk4AAFgOAAAAbnVtYmVycy5OdW1iZXJyX04AAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbnVtYmVycy5odG1sI251bWJlcnMuTnVtYmVyWAEAAAAtdHJgTgAAWA0AAABwb3BlbjIuUG9wZW4zcmFOAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BvcGVuMi5odG1sI3BvcGVuMi5Qb3BlbjNYAQAAAC10cmJOAABYGAAAAHdzZ2lyZWYudXRpbC5GaWxlV3JhcHBlcnJjTgAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi51dGlsLkZpbGVXcmFwcGVyWAEAAAAtdHJkTgAAWAwAAAB0dGsuTm90ZWJvb2tyZU4AAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLk5vdGVib29rWAEAAAAtdHJmTgAAWA8AAAB0aHJlYWRpbmcubG9jYWxyZ04AAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLmxvY2FsWAEAAAAtdHJoTgAAWA0AAABwb3BlbjIuUG9wZW40cmlOAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BvcGVuMi5odG1sI3BvcGVuMi5Qb3BlbjRYAQAAAC10cmpOAABYDQAAAGN0eXBlcy5jX2Jvb2xya04AAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLmNfYm9vbFgBAAAALXRybE4AAFgQAAAAanNvbi5KU09ORGVjb2RlcnJtTgAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9qc29uLmh0bWwjanNvbi5KU09ORGVjb2RlclgBAAAALXRybk4AAFgdAAAAeG1sLnNheC5zYXh1dGlscy5YTUxHZW5lcmF0b3Jyb04AAChqaQEAAGpqAQAAWFIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC51dGlscy5odG1sI3htbC5zYXguc2F4dXRpbHMuWE1MR2VuZXJhdG9yWAEAAAAtdHJwTgAAWA8AAABhZXR5cGVzLk9yZGluYWxycU4AAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWV0eXBlcy5odG1sI2FldHlwZXMuT3JkaW5hbFgBAAAALXRyck4AAFgHAAAAY21kLkNtZHJzTgAAKGppAQAAamoBAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jbWQuaHRtbCNjbWQuQ21kWAEAAAAtdHJ0TgAAWA0AAABkYXRldGltZS5kYXRlcnVOAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZVgBAAAALXRydk4AAFgXAAAAZm9ybWF0dGVyLk51bGxGb3JtYXR0ZXJyd04AAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZm9ybWF0dGVyLmh0bWwjZm9ybWF0dGVyLk51bGxGb3JtYXR0ZXJYAQAAAC10cnhOAABYDQAAAGRhdGV0aW1lLnRpbWVyeU4AAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS50aW1lWAEAAAAtdHJ6TgAAWBUAAAB6aXBpbXBvcnQuemlwaW1wb3J0ZXJye04AAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvemlwaW1wb3J0Lmh0bWwjemlwaW1wb3J0LnppcGltcG9ydGVyWAEAAAAtdHJ8TgAAWBQAAABtdWx0aXByb2Nlc3NpbmcuTG9ja3J9TgAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuTG9ja1gBAAAALXRyfk4AAFgfAAAARG9jWE1MUlBDU2VydmVyLkRvY1hNTFJQQ1NlcnZlcnJ/TgAAKGppAQAAamoBAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N4bWxycGNzZXJ2ZXIuaHRtbCNEb2NYTUxSUENTZXJ2ZXIuRG9jWE1MUlBDU2VydmVyWAEAAAAtdHKATgAAWB0AAABTb2NrZXRTZXJ2ZXIuRm9ya2luZ1VEUFNlcnZlcnKBTgAAKGppAQAAamoBAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXRzZXJ2ZXIuaHRtbCNTb2NrZXRTZXJ2ZXIuRm9ya2luZ1VEUFNlcnZlclgBAAAALXRygk4AAFgPAAAAemlwZmlsZS5aaXBGaWxlcoNOAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLlppcEZpbGVYAQAAAC10coROAABYHQAAAGNvb2tpZWxpYi5EZWZhdWx0Q29va2llUG9saWN5coVOAAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5EZWZhdWx0Q29va2llUG9saWN5WAEAAAAtdHKGTgAAWAkAAAB0dGsuU3R5bGVyh04AAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLlN0eWxlWAEAAAAtdHKITgAAWAoAAABUa2ludGVyLlRrcolOAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RraW50ZXIuaHRtbCNUa2ludGVyLlRrWAEAAAAtdHKKTgAAWBEAAABUaXguRmlsZVNlbGVjdEJveHKLTgAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aXguaHRtbCNUaXguRmlsZVNlbGVjdEJveFgBAAAALXRyjE4AAFgPAAAAY3R5cGVzLl9Qb2ludGVyco1OAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5fUG9pbnRlclgBAAAALXRyjk4AAFgOAAAAY3N2LkRpY3RSZWFkZXJyj04AAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3N2Lmh0bWwjY3N2LkRpY3RSZWFkZXJYAQAAAC10cpBOAABYHQAAAGFyZ3BhcnNlLlJhd1RleHRIZWxwRm9ybWF0dGVycpFOAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FyZ3BhcnNlLmh0bWwjYXJncGFyc2UuUmF3VGV4dEhlbHBGb3JtYXR0ZXJYAQAAAC10cpJOAABYEwAAAHVuaXR0ZXN0LlRlc3RMb2FkZXJyk04AAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0TG9hZGVyWAEAAAAtdHKUTgAAWB8AAABTb2NrZXRTZXJ2ZXIuVW5peERhdGFncmFtU2VydmVycpVOAAAoamkBAABqagEAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI1NvY2tldFNlcnZlci5Vbml4RGF0YWdyYW1TZXJ2ZXJYAQAAAC10cpZOAABYCwAAAGFycmF5LmFycmF5cpdOAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FycmF5Lmh0bWwjYXJyYXkuYXJyYXlYAQAAAC10cphOAABYIgAAAHhtbC5zYXgueG1scmVhZGVyLkF0dHJpYnV0ZXNOU0ltcGxymU4AAChqaQEAAGpqAQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCN4bWwuc2F4LnhtbHJlYWRlci5BdHRyaWJ1dGVzTlNJbXBsWAEAAAAtdHKaTgAAWBMAAABtYWlsYm94Lk1NREZNZXNzYWdlcptOAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1NREZNZXNzYWdlWAEAAAAtdHKcTgAAWCMAAABDR0lIVFRQU2VydmVyLkNHSUhUVFBSZXF1ZXN0SGFuZGxlcnKdTgAAKGppAQAAamoBAABYWAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jZ2lodHRwc2VydmVyLmh0bWwjQ0dJSFRUUFNlcnZlci5DR0lIVFRQUmVxdWVzdEhhbmRsZXJYAQAAAC10cp5OAABYEwAAAGVtYWlsLnBhcnNlci5QYXJzZXJyn04AAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwucGFyc2VyLmh0bWwjZW1haWwucGFyc2VyLlBhcnNlclgBAAAALXRyoE4AAFgQAAAAaW1wLk51bGxJbXBvcnRlcnKhTgAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbXAuaHRtbCNpbXAuTnVsbEltcG9ydGVyWAEAAAAtdHKiTgAAWBkAAABjb2RlY3MuSW5jcmVtZW50YWxEZWNvZGVycqNOAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5JbmNyZW1lbnRhbERlY29kZXJYAQAAAC10cqROAABYEgAAAENvb2tpZS5TbWFydENvb2tpZXKlTgAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWUuaHRtbCNDb29raWUuU21hcnRDb29raWVYAQAAAC10cqZOAABYFQAAAGNhbGVuZGFyLkhUTUxDYWxlbmRhcnKnTgAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLkhUTUxDYWxlbmRhclgBAAAALXRyqE4AAFgbAAAAdXJsbGliMi5IVFRQQ29va2llUHJvY2Vzc29ycqlOAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLkhUVFBDb29raWVQcm9jZXNzb3JYAQAAAC10cqpOAABYEAAAAGN0eXBlcy5jX3djaGFyX3Byq04AAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLmNfd2NoYXJfcFgBAAAALXRyrE4AAFgTAAAAYXN0Lk5vZGVUcmFuc2Zvcm1lcnKtTgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hc3QuaHRtbCNhc3QuTm9kZVRyYW5zZm9ybWVyWAEAAAAtdHKuTgAAWBQAAABmb3JtYXR0ZXIuTnVsbFdyaXRlcnKvTgAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIuTnVsbFdyaXRlclgBAAAALXRysE4AAFgRAAAAVXNlckxpc3QuVXNlckxpc3RysU4AAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXNlcmRpY3QuaHRtbCNVc2VyTGlzdC5Vc2VyTGlzdFgBAAAALXRysk4AAFgPAAAAdHRrLlByb2dyZXNzYmFycrNOAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R0ay5odG1sI3R0ay5Qcm9ncmVzc2JhclgBAAAALXRytE4AAFgkAAAAbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLlN5bmNNYW5hZ2VycrVOAAAoamkBAABqagEAAFhbAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5TeW5jTWFuYWdlclgBAAAALXRytk4AAFgOAAAAcmUuTWF0Y2hPYmplY3Ryt04AAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmUuaHRtbCNyZS5NYXRjaE9iamVjdFgBAAAALXRyuE4AAFgXAAAAeG1sLmRvbS5wdWxsZG9tLlB1bGxET01yuU4AAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmRvbS5wdWxsZG9tLmh0bWwjeG1sLmRvbS5wdWxsZG9tLlB1bGxET01YAQAAAC10crpOAABYHQAAAHRlc3Quc3VwcG9ydC5XYXJuaW5nc1JlY29yZGVycrtOAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuV2FybmluZ3NSZWNvcmRlclgBAAAALXRyvE4AAFgYAAAAZm9ybWF0dGVyLkFic3RyYWN0V3JpdGVycr1OAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Zvcm1hdHRlci5odG1sI2Zvcm1hdHRlci5BYnN0cmFjdFdyaXRlclgBAAAALXRyvk4AAFgQAAAAdXJsbGliLlVSTG9wZW5lcnK/TgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIuaHRtbCN1cmxsaWIuVVJMb3BlbmVyWAEAAAAtdHLATgAAWBsAAAB4bWwuZXRyZWUuRWxlbWVudFRyZWUuUU5hbWVywU4AAChqaQEAAGpqAQAAWFgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLlFOYW1lWAEAAAAtdHLCTgAAWBYAAABjb2Rlb3AuQ29tbWFuZENvbXBpbGVycsNOAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGVvcC5odG1sI2NvZGVvcC5Db21tYW5kQ29tcGlsZXJYAQAAAC10csROAABYBwAAAHBkYi5QZGJyxU4AAChqaQEAAGpqAQAAWDIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGRiLmh0bWwjcGRiLlBkYlgBAAAALXRyxk4AAFgQAAAAaW1wdXRpbC5JbXBvcnRlcnLHTgAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pbXB1dGlsLmh0bWwjaW1wdXRpbC5JbXBvcnRlclgBAAAALXRyyE4AAFgYAAAAZGVjaW1hbC5EZWNpbWFsRXhjZXB0aW9ucslOAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWxFeGNlcHRpb25YAQAAAC10cspOAABYIQAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50VHJlZXLLTgAAKGppAQAAamoBAABYXgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudFRyZWVYAQAAAC10csxOAABYDQAAAFRpeC5Qb3B1cE1lbnVyzU4AAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGl4Lmh0bWwjVGl4LlBvcHVwTWVudVgBAAAALXRyzk4AAFgdAAAAZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXJyz04AAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlclgBAAAALXRy0E4AAFghAAAAeG1sLmV0cmVlLkVsZW1lbnRUcmVlLlRyZWVCdWlsZGVyctFOAAAoamkBAABqagEAAFheAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5UcmVlQnVpbGRlclgBAAAALXRy0k4AAFgLAAAAcG9wbGliLlBPUDNy004AAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcG9wbGliLmh0bWwjcG9wbGliLlBPUDNYAQAAAC10ctROAABYEwAAAGh0dHBsaWIuSFRUUE1lc3NhZ2Vy1U4AAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHR0cGxpYi5odG1sI2h0dHBsaWIuSFRUUE1lc3NhZ2VYAQAAAC10ctZOAABYGwAAAGNhbGVuZGFyLkxvY2FsZUhUTUxDYWxlbmRhcnLXTgAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLkxvY2FsZUhUTUxDYWxlbmRhclgBAAAALXRy2E4AAFgOAAAAYWV0eXBlcy5BRVRleHRy2U4AAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWV0eXBlcy5odG1sI2FldHlwZXMuQUVUZXh0WAEAAAAtdHLaTgAAWBMAAABjb29raWVsaWIuQ29va2llSmFycttOAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5Db29raWVKYXJYAQAAAC10ctxOAABYIAAAAGVtYWlsLmdlbmVyYXRvci5EZWNvZGVkR2VuZXJhdG9yct1OAAAoamkBAABqagEAAFhXAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLmdlbmVyYXRvci5odG1sI2VtYWlsLmdlbmVyYXRvci5EZWNvZGVkR2VuZXJhdG9yWAEAAAAtdHLeTgAAWBsAAAB3c2dpcmVmLmhhbmRsZXJzLkNHSUhhbmRsZXJy304AAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd3NnaXJlZi5odG1sI3dzZ2lyZWYuaGFuZGxlcnMuQ0dJSGFuZGxlclgBAAAALXRy4E4AAFgJAAAAVGl4LlRMaXN0cuFOAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpeC5odG1sI1RpeC5UTGlzdFgBAAAALXRy4k4AAFgbAAAAZGlzdHV0aWxzLmNvcmUuRGlzdHJpYnV0aW9ucuNOAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNvcmUuRGlzdHJpYnV0aW9uWAEAAAAtdHLkTgAAWBoAAAB1cmxsaWIyLkhUVFBFcnJvclByb2Nlc3NvcnLlTgAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5IVFRQRXJyb3JQcm9jZXNzb3JYAQAAAC10cuZOAABYDgAAAG1zaWxpYi5Db250cm9scudOAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5Db250cm9sWAEAAAAtdHLoTgAAWAwAAAB0dGsuQ29tYm9ib3hy6U4AAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLkNvbWJvYm94WAEAAAAtdHLqTgAAWA0AAABjdHlwZXMuX0NEYXRhcutOAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5fQ0RhdGFYAQAAAC10cuxOAABYEwAAAHR1cnRsZS5UdXJ0bGVTY3JlZW5y7U4AAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLlR1cnRsZVNjcmVlblgBAAAALXRy7k4AAFgOAAAAZGlmZmxpYi5EaWZmZXJy704AAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlmZmxpYi5odG1sI2RpZmZsaWIuRGlmZmVyWAEAAAAtdHLwTgAAWBUAAABtdWx0aXByb2Nlc3NpbmcuRXZlbnRy8U4AAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLkV2ZW50WAEAAAAtdHLyTgAAWBUAAABtdWx0aXByb2Nlc3NpbmcuUXVldWVy804AAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLlF1ZXVlWAEAAAAtdHL0TgAAWAcAAABhc3QuQVNUcvVOAAAoamkBAABqagEAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzdC5odG1sI2FzdC5BU1RYAQAAAC10cvZOAABYCQAAAHJlcHIuUmVwcnL3TgAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yZXByLmh0bWwjcmVwci5SZXByWAEAAAAtdHL4TgAAWAkAAABpby5JT0Jhc2Vy+U4AAChqaQEAAGpqAQAAWDMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW8uaHRtbCNpby5JT0Jhc2VYAQAAAC10cvpOAABYBQAAAGZsb2F0cvtOAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2Zsb2F0WAEAAAAtdHL8TgAAWA0AAABjdHlwZXMuY19ieXRlcv1OAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5jX2J5dGVYAQAAAC10cv5OAABYFwAAAGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0cv9OAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuZGVmYXVsdGRpY3RYAQAAAC10cgBPAABYEwAAAHBrZ3V0aWwuSW1wSW1wb3J0ZXJyAU8AAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGtndXRpbC5odG1sI3BrZ3V0aWwuSW1wSW1wb3J0ZXJYAQAAAC10cgJPAABYDAAAAHR0ay5UcmVldmlld3IDTwAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dGsuaHRtbCN0dGsuVHJlZXZpZXdYAQAAAC10cgRPAABYFAAAAG9wdHBhcnNlLk9wdGlvbkdyb3VwcgVPAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UuT3B0aW9uR3JvdXBYAQAAAC10cgZPAABYEgAAAFVzZXJEaWN0LkRpY3RNaXhpbnIHTwAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91c2VyZGljdC5odG1sI1VzZXJEaWN0LkRpY3RNaXhpblgBAAAALXRyCE8AAFgTAAAAbWltZXR5cGVzLk1pbWVUeXBlc3IJTwAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW1ldHlwZXMuaHRtbCNtaW1ldHlwZXMuTWltZVR5cGVzWAEAAAAtdHIKTwAAWAwAAABtaGxpYi5Gb2xkZXJyC08AAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWhsaWIuaHRtbCNtaGxpYi5Gb2xkZXJYAQAAAC10cgxPAABYDwAAAGRlY2ltYWwuUm91bmRlZHINTwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Sb3VuZGVkWAEAAAAtdHIOTwAAWAcAAABiZGIuQmRicg9PAAAoamkBAABqagEAAFgyAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2JkYi5odG1sI2JkYi5CZGJYAQAAAC10chBPAABYDAAAAGN0eXBlcy5jX2ludHIRTwAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuY19pbnRYAQAAAC10chJPAABYCAAAAHByb3BlcnR5chNPAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3Byb3BlcnR5WAEAAAAtdHIUTwAAWBUAAABNaW1lV3JpdGVyLk1pbWVXcml0ZXJyFU8AAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWltZXdyaXRlci5odG1sI01pbWVXcml0ZXIuTWltZVdyaXRlclgBAAAALXRyFk8AAFgbAAAAd2Vha3JlZi5XZWFrVmFsdWVEaWN0aW9uYXJ5chdPAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dlYWtyZWYuaHRtbCN3ZWFrcmVmLldlYWtWYWx1ZURpY3Rpb25hcnlYAQAAAC10chhPAABYGAAAAGRlY2ltYWwuSW52YWxpZE9wZXJhdGlvbnIZTwAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5JbnZhbGlkT3BlcmF0aW9uWAEAAAAtdHIaTwAAWBQAAABkZWNpbWFsLkJhc2ljQ29udGV4dHIbTwAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5CYXNpY0NvbnRleHRYAQAAAC10chxPAABYHAAAAENvbmZpZ1BhcnNlci5SYXdDb25maWdQYXJzZXJyHU8AAChqaQEAAGpqAQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjQ29uZmlnUGFyc2VyLlJhd0NvbmZpZ1BhcnNlclgBAAAALXRyHk8AAFgDAAAAc3Rych9PAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3N0clgBAAAALXRyIE8AAFgYAAAAZ2V0dGV4dC5OdWxsVHJhbnNsYXRpb25zciFPAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2dldHRleHQuaHRtbCNnZXR0ZXh0Lk51bGxUcmFuc2xhdGlvbnNYAQAAAC10ciJPAABYCgAAAG1lbW9yeXZpZXdyI08AAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNtZW1vcnl2aWV3WAEAAAAtdHIkTwAAWBMAAAByYW5kb20uU3lzdGVtUmFuZG9tciVPAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JhbmRvbS5odG1sI3JhbmRvbS5TeXN0ZW1SYW5kb21YAQAAAC10ciZPAABYHQAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50cidPAAAoamkBAABqagEAAFhaAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50WAEAAAAtdHIoTwAAWBUAAAB0dXJ0bGUuU2Nyb2xsZWRDYW52YXNyKU8AAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLlNjcm9sbGVkQ2FudmFzWAEAAAAtdHIqTwAAWA4AAABzc2wuU1NMQ29udGV4dHIrTwAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMQ29udGV4dFgBAAAALXRyLE8AAFgbAAAAbWFpbGJveC5Qb3J0YWJsZVVuaXhNYWlsYm94ci1PAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94LlBvcnRhYmxlVW5peE1haWxib3hYAQAAAC10ci5PAABYJgAAAGVtYWlsLm1pbWUuYXBwbGljYXRpb24uTUlNRUFwcGxpY2F0aW9uci9PAAAoamkBAABqagEAAFhYAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLm1pbWUuaHRtbCNlbWFpbC5taW1lLmFwcGxpY2F0aW9uLk1JTUVBcHBsaWNhdGlvblgBAAAALXRyME8AAFgRAAAAZGF0ZXRpbWUuZGF0ZXRpbWVyMU8AAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZVgBAAAALXRyMk8AAFgaAAAAZW1haWwubWltZS5hdWRpby5NSU1FQXVkaW9yM08AAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwubWltZS5odG1sI2VtYWlsLm1pbWUuYXVkaW8uTUlNRUF1ZGlvWAEAAAAtdHI0TwAAWBQAAABjb2RlY3MuU3RyZWFtUmVjb2RlcnI1TwAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuU3RyZWFtUmVjb2RlclgBAAAALXRyNk8AAFgMAAAAcHN0YXRzLlN0YXRzcjdPAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3Byb2ZpbGUuaHRtbCNwc3RhdHMuU3RhdHNYAQAAAC10cjhPAABYBgAAAG9iamVjdHI5TwAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNvYmplY3RYAQAAAC10cjpPAABYFwAAAGNvZGUuSW50ZXJhY3RpdmVDb25zb2xlcjtPAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvZGUuaHRtbCNjb2RlLkludGVyYWN0aXZlQ29uc29sZVgBAAAALXRyPE8AAFgNAAAAVGl4LkNoZWNrTGlzdHI9TwAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aXguaHRtbCNUaXguQ2hlY2tMaXN0WAEAAAAtdHI+TwAAWBMAAAB1cmxsaWIyLkJhc2VIYW5kbGVycj9PAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLkJhc2VIYW5kbGVyWAEAAAAtdHJATwAAWBcAAABkZWNpbWFsLkV4dGVuZGVkQ29udGV4dHJBTwAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5FeHRlbmRlZENvbnRleHRYAQAAAC10ckJPAABYHwAAAHdzZ2lyZWYuaGFuZGxlcnMuQmFzZUNHSUhhbmRsZXJyQ08AAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd3NnaXJlZi5odG1sI3dzZ2lyZWYuaGFuZGxlcnMuQmFzZUNHSUhhbmRsZXJYAQAAAC10ckRPAABYHwAAAHVybGxpYjIuSFRUUERlZmF1bHRFcnJvckhhbmRsZXJyRU8AAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuSFRUUERlZmF1bHRFcnJvckhhbmRsZXJYAQAAAC10ckZPAABYEAAAAHN0cmluZy5Gb3JtYXR0ZXJyR08AAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLkZvcm1hdHRlclgBAAAALXRySE8AAFgXAAAAbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3NySU8AAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3NYAQAAAC10ckpPAABYLQAAAFNpbXBsZVhNTFJQQ1NlcnZlci5TaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlcnJLTwAAKGppAQAAamoBAABYZwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaW1wbGV4bWxycGNzZXJ2ZXIuaHRtbCNTaW1wbGVYTUxSUENTZXJ2ZXIuU2ltcGxlWE1MUlBDUmVxdWVzdEhhbmRsZXJYAQAAAC10ckxPAABYEgAAAGZyYWN0aW9ucy5GcmFjdGlvbnJNTwAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mcmFjdGlvbnMuaHRtbCNmcmFjdGlvbnMuRnJhY3Rpb25YAQAAAC10ck5PAABYEQAAAGNvbGxlY3Rpb25zLmRlcXVlck9PAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuZGVxdWVYAQAAAC10clBPAABYDAAAAFRpeC5Ob3RlQm9va3JRTwAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aXguaHRtbCNUaXguTm90ZUJvb2tYAQAAAC10clJPAABYDwAAAHRhcmZpbGUuVGFySW5mb3JTTwAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJJbmZvWAEAAAAtdHJUTwAAWBEAAABpby5CdWZmZXJlZFJXUGFpcnJVTwAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pby5odG1sI2lvLkJ1ZmZlcmVkUldQYWlyWAEAAAAtdHJWTwAAWBMAAABtYWlsYm94LlVuaXhNYWlsYm94cldPAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94LlVuaXhNYWlsYm94WAEAAAAtdHJYTwAAWA8AAAB0YXJmaWxlLlRhckZpbGVyWU8AAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuVGFyRmlsZVgBAAAALXRyWk8AAFgMAAAAdGltZWl0LlRpbWVycltPAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpbWVpdC5odG1sI3RpbWVpdC5UaW1lclgBAAAALXRyXE8AAFggAAAAdGVzdC5zdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmRyXU8AAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkWAEAAAAtdHJeTwAAWA8AAABjdHlwZXMuY191c2hvcnRyX08AAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLmNfdXNob3J0WAEAAAAtdHJgTwAAWBEAAABTdHJpbmdJTy5TdHJpbmdJT3JhTwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdHJpbmdpby5odG1sI1N0cmluZ0lPLlN0cmluZ0lPWAEAAAAtdHJiTwAAWBEAAABzeW10YWJsZS5GdW5jdGlvbnJjTwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeW10YWJsZS5odG1sI3N5bXRhYmxlLkZ1bmN0aW9uWAEAAAAtdHJkTwAAWCUAAABkaXN0dXRpbHMuY29tbWFuZC5iZGlzdF9tc2kuYmRpc3RfbXNpcmVPAAAoamkBAABqagEAAFhVAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNvbW1hbmQuYmRpc3RfbXNpLmJkaXN0X21zaVgBAAAALXRyZk8AAFgPAAAAZG9jdGVzdC5FeGFtcGxlcmdPAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LkV4YW1wbGVYAQAAAC10cmhPAABYFAAAAGNvbGxlY3Rpb25zLkNhbGxhYmxlcmlPAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuQ2FsbGFibGVYAQAAAC10cmpPAABYGAAAAGVtYWlsLm1pbWUudGV4dC5NSU1FVGV4dHJrTwAAKGppAQAAamoBAABYSgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5taW1lLmh0bWwjZW1haWwubWltZS50ZXh0Lk1JTUVUZXh0WAEAAAAtdHJsTwAAWBUAAABpbXB1dGlsLkltcG9ydE1hbmFnZXJybU8AAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1wdXRpbC5odG1sI2ltcHV0aWwuSW1wb3J0TWFuYWdlclgBAAAALXRybk8AAFgXAAAAaW1wdXRpbC5CdWlsdGluSW1wb3J0ZXJyb08AAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1wdXRpbC5odG1sI2ltcHV0aWwuQnVpbHRpbkltcG9ydGVyWAEAAAAtdHJwTwAAWBMAAABRdWV1ZS5Qcmlvcml0eVF1ZXVlcnFPAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3F1ZXVlLmh0bWwjUXVldWUuUHJpb3JpdHlRdWV1ZVgBAAAALXRyck8AAFgaAAAAY29sbGVjdGlvbnMuTXV0YWJsZU1hcHBpbmdyc08AAChqaQEAAGpqAQAAWE0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5NdXRhYmxlTWFwcGluZ1gBAAAALXRydE8AAFgXAAAAd3NnaXJlZi5oZWFkZXJzLkhlYWRlcnNydU8AAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd3NnaXJlZi5odG1sI3dzZ2lyZWYuaGVhZGVycy5IZWFkZXJzWAEAAAAtdHJ2TwAAWBEAAABDb29raWUuQmFzZUNvb2tpZXJ3TwAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWUuaHRtbCNDb29raWUuQmFzZUNvb2tpZVgBAAAALXRyeE8AAFgXAAAAbXNpbGliLlJhZGlvQnV0dG9uR3JvdXByeU8AAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLlJhZGlvQnV0dG9uR3JvdXBYAQAAAC10cnpPAABYCwAAAHdlYWtyZWYucmVmcntPAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dlYWtyZWYuaHRtbCN3ZWFrcmVmLnJlZlgBAAAALXRyfE8AAFgWAAAAc3VicHJvY2Vzcy5TVEFSVFVQSU5GT3J9TwAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5TVEFSVFVQSU5GT1gBAAAALXRyfk8AAFgWAAAAc2hlbHZlLkRiZmlsZW5hbWVTaGVsZnJ/TwAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaGVsdmUuaHRtbCNzaGVsdmUuRGJmaWxlbmFtZVNoZWxmWAEAAAAtdHKATwAAWAUAAABpYy5JQ3KBTwAAKGppAQAAamoBAABYLwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pYy5odG1sI2ljLklDWAEAAAAtdHKCTwAAWCQAAABhcmdwYXJzZS5SYXdEZXNjcmlwdGlvbkhlbHBGb3JtYXR0ZXJyg08AAChqaQEAAGpqAQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXJncGFyc2UuaHRtbCNhcmdwYXJzZS5SYXdEZXNjcmlwdGlvbkhlbHBGb3JtYXR0ZXJYAQAAAC10coRPAABYGwAAAGZvcm1hdHRlci5BYnN0cmFjdEZvcm1hdHRlcnKFTwAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIuQWJzdHJhY3RGb3JtYXR0ZXJYAQAAAC10coZPAABYDgAAAGxvZ2dpbmcuRmlsdGVycodPAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkZpbHRlclgBAAAALXRyiE8AAFgPAAAAY3R5cGVzLmNfdWludDMycolPAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5jX3VpbnQzMlgBAAAALXRyik8AAFglAAAAQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlcnKLTwAAKGppAQAAamoBAABYWwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iYXNlaHR0cHNlcnZlci5odG1sI0Jhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXJYAQAAAC10coxPAABYEAAAAG51bWJlcnMuSW50ZWdyYWxyjU8AAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbnVtYmVycy5odG1sI251bWJlcnMuSW50ZWdyYWxYAQAAAC10co5PAABYFAAAAGZvcm1hdHRlci5EdW1iV3JpdGVyco9PAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Zvcm1hdHRlci5odG1sI2Zvcm1hdHRlci5EdW1iV3JpdGVyWAEAAAAtdHKQTwAAWBcAAABhZXR5cGVzLk9iamVjdFNwZWNpZmllcnKRTwAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hZXR5cGVzLmh0bWwjYWV0eXBlcy5PYmplY3RTcGVjaWZpZXJYAQAAAC10cpJPAABYFwAAAGNvb2tpZWxpYi5GaWxlQ29va2llSmFycpNPAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5GaWxlQ29va2llSmFyWAEAAAAtdHKUTwAAWBEAAABtYWlsYm94Lk1ITWFpbGJveHKVTwAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NSE1haWxib3hYAQAAAC10cpZPAABYFAAAAG1haWxib3guQmFieWxNZXNzYWdlcpdPAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94LkJhYnlsTWVzc2FnZVgBAAAALXRymE8AAFgNAAAAY3R5cGVzLldpbkRMTHKZTwAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuV2luRExMWAEAAAAtdHKaTwAAWBcAAABTb2NrZXRTZXJ2ZXIuQmFzZVNlcnZlcnKbTwAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXRzZXJ2ZXIuaHRtbCNTb2NrZXRTZXJ2ZXIuQmFzZVNlcnZlclgBAAAALXRynE8AAFgMAAAAbm50cGxpYi5OTlRQcp1PAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L25udHBsaWIuaHRtbCNubnRwbGliLk5OVFBYAQAAAC10cp5PAABYEwAAAFRpeC5EaXJTZWxlY3REaWFsb2dyn08AAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGl4Lmh0bWwjVGl4LkRpclNlbGVjdERpYWxvZ1gBAAAALXRyoE8AAFgTAAAAdGhyZWFkaW5nLlNlbWFwaG9yZXKhTwAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuU2VtYXBob3JlWAEAAAAtdHKiTwAAWAoAAABmdHBsaWIuRlRQcqNPAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z0cGxpYi5odG1sI2Z0cGxpYi5GVFBYAQAAAC10cqRPAABYGQAAAG11bHRpcHJvY2Vzc2luZy5TZW1hcGhvcmVypU8AAChqaQEAAGpqAQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLlNlbWFwaG9yZVgBAAAALXRypk8AAFgTAAAAdXJsbGliMi5IVFRQSGFuZGxlcnKnTwAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5IVFRQSGFuZGxlclgBAAAALXRyqE8AAFgTAAAAQ29va2llLlNpbXBsZUNvb2tpZXKpTwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWUuaHRtbCNDb29raWUuU2ltcGxlQ29va2llWAEAAAAtdHKqTwAAWA8AAAB1cmxsaWIyLlJlcXVlc3Ryq08AAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuUmVxdWVzdFgBAAAALXRyrE8AAFggAAAAbXVsdGlwcm9jZXNzaW5nLnBvb2wuQXN5bmNSZXN1bHRyrU8AAChqaQEAAGpqAQAAWFcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLnBvb2wuQXN5bmNSZXN1bHRYAQAAAC10cq5PAABYGgAAAHhtbC5zYXguaGFuZGxlci5EVERIYW5kbGVycq9PAAAoamkBAABqagEAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5odG1sI3htbC5zYXguaGFuZGxlci5EVERIYW5kbGVyWAEAAAAtdHKwTwAAWA4AAABiZGIuQnJlYWtwb2ludHKxTwAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iZGIuaHRtbCNiZGIuQnJlYWtwb2ludFgBAAAALXRysk8AAFgZAAAAeG1sLnNheC54bWxyZWFkZXIuTG9jYXRvcnKzTwAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLkxvY2F0b3JYAQAAAC10crRPAABYFwAAAGNvbGxlY3Rpb25zLk1hcHBpbmdWaWV3crVPAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuTWFwcGluZ1ZpZXdYAQAAAC10crZPAABYKQAAAG11bHRpcHJvY2Vzc2luZy5wb29sLm11bHRpcHJvY2Vzc2luZy5Qb29scrdPAAAoamkBAABqagEAAFhgAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5wb29sLm11bHRpcHJvY2Vzc2luZy5Qb29sWAEAAAAtdHK4TwAAWBYAAABjdXJzZXMudGV4dHBhZC5UZXh0Ym94crlPAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy50ZXh0cGFkLlRleHRib3hYAQAAAC10crpPAABYHwAAAHhtbC5ldHJlZS5FbGVtZW50VHJlZS5YTUxQYXJzZXJyu08AAChqaQEAAGpqAQAAWFwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLlhNTFBhcnNlclgBAAAALXRyvE8AAFgTAAAAcmFuZG9tLldpY2htYW5uSGlsbHK9TwAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yYW5kb20uaHRtbCNyYW5kb20uV2ljaG1hbm5IaWxsWAEAAAAtdHK+TwAAWA8AAAB0aHJlYWRpbmcuRXZlbnRyv08AAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLkV2ZW50WAEAAAAtdHLATwAAWBUAAABtdWx0aXByb2Nlc3NpbmcuUkxvY2tywU8AAChqaQEAAGpqAQAAWEwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLlJMb2NrWAEAAAAtdHLCTwAAWBYAAABTb2NrZXRTZXJ2ZXIuVENQU2VydmVycsNPAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI1NvY2tldFNlcnZlci5UQ1BTZXJ2ZXJYAQAAAC10csRPAABYDQAAAGd6aXAuR3ppcEZpbGVyxU8AAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZ3ppcC5odG1sI2d6aXAuR3ppcEZpbGVYAQAAAC10csZPAABYDwAAAGN0eXBlcy5fRnVuY1B0cnLHTwAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuX0Z1bmNQdHJYAQAAAC10cshPAABYEAAAAHNtdHBsaWIuU01UUF9TU0xyyU8AAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc210cGxpYi5odG1sI3NtdHBsaWIuU01UUF9TU0xYAQAAAC10cspPAABYHAAAAGlvLkluY3JlbWVudGFsTmV3bGluZURlY29kZXJyy08AAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW8uaHRtbCNpby5JbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyWAEAAAAtdHLMTwAAWBMAAAB1cmxsaWIyLkZpbGVIYW5kbGVycs1PAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLkZpbGVIYW5kbGVyWAEAAAAtdHLOTwAAWAcAAABjb21wbGV4cs9PAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2NvbXBsZXhYAQAAAC10ctBPAABYDgAAAGN0eXBlcy5jX2ludDE2ctFPAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5jX2ludDE2WAEAAAAtdHLSTwAAWA0AAABwbGlzdGxpYi5EYXRhctNPAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BsaXN0bGliLmh0bWwjcGxpc3RsaWIuRGF0YVgBAAAALXRy1E8AAFgRAAAAaW8uQnVmZmVyZWRSYW5kb21y1U8AAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW8uaHRtbCNpby5CdWZmZXJlZFJhbmRvbVgBAAAALXRy1k8AAFgpAAAAbG9nZ2luZy5oYW5kbGVycy5UaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXJy108AAChqaQEAAGpqAQAAWGEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyWAEAAAAtdHLYTwAAWBsAAABjYWxlbmRhci5Mb2NhbGVUZXh0Q2FsZW5kYXJy2U8AAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci5Mb2NhbGVUZXh0Q2FsZW5kYXJYAQAAAC10ctpPAABYJgAAAGFyZ3BhcnNlLkFyZ3VtZW50RGVmYXVsdHNIZWxwRm9ybWF0dGVycttPAAAoamkBAABqagEAAFhWAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FyZ3BhcnNlLmh0bWwjYXJncGFyc2UuQXJndW1lbnREZWZhdWx0c0hlbHBGb3JtYXR0ZXJYAQAAAC10ctxPAABYFgAAAGNvb2tpZWxpYi5Db29raWVQb2xpY3ly3U8AAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llbGliLmh0bWwjY29va2llbGliLkNvb2tpZVBvbGljeVgBAAAALXRy3k8AAFgPAAAAbWFpbGJveC5NYWlsYm94ct9PAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxib3hYAQAAAC10cuBPAABYIgAAAG11bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5OYW1lc3BhY2Vy4U8AAChqaQEAAGpqAQAAWFkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLk5hbWVzcGFjZVgBAAAALXRy4k8AAFgOAAAAY3R5cGVzLmNfdWludDhy408AAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLmNfdWludDhYAQAAAC10cuRPAABYFwAAAGVtYWlsLnBhcnNlci5GZWVkUGFyc2VycuVPAAAoamkBAABqagEAAFhLAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLnBhcnNlci5odG1sI2VtYWlsLnBhcnNlci5GZWVkUGFyc2VyWAEAAAAtdHLmTwAAWBsAAABjb21waWxlci52aXNpdG9yLkFTVFZpc2l0b3Jy508AAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29tcGlsZXIuaHRtbCNjb21waWxlci52aXNpdG9yLkFTVFZpc2l0b3JYAQAAAC10cuhPAABYDQAAAHR1cnRsZS5SYXdQZW5y6U8AAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLlJhd1BlblgBAAAALXRy6k8AAFgHAAAAVGl4LlRpeHLrTwAAKGppAQAAamoBAABYMgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aXguaHRtbCNUaXguVGl4WAEAAAAtdHLsTwAAWBEAAABiejIuQloyQ29tcHJlc3NvcnLtTwAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9iejIuaHRtbCNiejIuQloyQ29tcHJlc3NvclgBAAAALXRy7k8AAFgiAAAAbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLkJhc2VQcm94eXLvTwAAKGppAQAAamoBAABYWQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuQmFzZVByb3h5WAEAAAAtdHLwTwAAWAwAAABudW1iZXJzLlJlYWxy8U8AAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbnVtYmVycy5odG1sI251bWJlcnMuUmVhbFgBAAAALXRy8k8AAFgUAAAAdXJscGFyc2UuUGFyc2VSZXN1bHRy808AAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJscGFyc2UuaHRtbCN1cmxwYXJzZS5QYXJzZVJlc3VsdFgBAAAALXRy9E8AAFgVAAAAVXNlclN0cmluZy5Vc2VyU3RyaW5ncvVPAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VzZXJkaWN0Lmh0bWwjVXNlclN0cmluZy5Vc2VyU3RyaW5nWAEAAAAtdHL2TwAAWA8AAAB4ZHJsaWIuVW5wYWNrZXJy908AAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveGRybGliLmh0bWwjeGRybGliLlVucGFja2VyWAEAAAAtdHL4TwAAWAoAAABtYWlsYm94Lk1IcvlPAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1IWAEAAAAtdHL6TwAAWA8AAAB4bWxycGNsaWIuRmF1bHRy+08AAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1scnBjbGliLmh0bWwjeG1scnBjbGliLkZhdWx0WAEAAAAtdHL8TwAAWBAAAABjb29raWVsaWIuQ29va2llcv1PAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sI2Nvb2tpZWxpYi5Db29raWVYAQAAAC10cv5PAABYDQAAAGN0eXBlcy5jX2NoYXJy/08AAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLmNfY2hhclgBAAAALXRyAFAAAFgiAAAAZGlzdHV0aWxzLmZhbmN5X2dldG9wdC5GYW5jeUdldG9wdHIBUAAAKGppAQAAamoBAABYUgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5mYW5jeV9nZXRvcHQuRmFuY3lHZXRvcHRYAQAAAC10cgJQAABYFgAAAG1haWxib3guTWFpbGRpck1lc3NhZ2VyA1AAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGRpck1lc3NhZ2VYAQAAAC10cgRQAABYFQAAAHVybGxpYi5GYW5jeVVSTG9wZW5lcnIFUAAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIuaHRtbCN1cmxsaWIuRmFuY3lVUkxvcGVuZXJYAQAAAC10cgZQAABYEwAAAGFldHlwZXMuUURSZWN0YW5nbGVyB1AAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWV0eXBlcy5odG1sI2FldHlwZXMuUURSZWN0YW5nbGVYAQAAAC10cghQAABYDwAAAGRvY3Rlc3QuRG9jVGVzdHIJUAAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5Eb2NUZXN0WAEAAAAtdHIKUAAAWBEAAABzZXRzLkltbXV0YWJsZVNldHILUAAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZXRzLmh0bWwjc2V0cy5JbW11dGFibGVTZXRYAQAAAC10cgxQAABYEQAAAG1haWxib3guTUhNZXNzYWdlcg1QAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1ITWVzc2FnZVgBAAAALXRyDlAAAFgJAAAAaW8uRmlsZUlPcg9QAAAoamkBAABqagEAAFgzAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uRmlsZUlPWAEAAAAtdHIQUAAAWA0AAABjdHlwZXMuY19pbnQ4chFQAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5jX2ludDhYAQAAAC10chJQAABYFAAAAE1pbmlBRUZyYW1lLkFFU2VydmVychNQAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbmlhZWZyYW1lLmh0bWwjTWluaUFFRnJhbWUuQUVTZXJ2ZXJYAQAAAC10chRQAABYDgAAAGNzdi5EaWN0V3JpdGVychVQAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nzdi5odG1sI2Nzdi5EaWN0V3JpdGVyWAEAAAAtdHIWUAAAWCEAAABTb2NrZXRTZXJ2ZXIuU3RyZWFtUmVxdWVzdEhhbmRsZXJyF1AAAChqaQEAAGpqAQAAWFUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0c2VydmVyLmh0bWwjU29ja2V0U2VydmVyLlN0cmVhbVJlcXVlc3RIYW5kbGVyWAEAAAAtdHIYUAAAWBYAAABodHRwbGliLkhUVFBDb25uZWN0aW9uchlQAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0dHBsaWIuaHRtbCNodHRwbGliLkhUVFBDb25uZWN0aW9uWAEAAAAtdHIaUAAAWBEAAABwa2d1dGlsLkltcExvYWRlcnIbUAAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9wa2d1dGlsLmh0bWwjcGtndXRpbC5JbXBMb2FkZXJYAQAAAC10chxQAABYIQAAAGxvZ2dpbmcuaGFuZGxlcnMuQnVmZmVyaW5nSGFuZGxlcnIdUAAAKGppAQAAamoBAABYWQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5CdWZmZXJpbmdIYW5kbGVyWAEAAAAtdHIeUAAAWBYAAABjb2xsZWN0aW9ucy5WYWx1ZXNWaWV3ch9QAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuVmFsdWVzVmlld1gBAAAALXRyIFAAAFgdAAAAbXVsdGlwcm9jZXNzaW5nLkpvaW5hYmxlUXVldWVyIVAAAChqaQEAAGpqAQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLkpvaW5hYmxlUXVldWVYAQAAAC10ciJQAABYFgAAAGNvbGxlY3Rpb25zLk11dGFibGVTZXRyI1AAAChqaQEAAGpqAQAAWEkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5NdXRhYmxlU2V0WAEAAAAtdHIkUAAAWBAAAABtc2lsaWIuRGlyZWN0b3J5ciVQAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5EaXJlY3RvcnlYAQAAAC10ciZQAABYEAAAAGN0eXBlcy5TdHJ1Y3R1cmVyJ1AAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLlN0cnVjdHVyZVgBAAAALXRyKFAAAFgeAAAAd3NnaXJlZi5oYW5kbGVycy5TaW1wbGVIYW5kbGVycilQAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLmhhbmRsZXJzLlNpbXBsZUhhbmRsZXJYAQAAAC10cipQAABYFAAAAHVybHBhcnNlLlNwbGl0UmVzdWx0citQAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybHBhcnNlLmh0bWwjdXJscGFyc2UuU3BsaXRSZXN1bHRYAQAAAC10cixQAABYDQAAAG1zaWxpYi5CaW5hcnlyLVAAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLkJpbmFyeVgBAAAALXRyLlAAAFgPAAAAY3R5cGVzLmNfdWludDY0ci9QAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5jX3VpbnQ2NFgBAAAALXRyMFAAAFgUAAAAQmFzdGlvbi5CYXN0aW9uQ2xhc3NyMVAAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmFzdGlvbi5odG1sI0Jhc3Rpb24uQmFzdGlvbkNsYXNzWAEAAAAtdHIyUAAAWAsAAABjc3YuRGlhbGVjdHIzUAAAKGppAQAAamoBAABYNgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jc3YuaHRtbCNjc3YuRGlhbGVjdFgBAAAALXRyNFAAAFgTAAAAeG1scnBjbGliLk11bHRpQ2FsbHI1UAAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWxycGNsaWIuaHRtbCN4bWxycGNsaWIuTXVsdGlDYWxsWAEAAAAtdHI2UAAAWBUAAABlbWFpbC5tZXNzYWdlLk1lc3NhZ2VyN1AAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZVgBAAAALXRyOFAAAFgeAAAAeG1sLnNheC5oYW5kbGVyLkVudGl0eVJlc29sdmVycjlQAAAoamkBAABqagEAAFhVAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5odG1sI3htbC5zYXguaGFuZGxlci5FbnRpdHlSZXNvbHZlclgBAAAALXRyOlAAAFgWAAAAZGlzdHV0aWxzLmNvcmUuQ29tbWFuZHI7UAAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jb3JlLkNvbW1hbmRYAQAAAC10cjxQAABYDQAAAFRpeC5JbnB1dE9ubHlyPVAAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGl4Lmh0bWwjVGl4LklucHV0T25seVgBAAAALXRyPlAAAFgTAAAAZmlsZWlucHV0LkZpbGVJbnB1dHI/UAAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9maWxlaW5wdXQuaHRtbCNmaWxlaW5wdXQuRmlsZUlucHV0WAEAAAAtdHJAUAAAWBMAAABtYWlsYm94Lm1ib3hNZXNzYWdlckFQAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lm1ib3hNZXNzYWdlWAEAAAAtdHJCUAAAWBoAAABlbWFpbC5taW1lLmltYWdlLk1JTUVJbWFnZXJDUAAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5taW1lLmh0bWwjZW1haWwubWltZS5pbWFnZS5NSU1FSW1hZ2VYAQAAAC10ckRQAABYDQAAAENvb2tpZS5Nb3JzZWxyRVAAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llLmh0bWwjQ29va2llLk1vcnNlbFgBAAAALXRyRlAAAFgUAAAAY29sbGVjdGlvbnMuS2V5c1ZpZXdyR1AAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5LZXlzVmlld1gBAAAALXRySFAAAFgRAAAAdW5pdHRlc3QuVGVzdENhc2VySVAAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZVgBAAAALXRySlAAAFgUAAAAaW1hcGxpYi5JTUFQNF9zdHJlYW1yS1AAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDRfc3RyZWFtWAEAAAAtdHJMUAAAWBEAAABtaW1ldG9vbHMuTWVzc2FnZXJNUAAAKGppAQAAamoBAABYQgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9taW1ldG9vbHMuaHRtbCNtaW1ldG9vbHMuTWVzc2FnZVgBAAAALXRyTlAAAFgTAAAAbG9nZ2luZy5OdWxsSGFuZGxlcnJPUAAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5OdWxsSGFuZGxlclgBAAAALXRyUFAAAFgQAAAAY3R5cGVzLmNfc3NpemVfdHJRUAAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuY19zc2l6ZV90WAEAAAAtdHJSUAAAWAsAAABpby5TdHJpbmdJT3JTUAAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pby5odG1sI2lvLlN0cmluZ0lPWAEAAAAtdHJUUAAAWA0AAABzdHJ1Y3QuU3RydWN0clVQAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N0cnVjdC5odG1sI3N0cnVjdC5TdHJ1Y3RYAQAAAC10clZQAABYFAAAAHRleHR3cmFwLlRleHRXcmFwcGVycldQAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RleHR3cmFwLmh0bWwjdGV4dHdyYXAuVGV4dFdyYXBwZXJYAQAAAC10clhQAABYEAAAAHhtbHJwY2xpYi5CaW5hcnlyWVAAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1scnBjbGliLmh0bWwjeG1scnBjbGliLkJpbmFyeVgBAAAALXRyWlAAAFgUAAAAY29sbGVjdGlvbnMuSGFzaGFibGVyW1AAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5IYXNoYWJsZVgBAAAALXRyXFAAAFgNAAAAY3N2LmV4Y2VsX3RhYnJdUAAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jc3YuaHRtbCNjc3YuZXhjZWxfdGFiWAEAAAAtdHJeUAAAWBMAAABtdWx0aWZpbGUuTXVsdGlGaWxlcl9QAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpZmlsZS5odG1sI211bHRpZmlsZS5NdWx0aUZpbGVYAQAAAC10cmBQAABYMgAAAG11bHRpcHJvY2Vzc2luZy5tdWx0aXByb2Nlc3NpbmcucXVldWVzLlNpbXBsZVF1ZXVlcmFQAAAoamkBAABqagEAAFhpAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5tdWx0aXByb2Nlc3NpbmcucXVldWVzLlNpbXBsZVF1ZXVlWAEAAAAtdHJiUAAAWBYAAAB1cmxsaWIyLlVua25vd25IYW5kbGVycmNQAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLlVua25vd25IYW5kbGVyWAEAAAAtdHJkUAAAWAwAAABhZXR5cGVzLkVudW1yZVAAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWV0eXBlcy5odG1sI2FldHlwZXMuRW51bVgBAAAALXRyZlAAAFgNAAAAeGRybGliLlBhY2tlcnJnUAAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94ZHJsaWIuaHRtbCN4ZHJsaWIuUGFja2VyWAEAAAAtdHJoUAAAWA4AAABwaWNrbGUuUGlja2xlcnJpUAAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9waWNrbGUuaHRtbCNwaWNrbGUuUGlja2xlclgBAAAALXRyalAAAFgZAAAAQ29uZmlnUGFyc2VyLkNvbmZpZ1BhcnNlcnJrUAAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNDb25maWdQYXJzZXIuQ29uZmlnUGFyc2VyWAEAAAAtdHJsUAAAWBIAAAByZmM4MjIuQWRkcmVzc0xpc3RybVAAAChqaQEAAGpqAQAAWEAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmZjODIyLmh0bWwjcmZjODIyLkFkZHJlc3NMaXN0WAEAAAAtdHJuUAAAWAwAAABtYWlsYm94Lk1NREZyb1AAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTU1ERlgBAAAALXRycFAAAFgpAAAAU2ltcGxlSFRUUFNlcnZlci5TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXJycVAAAChqaQEAAGpqAQAAWGEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2ltcGxlaHR0cHNlcnZlci5odG1sI1NpbXBsZUhUVFBTZXJ2ZXIuU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyWAEAAAAtdHJyUAAAWAwAAAB0dXJ0bGUuU2hhcGVyc1AAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLlNoYXBlWAEAAAAtdHJ0UAAAWBAAAABUaXguTGlzdE5vdGVCb29rcnVQAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpeC5odG1sI1RpeC5MaXN0Tm90ZUJvb2tYAQAAAC10cnZQAABYFAAAAGN0eXBlcy5MaWJyYXJ5TG9hZGVycndQAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5MaWJyYXJ5TG9hZGVyWAEAAAAtdHJ4UAAAWBAAAABhZXR5cGVzLlJHQkNvbG9ycnlQAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FldHlwZXMuaHRtbCNhZXR5cGVzLlJHQkNvbG9yWAEAAAAtdHJ6UAAAWA8AAABjdHlwZXMuY19zaXplX3Rye1AAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLmNfc2l6ZV90WAEAAAAtdHJ8UAAAWBEAAABkZWNpbWFsLlN1Ym5vcm1hbHJ9UAAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5TdWJub3JtYWxYAQAAAC10cn5QAABYEQAAAGRlY2ltYWwuVW5kZXJmbG93cn9QAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLlVuZGVyZmxvd1gBAAAALXRygFAAAFgZAAAAVXNlckRpY3QuSXRlcmFibGVVc2VyRGljdHKBUAAAKGppAQAAamoBAABYSQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91c2VyZGljdC5odG1sI1VzZXJEaWN0Lkl0ZXJhYmxlVXNlckRpY3RYAQAAAC10coJQAABYFAAAAGFldHlwZXMuSW5zZXJ0aW9uTG9jcoNQAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FldHlwZXMuaHRtbCNhZXR5cGVzLkluc2VydGlvbkxvY1gBAAAALXRyhFAAAFgQAAAAdHVydGxlLlJhd1R1cnRsZXKFUAAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuUmF3VHVydGxlWAEAAAAtdHKGUAAAWA0AAABjdHlwZXMuT2xlRExMcodQAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5PbGVETExYAQAAAC10cohQAABYGQAAAGNvZGVjcy5TdHJlYW1SZWFkZXJXcml0ZXJyiVAAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLlN0cmVhbVJlYWRlcldyaXRlclgBAAAALXRyilAAAFgLAAAAYnoyLkJaMkZpbGVyi1AAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYnoyLmh0bWwjYnoyLkJaMkZpbGVYAQAAAC10coxQAABYJAAAAG11bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5CYXNlTWFuYWdlcnKNUAAAKGppAQAAamoBAABYWwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuQmFzZU1hbmFnZXJYAQAAAC10co5QAABYEQAAAGxvZ2dpbmcuTG9nUmVjb3Jkco9QAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkxvZ1JlY29yZFgBAAAALXRykFAAAFgTAAAAY3R5cGVzLl9TaW1wbGVDRGF0YXKRUAAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuX1NpbXBsZUNEYXRhWAEAAAAtdHKSUAAAWAsAAAB0cmFjZS5UcmFjZXKTUAAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90cmFjZS5odG1sI3RyYWNlLlRyYWNlWAEAAAAtdHKUUAAAWA8AAAB3ZWFrcmVmLldlYWtTZXRylVAAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2Vha3JlZi5odG1sI3dlYWtyZWYuV2Vha1NldFgBAAAALXRyllAAAFgVAAAAbG9nZ2luZy5Mb2dnZXJBZGFwdGVycpdQAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkxvZ2dlckFkYXB0ZXJYAQAAAC10cphQAABYJQAAAFNpbXBsZVhNTFJQQ1NlcnZlci5TaW1wbGVYTUxSUENTZXJ2ZXJymVAAAChqaQEAAGpqAQAAWF8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc2ltcGxleG1scnBjc2VydmVyLmh0bWwjU2ltcGxlWE1MUlBDU2VydmVyLlNpbXBsZVhNTFJQQ1NlcnZlclgBAAAALXRymlAAAFgVAAAAY2FsZW5kYXIuVGV4dENhbGVuZGFycptQAAAoamkBAABqagEAAFhFAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NhbGVuZGFyLmh0bWwjY2FsZW5kYXIuVGV4dENhbGVuZGFyWAEAAAAtdHKcUAAAWA8AAABhZXR5cGVzLkxvZ2ljYWxynVAAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWV0eXBlcy5odG1sI2FldHlwZXMuTG9naWNhbFgBAAAALXRynlAAAFgPAAAAYWV0eXBlcy5LZXl3b3Jkcp9QAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FldHlwZXMuaHRtbCNhZXR5cGVzLktleXdvcmRYAQAAAC10cqBQAABYDAAAAHNtdHBsaWIuU01UUHKhUAAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zbXRwbGliLmh0bWwjc210cGxpYi5TTVRQWAEAAAAtdHKiUAAAWBAAAABqc29uLkpTT05FbmNvZGVycqNQAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2pzb24uaHRtbCNqc29uLkpTT05FbmNvZGVyWAEAAAAtdHKkUAAAWCMAAABTb2NrZXRTZXJ2ZXIuRGF0YWdyYW1SZXF1ZXN0SGFuZGxlcnKlUAAAKGppAQAAamoBAABYVwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXRzZXJ2ZXIuaHRtbCNTb2NrZXRTZXJ2ZXIuRGF0YWdyYW1SZXF1ZXN0SGFuZGxlclgBAAAALXRyplAAAFgQAAAAZGVjaW1hbC5PdmVyZmxvd3KnUAAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5PdmVyZmxvd1gBAAAALXRyqFAAAFgSAAAAYWV0eXBlcy5Db21wYXJpc29ucqlQAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FldHlwZXMuaHRtbCNhZXR5cGVzLkNvbXBhcmlzb25YAQAAAC10cqpQAABYCAAAAG1obGliLk1IcqtQAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21obGliLmh0bWwjbWhsaWIuTUhYAQAAAC10cqxQAABYEgAAAHNtdHBkLk1haWxtYW5Qcm94eXKtUAAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zbXRwZC5odG1sI3NtdHBkLk1haWxtYW5Qcm94eVgBAAAALXRyrlAAAFgMAAAAdHVydGxlLlZlYzJEcq9QAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5WZWMyRFgBAAAALXRysFAAAFgjAAAAbG9nZ2luZy5oYW5kbGVycy5XYXRjaGVkRmlsZUhhbmRsZXJysVAAAChqaQEAAGpqAQAAWFsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuV2F0Y2hlZEZpbGVIYW5kbGVyWAEAAAAtdHKyUAAAWBkAAABtdWx0aXByb2Nlc3NpbmcuQ29uZGl0aW9ucrNQAAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5Db25kaXRpb25YAQAAAC10crRQAABYEwAAAGxvZ2dpbmcuRmlsZUhhbmRsZXJytVAAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuRmlsZUhhbmRsZXJYAQAAAC10crZQAABYFQAAAG9wdHBhcnNlLk9wdGlvblBhcnNlcnK3UAAAKGppAQAAamoBAABYRQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLk9wdGlvblBhcnNlclgBAAAALXRyuFAAAFggAAAAbXVsdGlwcm9jZXNzaW5nLkJvdW5kZWRTZW1hcGhvcmVyuVAAAChqaQEAAGpqAQAAWFcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLkJvdW5kZWRTZW1hcGhvcmVYAQAAAC10crpQAABYCwAAAGNodW5rLkNodW5rcrtQAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NodW5rLmh0bWwjY2h1bmsuQ2h1bmtYAQAAAC10crxQAABYDQAAAFRpeC5GaWxlRW50cnlyvVAAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGl4Lmh0bWwjVGl4LkZpbGVFbnRyeVgBAAAALXRyvlAAAFgSAAAAaHRtbGxpYi5IVE1MUGFyc2Vycr9QAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0bWxsaWIuaHRtbCNodG1sbGliLkhUTUxQYXJzZXJYAQAAAC10csBQAABYDgAAAHJmYzgyMi5NZXNzYWdlcsFQAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JmYzgyMi5odG1sI3JmYzgyMi5NZXNzYWdlWAEAAAAtdHLCUAAAWA8AAABUaXguUGFuZWRXaW5kb3dyw1AAAChqaQEAAGpqAQAAWDoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGl4Lmh0bWwjVGl4LlBhbmVkV2luZG93WAEAAAAtdHLEUAAAWBoAAABjb29raWVsaWIuTW96aWxsYUNvb2tpZUphcnLFUAAAKGppAQAAamoBAABYSwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuTW96aWxsYUNvb2tpZUphclgBAAAALXRyxlAAAFgRAAAAY29tcGlsZXIuYXN0Lk5vZGVyx1AAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29tcGlsZXIuaHRtbCNjb21waWxlci5hc3QuTm9kZVgBAAAALXRyyFAAAFgWAAAAY29va2llbGliLkxXUENvb2tpZUphcnLJUAAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb29raWVsaWIuaHRtbCNjb29raWVsaWIuTFdQQ29va2llSmFyWAEAAAAtdHLKUAAAWBEAAABzaGVsdmUuQnNkRGJTaGVsZnLLUAAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaGVsdmUuaHRtbCNzaGVsdmUuQnNkRGJTaGVsZlgBAAAALXRyzFAAAFgPAAAAY3R5cGVzLmNfZG91Ymxlcs1QAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5jX2RvdWJsZVgBAAAALXRyzlAAAFgTAAAAdGhyZWFkaW5nLkNvbmRpdGlvbnLPUAAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuQ29uZGl0aW9uWAEAAAAtdHLQUAAAWBMAAABDb29raWUuU2VyaWFsQ29va2llctFQAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZS5odG1sI0Nvb2tpZS5TZXJpYWxDb29raWVYAQAAAC10ctJQAABYDgAAAFRpeC5MYWJlbEZyYW1lctNQAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpeC5odG1sI1RpeC5MYWJlbEZyYW1lWAEAAAAtdHLUUAAAWCoAAABEb2NYTUxSUENTZXJ2ZXIuRG9jQ0dJWE1MUlBDUmVxdWVzdEhhbmRsZXJy1VAAAChqaQEAAGpqAQAAWGEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jeG1scnBjc2VydmVyLmh0bWwjRG9jWE1MUlBDU2VydmVyLkRvY0NHSVhNTFJQQ1JlcXVlc3RIYW5kbGVyWAEAAAAtdHLWUAAAWB0AAABhc3luY29yZS5kaXNwYXRjaGVyX3dpdGhfc2VuZHLXUAAAKGppAQAAamoBAABYTQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hc3luY29yZS5odG1sI2FzeW5jb3JlLmRpc3BhdGNoZXJfd2l0aF9zZW5kWAEAAAAtdHLYUAAAWBcAAABhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcnLZUAAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hcmdwYXJzZS5odG1sI2FyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyWAEAAAAtdHLaUAAAWBcAAAB3YXJuaW5ncy5jYXRjaF93YXJuaW5nc3LbUAAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS93YXJuaW5ncy5odG1sI3dhcm5pbmdzLmNhdGNoX3dhcm5pbmdzWAEAAAAtdHLcUAAAWA4AAABmaWxlY21wLmRpcmNtcHLdUAAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9maWxlY21wLmh0bWwjZmlsZWNtcC5kaXJjbXBYAQAAAC10ct5QAABYFgAAAGRlY2ltYWwuRGVmYXVsdENvbnRleHRy31AAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVmYXVsdENvbnRleHRYAQAAAC10cuBQAABYDwAAAHN5bXRhYmxlLlN5bWJvbHLhUAAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zeW10YWJsZS5odG1sI3N5bXRhYmxlLlN5bWJvbFgBAAAALXRy4lAAAFgVAAAAdHJhY2UuQ292ZXJhZ2VSZXN1bHRzcuNQAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RyYWNlLmh0bWwjdHJhY2UuQ292ZXJhZ2VSZXN1bHRzWAEAAAAtdHLkUAAAWBAAAABUaXguRGlyU2VsZWN0Qm94cuVQAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpeC5odG1sI1RpeC5EaXJTZWxlY3RCb3hYAQAAAC10cuZQAABYHgAAAGxvZ2dpbmcuaGFuZGxlcnMuU29ja2V0SGFuZGxlcnLnUAAAKGppAQAAamoBAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5Tb2NrZXRIYW5kbGVyWAEAAAAtdHLoUAAAWBcAAAB1bml0dGVzdC5UZXh0VGVzdFJlc3VsdHLpUAAAKGppAQAAamoBAABYRwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRleHRUZXN0UmVzdWx0WAEAAAAtdHLqUAAAWBEAAABjYWxlbmRhci5DYWxlbmRhcnLrUAAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLkNhbGVuZGFyWAEAAAAtdHLsUAAAWA4AAABUaXguTGFiZWxFbnRyeXLtUAAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aXguaHRtbCNUaXguTGFiZWxFbnRyeVgBAAAALXRy7lAAAFgMAAAAc210cGxpYi5MTVRQcu9QAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NtdHBsaWIuaHRtbCNzbXRwbGliLkxNVFBYAQAAAC10cvBQAABYHQAAAHVybGxpYjIuUHJveHlCYXNpY0F1dGhIYW5kbGVycvFQAAAoamkBAABqagEAAFhMAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLlByb3h5QmFzaWNBdXRoSGFuZGxlclgBAAAALXRy8lAAAFgOAAAAY3R5cGVzLmNfdWJ5dGVy81AAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLmNfdWJ5dGVYAQAAAC10cvRQAABYDwAAAGRlY2ltYWwuQ2xhbXBlZHL1UAAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5DbGFtcGVkWAEAAAAtdHL2UAAAWB4AAAB4bWwuc2F4LnNheHV0aWxzLlhNTEZpbHRlckJhc2Vy91AAAChqaQEAAGpqAQAAWFMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC51dGlscy5odG1sI3htbC5zYXguc2F4dXRpbHMuWE1MRmlsdGVyQmFzZVgBAAAALXRy+FAAAFgkAAAAbG9nZ2luZy5oYW5kbGVycy5Sb3RhdGluZ0ZpbGVIYW5kbGVycvlQAAAoamkBAABqagEAAFhcAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLlJvdGF0aW5nRmlsZUhhbmRsZXJYAQAAAC10cvpQAABYEQAAAGFldHlwZXMuTlByb3BlcnR5cvtQAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FldHlwZXMuaHRtbCNhZXR5cGVzLk5Qcm9wZXJ0eVgBAAAALXRy/FAAAFgOAAAAYWV0b29scy5UYWxrVG9y/VAAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWV0b29scy5odG1sI2FldG9vbHMuVGFsa1RvWAEAAAAtdHL+UAAAWBsAAABjb2xsZWN0aW9ucy5NdXRhYmxlU2VxdWVuY2Vy/1AAAChqaQEAAGpqAQAAWE4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5NdXRhYmxlU2VxdWVuY2VYAQAAAC10cgBRAABYEQAAAGlvLkJ1ZmZlcmVkV3JpdGVycgFRAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uQnVmZmVyZWRXcml0ZXJYAQAAAC10cgJRAABYFwAAAHVybGxpYjIuSFRUUFBhc3N3b3JkTWdycgNRAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLkhUVFBQYXNzd29yZE1nclgBAAAALXRyBFEAAFgPAAAAYXN0Lk5vZGVWaXNpdG9ycgVRAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzdC5odG1sI2FzdC5Ob2RlVmlzaXRvclgBAAAALXRyBlEAAFgPAAAAZGVjaW1hbC5EZWNpbWFscgdRAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWxYAQAAAC10cghRAABYEgAAAGFldHlwZXMuU3R5bGVkVGV4dHIJUQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hZXR5cGVzLmh0bWwjYWV0eXBlcy5TdHlsZWRUZXh0WAEAAAAtdHIKUQAAWA0AAABtaGxpYi5NZXNzYWdlcgtRAAAoamkBAABqagEAAFg6AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21obGliLmh0bWwjbWhsaWIuTWVzc2FnZVgBAAAALXRyDFEAAFgPAAAAbnVtYmVycy5Db21wbGV4cg1RAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L251bWJlcnMuaHRtbCNudW1iZXJzLkNvbXBsZXhYAQAAAC10cg5RAABYDAAAAFRpeC5Db21ib0JveHIPUQAAKGppAQAAamoBAABYNwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aXguaHRtbCNUaXguQ29tYm9Cb3hYAQAAAC10chBRAABYDgAAAFRpeC50aXhDb21tYW5kchFRAAAoamkBAABqagEAAFg5AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpeC5odG1sI1RpeC50aXhDb21tYW5kWAEAAAAtdHISUQAAWCAAAAB1cmxsaWIyLkFic3RyYWN0QmFzaWNBdXRoSGFuZGxlcnITUQAAKGppAQAAamoBAABYTwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5BYnN0cmFjdEJhc2ljQXV0aEhhbmRsZXJYAQAAAC10chRRAABYHQAAAFNvY2tldFNlcnZlci5Gb3JraW5nVENQU2VydmVychVRAAAoamkBAABqagEAAFhRAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI1NvY2tldFNlcnZlci5Gb3JraW5nVENQU2VydmVyWAEAAAAtdHIWUQAAWAsAAABzcWxpdGUzLlJvd3IXUQAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy5Sb3dYAQAAAC10chhRAABYDgAAAGN0eXBlcy5jX3Vsb25nchlRAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5jX3Vsb25nWAEAAAAtdHIaUQAAWBMAAABlbWFpbC5oZWFkZXIuSGVhZGVychtRAAAoamkBAABqagEAAFhHAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLmhlYWRlci5odG1sI2VtYWlsLmhlYWRlci5IZWFkZXJYAQAAAC10chxRAABYDgAAAGN0eXBlcy5jX2ludDY0ch1RAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5jX2ludDY0WAEAAAAtdHIeUQAAWBEAAABjdHlwZXMuY19sb25nbG9uZ3IfUQAAKGppAQAAamoBAABYPwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuY19sb25nbG9uZ1gBAAAALXRyIFEAAFgVAAAAZG9jdGVzdC5PdXRwdXRDaGVja2VyciFRAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0Lk91dHB1dENoZWNrZXJYAQAAAC10ciJRAABYEgAAAHNnbWxsaWIuU0dNTFBhcnNlcnIjUQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZ21sbGliLmh0bWwjc2dtbGxpYi5TR01MUGFyc2VyWAEAAAAtdHIkUQAAWBkAAAB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlciVRAAAoamkBAABqagEAAFhJAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZVgBAAAALXRyJlEAAFgfAAAAU29ja2V0U2VydmVyLlRocmVhZGluZ1VEUFNlcnZlcnInUQAAKGppAQAAamoBAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXRzZXJ2ZXIuaHRtbCNTb2NrZXRTZXJ2ZXIuVGhyZWFkaW5nVURQU2VydmVyWAEAAAAtdHIoUQAAWBAAAAB0aHJlYWRpbmcuVGhyZWFkcilRAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5UaHJlYWRYAQAAAC10cipRAABYDwAAAG1haWxib3guTWVzc2FnZXIrUQAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NZXNzYWdlWAEAAAAtdHIsUQAAWB4AAAB4bWwuc2F4LmhhbmRsZXIuQ29udGVudEhhbmRsZXJyLVEAAChqaQEAAGpqAQAAWFUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLkNvbnRlbnRIYW5kbGVyWAEAAAAtdHIuUQAAWA0AAABhc3luY2hhdC5maWZvci9RAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzeW5jaGF0Lmh0bWwjYXN5bmNoYXQuZmlmb1gBAAAALXRyMFEAAFgPAAAAY29sbGVjdGlvbnMuU2V0cjFRAAAoamkBAABqagEAAFhCAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuU2V0WAEAAAAtdHIyUQAAWCcAAAB1cmxsaWIyLkhUVFBQYXNzd29yZE1ncldpdGhEZWZhdWx0UmVhbG1yM1EAAChqaQEAAGpqAQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuSFRUUFBhc3N3b3JkTWdyV2l0aERlZmF1bHRSZWFsbVgBAAAALXRyNFEAAFgbAAAATWluaUFFRnJhbWUuTWluaUFwcGxpY2F0aW9ucjVRAAAoamkBAABqagEAAFhOAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21pbmlhZWZyYW1lLmh0bWwjTWluaUFFRnJhbWUuTWluaUFwcGxpY2F0aW9uWAEAAAAtdHI2UQAAWBUAAABjb2xsZWN0aW9ucy5JdGVtc1ZpZXdyN1EAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5JdGVtc1ZpZXdYAQAAAC10cjhRAABYGwAAAHhtbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlcnI5UQAAKGppAQAAamoBAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlclgBAAAALXRyOlEAAFgPAAAAZGF0ZXRpbWUudHppbmZvcjtRAAAoamkBAABqagEAAFg/AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUudHppbmZvWAEAAAAtdHI8UQAAWBUAAABkb2N0ZXN0LkRvY1Rlc3RSdW5uZXJyPVEAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRG9jVGVzdFJ1bm5lclgBAAAALXRyPlEAAFgYAAAAYXN5bmNvcmUuZmlsZV9kaXNwYXRjaGVycj9RAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FzeW5jb3JlLmh0bWwjYXN5bmNvcmUuZmlsZV9kaXNwYXRjaGVyWAEAAAAtdHJAUQAAWAsAAABzaGxleC5zaGxleHJBUQAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zaGxleC5odG1sI3NobGV4LnNobGV4WAEAAAAtdHJCUQAAWB0AAABDb25maWdQYXJzZXIuU2FmZUNvbmZpZ1BhcnNlcnJDUQAAKGppAQAAamoBAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNDb25maWdQYXJzZXIuU2FmZUNvbmZpZ1BhcnNlclgBAAAALXRyRFEAAFgTAAAAdW5pdHRlc3QuVGVzdFJlc3VsdHJFUQAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RSZXN1bHRYAQAAAC10ckZRAABYCgAAAHR0ay5XaWRnZXRyR1EAAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdHRrLmh0bWwjdHRrLldpZGdldFgBAAAALXRySFEAAFgLAAAAVGl4LkRpclRyZWVySVEAAChqaQEAAGpqAQAAWDYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGl4Lmh0bWwjVGl4LkRpclRyZWVYAQAAAC10ckpRAABYHgAAAHhtbC5kb20ucHVsbGRvbS5ET01FdmVudFN0cmVhbXJLUQAAKGppAQAAamoBAABYVQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLnB1bGxkb20uaHRtbCN4bWwuZG9tLnB1bGxkb20uRE9NRXZlbnRTdHJlYW1YAQAAAC10ckxRAABYCwAAAFRpeC5CYWxsb29uck1RAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpeC5odG1sI1RpeC5CYWxsb29uWAEAAAAtdHJOUQAAWAQAAABib29sck9RAAAoamkBAABqagEAAFg1AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2Jvb2xYAQAAAC10clBRAABYDQAAAGlvLlRleHRJT0Jhc2VyUVEAAChqaQEAAGpqAQAAWDcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW8uaHRtbCNpby5UZXh0SU9CYXNlWAEAAAAtdHJSUQAAWBUAAABIVE1MUGFyc2VyLkhUTUxQYXJzZXJyU1EAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHRtbHBhcnNlci5odG1sI0hUTUxQYXJzZXIuSFRNTFBhcnNlclgBAAAALXRyVFEAAFgQAAAAVGl4LlN0ZEJ1dHRvbkJveHJVUQAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aXguaHRtbCNUaXguU3RkQnV0dG9uQm94WAEAAAAtdHJWUQAAWA4AAABjb2Rlb3AuQ29tcGlsZXJXUQAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2Rlb3AuaHRtbCNjb2Rlb3AuQ29tcGlsZVgBAAAALXRyWFEAAFgUAAAAc3ltdGFibGUuU3ltYm9sVGFibGVyWVEAAChqaQEAAGpqAQAAWEQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3ltdGFibGUuaHRtbCNzeW10YWJsZS5TeW1ib2xUYWJsZVgBAAAALXRyWlEAAFgcAAAAZGlzdHV0aWxzLnRleHRfZmlsZS5UZXh0RmlsZXJbUQAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy50ZXh0X2ZpbGUuVGV4dEZpbGVYAQAAAC10clxRAABYFQAAAGNvbGxlY3Rpb25zLkNvbnRhaW5lcnJdUQAAKGppAQAAamoBAABYSAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jb2xsZWN0aW9ucy5odG1sI2NvbGxlY3Rpb25zLkNvbnRhaW5lclgBAAAALXRyXlEAAFgEAAAAZGljdHJfUQAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2RpY3RYAQAAAC10cmBRAABYDgAAAGN0eXBlcy5jX3djaGFycmFRAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5jX3djaGFyWAEAAAAtdHJiUQAAWB4AAABsb2dnaW5nLmhhbmRsZXJzLlN5c0xvZ0hhbmRsZXJyY1EAAChqaQEAAGpqAQAAWFYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuU3lzTG9nSGFuZGxlclgBAAAALXRyZFEAAFgPAAAAY3R5cGVzLmNfdWludDE2cmVRAAAoamkBAABqagEAAFg9AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5jX3VpbnQxNlgBAAAALXRyZlEAAFgRAAAAaW8uQnVmZmVyZWRJT0Jhc2VyZ1EAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaW8uaHRtbCNpby5CdWZmZXJlZElPQmFzZVgBAAAALXRyaFEAAFgRAAAAVXNlckRpY3QuVXNlckRpY3RyaVEAAChqaQEAAGpqAQAAWEEAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXNlcmRpY3QuaHRtbCNVc2VyRGljdC5Vc2VyRGljdFgBAAAALXRyalEAAFgQAAAAdGVsbmV0bGliLlRlbG5ldHJrUQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90ZWxuZXRsaWIuaHRtbCN0ZWxuZXRsaWIuVGVsbmV0WAEAAAAtdHJsUQAAWA8AAABzdHJpbmcuVGVtcGxhdGVybVEAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLlRlbXBsYXRlWAEAAAAtdHJuUQAAWA0AAABjdHlwZXMuY191aW50cm9RAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5jX3VpbnRYAQAAAC10cnBRAABYHgAAAGxvZ2dpbmcuaGFuZGxlcnMuTWVtb3J5SGFuZGxlcnJxUQAAKGppAQAAamoBAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5NZW1vcnlIYW5kbGVyWAEAAAAtdHJyUQAAWAkAAABUaXguSExpc3Ryc1EAAChqaQEAAGpqAQAAWDQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGl4Lmh0bWwjVGl4LkhMaXN0WAEAAAAtdHJ0UQAAWAoAAABpby5CeXRlc0lPcnVRAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2lvLmh0bWwjaW8uQnl0ZXNJT1gBAAAALXRydlEAAFgOAAAAY3R5cGVzLmNfZmxvYXRyd1EAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLmNfZmxvYXRYAQAAAC10cnhRAABYGQAAAEJhc2VIVFRQU2VydmVyLkhUVFBTZXJ2ZXJyeVEAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYmFzZWh0dHBzZXJ2ZXIuaHRtbCNCYXNlSFRUUFNlcnZlci5IVFRQU2VydmVyWAEAAAAtdHJ6UQAAWA8AAABwcm9maWxlLlByb2ZpbGVye1EAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcHJvZmlsZS5odG1sI3Byb2ZpbGUuUHJvZmlsZVgBAAAALXRyfFEAAFgLAAAAY3R5cGVzLkNETExyfVEAAChqaQEAAGpqAQAAWDkAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLkNETExYAQAAAC10cn5RAABYIwAAAHhtbC5zYXgueG1scmVhZGVyLkluY3JlbWVudGFsUGFyc2Vycn9RAAAoamkBAABqagEAAFhZAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuSW5jcmVtZW50YWxQYXJzZXJYAQAAAC10coBRAABYGwAAAHJvYm90cGFyc2VyLlJvYm90RmlsZVBhcnNlcnKBUQAAKGppAQAAamoBAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9yb2JvdHBhcnNlci5odG1sI3JvYm90cGFyc2VyLlJvYm90RmlsZVBhcnNlclgBAAAALXRyglEAAFgQAAAAc210cGQuU01UUFNlcnZlcnKDUQAAKGppAQAAamoBAABYPQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zbXRwZC5odG1sI3NtdHBkLlNNVFBTZXJ2ZXJYAQAAAC10coRRAABYDgAAAGZ0cGxpYi5GVFBfVExTcoVRAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z0cGxpYi5odG1sI2Z0cGxpYi5GVFBfVExTWAEAAAAtdHKGUQAAWB0AAABTb2NrZXRTZXJ2ZXIuVW5peFN0cmVhbVNlcnZlcnKHUQAAKGppAQAAamoBAABYUQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXRzZXJ2ZXIuaHRtbCNTb2NrZXRTZXJ2ZXIuVW5peFN0cmVhbVNlcnZlclgBAAAALXRyiFEAAFgMAAAAbWFpbGJveC5tYm94colRAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lm1ib3hYAQAAAC10copRAABYFQAAAHhtbHJwY2xpYi5TZXJ2ZXJQcm94eXKLUQAAKGppAQAAamoBAABYRgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWxycGNsaWIuaHRtbCN4bWxycGNsaWIuU2VydmVyUHJveHlYAQAAAC10coxRAABYDwAAAGFldHlwZXMuVW5rbm93bnKNUQAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hZXR5cGVzLmh0bWwjYWV0eXBlcy5Vbmtub3duWAEAAAAtdHKOUQAAWBEAAAB6aXBmaWxlLlB5WmlwRmlsZXKPUQAAKGppAQAAamoBAABYQAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5QeVppcEZpbGVYAQAAAC10cpBRAABYDQAAAGN0eXBlcy5jX2xvbmdykVEAAChqaQEAAGpqAQAAWDsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLmNfbG9uZ1gBAAAALXRyklEAAFgKAAAAQ29ubmVjdGlvbnKTUQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNDb25uZWN0aW9uWAEAAAAtdHKUUQAAWBgAAABkaXN0dXRpbHMuY29yZS5FeHRlbnNpb25ylVEAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY29yZS5FeHRlbnNpb25YAQAAAC10cpZRAABYDgAAAHBpcGVzLlRlbXBsYXRlcpdRAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3BpcGVzLmh0bWwjcGlwZXMuVGVtcGxhdGVYAQAAAC10cphRAABYFgAAAFNvY2tldFNlcnZlci5VRFBTZXJ2ZXJymVEAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0c2VydmVyLmh0bWwjU29ja2V0U2VydmVyLlVEUFNlcnZlclgBAAAALXRymlEAAFgeAAAAdXJsbGliMi5Qcm94eURpZ2VzdEF1dGhIYW5kbGVycptRAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLlByb3h5RGlnZXN0QXV0aEhhbmRsZXJYAQAAAC10cpxRAABYEAAAAGFldHlwZXMuSW50bFRleHRynVEAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYWV0eXBlcy5odG1sI2FldHlwZXMuSW50bFRleHRYAQAAAC10cp5RAABYFAAAAHVybGxpYjIuUHJveHlIYW5kbGVycp9RAAAoamkBAABqagEAAFhDAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLlByb3h5SGFuZGxlclgBAAAALXRyoFEAAFgSAAAAY3R5cGVzLmNfdWxvbmdsb25ncqFRAAAoamkBAABqagEAAFhAAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5jX3Vsb25nbG9uZ1gBAAAALXRyolEAAFgTAAAAYXN5bmNoYXQuYXN5bmNfY2hhdHKjUQAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hc3luY2hhdC5odG1sI2FzeW5jaGF0LmFzeW5jX2NoYXRYAQAAAC10cqRRAABYFwAAAGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0cqVRAAAoamkBAABqagEAAFhKAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuT3JkZXJlZERpY3RYAQAAAC10cqZRAABYFQAAAGRvY3Rlc3QuRG9jVGVzdFBhcnNlcnKnUQAAKGppAQAAamoBAABYRAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5Eb2NUZXN0UGFyc2VyWAEAAAAtdHKoUQAAWAsAAABRdWV1ZS5RdWV1ZXKpUQAAKGppAQAAamoBAABYOAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9xdWV1ZS5odG1sI1F1ZXVlLlF1ZXVlWAEAAAAtdHKqUQAAWBsAAABTb2NrZXRTZXJ2ZXIuVGhyZWFkaW5nTWl4SW5yq1EAAChqaQEAAGpqAQAAWE8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc29ja2V0c2VydmVyLmh0bWwjU29ja2V0U2VydmVyLlRocmVhZGluZ01peEluWAEAAAAtdHKsUQAAWBIAAAB1bml0dGVzdC5UZXN0U3VpdGVyrVEAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0U3VpdGVYAQAAAC10cq5RAABYDAAAAGN0eXBlcy5QeURMTHKvUQAAKGppAQAAamoBAABYOgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuUHlETExYAQAAAC10crBRAABYEAAAAGN0eXBlcy5weV9vYmplY3RysVEAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLnB5X29iamVjdFgBAAAALXRyslEAAFgDAAAAaW50crNRAAAoamkBAABqagEAAFg0AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2ludFgBAAAALXRytFEAAFgYAAAAVXNlclN0cmluZy5NdXRhYmxlU3RyaW5ncrVRAAAoamkBAABqagEAAFhIAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VzZXJkaWN0Lmh0bWwjVXNlclN0cmluZy5NdXRhYmxlU3RyaW5nWAEAAAAtdHK2UQAAWA4AAABjdHlwZXMuY19zaG9ydHK3UQAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuY19zaG9ydFgBAAAALXRyuFEAAFgVAAAAYWV0eXBlcy5Db21wb25lbnRJdGVtcrlRAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2FldHlwZXMuaHRtbCNhZXR5cGVzLkNvbXBvbmVudEl0ZW1YAQAAAC10crpRAABYDgAAAGN0eXBlcy5jX2ludDMycrtRAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5jX2ludDMyWAEAAAAtdHK8UQAAWAgAAABzZXRzLlNldHK9UQAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zZXRzLmh0bWwjc2V0cy5TZXRYAQAAAC10cr5RAABYEAAAAHBpY2tsZS5VbnBpY2tsZXJyv1EAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcGlja2xlLmh0bWwjcGlja2xlLlVucGlja2xlclgBAAAALXRywFEAAFgNAAAAYWV0eXBlcy5SYW5nZXLBUQAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hZXR5cGVzLmh0bWwjYWV0eXBlcy5SYW5nZVgBAAAALXRywlEAAFgOAAAAc3FsaXRlMy5DdXJzb3Jyw1EAAChqaQEAAGpqAQAAWD0AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuQ3Vyc29yWAEAAAAtdHLEUQAAWCAAAAB4bWwuc2F4LnhtbHJlYWRlci5BdHRyaWJ1dGVzSW1wbHLFUQAAKGppAQAAamoBAABYVgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLkF0dHJpYnV0ZXNJbXBsWAEAAAAtdHLGUQAAWBwAAAB4bWwuc2F4LmhhbmRsZXIuRXJyb3JIYW5kbGVycsdRAAAoamkBAABqagEAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5odG1sI3htbC5zYXguaGFuZGxlci5FcnJvckhhbmRsZXJYAQAAAC10cshRAABYDgAAAHN5bXRhYmxlLkNsYXNzcslRAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3N5bXRhYmxlLmh0bWwjc3ltdGFibGUuQ2xhc3NYAQAAAC10cspRAABYCQAAAGZyb3plbnNldHLLUQAAKGppAQAAamoBAABYOQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zdGR0eXBlcy5odG1sI2Zyb3plbnNldFgBAAAALXRyzFEAAFgSAAAAdXJsbGliMi5GVFBIYW5kbGVycs1RAAAoamkBAABqagEAAFhBAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3VybGxpYjIuaHRtbCN1cmxsaWIyLkZUUEhhbmRsZXJYAQAAAC10cs5RAABYHAAAAGN0eXBlcy5MaXR0bGVFbmRpYW5TdHJ1Y3R1cmVyz1EAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLkxpdHRsZUVuZGlhblN0cnVjdHVyZVgBAAAALXRy0FEAAFgTAAAAY3R5cGVzLmNfbG9uZ2RvdWJsZXLRUQAAKGppAQAAamoBAABYQQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuY19sb25nZG91YmxlWAEAAAAtdHLSUQAAWA8AAABhcmdwYXJzZS5BY3Rpb25y01EAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXJncGFyc2UuaHRtbCNhcmdwYXJzZS5BY3Rpb25YAQAAAC10ctRRAABYGQAAAHdlYWtyZWYuV2Vha0tleURpY3Rpb25hcnly1VEAAChqaQEAAGpqAQAAWEgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvd2Vha3JlZi5odG1sI3dlYWtyZWYuV2Vha0tleURpY3Rpb25hcnlYAQAAAC10ctZRAABYEwAAAGNvbGxlY3Rpb25zLk1hcHBpbmdy11EAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5NYXBwaW5nWAEAAAAtdHLYUQAAWB8AAABTb2NrZXRTZXJ2ZXIuVGhyZWFkaW5nVENQU2VydmVyctlRAAAoamkBAABqagEAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI1NvY2tldFNlcnZlci5UaHJlYWRpbmdUQ1BTZXJ2ZXJYAQAAAC10ctpRAABYEAAAAGRpZmZsaWIuSHRtbERpZmZy21EAAChqaQEAAGpqAQAAWD8AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlmZmxpYi5odG1sI2RpZmZsaWIuSHRtbERpZmZYAQAAAC10ctxRAABYJwAAAERvY1hNTFJQQ1NlcnZlci5Eb2NYTUxSUENSZXF1ZXN0SGFuZGxlcnLdUQAAKGppAQAAamoBAABYXgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kb2N4bWxycGNzZXJ2ZXIuaHRtbCNEb2NYTUxSUENTZXJ2ZXIuRG9jWE1MUlBDUmVxdWVzdEhhbmRsZXJYAQAAAC10ct5RAABYDwAAAHNjaGVkLnNjaGVkdWxlcnLfUQAAKGppAQAAamoBAABYPAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zY2hlZC5odG1sI3NjaGVkLnNjaGVkdWxlclgBAAAALXRy4FEAAFgPAAAAemlwZmlsZS5aaXBJbmZvcuFRAAAoamkBAABqagEAAFg+AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLlppcEluZm9YAQAAAC10cuJRAABYGQAAAGNvZGVjcy5JbmNyZW1lbnRhbEVuY29kZXJy41EAAChqaQEAAGpqAQAAWEcAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLkluY3JlbWVudGFsRW5jb2RlclgBAAAALXRy5FEAAFgLAAAAbXV0ZXgubXV0ZXhy5VEAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbXV0ZXguaHRtbCNtdXRleC5tdXRleFgBAAAALXRy5lEAAFgVAAAAbG9nZ2luZy5TdHJlYW1IYW5kbGVycudRAAAoamkBAABqagEAAFhNAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLlN0cmVhbUhhbmRsZXJYAQAAAC10cuhRAABYCwAAAHJleGVjLlJFeGVjculRAAAoamkBAABqagEAAFg4AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3JleGVjLmh0bWwjcmV4ZWMuUkV4ZWNYAQAAAC10cupRAABYDQAAAG1haWxib3guQmFieWxy61EAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guQmFieWxYAQAAAC10cuxRAABYCQAAAG1tYXAubW1hcHLtUQAAKGppAQAAamoBAABYNQAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9tbWFwLmh0bWwjbW1hcC5tbWFwWAEAAAAtdHLuUQAAWA0AAABpbWFwbGliLklNQVA0cu9RAAAoamkBAABqagEAAFg8AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0WAEAAAAtdHLwUQAAWB0AAAB1cmxsaWIyLkhUVFBEaWdlc3RBdXRoSGFuZGxlcnLxUQAAKGppAQAAamoBAABYTAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS91cmxsaWIyLmh0bWwjdXJsbGliMi5IVFRQRGlnZXN0QXV0aEhhbmRsZXJYAQAAAC10cvJRAABYEAAAAHRpbWUuc3RydWN0X3RpbWVy81EAAChqaQEAAGpqAQAAWDwAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGltZS5odG1sI3RpbWUuc3RydWN0X3RpbWVYAQAAAC10cvRRAABYHAAAAGxvZ2dpbmcuaGFuZGxlcnMuU01UUEhhbmRsZXJy9VEAAChqaQEAAGpqAQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuU01UUEhhbmRsZXJYAQAAAC10cvZRAABYHAAAAGxvZ2dpbmcuaGFuZGxlcnMuSFRUUEhhbmRsZXJy91EAAChqaQEAAGpqAQAAWFQAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuSFRUUEhhbmRsZXJYAQAAAC10cvhRAABYDAAAAGFldHlwZXMuVHlwZXL5UQAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9hZXR5cGVzLmh0bWwjYWV0eXBlcy5UeXBlWAEAAAAtdHL6UQAAWBEAAABpby5CdWZmZXJlZFJlYWRlcnL7UQAAKGppAQAAamoBAABYOwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9pby5odG1sI2lvLkJ1ZmZlcmVkUmVhZGVyWAEAAAAtdHL8UQAAWCEAAAB1cmxsaWIyLkFic3RyYWN0RGlnZXN0QXV0aEhhbmRsZXJy/VEAAChqaQEAAGpqAQAAWFAAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuQWJzdHJhY3REaWdlc3RBdXRoSGFuZGxlclgBAAAALXRy/lEAAFgUAAAAbWFpbGJveC5CYWJ5bE1haWxib3hy/1EAAChqaQEAAGpqAQAAWEMAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guQmFieWxNYWlsYm94WAEAAAAtdHIAUgAAWBcAAAB4bWwuZG9tLnB1bGxkb20uU0FYMkRPTXIBUgAAKGppAQAAamoBAABYTgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS94bWwuZG9tLnB1bGxkb20uaHRtbCN4bWwuZG9tLnB1bGxkb20uU0FYMkRPTVgBAAAALXRyAlIAAFgVAAAAZG9jdGVzdC5Eb2NUZXN0RmluZGVycgNSAAAoamkBAABqagEAAFhEAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LkRvY1Rlc3RGaW5kZXJYAQAAAC10cgRSAABYBAAAAGxvbmdyBVIAAChqaQEAAGpqAQAAWDUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjbG9uZ1gBAAAALXRyBlIAAFgZAAAAZW1haWwuZ2VuZXJhdG9yLkdlbmVyYXRvcnIHUgAAKGppAQAAamoBAABYUAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9lbWFpbC5nZW5lcmF0b3IuaHRtbCNlbWFpbC5nZW5lcmF0b3IuR2VuZXJhdG9yWAEAAAAtdHIIUgAAWA8AAABob3RzaG90LlByb2ZpbGVyCVIAAChqaQEAAGpqAQAAWD4AAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaG90c2hvdC5odG1sI2hvdHNob3QuUHJvZmlsZVgBAAAALXRyClIAAFgfAAAAU29ja2V0U2VydmVyLkJhc2VSZXF1ZXN0SGFuZGxlcnILUgAAKGppAQAAamoBAABYUwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9zb2NrZXRzZXJ2ZXIuaHRtbCNTb2NrZXRTZXJ2ZXIuQmFzZVJlcXVlc3RIYW5kbGVyWAEAAAAtdHIMUgAAWBQAAABodHRwbGliLkhUVFBSZXNwb25zZXINUgAAKGppAQAAamoBAABYQwAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9odHRwbGliLmh0bWwjaHR0cGxpYi5IVFRQUmVzcG9uc2VYAQAAAC10cg5SAABYCQAAAGNzdi5leGNlbHIPUgAAKGppAQAAamoBAABYNAAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9jc3YuaHRtbCNjc3YuZXhjZWxYAQAAAC10chBSAABYFwAAAGh0dHBsaWIuSFRUUFNDb25uZWN0aW9uchFSAAAoamkBAABqagEAAFhGAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2h0dHBsaWIuaHRtbCNodHRwbGliLkhUVFBTQ29ubmVjdGlvblgBAAAALXRyElIAAFgOAAAAcmUuUmVnZXhPYmplY3RyE1IAAChqaQEAAGpqAQAAWDgAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvcmUuaHRtbCNyZS5SZWdleE9iamVjdFgBAAAALXRyFFIAAFgeAAAAZW1haWwubWltZS5tZXNzYWdlLk1JTUVNZXNzYWdlchVSAAAoamkBAABqagEAAFhQAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2VtYWlsLm1pbWUuaHRtbCNlbWFpbC5taW1lLm1lc3NhZ2UuTUlNRU1lc3NhZ2VYAQAAAC10chZSAABYEwAAAGNvbGxlY3Rpb25zLkNvdW50ZXJyF1IAAChqaQEAAGpqAQAAWEYAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5Db3VudGVyWAEAAAAtdHIYUgAAWBIAAABhcmdwYXJzZS5OYW1lc3BhY2VyGVIAAChqaQEAAGpqAQAAWEIAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvYXJncGFyc2UuaHRtbCNhcmdwYXJzZS5OYW1lc3BhY2VYAQAAAC10chpSAABYHQAAAHhtbC5zYXgueG1scmVhZGVyLklucHV0U291cmNlchtSAAAoamkBAABqagEAAFhTAAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuSW5wdXRTb3VyY2VYAQAAAC10chxSAABYHAAAAHVybGxpYjIuSFRUUEJhc2ljQXV0aEhhbmRsZXJyHVIAAChqaQEAAGpqAQAAWEsAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuSFRUUEJhc2ljQXV0aEhhbmRsZXJYAQAAAC10ch5SAABYCwAAAFRpeC5EaXJMaXN0ch9SAAAoamkBAABqagEAAFg2AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3RpeC5odG1sI1RpeC5EaXJMaXN0WAEAAAAtdHIgUgAAWA0AAAB0dXJ0bGUuU2NyZWVuciFSAAAoamkBAABqagEAAFg7AAAAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5TY3JlZW5YAQAAAC10ciJSAABYFgAAAGRlY2ltYWwuRGl2aXNpb25CeVplcm9yI1IAAChqaQEAAGpqAQAAWEUAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGl2aXNpb25CeVplcm9YAQAAAC10ciRSAABYDwAAAGRlY2ltYWwuSW5leGFjdHIlUgAAKGppAQAAamoBAABYPgAAAGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5JbmV4YWN0WAEAAAAtdHImUgAAWBsAAAB1cmxsaWIyLkhUVFBSZWRpcmVjdEhhbmRsZXJyJ1IAAChqaQEAAGpqAQAAWEoAAABodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdXJsbGliMi5odG1sI3VybGxpYjIuSFRUUFJlZGlyZWN0SGFuZGxlclgBAAAALXRyKFIAAHV1aKB9cilSAAAoWAsAAABweTpmdW5jdGlvbnIqUgAAfXIrUgAAKFhEAAAAaGFtY3Jlc3QubGlicmFyeS5udW1iZXIub3JkZXJpbmdfY29tcGFyaXNvbi5ncmVhdGVyX3RoYW5fb3JfZXF1YWxfdG9yLFIAAChYCgAAAFB5SGFtY3Jlc3RyLVIAAFgFAAAAMS45LjByLlIAAFiBAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9udW1iZXJfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkubnVtYmVyLm9yZGVyaW5nX2NvbXBhcmlzb24uZ3JlYXRlcl90aGFuX29yX2VxdWFsX3RvWAEAAAAtdHIvUgAAWEIAAABoYW1jcmVzdC5saWJyYXJ5LnRleHQuaXNlcXVhbF9pZ25vcmluZ19jYXNlLmVxdWFsX3RvX2lnbm9yaW5nX2Nhc2VyMFIAAChqLVIAAGouUgAAWH0AAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL3RleHRfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkudGV4dC5pc2VxdWFsX2lnbm9yaW5nX2Nhc2UuZXF1YWxfdG9faWdub3JpbmdfY2FzZVgBAAAALXRyMVIAAFhOAAAAaGFtY3Jlc3QubGlicmFyeS50ZXh0LmlzZXF1YWxfaWdub3Jpbmdfd2hpdGVzcGFjZS5lcXVhbF90b19pZ25vcmluZ193aGl0ZXNwYWNlcjJSAAAoai1SAABqLlIAAFiJAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS90ZXh0X21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5LnRleHQuaXNlcXVhbF9pZ25vcmluZ193aGl0ZXNwYWNlLmVxdWFsX3RvX2lnbm9yaW5nX3doaXRlc3BhY2VYAQAAAC10cjNSAABYRAAAAGhhbWNyZXN0LmxpYnJhcnkudGV4dC5zdHJpbmdjb250YWluc2lub3JkZXIuc3RyaW5nX2NvbnRhaW5zX2luX29yZGVycjRSAAAoai1SAABqLlIAAFh/AAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS90ZXh0X21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5LnRleHQuc3RyaW5nY29udGFpbnNpbm9yZGVyLnN0cmluZ19jb250YWluc19pbl9vcmRlclgBAAAALXRyNVIAAFgrAAAAaGFtY3Jlc3QubGlicmFyeS5udW1iZXIuaXNjbG9zZXRvLmlzbnVtZXJpY3I2UgAAKGotUgAAai5SAABYaAAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvbnVtYmVyX21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5Lm51bWJlci5pc2Nsb3NldG8uaXNudW1lcmljWAEAAAAtdHI3UgAAWCEAAABoYW1jcmVzdC5jb3JlLmNvcmUucmFpc2VzLmNhbGxpbmdyOFIAAChqLVIAAGouUgAAWF4AAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL29iamVjdF9tYXRjaGVycy8jaGFtY3Jlc3QuY29yZS5jb3JlLnJhaXNlcy5jYWxsaW5nWAEAAAAtdHI5UgAAWCMAAABoYW1jcmVzdC5jb3JlLmNvcmUuaXNlcXVhbC5lcXVhbF90b3I6UgAAKGotUgAAai5SAABYYAAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvb2JqZWN0X21hdGNoZXJzLyNoYW1jcmVzdC5jb3JlLmNvcmUuaXNlcXVhbC5lcXVhbF90b1gBAAAALXRyO1IAAFgqAAAAaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzX2VtcHR5LmVtcHR5cjxSAAAoai1SAABqLlIAAFhpAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9zZXF1ZW5jZV9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzX2VtcHR5LmVtcHR5WAEAAAAtdHI9UgAAWCYAAABoYW1jcmVzdC5jb3JlLmNvcmUuaXNhbnl0aGluZy5hbnl0aGluZ3I+UgAAKGotUgAAai5SAABYZAAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvbG9naWNhbF9tYXRjaGVycy8jaGFtY3Jlc3QuY29yZS5jb3JlLmlzYW55dGhpbmcuYW55dGhpbmdYAQAAAC10cj9SAABYQwAAAGhhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc3NlcXVlbmNlX29ubHljb250YWluaW5nLm9ubHlfY29udGFpbnNyQFIAAChqLVIAAGouUgAAWIIAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL3NlcXVlbmNlX21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNzZXF1ZW5jZV9vbmx5Y29udGFpbmluZy5vbmx5X2NvbnRhaW5zWAEAAAAtdHJBUgAAWCwAAABoYW1jcmVzdC5saWJyYXJ5Lm9iamVjdC5oYXNsZW5ndGguaGFzX2xlbmd0aHJCUgAAKGotUgAAai5SAABYaQAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvb2JqZWN0X21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5Lm9iamVjdC5oYXNsZW5ndGguaGFzX2xlbmd0aFgBAAAALXRyQ1IAAFg4AAAAaGFtY3Jlc3QubGlicmFyeS5udW1iZXIub3JkZXJpbmdfY29tcGFyaXNvbi5ncmVhdGVyX3RoYW5yRFIAAChqLVIAAGouUgAAWHUAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL251bWJlcl9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS5udW1iZXIub3JkZXJpbmdfY29tcGFyaXNvbi5ncmVhdGVyX3RoYW5YAQAAAC10ckVSAABYLwAAAGhhbWNyZXN0LmNvcmUuaGVscGVycy53cmFwX21hdGNoZXIud3JhcF9tYXRjaGVyckZSAAAoai1SAABqLlIAAFhkAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9oZWxwZXJzLyNoYW1jcmVzdC5jb3JlLmhlbHBlcnMud3JhcF9tYXRjaGVyLndyYXBfbWF0Y2hlclgBAAAALXRyR1IAAFg3AAAAaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzZGljdF9jb250YWluaW5nLmhhc19lbnRyeXJIUgAAKGotUgAAai5SAABYeAAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvZGljdGlvbmFyeV9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzZGljdF9jb250YWluaW5nLmhhc19lbnRyeVgBAAAALXRySVIAAFgmAAAAaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzaW4uaXNfaW5ySlIAAChqLVIAAGouUgAAWGUAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL3NlcXVlbmNlX21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNpbi5pc19pblgBAAAALXRyS1IAAFhAAAAAaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzZGljdF9jb250YWluaW5nZW50cmllcy5oYXNfZW50cmllc3JMUgAAKGotUgAAai5SAABYgQAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvZGljdGlvbmFyeV9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzZGljdF9jb250YWluaW5nZW50cmllcy5oYXNfZW50cmllc1gBAAAALXRyTVIAAFgpAAAAaGFtY3Jlc3QuY29yZS5oZWxwZXJzLmhhc21ldGhvZC5oYXNtZXRob2RyTlIAAChqLVIAAGouUgAAWF4AAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2hlbHBlcnMvI2hhbWNyZXN0LmNvcmUuaGVscGVycy5oYXNtZXRob2QuaGFzbWV0aG9kWAEAAAAtdHJPUgAAWEEAAABoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNzZXF1ZW5jZV9jb250YWluaW5naW5vcmRlci5jb250YWluc3JQUgAAKGotUgAAai5SAABYgAAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvc2VxdWVuY2VfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc3NlcXVlbmNlX2NvbnRhaW5pbmdpbm9yZGVyLmNvbnRhaW5zWAEAAAAtdHJRUgAAWCsAAABoYW1jcmVzdC5jb3JlLmNvcmUuaXNpbnN0YW5jZW9mLmluc3RhbmNlX29mclJSAAAoai1SAABqLlIAAFhoAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9vYmplY3RfbWF0Y2hlcnMvI2hhbWNyZXN0LmNvcmUuY29yZS5pc2luc3RhbmNlb2YuaW5zdGFuY2Vfb2ZYAQAAAC10clNSAABYJwAAAGhhbWNyZXN0LmNvcmUuY29yZS5pc3NhbWUuc2FtZV9pbnN0YW5jZXJUUgAAKGotUgAAai5SAABYZAAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvb2JqZWN0X21hdGNoZXJzLyNoYW1jcmVzdC5jb3JlLmNvcmUuaXNzYW1lLnNhbWVfaW5zdGFuY2VYAQAAAC10clVSAABYQQAAAGhhbWNyZXN0LmxpYnJhcnkubnVtYmVyLm9yZGVyaW5nX2NvbXBhcmlzb24ubGVzc190aGFuX29yX2VxdWFsX3RvclZSAAAoai1SAABqLlIAAFh+AAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9udW1iZXJfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkubnVtYmVyLm9yZGVyaW5nX2NvbXBhcmlzb24ubGVzc190aGFuX29yX2VxdWFsX3RvWAEAAAAtdHJXUgAAWB8AAABoYW1jcmVzdC5jb3JlLmNvcmUuYW55b2YuYW55X29mclhSAAAoai1SAABqLlIAAFhdAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9sb2dpY2FsX21hdGNoZXJzLyNoYW1jcmVzdC5jb3JlLmNvcmUuYW55b2YuYW55X29mWAEAAAAtdHJZUgAAWDwAAABoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNkaWN0X2NvbnRhaW5pbmd2YWx1ZS5oYXNfdmFsdWVyWlIAAChqLVIAAGouUgAAWH0AAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2RpY3Rpb25hcnlfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc2RpY3RfY29udGFpbmluZ3ZhbHVlLmhhc192YWx1ZVgBAAAALXRyW1IAAFgqAAAAaGFtY3Jlc3QubGlicmFyeS5udW1iZXIuaXNjbG9zZXRvLmNsb3NlX3RvclxSAAAoai1SAABqLlIAAFhnAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9udW1iZXJfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkubnVtYmVyLmlzY2xvc2V0by5jbG9zZV90b1gBAAAALXRyXVIAAFgiAAAAaGFtY3Jlc3QuY29yZS5jb3JlLmlzbm9uZS5ub3Rfbm9uZXJeUgAAKGotUgAAai5SAABYXwAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvb2JqZWN0X21hdGNoZXJzLyNoYW1jcmVzdC5jb3JlLmNvcmUuaXNub25lLm5vdF9ub25lWAEAAAAtdHJfUgAAWDIAAABoYW1jcmVzdC5saWJyYXJ5Lm9iamVjdC5oYXNwcm9wZXJ0eS5oYXNfcHJvcGVydGllc3JgUgAAKGotUgAAai5SAABYbwAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvb2JqZWN0X21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5Lm9iamVjdC5oYXNwcm9wZXJ0eS5oYXNfcHJvcGVydGllc1gBAAAALXRyYVIAAFggAAAAaGFtY3Jlc3QuY29yZS5jb3JlLnJhaXNlcy5yYWlzZXNyYlIAAChqLVIAAGouUgAAWF0AAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL29iamVjdF9tYXRjaGVycy8jaGFtY3Jlc3QuY29yZS5jb3JlLnJhaXNlcy5yYWlzZXNYAQAAAC10cmNSAABYLAAAAGhhbWNyZXN0LmxpYnJhcnkub2JqZWN0Lmhhc3N0cmluZy5oYXNfc3RyaW5ncmRSAAAoai1SAABqLlIAAFhpAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9vYmplY3RfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkub2JqZWN0Lmhhc3N0cmluZy5oYXNfc3RyaW5nWAEAAAAtdHJlUgAAWCUAAABoYW1jcmVzdC5jb3JlLmFzc2VydF90aGF0LmFzc2VydF90aGF0cmZSAAAoai1SAABqLlIAAFheAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9pbnRlZ3JhdGlvbi8jaGFtY3Jlc3QuY29yZS5hc3NlcnRfdGhhdC5hc3NlcnRfdGhhdFgBAAAALXRyZ1IAAFgyAAAAaGFtY3Jlc3QubGlicmFyeS50ZXh0LnN0cmluZ3N0YXJ0c3dpdGguc3RhcnRzX3dpdGhyaFIAAChqLVIAAGouUgAAWG0AAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL3RleHRfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkudGV4dC5zdHJpbmdzdGFydHN3aXRoLnN0YXJ0c193aXRoWAEAAAAtdHJpUgAAWCkAAABoYW1jcmVzdC5jb3JlLnN0cmluZ19kZXNjcmlwdGlvbi50b3N0cmluZ3JqUgAAKGotUgAAai5SAABYWwAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvY29yZS8jaGFtY3Jlc3QuY29yZS5zdHJpbmdfZGVzY3JpcHRpb24udG9zdHJpbmdYAQAAAC10cmtSAABYLgAAAGhhbWNyZXN0LmxpYnJhcnkudGV4dC5zdHJpbmdlbmRzd2l0aC5lbmRzX3dpdGhybFIAAChqLVIAAGouUgAAWGkAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL3RleHRfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkudGV4dC5zdHJpbmdlbmRzd2l0aC5lbmRzX3dpdGhYAQAAAC10cm1SAABYLAAAAGhhbWNyZXN0LmNvcmUuY29yZS5kZXNjcmliZWRfYXMuZGVzY3JpYmVkX2Fzcm5SAAAoai1SAABqLlIAAFhsAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9kZWNvcmF0b3JfbWF0Y2hlcnMvI2hhbWNyZXN0LmNvcmUuY29yZS5kZXNjcmliZWRfYXMuZGVzY3JpYmVkX2FzWAEAAAAtdHJvUgAAWDsAAABoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNzZXF1ZW5jZV9jb250YWluaW5nLmhhc19pdGVtc3JwUgAAKGotUgAAai5SAABYegAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvc2VxdWVuY2VfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc3NlcXVlbmNlX2NvbnRhaW5pbmcuaGFzX2l0ZW1zWAEAAAAtdHJxUgAAWB0AAABoYW1jcmVzdC5jb3JlLmNvcmUuaXNub3Qubm90X3JyUgAAKGotUgAAai5SAABYWwAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvbG9naWNhbF9tYXRjaGVycy8jaGFtY3Jlc3QuY29yZS5jb3JlLmlzbm90Lm5vdF9YAQAAAC10cnNSAABYMgAAAGhhbWNyZXN0LmxpYnJhcnkudGV4dC5zdHJpbmdtYXRjaGVzLm1hdGNoZXNfcmVnZXhwcnRSAAAoai1SAABqLlIAAFhtAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS90ZXh0X21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5LnRleHQuc3RyaW5nbWF0Y2hlcy5tYXRjaGVzX3JlZ2V4cFgBAAAALXRydVIAAFhPAAAAaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzc2VxdWVuY2VfY29udGFpbmluZ2luYW55b3JkZXIuY29udGFpbnNfaW5hbnlvcmRlcnJ2UgAAKGotUgAAai5SAABYjgAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvc2VxdWVuY2VfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc3NlcXVlbmNlX2NvbnRhaW5pbmdpbmFueW9yZGVyLmNvbnRhaW5zX2luYW55b3JkZXJYAQAAAC10cndSAABYMAAAAGhhbWNyZXN0LmxpYnJhcnkub2JqZWN0Lmhhc3Byb3BlcnR5Lmhhc19wcm9wZXJ0eXJ4UgAAKGotUgAAai5SAABYbQAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvb2JqZWN0X21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5Lm9iamVjdC5oYXNwcm9wZXJ0eS5oYXNfcHJvcGVydHlYAQAAAC10cnlSAABYNQAAAGhhbWNyZXN0LmxpYnJhcnkubnVtYmVyLm9yZGVyaW5nX2NvbXBhcmlzb24ubGVzc190aGFucnpSAAAoai1SAABqLlIAAFhyAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9udW1iZXJfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkubnVtYmVyLm9yZGVyaW5nX2NvbXBhcmlzb24ubGVzc190aGFuWAEAAAAtdHJ7UgAAWDgAAABoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNkaWN0X2NvbnRhaW5pbmdrZXkuaGFzX2tleXJ8UgAAKGotUgAAai5SAABYeQAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvZGljdGlvbmFyeV9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzZGljdF9jb250YWluaW5na2V5Lmhhc19rZXlYAQAAAC10cn1SAABYHwAAAGhhbWNyZXN0LmNvcmUuY29yZS5hbGxvZi5hbGxfb2ZyflIAAChqLVIAAGouUgAAWF0AAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2xvZ2ljYWxfbWF0Y2hlcnMvI2hhbWNyZXN0LmNvcmUuY29yZS5hbGxvZi5hbGxfb2ZYAQAAAC10cn9SAABYGgAAAGhhbWNyZXN0LmNvcmUuY29yZS5pc18uaXNfcoBSAAAoai1SAABqLlIAAFhaAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9kZWNvcmF0b3JfbWF0Y2hlcnMvI2hhbWNyZXN0LmNvcmUuY29yZS5pc18uaXNfWAEAAAAtdHKBUgAAWDQAAABoYW1jcmVzdC5saWJyYXJ5LnRleHQuc3RyaW5nY29udGFpbnMuY29udGFpbnNfc3RyaW5ncoJSAAAoai1SAABqLlIAAFhvAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS90ZXh0X21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5LnRleHQuc3RyaW5nY29udGFpbnMuY29udGFpbnNfc3RyaW5nWAEAAAAtdHKDUgAAWB4AAABoYW1jcmVzdC5jb3JlLmNvcmUuaXNub25lLm5vbmVyhFIAAChqLVIAAGouUgAAWFsAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL29iamVjdF9tYXRjaGVycy8jaGFtY3Jlc3QuY29yZS5jb3JlLmlzbm9uZS5ub25lWAEAAAAtdHKFUgAAWDoAAABoYW1jcmVzdC5saWJyYXJ5LmludGVncmF0aW9uLm1hdGNoX2VxdWFsaXR5Lm1hdGNoX2VxdWFsaXR5coZSAAAoai1SAABqLlIAAFhzAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9pbnRlZ3JhdGlvbi8jaGFtY3Jlc3QubGlicmFyeS5pbnRlZ3JhdGlvbi5tYXRjaF9lcXVhbGl0eS5tYXRjaF9lcXVhbGl0eVgBAAAALXRyh1IAAFg6AAAAaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzc2VxdWVuY2VfY29udGFpbmluZy5oYXNfaXRlbXKIUgAAKGotUgAAai5SAABYeQAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvc2VxdWVuY2VfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc3NlcXVlbmNlX2NvbnRhaW5pbmcuaGFzX2l0ZW1YAQAAAC10colSAABYHwAAAGhhbWNyZXN0LmNvcmUuY29yZS5pc25vdC5pc19ub3RyilIAAChqLVIAAGouUgAAWF0AAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2xvZ2ljYWxfbWF0Y2hlcnMvI2hhbWNyZXN0LmNvcmUuY29yZS5pc25vdC5pc19ub3RYAQAAAC10cotSAAB1WAkAAABzdGQ6bGFiZWxyjFIAAH1yjVIAAChYBgAAAHNlYXJjaHKOUgAAKGotUgAAai5SAABYNAAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvc2VhcmNoLyNYCwAAAFNlYXJjaCBQYWdldFgIAAAAbW9kaW5kZXhyj1IAAChqLVIAAGouUgAAWDkAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL3B5LW1vZGluZGV4LyNYDAAAAE1vZHVsZSBJbmRleHRYBQAAAHN1Z2FycpBSAAAoai1SAABqLlIAAFg7AAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS90dXRvcmlhbC8jc3VnYXJYDwAAAFN5bnRhY3RpYyBzdWdhcnRykVIAAFgIAAAAZ2VuaW5kZXhyklIAAChqLVIAAGouUgAAWDYAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2dlbmluZGV4LyNYBQAAAEluZGV4dHVYCQAAAHB5Om1ldGhvZHKTUgAAfXKUUgAAKFgvAAAAaGFtY3Jlc3QuY29yZS5iYXNlX21hdGNoZXIuQmFzZU1hdGNoZXIuX21hdGNoZXNylVIAAChqLVIAAGouUgAAWGEAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2NvcmUvI2hhbWNyZXN0LmNvcmUuYmFzZV9tYXRjaGVyLkJhc2VNYXRjaGVyLl9tYXRjaGVzWAEAAAAtdHKWUgAAWC8AAABoYW1jcmVzdC5jb3JlLm1hdGNoZXIuTWF0Y2hlci5kZXNjcmliZV9taXNtYXRjaHKXUgAAKGotUgAAai5SAABYYQAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvY29yZS8jaGFtY3Jlc3QuY29yZS5tYXRjaGVyLk1hdGNoZXIuZGVzY3JpYmVfbWlzbWF0Y2hYAQAAAC10cphSAABYOwAAAGhhbWNyZXN0LmNvcmUuZGVzY3JpcHRpb24uRGVzY3JpcHRpb24uYXBwZW5kX2Rlc2NyaXB0aW9uX29mcplSAAAoai1SAABqLlIAAFhtAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9jb3JlLyNoYW1jcmVzdC5jb3JlLmRlc2NyaXB0aW9uLkRlc2NyaXB0aW9uLmFwcGVuZF9kZXNjcmlwdGlvbl9vZlgBAAAALXRymlIAAFguAAAAaGFtY3Jlc3QuY29yZS5iYXNlX21hdGNoZXIuQmFzZU1hdGNoZXIubWF0Y2hlc3KbUgAAKGotUgAAai5SAABYYAAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvY29yZS8jaGFtY3Jlc3QuY29yZS5iYXNlX21hdGNoZXIuQmFzZU1hdGNoZXIubWF0Y2hlc1gBAAAALXRynFIAAFgyAAAAaGFtY3Jlc3QuY29yZS5kZXNjcmlwdGlvbi5EZXNjcmlwdGlvbi5hcHBlbmRfdmFsdWVynVIAAChqLVIAAGouUgAAWGQAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2NvcmUvI2hhbWNyZXN0LmNvcmUuZGVzY3JpcHRpb24uRGVzY3JpcHRpb24uYXBwZW5kX3ZhbHVlWAEAAAAtdHKeUgAAWDcAAABoYW1jcmVzdC5jb3JlLnNlbGZkZXNjcmliaW5nLlNlbGZEZXNjcmliaW5nLmRlc2NyaWJlX3Rvcp9SAAAoai1SAABqLlIAAFhpAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9jb3JlLyNoYW1jcmVzdC5jb3JlLnNlbGZkZXNjcmliaW5nLlNlbGZEZXNjcmliaW5nLmRlc2NyaWJlX3RvWAEAAAAtdHKgUgAAWDEAAABoYW1jcmVzdC5jb3JlLmRlc2NyaXB0aW9uLkRlc2NyaXB0aW9uLmFwcGVuZF9saXN0cqFSAAAoai1SAABqLlIAAFhjAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9jb3JlLyNoYW1jcmVzdC5jb3JlLmRlc2NyaXB0aW9uLkRlc2NyaXB0aW9uLmFwcGVuZF9saXN0WAEAAAAtdHKiUgAAWDEAAABoYW1jcmVzdC5jb3JlLmRlc2NyaXB0aW9uLkRlc2NyaXB0aW9uLmFwcGVuZF90ZXh0cqNSAAAoai1SAABqLlIAAFhjAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9jb3JlLyNoYW1jcmVzdC5jb3JlLmRlc2NyaXB0aW9uLkRlc2NyaXB0aW9uLmFwcGVuZF90ZXh0WAEAAAAtdHKkUgAAWDUAAABoYW1jcmVzdC5jb3JlLmJhc2VfZGVzY3JpcHRpb24uQmFzZURlc2NyaXB0aW9uLmFwcGVuZHKlUgAAKGotUgAAai5SAABYZwAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvY29yZS8jaGFtY3Jlc3QuY29yZS5iYXNlX2Rlc2NyaXB0aW9uLkJhc2VEZXNjcmlwdGlvbi5hcHBlbmRYAQAAAC10cqZSAABYJQAAAGhhbWNyZXN0LmNvcmUubWF0Y2hlci5NYXRjaGVyLm1hdGNoZXNyp1IAAChqLVIAAGouUgAAWFcAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2NvcmUvI2hhbWNyZXN0LmNvcmUubWF0Y2hlci5NYXRjaGVyLm1hdGNoZXNYAQAAAC10cqhSAABYOAAAAGhhbWNyZXN0LmNvcmUuYmFzZV9tYXRjaGVyLkJhc2VNYXRjaGVyLmRlc2NyaWJlX21pc21hdGNocqlSAAAoai1SAABqLlIAAFhqAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9jb3JlLyNoYW1jcmVzdC5jb3JlLmJhc2VfbWF0Y2hlci5CYXNlTWF0Y2hlci5kZXNjcmliZV9taXNtYXRjaFgBAAAALXRyqlIAAFhBAAAAaGFtY3Jlc3QuY29yZS5zZWxmZGVzY3JpYmluZ3ZhbHVlLlNlbGZEZXNjcmliaW5nVmFsdWUuZGVzY3JpYmVfdG9yq1IAAChqLVIAAGouUgAAWHMAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2NvcmUvI2hhbWNyZXN0LmNvcmUuc2VsZmRlc2NyaWJpbmd2YWx1ZS5TZWxmRGVzY3JpYmluZ1ZhbHVlLmRlc2NyaWJlX3RvWAEAAAAtdHKsUgAAdVgJAAAAcHk6bW9kdWxlcq1SAAB9cq5SAAAoWDgAAABoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNzZXF1ZW5jZV9jb250YWluaW5naW5vcmRlcnKvUgAAKGotUgAAai5SAABYfgAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvc2VxdWVuY2VfbWF0Y2hlcnMvI21vZHVsZS1oYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNzZXF1ZW5jZV9jb250YWluaW5naW5vcmRlclgBAAAALXRysFIAAFghAAAAaGFtY3Jlc3QuY29yZS5zZWxmZGVzY3JpYmluZ3ZhbHVlcrFSAAAoai1SAABqLlIAAFhaAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9jb3JlLyNtb2R1bGUtaGFtY3Jlc3QuY29yZS5zZWxmZGVzY3JpYmluZ3ZhbHVlWAEAAAAtdHKyUgAAWBYAAABoYW1jcmVzdC5jb3JlLmNvcmUuaXNfcrNSAAAoai1SAABqLlIAAFhdAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9kZWNvcmF0b3JfbWF0Y2hlcnMvI21vZHVsZS1oYW1jcmVzdC5jb3JlLmNvcmUuaXNfWAEAAAAtdHK0UgAAWCsAAABoYW1jcmVzdC5saWJyYXJ5LnRleHQuaXNlcXVhbF9pZ25vcmluZ19jYXNlcrVSAAAoai1SAABqLlIAAFhtAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS90ZXh0X21hdGNoZXJzLyNtb2R1bGUtaGFtY3Jlc3QubGlicmFyeS50ZXh0LmlzZXF1YWxfaWdub3JpbmdfY2FzZVgBAAAALXRytlIAAFgjAAAAaGFtY3Jlc3QubGlicmFyeS50ZXh0LnN0cmluZ21hdGNoZXNyt1IAAChqLVIAAGouUgAAWGUAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL3RleHRfbWF0Y2hlcnMvI21vZHVsZS1oYW1jcmVzdC5saWJyYXJ5LnRleHQuc3RyaW5nbWF0Y2hlc1gBAAAALXRyuFIAAFgtAAAAaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzZGljdF9jb250YWluaW5ncrlSAAAoai1SAABqLlIAAFh1AAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9kaWN0aW9uYXJ5X21hdGNoZXJzLyNtb2R1bGUtaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzZGljdF9jb250YWluaW5nWAEAAAAtdHK6UgAAWDUAAABoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNzZXF1ZW5jZV9vbmx5Y29udGFpbmluZ3K7UgAAKGotUgAAai5SAABYewAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvc2VxdWVuY2VfbWF0Y2hlcnMvI21vZHVsZS1oYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNzZXF1ZW5jZV9vbmx5Y29udGFpbmluZ1gBAAAALXRyvFIAAFgaAAAAaGFtY3Jlc3QuY29yZS5jb3JlLmlzZXF1YWxyvVIAAChqLVIAAGouUgAAWF4AAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL29iamVjdF9tYXRjaGVycy8jbW9kdWxlLWhhbWNyZXN0LmNvcmUuY29yZS5pc2VxdWFsWAEAAAAtdHK+UgAAWBgAAABoYW1jcmVzdC5jb3JlLmNvcmUuaXNub3Ryv1IAAChqLVIAAGouUgAAWF0AAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2xvZ2ljYWxfbWF0Y2hlcnMvI21vZHVsZS1oYW1jcmVzdC5jb3JlLmNvcmUuaXNub3RYAQAAAC10csBSAABYGQAAAGhhbWNyZXN0LmNvcmUuZGVzY3JpcHRpb25ywVIAAChqLVIAAGouUgAAWFIAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2NvcmUvI21vZHVsZS1oYW1jcmVzdC5jb3JlLmRlc2NyaXB0aW9uWAEAAAAtdHLCUgAAWCMAAABoYW1jcmVzdC5saWJyYXJ5Lm9iamVjdC5oYXNwcm9wZXJ0eXLDUgAAKGotUgAAai5SAABYZwAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvb2JqZWN0X21hdGNoZXJzLyNtb2R1bGUtaGFtY3Jlc3QubGlicmFyeS5vYmplY3QuaGFzcHJvcGVydHlYAQAAAC10csRSAABYGAAAAGhhbWNyZXN0LmNvcmUuY29yZS5hbGxvZnLFUgAAKGotUgAAai5SAABYXQAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvbG9naWNhbF9tYXRjaGVycy8jbW9kdWxlLWhhbWNyZXN0LmNvcmUuY29yZS5hbGxvZlgBAAAALXRyxlIAAFgyAAAAaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzZGljdF9jb250YWluaW5ndmFsdWVyx1IAAChqLVIAAGouUgAAWHoAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2RpY3Rpb25hcnlfbWF0Y2hlcnMvI21vZHVsZS1oYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNkaWN0X2NvbnRhaW5pbmd2YWx1ZVgBAAAALXRyyFIAAFgkAAAAaGFtY3Jlc3QubGlicmFyeS50ZXh0LnN0cmluZ2NvbnRhaW5zcslSAAAoai1SAABqLlIAAFhmAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS90ZXh0X21hdGNoZXJzLyNtb2R1bGUtaGFtY3Jlc3QubGlicmFyeS50ZXh0LnN0cmluZ2NvbnRhaW5zWAEAAAAtdHLKUgAAWB8AAABoYW1jcmVzdC5jb3JlLmNvcmUuZGVzY3JpYmVkX2FzcstSAAAoai1SAABqLlIAAFhmAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9kZWNvcmF0b3JfbWF0Y2hlcnMvI21vZHVsZS1oYW1jcmVzdC5jb3JlLmNvcmUuZGVzY3JpYmVkX2FzWAEAAAAtdHLMUgAAWDEAAABoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNzZXF1ZW5jZV9jb250YWluaW5ncs1SAAAoai1SAABqLlIAAFh3AAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9zZXF1ZW5jZV9tYXRjaGVycy8jbW9kdWxlLWhhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc3NlcXVlbmNlX2NvbnRhaW5pbmdYAQAAAC10cs5SAABYNAAAAGhhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc2RpY3RfY29udGFpbmluZ2VudHJpZXNyz1IAAChqLVIAAGouUgAAWHwAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2RpY3Rpb25hcnlfbWF0Y2hlcnMvI21vZHVsZS1oYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNkaWN0X2NvbnRhaW5pbmdlbnRyaWVzWAEAAAAtdHLQUgAAWCQAAABoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNfZW1wdHly0VIAAChqLVIAAGouUgAAWGoAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL3NlcXVlbmNlX21hdGNoZXJzLyNtb2R1bGUtaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzX2VtcHR5WAEAAAAtdHLSUgAAWCAAAABoYW1jcmVzdC5jb3JlLnN0cmluZ19kZXNjcmlwdGlvbnLTUgAAKGotUgAAai5SAABYWQAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvY29yZS8jbW9kdWxlLWhhbWNyZXN0LmNvcmUuc3RyaW5nX2Rlc2NyaXB0aW9uWAEAAAAtdHLUUgAAWCYAAABoYW1jcmVzdC5saWJyYXJ5LnRleHQuc3RyaW5nc3RhcnRzd2l0aHLVUgAAKGotUgAAai5SAABYaAAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvdGV4dF9tYXRjaGVycy8jbW9kdWxlLWhhbWNyZXN0LmxpYnJhcnkudGV4dC5zdHJpbmdzdGFydHN3aXRoWAEAAAAtdHLWUgAAWCIAAABoYW1jcmVzdC5jb3JlLmhlbHBlcnMud3JhcF9tYXRjaGVyctdSAAAoai1SAABqLlIAAFheAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9oZWxwZXJzLyNtb2R1bGUtaGFtY3Jlc3QuY29yZS5oZWxwZXJzLndyYXBfbWF0Y2hlclgBAAAALXRy2FIAAFgxAAAAaGFtY3Jlc3QubGlicmFyeS50ZXh0LmlzZXF1YWxfaWdub3Jpbmdfd2hpdGVzcGFjZXLZUgAAKGotUgAAai5SAABYcwAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvdGV4dF9tYXRjaGVycy8jbW9kdWxlLWhhbWNyZXN0LmxpYnJhcnkudGV4dC5pc2VxdWFsX2lnbm9yaW5nX3doaXRlc3BhY2VYAQAAAC10ctpSAABYGQAAAGhhbWNyZXN0LmNvcmUuY29yZS5yYWlzZXNy21IAAChqLVIAAGouUgAAWF0AAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL29iamVjdF9tYXRjaGVycy8jbW9kdWxlLWhhbWNyZXN0LmNvcmUuY29yZS5yYWlzZXNYAQAAAC10ctxSAABYHQAAAGhhbWNyZXN0LmNvcmUuY29yZS5pc2FueXRoaW5nct1SAAAoai1SAABqLlIAAFhiAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9sb2dpY2FsX21hdGNoZXJzLyNtb2R1bGUtaGFtY3Jlc3QuY29yZS5jb3JlLmlzYW55dGhpbmdYAQAAAC10ct5SAABYHwAAAGhhbWNyZXN0LmNvcmUuaGVscGVycy5oYXNtZXRob2Ry31IAAChqLVIAAGouUgAAWFsAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2hlbHBlcnMvI21vZHVsZS1oYW1jcmVzdC5jb3JlLmhlbHBlcnMuaGFzbWV0aG9kWAEAAAAtdHLgUgAAWDAAAABoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNkaWN0X2NvbnRhaW5pbmdrZXly4VIAAChqLVIAAGouUgAAWHgAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2RpY3Rpb25hcnlfbWF0Y2hlcnMvI21vZHVsZS1oYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNkaWN0X2NvbnRhaW5pbmdrZXlYAQAAAC10cuJSAABYGQAAAGhhbWNyZXN0LmNvcmUuY29yZS5pc3NhbWVy41IAAChqLVIAAGouUgAAWF0AAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL29iamVjdF9tYXRjaGVycy8jbW9kdWxlLWhhbWNyZXN0LmNvcmUuY29yZS5pc3NhbWVYAQAAAC10cuRSAABYGgAAAGhhbWNyZXN0LmNvcmUuYmFzZV9tYXRjaGVycuVSAAAoai1SAABqLlIAAFhTAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9jb3JlLyNtb2R1bGUtaGFtY3Jlc3QuY29yZS5iYXNlX21hdGNoZXJYAQAAAC10cuZSAABYIQAAAGhhbWNyZXN0LmxpYnJhcnkub2JqZWN0Lmhhc3N0cmluZ3LnUgAAKGotUgAAai5SAABYZQAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvb2JqZWN0X21hdGNoZXJzLyNtb2R1bGUtaGFtY3Jlc3QubGlicmFyeS5vYmplY3QuaGFzc3RyaW5nWAEAAAAtdHLoUgAAWCsAAABoYW1jcmVzdC5saWJyYXJ5Lm51bWJlci5vcmRlcmluZ19jb21wYXJpc29uculSAAAoai1SAABqLlIAAFhvAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9udW1iZXJfbWF0Y2hlcnMvI21vZHVsZS1oYW1jcmVzdC5saWJyYXJ5Lm51bWJlci5vcmRlcmluZ19jb21wYXJpc29uWAEAAAAtdHLqUgAAWCsAAABoYW1jcmVzdC5saWJyYXJ5LnRleHQuc3RyaW5nY29udGFpbnNpbm9yZGVycutSAAAoai1SAABqLlIAAFhtAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS90ZXh0X21hdGNoZXJzLyNtb2R1bGUtaGFtY3Jlc3QubGlicmFyeS50ZXh0LnN0cmluZ2NvbnRhaW5zaW5vcmRlclgBAAAALXRy7FIAAFgcAAAAaGFtY3Jlc3QuY29yZS5zZWxmZGVzY3JpYmluZ3LtUgAAKGotUgAAai5SAABYVQAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvY29yZS8jbW9kdWxlLWhhbWNyZXN0LmNvcmUuc2VsZmRlc2NyaWJpbmdYAQAAAC10cu5SAABYKwAAAGhhbWNyZXN0LmxpYnJhcnkuaW50ZWdyYXRpb24ubWF0Y2hfZXF1YWxpdHly71IAAChqLVIAAGouUgAAWGsAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2ludGVncmF0aW9uLyNtb2R1bGUtaGFtY3Jlc3QubGlicmFyeS5pbnRlZ3JhdGlvbi5tYXRjaF9lcXVhbGl0eVgBAAAALXRy8FIAAFgYAAAAaGFtY3Jlc3QuY29yZS5jb3JlLmFueW9mcvFSAAAoai1SAABqLlIAAFhdAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9sb2dpY2FsX21hdGNoZXJzLyNtb2R1bGUtaGFtY3Jlc3QuY29yZS5jb3JlLmFueW9mWAEAAAAtdHLyUgAAWCAAAABoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNpbnLzUgAAKGotUgAAai5SAABYZgAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvc2VxdWVuY2VfbWF0Y2hlcnMvI21vZHVsZS1oYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNpblgBAAAALXRy9FIAAFghAAAAaGFtY3Jlc3QubGlicmFyeS5vYmplY3QuaGFzbGVuZ3RocvVSAAAoai1SAABqLlIAAFhlAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9vYmplY3RfbWF0Y2hlcnMvI21vZHVsZS1oYW1jcmVzdC5saWJyYXJ5Lm9iamVjdC5oYXNsZW5ndGhYAQAAAC10cvZSAABYGQAAAGhhbWNyZXN0LmNvcmUuY29yZS5pc25vbmVy91IAAChqLVIAAGouUgAAWF0AAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL29iamVjdF9tYXRjaGVycy8jbW9kdWxlLWhhbWNyZXN0LmNvcmUuY29yZS5pc25vbmVYAQAAAC10cvhSAABYFQAAAGhhbWNyZXN0LmNvcmUubWF0Y2hlcnL5UgAAKGotUgAAai5SAABYTgAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvY29yZS8jbW9kdWxlLWhhbWNyZXN0LmNvcmUubWF0Y2hlclgBAAAALXRy+lIAAFgfAAAAaGFtY3Jlc3QuY29yZS5jb3JlLmlzaW5zdGFuY2VvZnL7UgAAKGotUgAAai5SAABYYwAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvb2JqZWN0X21hdGNoZXJzLyNtb2R1bGUtaGFtY3Jlc3QuY29yZS5jb3JlLmlzaW5zdGFuY2VvZlgBAAAALXRy/FIAAFghAAAAaGFtY3Jlc3QubGlicmFyeS5udW1iZXIuaXNjbG9zZXRvcv1SAAAoai1SAABqLlIAAFhlAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9udW1iZXJfbWF0Y2hlcnMvI21vZHVsZS1oYW1jcmVzdC5saWJyYXJ5Lm51bWJlci5pc2Nsb3NldG9YAQAAAC10cv5SAABYOwAAAGhhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc3NlcXVlbmNlX2NvbnRhaW5pbmdpbmFueW9yZGVycv9SAAAoai1SAABqLlIAAFiBAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9zZXF1ZW5jZV9tYXRjaGVycy8jbW9kdWxlLWhhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc3NlcXVlbmNlX2NvbnRhaW5pbmdpbmFueW9yZGVyWAEAAAAtdHIAUwAAWCQAAABoYW1jcmVzdC5saWJyYXJ5LnRleHQuc3RyaW5nZW5kc3dpdGhyAVMAAChqLVIAAGouUgAAWGYAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL3RleHRfbWF0Y2hlcnMvI21vZHVsZS1oYW1jcmVzdC5saWJyYXJ5LnRleHQuc3RyaW5nZW5kc3dpdGhYAQAAAC10cgJTAABYGQAAAGhhbWNyZXN0LmNvcmUuYXNzZXJ0X3RoYXRyA1MAAChqLVIAAGouUgAAWFkAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2ludGVncmF0aW9uLyNtb2R1bGUtaGFtY3Jlc3QuY29yZS5hc3NlcnRfdGhhdFgBAAAALXRyBFMAAFgeAAAAaGFtY3Jlc3QuY29yZS5iYXNlX2Rlc2NyaXB0aW9ucgVTAAAoai1SAABqLlIAAFhXAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9jb3JlLyNtb2R1bGUtaGFtY3Jlc3QuY29yZS5iYXNlX2Rlc2NyaXB0aW9uWAEAAAAtdHIGUwAAdVgIAAAAcHk6Y2xhc3NyB1MAAH1yCFMAAChYLgAAAGhhbWNyZXN0LmNvcmUuYmFzZV9kZXNjcmlwdGlvbi5CYXNlRGVzY3JpcHRpb25yCVMAAChqLVIAAGouUgAAWGAAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2NvcmUvI2hhbWNyZXN0LmNvcmUuYmFzZV9kZXNjcmlwdGlvbi5CYXNlRGVzY3JpcHRpb25YAQAAAC10cgpTAABYJQAAAGhhbWNyZXN0LmNvcmUuZGVzY3JpcHRpb24uRGVzY3JpcHRpb25yC1MAAChqLVIAAGouUgAAWFcAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2NvcmUvI2hhbWNyZXN0LmNvcmUuZGVzY3JpcHRpb24uRGVzY3JpcHRpb25YAQAAAC10cgxTAABYMgAAAGhhbWNyZXN0LmNvcmUuc3RyaW5nX2Rlc2NyaXB0aW9uLlN0cmluZ0Rlc2NyaXB0aW9ucg1TAAAoai1SAABqLlIAAFhkAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9jb3JlLyNoYW1jcmVzdC5jb3JlLnN0cmluZ19kZXNjcmlwdGlvbi5TdHJpbmdEZXNjcmlwdGlvblgBAAAALXRyDlMAAFgmAAAAaGFtY3Jlc3QuY29yZS5iYXNlX21hdGNoZXIuQmFzZU1hdGNoZXJyD1MAAChqLVIAAGouUgAAWFgAAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2NvcmUvI2hhbWNyZXN0LmNvcmUuYmFzZV9tYXRjaGVyLkJhc2VNYXRjaGVyWAEAAAAtdHIQUwAAWDUAAABoYW1jcmVzdC5jb3JlLnNlbGZkZXNjcmliaW5ndmFsdWUuU2VsZkRlc2NyaWJpbmdWYWx1ZXIRUwAAKGotUgAAai5SAABYZwAAAGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvY29yZS8jaGFtY3Jlc3QuY29yZS5zZWxmZGVzY3JpYmluZ3ZhbHVlLlNlbGZEZXNjcmliaW5nVmFsdWVYAQAAAC10chJTAABYKwAAAGhhbWNyZXN0LmNvcmUuc2VsZmRlc2NyaWJpbmcuU2VsZkRlc2NyaWJpbmdyE1MAAChqLVIAAGouUgAAWF0AAABodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2NvcmUvI2hhbWNyZXN0LmNvcmUuc2VsZmRlc2NyaWJpbmcuU2VsZkRlc2NyaWJpbmdYAQAAAC10chRTAABYHQAAAGhhbWNyZXN0LmNvcmUubWF0Y2hlci5NYXRjaGVychVTAAAoai1SAABqLlIAAFhPAAAAaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9jb3JlLyNoYW1jcmVzdC5jb3JlLm1hdGNoZXIuTWF0Y2hlclgBAAAALXRyFlMAAHV1dVUHZGxmaWxlc3IXUwAAY3NwaGlueC51dGlsCkZpbGVuYW1lVW5pcURpY3QKchhTAAApgXIZUwAAaAVdhVJyGlMAAGJVEHRvY3RyZWVfaW5jbHVkZXNyG1MAAH1yHFMAACho5V1yHVMAAChYGwAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaXIeUwAAWCMAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5jb21tb25fdXJuc3IfUwAAWCMAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5weXRob25fdXJuc3IgUwAAZWjDXXIhUwAAKFg2AAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fYXJ0aWZhY3RfYXBpX3BiMl9ncnBjciJTAABYMAAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwY3IjUwAAWDEAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9qb2JfYXBpX3BiMl9ncnBjciRTAABYNwAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3Byb3Zpc2lvbl9hcGlfcGIyX2dycGNyJVMAAFg0AAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfZ3JwY3ImUwAAWC4AAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuZW5kcG9pbnRzX3BiMl9ncnBjcidTAABYOAAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5zdGFuZGFyZF93aW5kb3dfZm5zX3BiMl9ncnBjcihTAABlahYBAABdcilTAAAoWBwAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlcipTAABYNAAAAGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdfcXVlcnlfcXVlcnlfdG9fdGFibGVfcGlwZWxpbmVyK1MAAFgbAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5cixTAABYLAAAAGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV9pb19yZWFkX3BpcGVsaW5lci1TAABYLgAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmVfd3JpdGVfaXRfcGlwZWxpbmVyLlMAAFggAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW1yL1MAAFgYAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2lvcjBTAABYGQAAAGFwYWNoZV9iZWFtLmlvLmdjcC5wdWJzdWJyMVMAAFglAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLnB1YnN1Yl9pdF9waXBlbGluZXIyUwAAZWo4AQAAXXIzUwAAKFgUAAAAYXBhY2hlX2JlYW0uaW8uZmxpbmtyNFMAAFgSAAAAYXBhY2hlX2JlYW0uaW8uZ2NwcjVTAABYFQAAAGFwYWNoZV9iZWFtLmlvLmF2cm9pb3I2UwAAWBwAAABhcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNlcjdTAABYHAAAAGFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNpbmtyOFMAAFgeAAAAYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc291cmNlcjlTAABYGQAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1yOlMAAFgbAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbWlvcjtTAABYGgAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zcjxTAABYHwAAAGFwYWNoZV9iZWFtLmlvLmhhZG9vcGZpbGVzeXN0ZW1yPVMAAFgVAAAAYXBhY2hlX2JlYW0uaW8uaW9iYXNlcj5TAABYHgAAAGFwYWNoZV9iZWFtLmlvLmxvY2FsZmlsZXN5c3RlbXI/UwAAWBgAAABhcGFjaGVfYmVhbS5pby5wYXJxdWV0aW9yQFMAAFgdAAAAYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnNyQVMAAFgjAAAAYXBhY2hlX2JlYW0uaW8ucmVzdHJpY3Rpb25fdHJhY2tlcnNyQlMAAFggAAAAYXBhY2hlX2JlYW0uaW8uc291cmNlX3Rlc3RfdXRpbHNyQ1MAAFgVAAAAYXBhY2hlX2JlYW0uaW8udGV4dGlvckRTAABYGQAAAGFwYWNoZV9iZWFtLmlvLnRmcmVjb3JkaW9yRVMAAFgUAAAAYXBhY2hlX2JlYW0uaW8udXRpbHNyRlMAAFgUAAAAYXBhY2hlX2JlYW0uaW8udmNmaW9yR1MAAGVo611ySFMAAChYHgAAAGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrc3JJUwAAWB4AAABhcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHNySlMAAFgmAAAAYXBhY2hlX2JlYW0udGVzdGluZy5waXBlbGluZV92ZXJpZmllcnNyS1MAAFgmAAAAYXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmVyTFMAAFghAAAAYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3BpcGVsaW5lck1TAABYHwAAAGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9zdHJlYW1yTlMAAFgeAAAAYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3V0aWxzck9TAABYGAAAAGFwYWNoZV9iZWFtLnRlc3RpbmcudXRpbHJQUwAAZWjsXXJRUwAAWDYAAABhcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHMubG9hZF90ZXN0X21ldHJpY3NfdXRpbHNyUlMAAGFowF1yU1MAAChYJAAAAGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc3JUUwAAWC4AAABhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yclVTAABYIgAAAGFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXJyVlMAAGVqGgEAAF1yV1MAAChYHQAAAGFwYWNoZV9iZWFtLnV0aWxzLmFubm90YXRpb25zclhTAABYGAAAAGFwYWNoZV9iZWFtLnV0aWxzLnBsdWdpbnJZUwAAWBsAAABhcGFjaGVfYmVhbS51dGlscy5wcm9jZXNzZXNyWlMAAFgaAAAAYXBhY2hlX2JlYW0udXRpbHMucHJvZmlsZXJyW1MAAFgdAAAAYXBhY2hlX2JlYW0udXRpbHMucHJvdG9fdXRpbHNyXFMAAFgXAAAAYXBhY2hlX2JlYW0udXRpbHMucmV0cnlyXVMAAFgbAAAAYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wcl5TAABYFgAAAGFwYWNoZV9iZWFtLnV0aWxzLnVybnNyX1MAAGVo7V1yYFMAAChYLQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZXJhUwAAWDcAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5zdHJlYW1pbmdfY3JlYXRlcmJTAABlaMRdcmNTAAAoWCAAAABhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9yc3JkUwAAWC8AAABhcGFjaGVfYmVhbS50eXBlaGludHMubmF0aXZlX3R5cGVfY29tcGF0aWJpbGl0eXJlUwAAWB0AAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlc3JmUwAAWCcAAABhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2VyZ1MAAFgfAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVjaGVja3JoUwAAWB8AAABhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzcmlTAABlaO9dcmpTAAAoWDcAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkuZGlzcGxheV9tYW5hZ2VycmtTAABYQgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5pbnRlcmFjdGl2ZV9waXBlbGluZV9ncmFwaHJsUwAAWDYAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkucGlwZWxpbmVfZ3JhcGhybVMAAFg/AAAAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LnBpcGVsaW5lX2dyYXBoX3JlbmRlcmVycm5TAABlaMddcm9TAABYOwAAAGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm1vZGVscy5uZXhtYXJrX21vZGVscnBTAABhakEBAABdcnFTAAAoWDIAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmFkYXB0aXZlX3Rocm90dGxlcnJyUwAAWCsAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmRhdGFzdG9yZWlvcnNTAABYLgAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZmFrZV9kYXRhc3RvcmVydFMAAFgmAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5oZWxwZXJydVMAAFguAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5xdWVyeV9zcGxpdHRlcnJ2UwAAWCQAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLnV0aWxyd1MAAGVqNgEAAF1yeFMAAChYKQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmJ1bmRsZV9mYWN0b3J5cnlTAABYIAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmNsb2NrcnpTAABYPQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmNvbnN1bWVyX3RyYWNraW5nX3BpcGVsaW5lX3Zpc2l0b3Jye1MAAFgpAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X21ldHJpY3NyfFMAAFgoAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X3J1bm5lcnJ9UwAAWCsAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfdXNlcnN0YXRlcn5TAABYLQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dHJ/UwAAWCMAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5leGVjdXRvcnKAUwAAWCwAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5oZWxwZXJfdHJhbnNmb3Jtc3KBUwAAWCwAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lcnKCUwAAWC0AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC50ZXN0X2RpcmVjdF9ydW5uZXJyg1MAAFguAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudHJhbnNmb3JtX2V2YWx1YXRvcnKEUwAAWB8AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC51dGlscoVTAABYLAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LndhdGVybWFya19tYW5hZ2VycoZTAABlakMBAABdcodTAABYIgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJuYWwubmFtZXNyiFMAAGFqGwEAAF1yiVMAAFgfAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MXKKUwAAYWjJXXKLUwAAWCYAAABhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFya3KMUwAAYWj7XXKNUwAAKFgYAAAAYXBhY2hlX2JlYW0uaW50ZXJuYWwuZ2Nwco5TAABYIAAAAGFwYWNoZV9iZWFtLmludGVybmFsLmh0dHBfY2xpZW50co9TAABYHAAAAGFwYWNoZV9iZWFtLmludGVybmFsLnBpY2tsZXJykFMAAFgZAAAAYXBhY2hlX2JlYW0uaW50ZXJuYWwudXRpbHKRUwAAZWjNXXKSUwAAKFggAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnNyk1MAAFgbAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlcpRTAABYJAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY3JlYXRlX3NvdXJjZXKVUwAAWB4AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXlyllMAAFghAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtcpdTAABYIQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuc2lkZWlucHV0c3KYUwAAWB8AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRpbWV1dGlscplTAABYHgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlcnKaUwAAWCAAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZXKbUwAAWBsAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWxynFMAAFgdAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3dynVMAAGVqKQEAAF1ynlMAAChYJwAAAGFwYWNoZV9iZWFtLnRvb2xzLmNvZGVyc19taWNyb2JlbmNobWFya3KfUwAAWDUAAABhcGFjaGVfYmVhbS50b29scy5kaXN0cmlidXRpb25fY291bnRlcl9taWNyb2JlbmNobWFya3KgUwAAWCoAAABhcGFjaGVfYmVhbS50b29scy5zaWRlaW5wdXRfbWljcm9iZW5jaG1hcmtyoVMAAFgXAAAAYXBhY2hlX2JlYW0udG9vbHMudXRpbHNyolMAAGVqKgEAAF1yo1MAAChYJwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheXKkUwAAWC0AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmNhY2hlX21hbmFnZXJypVMAAFgyAAAAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9ydW5uZXJyplMAAFgxAAAAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9hbmFseXplcnKnUwAAZWpOAQAAXXKoUwAAKFgcAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvd3KpUwAAWBoAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdHKqUwAAWB8AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlcqtTAABYHAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJuYWxyrFMAAFgXAAAAYXBhY2hlX2JlYW0ucnVubmVycy5qb2JyrVMAAFgkAAAAYXBhY2hlX2JlYW0ucnVubmVycy5waXBlbGluZV9jb250ZXh0cq5TAABYGgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVycq9TAABYHgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX2NvbW1vbnKwUwAAZWi7XXKxUwAAKFgSAAAAYXBhY2hlX2JlYW0uY29kZXJzcrJTAABYFAAAAGFwYWNoZV9iZWFtLmludGVybmFscrNTAABYDgAAAGFwYWNoZV9iZWFtLmlvcrRTAABYEwAAAGFwYWNoZV9iZWFtLm1ldHJpY3NytVMAAFgTAAAAYXBhY2hlX2JlYW0ub3B0aW9uc3K2UwAAWBcAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eXK3UwAAWBMAAABhcGFjaGVfYmVhbS5ydW5uZXJzcrhTAABYEwAAAGFwYWNoZV9iZWFtLnRlc3RpbmdyuVMAAFgRAAAAYXBhY2hlX2JlYW0udG9vbHNyulMAAFgWAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtc3K7UwAAWBUAAABhcGFjaGVfYmVhbS50eXBlaGludHNyvFMAAFgRAAAAYXBhY2hlX2JlYW0udXRpbHNyvVMAAFgRAAAAYXBhY2hlX2JlYW0uZXJyb3JyvlMAAFgUAAAAYXBhY2hlX2JlYW0ucGlwZWxpbmVyv1MAAFgSAAAAYXBhY2hlX2JlYW0ucHZhbHVlcsBTAABYEwAAAGFwYWNoZV9iZWFtLnZlcnNpb25ywVMAAGVqUQEAAF1ywlMAAChYJgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvcsNTAABYLQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfbWV0cmljc3LEUwAAWCwAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lcnLFUwAAWDEAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LnB0cmFuc2Zvcm1fb3ZlcnJpZGVzcsZTAABYMQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cudGVzdF9kYXRhZmxvd19ydW5uZXJyx1MAAGVo3V1yyFMAAChYGQAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnNyyVMAAFgdAAAAYXBhY2hlX2JlYW0uY29kZXJzLm9ic2VydmFibGVyylMAAFgeAAAAYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtcstTAABYHQAAAGFwYWNoZV9iZWFtLmNvZGVycy50eXBlY29kZXJzcsxTAABlaN5dcs1TAAAoWB0AAABhcGFjaGVfYmVhbS5pbnRlcm5hbC5nY3AuYXV0aHLOUwAAWCMAAABhcGFjaGVfYmVhbS5pbnRlcm5hbC5nY3AuanNvbl92YWx1ZXLPUwAAZWjfXXLQUwAAWDMAAABhcGFjaGVfYmVhbS5pby5mbGluay5mbGlua19zdHJlYW1pbmdfaW1wdWxzZV9zb3VyY2Vy0VMAAGFqMwEAAF1y0lMAAChYGQAAAGFwYWNoZV9iZWFtLm1ldHJpY3MuY2VsbHNy01MAAFgaAAAAYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWNy1FMAAFgeAAAAYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWNiYXNlctVTAABYJAAAAGFwYWNoZV9iZWFtLm1ldHJpY3MubW9uaXRvcmluZ19pbmZvc3LWUwAAZWoMAQAAXXLXUwAAKFg1AAAAYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsucXVlcmllcy5xdWVyeTBy2FMAAFg1AAAAYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsucXVlcmllcy5xdWVyeTFy2VMAAFg1AAAAYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsucXVlcmllcy5xdWVyeTJy2lMAAGVo4l1y21MAAChYHwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuam9iLm1hbmFnZXJy3FMAAFgdAAAAYXBhY2hlX2JlYW0ucnVubmVycy5qb2IudXRpbHNy3VMAAGVqEQEAAF1y3lMAAChYLQAAAGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm1vZGVsc3LfUwAAWC4AAABhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5xdWVyaWVzcuBTAABYNwAAAGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm5leG1hcmtfbGF1bmNoZXJy4VMAAFgzAAAAYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsubmV4bWFya191dGlscuJTAABldVUOdG9jX2ZpZ251bWJlcnNy41MAAH1VCGluY2x1ZGVkcuRTAABoBV2FUnLlUwAAVRVpbnRlcnNwaGlueF9pbnZlbnRvcnly5lMAAH1y51MAAChqzgEAAH1y6FMAAChq1AEAAGrVAQAAatgBAABq2QEAAGoSAgAAahMCAABq4AEAAGrhAQAAauIBAABq4wEAAGoEAgAAagUCAABq6AEAAGrpAQAAauwBAABq7QEAAGoUAgAAahUCAABqLAIAAGotAgAAavYBAABq9wEAAGr4AQAAavkBAABq/AEAAGr9AQAAajQCAABqNQIAAGoGAgAAagcCAABqXAIAAGpdAgAAakoCAABqSwIAAGooAgAAaikCAABqLgIAAGovAgAAahgCAABqGQIAAGoaAgAAahsCAABqHgIAAGofAgAAaiACAABqIQIAAGoMAgAAag0CAABqFgIAAGoXAgAAauoBAABq6wEAAGraAQAAatsBAABqNgIAAGo3AgAAajwCAABqPQIAAGrkAQAAauUBAABqQgIAAGpDAgAAakQCAABqRQIAAGpQAgAAalECAABqSAIAAGpJAgAAalICAABqUwIAAGpMAgAAak0CAABqVgIAAGpXAgAAalgCAABqWQIAAGoqAgAAaisCAABqXgIAAGpfAgAAaiYCAABqJwIAAGpkAgAAamUCAABqbgIAAGpvAgAAatABAABq0QEAAGrSAQAAatMBAABq7gEAAGrvAQAAatYBAABq1wEAAGrcAQAAat0BAABq3gEAAGrfAQAAauYBAABq5wEAAGryAQAAavMBAABqPgIAAGo/AgAAavoBAABq+wEAAGp0AgAAanUCAABq/gEAAGr/AQAAamICAABqYwIAAGowAgAAajECAABqMgIAAGozAgAAag4CAABqDwIAAGocAgAAah0CAABqYAIAAGphAgAAamgCAABqaQIAAGoiAgAAaiMCAABqAAIAAGoBAgAAagICAABqAwIAAGo4AgAAajkCAABqbAIAAGptAgAAaiQCAABqJQIAAGpAAgAAakECAABqOgIAAGo7AgAAagoCAABqCwIAAGpOAgAAak8CAABqRgIAAGpHAgAAavQBAABq9QEAAGpUAgAAalUCAABqWgIAAGpbAgAAavABAABq8QEAAGoIAgAAagkCAABqZgIAAGpnAgAAamoCAABqawIAAGoQAgAAahECAABqcgIAAGpzAgAAanACAABqcQIAAHVqZgEAAH1y6VMAAChqaAEAAGprAQAAamwBAABqbQEAAGpuAQAAam8BAABqcAEAAGpxAQAAanIBAABqcwEAAGp0AQAAanUBAABqdgEAAGp3AQAAangBAABqeQEAAGp6AQAAansBAABqfgEAAGp/AQAAaoABAABqgQEAAGqCAQAAaoMBAABqhAEAAGqFAQAAaoYBAABqhwEAAGqIAQAAaokBAABqxgEAAGrHAQAAaowBAABqjQEAAGqOAQAAao8BAABqkAEAAGqRAQAAapQBAABqlQEAAGqWAQAAapcBAABqmAEAAGqZAQAAapoBAABqmwEAAGqcAQAAap0BAABqngEAAGqfAQAAaqABAABqoQEAAGqiAQAAaqMBAABqpAEAAGqlAQAAarIBAABqswEAAGqoAQAAaqkBAABqqgEAAGqrAQAAaqwBAABqrQEAAGquAQAAaq8BAABqsAEAAGqxAQAAaqYBAABqpwEAAGq0AQAAarUBAABqtgEAAGq3AQAAargBAABquQEAAGrAAQAAasEBAABqkgEAAGqTAQAAarwBAABqvQEAAGq+AQAAar8BAABqfAEAAGp9AQAAaroBAABquwEAAGrCAQAAasMBAABqxAEAAGrFAQAAaooBAABqiwEAAGrIAQAAaskBAABqygEAAGrLAQAAaswBAABqzQEAAHVqlAIAAH1y6lMAAChq+gUAAGr7BQAAamgGAABqaQYAAGqYAgAAapkCAABqmgIAAGqbAgAAapwCAABqnQIAAGqeAgAAap8CAABq/AUAAGr9BQAAanoGAABqewYAAGqiAgAAaqMCAABqpAIAAGqlAgAAaqYCAABqpwIAAGqoAgAAaqkCAABq/gUAAGr/BQAAaqoCAABqqwIAAGqsAgAAaq0CAABqAAYAAGoBBgAAarACAABqsQIAAGqyAgAAarMCAABqtAIAAGq1AgAAaloFAABqWwUAAGq4AgAAarkCAABqugIAAGq7AgAAarwCAABqvQIAAGq+AgAAar8CAABqwAIAAGrBAgAAasICAABqwwIAAGrEAgAAasUCAABqxgIAAGrHAgAAasgCAABqyQIAAGrKAgAAassCAABqzAIAAGrNAgAAas4CAABqzwIAAGrQAgAAatECAABq0gIAAGrTAgAAal4FAABqXwUAAGrWAgAAatcCAABq2AIAAGrZAgAAaggGAABqCQYAAGreAgAAat8CAABq4AIAAGrhAgAAauICAABq4wIAAGrkAgAAauUCAABq6AIAAGrpAgAAauoCAABq6wIAAGrsAgAAau0CAABq7gIAAGrvAgAAavACAABq8QIAAGryAgAAavMCAABq9AIAAGr1AgAAavYCAABq9wIAAGqiBAAAaqMEAABq+gIAAGr7AgAAavwCAABq/QIAAGr+AgAAav8CAABqAAMAAGoBAwAAagIDAABqAwMAAGoEAwAAagUDAABqBgMAAGoHAwAAaggDAABqCQMAAGoKAwAAagsDAABqDAMAAGoNAwAAavoDAABq+wMAAGr8AwAAav0DAABqFAMAAGoVAwAAahYDAABqFwMAAGoYAwAAahkDAABqHAMAAGodAwAAaqQEAABqpQQAAGogAwAAaiEDAABqWgMAAGpbAwAAaiQDAABqJQMAAGomAwAAaicDAABqKAMAAGopAwAAaioDAABqKwMAAGosAwAAai0DAABqLgMAAGovAwAAajADAABqMQMAAGoyAwAAajMDAABqNAMAAGo1AwAAajYDAABqNwMAAGo4AwAAajkDAABqOgMAAGo7AwAAajwDAABqPQMAAGo+AwAAaj8DAABqQAMAAGpBAwAAakIDAABqQwMAAGpEAwAAakUDAABqRgMAAGpHAwAAakgDAABqSQMAAGpKAwAAaksDAABqXgMAAGpfAwAAak4DAABqTwMAAGpSAwAAalMDAABqVAMAAGpVAwAAalYDAABqVwMAAGpYAwAAalkDAABqIgMAAGojAwAAalwDAABqXQMAAGpMAwAAak0DAABqYAMAAGphAwAAamIDAABqYwMAAGpkAwAAamUDAABqZgMAAGpnAwAAamgDAABqaQMAAGpqAwAAamsDAABqbAMAAGptAwAAanADAABqcQMAAGpyAwAAanMDAABqdAMAAGp1AwAAanYDAABqdwMAAGp4AwAAankDAABqegMAAGp7AwAAarQEAABqtQQAAGp+AwAAan8DAABqgAMAAGqBAwAAaoIDAABqgwMAAGqEAwAAaoUDAABqhgMAAGqHAwAAaogDAABqiQMAAGqKAwAAaosDAABqjAMAAGqNAwAAao4DAABqjwMAAGqQAwAAapEDAABqkgMAAGqTAwAAapQDAABqlQMAAGqWAwAAapcDAABqmAMAAGqZAwAAapoDAABqmwMAAGqcAwAAap0DAABqngMAAGqfAwAAaqADAABqoQMAAGqiAwAAaqMDAABqpAMAAGqlAwAAaqYDAABqpwMAAGqoAwAAaqkDAABqqgMAAGqrAwAAaqwDAABqrQMAAGquAwAAaq8DAABqsAMAAGqxAwAAarIDAABqswMAAGq0AwAAarUDAABqtgMAAGq3AwAAargDAABquQMAAGq6AwAAarsDAABqvAMAAGq9AwAAan4FAABqfwUAAGrCBAAAasMEAABqwAMAAGrBAwAAasIDAABqwwMAAGrEAwAAasUDAABqxgMAAGrHAwAAasgDAABqyQMAAGrKAwAAassDAABqzAMAAGrNAwAAas4DAABqzwMAAGrQAwAAatEDAABq0gMAAGrTAwAAatQDAABq1QMAAGrWAwAAatcDAABqgAUAAGqBBQAAao4FAABqjwUAAGrcAwAAat0DAABq3gMAAGrfAwAAauADAABq4QMAAGriAwAAauMDAABq5AMAAGrlAwAAauYDAABq5wMAAGroAwAAaukDAABq6gMAAGrrAwAAauwDAABq7QMAAGruAwAAau8DAABq8AMAAGrxAwAAavIDAABq8wMAAGr0AwAAavUDAABq9gMAAGr3AwAAavgDAABq+QMAAGoOAwAAag8DAABqEgMAAGoTAwAAav4DAABq/wMAAGoCBAAAagMEAABqBAQAAGoFBAAAagYEAABqBwQAAGoIBAAAagkEAABqCgQAAGoLBAAAagwEAABqDQQAAGoOBAAAag8EAABqEAQAAGoRBAAAahIEAABqEwQAAGoUBAAAahUEAABqFgQAAGoXBAAAatoCAABq2wIAAGoaBAAAahsEAABqHAQAAGodBAAAah4EAABqHwQAAGogBAAAaiEEAABqfAUAAGp9BQAAaiIEAABqIwQAAGokBAAAaiUEAABqJgQAAGonBAAAaigEAABqKQQAAGoqBAAAaisEAABqLAQAAGotBAAAajAEAABqMQQAAGoyBAAAajMEAABqNAQAAGo1BAAAajYEAABqNwQAAGo4BAAAajkEAABqOgQAAGo7BAAAajwEAABqPQQAAGo+BAAAaj8EAABqQAQAAGpBBAAAakIEAABqQwQAAGpEBAAAakUEAABq2gMAAGrbAwAAakgEAABqSQQAAGpKBAAAaksEAABqTAQAAGpNBAAAak4EAABqTwQAAGpQBAAAalEEAABqUgQAAGpTBAAAalQEAABqVQQAAGpWBAAAalcEAABqWAQAAGpZBAAAaloEAABqWwQAAGpcBAAAal0EAABqXgQAAGpfBAAAamAEAABqYQQAAGpiBAAAamMEAABqZAQAAGplBAAAamYEAABqZwQAAGpoBAAAamkEAABqagQAAGprBAAAamwEAABqbQQAAGpuBAAAam8EAABqcAQAAGpxBAAAanIEAABqcwQAAGp0BAAAanUEAABqdgQAAGp3BAAAangEAABqeQQAAGp6BAAAansEAABqfAQAAGp9BAAAan4EAABqfwQAAGqABAAAaoEEAABqggQAAGqDBAAAaoQEAABqhQQAAGqGBAAAaocEAABqiAQAAGqJBAAAaooEAABqiwQAAGqMBAAAao0EAABqcgUAAGpzBQAAao4EAABqjwQAAGqQBAAAapEEAABqkgQAAGqTBAAAapQEAABqlQQAAGqWBAAAapcEAABqmAQAAGqZBAAAapoEAABqmwQAAGqcBAAAap0EAABqngQAAGqfBAAAaqAEAABqoQQAAGr4AgAAavkCAABqHgMAAGofAwAAaqYEAABqpwQAAGqoBAAAaqkEAABqqgQAAGqrBAAAaqwEAABqrQQAAGquBAAAaq8EAABqsAQAAGqxBAAAarIEAABqswQAAGp8AwAAan0DAABqtgQAAGq3BAAAanAGAABqcQYAAGq6BAAAarsEAABqvAQAAGq9BAAAaqQFAABqpQUAAGrABAAAasEEAABqRgQAAGpHBAAAasQEAABqxQQAAGrGBAAAascEAABqyAQAAGrJBAAAasoEAABqywQAAGrMBAAAas0EAABqzgQAAGrPBAAAatAEAABq0QQAAGrSBAAAatMEAABq1AQAAGrVBAAAatYEAABq1wQAAGrYBAAAatkEAABq2gQAAGrbBAAAatwEAABq3QQAAGreBAAAat8EAABq4AQAAGrhBAAAauIEAABq4wQAAGrkBAAAauUEAABq5gQAAGrnBAAAaugEAABq6QQAAGrqBAAAausEAABq7AQAAGrtBAAAau4EAABq7wQAAGrwBAAAavEEAABq8gQAAGrzBAAAavQEAABq9QQAAGr2BAAAavcEAABq+AQAAGr5BAAAavoEAABq+wQAAGr8BAAAav0EAABq/gQAAGr/BAAAagIFAABqAwUAAGoEBQAAagUFAABqBgUAAGoHBQAAaggFAABqCQUAAGoKBQAAagsFAABqDAUAAGoNBQAAag4FAABqDwUAAGoQBQAAahEFAABqEgUAAGoTBQAAahQFAABqFQUAAGoWBQAAahcFAABqGAUAAGoZBQAAahoFAABqGwUAAGocBQAAah0FAABqHgUAAGofBQAAaiAFAABqIQUAAGoiBQAAaiMFAABqJAUAAGolBQAAaiYFAABqJwUAAGoEBgAAagUGAABqKAUAAGopBQAAajgGAABqOQYAAGoqBQAAaisFAABqLgUAAGovBQAAajAFAABqMQUAAGoyBQAAajMFAABqAAQAAGoBBAAAajYFAABqNwUAAGo4BQAAajkFAABqPAUAAGo9BQAAaj4FAABqPwUAAGpABQAAakEFAABqQgUAAGpDBQAAakQFAABqRQUAAGpGBQAAakcFAABqSAUAAGpJBQAAakoFAABqSwUAAGpMBQAAak0FAABqTgUAAGpPBQAAalAFAABqUQUAAGpSBQAAalMFAABqVAUAAGpVBQAAalYFAABqVwUAAGpYBQAAalkFAABqtgIAAGq3AgAAalwFAABqXQUAAGrUAgAAatUCAABqYAUAAGphBQAAamIFAABqYwUAAGpkBQAAamUFAABqZgUAAGpnBQAAaiwFAABqLQUAAGpqBQAAamsFAABqbAUAAGptBQAAam4FAABqbwUAAGpwBQAAanEFAABqGgMAAGobAwAAanQFAABqdQUAAGp2BQAAancFAABqeAUAAGp5BQAAanoFAABqewUAAGouBAAAai8EAABqvgMAAGq/AwAAahADAABqEQMAAGqCBQAAaoMFAABqGAQAAGoZBAAAaoQFAABqhQUAAGqGBQAAaocFAABqiAUAAGqJBQAAaooFAABqiwUAAGqMBQAAao0FAABq5gIAAGrnAgAAapAFAABqkQUAAGqSBQAAapMFAABqlAUAAGqVBQAAapYFAABqlwUAAGqYBQAAapkFAABqmgUAAGqbBQAAapwFAABqnQUAAGqeBQAAap8FAABqoAUAAGqhBQAAaqIFAABqowUAAGq+BAAAar8EAABqpgUAAGqnBQAAaqgFAABqqQUAAGqqBQAAaqsFAABqrAUAAGqtBQAAaq4FAABqrwUAAGqwBQAAarEFAABqsgUAAGqzBQAAarQFAABqtQUAAGq2BQAAarcFAABquAUAAGq5BQAAapAGAABqkQYAAGq8BQAAar0FAABqvgUAAGq/BQAAasAFAABqwQUAAGrCBQAAasMFAABqxAUAAGrFBQAAasYFAABqxwUAAGrIBQAAaskFAABqygUAAGrLBQAAaswFAABqzQUAAGrOBQAAas8FAABq0AUAAGrRBQAAatIFAABq0wUAAGrUBQAAatUFAABq1gUAAGrXBQAAatgFAABq2QUAAGraBQAAatsFAABq3AUAAGrdBQAAat4FAABq3wUAAGrgBQAAauEFAABq4gUAAGrjBQAAauQFAABq5QUAAGrmBQAAaucFAABq6AUAAGrpBQAAauoFAABq6wUAAGrsBQAAau0FAABq7gUAAGrvBQAAavAFAABq8QUAAGryBQAAavMFAABq9AUAAGr1BQAAavYFAABq9wUAAGr4BQAAavkFAABqlgIAAGqXAgAAaqACAABqoQIAAGo6BQAAajsFAABqrgIAAGqvAgAAagIGAABqAwYAAGoABQAAagEFAABqBgYAAGoHBgAAatwCAABq3QIAAGoKBgAAagsGAABqDAYAAGoNBgAAag4GAABqDwYAAGoQBgAAahEGAABqEgYAAGoTBgAAahQGAABqFQYAAGoWBgAAahcGAABqGAYAAGoZBgAAajQFAABqNQUAAGoaBgAAahsGAABqmgYAAGqbBgAAah4GAABqHwYAAGogBgAAaiEGAABqIgYAAGojBgAAaiQGAABqJQYAAGqABgAAaoEGAABqJgYAAGonBgAAaigGAABqKQYAAGoqBgAAaisGAABqLAYAAGotBgAAai4GAABqLwYAAGowBgAAajEGAABqMgYAAGozBgAAajQGAABqNQYAAGo2BgAAajcGAABqaAUAAGppBQAAajoGAABqOwYAAGo8BgAAaj0GAABqPgYAAGo/BgAAakAGAABqQQYAAGpCBgAAakMGAABqRAYAAGpFBgAAakYGAABqRwYAAGpIBgAAakkGAABqSgYAAGpLBgAAakwGAABqTQYAAGpOBgAAak8GAABqUAYAAGpRBgAAalIGAABqUwYAAGpUBgAAalUGAABqVgYAAGpXBgAAalgGAABqWQYAAGpaBgAAalsGAABqXAYAAGpdBgAAal4GAABqXwYAAGpgBgAAamEGAABqYgYAAGpjBgAAamQGAABqZQYAAGpmBgAAamcGAABq2AMAAGrZAwAAamoGAABqawYAAGpsBgAAam0GAABqbgYAAGpvBgAAargEAABquQQAAGpyBgAAanMGAABqdAYAAGp1BgAAanYGAABqdwYAAGp4BgAAankGAABqUAMAAGpRAwAAanwGAABqfQYAAGp+BgAAan8GAABqbgMAAGpvAwAAaoIGAABqgwYAAGqEBgAAaoUGAABqhgYAAGqHBgAAaogGAABqiQYAAGqKBgAAaosGAABqjAYAAGqNBgAAao4GAABqjwYAAGq6BQAAarsFAABqkgYAAGqTBgAAapQGAABqlQYAAGqWBgAAapcGAABqmAYAAGqZBgAAahwGAABqHQYAAGqcBgAAap0GAABqngYAAGqfBgAAaqAGAABqoQYAAGqiBgAAaqMGAABqpAYAAGqlBgAAaqYGAABqpwYAAGqoBgAAaqkGAABqqgYAAGqrBgAAaqwGAABqrQYAAGquBgAAaq8GAABqsAYAAGqxBgAAarIGAABqswYAAGq0BgAAarUGAAB1arYGAAB9cutTAAAoargGAABquQYAAGrSBgAAatMGAABqvgYAAGq/BgAAasAGAABqwQYAAGrCBgAAasMGAABqxAYAAGrFBgAAasgGAABqyQYAAGrGBgAAascGAABqugYAAGq7BgAAasoGAABqywYAAGrMBgAAas0GAABqzgYAAGrPBgAAatAGAABq0QYAAGq8BgAAar0GAAB1aocyAAB9cuxTAAAoaokyAABqijIAAGrJMgAAasoyAABqizIAAGqMMgAAao0yAABqjjIAAGq1MgAAarYyAABqkTIAAGqSMgAAapMyAABqlDIAAGqVMgAAapYyAABqlzIAAGqYMgAAapkyAABqmjIAAGrBMgAAasIyAABqnTIAAGqeMgAAap8yAABqoDIAAGqjMgAAaqQyAABqpTIAAGqmMgAAaqcyAABqqDIAAGqpMgAAaqoyAABqqzIAAGqsMgAAatkyAABq2jIAAGqtMgAAaq4yAABqxTIAAGrGMgAAarMyAABqtDIAAGqPMgAAapAyAABqtzIAAGq4MgAAarkyAABqujIAAGq7MgAAarwyAABqvTIAAGq+MgAAaqEyAABqojIAAGqbMgAAapwyAABqwzIAAGrEMgAAaq8yAABqsDIAAGrHMgAAasgyAABqsTIAAGqyMgAAat8yAABq4DIAAGrLMgAAaswyAABqzTIAAGrOMgAAatEyAABq0jIAAGrTMgAAatQyAABq1TIAAGrWMgAAatcyAABq2DIAAGq/MgAAasAyAABq2zIAAGrcMgAAat0yAABq3jIAAGrPMgAAatAyAABq4TIAAGriMgAAdWrAEAAAfXLtUwAAKGrCEAAAasMQAABqxBAAAGrFEAAAasYQAABqxxAAAGrIEAAAaskQAABqyhAAAGrLEAAAaswQAABqzRAAAGrOEAAAas8QAABq0BAAAGrREAAAavYRAABq9xEAAGrUEAAAatUQAABq1hAAAGrXEAAAanoSAABqexIAAGrYEAAAatkQAABq2hAAAGrbEAAAatwQAABq3RAAAGrgEAAAauEQAABqphEAAGqnEQAAauQQAABq5RAAAGrmEAAAaucQAABq6BAAAGrpEAAAauoQAABq6xAAAGrsEAAAau0QAABq7hAAAGrvEAAAavAQAABq8RAAAGryEAAAavMQAABq9BAAAGr1EAAAavYQAABq9xAAAGr6EAAAavsQAABq/BAAAGr9EAAAav4QAABq/xAAAGoAEQAAagERAABqRBIAAGpFEgAAagIRAABqAxEAAGoEEQAAagURAABq3hAAAGrfEAAAaggRAABqCREAAGoKEQAAagsRAABqDBEAAGoNEQAAajASAABqMRIAAGoOEQAAag8RAABqEBEAAGoREQAAahIRAABqExEAAGpYEgAAalkSAABqFBEAAGoVEQAAahgRAABqGREAAGoaEQAAahsRAABqHBEAAGodEQAAah4RAABqHxEAAGogEQAAaiERAABqIhEAAGojEQAAaiQRAABqJREAAGomEQAAaicRAABqKBEAAGopEQAAaioRAABqKxEAAGosEQAAai0RAABqThIAAGpPEgAAai4RAABqLxEAAGpQEQAAalERAABqMhEAAGozEQAAajYRAABqNxEAAGosEgAAai0SAABqOBEAAGo5EQAAajoRAABqOxEAAGo8EQAAaj0RAABqPhEAAGo/EQAAakARAABqQREAAGpCEQAAakMRAABqRBEAAGpFEQAAakYRAABqRxEAAGpIEQAAakkRAABqShEAAGpLEQAAakwRAABqTREAAGpOEQAAak8RAABqUhEAAGpTEQAAalQRAABqVREAAGpWEQAAalcRAABqWBEAAGpZEQAAaloRAABqWxEAAGpcEQAAal0RAABqXhEAAGpfEQAAamARAABqYREAAGpiEQAAamMRAABqZBEAAGplEQAAamYRAABqZxEAAGpoEQAAamkRAABqahEAAGprEQAAam4RAABqbxEAAGpwEQAAanERAABqchEAAGpzEQAAanQRAABqdREAAGp2EQAAancRAABqeBEAAGp5EQAAanoRAABqexEAAGp8EQAAan0RAABq8BEAAGrxEQAAaoARAABqgREAAGqCEQAAaoMRAABqhBEAAGqFEQAAaoYRAABqhxEAAGqIEQAAaokRAABqihEAAGqLEQAAaowRAABqjREAAGqOEQAAao8RAABqkBEAAGqREQAAapIRAABqkxEAAGqUEQAAapURAABqlhEAAGqXEQAAapgRAABqmREAAGqaEQAAapsRAABqnBEAAGqdEQAAap4RAABqnxEAAGqgEQAAaqERAABqohEAAGqjEQAAaqQRAABqpREAAGriEAAAauMQAABqqhEAAGqrEQAAaqwRAABqrREAAGquEQAAaq8RAABqsBEAAGqxEQAAarIRAABqsxEAAGq0EQAAarURAABqthEAAGq3EQAAargRAABquREAAGq6EQAAarsRAABqvBEAAGq9EQAAar4RAABqvxEAAGrQEQAAatERAABqwhEAAGrDEQAAasQRAABqxREAAGogEgAAaiESAABqyBEAAGrJEQAAasoRAABqyxEAAGrMEQAAas0RAABqzhEAAGrPEQAAav4RAABq/xEAAGrAEQAAasERAABq0hEAAGrTEQAAahYSAABqFxIAAGrUEQAAatURAABq1hEAAGrXEQAAatoRAABq2xEAAGrcEQAAat0RAABq3hEAAGrfEQAAaiQSAABqJRIAAGrgEQAAauERAABq4hEAAGrjEQAAauQRAABq5REAAGrmEQAAaucRAABqfhIAAGp/EgAAaugRAABq6REAAGrqEQAAausRAABq7BEAAGrtEQAAau4RAABq7xEAAGrYEQAAatkRAABq9BEAAGr1EQAAatIQAABq0xAAAGr4EQAAavkRAABq+hEAAGr7EQAAavwRAABq/REAAGoGEQAAagcRAABqABIAAGoBEgAAagISAABqAxIAAGoEEgAAagUSAABqBhIAAGoHEgAAaggSAABqCRIAAGoMEgAAag0SAABqDhIAAGoPEgAAahASAABqERIAAGoSEgAAahMSAABqFBIAAGoVEgAAahwSAABqHRIAAGowEQAAajERAABqGBIAAGoZEgAAahoSAABqGxIAAGo0EQAAajURAABqHhIAAGofEgAAasYRAABqxxEAAGoiEgAAaiMSAABqbBEAAGptEQAAaiYSAABqJxIAAGoqEgAAaisSAABq8hEAAGrzEQAAai4SAABqLxIAAGooEgAAaikSAABqMhIAAGozEgAAajQSAABqNRIAAGoWEQAAahcRAABqOBIAAGo5EgAAajoSAABqOxIAAGo8EgAAaj0SAABqPhIAAGo/EgAAakASAABqQRIAAGpCEgAAakMSAABqChIAAGoLEgAAakYSAABqRxIAAGpIEgAAakkSAABqShIAAGpLEgAAakwSAABqTRIAAGo2EgAAajcSAABqUBIAAGpREgAAalISAABqUxIAAGpUEgAAalUSAABqVhIAAGpXEgAAan4RAABqfxEAAGpaEgAAalsSAABqXBIAAGpdEgAAal4SAABqXxIAAGpgEgAAamESAABqYhIAAGpjEgAAamQSAABqZRIAAGpmEgAAamcSAABqaBIAAGppEgAAamoSAABqaxIAAGpsEgAAam0SAABqbhIAAGpvEgAAanASAABqcRIAAGpyEgAAanMSAABqgBIAAGqBEgAAanYSAABqdxIAAGp4EgAAankSAABqqBEAAGqpEQAAanwSAABqfRIAAGr4EAAAavkQAABqdBIAAGp1EgAAaoISAABqgxIAAHVqKlIAAH1y7lMAAChqLFIAAGovUgAAasMaAABqxBoAAGqfHgAAaqAeAABqRRMAAGpGEwAAakcTAABqSBMAAGrFGgAAasYaAABqxxoAAGrIGgAAajcdAABqOB0AAGrJGgAAasoaAABqyxoAAGrMGgAAakkTAABqShMAAGoBHAAAagIcAABq7yAAAGrwIAAAaksTAABqTBMAAGrPGgAAatAaAABq0RoAAGrSGgAAatcbAABq2BsAAGqrIQAAaqwhAABqTRMAAGpOEwAAatMaAABq1BoAAGrVGgAAatYaAABqIyAAAGokIAAAatcaAABq2BoAAGo7HQAAajwdAABqYlIAAGpjUgAAatsaAABq3BoAAGoFHAAAagYcAABq3xoAAGrgGgAAatchAABq2CEAAGpPEwAAalATAABq4RoAAGriGgAAah8UAABqIBQAAGrlGgAAauYaAABqtx8AAGq4HwAAaucaAABq6BoAAGpREwAAalITAABqUxMAAGpUEwAAalUTAABqVhMAAGotIQAAai4hAABqVxMAAGpYEwAAau8aAABq8BoAAGpKUgAAaktSAABq8xoAAGr0GgAAavUaAABq9hoAAGr3GgAAavgaAABqWxMAAGpcEwAAan8UAABqgBQAAGrbHwAAatwfAABq+xoAAGr8GgAAal0TAABqXhMAAGpfEwAAamATAABqYRMAAGpiEwAAamMTAABqZBMAAGplEwAAamYTAABqZxMAAGpoEwAAav8aAABqABsAAGppEwAAamoTAABqARsAAGoCGwAAagMbAABqBBsAAGoFGwAAagYbAABqBxsAAGoIGwAAagkbAABqChsAAGrHFAAAasgUAABqDRsAAGoOGwAAag8bAABqEBsAAGprEwAAamwTAABqbRMAAGpuEwAAahMbAABqFBsAAGoVGwAAahYbAABqFxsAAGoYGwAAaoMaAABqhBoAAGqDHgAAaoQeAABqEyEAAGoUIQAAam8TAABqcBMAAGoZGwAAahobAABqcRMAAGpyEwAAakUdAABqRh0AAGp1EwAAanYTAABqLRwAAGouHAAAancTAABqeBMAAGp5EwAAanoTAABqHRsAAGoeGwAAansTAABqfBMAAGofGwAAaiAbAABqIRsAAGoiGwAAan0TAABqfhMAAGolGwAAaiYbAABqfxMAAGqAEwAAaoETAABqghMAAGqDEwAAaoQTAABqhRMAAGqGEwAAaikbAABqKhsAAGqHEwAAaogTAABqWyIAAGpcIgAAaucfAABq6B8AAGqLEwAAaowTAABqiRUAAGqKFQAAai0bAABqLhsAAGovGwAAajAbAABqRx0AAGpIHQAAaqseAABqrB4AAGqNEwAAao4TAABqjxMAAGqQEwAAapETAABqkhMAAGoPIAAAahAgAABqVxgAAGpYGAAAanhSAABqeVIAAGodIQAAah4hAABqlxMAAGqYEwAAajkbAABqOhsAAGrtGgAAau4aAABqmRMAAGqaEwAAatkgAABq2iAAAGqdEwAAap4TAABqnxMAAGqgEwAAaqETAABqohMAAGoBIAAAagIgAABqQRsAAGpCGwAAakMbAABqRBsAAGqjEwAAaqQTAABqpRMAAGqmEwAAaqcTAABqqBMAAGqpEwAAaqoTAABqqxMAAGqsEwAAakcbAABqSBsAAGpJGwAAakobAABqrRMAAGquEwAAakxSAABqTVIAAGpRFgAAalIWAABqrxMAAGqwEwAAarETAABqshMAAGpNGwAAak4bAABqUlIAAGpTUgAAamcWAABqaBYAAGqzEwAAarQTAABqUxsAAGpUGwAAarUTAABqthMAAGq3EwAAargTAABqVRsAAGpWGwAAalcbAABqWBsAAGrZHQAAatodAABquRMAAGq6EwAAarsTAABqvBMAAGrzHwAAavQfAABqWRsAAGpaGwAAaichAABqKCEAAGq/EwAAasATAABqXRsAAGpeGwAAapsTAABqnBMAAGpfGwAAamAbAABqwxMAAGrEEwAAamEbAABqYhsAAGq/HAAAasAcAABqxRMAAGrGEwAAao0cAABqjhwAAGrHEwAAasgTAABqZRsAAGpmGwAAaskTAABqyhMAAGrLEwAAaswTAABqzRMAAGrOEwAAaikZAABqKhkAAGrPEwAAatATAABqfRcAAGp+FwAAatETAABq0hMAAGptGwAAam4bAABqbxsAAGpwGwAAanEbAABqchsAAGqjHQAAaqQdAABq0xMAAGrUEwAAanMbAABqdBsAAGpNFwAAak4XAABq1RMAAGrWEwAAatcTAABq2BMAAGrZEwAAatoTAABq2xMAAGrcEwAAankbAABqehsAAGrdEwAAat4TAABqexsAAGp8GwAAat8TAABq4BMAAGp/GwAAaoAbAABq4RMAAGriEwAAajEhAABqMiEAAGqBGwAAaoIbAABq4xMAAGrkEwAAauUTAABq5hMAAGrZGgAAatoaAABqhxsAAGqIGwAAatUVAABq1hUAAGqJGwAAaoobAABq6RMAAGrqEwAAausTAABq7BMAAGrtEwAAau4TAABqixsAAGqMGwAAau8TAABq8BMAAGqNGwAAao4bAABqux4AAGq8HgAAavMTAABq9BMAAGr1EwAAavYTAABq9xMAAGr4EwAAavkTAABq+hMAAGo1IQAAajYhAABq+xMAAGr8EwAAav0TAABq/hMAAGr/EwAAagAUAABqFxgAAGoYGAAAarMgAABqtCAAAGoBFAAAagIUAABqmRsAAGqaGwAAapsbAABqnBsAAGqdGwAAap4bAABqAxQAAGoEFAAAamcgAABqaCAAAGoFFAAAagYUAABqBxQAAGoIFAAAagkUAABqChQAAGoLFAAAagwUAABqDRQAAGoOFAAAauMcAABq5BwAAGoPFAAAahAUAABqilIAAGqLUgAAaqEbAABqohsAAGr7HwAAavwfAABqoxsAAGqkGwAAahMUAABqFBQAAGoVFAAAahYUAABqpxsAAGqoGwAAapUYAABqlhgAAGqrGwAAaqwbAABqFxQAAGoYFAAAaq0bAABqrhsAAGoZFAAAahoUAABqxx4AAGrIHgAAahsUAABqHBQAAGodFAAAah4UAABq4xoAAGrkGgAAaiEUAABqIhQAAGqzGwAAarQbAABqIxQAAGokFAAAahEeAABqEh4AAGolIgAAaiYiAABq4RgAAGriGAAAahshAABqHCEAAGrtGAAAau4YAABqOlIAAGo7UgAAaokgAABqiiAAAGonFAAAaigUAABquxsAAGq8GwAAaikUAABqKhQAAGrJHgAAasoeAABqvRsAAGq+GwAAaisUAABqLBQAAGq/GwAAasAbAABqLRQAAGouFAAAai8UAABqMBQAAGphIgAAamIiAABqMRQAAGoyFAAAasEbAABqwhsAAGrDGwAAasQbAABqMxQAAGo0FAAAajUUAABqNhQAAGonHAAAaigcAABqNxQAAGo4FAAAajkUAABqOhQAAGrHGwAAasgbAABqzR4AAGrOHgAAam0YAABqbhgAAGo9FAAAaj4UAABqyRsAAGrKGwAAaj8UAABqQBQAAGrLGwAAaswbAABqQRQAAGpCFAAAas0bAABqzhsAAGrDIAAAasQgAABqzxsAAGrQGwAAakMUAABqRBQAAGpFFAAAakYUAABqbxgAAGpwGAAAam0eAABqbh4AAGrRGwAAatIbAABqAxwAAGoEHAAAakEfAABqQh8AAGrrGQAAauwZAABq6RoAAGrqGgAAakkUAABqShQAAGrfFQAAauAVAABqTRQAAGpOFAAAak8UAABqUBQAAGrbGwAAatwbAABqURQAAGpSFAAAaoBSAABqgVIAAGqCUgAAaoNSAABqJxoAAGooGgAAalMUAABqVBQAAGpVFAAAalYUAABqVxQAAGpYFAAAaskhAABqyiEAAGpZFAAAaloUAABq4xsAAGrkGwAAauUbAABq5hsAAGrnGwAAaugbAABqMlIAAGozUgAAaukbAABq6hsAAGpHIQAAakghAABq6xsAAGrsGwAAamcaAABqaBoAAGppHQAAamodAABqXRQAAGpeFAAAal8UAABqYBQAAGqlHgAAaqYeAABqlxoAAGqYGgAAamEUAABqYhQAAGr1GwAAavYbAABqSSEAAGpKIQAAamMUAABqZBQAAGplFAAAamYUAABqZxQAAGpoFAAAarsaAABqvBoAAGr7GwAAavwbAABq/RsAAGr+GwAAamkUAABqahQAAGr5FAAAavoUAABqbRQAAGpuFAAAas0aAABqzhoAAGrdGgAAat4aAABqbxQAAGpwFAAAagccAABqCBwAAGpjIQAAamQhAABqcRQAAGpyFAAAagkcAABqChwAAGpzFAAAanQUAABqCxwAAGoMHAAAanUUAABqdhQAAGp1GAAAanYYAABqHxwAAGogHAAAancUAABqeBQAAGoPHAAAahAcAABqeRQAAGp6FAAAansUAABqfBQAAGoRHAAAahIcAABqfRQAAGp+FAAAahMcAABqFBwAAGoVHAAAahYcAABq+RoAAGr6GgAAaoEUAABqghQAAGqDFAAAaoQUAABqhRQAAGqGFAAAaocUAABqiBQAAGqJFAAAaooUAABqixQAAGqMFAAAaukVAABq6hUAAGp+UgAAan9SAABqjxQAAGqQFAAAapEUAABqkhQAAGoZHAAAahocAABqkxQAAGqUFAAAahscAABqHBwAAGqVFAAAapYUAABqlxQAAGqYFAAAapkUAABqmhQAAGqbFAAAapwUAABqIRwAAGoiHAAAap0UAABqnhQAAGoTIAAAahQgAABqIxwAAGokHAAAaiUcAABqJhwAAGrFGwAAasYbAABqJR8AAGomHwAAaikcAABqKhwAAGr7IQAAavwhAABqKxwAAGosHAAAagMdAABqBB0AAGq7HwAAarwfAABqGxsAAGocGwAAamsbAABqbBsAAGr/GwAAagAcAABqMRwAAGoyHAAAap8UAABqoBQAAGozHAAAajQcAABqNRwAAGo2HAAAav0aAABq/hoAAGppIAAAamogAABqoRQAAGqiFAAAajccAABqOBwAAGqlFAAAaqYUAABqOxwAAGo8HAAAaj0cAABqPhwAAGo/HAAAakAcAABqQRwAAGpCHAAAaqcUAABqqBQAAGrjHgAAauQeAABqqRQAAGqqFAAAakUcAABqRhwAAGqrFAAAaqwUAABqqRwAAGqqHAAAaq0UAABqrhQAAGpLHAAAakwcAABqrxQAAGqwFAAAarMUAABqtBQAAGpNHAAAak4cAABqTxwAAGpQHAAAarUUAABqthQAAGpTHAAAalQcAABqtxQAAGq4FAAAarkUAABquhQAAGq3IQAAarghAABquxQAAGq8FAAAar0UAABqvhQAAGq/FAAAasAUAABqVxwAAGpYHAAAalkcAABqWhwAAGpDHAAAakQcAABqwRQAAGrCFAAAasMUAABqxBQAAGrFFAAAasYUAABqCxsAAGoMGwAAalscAABqXBwAAGpdHAAAal4cAABqXxwAAGpgHAAAakccAABqSBwAAGp5HQAAanodAABqYRwAAGpiHAAAaskUAABqyhQAAGrLFAAAaswUAABqzRQAAGrOFAAAamUcAABqZhwAAGrPFAAAatAUAABqBR4AAGoGHgAAatEUAABq0hQAAGpnHAAAamgcAABq0xQAAGrUFAAAavMcAABq9BwAAGrVFAAAatYUAABqbRwAAGpuHAAAatcUAABq2BQAAGp9HQAAan4dAABq2RQAAGraFAAAatsUAABq3BQAAGrdFAAAat4UAABq5yEAAGroIQAAat8UAABq4BQAAGrhFAAAauIUAABq4xQAAGrkFAAAauUUAABq5hQAAGp5HAAAanocAABq5xQAAGroFAAAanscAABqfBwAAGrpFAAAauoUAABqfRwAAGp+HAAAausUAABq7BQAAGrtFAAAau4UAABqZlIAAGpnUgAAau8UAABq8BQAAGpsUgAAam1SAABq8RQAAGryFAAAaoMcAABqhBwAAGqFHAAAaoYcAABq0RgAAGrSGAAAaoccAABqiBwAAGprIQAAamwhAABq8xQAAGr0FAAAaoscAABqjBwAAGr1FAAAavYUAABqjxwAAGqQHAAAavcUAABq+BQAAGpHIAAAakggAABqEx8AAGoUHwAAapMcAABqlBwAAGqVHAAAapYcAABq+xQAAGr8FAAAav0UAABq/hQAAGqXHAAAapgcAABqmRwAAGqaHAAAajBSAABqMVIAAGqbHAAAapwcAABq/xQAAGoAFQAAagEVAABqAhUAAGpZEwAAaloTAABqPlIAAGo/UgAAap0cAABqnhwAAGrvHgAAavAeAABqURwAAGpSHAAAagUVAABqBhUAAGoHFQAAaggVAABqCRUAAGoKFQAAagsVAABqDBUAAGodIAAAah4gAABqDRUAAGoOFQAAaqkaAABqqhoAAGqTGAAAapQYAABqpRwAAGqmHAAAai8eAABqMB4AAGoRFQAAahIVAABqExUAAGoUFQAAaqccAABqqBwAAGrzGQAAavQZAABqGRUAAGoaFQAAaqscAABqrBwAAGqtHAAAaq4cAABqGxUAAGocFQAAaq8cAABqsBwAAGqNHQAAao4dAABqsRwAAGqyHAAAah0VAABqHhUAAGofFQAAaiAVAABqsxwAAGq0HAAAarUcAABqthwAAGohFQAAaiIVAABqIxUAAGokFQAAaiUVAABqJhUAAGpwUgAAanFSAABquRwAAGq6HAAAaicVAABqKBUAAGopFQAAaioVAABqKxUAAGosFQAAai0VAABqLhUAAGovFQAAajAVAABqMRUAAGoyFQAAajMVAABqNBUAAGo1FQAAajYVAABq1RsAAGrWGwAAaiMbAABqJBsAAGo3FQAAajgVAABqORUAAGo6FQAAajsVAABqPBUAAGrHHAAAasgcAABqTyAAAGpQIAAAaicgAABqKCAAAGoLHQAAagwdAABq/R4AAGr+HgAAaskcAABqyhwAAGpzIQAAanQhAABqyxwAAGrMHAAAaj8VAABqQBUAAGrPHAAAatAcAABq0RwAAGrSHAAAatMcAABq1BwAAGpBFQAAakIVAABqQxUAAGpEFQAAatccAABq2BwAAGpFFQAAakYVAABqRxUAAGpIFQAAakkVAABqShUAAGpLFQAAakwVAABq2xwAAGrcHAAAaoUbAABqhhsAAGrdHAAAat4cAABq/x4AAGoAHwAAak0VAABqThUAAGrfHAAAauAcAABqdyEAAGp4IQAAak8VAABqUBUAAGpUUgAAalVSAABqfSEAAGp+IQAAauUcAABq5hwAAGpRFQAAalIVAABq5xwAAGroHAAAalUVAABqVhUAAGrpHAAAauocAABq6xwAAGrsHAAAarMfAABqtB8AAGpXFQAAalgVAABq7RwAAGruHAAAalkVAABqWhUAAGoBHwAAagIfAABqWxUAAGpcFQAAal0VAABqXhUAAGpfFQAAamAVAABqYRUAAGpiFQAAamMVAABqZBUAAGplFQAAamYVAABqblIAAGpvUgAAavUcAABq9hwAAGr3HAAAavgcAABqZxUAAGpoFQAAaksgAABqTCAAAGppFQAAamoVAABqBx8AAGoIHwAAamsVAABqbBUAAGptFQAAam4VAABqbxUAAGpwFQAAanEVAABqchUAAGpzFQAAanQVAABqiyAAAGqMIAAAanUVAABqdhUAAGp3FQAAangVAABqeRUAAGp6FQAAansVAABqfBUAAGp9FQAAan4VAABqfxUAAGqAFQAAav8cAABqAB0AAGqBFQAAaoIVAABqgxUAAGqEFQAAaj8bAABqQBsAAGqHFQAAaogVAABqKxsAAGosGwAAaosVAABqjBUAAGoFHQAAagYdAABqBx0AAGoIHQAAagkdAABqCh0AAGqNFQAAao4VAABqHRwAAGoeHAAAag8dAABqEB0AAGoRHQAAahIdAABqEx0AAGoUHQAAapEVAABqkhUAAGoVHQAAahYdAABqkxUAAGqUFQAAaqEdAABqoh0AAGqXFQAAapgVAABqFx0AAGoYHQAAahkdAABqGh0AAGqZFQAAapoVAABqmxUAAGqcFQAAahsdAABqHB0AAGodHQAAah4dAABqnRUAAGqeFQAAap8VAABqoBUAAGofHQAAaiAdAABqIR0AAGoiHQAAaqEVAABqohUAAGqlHQAAaqYdAABqpRUAAGqmFQAAaqcVAABqqBUAAGqpFQAAaqoVAABqJR0AAGomHQAAalEgAABqUiAAAGqrFQAAaqwVAABqKR0AAGoqHQAAaq0VAABqrhUAAGorHQAAaiwdAABqLR0AAGouHQAAaq8VAABqsBUAAGoxHQAAajIdAABqMx0AAGo0HQAAarEVAABqshUAAGqzFQAAarQVAABqFxwAAGoYHAAAajkdAABqOh0AAGq1FQAAarYVAABqtxUAAGq4FQAAarkVAABquhUAAGq7FQAAarwVAABqPx0AAGpAHQAAanpSAABqe1IAAGozGwAAajQbAABqQx0AAGpEHQAAagUhAABqBiEAAGpzEwAAanQTAABqwRUAAGrCFQAAasMVAABqxBUAAGrFFQAAasYVAABqxxUAAGrIFQAAajcbAABqOBsAAGrJFQAAasoVAABqyxUAAGrMFQAAahciAABqGCIAAGrNFQAAas4VAABqEyIAAGoUIgAAamUaAABqZhoAAGrPFQAAatAVAABqTR0AAGpOHQAAak8dAABqUB0AAGoRHwAAahIfAABqUx0AAGpUHQAAatEVAABq0hUAAGrTFQAAatQVAABqVR0AAGpWHQAAaucTAABq6BMAAGrxEwAAavITAABqWR0AAGpaHQAAalsdAABqXB0AAGrXFQAAatgVAABqXR0AAGpeHQAAal8dAABqYB0AAGqxHQAAarIdAABq2xUAAGrcFQAAaq0hAABqriEAAGphHQAAamIdAABqYx0AAGpkHQAAamUdAABqZh0AAGrdFQAAat4VAABqSxQAAGpMFAAAauEVAABq4hUAAGpnHQAAamgdAABqWxQAAGpcFAAAaochAABqiCEAAGrlFQAAauYVAABqax0AAGpsHQAAam0dAABqbh0AAGpvHQAAanAdAABq5xUAAGroFQAAao0UAABqjhQAAGrrFQAAauwVAABqcR0AAGpyHQAAau0VAABq7hUAAGrvFQAAavAVAABqcx0AAGp0HQAAaksdAABqTB0AAGpvHAAAanAcAABq8RUAAGryFQAAavMbAABq9BsAAGptIAAAam4gAABqdx0AAGp4HQAAamcYAABqaBgAAGqvHgAAarAeAABqex0AAGp8HQAAanEcAABqchwAAGr/GQAAagAaAABqcxwAAGp0HAAAan8dAABqgB0AAGqBHQAAaoIdAABq8xUAAGr0FQAAaiUZAABqJhkAAGqFHQAAaoYdAABqCSAAAGoKIAAAavUVAABq9hUAAGovHAAAajAcAABqhx0AAGqIHQAAavcVAABq+BUAAGoVIgAAahYiAABqiR0AAGqKHQAAaosdAABqjB0AAGpoUgAAamlSAABqjx0AAGqQHQAAapEdAABqkh0AAGqTHQAAapQdAABqvx0AAGrAHQAAavkVAABq+hUAAGr7FQAAavwVAABqlR0AAGqWHQAAav0VAABq/hUAAGqZHQAAapodAABq/xUAAGoAFgAAagEWAABqAhYAAGoDFgAAagQWAABqBRYAAGoGFgAAarcYAABquBgAAGrBHQAAasIdAABqCRYAAGoKFgAAai0eAABqLh4AAGoLFgAAagwWAABqlRUAAGqWFQAAalsYAABqXBgAAGqjFQAAaqQVAABqpx0AAGqoHQAAaqkdAABqqh0AAGqrHQAAaqwdAABqvxUAAGrAFQAAaq8dAABqsB0AAGr9IAAAav4gAABqDRYAAGoOFgAAatkVAABq2hUAAGoPFgAAahAWAABqRRsAAGpGGwAAarMdAABqtB0AAGoRFgAAahIWAABqExYAAGoUFgAAarcdAABquB0AAGq5HQAAarodAABqux0AAGq8HQAAar0dAABqvh0AAGoVFgAAahYWAABqTR8AAGpOHwAAahcWAABqGBYAAGrFHQAAasYdAABqGxYAAGocFgAAasMdAABqxB0AAGodFgAAah4WAABqGRYAAGoaFgAAah8WAABqIBYAAGrHHQAAasgdAABqyR0AAGrKHQAAassdAABqzB0AAGrNHQAAas4dAABqIRYAAGoiFgAAas8dAABq0B0AAGrRHQAAatIdAABqIxYAAGokFgAAatUdAABq1h0AAGo5HAAAajocAABqJRYAAGomFgAAatcdAABq2B0AAGohHgAAaiIeAABqYxwAAGpkHAAAaicWAABqKBYAAGopFgAAaioWAABqKxYAAGosFgAAai0WAABqLhYAAGqFHgAAaoYeAABqLxYAAGowFgAAajEWAABqMhYAAGrdHQAAat4dAABqMxYAAGo0FgAAat8dAABq4B0AAGo1FgAAajYWAABqNxYAAGo4FgAAascWAABqyBYAAGrlHQAAauYdAABq5x0AAGroHQAAaukdAABq6h0AAGrrHQAAauwdAABqORYAAGo6FgAAau0dAABq7h0AAGo7FgAAajwWAABqPRYAAGo+FgAAaj8WAABqQBYAAGpBFgAAakIWAABq8R0AAGryHQAAakMWAABqRBYAAGpFFgAAakYWAABqRxYAAGpIFgAAakkWAABqShYAAGpLFgAAakwWAABq+R0AAGr6HQAAak0WAABqThYAAGpPFgAAalAWAABq+x0AAGr8HQAAalhSAABqWVIAAGr9HQAAav4dAABqSxsAAGpMGwAAan8cAABqgBwAAGpTFgAAalQWAABqAR4AAGoCHgAAagMeAABqBB4AAGpVFgAAalYWAABqWSAAAGpaIAAAam0hAABqbiEAAGpXFgAAalgWAABq0x0AAGrUHQAAalkWAABqWhYAAGoHHgAAaggeAABqCR4AAGoKHgAAagseAABqDB4AAGoNHgAAag4eAABqWxYAAGpcFgAAanccAABqeBwAAGpdFgAAal4WAABqXxYAAGpgFgAAahMeAABqFB4AAGp1HQAAanYdAABqPRsAAGo+GwAAamEWAABqYhYAAGpjFgAAamQWAABqZRYAAGpmFgAAak8bAABqUBsAAGqXIQAAapghAABqURsAAGpSGwAAamkWAABqahYAAGprFgAAamwWAABqbRYAAGpuFgAAam8WAABqcBYAAGpxFgAAanIWAABqOFIAAGo5UgAAanMWAABqdBYAAGp1FgAAanYWAABqdxYAAGp4FgAAankWAABqehYAAGp7FgAAanwWAABqfRYAAGp+FgAAah8eAABqIB4AAGp/FgAAaoAWAABqgRYAAGqCFgAAaoMWAABqhBYAAGqxFAAAarIUAABqIx4AAGokHgAAaiUeAABqJh4AAGrbHQAAatwdAABqJx4AAGooHgAAaikeAABqKh4AAGorHgAAaiweAABqhxYAAGqIFgAAaokWAABqihYAAGqLFgAAaowWAABqMR4AAGoyHgAAao0WAABqjhYAAGqPFgAAapAWAABqkRYAAGqSFgAAapMWAABqlBYAAGorHwAAaiwfAABqNx4AAGo4HgAAas8YAABq0BgAAGqXFgAAapgWAABqlRMAAGqWEwAAapkWAABqmhYAAGqbFgAAapwWAABqnRYAAGqeFgAAap8WAABqoBYAAGqhFgAAaqIWAABqoxYAAGqkFgAAaqUWAABqphYAAGqnFgAAaqgWAABqqRYAAGqqFgAAaqsWAABqrBYAAGrFGAAAasYYAABqrxYAAGqwFgAAarEWAABqshYAAGoXFQAAahgVAABqsxYAAGq0FgAAarUWAABqthYAAGo7HgAAajweAABqPR4AAGo+HgAAaj8eAABqQB4AAGq3FgAAargWAABqXyAAAGpgIAAAarkWAABquhYAAGrBEwAAasITAABqiRwAAGqKHAAAar0WAABqvhYAAGpFHgAAakYeAABqfFIAAGp9UgAAarUdAABqth0AAGpHHgAAakgeAABqMRkAAGoyGQAAar8WAABqwBYAAGpNHgAAak4eAABqTx4AAGpQHgAAasEWAABqwhYAAGpVGQAAalYZAABqUx4AAGpUHgAAalUeAABqVh4AAGpXHgAAalgeAABqWR4AAGpaHgAAauEdAABq4h0AAGrDFgAAasQWAABqxRYAAGrGFgAAal8eAABqYB4AAGrxGgAAavIaAABqYx4AAGpkHgAAao8ZAABqkBkAAGrjHQAAauQdAABqZx4AAGpoHgAAanMYAABqdBgAAGprHgAAamweAABqyRYAAGrKFgAAassWAABqzBYAAGrNFgAAas4WAABqzxYAAGrQFgAAamEgAABqYiAAAGplIAAAamYgAABqTyEAAGpQIQAAanMeAABqdB4AAGoXHgAAahgeAABq0RYAAGrSFgAAanUeAABqdh4AAGozHwAAajQfAABqdx4AAGp4HgAAatMWAABq1BYAAGp7HgAAanweAABqMR8AAGoyHwAAan0eAABqfh4AAGpjGwAAamQbAABq1RYAAGrWFgAAalpSAABqW1IAAGqBHgAAaoIeAABq1xYAAGrYFgAAatkWAABq2hYAAGofGgAAaiAaAABqeR8AAGp6HwAAapEcAABqkhwAAGqJHgAAaooeAABqnR0AAGqeHQAAavUdAABq9h0AAGqLHgAAaoweAABq2xYAAGrcFgAAat0WAABq3hYAAGrfFgAAauAWAABqjR4AAGqOHgAAauMVAABq5BUAAGqPHgAAapAeAABq4xYAAGrkFgAAapEeAABqkh4AAGrlFgAAauYWAABqUxUAAGpUFQAAaukWAABq6hYAAGrrFgAAauwWAABq7RYAAGruFgAAau8WAABq8BYAAGrxFgAAavIWAABqmxoAAGqcGgAAapUeAABqlh4AAGrzFgAAavQWAABq2xgAAGrcGAAAarMhAABqtCEAAGr3FgAAavgWAABqZxsAAGpoGwAAapkeAABqmh4AAGq5GgAAaroaAABqnR4AAGqeHgAAavkWAABq+hYAAGo9HQAAaj4dAABq8x0AAGr0HQAAavsWAABq/BYAAGr9FgAAav4WAABqoR4AAGqiHgAAajxSAABqPVIAAGr/FgAAagAXAABqARcAAGoCFwAAamkbAABqahsAAGoDFwAAagQXAABqERsAAGoSGwAAdShqqR4AAGqqHgAAagUXAABqBhcAAGoHFwAAaggXAABqMRsAAGoyGwAAaq0eAABqrh4AAGoJFwAAagoXAABqCxcAAGoMFwAAarEeAABqsh4AAGqzHgAAarQeAABqDxcAAGoQFwAAauMYAABq5BgAAGq1HgAAarYeAABqvRwAAGq+HAAAajkeAABqOh4AAGoTFwAAahQXAABqFRcAAGoWFwAAagMVAABqBBUAAGq5HgAAaroeAABqFxcAAGoYFwAAajsfAABqPB8AAGq9HgAAar4eAABqvx4AAGrAHgAAasEeAABqwh4AAGrDHgAAasQeAABqGRcAAGoaFwAAasUeAABqxh4AAGqvGwAAarAbAABqGxcAAGocFwAAah0XAABqHhcAAGofFwAAaiAXAABqyx4AAGrMHgAAaiEXAABqIhcAAGojFwAAaiQXAABqJRcAAGomFwAAaicXAABqKBcAAGopFwAAaioXAABqKxcAAGosFwAAai0XAABqLhcAAGovFwAAajAXAABqzx4AAGrQHgAAatEeAABq0h4AAGoxFwAAajIXAABq0x4AAGrUHgAAatUeAABq1h4AAGozFwAAajQXAABqNRcAAGo2FwAAar0hAABqviEAAGrXHgAAatgeAABq2R4AAGraHgAAatseAABq3B4AAGo3FwAAajgXAABqMx4AAGo0HgAAat0eAABq3h4AAGo5FwAAajoXAABqvyEAAGrAIQAAajsXAABqPBcAAGrfHgAAauAeAABq4R4AAGriHgAAaj0XAABqPhcAAGo/FwAAakAXAABqQRcAAGpCFwAAakMXAABqRBcAAGpFFwAAakYXAABqaRwAAGpqHAAAakcXAABqSBcAAGpJFwAAakoXAABqSxcAAGpMFwAAanUbAABqdhsAAGqBHAAAaoIcAABqTxcAAGpQFwAAaukeAABq6h4AAGrrHgAAauweAABq7R4AAGruHgAAalEXAABqUhcAAGqfHAAAaqAcAABqUxcAAGpUFwAAalUXAABqVhcAAGrxHgAAavIeAABqWRcAAGpaFwAAavMeAABq9B4AAGpbFwAAalwXAABq9R4AAGr2HgAAavceAABq+B4AAGrpGAAAauoYAABq+x4AAGr8HgAAapsdAABqnB0AAGpfFwAAamAXAABqYRcAAGpiFwAAap8fAABqoB8AAGpjFwAAamQXAABqAx8AAGoEHwAAamUXAABqZhcAAGr5HAAAavocAABqZxcAAGpoFwAAav0cAABq/hwAAGppFwAAamoXAABqCR8AAGoKHwAAalcdAABqWB0AAGpLHwAAakwfAABqaxcAAGpsFwAAam0XAABqbhcAAGoLHwAAagwfAABqDR8AAGoOHwAAag8fAABqEB8AAGpRHQAAalIdAABqbxcAAGpwFwAAanEXAABqchcAAGoVHwAAahYfAABqFx8AAGoYHwAAahkfAABqGh8AAGpzFwAAanQXAABqGx8AAGocHwAAanUXAABqdhcAAGofIAAAaiAgAABqlx0AAGqYHQAAancXAABqeBcAAGofHwAAaiAfAABqpx4AAGqoHgAAaiEfAABqIh8AAGp5FwAAanoXAABqfRsAAGp+GwAAaicfAABqKB8AAGp7FwAAanwXAABq9yAAAGr4IAAAan8XAABqgBcAAGrPIQAAatAhAABqKR8AAGoqHwAAaoEXAABqghcAAGqDFwAAaoQXAABqDx4AAGoQHgAAaoUXAABqhhcAAGo1HgAAajYeAABqLR8AAGouHwAAai8fAABqMB8AAGqHFwAAaogXAABqiRcAAGqKFwAAagsgAABqDCAAAGqLFwAAaowXAABqjRcAAGqOFwAAao8XAABqkBcAAGqRFwAAapIXAABqkxcAAGqUFwAAapUXAABqlhcAAGqXFwAAapgXAABqNR8AAGo2HwAAajcfAABqOB8AAGo5HwAAajofAABqmRcAAGqaFwAAaoMbAABqhBsAAGqbFwAAapwXAABqUR4AAGpSHgAAap0XAABqnhcAAGoxIgAAajIiAABqPx8AAGpAHwAAap8XAABqoBcAAGpDHwAAakQfAABqRR8AAGpGHwAAaqEXAABqohcAAGpHHwAAakgfAABqoxcAAGqkFwAAaqUXAABqphcAAGpJHwAAakofAABqpxcAAGqoFwAAakkcAABqShwAAGqpFwAAaqoXAABqqxcAAGqsFwAAaq0XAABqrhcAAGpPHwAAalAfAABqUR8AAGpSHwAAaq8XAABqsBcAAGqxFwAAarIXAABqUx8AAGpUHwAAarMXAABqtBcAAGpVHwAAalYfAABq2SEAAGraIQAAaoMgAABqhCAAAGq1FwAAarYXAABqWx8AAGpcHwAAak5SAABqT1IAAGpjHwAAamQfAABqtx4AAGq4HgAAalkfAABqWh8AAGpfHwAAamAfAABqYR8AAGpiHwAAahUeAABqFh4AAGq3FwAAargXAABquRcAAGq6FwAAamUfAABqZh8AAGq7FwAAarwXAABqvRcAAGq+FwAAar8XAABqwBcAAGrvGwAAavAbAABqax8AAGpsHwAAat0hAABq3iEAAGrBFwAAasIXAABqbx8AAGpwHwAAav0YAABq/hgAAGrFFwAAasYXAABqxxcAAGrIFwAAanMfAABqdB8AAGpdIAAAal4gAABqyRcAAGrKFwAAauceAABq6B4AAGp1HwAAanYfAABqyxcAAGrMFwAAas0XAABqzhcAAGrPFwAAatAXAABqdx8AAGp4HwAAatEXAABq0hcAAGrTFwAAatQXAABqex8AAGp8HwAAatUXAABq1hcAAGrXFwAAatgXAABqfR8AAGp+HwAAatkXAABq2hcAAGp/HwAAaoAfAABq2xcAAGrcFwAAat0XAABq3hcAAGrfFwAAauAXAABqBR8AAGoGHwAAao8bAABqkBsAAGq7FgAAarwWAABq4xcAAGrkFwAAao0gAABqjiAAAGqFHwAAaoYfAABq5xcAAGroFwAAaocfAABqiB8AAGpvIQAAanAhAABq6RcAAGrqFwAAaokfAABqih8AAGpDHgAAakQeAABq5SEAAGrmIQAAaosfAABqjB8AAGq3HAAAargcAABq6xcAAGrsFwAAao0fAABqjh8AAGqPHwAAapAfAABq7RcAAGruFwAAau8XAABq8BcAAGqRIAAAapIgAABq8xcAAGr0FwAAavUXAABq9hcAAGo1HQAAajYdAABq9xcAAGr4FwAAavkXAABq+hcAAGqVIAAAapYgAABq/RcAAGr+FwAAav8XAABqABgAAGqXHwAAapgfAABqlx4AAGqYHgAAapsfAABqnB8AAGoBGAAAagIYAABqAxgAAGoEGAAAahEaAABqEhoAAGqXIAAAapggAABq6yEAAGrsIQAAalZSAABqV1IAAGqRGwAAapIbAABqnR8AAGqeHwAAau0hAABq7iEAAGqTGwAAapQbAABqCRgAAGoKGAAAagsYAABqDBgAAGqhHwAAaqIfAABqox8AAGqkHwAAajMaAABqNBoAAGqnHwAAaqgfAABqHR8AAGoeHwAAag0YAABqDhgAAGoPGAAAahAYAABqqR8AAGqqHwAAahEYAABqEhgAAGrlHwAAauYfAABqExgAAGoUGAAAahUYAABqFhgAAGqtHwAAaq4fAABqlRsAAGqWGwAAarEfAABqsh8AAGoZGAAAahoYAABqTRoAAGpOGgAAahsYAABqHBgAAGpxHwAAanIfAABquxwAAGq8HAAAarUfAABqth8AAGpyUgAAanNSAABqkR8AAGqSHwAAah8YAABqIBgAAGohGAAAaiIYAABqIxgAAGokGAAAarkfAABquh8AAGqpGwAAaqobAABqJRgAAGomGAAAaicYAABqKBgAAGoZHgAAahoeAABqKRgAAGoqGAAAaisYAABqLBgAAGotGAAAai4YAABqlxsAAGqYGwAAai8YAABqMBgAAGq/HwAAasAfAABqgx0AAGqEHQAAasMfAABqxB8AAGrFHwAAasYfAABqmyAAAGqcIAAAajEYAABqMhgAAGrJHwAAasofAABqQR0AAGpCHQAAajMYAABqNBgAAGrLHwAAaswfAABqGx4AAGocHgAAasEcAABqwhwAAGo1GAAAajYYAABqNxgAAGo4GAAAaskgAABqyiAAAGo5GAAAajoYAABqhRYAAGqGFgAAaj0YAABqPhgAAGrPHwAAatAfAABqPxgAAGpAGAAAasMcAABqxBwAAGr/IQAAagAiAABqQRgAAGpCGAAAatEfAABq0h8AAGoBIgAAagIiAABqQxgAAGpEGAAAapkgAABqmiAAAGrTHwAAatQfAABq1R8AAGrWHwAAakUYAABqRhgAAGpHGAAAakgYAABq1x8AAGrYHwAAasUcAABqxhwAAGpJGAAAakoYAABq2R8AAGraHwAAaksYAABqTBgAAGpNGAAAak4YAABq3R8AAGreHwAAakRSAABqRVIAAGpkUgAAamVSAABqURgAAGpSGAAAauEfAABq4h8AAGpTGAAAalQYAABq4x8AAGrkHwAAalUYAABqVhgAAGqJEwAAaooTAABqnxsAAGqgGwAAaukfAABq6h8AAGqTEwAAapQTAABqWRgAAGpaGAAAau0fAABq7h8AAGpJHgAAakoeAABq7x8AAGrwHwAAavEfAABq8h8AAGq9EwAAar4TAABq9R8AAGr2HwAAahkZAABqGhkAAGpfGAAAamAYAABqYRgAAGpiGAAAavcfAABq+B8AAGpjGAAAamQYAABqZRgAAGpmGAAAahEUAABqEhQAAGqGUgAAaodSAABqaRgAAGpqGAAAav0fAABq/h8AAGr/HwAAagAgAABqaxgAAGpsGAAAajRSAABqNVIAAGo2UgAAajdSAABqVxcAAGpYFwAAajsUAABqPBQAAGpHFAAAakgUAABqBSAAAGoGIAAAagcgAABqCCAAAGpxGAAAanIYAABqSR0AAGpKHQAAamkeAABqah4AAGprFAAAamwUAABqDSAAAGoOIAAAancYAABqeBgAAGp5GAAAanoYAABqexgAAGp8GAAAahEgAABqEiAAAGp9GAAAan4YAABqzRwAAGrOHAAAaoEYAABqghgAAGqDGAAAaoQYAABqZx8AAGpoHwAAahUgAABqFiAAAGqFGAAAaoYYAABqFyAAAGoYIAAAasEgAABqwiAAAGqHGAAAaogYAABq7x0AAGrwHQAAaqUbAABqphsAAGqJGAAAaooYAABqdxsAAGp4GwAAaq0gAABqriAAAGqLGAAAaowYAABqDSIAAGoOIgAAao0YAABqjhgAAGoZIAAAahogAABqjxgAAGqQGAAAahsgAABqHCAAAGoPIgAAahAiAABqkRgAAGqSGAAAatUcAABq1hwAAGoPFQAAahAVAABqFRUAAGoWFQAAaiEgAABqIiAAAGqXGAAAapgYAABqmRgAAGqaGAAAaiUgAABqJiAAAGo9FQAAaj4VAABqKSAAAGoqIAAAaisgAABqLCAAAGotIAAAai4gAABqLyAAAGowIAAAapsYAABqnBgAAGoxIAAAajIgAABqMyAAAGo0IAAAajUgAABqNiAAAGo3IAAAajggAABqnxgAAGqgGAAAaoUVAABqhhUAAGo7IAAAajwgAABqjxUAAGqQFQAAaj0gAABqPiAAAGo/IAAAakAgAABqIyEAAGokIQAAaoMfAABqhB8AAGpBIAAAakIgAABqvRUAAGq+FQAAaqMYAABqpBgAAGqlGAAAaqYYAABqpxgAAGqoGAAAaqkYAABqqhgAAGqrGAAAaqwYAABqrRgAAGquGAAAaq8YAABqsBgAAGpJIAAAakogAABqtSAAAGq2IAAAarEYAABqshgAAGqzGAAAarQYAABqtRgAAGq2GAAAagcWAABqCBYAAGpNIAAAak4gAABqsRsAAGqyGwAAarkYAABquhgAAGq7GAAAarwYAABqvRgAAGq+GAAAar8YAABqwBgAAGrBGAAAasIYAABqUyAAAGpUIAAAalUgAABqViAAAGpXIAAAalggAABqwxgAAGrEGAAAaoEfAABqgh8AAGozIQAAajQhAABqASEAAGoCIQAAascYAABqyBgAAGrJGAAAasoYAABqyxgAAGrMGAAAas0YAABqzhgAAGpbIAAAalwgAABqlRYAAGqWFgAAaq0WAABqrhYAAGq1GwAAarYbAABqxSAAAGrGIAAAatMYAABq1BgAAGrVGAAAatYYAABq1xgAAGrYGAAAatkYAABq2hgAAGqpIAAAaqogAABqOxkAAGo8GQAAaohSAABqiVIAAGpjIAAAamQgAABq9RYAAGr2FgAAat0YAABq3hgAAGrfGAAAauAYAABqPR8AAGo+HwAAauEcAABq4hwAAGq3GwAAargbAABqERcAAGoSFwAAauUYAABq5hgAAGprIAAAamwgAABqQFIAAGpBUgAAam8gAABqcCAAAGrnGAAAaugYAABqcSAAAGpyIAAAanMgAABqdCAAAGpDIgAAakQiAABqXRcAAGpeFwAAausYAABq7BgAAGojIgAAaiQiAABqZyIAAGpoIgAAanUgAABqdiAAAGq5GwAAarobAABqYR4AAGpiHgAAancgAABqeCAAAGrvGAAAavAYAABq8RgAAGryGAAAankgAABqeiAAAGp7IAAAanwgAABqfSAAAGp+IAAAavMYAABq9BgAAGr1GAAAavYYAABqJRQAAGomFAAAamBSAABqYVIAAGr3GAAAavgYAABqgSAAAGqCIAAAamkiAABqaiIAAGr5GAAAavoYAABq+xgAAGr8GAAAaoUgAABqhiAAAGrDFwAAasQXAABqhyAAAGqIIAAAav8YAABqABkAAGoBGQAAagIZAABqAxkAAGoEGQAAagUZAABqBhkAAGoHGQAAaggZAABqTxgAAGpQGAAAauUXAABq5hcAAGqPIAAAapAgAABq8RcAAGryFwAAapMgAABqlCAAAGr7FwAAavwXAABqBRgAAGoGGAAAagkZAABqChkAAGoLGQAAagwZAABqDRkAAGoOGQAAag8ZAABqEBkAAGqdIAAAap4gAABqnyAAAGqgIAAAahEZAABqEhkAAGqhIAAAaqIgAABqPRkAAGo+GQAAaqMgAABqpCAAAGqlIAAAaqYgAABqpyAAAGqoIAAAahUZAABqFhkAAGoXGQAAahgZAABq4RcAAGriFwAAal0YAABqXhgAAGobGQAAahwZAABqHRkAAGoeGQAAaqsgAABqrCAAAGofGQAAaiAZAABqIRkAAGoiGQAAaq8gAABqsCAAAGojGQAAaiQZAABqoRgAAGqiGAAAaicZAABqKBkAAGpIUgAAaklSAABqKxkAAGosGQAAajsbAABqPBsAAGq3IAAAarggAABqxyAAAGrIIAAAai0ZAABqLhkAAGovGQAAajAZAABquSAAAGq6IAAAarsgAABqvCAAAGq9IAAAar4gAABqMxkAAGo0GQAAajcZAABqOBkAAGovIgAAajAiAABqvyAAAGrAIAAAajkZAABqOhkAAGqdGAAAap4YAABqbx4AAGpwHgAAapMfAABqlB8AAGoTGQAAahQZAABqXlIAAGpfUgAAaj8ZAABqQBkAAGqVHwAAapYfAABqQRkAAGpCGQAAanRSAABqdVIAAGp/HgAAaoAeAABqDRcAAGoOFwAAakMZAABqRBkAAGpFGQAAakYZAABqyyAAAGrMIAAAaqMUAABqpBQAAGpHGQAAakgZAABqzyAAAGrQIAAAakkZAABqShkAAGrRIAAAatIgAABqSxkAAGpMGQAAak0ZAABqThkAAGohIgAAaiIiAABqTxkAAGpQGQAAalEZAABqUhkAAGpTGQAAalQZAABq1SAAAGrWIAAAatcgAABq2CAAAGrrGgAAauwaAABqmR8AAGqaHwAAalcZAABqWBkAAGrxHAAAavIcAABqhFIAAGqFUgAAaskZAABqyhkAAGrbIAAAatwgAABqWRkAAGpaGQAAalsZAABqXBkAAGpdGQAAal4ZAABqox4AAGqkHgAAat8gAABq4CAAAGrhIAAAauIgAABq4yAAAGrkIAAAauUgAABq5iAAAGpfGQAAamAZAABq5yAAAGroIAAAamEZAABqYhkAAGpjGQAAamQZAABqZRkAAGpmGQAAaukgAABq6iAAAGpCUgAAakNSAABqZxkAAGpoGQAAamkZAABqahkAAGprGQAAamwZAABq7xwAAGrwHAAAam0ZAABqbhkAAGpvGQAAanAZAABqWx4AAGpcHgAAajEaAABqMhoAAGpxGQAAanIZAABq9SAAAGr2IAAAanMZAABqdBkAAGp1GQAAanYZAABqXR4AAGpeHgAAancZAABqeBkAAGoHGAAAaggYAABq+SAAAGr6IAAAavsgAABq/CAAAGp7GQAAanwZAABqfRkAAGp+GQAAan8ZAABqgBkAAGqBGQAAaoIZAABqfRoAAGp+GgAAagMhAABqBCEAAGqDGQAAaoQZAABqhRkAAGqGGQAAagchAABqCCEAAGqHGQAAaogZAABqDRwAAGoOHAAAaokZAABqihkAAGoJIQAAagohAABqixkAAGqMGQAAamkfAABqah8AAGqNGQAAao4ZAABqnx0AAGqgHQAAamUeAABqZh4AAGoPIQAAahAhAABqkRkAAGqSGQAAamscAABqbBwAAGqTGQAAapQZAABqlRkAAGqWGQAAan8gAABqgCAAAGoRIQAAahIhAABqlxkAAGqYGQAAapkZAABqmhkAAGqbGQAAapwZAABqFSEAAGoWIQAAavUhAABq9iEAAGqdGQAAap4ZAABqFyEAAGoYIQAAap8ZAABqoBkAAGoZIQAAahohAABqoRkAAGqiGQAAajUbAABqNhsAAGrTIAAAatQgAABqHyEAAGogIQAAaiEhAABqIiEAAGqjGQAAaqQZAABqJSEAAGomIQAAalsbAABqXBsAAGopIQAAaiohAABqpRkAAGqmGQAAaqcZAABqqBkAAGorIQAAaiwhAABqqRkAAGqqGQAAaqsZAABqrBkAAGovIQAAajAhAABqrRkAAGquGQAAagMgAABqBCAAAGqlHwAAaqYfAABqrxkAAGqwGQAAanEeAABqch4AAGoJIgAAagoiAABqNyEAAGo4IQAAajkhAABqOiEAAGqxGQAAarIZAABqsxkAAGq0GQAAajshAABqPCEAAGq1GQAAarYZAABqPyEAAGpAIQAAakEhAABqQiEAAGq3GQAAargZAABqQyEAAGpEIQAAavscAABq/BwAAGq5GQAAaroZAABquxkAAGq8GQAAar0ZAABqvhkAAGq/GQAAasAZAABqwRkAAGrCGQAAavkeAABq+h4AAGpLIQAAakwhAABqwxkAAGrEGQAAasUZAABqxhkAAGrHGQAAasgZAABqTSEAAGpOIQAAalUcAABqVhwAAGo1GQAAajYZAABqUSEAAGpSIQAAalMhAABqVCEAAGpVIQAAalYhAABqyxkAAGrMGQAAalchAABqWCEAAGrNGQAAas4ZAABqzxkAAGrQGQAAat0gAABq3iAAAGpZIQAAalohAABqqx8AAGqsHwAAalshAABqXCEAAGpfIQAAamAhAABqYSEAAGpiIQAAal0hAABqXiEAAGplIQAAamYhAABqZyEAAGpoIQAAamkhAABqaiEAAGrRGQAAatIZAABqXR8AAGpeHwAAatMZAABq1BkAAGrVGQAAatYZAABq1xkAAGrYGQAAaq8fAABqsB8AAGrZGQAAatoZAABq2xkAAGrcGQAAanEhAABqciEAAGrdGQAAat4ZAABq3xkAAGrgGQAAanUhAABqdiEAAGp5HgAAanoeAABq4RkAAGriGQAAankhAABqeiEAAGoBHQAAagIdAABq4xkAAGrkGQAAalBSAABqUVIAAGrlGQAAauYZAABqRyIAAGpIIgAAaucZAABq6BkAAGp7IQAAanwhAABq6RkAAGrqGQAAatMbAABq1BsAAGp/IQAAaoAhAABqgSEAAGqCIQAAaoMhAABqhCEAAGrtGQAAau4ZAABq7xkAAGrwGQAAauEbAABq4hsAAGrxGQAAavIZAABqhSEAAGqGIQAAakUhAABqRiEAAGr1GQAAavYZAABq9xkAAGr4GQAAavkZAABq+hkAAGr7GQAAavwZAABqiSEAAGqKIQAAav0ZAABq/hkAAGodGAAAah4YAABqARoAAGoCGgAAak0iAABqTiIAAGrZGwAAatobAABqiyEAAGqMIQAAagMaAABqBBoAAGoFGgAAagYaAABqBxoAAGoIGgAAao0hAABqjiEAAGqPIQAAapAhAABqkSEAAGqSIQAAagkaAABqChoAAGoLGgAAagwaAABqkyEAAGqUIQAAavcdAABq+B0AAGqVIQAAapYhAABqDRoAAGoOGgAAag8aAABqEBoAAGqZIQAAapohAABqmyEAAGqcIQAAap0hAABqniEAAGrrIAAAauwgAABqfxgAAGqAGAAAaqMhAABqpCEAAGo9IQAAaj4hAABqpSEAAGqmIQAAaqchAABqqCEAAGoTGgAAahQaAABqFRoAAGoWGgAAahcaAABqGBoAAGqpIQAAaqohAABqSx4AAGpMHgAAahkaAABqGhoAAGobGgAAahwaAABqzSAAAGrOIAAAau0gAABq7iAAAGr5HwAAavofAABqryEAAGqwIQAAarEhAABqsiEAAGodGgAAah4aAABqDR0AAGoOHQAAalUiAABqViIAAGohGgAAaiIaAABqtSEAAGq2IQAAaqEhAABqoiEAAGojGgAAaiQaAABqJRoAAGomGgAAat0bAABq3hsAAGopGgAAaioaAABqKxoAAGosGgAAai0aAABqLhoAAGrxIAAAavIgAABquSEAAGq6IQAAarshAABqvCEAAGrfGwAAauAbAABqLxoAAGowGgAAaoceAABqiB4AAGrBIQAAasIhAABq8yAAAGr0IAAAap8hAABqoCEAAGrDIQAAasQhAABqxSEAAGrGIQAAaicbAABqKBsAAGrHIQAAasghAABqvR8AAGq+HwAAasshAABqzCEAAGrfHwAAauAfAABqalIAAGprUgAAas0hAABqziEAAGo1GgAAajYaAABq0SEAAGrSIQAAatMhAABq1CEAAGrVIQAAatYhAABqIx8AAGokHwAAajcaAABqOBoAAGo5GgAAajoaAABqVx8AAGpYHwAAajsaAABqPBoAAGrbIQAAatwhAABqbR8AAGpuHwAAat8hAABq4CEAAGo9GgAAaj4aAABqPxoAAGpAGgAAauEhAABq4iEAAGrjIQAAauQhAABq/x0AAGoAHgAAakEaAABqQhoAAGpDGgAAakQaAABqRRoAAGpGGgAAakcaAABqSBoAAGrpIQAAauohAABqSRoAAGpKGgAAaqMcAABqpBwAAGqtHQAAaq4dAABqSxoAAGpMGgAAankZAABqehkAAGrvIQAAavAhAABq8SEAAGryIQAAavMhAABq9CEAAGrBHwAAasIfAABq9yEAAGr4IQAAavkhAABq+iEAAGpGUgAAakdSAABqQR4AAGpCHgAAav0hAABq/iEAAGpFIAAAakYgAABqTxoAAGpQGgAAagMiAABqBCIAAGoFIgAAagYiAABqxx8AAGrIHwAAalEaAABqUhoAAGoHIgAAaggiAABqUxoAAGpUGgAAalUaAABqVhoAAGpXGgAAalgaAABqWRoAAGpaGgAAalsaAABqXBoAAGpdGgAAal4aAABqCyIAAGoMIgAAal8aAABqYBoAAGphGgAAamIaAABqESIAAGoSIgAAamMaAABqZBoAAGpcUgAAal1SAABq7RsAAGruGwAAamkaAABqahoAAGo5IAAAajogAABqGSIAAGoaIgAAahsiAABqHCIAAGprGgAAamwaAABqHSIAAGoeIgAAaqEcAABqohwAAGofIgAAaiAiAABq/yAAAGoAIQAAauEWAABq4hYAAGpvGgAAanAaAABqXyIAAGpgIgAAanEaAABqchoAAGpzGgAAanQaAABqdRoAAGp2GgAAaiciAABqKCIAAGopIgAAaioiAABqsSAAAGqyIAAAancaAABqeBoAAGorIgAAaiwiAABqdlIAAGp3UgAAai0iAABqLiIAAGp5GgAAanoaAABqexoAAGp8GgAAakMgAABqRCAAAGp1HAAAanYcAABqfxoAAGqAGgAAaoEaAABqghoAAGrnFgAAaugWAABqzR8AAGrOHwAAah0eAABqHh4AAGqFGgAAaoYaAABqhxoAAGqIGgAAaokaAABqihoAAGozIgAAajQiAABqixoAAGqMGgAAajUiAABqNiIAAGo3IgAAajgiAABqjRoAAGqOGgAAao8aAABqkBoAAGo5IgAAajoiAABqkRoAAGqSGgAAajsiAABqPCIAAGo9IgAAaj4iAABqPyIAAGpAIgAAapMaAABqlBoAAGqVGgAAapYaAABq8RsAAGryGwAAapkaAABqmhoAAGqTHgAAapQeAABqnRoAAGqeGgAAap8aAABqoBoAAGpFIgAAakYiAABqoRoAAGqiGgAAajsYAABqPBgAAGqjGgAAaqQaAABqpRoAAGqmGgAAakkiAABqSiIAAGqnGgAAaqgaAABqSyIAAGpMIgAAaqsaAABqrBoAAGpPIgAAalAiAABqIx0AAGokHQAAatkcAABq2hwAAGpRIgAAalIiAABqbRoAAGpuGgAAalMiAABqVCIAAGqtGgAAaq4aAABq9xsAAGr4GwAAaq8aAABqsBoAAGpXIgAAalgiAABqbSIAAGpuIgAAarEaAABqshoAAGonHQAAaigdAABqsxoAAGq0GgAAarUaAABqthoAAGoLIQAAagwhAABq5R4AAGrmHgAAarcaAABquBoAAGpdIgAAal4iAABqDSEAAGoOIQAAapseAABqnB4AAGr5GwAAavobAABqvRoAAGq+GgAAar8aAABqwBoAAGpjIgAAamQiAABqZSIAAGpmIgAAakEiAABqQiIAAGrrHwAAauwfAABqayIAAGpsIgAAasEaAABqwhoAAGpZIgAAaloiAABqLx0AAGowHQAAam8iAABqcCIAAHVqBTcAAH1y71MAAChqBzcAAGoINwAAagk3AABqCjcAAGp3NwAAang3AABqkTcAAGqSNwAAah03AABqHjcAAGp7NwAAanw3AABqfTcAAGp+NwAAan83AABqgDcAAGqBNwAAaoI3AABqCzcAAGoMNwAAag03AABqDjcAAGoPNwAAahA3AABqETcAAGoSNwAAahM3AABqFDcAAGqHNwAAaog3AABqFTcAAGoWNwAAahc3AABqGDcAAGqLNwAAaow3AABqvTcAAGq+NwAAahk3AABqGjcAAGrpNwAAauo3AABqGzcAAGocNwAAank3AABqejcAAGofNwAAaiA3AABqjzcAAGqQNwAAaiE3AABqIjcAAGpfNwAAamA3AABqIzcAAGokNwAAaiU3AABqJjcAAGonNwAAaig3AABqKTcAAGoqNwAAapM3AABqlDcAAGorNwAAaiw3AABqmTcAAGqaNwAAaps3AABqnDcAAGqdNwAAap43AABqLTcAAGouNwAAaqE3AABqojcAAGqjNwAAaqQ3AABqpTcAAGqmNwAAai83AABqMDcAAGqnNwAAaqg3AABqqTcAAGqqNwAAaqs3AABqrDcAAGqtNwAAaq43AABqhTcAAGqGNwAAajE3AABqMjcAAGrdNwAAat43AABqMzcAAGo0NwAAajc3AABqODcAAGo1NwAAajY3AABqiTcAAGqKNwAAaq83AABqsDcAAGo5NwAAajo3AABqOzcAAGo8NwAAapU3AABqljcAAGq1NwAAarY3AABqPTcAAGo+NwAAapc3AABqmDcAAGq3NwAAarg3AABqPzcAAGpANwAAasc3AABqyDcAAGq7NwAAarw3AABqQTcAAGpCNwAAao03AABqjjcAAGpDNwAAakQ3AABqRTcAAGpGNwAAasE3AABqwjcAAGrVNwAAatY3AABqwzcAAGrENwAAakc3AABqSDcAAGrFNwAAasY3AABqSTcAAGpKNwAAask3AABqyjcAAGpLNwAAakw3AABqyzcAAGrMNwAAarE3AABqsjcAAGpNNwAAak43AABqTzcAAGpQNwAAalE3AABqUjcAAGrNNwAAas43AABqzzcAAGrQNwAAatE3AABq0jcAAGpTNwAAalQ3AABq0zcAAGrUNwAAarM3AABqtDcAAGq/NwAAasA3AABqnzcAAGqgNwAAatc3AABq2DcAAGrZNwAAato3AABq6zcAAGrsNwAAats3AABq3DcAAGpVNwAAalY3AABqVzcAAGpYNwAAalk3AABqWjcAAGpbNwAAalw3AABqXTcAAGpeNwAAamE3AABqYjcAAGpjNwAAamQ3AABqZTcAAGpmNwAAamc3AABqaDcAAGqDNwAAaoQ3AABqaTcAAGpqNwAAauE3AABq4jcAAGprNwAAamw3AABqbTcAAGpuNwAAam83AABqcDcAAGrlNwAAauY3AABq3zcAAGrgNwAAanE3AABqcjcAAGrnNwAAaug3AABqczcAAGp0NwAAark3AABqujcAAGrtNwAAau43AABqdTcAAGp2NwAAavM3AABq9DcAAGrjNwAAauQ3AABq8TcAAGryNwAAau83AABq8DcAAHVqjFIAAH1y8FMAAChq1wYAAGrYBgAAauMGAABq5AYAAGrnBgAAaugGAABq8QsAAGryCwAAaqIMAABqowwAAGr3BgAAavgGAABqGA0AAGoZDQAAav0GAABq/gYAAGrSDgAAatMOAABqAwcAAGoEBwAAagUHAABqBgcAAGoHBwAAaggHAABqDQcAAGoOBwAAag8HAABqEAcAAGoVBwAAahYHAABqpgwAAGqnDAAAah0HAABqHgcAAGofBwAAaiAHAABqIQcAAGoiBwAAaiANAABqIQ0AAGo3BwAAajgHAABqOQcAAGo6BwAAajsHAABqPAcAAGo9BwAAaj4HAABqPwcAAGpABwAAakEHAABqQgcAAGomDQAAaicNAABq2QkAAGraCQAAakcHAABqSAcAAGonDwAAaigPAABqTQcAAGpOBwAAak8HAABqUAcAAGpVBwAAalYHAABqVwcAAGpYBwAAaoELAABqggsAAGpbBwAAalwHAABqYQcAAGpiBwAAahkKAABqGgoAAGpvBwAAanAHAABqcQcAAGpyBwAAanMHAABqdAcAAGp7BwAAanwHAABqfwcAAGqABwAAaoMHAABqhAcAAGplCwAAamYLAABqIQoAAGoiCgAAaokHAABqigcAAGruDwAAau8PAABqjwcAAGqQBwAAapEHAABqkgcAAGqZBwAAapoHAABqoQcAAGqiBwAAag0MAABqDgwAAGqnBwAAaqgHAABqrQcAAGquBwAAaq8HAABqsAcAAGolCgAAaiYKAABqvwcAAGrABwAAasMHAABqxAcAAGroDAAAaukMAABqTA0AAGpNDQAAaukHAABq6gcAAGrzBwAAavQHAABq6g0AAGrrDQAAagoOAABqCw4AAGo+DQAAaj8NAABqlA4AAGqVDgAAagkIAABqCggAAGoLCAAAagwIAABqDwgAAGoQCAAAahEIAABqEggAAGoTCAAAahQIAABqTg0AAGpPDQAAaqMIAABqpAgAAGodCAAAah4IAABqQwgAAGpECAAAaiEIAABqIggAAGojCAAAaiQIAABqJwgAAGooCAAAaikIAABqKggAAGotCAAAai4IAABqOQgAAGo6CAAAakcIAABqSAgAAGpJCAAAakoIAABqzwcAAGrQBwAAak8IAABqUAgAAGpRCAAAalIIAABqWwgAAGpcCAAAaioQAABqKxAAAGpfCAAAamAIAABqYQgAAGpiCAAAamMIAABqZAgAAGr5BgAAavoGAABqAQcAAGoCBwAAamkIAABqaggAAGprCAAAamwIAABqcQgAAGpyCAAAanMIAABqdAgAAGp1CAAAanYIAABqdwgAAGp4CAAAankIAABqeggAAGqDCAAAaoQIAABqiQgAAGqKCAAAasEHAABqwgcAAGqVCAAAapYIAABqlwgAAGqYCAAAaucHAABq6AcAAGrtBwAAau4HAABqpQkAAGqmCQAAaqcIAABqqAgAAGqpCAAAaqoIAABqrQgAAGquCAAAaq8IAABqsAgAAGqxCAAAarIIAABqswgAAGq0CAAAarkIAABquggAAGq7CAAAarwIAABqvQgAAGq+CAAAasEIAABqwggAAGrDCAAAasQIAABqxwgAAGrICAAAaskIAABqyggAAGrLCAAAaswIAABq1wgAAGrYCAAAauEIAABq4ggAAGrlCAAAauYIAABq5wgAAGroCAAAaukIAABq6ggAAGrrCAAAauwIAABq7wgAAGrwCAAAavUIAABq9ggAAGr5CAAAavoIAABq/wgAAGoACQAAalgNAABqWQ0AAGoDCQAAagQJAABqCwkAAGoMCQAAahEJAABqEgkAAGotCgAAai4KAABqHQkAAGoeCQAAah8JAABqIAkAAGpJCwAAakoLAABqGwoAAGocCgAAaikJAABqKgkAAGorCQAAaiwJAABq8woAAGr0CgAAaj0JAABqPgkAAGpFCQAAakYJAABqRwkAAGpICQAAakkJAABqSgkAAGpLCQAAakwJAABqhA0AAGqFDQAAak8JAABqUAkAAGpTCQAAalQJAABqaQoAAGpqCgAAakEKAABqQgoAAGq2DAAAarcMAABqaQkAAGpqCQAAamsJAABqbAkAAGpvCQAAanAJAABqcQkAAGpyCQAAauQMAABq5QwAAGp1CQAAanYJAABqeQkAAGp6CQAAansJAABqfAkAAGqrCAAAaqwIAABqhwkAAGqICQAAaokJAABqigkAAGqPCQAAapAJAABqkQkAAGqSCQAAapsJAABqnAkAAGqfCQAAaqAJAABqowkAAGqkCQAAaqkJAABqqgkAAGrCDAAAasMMAABqcA0AAGpxDQAAarMJAABqtAkAAGq9CQAAar4JAABqwwkAAGrECQAAascJAABqyAkAAGrNCQAAas4JAABqzwkAAGrQCQAAatUJAABq1gkAAGqiDgAAaqMOAABq3wkAAGrgCQAAaqAPAABqoQ8AAGrlCQAAauYJAABq5wkAAGroCQAAan4NAABqfw0AAGrtCQAAau4JAABq8QkAAGryCQAAavMJAABq9AkAAGqADQAAaoENAABqAQoAAGoCCgAAagUKAABqBgoAAGolBwAAaiYHAABqDwoAAGoQCgAAaokKAABqigoAAGoXCgAAahgKAABqaQcAAGpqBwAAah8KAABqIAoAAGrjBwAAauQHAABqJwoAAGooCgAAaqAMAABqoQwAAGroDgAAaukOAABqMQoAAGoyCgAAajMKAABqNAoAAGo1CgAAajYKAABqNwoAAGo4CgAAahkIAABqGggAAGo9CgAAaj4KAABqRQoAAGpGCgAAakcKAABqSAoAAGqBBwAAaoIHAABqVQoAAGpWCgAAalsKAABqXAoAAGpdCgAAal4KAABqNwkAAGo4CQAAamEKAABqYgoAAGrFCAAAasYIAABqWQkAAGpaCQAAamsKAABqbAoAAGptCgAAam4KAABqcQoAAGpyCgAAancKAABqeAoAAGp5CgAAanoKAABq1wkAAGrYCQAAaoEKAABqggoAAGqFCgAAaoYKAABqhwoAAGqICgAAaosKAABqjAoAAGqPCgAAapAKAABqkQoAAGqSCgAAapMKAABqlAoAAGqfCgAAaqAKAABqTwoAAGpQCgAAap0KAABqngoAAGo1BwAAajYHAABqoQoAAGqiCgAAagUIAABqBggAAGqlCgAAaqYKAABq1g4AAGrXDgAAapcJAABqmAkAAGqzCgAAarQKAABqtwoAAGq4CgAAarkKAABqugoAAGq/CgAAasAKAABqwQoAAGrCCgAAasMKAABqxAoAAGrFCgAAasYKAABqzQoAAGrOCgAAasULAABqxgsAAGrVCgAAatYKAABqug0AAGq7DQAAatsKAABq3AoAAGrdCgAAat4KAABq4QoAAGriCgAAahsMAABqHAwAAGrrCgAAauwKAABq7QoAAGruCgAAal4MAABqXwwAAGr1CgAAavYKAABq9woAAGr4CgAAavkKAABq+goAAGp5BwAAanoHAABqBwsAAGoICwAAagkLAABqCgsAAGoADQAAagENAABqrwoAAGqwCgAAahMLAABqFAsAAGozDwAAajQPAABqFwsAAGoYCwAAahkLAABqGgsAAGojCwAAaiQLAABqJQsAAGomCwAAaicLAABqKAsAAGq2DQAAarcNAABqLwsAAGowCwAAajMLAABqNAsAAGo7CwAAajwLAABqPwsAAGpACwAAakELAABqQgsAAGpDCwAAakQLAABq7wYAAGrwBgAAak0LAABqTgsAAGpTCwAAalQLAABq7g0AAGrvDQAAamcLAABqaAsAAGohCwAAaiILAABqQA4AAGpBDgAAam8LAABqcAsAAGpxCwAAanILAABqcwsAAGp0CwAAauQOAABq5Q4AAGp/CwAAaoALAABqgwsAAGqECwAAao0LAABqjgsAAGqRCwAAapILAABqlQsAAGqWCwAAapkLAABqmgsAAGqbCwAAapwLAABqRQcAAGpGBwAAamcHAABqaAcAAGo1CAAAajYIAABqpwsAAGqoCwAAaqkLAABqqgsAAGqrCwAAaqwLAABq1wcAAGrYBwAAarELAABqsgsAAGqzCwAAarQLAABqtQsAAGq2CwAAarcLAABquAsAAGq5CwAAaroLAABqEQsAAGoSCwAAascLAABqyAsAAGqEDgAAaoUOAABqzQsAAGrOCwAAatMLAABq1AsAAGoVCQAAahYJAABqJwkAAGooCQAAat0LAABq3gsAAGo7CQAAajwJAABq4QsAAGriCwAAauULAABq5gsAAGrnCwAAaugLAABq6QsAAGrqCwAAausLAABq7AsAAGq1CQAAarYJAABq9QsAAGr2CwAAav0LAABq/gsAAGoDDAAAagQMAABqBwwAAGoIDAAAagsMAABqDAwAAGoTDAAAahQMAABq3g0AAGrfDQAAah8MAABqIAwAAGoNCwAAag4LAABqJQwAAGomDAAAaikMAABqKgwAAGorDAAAaiwMAABqLwwAAGowDAAAajEMAABqMgwAAGqfCwAAaqALAABqOQwAAGo6DAAAajsMAABqPAwAAGo/DAAAakAMAABqklIAAGpFDAAAakgMAABqSQwAAGoFDAAAagYMAABqMwwAAGo0DAAAaloMAABqWwwAAGpcDAAAal0MAABqQQkAAGpCCQAAamQMAABqZQwAAGp4DAAAankMAABqVQkAAGpWCQAAanAMAABqcQwAAGpyDAAAanMMAABqdAwAAGp1DAAAakkKAABqSgoAAGp8DAAAan0MAABqfgwAAGp/DAAAamAOAABqYQ4AAGqEDAAAaoUMAABqhgwAAGqHDAAAaooMAABqiwwAAGqMDAAAao0MAABqmgwAAGqbDAAAavsKAABq/AoAAGqkDAAAaqUMAABq/QgAAGr+CAAAaqgMAABqqQwAAGquDAAAaq8MAABqsAwAAGqxDAAAarIMAABqswwAAGq0DAAAarUMAABquAwAAGq5DAAAamoNAABqaw0AAGq6DAAAarsMAABqcwkAAGp0CQAAasAMAABqwQwAAGqSDgAAapMOAABq0gwAAGrTDAAAatQMAABq1QwAAGrYDAAAatkMAABq3AwAAGrdDAAAat4MAABq3wwAAGqMDwAAao0PAABq7gwAAGrvDAAAavIMAABq8wwAAGpHCwAAakgLAABqAg0AAGoDDQAAagYNAABqBw0AAGoMDQAAag0NAABqDg0AAGoPDQAAahANAABqEQ0AAGrzBgAAavQGAABqKwsAAGosCwAAahoNAABqGw0AAGocDQAAah0NAABqJwcAAGooBwAAaiINAABqIw0AAGpDBwAAakQHAABqZQgAAGpmCAAAai4NAABqLw0AAGo2DQAAajcNAABqWw8AAGpcDwAAajoNAABqOw0AAGoUDgAAahUOAABqowsAAGqkCwAAalANAABqUQ0AAGpUDQAAalUNAABqHA4AAGodDgAAalwNAABqXQ0AAGpkDQAAamUNAABqIA4AAGohDgAAamwNAABqbQ0AAGq/CAAAasAIAABquwkAAGq8CQAAanYNAABqdw0AAGp8DQAAan0NAABq0wcAAGrUBwAAajkKAABqOgoAAGqMDQAAao0NAABqlA0AAGqVDQAAapYNAABqlw0AAGrZCAAAatoIAABqLA4AAGotDgAAapoNAABqmw0AAGqcDQAAap0NAABqqwoAAGqsCgAAai4OAABqLw4AAGqQDwAAapEPAABqvQoAAGq+CgAAaqoNAABqqw0AAGqyDQAAarMNAABqLQsAAGouCwAAal4PAABqXw8AAGrADQAAasENAABqwg0AAGrDDQAAasgNAABqyQ0AAGrMDQAAas0NAABqzg0AAGrPDQAAatsLAABq3AsAAGrWDQAAatcNAABq2A0AAGrZDQAAatoNAABq2w0AAGrcDQAAat0NAABqnA4AAGqdDgAAauANAABq4Q0AAGriDQAAauMNAABq5A0AAGrlDQAAauYNAABq5w0AAGroDQAAaukNAABq7A0AAGrtDQAAavINAABq8w0AAGoiDgAAaiMOAABq+A0AAGr5DQAAavwNAABq/Q0AAGoCDgAAagMOAABq8AwAAGrxDAAAakQOAABqRQ4AAGo8DQAAaj0NAABqRA0AAGpFDQAAahgOAABqGQ4AAGoaDgAAahsOAABqHg4AAGofDgAAaiQOAABqJQ4AAGplCgAAamYKAABq2wgAAGrcCAAAaqwNAABqrQ0AAGoyDgAAajMOAABqNA4AAGo1DgAAajYOAABqNw4AAGo6DgAAajsOAABqJwwAAGooDAAAancJAABqeAkAAGpGDgAAakcOAABqSg4AAGpLDgAAalIOAABqUw4AAGqODgAAao8OAABqWA4AAGpZDgAAaloOAABqWw4AAGpcDgAAal0OAABqYg4AAGpjDgAAamYOAABqZw4AAGpoDgAAamkOAABqYA8AAGphDwAAamwPAABqbQ8AAGpwDgAAanEOAABqcg4AAGpzDgAAanQOAABqdQ4AAGp+DgAAan8OAABq0g8AAGrTDwAAatgPAABq2Q8AAGqGDgAAaocOAABqiA4AAGqJDgAAaooOAABqiw4AAGqMDgAAao0OAABq3wYAAGrgBgAAau0GAABq7gYAAGo/CAAAakAIAABqpA4AAGqlDgAAahkHAABqGgcAAGo3DwAAajgPAABqrA4AAGqtDgAAaq4OAABqrw4AAGqyDgAAarMOAABqtg4AAGq3DgAAarwOAABqvQ4AAGq+DgAAar8OAABqjQcAAGqOBwAAaksLAABqTAsAAGrGDgAAascOAABqyA4AAGrJDgAAarkHAABqugcAAGrQDgAAatEOAABq1A4AAGrVDgAAatgOAABq2Q4AAGraDgAAatsOAABq3A4AAGrdDgAAak0IAABqTggAAGrmDgAAaucOAABqsg8AAGqzDwAAansIAABqfAgAAGruDgAAau8OAABq8g4AAGrzDgAAaqMHAABqpAcAAGoNCAAAag4IAABq/A4AAGr9DgAAagAPAABqAQ8AAGoHCQAAaggJAABqBg8AAGoHDwAAagoPAABqCw8AAGqOUgAAag4PAABqEQ8AAGoSDwAAahcPAABqGA8AAGoIDgAAagkOAABqGw8AAGocDwAAasEJAABqwgkAAGofDwAAaiAPAABqIQ8AAGoiDwAAai0PAABqLg8AAGovDwAAajAPAABqhwcAAGqIBwAAajkPAABqOg8AAGo7DwAAajwPAABqPQ8AAGo+DwAAakMPAABqRA8AAGpHDwAAakgPAABq5woAAGroCgAAaksPAABqTA8AAGr/CgAAagALAABqFQsAAGoWCwAAalMPAABqVA8AAGrhBgAAauIGAABq9wsAAGr4CwAAamoPAABqaw8AAGqjCgAAaqQKAABqdA8AAGp1DwAAanYPAABqdw8AAGrJCwAAasoLAABqgA8AAGqBDwAAaoYPAABqhw8AAGrdCAAAat4IAABqTA4AAGpNDgAAalcKAABqWAoAAGqUDwAAapUPAABqlg8AAGqXDwAAapoPAABqmw8AAGqcDwAAap0PAABq6g8AAGrrDwAAaqQPAABqpQ8AAGqmDwAAaqcPAABqqA8AAGqpDwAAaqoPAABqqw8AAGqsDwAAaq0PAABqSwoAAGpMCgAAamYNAABqZw0AAGq2DwAAarcPAABqvA8AAGq9DwAAar4PAABqvw8AAGrEDwAAasUPAABqxg8AAGrHDwAAakkPAABqSg8AAGrKDwAAassPAABqRQsAAGpGCwAAatQPAABq1Q8AAGr2DQAAavcNAABqwA8AAGrBDwAAatoPAABq2w8AAGreDwAAat8PAABq4A8AAGrhDwAAauIPAABq4w8AAGrkDwAAauUPAABqNwgAAGo4CAAAaugPAABq6Q8AAGrsDwAAau0PAABqhwgAAGqICAAAavQPAABq9Q8AAGr2DwAAavcPAABq+g4AAGr7DgAAaikPAABqKg8AAGoCEAAAagMQAABqBBAAAGoFEAAAanIPAABqcw8AAGoOEAAAag8QAABqFBAAAGoVEAAAahYQAABqFxAAAGoYEAAAahkQAABqJBAAAGolEAAAaiYQAABqJxAAAGooEAAAaikQAABq1QYAAGrWBgAAatkGAABq2gYAAGrbBgAAatwGAABq3QYAAGreBgAAauUGAABq5gYAAGrrBgAAauwGAABq7AwAAGrtDAAAavEGAABq8gYAAGqLBwAAaowHAABq9QYAAGr2BgAAap4OAABqnw4AAGr7BgAAavwGAABq/wYAAGoABwAAamcIAABqaAgAAGoJBwAAagoHAABqCwcAAGoMBwAAah8IAABqIAgAAGoRBwAAahIHAABqkFIAAGqRUgAAahcHAABqGAcAAGqmDgAAaqcOAABqGwcAAGocBwAAaiMHAABqJAcAAGopBwAAaioHAABqKwcAAGosBwAAai0HAABqLgcAAGovBwAAajAHAABqMQcAAGoyBwAAajMHAABqNAcAAGrGDQAAascNAABqnQsAAGqeCwAAauEJAABq4gkAAGrKDAAAassMAABqUQcAAGpSBwAAatkLAABq2gsAAGpZBwAAaloHAABqXQcAAGpeBwAAal8HAABqYAcAAGpjBwAAamQHAABqZQcAAGpmBwAAaqELAABqogsAAGprBwAAamwHAABqbQcAAGpuBwAAauUKAABq5goAAGoFCwAAagYLAABqdQcAAGp2BwAAancHAABqeAcAAGq6DwAAarsPAABqJQkAAGomCQAAaoUHAABqhgcAAGrFBwAAasYHAABquwsAAGq8CwAAapMHAABqlAcAAGqVBwAAapYHAABqmwcAAGqcBwAAap0HAABqngcAAGqfBwAAaqAHAABqpQcAAGqmBwAAaqkHAABqqgcAAGqrBwAAaqwHAABqsQcAAGqyBwAAarUHAABqtgcAAGq3BwAAargHAABqyg4AAGrLDgAAar0HAABqvgcAAGqRCAAAapIIAABqxwcAAGrIBwAAaskHAABqygcAAGrLBwAAaswHAABqzg4AAGrPDgAAatEHAABq0gcAAGrVBwAAatYHAABq3QkAAGreCQAAatsHAABq3AcAAGrfBwAAauAHAABq4QcAAGriBwAAauUHAABq5gcAAGqZCAAAapoIAABq6wcAAGrsBwAAapsIAABqnAgAAGrvBwAAavAHAABq8QcAAGryBwAAavUHAABq9gcAAGr9BwAAav4HAABqnQgAAGqeCAAAagEIAABqAggAAGpuDwAAam8PAABqFQgAAGoWCAAAasAOAABqwQ4AAGobCAAAahwIAABqJQgAAGomCAAAaisIAABqLAgAAGovCAAAajAIAABqMwgAAGo0CAAAargOAABquQ4AAGo9CAAAaj4IAABqQQgAAGpCCAAAakUIAABqRggAAGpLCAAAakwIAABqzA8AAGrNDwAAalMIAABqVAgAAGpVCAAAalYIAABqVwgAAGpYCAAAalkIAABqWggAAGpdCAAAal4IAABqbQgAAGpuCAAAam8IAABqcAgAAGpLBwAAakwHAABqfQgAAGp+CAAAaoEIAABqgggAAGqFCAAAaoYIAABqiwgAAGqMCAAAapMIAABqlAgAAGrdBwAAat4HAABqYwkAAGpkCQAAav8HAABqAAgAAGqfCAAAaqAIAABqoQgAAGqiCAAAaqUIAABqpggAAGq8DQAAar0NAABqtQgAAGq2CAAAarcIAABquAgAAGrqDAAAausMAABq+A4AAGr5DgAAas0IAABqzggAAGrPCAAAatAIAABq0QgAAGrSCAAAatMIAABq1AgAAGrfCAAAauAIAABqgwkAAGqECQAAauMIAABq5AgAAGrtCAAAau4IAABqLwoAAGowCgAAavEIAABq8ggAAGrzCAAAavQIAABq9wgAAGr4CAAAavsIAABq/AgAAGoBDAAAagIMAABqBQkAAGoGCQAAag8JAABqEAkAAGoRCgAAahIKAABqFwkAAGoYCQAAahkJAABqGgkAAGobCQAAahwJAABqIwkAAGokCQAAajEJAABqMgkAAGotCQAAai4JAABqMwkAAGo0CQAAajUJAABqNgkAAGo5CQAAajoJAABq3wsAAGrgCwAAasQMAABqxQwAAGo/CQAAakAJAABqQwkAAGpECQAAahEMAABqEgwAAGpXCQAAalgJAABqWwkAAGpcCQAAal0JAABqXgkAAGpfCQAAamAJAABqYQkAAGpiCQAAamUJAABqZgkAAGpnCQAAamgJAABqfQkAAGp+CQAAan8JAABqgAkAAGqBCQAAaoIJAABqUg0AAGpTDQAAamINAABqYw0AAGqLCQAAaowJAABqjQkAAGqOCQAAapMJAABqlAkAAGqVCQAAapYJAABqmQkAAGqaCQAAaqEJAABqogkAAGoZDwAAahoPAABq9A4AAGr1DgAAaq0JAABqrgkAAGqvCQAAarAJAABqVg4AAGpXDgAAarcJAABquAkAAGq5CQAAaroJAABqmA4AAGqZDgAAah0PAABqHg8AAGrFCQAAasYJAABqyQkAAGrKCQAAahMPAABqFA8AAGrRCQAAatIJAABqWg0AAGpbDQAAarAPAABqsQ8AAGqLCwAAaowLAABq2wkAAGrcCQAAau8JAABq8AkAAGr1CQAAavYJAABq9wkAAGr4CQAAavkJAABq+gkAAGr7CQAAavwJAABq/QkAAGr+CQAAaukGAABq6gYAAGoDCgAAagQKAABqBwoAAGoICgAAagkKAABqCgoAAGoLCgAAagwKAABqDQoAAGoOCgAAalMHAABqVAcAAGodCgAAah4KAABqIwoAAGokCgAAarMHAABqtAcAAGopCgAAaioKAABqKwoAAGosCgAAargNAABquQ0AAGr7BwAAavwHAABq4wkAAGrkCQAAajsKAABqPAoAAGo/CgAAakAKAABqBA4AAGoFDgAAakMKAABqRAoAAGqJCwAAaooLAABqTQoAAGpOCgAAalEKAABqUgoAAGpZCgAAaloKAABqXwoAAGpgCgAAamMKAABqZAoAAGpnCgAAamgKAABqbQkAAGpuCQAAam8KAABqcAoAAGpzCgAAanQKAABqdQoAAGp2CgAAap0JAABqngkAAGp9CgAAan4KAABqgwoAAGqECgAAauYPAABq5w8AAGoTCgAAahQKAABqlQoAAGqWCgAAapcKAABqmAoAAGqZCgAAapoKAABqmwoAAGqcCgAAan0HAABqfgcAAGqnCgAAaqgKAABqqQoAAGqqCgAAaq0KAABqrgoAAGqxCgAAarIKAABqtQoAAGq2CgAAarsKAABqvAoAAGrHCgAAasgKAABqyQoAAGrKCgAAassKAABqzAoAAGrPCgAAatAKAABqvwkAAGrACQAAatMKAABq1AoAAGrODwAAas8PAABq2QoAAGraCgAAavsLAABq/AsAAGrjCgAAauQKAABqgAwAAGqBDAAAaukKAABq6goAAGrvCgAAavAKAABqqgwAAGqrDAAAak0PAABqTg8AAGoBCwAAagILAABqAwsAAGoECwAAagsLAABqDAsAAGojDAAAaiQMAABqDwsAAGoQCwAAah0LAABqHgsAAGpADQAAakENAABqGwsAAGocCwAAaikLAABqKgsAAGo1CwAAajYLAABqNwsAAGo4CwAAajkLAABqOgsAAGo9CwAAaj4LAABq9wcAAGr4BwAAarsHAABqvAcAAGqxCQAAarIJAABqTwsAAGpQCwAAalELAABqUgsAAGpXCwAAalgLAABqWQsAAGpaCwAAalsLAABqXAsAAGpdCwAAal4LAABqXwsAAGpgCwAAamELAABqYgsAAGpjCwAAamQLAABqQg0AAGpDDQAAamkLAABqagsAAGprCwAAamwLAABq1QsAAGrWCwAAanULAABqdgsAAGp3CwAAangLAABqeQsAAGp6CwAAansLAABqfAsAAGp9CwAAan4LAABqhQsAAGqGCwAAao8LAABqkAsAAGqTCwAAapQLAABqlwsAAGqYCwAAaqULAABqpgsAAGqtCwAAaq4LAABqrwsAAGqwCwAAahcIAABqGAgAAGoxCAAAajIIAABqUQkAAGpSCQAAasMLAABqxAsAAGp8DwAAan0PAABqywsAAGrMCwAAas8LAABq0AsAAGrRCwAAatILAABqDQkAAGoOCQAAatcLAABq2AsAAGovCQAAajAJAABq6wkAAGrsCQAAagkJAABqCgkAAGpTCgAAalQKAABq7QsAAGruCwAAau8LAABq8AsAAGrzCwAAavQLAABq+QsAAGr6CwAAav8LAABqAAwAAGoJDAAAagoMAABqDwwAAGoQDAAAahUMAABqFgwAAGq9CwAAar4LAABqGQwAAGoaDAAAaooPAABqiw8AAGotDAAAai4MAABqOA4AAGo5DgAAalYMAABqVwwAAGo1DAAAajYMAABqNwwAAGo4DAAAav8JAABqAAoAAGo9DAAAaj4MAABqQwwAAGpEDAAAakYMAABqRwwAAGpKDAAAaksMAABqTgwAAGpPDAAAalAMAABqUQwAAGpSDAAAalMMAABqVAwAAGpVDAAAalgMAABqWQwAAGpgDAAAamEMAABqTAwAAGpNDAAAamIMAABqYwwAAGpmDAAAamcMAABqaAwAAGppDAAAaqsJAABqrAkAAGo7CAAAajwIAABqbgwAAGpvDAAAapgPAABqmQ8AAGp2DAAAancMAABqegwAAGp7DAAAaoIMAABqgwwAAGosDQAAai0NAABqiAwAAGqJDAAAao4MAABqjwwAAGqQDAAAapEMAABqkgwAAGqTDAAAapQMAABqlQwAAGqWDAAAapcMAABqmAwAAGqZDAAAatEKAABq0goAAGqcDAAAap0MAABqIQkAAGoiCQAAamoMAABqawwAAGqsDAAAaq0MAABqeg8AAGp7DwAAar4MAABqvwwAAGrGDAAAascMAABqlwcAAGqYBwAAamwMAABqbQwAAGrMDAAAas0MAABq0AwAAGrRDAAAatYMAABq1wwAAGraDAAAatsMAABqMQ8AAGoyDwAAauAMAABq4QwAAGriDAAAauMMAABq5gwAAGrnDAAAansKAABqfAoAAGr0DAAAavUMAABq9gwAAGr3DAAAavgMAABq+QwAAGr6DAAAavsMAABq/AwAAGr9DAAAagQNAABqBQ0AAGoIDQAAagkNAABqCg0AAGoLDQAAahINAABqEw0AAGoUDQAAahUNAABqFg0AAGoXDQAAdShqvwsAAGrACwAAah4NAABqHw0AAGokDQAAaiUNAABqKA0AAGopDQAAajANAABqMQ0AAGoyDQAAajMNAABqNA0AAGo1DQAAajgNAABqOQ0AAGoDCAAAagQIAABqVQsAAGpWCwAAakgNAABqSQ0AAGrVCAAAatYIAABqMQsAAGoyCwAAan8IAABqgAgAAGqFCQAAaoYJAABqAQkAAGoCCQAAahMJAABqFAkAAGpeDQAAal8NAABqYA0AAGphDQAAak0JAABqTgkAAGrfCgAAauAKAABqaA0AAGppDQAAakoNAABqSw0AAGpuDQAAam8NAABqpwkAAGqoCQAAanQNAABqdQ0AAGqeDAAAap8MAABqeg0AAGp7DQAAaukJAABq6gkAAGqNCgAAao4KAABqhg0AAGqHDQAAao4NAABqjw0AAGqQDQAAapENAABqkg0AAGqTDQAAapgNAABqmQ0AAGqeDQAAap8NAABqoA0AAGqhDQAAaqQNAABqpQ0AAGqmDQAAaqcNAABqqA0AAGqpDQAAatcKAABq2AoAAGrTCQAAatQJAABqrg0AAGqvDQAAarANAABqsQ0AAGqNCAAAao4IAABqtA0AAGq1DQAAar4NAABqvw0AAGrEDQAAasUNAABq/gwAAGr/DAAAatANAABq0Q0AAGrSDQAAatMNAABq1A0AAGrVDQAAah0MAABqHgwAAGqPCAAAapAIAABq8A0AAGrxDQAAavQNAABq9Q0AAGr+DQAAav8NAABqAA4AAGoBDgAAagYOAABqBw4AAGoMDgAAag0OAABqDg4AAGoPDgAAahAOAABqEQ4AAGoSDgAAahMOAABqVg0AAGpXDQAAahcMAABqGAwAAGr9CgAAav4KAABqJg4AAGonDgAAaooNAABqiw0AAGoqDgAAaisOAABqvAwAAGq9DAAAaqINAABqow0AAGowDgAAajEOAABq+g0AAGr7DQAAaj4OAABqPw4AAGpCDgAAakMOAABqFg4AAGoXDgAAakgOAABqSQ4AAGpODgAAak8OAABqUA4AAGpRDgAAalQOAABqVQ4AAGpeDgAAal8OAABqZA4AAGplDgAAamoOAABqaw4AAGpsDgAAam0OAABqbg4AAGpvDgAAakEMAABqQgwAAGp2DgAAancOAABqeA4AAGp5DgAAanoOAABqew4AAGp8DgAAan0OAABquA8AAGq5DwAAaoAOAABqgQ4AAGqCDgAAaoMOAABqkA4AAGqRDgAAasgMAABqyQwAAGqWDgAAapcOAABqwQsAAGrCCwAAah8LAABqIAsAAGqgDgAAaqEOAABqqA4AAGqpDgAAaqoOAABqqw4AAGpyDQAAanMNAABqSQcAAGpKBwAAaigOAABqKQ4AAGq6DgAAarsOAABqwg4AAGrDDgAAasQOAABqxQ4AAGrMDgAAas0OAABqzQcAAGrOBwAAatkHAABq2gcAAGp4DQAAankNAABq3g4AAGrfDgAAauAOAABq4Q4AAGriDgAAauMOAABqQQ8AAGpCDwAAahMHAABqFAcAAGq0DgAAarUOAABq6g4AAGrrDgAAauwOAABq7Q4AAGrwDgAAavEOAABqywkAAGrMCQAAavYOAABq9w4AAGr4DwAAavkPAABq/g4AAGr/DgAAagIPAABqAw8AAGoEDwAAagUPAABqCA8AAGoJDwAAag8PAABqEA8AAGoVDwAAahYPAABq/g8AAGr/DwAAaiUPAABqJg8AAGp/CgAAaoAKAABqKw8AAGosDwAAajUPAABqNg8AAGo/DwAAakAPAABqRQ8AAGpGDwAAagwPAABqDQ8AAGpPDwAAalAPAABqUQ8AAGpSDwAAapoOAABqmw4AAGpVDwAAalYPAABqVw8AAGpYDwAAalkPAABqWg8AAGqPUgAAal0PAABq8QoAAGryCgAAamIPAABqYw8AAGpkDwAAamUPAABqZg8AAGpnDwAAagoQAABqCxAAAGpwDwAAanEPAABqeA8AAGp5DwAAan4PAABqfw8AAGrjCwAAauQLAABqgg8AAGqDDwAAaoQPAABqhQ8AAGqIDwAAaokPAABqIQwAAGoiDAAAaocLAABqiAsAAGqODwAAao8PAABqkg8AAGqTDwAAaogNAABqiQ0AAGqeDwAAap8PAABqog8AAGqjDwAAas4MAABqzwwAAGquDwAAaq8PAABqRg0AAGpHDQAAarQPAABqtQ8AAGptCwAAam4LAABqwg8AAGrDDwAAaoINAABqgw0AAGrIDwAAaskPAABqyg0AAGrLDQAAatAPAABq0Q8AAGrWDwAAatcPAABq3A8AAGrdDwAAajwOAABqPQ4AAGqwDgAAarEOAABq+QcAAGr6BwAAagcIAABqCAgAAGrwDwAAavEPAABq8g8AAGrzDwAAaioNAABqKw0AAGr6DwAAavsPAABq/A8AAGr9DwAAaiMPAABqJA8AAGoAEAAAagEQAABqBhAAAGoHEAAAaggQAABqCRAAAGpoDwAAamkPAABqDBAAAGoNEAAAahUKAABqFgoAAGoQEAAAahEQAABqEhAAAGoTEAAAahoQAABqGxAAAGocEAAAah0QAABqHhAAAGofEAAAaiAQAABqIRAAAGoiEAAAaiMQAAB1anYCAAB9cvFTAAAoangCAABqeQIAAGp8AgAAan0CAABqegIAAGp7AgAAaoACAABqgQIAAGqCAgAAaoMCAABqfgIAAGp/AgAAaoYCAABqhwIAAGqIAgAAaokCAABqigIAAGqLAgAAaowCAABqjQIAAGqOAgAAao8CAABqkgIAAGqTAgAAapACAABqkQIAAGqEAgAAaoUCAAB1aq1SAAB9cvJTAAAoalUqAABqVioAAGqkKAAAaqUoAABqpigAAGqnKAAAalkqAABqWioAAGp5KQAAanopAABqqCgAAGqpKAAAaqooAABqqygAAGqsKAAAaq0oAABqrigAAGqvKAAAarAoAABqsSgAAGqyKAAAarMoAABqVyoAAGpYKgAAarQoAABqtSgAAGrhUgAAauJSAABqYSoAAGpiKgAAarYoAABqtygAAGplKgAAamYqAABquCgAAGq5KAAAarooAABquygAAGq8KAAAar0oAABqvigAAGq/KAAAasAoAABqwSgAAGppKgAAamoqAABqayoAAGpsKgAAam0qAABqbioAAGpvKgAAanAqAABqzVIAAGrOUgAAasIoAABqwygAAGrEKAAAasUoAABqxigAAGrHKAAAanMqAABqdCoAAGrIKAAAaskoAABqdSoAAGp2KgAAasooAABqyygAAGp5KgAAanoqAABqzCgAAGrNKAAAas4oAABqzygAAGp7KgAAanwqAABq11IAAGrYUgAAas8pAABq0CkAAGrQKAAAatEoAABqvysAAGrAKwAAatIoAABq0ygAAGrUKAAAatUoAABq1igAAGrXKAAAaoEqAABqgioAAGrYKAAAatkoAABqgyoAAGqEKgAAaoUqAABqhioAAGraKAAAatsoAABqhyoAAGqIKgAAatwoAABq3SgAAGreKAAAat8oAABq4CgAAGrhKAAAauIoAABq4ygAAGrxUgAAavJSAABq8SoAAGryKgAAauQoAABq5SgAAGqpKQAAaqopAABq5igAAGrnKAAAavlSAABq+lIAAGrDUgAAasRSAABq6igAAGrrKAAAauwoAABq7SgAAGruKAAAau8oAABqOysAAGo8KwAAavAoAABq8SgAAGryKAAAavMoAABqXyoAAGpgKgAAatMpAABq1CkAAGr0KAAAavUoAABq9igAAGr3KAAAavgoAABq+SgAAGpbKgAAalwqAABq+igAAGr7KAAAah8rAABqICsAAGqZKgAAapoqAABqmyoAAGqcKgAAavwoAABq/SgAAGrBUgAAasJSAABq/igAAGr/KAAAagApAABqASkAAGohKwAAaiIrAABqAikAAGoDKQAAap8qAABqoCoAAFgBAAAAV2oEKQAAanEqAABqcioAAGpdKgAAal4qAABqBSkAAGoGKQAAagcpAABqCCkAAGoJKQAAagopAABqCykAAGoMKQAAag0pAABqDikAAGoPKQAAahApAABqoSoAAGqiKgAAao0qAABqjioAAGqlKgAAaqYqAABqpyoAAGqoKgAAaqkqAABqqioAAGqtKgAAaq4qAABqESkAAGoSKQAAaqsqAABqrCoAAGoTKQAAahQpAABqcysAAGp0KwAAahUpAABqFikAAGoXKQAAahgpAABqGSkAAGoaKQAAaulSAABq6lIAAGobKQAAahwpAABqsyoAAGq0KgAAah0pAABqHikAAGq1KgAAarYqAABqtyoAAGq4KgAAah8pAABqICkAAGpnKgAAamgqAABquSoAAGq6KgAAarsqAABqvCoAAGq9KgAAar4qAABqjykAAGqQKQAAagFTAABqAlMAAGohKQAAaiIpAABqA1MAAGoEUwAAaiMpAABqJCkAAGolKQAAaiYpAABqfyoAAGqAKgAAaicpAABqKCkAAGopKQAAaiopAABqKykAAGosKQAAai0pAABqLikAAGq/KgAAasAqAABqLykAAGowKQAAajEpAABqMikAAGp7KwAAanwrAABqMykAAGo0KQAAasMqAABqxCoAAGo1KQAAajYpAABqv1IAAGrAUgAAasUqAABqxioAAGoLKwAAagwrAABqNykAAGo4KQAAaskqAABqyioAAGo5KQAAajopAABqOykAAGo8KQAAas0qAABqzioAAGo9KQAAaj4pAABqzyoAAGrQKgAAaj8pAABqQCkAAGrRKgAAatIqAABqQSkAAGpCKQAAakMpAABqRCkAAGpFKQAAakYpAABqRykAAGpIKQAAatcqAABq2CoAAGpJKQAAakopAABqSykAAGpMKQAAak0pAABqTikAAGrZKgAAatoqAABq4SkAAGriKQAAalEpAABqUikAAGpTKQAAalQpAABq2yoAAGrcKgAAat9SAABq4FIAAGrfKgAAauAqAABq4SoAAGriKgAAalUpAABqVikAAGpXKQAAalgpAABqdyoAAGp4KgAAalkpAABqWikAAGrlKgAAauYqAABqWykAAGpcKQAAal0pAABqXikAAGrnKgAAaugqAABqaysAAGpsKwAAaukqAABq6ioAAGrrKgAAauwqAABqsVIAAGqyUgAAavtSAABq/FIAAGrRKwAAatIrAABq7yoAAGrwKgAAagVTAABqBlMAAGpfKQAAamApAABqYSkAAGpiKQAAatUrAABq1isAAGrzKgAAavQqAABq9SoAAGr2KgAAahcrAABqGCsAAGpjKQAAamQpAABqZSkAAGpmKQAAajMrAABqNCsAAGqPKgAAapAqAABq+SoAAGr6KgAAamkpAABqaikAAGpnKQAAamgpAABqNSsAAGo2KwAAarVSAABqtlIAAGq5UgAAarpSAABqaykAAGpsKQAAavsqAABq/CoAAGp1KwAAanYrAABqz1IAAGrQUgAAarkrAABquisAAGptKQAAam4pAABqNysAAGo4KwAAav0qAABq/ioAAGrHUgAAashSAABq2SsAAGraKwAAav8qAABqACsAAGp9KgAAan4qAABqASsAAGoCKwAAam8pAABqcCkAAGoDKwAAagQrAABqBSsAAGoGKwAAanEpAABqcikAAGpzKQAAanQpAABqhysAAGqIKwAAanUpAABqdikAAGp3KQAAangpAABq9yoAAGr4KgAAagcrAABqCCsAAGp7KQAAanwpAABqfSkAAGp+KQAAaskrAABqyisAAGrnUgAAauhSAABq61IAAGrsUgAAau9SAABq8FIAAGoPKwAAahArAABq/VIAAGr+UgAAahErAABqEisAAGoTKwAAahQrAABqfykAAGqAKQAAaoEpAABqgikAAGqDKQAAaoQpAABqiysAAGqMKwAAaq9SAABqsFIAAGoVKwAAahYrAABqhSkAAGqGKQAAahkrAABqGisAAGo3KgAAajgqAABqhykAAGqIKQAAaokpAABqiikAAGpjKgAAamQqAABqsSoAAGqyKgAAahsrAABqHCsAAGrzUgAAavRSAABqjSkAAGqOKQAAap0qAABqnioAAGojKwAAaiQrAABqJSsAAGomKwAAattSAABq3FIAAGonKwAAaigrAABq/1IAAGoAUwAAaikrAABqKisAAGqRKQAAapIpAABqKysAAGosKwAAai0rAABqLisAAGqTKQAAapQpAABqLysAAGowKwAAajErAABqMisAAGqVKQAAapYpAABqlykAAGqYKQAAapkpAABqmikAAGo5KwAAajorAABqwSoAAGrCKgAAapspAABqnCkAAGo9KwAAaj4rAABq3VIAAGreUgAAap0pAABqnikAAGo/KwAAakArAABqnykAAGqgKQAAakErAABqQisAAGqhKQAAaqIpAABqsSsAAGqyKwAAaqMpAABqpCkAAGrtUgAAau5SAABqkSsAAGqSKwAAakMrAABqRCsAAGqlKQAAaqYpAABqpykAAGqoKQAAamErAABqYisAAGpFKwAAakYrAABqiSoAAGqKKgAAaqspAABqrCkAAGpHKwAAakgrAABqiyoAAGqMKgAAaq0pAABqrikAAGrVUgAAatZSAABqryoAAGqwKgAAaksrAABqTCsAAGr7KQAAavwpAABq4yoAAGrkKgAAarEpAABqsikAAGqzKQAAarQpAABqtSkAAGq2KQAAak0rAABqTisAAGq3KQAAargpAABqTysAAGpQKwAAalErAABqUisAAGqzUgAAarRSAABqVSsAAGpWKwAAarkpAABquikAAGq7KQAAarwpAABqvSkAAGq+KQAAartSAABqvFIAAGq/KQAAasApAABqwSkAAGrCKQAAasMpAABqxCkAAGroKAAAaukoAABqxSkAAGrGKQAAalsrAABqXCsAAGrHKQAAasgpAABqySkAAGrKKQAAal0rAABqXisAAGrJUgAAaspSAABqXysAAGpgKwAAakkrAABqSisAAGrLKQAAaswpAABqzSkAAGrOKQAAamMrAABqZCsAAGplKwAAamYrAABqZysAAGpoKwAAamkrAABqaisAAGrRUgAAatJSAABq0SkAAGrSKQAAap8rAABqoCsAAGqLKQAAaowpAABq5ysAAGroKwAAatUpAABq1ikAAGrXKQAAatgpAABqcSsAAGpyKwAAassqAABqzCoAAGrZKQAAatopAABqdysAAGp4KwAAankrAABqeisAAGrbKQAAatwpAABqfSsAAGp+KwAAat0pAABq3ikAAGrfKQAAauApAABqfysAAGqAKwAAak8pAABqUCkAAGqBKwAAaoIrAABq4ykAAGrkKQAAavdSAABq+FIAAGrlKQAAauYpAABq5ykAAGroKQAAaoUrAABqhisAAGrpKQAAauopAABq6ykAAGrsKQAAau0pAABq7ikAAGrZUgAAatpSAABqiSsAAGqKKwAAau8pAABq8CkAAGoJKwAAagorAABqjSsAAGqOKwAAavEpAABq8ikAAGrzKQAAavQpAABqjysAAGqQKwAAavUpAABq9ikAAGq3UgAAarhSAABq9ykAAGr4KQAAau0rAABq7isAAGr5KQAAavopAABqrykAAGqwKQAAapMrAABqlCsAAGqVKwAAapYrAABqlysAAGqYKwAAapkrAABqmisAAGr9KQAAav4pAABq/ykAAGoAKgAAapsrAABqnCsAAGqdKwAAap4rAABqkSoAAGqSKgAAaqErAABqoisAAGqjKwAAaqQrAABqAyoAAGoEKgAAaqUrAABqpisAAGptKwAAam4rAABqpysAAGqoKwAAagUqAABqBioAAGqpKwAAaqorAABq01IAAGrUUgAAag0rAABqDisAAGoHKgAAaggqAABqqysAAGqsKwAAapUqAABqlioAAGqtKwAAaq4rAABqCSoAAGoKKgAAaq8rAABqsCsAAGpBKgAAakIqAABqCyoAAGoMKgAAassrAABqzCsAAGoNKgAAag4qAABqDyoAAGoQKgAAaqMqAABqpCoAAGoRKgAAahIqAABqEyoAAGoUKgAAarUrAABqtisAAGrjUgAAauRSAABqtysAAGq4KwAAauVSAABq5lIAAGqXKgAAapgqAABqFSoAAGoWKgAAahcqAABqGCoAAGq9KwAAar4rAABqVysAAGpYKwAAahkqAABqGioAAGqDKwAAaoQrAABqGyoAAGocKgAAah0qAABqHioAAGofKgAAaiAqAABqISoAAGoiKgAAasErAABqwisAAGojKgAAaiQqAABqJSoAAGomKgAAasMrAABqxCsAAGrVKgAAatYqAABquysAAGq8KwAAaicqAABqKCoAAGrFKwAAasYrAABqkyoAAGqUKgAAascrAABqyCsAAGopKgAAaioqAABqHSsAAGoeKwAAascqAABqyCoAAGorKgAAaiwqAABq0yoAAGrUKgAAas0rAABqzisAAGotKgAAai4qAABqWSsAAGpaKwAAav0rAABq/isAAGrtKgAAau4qAABq0ysAAGrUKwAAai8qAABqMCoAAGrXKwAAatgrAABqMSoAAGoyKgAAar1SAABqvlIAAGoBKgAAagIqAABqxVIAAGrGUgAAatsrAABq3CsAAGozKgAAajQqAABqNSoAAGo2KgAAastSAABqzFIAAGrPKwAAatArAABqOSoAAGo6KgAAajsqAABqPCoAAGr5KwAAavorAABqsysAAGq0KwAAat0rAABq3isAAGo9KgAAaj4qAABq3ysAAGrgKwAAauErAABq4isAAGrjKwAAauQrAABq5SsAAGrmKwAAaj8qAABqQCoAAGpvKwAAanArAABq6SsAAGrqKwAAausrAABq7CsAAGpDKgAAakQqAABqRSoAAGpGKgAAakcqAABqSCoAAGrvKwAAavArAABqSSoAAGpKKgAAaksqAABqTCoAAGrxKwAAavIrAABqTSoAAGpOKgAAalMrAABqVCsAAGpPKgAAalAqAABq9VIAAGr2UgAAavUrAABq9isAAGr3KwAAavgrAABq3SoAAGreKgAAalEqAABqUioAAGr7KwAAavwrAABq8ysAAGr0KwAAalMqAABqVCoAAHVqcSIAAH1y81MAAChqcyIAAGp0IgAAanUiAABqdiIAAGp3IgAAangiAABqeyIAAGp8IgAAan0iAABqfiIAAGoxKAAAajIoAABqfyIAAGqAIgAAaoEiAABqgiIAAGqDIgAAaoQiAABqhyIAAGqIIgAAaokiAABqiiIAAGqLIgAAaowiAABqjSIAAGqOIgAAao8iAABqkCIAAGr5JgAAavomAABqkSIAAGqSIgAAapMiAABqlCIAAGqVIgAAapYiAABqlyIAAGqYIgAAapkiAABqmiIAAGqbIgAAapwiAABqnSIAAGqeIgAAap8iAABqoCIAAGqhIgAAaqIiAABqqyUAAGqsJQAAaqUiAABqpiIAAGqnJwAAaqgnAABqqSIAAGqqIgAAaqsiAABqrCIAAGqtIgAAaq4iAABqryIAAGqwIgAAarEiAABqsiIAAGqzIgAAarQiAABqtSIAAGq2IgAAarciAABquCIAAGq5IgAAaroiAABqtyYAAGq4JgAAar0iAABqviIAAGq/IgAAasAiAABqwSIAAGrCIgAAarkmAABquiYAAGrDIgAAasQiAABqxyIAAGrIIgAAaskiAABqyiIAAGrLIgAAaswiAABqzSIAAGrOIgAAas8iAABq0CIAAGqPJAAAapAkAABq1SIAAGrWIgAAatciAABq2CIAAGrZIgAAatoiAABquSUAAGq6JQAAat0iAABq3iIAAGrTIgAAatQiAABq4SIAAGriIgAAauMiAABq5CIAAGrlIgAAauYiAABq5yIAAGroIgAAaukiAABq6iIAAGrrIgAAauwiAABq7SIAAGruIgAAaoEjAABqgiMAAGrxIgAAavIiAABq8yIAAGr0IgAAavUiAABq9iIAAGr3IgAAavgiAABq+SIAAGr6IgAAavsiAABq/CIAAGr9IgAAav4iAABq/yIAAGoAIwAAagEjAABqAiMAAGoDIwAAagQjAABqBSMAAGoGIwAAagcjAABqCCMAAGoJIwAAagojAABqCyMAAGoMIwAAag0jAABqDiMAAGoPIwAAahAjAABqzycAAGrQJwAAahEjAABqEiMAAGoTIwAAahQjAABqFyMAAGoYIwAAahkjAABqGiMAAGodIwAAah4jAABqHyMAAGogIwAAaiEjAABqIiMAAGojIwAAaiQjAABqJSMAAGomIwAAaicjAABqKCMAAGq1IwAAarYjAABqKyMAAGosIwAAai0jAABqLiMAAGovIwAAajAjAABqMSMAAGoyIwAAajMjAABqNCMAAGrHJgAAasgmAABqNyMAAGo4IwAAajkjAABqOiMAAGo7IwAAajwjAABqPSMAAGo+IwAAaj8jAABqQCMAAGpBIwAAakIjAABqQyMAAGpEIwAAakUjAABqRiMAAGrDJQAAasQlAABqSyMAAGpMIwAAasUiAABqxiIAAGqbJQAAapwlAABqTyMAAGpQIwAAalEjAABqUiMAAGpTIwAAalQjAABqVSMAAGpWIwAAalcjAABqWCMAAGpZIwAAalojAABqWyMAAGpcIwAAar0jAABqviMAAGpfIwAAamAjAABqYSMAAGpiIwAAamMjAABqZCMAAGplIwAAamYjAABqZyMAAGpoIwAAamkjAABqaiMAAGprIwAAamwjAABqbSMAAGpuIwAAam8jAABqcCMAAGpxIwAAanIjAABqcyMAAGp0IwAAanUjAABqdiMAAGp3IwAAangjAABq7ycAAGrwJwAAankjAABqeiMAAGp7IwAAanwjAABqfSMAAGp+IwAAalsnAABqXCcAAGp/IwAAaoAjAABqgyMAAGqEIwAAaoUjAABqhiMAAGqHIwAAaogjAABqiSMAAGqKIwAAasMjAABqxCMAAGqNIwAAao4jAABqjyMAAGqQIwAAatUmAABq1iYAAGqVIwAAapYjAABqlyMAAGqYIwAAapkjAABqmiMAAGqbIwAAapwjAABqHSYAAGoeJgAAatMnAABq1CcAAGqfIwAAaqAjAABqoSMAAGqiIwAAagMkAABqBCQAAGqpIwAAaqojAABqqyMAAGqsIwAAaq0jAABqriMAAGqvIwAAarAjAABqsSMAAGqyIwAAarMjAABqtCMAAGopIwAAaiojAABqtyMAAGq4IwAAarkjAABquiMAAGq7IwAAarwjAABqXSMAAGpeIwAAar8jAABqwCMAAGrBIwAAasIjAABqiyMAAGqMIwAAasUjAABqxiMAAGrHIwAAasgjAABqcygAAGp0KAAAapsoAABqnCgAAGrLIwAAaswjAABqySMAAGrKIwAAasskAABqzCQAAGrNIwAAas4jAABqzyMAAGrQIwAAatEjAABq0iMAAGqTKAAAapQoAABq0yMAAGrUIwAAatUjAABq1iMAAGqZJgAAapomAABq1yMAAGrYIwAAatkjAABq2iMAAGrbIwAAatwjAABq3SMAAGreIwAAat8jAABq4CMAAGrhIwAAauIjAABq4SUAAGriJQAAauUjAABq5iMAAGpHIwAAakgjAABq6SMAAGrqIwAAausjAABq7CMAAGrtIwAAau4jAABq0yQAAGrUJAAAapMjAABqlCMAAGr1IwAAavYjAABq+SMAAGr6IwAAavsjAABq/CMAAGr9IwAAav4jAABq/yMAAGoAJAAAagEkAABqAiQAAGqBJQAAaoIlAABqBSQAAGoGJAAAagckAABqCCQAAGoJJAAAagokAABqCyQAAGoMJAAAag0kAABqDiQAAGqpJgAAaqomAABqDyQAAGoQJAAAahEkAABqEiQAAGoTJAAAahQkAABqFSQAAGoWJAAAarslAABqvCUAAGoXJAAAahgkAABqGSQAAGoaJAAAahskAABqHCQAAGodJAAAah4kAABqHyQAAGogJAAAaiEkAABqIiQAAGojJAAAaiQkAABqJSQAAGomJAAAavcmAABq+CYAAGopJAAAaiokAABqKyQAAGosJAAAai0kAABqLiQAAGovJAAAajAkAABqMyQAAGo0JAAAajUkAABqNiQAAGo3JAAAajgkAABqOSQAAGo6JAAAajskAABqPCQAAGo9JAAAaj4kAABqPyQAAGpAJAAAakEkAABqQiQAAGpDJAAAakQkAABq8yUAAGr0JQAAaosoAABqjCgAAGpFJAAAakYkAABqRyQAAGpIJAAAausnAABq7CcAAGpLJAAAakwkAABqTSQAAGpOJAAAahsjAABqHCMAAGpRJAAAalIkAABqUyQAAGpUJAAAau0nAABq7icAAGpXJAAAalgkAABqWSQAAGpaJAAAap8kAABqoCQAAGpdJAAAal4kAABqXyQAAGpgJAAAamEkAABqYiQAAGpjJAAAamQkAABqZSQAAGpmJAAAamkkAABqaiQAAGptJAAAam4kAABqcSQAAGpyJAAAanMkAABqdCQAAGp1JAAAanYkAABq8ycAAGr0JwAAankkAABqeiQAAGp7JAAAanwkAABqfSQAAGp+JAAAan8kAABqgCQAAGqBJAAAaoIkAABqgyQAAGqEJAAAaoUkAABqhiQAAGqHJAAAaogkAABqeygAAGp8KAAAaoskAABqjCQAAGqNJAAAao4kAABqkSQAAGqSJAAAapMkAABqlCQAAGr/JgAAagAnAABqmSQAAGqaJAAAapskAABqnCQAAGoBJgAAagImAABqoSQAAGqiJAAAaqMkAABqpCQAAGqlJAAAaqYkAABqpyQAAGqoJAAAaqkkAABqqiQAAGqrJAAAaqwkAABqrSQAAGquJAAAam8kAABqcCQAAGqxJAAAarIkAABqsyQAAGq0JAAAarUkAABqtiQAAGq3JAAAargkAABquSQAAGq6JAAAarskAABqvCQAAGq/JAAAasAkAABqwSQAAGrCJAAAasMkAABqxCQAAGo/JQAAakAlAABqxyQAAGrIJAAAaucjAABq6CMAAGrfIgAAauAiAABqzSQAAGrOJAAAas8kAABq0CQAAGrRJAAAatIkAABq7yMAAGrwIwAAatUkAABq1iQAAGrXJAAAatgkAABq2SQAAGraJAAAatskAABq3CQAAGrdJAAAat4kAABq3yQAAGrgJAAAauEkAABq4iQAAGrjJAAAauQkAABq5SQAAGrmJAAAauckAABq6CQAAGrpJAAAauokAABq6yQAAGrsJAAAau0kAABq7iQAAGrvJAAAavAkAABq8SQAAGryJAAAavMkAABq9CQAAGr1JAAAavYkAABq9yQAAGr4JAAAag0mAABqDiYAAGr7JAAAavwkAABq/SQAAGr+JAAAav8kAABqACUAAGoBJQAAagIlAABqBSUAAGoGJQAAag0nAABqDicAAGoJJQAAagolAABqCyUAAGoMJQAAavMjAABq9CMAAGojJQAAaiQlAABqEyUAAGoUJQAAahUlAABqFiUAAGoNJQAAag4lAABqGSUAAGoaJQAAahslAABqHCUAAGodJQAAah4lAABqEScAAGoSJwAAat0nAABq3icAAGohJQAAaiIlAABqEycAAGoUJwAAaiclAABqKCUAAGopJQAAaiolAABqKyUAAGosJQAAai0lAABqLiUAAGovJQAAajAlAABqMSUAAGoyJQAAajMlAABqNCUAAGqvJAAAarAkAABqySQAAGrKJAAAajUlAABqNiUAAGo7JQAAajwlAABqPSUAAGo+JQAAalMnAABqVCcAAGo5JQAAajolAABqQyUAAGpEJQAAakUlAABqRiUAAGoZJgAAahomAABqSSUAAGpKJQAAakslAABqTCUAAGoNKAAAag4oAABqTyUAAGpQJQAAalElAABqUiUAAGpTJQAAalQlAABqVSUAAGpWJQAAalclAABqWCUAAGpZJQAAalolAABqWyUAAGpcJQAAahElAABqEiUAAGpfJQAAamAlAABqYSUAAGpiJQAAamMlAABqZCUAAGplJQAAamYlAABqZyUAAGpoJQAAamklAABqaiUAAGprJQAAamwlAABqFSMAAGoWIwAAam8lAABqcCUAAGpxJQAAanIlAABqcyUAAGp0JQAAanUlAABqdiUAAGp3JQAAanglAABqHSgAAGoeKAAAanklAABqeiUAAGp7JQAAanwlAABqfSUAAGp+JQAAaokkAABqiiQAAGqDJQAAaoQlAABqhSUAAGqGJQAAaoclAABqiCUAAGqJJQAAaoolAABqiyUAAGqMJQAAao0lAABqjiUAAGohJgAAaiImAABqoyMAAGqkIwAAapMlAABqlCUAAGolJgAAaiYmAABqlyUAAGqYJQAAapklAABqmiUAAGqFIgAAaoYiAABqnSUAAGqeJQAAap8lAABqoCUAAGqhJQAAaqIlAABqoyUAAGqkJQAAaqUlAABqpiUAAGqnJQAAaqglAABqqSUAAGqqJQAAalEnAABqUicAAGqjIgAAaqQiAABqrSUAAGquJQAAaq8lAABqsCUAAGqzJQAAarQlAABqtSUAAGq2JQAAarclAABquCUAAGrbIgAAatwiAABq7yIAAGrwIgAAar0lAABqviUAAGopJgAAaiomAABqwSUAAGrCJQAAakkjAABqSiMAAGo1JwAAajYnAABqKyYAAGosJgAAasklAABqyiUAAGrLJQAAaswlAABqzSUAAGrOJQAAas8lAABq0CUAAGrRJQAAatIlAABq0yUAAGrUJQAAatUlAABq1iUAAGrXJQAAatglAABq2SUAAGraJQAAatslAABq3CUAAGrdJQAAat4lAABq3yUAAGrgJQAAauMjAABq5CMAAGrjJQAAauQlAABq5SUAAGrmJQAAauclAABq6CUAAGrpJQAAauolAABq6yUAAGrsJQAAau0lAABq7iUAAGrvJQAAavAlAABq8SUAAGryJQAAan8lAABqgCUAAGr1JQAAavYlAABq9yUAAGr4JQAAalskAABqXCQAAGr7JQAAavwlAABq/SUAAGr+JQAAai0oAABqLigAAGr/JQAAagAmAABqnSQAAGqeJAAAagMmAABqBCYAAGrjJwAAauQnAABqBSYAAGoGJgAAagcmAABqCCYAAGoJJgAAagomAABqTyQAAGpQJAAAagsmAABqDCYAAGr5JAAAavokAABqDyUAAGoQJQAAahEmAABqEiYAAGoTJgAAahQmAABqRyUAAGpIJQAAahsmAABqHCYAAGofJgAAaiAmAABqpSMAAGqmIwAAaiMmAABqJCYAAGoZJwAAahonAABqMygAAGo0KAAAapUlAABqliUAAGonJgAAaigmAABqvyUAAGrAJQAAasclAABqyCUAAGotJgAAai4mAABqayQAAGpsJAAAajEmAABqMiYAAGq9JAAAar4kAABqNyYAAGo4JgAAajkmAABqOiYAAGo7JgAAajwmAABqPSYAAGo+JgAAajkoAABqOigAAGpBJgAAakImAABqQyYAAGpEJgAAapckAABqmCQAAGpFJgAAakYmAABqSSYAAGpKJgAAaksmAABqTCYAAGpNJgAAak4mAABqTyYAAGpQJgAAalEmAABqUiYAAGpTJgAAalQmAABqRyYAAGpIJgAAarElAABqsiUAAGrFJAAAasYkAABqWSYAAGpaJgAAajcnAABqOCcAAGpbJgAAalwmAABqXSYAAGpeJgAAal8mAABqYCYAAGphJgAAamImAABqYyYAAGpkJgAAamUmAABqZiYAAGpnJgAAamgmAABqaSYAAGpqJgAAamsmAABqbCYAAGptJgAAam4mAABqbyYAAGpwJgAAanEmAABqciYAAGpzJgAAanQmAABqdSYAAGp2JgAAancmAABqeCYAAGp5JgAAanomAABqeyYAAGp8JgAAan0mAABqfiYAAGp/JgAAaoAmAABqgSYAAGqCJgAAaoMmAABqhCYAAGqFJgAAaoYmAABqhyYAAGqIJgAAaokmAABqiiYAAGqLJgAAaowmAABqjSYAAGqOJgAAao8mAABqkCYAAGqRJgAAapImAABqFyUAAGoYJQAAapUmAABqliYAAGqXJgAAapgmAABq+SUAAGr6JQAAapsmAABqnCYAAGqdJgAAap4mAABqnyYAAGqgJgAAaqEmAABqoiYAAGqjJgAAaqQmAABqpSYAAGqmJgAAavEjAABq8iMAAGpXJgAAalgmAABqqyYAAGqsJgAAaq0mAABqriYAAGqvJgAAarAmAABqsyYAAGq0JgAAarUmAABqtiYAAGq7IgAAarwiAABq0SIAAGrSIgAAarsmAABqvCYAAGpFKAAAakYoAABqvyYAAGrAJgAAasEmAABqwiYAAGpBJQAAakIlAABqwyYAAGrEJgAAasUmAABqxiYAAGo1IwAAajYjAABqySYAAGrKJgAAal0lAABqXiUAAGrLJgAAaswmAABqzSYAAGrOJgAAas8mAABq0CYAAGrRJgAAatImAABq0yYAAGrUJgAAapEjAABqkiMAAGrXJgAAatgmAABq2SYAAGraJgAAatsmAABq3CYAAGrdJgAAat4mAABq3yYAAGrgJgAAauEmAABq4iYAAGpfKAAAamAoAABq4yYAAGrkJgAAajMmAABqNCYAAGrlJgAAauYmAABq5yYAAGroJgAAaukmAABq6iYAAGrrJgAAauwmAABq7SYAAGruJgAAau8mAABq8CYAAGrxJgAAavImAABq8yYAAGr0JgAAavUmAABq9iYAAGonJAAAaigkAABqTSMAAGpOIwAAavsmAABq/CYAAGr9JgAAav4mAABqlSQAAGqWJAAAagEnAABqAicAAGoDJwAAagQnAABqBScAAGoGJwAAagcnAABqCCcAAGoJJwAAagonAABqCycAAGoMJwAAagclAABqCCUAAGoPJwAAahAnAABqHyUAAGogJQAAaiUlAABqJiUAAGoVJwAAahYnAABqFycAAGoYJwAAajclAABqOCUAAGobJwAAahwnAABqHScAAGoeJwAAah8nAABqICcAAGohJwAAaiInAABqIycAAGokJwAAaiUnAABqJicAAGonJwAAaignAABqKScAAGoqJwAAaisnAABqLCcAAGotJwAAai4nAABqLycAAGowJwAAajEnAABqMicAAGozJwAAajQnAABqxSUAAGrGJQAAao8lAABqkCUAAGo5JwAAajonAABqOycAAGo8JwAAaj8nAABqQCcAAGpBJwAAakInAABqQycAAGpEJwAAakUnAABqRicAAGpHJwAAakgnAABqNSYAAGo2JgAAaksnAABqTCcAAGpNJwAAak4nAABqTycAAGpQJwAAankiAABqeiIAAGptJQAAam4lAABqVScAAGpWJwAAalcnAABqWCcAAGpZJwAAalonAABqsSYAAGqyJgAAal0nAABqXicAAGpfJwAAamAnAABqYScAAGpiJwAAamMnAABqZCcAAGplJwAAamYnAABqaScAAGpqJwAAamsnAABqbCcAAGptJwAAam4nAABqbycAAGpwJwAAanEnAABqcicAAGpzJwAAanQnAABqdScAAGp2JwAAancnAABqeCcAAGp5JwAAanonAABqeycAAGp8JwAAan0nAABqficAAGp/JwAAaoAnAABqgScAAGqCJwAAaoMnAABqhCcAAGqFJwAAaoYnAABqhycAAGqIJwAAaoknAABqiicAAGqLJwAAaownAABqjScAAGqOJwAAao8nAABqkCcAAGqRJwAAapInAABqkycAAGqUJwAAapUnAABqlicAAGqXJwAAapgnAABqmScAAGqaJwAAapsnAABqnCcAAGqdJwAAap4nAABqnycAAGqgJwAAaqEnAABqoicAAGqjJwAAaqQnAABqpScAAGqmJwAAaqciAABqqCIAAGqpJwAAaqonAABqDyYAAGoQJgAAaqsnAABqrCcAAGqtJwAAaq4nAABqrycAAGqwJwAAarEnAABqsicAAGqzJwAAarQnAABqeSgAAGp6KAAAarcnAABquCcAAGq5JwAAaronAABquycAAGq8JwAAar0nAABqvicAAGq/JwAAasAnAABqwScAAGrCJwAAasMnAABqxCcAAGrFJwAAasYnAABqxycAAGrIJwAAasknAABqyicAAGrLJwAAaswnAABqzScAAGrOJwAAap0jAABqniMAAGrRJwAAatInAABqpyMAAGqoIwAAatUnAABq1icAAGrXJwAAatgnAABq2ScAAGraJwAAatsnAABq3CcAAGr3IwAAavgjAABq3ycAAGrgJwAAauEnAABq4icAAGoxJAAAajIkAABq5ScAAGrmJwAAauknAABq6icAAGpJJAAAakokAABqVSQAAGpWJAAAamckAABqaCQAAGrxJwAAavInAABqdyQAAGp4JAAAavUnAABq9icAAGr3JwAAavgnAABq+ScAAGr6JwAAavsnAABq/CcAAGr9JwAAav4nAABq/ycAAGoAKAAAagEoAABqAigAAGoDKAAAagQoAABqBSgAAGoGKAAAagcoAABqCCgAAGoJKAAAagooAABqCygAAGoMKAAAak0lAABqTiUAAGoPKAAAahAoAABqESgAAGoSKAAAakknAABqSicAAGoTKAAAahQoAABqFSgAAGoWKAAAahcoAABqGCgAAGoZKAAAahooAABqGygAAGocKAAAapMmAABqlCYAAGofKAAAaiAoAABqISgAAGoiKAAAaiMoAABqJCgAAGonKAAAaigoAABqKSgAAGoqKAAAaisoAABqLCgAAGqdKAAAap4oAABqAyUAAGoEJQAAai8oAABqMCgAAGoXJgAAahgmAABqkSUAAGqSJQAAajUoAABqNigAAGo3KAAAajgoAABqPyYAAGpAJgAAajsoAABqPCgAAGo9KAAAaj4oAABqVSYAAGpWJgAAai8mAABqMCYAAGo/KAAAakAoAABqQSgAAGpCKAAAakMoAABqRCgAAGq9JgAAar4mAABqRygAAGpIKAAAakkoAABqSigAAGpLKAAAakwoAABqTSgAAGpOKAAAak8oAABqUCgAAGpRKAAAalIoAABqUygAAGpUKAAAalUoAABqVigAAGpXKAAAalgoAABqWSgAAGpaKAAAalsoAABqXCgAAGpdKAAAal4oAABqZycAAGpoJwAAamEoAABqYigAAGpjKAAAamQoAABqZSgAAGpmKAAAamcoAABqaCgAAGppKAAAamooAABqaygAAGpsKAAAam0oAABqbigAAGpvKAAAanAoAABqcSgAAGpyKAAAaqcmAABqqCYAAGp1KAAAanYoAABqdygAAGp4KAAAarUnAABqticAAGp9KAAAan4oAABqfygAAGqAKAAAaucnAABq6CcAAGqDKAAAaoQoAABqhSgAAGqGKAAAaocoAABqiCgAAGqJKAAAaoooAABqJSgAAGomKAAAao0oAABqjigAAGqfKAAAaqAoAABqkSgAAGqSKAAAahUmAABqFiYAAGqVKAAAapYoAABqlygAAGqYKAAAapkoAABqmigAAGo9JwAAaj4nAABqgSgAAGqCKAAAao8oAABqkCgAAGqhKAAAaqIoAAB1av8rAAB9cvRTAAAoak0uAABqTi4AAGoFLAAAagYsAABqBywAAGoILAAAagksAABqCiwAAGoLLAAAagwsAABqgzAAAGqEMAAAak8uAABqUC4AAGoRLAAAahIsAABqEywAAGoULAAAahUsAABqFiwAAGoXLAAAahgsAABqGSwAAGoaLAAAah8sAABqICwAAGohLAAAaiIsAABqIywAAGokLAAAaiUsAABqJiwAAGonLAAAaigsAABqKSwAAGoqLAAAaissAABqLCwAAGotLAAAai4sAABqLywAAGowLAAAajEsAABqMiwAAGpXLgAAalguAABqNSwAAGo2LAAAagEsAABqAiwAAGo5LAAAajosAABqOywAAGo8LAAAanMxAABqdDEAAGo/LAAAakAsAABqey8AAGp8LwAAakMsAABqRCwAAGpFLAAAakYsAABqRywAAGpILAAAakksAABqSiwAAGpLLAAAakwsAABqfS8AAGp+LwAAak8sAABqUCwAAGpRLAAAalIsAABqUywAAGpULAAAalUsAABqViwAAGpXLAAAalgsAABqWSwAAGpaLAAAalssAABqXCwAAGpdLAAAal4sAABqXy4AAGpgLgAAamMsAABqZCwAAGplLAAAamYsAABqsTEAAGqyMQAAamksAABqaiwAAGp9MQAAan4xAABqbSwAAGpuLAAAam8sAABqcCwAAGpjLgAAamQuAABqcywAAGp0LAAAanUsAABqdiwAAGorLwAAaiwvAABqgTEAAGqCMQAAan0sAABqfiwAAGp/LAAAaoAsAABqgSwAAGqCLAAAamUuAABqZi4AAGqNLwAAao4vAABqhywAAGqILAAAamcuAABqaC4AAGqJLAAAaoosAABqjSwAAGqOLAAAao8sAABqkCwAAGqRLAAAapIsAABqlSwAAGqWLAAAapcsAABqmCwAAGqZLAAAaposAABqmywAAGqcLAAAap0sAABqniwAAGqfLAAAaqAsAABqoSwAAGqiLAAAaqMsAABqpCwAAGqlLAAAaqYsAABqpywAAGqoLAAAaqksAABqqiwAAGqrLAAAaqwsAABqrSwAAGquLAAAaq8sAABqsCwAAGqxLAAAarIsAABqsywAAGq0LAAAarUsAABqtiwAAGq3LAAAargsAABquSwAAGq6LAAAarssAABqvCwAAGq9LAAAar4sAABqwSwAAGrCLAAAasMsAABqxCwAAGqfMAAAaqAwAABqxywAAGrILAAAasksAABqyiwAAGrLLAAAaswsAABqzSwAAGrOLAAAas8sAABq0CwAAGrRLAAAatIsAABq1SwAAGrWLAAAatcsAABq2CwAAGp1LwAAanYvAABqMS0AAGoyLQAAat0sAABq3iwAAGopMQAAaioxAABq4SwAAGriLAAAagktAABqCi0AAGrlLAAAauYsAABq5ywAAGroLAAAauksAABq6iwAAGrrLAAAauwsAABqlTEAAGqWMQAAau8sAABq8CwAAGrxLAAAavIsAABq8ywAAGr0LAAAavUsAABq9iwAAGr3LAAAavgsAABq+SwAAGr6LAAAansuAABqfC4AAGr9LAAAav4sAABq/ywAAGoALQAAagEtAABqAi0AAGoDLQAAagQtAABqBS0AAGoGLQAAagctAABqCC0AAGqZMQAAapoxAABqCy0AAGoMLQAAag0tAABqDi0AAGoPLQAAahAtAABqkTEAAGqSMQAAahEtAABqEi0AAGoTLQAAahQtAABqFS0AAGoWLQAAahctAABqGC0AAGoZLQAAahotAABqGy0AAGocLQAAah0tAABqHi0AAGofLQAAaiAtAABqIS0AAGoiLQAAaiMtAABqJC0AAGolLQAAaiYtAABqJy0AAGooLQAAaiktAABqKi0AAGotLQAAai4tAABqLy0AAGowLQAAatssAABq3CwAAGrfLAAAauAsAABqNS0AAGo2LQAAamcsAABqaCwAAGo5LQAAajotAABqOy0AAGo8LQAAaj0tAABqPi0AAGo/LQAAakAtAABqQS0AAGpCLQAAakMtAABqRC0AAGrTLAAAatQsAABqRy0AAGpILQAAakktAABqSi0AAGpLLQAAakwtAABqTS0AAGpOLQAAajcsAABqOCwAAGpTLQAAalQtAABqVS0AAGpWLQAAalctAABqWC0AAGpZLQAAalotAABqWy0AAGpcLQAAal0tAABqXi0AAGphLQAAamItAABqqzEAAGqsMQAAamMtAABqZC0AAGplLQAAamYtAABqZy0AAGpoLQAAaosuAABqjC4AAGptMQAAam4xAABqay0AAGpsLQAAam0tAABqbi0AAGpvLQAAanAtAABqcS0AAGpyLQAAanMtAABqdC0AAGp1LQAAanYtAABqdy0AAGp4LQAAanktAABqei0AAGp7LQAAanwtAABqfS0AAGp+LQAAan8tAABqgC0AAGqBLQAAaoItAABqgy0AAGqELQAAaossAABqjCwAAGqHLQAAaogtAABqiS0AAGqKLQAAakUtAABqRi0AAGqNLQAAao4tAABqjy0AAGqQLQAAapEtAABqki0AAGqTLQAAapQtAABqlS0AAGqWLQAAapctAABqmC0AAGqZLQAAapotAABqnS0AAGqeLQAAap8tAABqoC0AAGqhLQAAaqItAABqpS0AAGqmLQAAaqctAABqqC0AAGq9MAAAar4wAABqqy0AAGqsLQAAaq0tAABqri0AAGqvLQAAarAtAABqsS0AAGqyLQAAapcuAABqmC4AAGq1LQAAarYtAABqty0AAGq4LQAAarktAABqui0AAGq7LQAAarwtAABqvS0AAGq+LQAAarkwAABqujAAAGq/LQAAasAtAABqYzIAAGpkMgAAarkxAABqujEAAGrFLQAAasYtAABqxy0AAGrILQAAasstAABqzC0AAGrNLQAAas4tAABqzy0AAGrQLQAAatEtAABq0i0AAGqPLwAAapAvAABqeSwAAGp6LAAAatUtAABq1i0AAGrXLQAAatgtAABq2S0AAGraLQAAatstAABq3C0AAGrdLQAAat4tAABq3y0AAGrgLQAAal8tAABqYC0AAGq5LwAAarovAABq5S0AAGrmLQAAauctAABq6C0AAGrpLQAAauotAABq7S0AAGruLQAAau8tAABq8C0AAGrxLQAAavItAABq8y0AAGr0LQAAavUtAABq9i0AAGr3LQAAavgtAABq+S0AAGr6LQAAavstAABq/C0AAGp3LAAAangsAABqAy4AAGoELgAAagUuAABqBi4AAGqjLQAAaqQtAABqCS4AAGoKLgAAagsuAABqDC4AAGoNLgAAag4uAABqDy4AAGoQLgAAahEuAABqEi4AAGoVLgAAahYuAABqFy4AAGoYLgAAahsuAABqHC4AAGodLgAAah4uAABqHy4AAGogLgAAaiUuAABqJi4AAGonLgAAaiguAABq6y0AAGrsLQAAaisuAABqLC4AAGqlMQAAaqYxAABqLy4AAGowLgAAajEuAABqMi4AAGozLgAAajQuAABqNS4AAGo2LgAAajcuAABqOC4AAGo5LgAAajouAABqOy4AAGo8LgAAaj0uAABqPi4AAGo/LgAAakAuAABqQS4AAGpCLgAAakMuAABqRC4AAGpHLgAAakguAABqSS4AAGpKLgAAaksuAABqTC4AAGoDLAAAagQsAABqDywAAGoQLAAAah0sAABqHiwAAGpTLgAAalQuAABqVS4AAGpWLgAAajMsAABqNCwAAGpZLgAAalouAABqWy4AAGpcLgAAal0uAABqXi4AAGphLgAAamIuAABqcSwAAGpyLAAAaoMsAABqhCwAAGqFLQAAaoYtAABqaS4AAGpqLgAAamsuAABqbC4AAGptLgAAam4uAABqby4AAGpwLgAAanEuAABqci4AAGpzLgAAanQuAABqdS4AAGp2LgAAancuAABqeC4AAGp5LgAAanouAABq+ywAAGr8LAAAaostAABqjC0AAGp9LgAAan4uAABqfy4AAGqALgAAaoEuAABqgi4AAGqDLgAAaoQuAABq2TEAAGraMQAAarMwAABqtDAAAGqJLgAAaoouAABqFTIAAGoWMgAAamktAABqai0AAGqNLgAAao4uAABqjy4AAGqQLgAAapEuAABqki4AAGqTLgAAapQuAABqlS4AAGqWLgAAarMtAABqtC0AAGqZLgAAapouAABqmy4AAGqcLgAAap0uAABqni4AAGqfLgAAaqAuAABqoS4AAGqiLgAAaqMuAABqpC4AAGqnLgAAaqguAABq2zAAAGrcMAAAaqsuAABqrC4AAGqtLgAAaq4uAABqyS0AAGrKLQAAarEuAABqsi4AAGqzLgAAarQuAABqtS4AAGq2LgAAarcuAABquC4AAGq5LgAAarouAABqKy0AAGosLQAAar0uAABqvi4AAGq7LgAAarwuAABqwS4AAGrCLgAAatMvAABq1C8AAGrFLgAAasYuAABqIS4AAGoiLgAAaskuAABqyi4AAGrLLgAAaswuAABqzS4AAGrOLgAAas8uAABq0C4AAGrRLgAAatIuAABq0y4AAGrULgAAatUuAABq1i4AAGrXLgAAatguAABq2S4AAGraLgAAatsuAABq3C4AAGrdLgAAat4uAABq3y4AAGrgLgAAauEuAABq4i4AAGrjLgAAauQuAABq5TAAAGrmMAAAauUuAABq5i4AAGq9MQAAar4xAABq5y4AAGroLgAAaukuAABq6i4AAGrrLgAAauwuAABq7S4AAGruLgAAau8uAABq8C4AAGrxLgAAavIuAABq8y4AAGr0LgAAavUuAABq9i4AAGr3LgAAavguAABq3zAAAGrgMAAAavkuAABq+i4AAGr7LgAAavwuAABq/S4AAGr+LgAAav8uAABqAC8AAGoBLwAAagIvAABqAy8AAGoELwAAagUvAABqBi8AAGoHLwAAaggvAABqCS8AAGoKLwAAagsvAABqDC8AAGoNLwAAag4vAABqDy8AAGoQLwAAap0xAABqnjEAAGoRLwAAahIvAABqEy8AAGoULwAAahUvAABqFi8AAGoXLwAAahgvAABqvy4AAGrALgAAahsvAABqHC8AAGodLwAAah4vAABqHy8AAGogLwAAaiEvAABqIi8AAGojLwAAaiQvAABqJS8AAGomLwAAaicvAABqKC8AAGopLwAAaiovAABqLS8AAGouLwAAai8vAABqMC8AAGoxLwAAajIvAABqMy8AAGo0LwAAalcyAABqWDIAAGo3LwAAajgvAABqOS8AAGo6LwAAajsvAABqPC8AAGo9LwAAaj4vAABqPy8AAGpALwAAakEvAABqQi8AAGpDLwAAakQvAABqRS8AAGpGLwAAakcvAABqSC8AAGpJLwAAakovAABqSy8AAGpMLwAAajkxAABqOjEAAGpNLwAAak4vAABqTy8AAGpQLwAAalEvAABqUi8AAGpTLwAAalQvAABqVS8AAGpWLwAAalcvAABqWC8AAGozLQAAajQtAABqWy8AAGpcLwAAal0vAABqXi8AAGpfLwAAamAvAABqYS8AAGpiLwAAamUvAABqZi8AAGpnLwAAamgvAABqaS8AAGpqLwAAamsvAABqbC8AAGptLwAAam4vAABqby8AAGpwLwAAanEvAABqci8AAGpzLwAAanQvAABqgzIAAGqEMgAAancvAABqeC8AAGp5LwAAanovAABqQSwAAGpCLAAAak0sAABqTiwAAGp/LwAAaoAvAABqgS8AAGqCLwAAaoMvAABqhC8AAGr/MQAAagAyAABqhy8AAGqILwAAaokvAABqii8AAGolMQAAaiYxAABqiy8AAGqMLwAAaoUsAABqhiwAAGqTLAAAapQsAABqATIAAGoCMgAAapEvAABqki8AAGqTLwAAapQvAABqlS8AAGqWLwAAauMsAABq5CwAAGqZLwAAapovAABqnS8AAGqeLwAAap8vAABqoC8AAGqbLQAAapwtAABqpS8AAGqmLwAAaqcvAABqqC8AAGqpLwAAaqovAABqqy8AAGqsLwAAaq0vAABqri8AAGqvLwAAarAvAABqsy8AAGq0LwAAarUvAABqti8AAGq3LwAAargvAABq4y0AAGrkLQAAarsvAABqvC8AAGq9LwAAar4vAABqvy8AAGrALwAAasEvAABqwi8AAGrDLwAAasQvAABqxS8AAGrGLwAAakUuAABqRi4AAGrJLwAAasovAABqyy8AAGrMLwAAas8vAABq0C8AAGqvLgAAarAuAABq0S8AAGrSLwAAasMuAABqxC4AAGrVLwAAatYvAABqyTEAAGrKMQAAak8tAABqUC0AAGrZLwAAatovAABq2y8AAGrcLwAAat0vAABq3i8AAGrfLwAAauAvAABq4S8AAGriLwAAauMvAABq5C8AAGrlLwAAauYvAABq5y8AAGroLwAAaukvAABq6i8AAGoNMgAAag4yAABqDzEAAGoQMQAAau8vAABq8C8AAGrxLwAAavIvAABq8y8AAGr0LwAAavUvAABq9i8AAGr3LwAAavgvAABq+S8AAGr6LwAAavsvAABq/C8AAGr9LwAAav4vAABq/y8AAGoAMAAAatcvAABq2C8AAGoDMAAAagQwAABqBTAAAGoGMAAAagcwAABqCDAAAGoJMAAAagowAABqEzIAAGoUMgAAag0wAABqDjAAAGoPMAAAahAwAABqETAAAGoSMAAAahMwAABqFDAAAGoVMAAAahYwAABqFzAAAGoYMAAAahkwAABqGjAAAGodMAAAah4wAABqFzIAAGoYMgAAar8sAABqwCwAAGoZLgAAahouAABqJTAAAGomMAAAaicwAABqKDAAAGopMAAAaiowAABqxzAAAGrIMAAAaiswAABqLDAAAGo7MgAAajwyAABqhzEAAGqIMQAAai0wAABqLjAAAGovMAAAajAwAABqMTAAAGoyMAAAajMwAABqNDAAAGoZLwAAahovAABqNzAAAGo4MAAAajkwAABqOjAAAGo7MAAAajwwAABqJzEAAGooMQAAaj0wAABqPjAAAGoZMgAAahoyAABqQTAAAGpCMAAAakMwAABqRDAAAGpHMAAAakgwAABqSTAAAGpKMAAAakswAABqTDAAAGrTLQAAatQtAABqTzAAAGpQMAAAalEwAABqUjAAAGpTMAAAalQwAABqVTAAAGpWMAAAalcwAABqWDAAAGpZMAAAalowAABqWzAAAGpcMAAAal0wAABqXjAAAGpfMAAAamAwAABqYTAAAGpiMAAAamUwAABqZjAAAGpnMAAAamgwAABqaTAAAGpqMAAAaiEwAABqIjAAAGptMAAAam4wAABqbzAAAGpwMAAAanEwAABqcjAAAGpzMAAAanQwAABqdTAAAGp2MAAAancwAABqeDAAAGp5MAAAanowAABqezAAAGp8MAAAan0wAABqfjAAAGobLAAAahwsAABqgTAAAGqCMAAAag0sAABqDiwAAGqFMAAAaoYwAABqhzAAAGqIMAAAaokwAABqijAAAGqLMAAAaowwAABqjTAAAGqOMAAAam8xAABqcDEAAGqPMAAAapAwAABqkTAAAGqSMAAAapMwAABqlDAAAGqXMAAAapgwAABq4S0AAGriLQAAapswAABqnDAAAGqdMAAAap4wAABqxSwAAGrGLAAAaqEwAABqojAAAGqjMAAAaqQwAABqpTAAAGqmMAAAaqcwAABqqDAAAGqpMAAAaqowAABqrTAAAGquMAAAajkyAABqOjIAAGqxMAAAarIwAABqNS8AAGo2LwAAarUwAABqtjAAAGq3MAAAargwAABqNTAAAGo2MAAAarswAABqvDAAAGqpLQAAaqotAABqvzAAAGrAMAAAasEwAABqwjAAAGrDMAAAasQwAABqxTAAAGrGMAAAamMwAABqZDAAAGpfMgAAamAyAABqyTAAAGrKMAAAasswAABqzDAAAGo/MgAAakAyAABqQTIAAGpCMgAAas8wAABq0DAAAGrRMAAAatIwAABq0zAAAGrUMAAAatUwAABq1jAAAGrXMAAAatgwAABq2TAAAGraMAAAaqkuAABqqi4AAGp5MgAAanoyAABq3TAAAGreMAAAascuAABqyC4AAGrhMAAAauIwAABq4zAAAGrkMAAAagEwAABqAjAAAGrnMAAAaugwAABqLS4AAGouLgAAauswAABq7DAAAGrtMAAAau4wAABq7zAAAGrwMAAAavEwAABq8jAAAGrzMAAAavQwAABq9TAAAGr2MAAAavcwAABq+DAAAGr5MAAAavowAABqxzEAAGrIMQAAavswAABq/DAAAGr9MAAAav4wAABq/zAAAGoAMQAAarEvAABqsi8AAGovMQAAajAxAABqBTEAAGoGMQAAagcxAABqCDEAAGoJMQAAagoxAABqIy4AAGokLgAAajExAABqMjEAAGrtLwAAau4vAABqwy0AAGrELQAAahMxAABqFDEAAGoVMQAAahYxAABqFzEAAGoYMQAAahkxAABqGjEAAGobMQAAahwxAABqHTEAAGoeMQAAah8xAABqIDEAAGohMQAAaiIxAABqIzEAAGokMQAAapUwAABqljAAAGqZMAAAapowAABq/y0AAGoALgAAagsxAABqDDEAAGpRLgAAalIuAABqKzEAAGosMQAAai0xAABqLjEAAGoDMQAAagQxAABqDTEAAGoOMQAAajMxAABqNDEAAGo1MQAAajYxAABqNzEAAGo4MQAAamMvAABqZC8AAGo7MQAAajwxAABqPTEAAGo+MQAAaj8xAABqQDEAAGpBMQAAakIxAABqQzEAAGpEMQAAaqswAABqrDAAAGphLAAAamIsAABqSTEAAGpKMQAAaqMvAABqpC8AAGpNMQAAak4xAABqTzEAAGpQMQAAalExAABqUjEAAGqhLwAAaqIvAABqUzEAAGpUMQAAalUxAABqVjEAAGpXMQAAalgxAABqWTEAAGpaMQAAalMyAABqVDIAAGpbMQAAalwxAABqRTEAAGpGMQAAal8xAABqYDEAAGphMQAAamIxAABqYzEAAGpkMQAAas0vAABqzi8AAGpnMQAAamgxAABqNy0AAGo4LQAAamsxAABqbDEAAGpHMQAAakgxAABqpS4AAGqmLgAAanExAABqcjEAAGo9LAAAaj4sAABqdTEAAGp2MQAAancxAABqeDEAAGp5MQAAanoxAABqXywAAGpgLAAAansxAABqfDEAAGprLAAAamwsAABqfzEAAGqAMQAAanssAABqfCwAAGqXLwAAapgvAABqgzEAAGqEMQAAaoUxAABqhjEAAGpLMQAAakwxAABqiTEAAGqKMQAAaosxAABqjDEAAGqNMQAAao4xAABqfzAAAGqAMAAAatksAABq2iwAAGqTMQAAapQxAABq7SwAAGruLAAAapcxAABqmDEAAGobMAAAahwwAABqmzEAAGqcMQAAagExAABqAjEAAGqfMQAAaqAxAABqoTEAAGqiMQAAaqMxAABqpDEAAGqnMQAAaqgxAABqqTEAAGqqMQAAahExAABqEjEAAGqtMQAAaq4xAABqrzEAAGqwMQAAapsvAABqnC8AAGqzMQAAarQxAABqtTEAAGq2MQAAarcxAABquDEAAGrBLQAAasItAABquzEAAGq8MQAAaukwAABq6jAAAGq/MQAAasAxAABqwTEAAGrCMQAAasMxAABqxDEAAGrFMQAAasYxAABqBy4AAGoILgAAahMuAABqFC4AAGrLMQAAaswxAABqzTEAAGrOMQAAas8xAABq0DEAAGrRMQAAatIxAABq0zEAAGrUMQAAatUxAABq1jEAAGrXMQAAatgxAABqhS4AAGqGLgAAatsxAABq3DEAAGrdMQAAat4xAABq3zEAAGrgMQAAauExAABq4jEAAGrjMQAAauQxAABq5TEAAGrmMQAAak0wAABqTjAAAGrnMQAAaugxAABq6TEAAGrqMQAAausxAABq7DEAAGrtMQAAau4xAABq7zEAAGrwMQAAavExAABq8jEAAGprMAAAamwwAABq8zEAAGr0MQAAavUxAABq9jEAAGr3MQAAavgxAABq+TEAAGr6MQAAavsxAABq/DEAAGr9MQAAav4xAABqhS8AAGqGLwAAal0xAABqXjEAAGoDMgAAagQyAABqBTIAAGoGMgAAagcyAABqCDIAAGoJMgAAagoyAABqCzIAAGoMMgAAausvAABq7C8AAGoPMgAAahAyAABqETIAAGoSMgAAagswAABqDDAAAGopLgAAaiouAABqHzAAAGogMAAAaj8wAABqQDAAAGobMgAAahwyAABqHTIAAGoeMgAAam0yAABqbjIAAGohMgAAaiIyAABqIzIAAGokMgAAaiUyAABqJjIAAGonMgAAaigyAABqKTIAAGoqMgAAaisyAABqLDIAAGotMgAAai4yAABqLzIAAGowMgAAajEyAABqMjIAAGozMgAAajQyAABqNTIAAGo2MgAAajcyAABqODIAAGqvMAAAarAwAABq/S0AAGr+LQAAaj0yAABqPjIAAGpZLwAAalovAABqzTAAAGrOMAAAakMyAABqRDIAAGpFMgAAakYyAABqRzIAAGpIMgAAakkyAABqSjIAAGpLMgAAakwyAABqTTIAAGpOMgAAak8yAABqUDIAAGpRMgAAalIyAABqUS0AAGpSLQAAamUxAABqZjEAAGpVMgAAalYyAABqhy4AAGqILgAAalkyAABqWjIAAGpbMgAAalwyAABqXTIAAGpeMgAAascvAABqyC8AAGphMgAAamIyAABqjzEAAGqQMQAAamUyAABqZjIAAGppMQAAamoxAABqZzIAAGpoMgAAaiMwAABqJDAAAGppMgAAamoyAABqazIAAGpsMgAAah8yAABqIDIAAGpvMgAAanAyAABqcTIAAGpyMgAAanMyAABqdDIAAGp1MgAAanYyAABqdzIAAGp4MgAAagEuAABqAi4AAGp7MgAAanwyAABqfTIAAGp+MgAAan8yAABqgDIAAGqBMgAAaoIyAABqRTAAAGpGMAAAaoUyAABqhjIAAHVqLBAAAH1y9VMAAChqkBAAAGqREAAAajYQAABqNxAAAGo6EAAAajsQAABqPBAAAGo9EAAAamwQAABqbRAAAGpIEAAAakkQAABqTBAAAGpNEAAAak4QAABqTxAAAGpQEAAAalEQAABqlhAAAGqXEAAAalYQAABqVxAAAGpYEAAAalkQAABqYhAAAGpjEAAAalwQAABqXRAAAGpkEAAAamUQAABqZhAAAGpnEAAAanAQAABqcRAAAGp2EAAAancQAABqfBAAAGp9EAAAan4QAABqfxAAAGqGEAAAaocQAABqlBAAAGqVEAAAalQQAABqVRAAAGqYEAAAapkQAABqohAAAGqjEAAAaj4QAABqPxAAAGqoEAAAaqkQAABqWhAAAGpbEAAAarYQAABqtxAAAGouEAAAai8QAABqNBAAAGo1EAAAamgQAABqaRAAAGo4EAAAajkQAABqtBAAAGq1EAAAanQQAABqdRAAAGpGEAAAakcQAABqShAAAGpLEAAAam4QAABqbxAAAGpSEAAAalMQAABqQhAAAGpDEAAAaqQQAABqpRAAAGpeEAAAal8QAABqYBAAAGphEAAAajIQAABqMxAAAGpqEAAAamsQAABqqhAAAGqrEAAAanIQAABqcxAAAGpAEAAAakEQAABqeBAAAGp5EAAAaoAQAABqgRAAAGqCEAAAaoMQAABqhBAAAGqFEAAAanoQAABqexAAAGqIEAAAaokQAABqihAAAGqLEAAAaowQAABqjRAAAGqOEAAAao8QAABqMBAAAGoxEAAAapIQAABqkxAAAGpEEAAAakUQAABqmhAAAGqbEAAAapwQAABqnRAAAGqeEAAAap8QAABqoBAAAGqhEAAAaqYQAABqpxAAAGqsEAAAaq0QAABqrhAAAGqvEAAAarAQAABqsRAAAGqyEAAAarMQAABquBAAAGq5EAAAaroQAABquxAAAGq8EAAAar0QAABqvhAAAGq/EAAAdWrjMgAAfXL2UwAAKGrlMgAAauYyAABqEzMAAGoUMwAAaukyAABq6jIAAGrrMgAAauwyAABq7TIAAGruMgAAau8yAABq8DIAAGrxMgAAavIyAABq+TIAAGr6MgAAagczAABqCDMAAGr3MgAAavgyAABq8zIAAGr0MgAAagkzAABqCjMAAGr9MgAAav4yAABq/zIAAGoAMwAAagEzAABqAjMAAGoDMwAAagQzAABqQTMAAGpCMwAAagUzAABqBjMAAGr1MgAAavYyAABq+zIAAGr8MgAAagszAABqDDMAAGoNMwAAag4zAABqDzMAAGoQMwAAahEzAABqEjMAAGrnMgAAaugyAABqOzMAAGo8MwAAahczAABqGDMAAGoZMwAAahozAABqGzMAAGocMwAAah0zAABqHjMAAGofMwAAaiAzAABqITMAAGoiMwAAaiMzAABqJDMAAGolMwAAaiYzAABqJzMAAGooMwAAaikzAABqKjMAAGorMwAAaiwzAABqLTMAAGouMwAAai8zAABqMDMAAGoxMwAAajIzAABqNTMAAGo2MwAAajMzAABqNDMAAGo5MwAAajozAABqFTMAAGoWMwAAaj0zAABqPjMAAGo/MwAAakAzAABqNzMAAGo4MwAAakMzAABqRDMAAHVqRTMAAH1y91MAAChqHTUAAGoeNQAAah81AABqIDUAAGpHMwAAakgzAABqWzMAAGpcMwAAakkzAABqSjMAAGpLMwAAakwzAABqTTMAAGpOMwAAaiU1AABqJjUAAGpJNQAAako1AABqJzUAAGooNQAAak8zAABqUDMAAGrBNQAAasI1AABqKTUAAGoqNQAAalEzAABqUjMAAGotNQAAai41AABqLzUAAGowNQAAalMzAABqVDMAAGpVMwAAalYzAABq+TUAAGr6NQAAalkzAABqWjMAAGp5NgAAano2AABqrTMAAGquMwAAalc2AABqWDYAAGo3NQAAajg1AABqXTMAAGpeMwAAal8zAABqYDMAAGphMwAAamIzAABqYzMAAGpkMwAAaj01AABqPjUAAGorNQAAaiw1AABqZTMAAGpmMwAAakM1AABqRDUAAGpnMwAAamgzAABqRTUAAGpGNQAAapczAABqmDMAAGq7NgAAarw2AABqaTMAAGpqMwAAaic0AABqKDQAAGprMwAAamwzAABqmzQAAGqcNAAAam8zAABqcDMAAGpNNQAAak41AABqWTYAAGpaNgAAak81AABqUDUAAGprNgAAamw2AABqUTUAAGpSNQAAav01AABq/jUAAGpTNQAAalQ1AABqVTUAAGpWNQAAasc1AABqyDUAAGpzMwAAanQzAABqdTMAAGp2MwAAanczAABqeDMAAGp5MwAAanozAABq+TMAAGr6MwAAal01AABqXjUAAGp9MwAAan4zAABqXzUAAGpgNQAAav81AABqADYAAGphNQAAamI1AABqpzYAAGqoNgAAamM1AABqZDUAAGp/MwAAaoAzAABqgTMAAGqCMwAAaoMzAABqhDMAAGp5NQAAano1AABqaTUAAGpqNQAAaoUzAABqhjMAAGrZNAAAato0AABqszYAAGq0NgAAar01AABqvjUAAGqHMwAAaogzAABqiTMAAGqKMwAAans1AABqfDUAAGoBNgAAagI2AABqbzUAAGpwNQAAanE1AABqcjUAAGq7NQAAarw1AABq/zMAAGoANAAAao8zAABqkDMAAGqRMwAAapIzAABqczUAAGp0NQAAapMzAABqlDMAAGqVMwAAapYzAABqSTYAAGpKNgAAalczAABqWDMAAGqZMwAAapozAABqdTUAAGp2NQAAanc1AABqeDUAAGozNQAAajQ1AABqnTMAAGqeMwAAap8zAABqoDMAAGqhMwAAaqIzAABqfTUAAGp+NQAAaqMzAABqpDMAAGqrNgAAaqw2AABqfzUAAGqANQAAaqUzAABqpjMAAGqFNQAAaoY1AABqhzUAAGqINQAAaqczAABqqDMAAGqpMwAAaqozAABqqzMAAGqsMwAAaok1AABqijUAAGo1NQAAajY1AABqTzYAAGpQNgAAaos1AABqjDUAAGqvMwAAarAzAABqsTMAAGqyMwAAarMzAABqtDMAAGq1MwAAarYzAABqtzMAAGq4MwAAao81AABqkDUAAGq7MwAAarwzAABqvTMAAGq+MwAAalE2AABqUjYAAGq/MwAAasAzAABqkzUAAGqUNQAAasEzAABqwjMAAGrDMwAAasQzAABqATQAAGoCNAAAao01AABqjjUAAGr1NQAAavY1AABqlzUAAGqYNQAAasczAABqyDMAAGrJMwAAasozAABqyzMAAGrMMwAAas0zAABqzjMAAGrPMwAAatAzAABqmTUAAGqaNQAAatEzAABq0jMAAGrTMwAAatQzAABq1TMAAGrWMwAAatczAABq2DMAAGrZMwAAatozAABqnTUAAGqeNQAAatszAABq3DMAAGpVNgAAalY2AABq3TMAAGreMwAAark2AABqujYAAGrfMwAAauAzAABqoTUAAGqiNQAAajk1AABqOjUAAGrhMwAAauIzAABq4zMAAGrkMwAAauUzAABq5jMAAGqnNQAAaqg1AABq5zMAAGroMwAAaqk1AABqqjUAAGrpMwAAauozAABqqzUAAGqsNQAAajs1AABqPDUAAGqpNAAAaqo0AABq7TMAAGruMwAAaq01AABqrjUAAGqvNQAAarA1AABq8TMAAGryMwAAavMzAABq9DMAAGqxNQAAarI1AABq9TMAAGr2MwAAarM1AABqtDUAAGq1NQAAarY1AABqtzUAAGq4NQAAags0AABqDDQAAGq5NQAAaro1AABqcTMAAGpyMwAAanszAABqfDMAAGrBNgAAasI2AABq+zMAAGr8MwAAamU1AABqZjUAAGr9MwAAav4zAABqjTMAAGqOMwAAar81AABqwDUAAGrFMwAAasYzAABqAzQAAGoENAAAagU0AABqBjQAAGrFNQAAasY1AABq7zMAAGrwMwAAagk0AABqCjQAAGrDNQAAasQ1AABq9zMAAGr4MwAAag00AABqDjQAAGpXNQAAalg1AABqDzQAAGoQNAAAagc0AABqCDQAAGoRNAAAahI0AABqEzQAAGoUNAAAakc1AABqSDUAAGrLNQAAasw1AABqFTQAAGoWNAAAahc0AABqGDQAAGpdNgAAal42AABqyTUAAGrKNQAAaj80AABqQDQAAGrRNQAAatI1AABqXzYAAGpgNgAAahk0AABqGjQAAGrVNQAAatY1AABqGzQAAGocNAAAah00AABqHjQAAGofNAAAaiA0AABqITQAAGoiNAAAaiM0AABqJDQAAGrZNQAAato1AABq2zUAAGrcNQAAaiU0AABqJjQAAGqbMwAAapwzAABqKTQAAGoqNAAAahc2AABqGDYAAGrfNQAAauA1AABqkTUAAGqSNQAAauM1AABq5DUAAGrNNQAAas41AABqKzQAAGosNAAAai00AABqLjQAAGohNQAAaiI1AABqLzQAAGowNAAAajE0AABqMjQAAGrrNQAAauw1AABqMzQAAGo0NAAAau01AABq7jUAAGrvNQAAavA1AABq8TUAAGryNQAAajc0AABqODQAAGo5NAAAajo0AABqSzUAAGpMNQAAavM1AABq9DUAAGo7NAAAajw0AABqPTQAAGo+NAAAas81AABq0DUAAGpBNAAAakI0AABqQzQAAGpENAAAavc1AABq+DUAAGpHNAAAakg0AABqMTUAAGoyNQAAam02AABqbjYAAGobNgAAahw2AABq+zUAAGr8NQAAakk0AABqSjQAAGpLNAAAakw0AABqTTQAAGpONAAAapU1AABqljUAAGpPNAAAalA0AABqUTQAAGpSNAAAalM0AABqVDQAAGpVNAAAalY0AABqVzQAAGpYNAAAagM2AABqBDYAAGpZNAAAalo0AABqWzQAAGpcNAAAal00AABqXjQAAGrPNgAAatA2AABqBTYAAGoGNgAAagc2AABqCDYAAGq7NAAAarw0AABqCTYAAGoKNgAAags2AABqDDYAAGoNNgAAag42AABqRzYAAGpINgAAatE2AABq0jYAAGoRNgAAahI2AABq7TYAAGruNgAAahM2AABqFDYAAGphNAAAamI0AABqYzQAAGpkNAAAamU0AABqZjQAAGoVNgAAahY2AABqZzQAAGpoNAAAamk0AABqajQAAGoZNgAAaho2AABq3TUAAGreNQAAah02AABqHjYAAGofNgAAaiA2AABqITYAAGoiNgAAams0AABqbDQAAGptNAAAam40AABqIzYAAGokNgAAaiU2AABqJjYAAGrnNgAAaug2AABqbzQAAGpwNAAAanE0AABqcjQAAGonNgAAaig2AABqKTYAAGoqNgAAais2AABqLDYAAGpzNAAAanQ0AABqLTYAAGouNgAAai82AABqMDYAAGp1NAAAanY0AABqdzQAAGp4NAAAank0AABqejQAAGqbNQAAapw1AABqezQAAGp8NAAAatc1AABq2DUAAGozNgAAajQ2AABqNTYAAGo2NgAAan00AABqfjQAAGp/NAAAaoA0AABqgTQAAGqCNAAAaoM0AABqhDQAAGqFNAAAaoY0AABqOTYAAGo6NgAAaoc0AABqiDQAAGqJNAAAaoo0AABqizQAAGqMNAAAao00AABqjjQAAGojNQAAaiQ1AABqPTYAAGo+NgAAao80AABqkDQAAGqRNAAAapI0AABqWTUAAGpaNQAAaj82AABqQDYAAGpbNQAAalw1AABqkzQAAGqUNAAAapU0AABqljQAAGpBNQAAakI1AABqlzQAAGqYNAAAakM2AABqRDYAAGqZNAAAapo0AABqbTMAAGpuMwAAajE2AABqMjYAAGqBNgAAaoI2AABqRTYAAGpGNgAAap00AABqnjQAAGqLMwAAaowzAABqnzQAAGqgNAAAaks2AABqTDYAAGqhNAAAaqI0AABqvTYAAGq+NgAAak02AABqTjYAAGqjNAAAaqQ0AABqezYAAGp8NgAAaqU0AABqpjQAAGpTNgAAalQ2AABqpzQAAGqoNAAAauszAABq7DMAAGqrNAAAaqw0AABq4TUAAGriNQAAaq00AABqrjQAAGqvNAAAarA0AABqsTQAAGqyNAAAals2AABqXDYAAGo/NQAAakA1AABqszQAAGq0NAAAarU0AABqtjQAAGqfNQAAaqA1AABqtzQAAGq4NAAAamE2AABqYjYAAGpjNgAAamQ2AABq3zYAAGrgNgAAajU0AABqNjQAAGpnNgAAamg2AABqaTYAAGpqNgAAakU0AABqRjQAAGpnNQAAamg1AABquTQAAGq6NAAAal80AABqYDQAAGrTNQAAatQ1AABqvTQAAGq+NAAAauU1AABq5jUAAGpvNgAAanA2AABqcTYAAGpyNgAAar80AABqwDQAAGrBNAAAasI0AABqczYAAGp0NgAAaoM1AABqhDUAAGp1NgAAanY2AABqdzYAAGp4NgAAasM0AABqxDQAAGqjNgAAaqQ2AABq6TUAAGrqNQAAasU0AABqxjQAAGrHNAAAasg0AABqZTYAAGpmNgAAask0AABqyjQAAGrLNAAAasw0AABqzTQAAGrONAAAan02AABqfjYAAGp/NgAAaoA2AABqzzQAAGrQNAAAaoM2AABqhDYAAGo3NgAAajg2AABq0TQAAGrSNAAAatM0AABq1DQAAGrxNAAAavI0AABqiTYAAGqKNgAAaos2AABqjDYAAGqNNgAAao42AABqjzYAAGqQNgAAapE2AABqkjYAAGoVNQAAahY1AABq1TQAAGrWNAAAapU2AABqljYAAGrXNAAAatg0AABqlzYAAGqYNgAAapk2AABqmjYAAGprNQAAamw1AABq2zQAAGrcNAAAaps2AABqnDYAAGqdNgAAap42AABqnzYAAGqgNgAAaqE2AABqojYAAGrdNAAAat40AABq3zQAAGrgNAAAaqU2AABqpjYAAGrhNAAAauI0AABq4zQAAGrkNAAAakE2AABqQjYAAGqpNgAAaqo2AABq5TQAAGrmNAAAauc0AABq6DQAAGqBNQAAaoI1AABq6TQAAGrqNAAAaq02AABqrjYAAGqvNgAAarA2AABqsTYAAGqyNgAAaus0AABq7DQAAGo7NgAAajw2AABqtTYAAGq2NgAAarc2AABquDYAAGrtNAAAau40AABq5zUAAGroNQAAaoU2AABqhjYAAGqlNQAAaqY1AABq7zQAAGrwNAAAam01AABqbjUAAGqHNgAAaog2AABq8zQAAGr0NAAAavU0AABq9jQAAGq/NgAAasA2AABq9zQAAGr4NAAAasM2AABqxDYAAGrFNgAAasY2AABq+TQAAGr6NAAAasc2AABqyDYAAGrJNgAAaso2AABq+zQAAGr8NAAAass2AABqzDYAAGrNNgAAas42AABq/TQAAGr+NAAAav80AABqADUAAGoPNgAAahA2AABqATUAAGoCNQAAatM2AABq1DYAAGrVNgAAatY2AABq1zYAAGrYNgAAagM1AABqBDUAAGrZNgAAato2AABq2zYAAGrcNgAAat02AABq3jYAAGr1NgAAavY2AABqBTUAAGoGNQAAagc1AABqCDUAAGoJNQAAago1AABqCzUAAGoMNQAAag01AABqDjUAAGrhNgAAauI2AABqDzUAAGoQNQAAahE1AABqEjUAAGrjNgAAauQ2AABqEzUAAGoUNQAAauU2AABq5jYAAGqjNQAAaqQ1AABqkzYAAGqUNgAAauk2AABq6jYAAGrrNgAAauw2AABquTMAAGq6MwAAau82AABq8DYAAGrxNgAAavI2AABq8zYAAGr0NgAAahc1AABqGDUAAGr3NgAAavg2AABq+TYAAGr6NgAAahk1AABqGjUAAGr7NgAAavw2AABq/TYAAGr+NgAAav82AABqADcAAGoBNwAAagI3AABqAzcAAGoENwAAahs1AABqHDUAAHVqhBIAAH1y+FMAAChqhhIAAGqHEgAAajoTAABqOxMAAGoCEwAAagMTAABq0hIAAGrTEgAAatQSAABq1RIAAGqWEgAAapcSAABq2BIAAGrZEgAAauQSAABq5RIAAGokEwAAaiUTAABqiBIAAGqJEgAAatwSAABq3RIAAGqKEgAAaosSAABqjBIAAGqNEgAAauASAABq4RIAAGriEgAAauMSAABquBIAAGq5EgAAao4SAABqjxIAAGqQEgAAapESAABq6BIAAGrpEgAAauoSAABq6xIAAGrsEgAAau0SAABqlBIAAGqVEgAAatYSAABq1xIAAGqYEgAAapkSAABq7hIAAGrvEgAAavASAABq8RIAAGqaEgAAapsSAABqnBIAAGqdEgAAap4SAABqnxIAAGqgEgAAaqESAABq9BIAAGr1EgAAaqISAABqoxIAAGqkEgAAaqUSAABqphIAAGqnEgAAavYSAABq9xIAAGreEgAAat8SAABqqBIAAGqpEgAAaqoSAABqqxIAAGr4EgAAavkSAABqrhIAAGqvEgAAarASAABqsRIAAGqyEgAAarMSAABqGhMAAGobEwAAakATAABqQRMAAGoKEwAAagsTAABq+hIAAGr7EgAAavwSAABq/RIAAGq0EgAAarUSAABqIhMAAGojEwAAagATAABqARMAAGq8EgAAar0SAABqBBMAAGoFEwAAarYSAABqtxIAAGoQEwAAahETAABqQhMAAGpDEwAAagYTAABqBxMAAGoIEwAAagkTAABqOBMAAGo5EwAAauYSAABq5xIAAGq6EgAAarsSAABqDBMAAGoNEwAAag4TAABqDxMAAGq+EgAAar8SAABqEhMAAGoTEwAAahQTAABqFRMAAGoWEwAAahcTAABqGBMAAGoZEwAAasASAABqwRIAAGocEwAAah0TAABqwhIAAGrDEgAAah4TAABqHxMAAGrEEgAAasUSAABqxhIAAGrHEgAAasgSAABqyRIAAGrKEgAAassSAABq2hIAAGrbEgAAaiYTAABqJxMAAGooEwAAaikTAABqKhMAAGorEwAAavISAABq8xIAAGosEwAAai0TAABqLhMAAGovEwAAajATAABqMRMAAGogEwAAaiETAABqMhMAAGozEwAAajQTAABqNRMAAGrMEgAAas0SAABqzhIAAGrPEgAAajYTAABqNxMAAGrQEgAAatESAABq/hIAAGr/EgAAajwTAABqPRMAAGo+EwAAaj8TAABqkhIAAGqTEgAAaqwSAABqrRIAAHVq9TcAAH1y+VMAAChqBzgAAGoIOAAAavc3AABq+DcAAGr/NwAAagA4AABqCTgAAGoKOAAAahU4AABqFjgAAGr7NwAAavw3AABqCzgAAGoMOAAAag04AABqDjgAAGoPOAAAahA4AABqETgAAGoSOAAAahs4AABqHDgAAGr9NwAAav43AABqEzgAAGoUOAAAavk3AABq+jcAAGoBOAAAagI4AABqFzgAAGoYOAAAaiM4AABqJDgAAGoDOAAAagQ4AABqHTgAAGoeOAAAah84AABqIDgAAGohOAAAaiI4AABqBTgAAGoGOAAAahk4AABqGjgAAHVqJTgAAH1y+lMAAChqJzgAAGooOAAAas04AABqzjgAAGorOAAAaiw4AABqLTgAAGouOAAAai84AABqMDgAAGoxOAAAajI4AABqMzgAAGo0OAAAajU4AABqNjgAAGo3OAAAajg4AABqOTgAAGo6OAAAajs4AABqPDgAAGrTOAAAatQ4AABqNzkAAGo4OQAAakM4AABqRDgAAGpFOAAAakY4AABqZTgAAGpmOAAAakk4AABqSjgAAGpLOAAAakw4AABqTTgAAGpOOAAAak84AABqUDgAAGpROAAAalI4AABqZzgAAGpoOAAAalU4AABqVjgAAGpXOAAAalg4AABqWTgAAGpaOAAAals4AABqXDgAAGpdOAAAal44AABqXzgAAGpgOAAAamE4AABqYjgAAGpjOAAAamQ4AABqRzgAAGpIOAAAalM4AABqVDgAAGppOAAAamo4AABqazgAAGpsOAAAam04AABqbjgAAGpvOAAAanA4AABqcTgAAGpyOAAAanM4AABqdDgAAGp1OAAAanY4AABqdzgAAGp4OAAAank4AABqejgAAGp7OAAAanw4AABqfTgAAGp+OAAAag05AABqDjkAAGqBOAAAaoI4AABqgzgAAGqEOAAAaoU4AABqhjgAAGqHOAAAaog4AABqDzkAAGoQOQAAaos4AABqjDgAAGqNOAAAao44AABqjzgAAGqQOAAAapE4AABqkjgAAGqTOAAAapQ4AABqlTgAAGqWOAAAapc4AABqmDgAAGpLOQAAakw5AABqmzgAAGqcOAAAap04AABqnjgAAGqfOAAAaqA4AABqoTgAAGqiOAAAaqM4AABqpDgAAGoVOQAAahY5AABqpzgAAGqoOAAAaqk4AABqqjgAAGqrOAAAaqw4AABqrTgAAGquOAAAaq84AABqsDgAAGqxOAAAarI4AABqszgAAGq0OAAAarU4AABqtjgAAGq3OAAAarg4AABquTgAAGq6OAAAars4AABqvDgAAGrlOAAAauY4AABqvzgAAGrAOAAAasE4AABqwjgAAGrDOAAAasQ4AABqxTgAAGrGOAAAasc4AABqyDgAAGrJOAAAaso4AABqyzgAAGrMOAAAaik4AABqKjgAAGrPOAAAatA4AABq0TgAAGrSOAAAaj84AABqQDgAAGrVOAAAatY4AABq1zgAAGrYOAAAatk4AABq2jgAAGrbOAAAatw4AABq3TgAAGreOAAAat84AABq4DgAAGrhOAAAauI4AABq4zgAAGrkOAAAar04AABqvjgAAGrnOAAAaug4AABq6TgAAGrqOAAAaus4AABq7DgAAGrtOAAAau44AABq7zgAAGrwOAAAavE4AABq8jgAAGrzOAAAavQ4AABq9TgAAGr2OAAAavc4AABq+DgAAGr5OAAAavo4AABq+zgAAGr8OAAAav04AABq/jgAAGr/OAAAagA5AABqATkAAGoCOQAAagM5AABqBDkAAGoFOQAAagY5AABqBzkAAGoIOQAAagk5AABqCjkAAGoLOQAAagw5AABqfzgAAGqAOAAAaok4AABqijgAAGoROQAAahI5AABqPTgAAGo+OAAAaqU4AABqpjgAAGoZOQAAaho5AABqGzkAAGocOQAAah05AABqHjkAAGofOQAAaiA5AABqITkAAGoiOQAAaiM5AABqJDkAAGpvOQAAanA5AABqJzkAAGooOQAAaik5AABqKjkAAGorOQAAaiw5AABqLTkAAGouOQAAahM5AABqFDkAAGovOQAAajA5AABqFzkAAGoYOQAAajM5AABqNDkAAGo1OQAAajY5AABqQTgAAGpCOAAAajk5AABqOjkAAGo7OQAAajw5AABqPTkAAGo+OQAAaj85AABqQDkAAGpBOQAAakI5AABqQzkAAGpEOQAAakU5AABqRjkAAGpHOQAAakg5AABqSTkAAGpKOQAAapk4AABqmjgAAGpNOQAAak45AABqTzkAAGpQOQAAalE5AABqUjkAAGpTOQAAalQ5AABqVTkAAGpWOQAAalc5AABqWDkAAGpZOQAAalo5AABqWzkAAGpcOQAAal05AABqXjkAAGpfOQAAamA5AABqYTkAAGpiOQAAamM5AABqZDkAAGplOQAAamY5AABqZzkAAGpoOQAAamk5AABqajkAAGprOQAAamw5AABqbTkAAGpuOQAAaiU5AABqJjkAAGoxOQAAajI5AABqcTkAAGpyOQAAanM5AABqdDkAAHVqk1IAAH1y+1MAAChqdjkAAGp3OQAAang5AABqeTkAAGp6OQAAans5AABqfDkAAGp9OQAAan45AABqfzkAAGqAOQAAaoE5AABqgjkAAGqDOQAAaoQ5AABqhTkAAGqGOQAAaoc5AABqyEMAAGrJQwAAaoo5AABqizkAAGqMOQAAao05AABqjjkAAGqPOQAAapA5AABqkTkAAGqSOQAAapM5AABqokEAAGqjQQAAapQ5AABqlTkAAGqWOQAAapc5AABqmDkAAGqZOQAAapo5AABqmzkAAGqcOQAAap05AABqnjkAAGqfOQAAaqA5AABqoTkAAGqiOQAAaqM5AABqpDkAAGqlOQAAaqY5AABqpzkAAGqoOQAAaqk5AABqqjkAAGqrOQAAaqw5AABqrTkAAGquOQAAaq85AABqo1IAAGqkUgAAarI5AABqszkAAGq0OQAAarU5AABqtjkAAGq3OQAAarg5AABquTkAAGq6OQAAars5AABqvDkAAGq9OQAAar45AABqvzkAAGrAOQAAasE5AABqwjkAAGrDOQAAasQ5AABqxTkAAGrGOQAAasc5AABqyDkAAGrJOQAAaso5AABqyzkAAGrMOQAAas05AABqzjkAAGrPOQAAavw8AABq/TwAAGrSOQAAatM5AABqREwAAGpFTAAAatQ5AABq1TkAAGrWOQAAatc5AABq2DkAAGrZOQAAato5AABq2zkAAGrcOQAAat05AABq3jkAAGrfOQAAauA5AABq4TkAAGriOQAAauM5AABq5DkAAGrlOQAAauY5AABq5zkAAGroOQAAauk5AABq6jkAAGrrOQAAauw5AABq7TkAAGruOQAAau85AABq8DkAAGrxOQAAavI5AABq8zkAAGr0OQAAavU5AABq9jkAAGr3OQAAavg5AABq+TkAAGr6OQAAavs5AABq/DkAAGr9OQAAav45AABq/zkAAGrmSgAAaudKAABqADoAAGoBOgAAagI6AABqAzoAAGoEOgAAagU6AABqBjoAAGoHOgAAao5KAABqj0oAAGoKOgAAags6AABqDDoAAGoNOgAAag46AABqDzoAAGoQOgAAahE6AABqEjoAAGoTOgAAahQ6AABqFToAAGoWOgAAahc6AABqkEoAAGqRSgAAaho6AABqGzoAAGocOgAAah06AABqHjoAAGofOgAAaiI6AABqIzoAAGqCQAAAaoNAAABqkkoAAGqTSgAAaig6AABqKToAAGoqOgAAais6AABqLDoAAGotOgAAai46AABqLzoAAGowOgAAajE6AABqMjoAAGozOgAAaptSAABqnFIAAGo0OgAAajU6AABqNjoAAGo3OgAAajg6AABqOToAAGo6OgAAajs6AABqPDoAAGo9OgAAakA6AABqQToAAGqKQAAAaotAAABqJkcAAGonRwAAakY6AABqRzoAAGpIOgAAakk6AABqSjoAAGpLOgAAakw6AABqTToAAGpOOgAAak86AABqUDoAAGpROgAAalI6AABqUzoAAGpUOgAAalU6AABqVjoAAGpXOgAAalo6AABqWzoAAGpcOgAAal06AABqXjoAAGpfOgAAamA6AABqYToAAGpiOgAAamM6AABqZDoAAGplOgAAamg6AABqaToAAGpqOgAAams6AABqbDoAAGptOgAAam46AABqbzoAAGpwOgAAanE6AABqcjoAAGpzOgAAanQ6AABqdToAAGruQwAAau9DAABqeDoAAGp5OgAAano6AABqezoAAGp8OgAAan06AABqfjoAAGp/OgAAaoA6AABqgToAAGpUQAAAalVAAABqhDoAAGqFOgAAaoY6AABqhzoAAGqoSgAAaqlKAABqiDoAAGqJOgAAaoo6AABqizoAAGqMOgAAao06AABqjjoAAGqPOgAAapA6AABqkToAAGqSOgAAapM6AABqlDoAAGqVOgAAapY6AABqlzoAAGqYOgAAapk6AABqmjoAAGqbOgAAapw6AABqnToAAGoYPQAAahk9AABqoDoAAGqhOgAAaqI6AABqozoAAGqVUgAAapZSAABqpjoAAGqnOgAAaqg6AABqqToAAGqqOgAAaqs6AABqrjoAAGqvOgAAarA6AABqsToAAGqyOgAAarM6AABqtDoAAGq1OgAAarY6AABqtzoAAGq4OgAAark6AABqujoAAGq7OgAAarw6AABqvToAAGq+OgAAar86AABqwDoAAGrBOgAAasI6AABqwzoAAGrEOgAAasU6AABqxjoAAGrHOgAAasg6AABqyToAAGrKOgAAass6AABqzDoAAGrNOgAAas46AABqzzoAAGrQOgAAatE6AABqsDkAAGqxOQAAatQ6AABq1ToAAGpCSwAAakNLAABq1joAAGrXOgAAatg6AABq2ToAAGraOgAAats6AABq3DoAAGrdOgAAat46AABq3zoAAGrgOgAAauE6AABq4joAAGrjOgAAauQ6AABq5ToAAGoyQQAAajNBAABq5joAAGrnOgAAaug6AABq6ToAAGrqOgAAaus6AABq7DoAAGrtOgAAau46AABq7zoAAGrwOgAAavE6AABq8joAAGrzOgAAavQ6AABq9ToAAGr2OgAAavc6AABq+DoAAGr5OgAAavo6AABq+zoAAGqhUgAAaqJSAABq/DoAAGr9OgAAav5DAABq/0MAAGoCOwAAagM7AABqBDsAAGoFOwAAagY7AABqBzsAAGoIOwAAagk7AABqCjsAAGoLOwAAagw7AABqDTsAAGqrUgAAaqxSAABqEDsAAGoROwAAahQ7AABqFTsAAGoWOwAAahc7AABqGDsAAGoZOwAAaho7AABqGzsAAGocOwAAah07AABqHjsAAGofOwAAaiA7AABqITsAAGoiOwAAaiM7AABqJDsAAGolOwAAaiY7AABqJzsAAGooOwAAaik7AABqKjsAAGorOwAAakpHAABqS0cAAGouOwAAai87AABqMDsAAGoxOwAAajI7AABqMzsAAGo2OwAAajc7AABqODsAAGo5OwAAajo7AABqOzsAAGo8OwAAaj07AABqPjsAAGo/OwAAai49AABqLz0AAGpCOwAAakM7AABqwEoAAGrBSgAAakY7AABqRzsAAGpIOwAAakk7AABqvkAAAGq/QAAAakw7AABqTTsAAGpOOwAAak87AABqUDsAAGpROwAAalI7AABqUzsAAGpUOwAAalU7AABqVjsAAGpXOwAAalg7AABqWTsAAGpaOwAAals7AABqXDsAAGpdOwAAal47AABqXzsAAGpgOwAAamE7AABqYjsAAGpjOwAAamQ7AABqZTsAAGpmOwAAamc7AABqbDsAAGptOwAAam47AABqbzsAAGpwOwAAanE7AABqcjsAAGpzOwAAanQ7AABqdTsAAGp2OwAAanc7AABqeDsAAGp5OwAAano7AABqezsAAGp8OwAAan07AABqgDsAAGqBOwAAaoI7AABqgzsAAGqEOwAAaoU7AABqhjsAAGqHOwAAaog7AABqiTsAAGoqSwAAaitLAABqijsAAGqLOwAAaow7AABqjTsAAGqOOwAAao87AABqkDsAAGqROwAAakQ9AABqRT0AAGqUOwAAapU7AABqljsAAGqXOwAAapg7AABqmTsAAGqaOwAAaps7AABqnDsAAGqdOwAAap47AABqnzsAAGqgOwAAaqE7AABqojsAAGqjOwAAaqQ7AABqpTsAAGqmOwAAaqc7AABqqDsAAGqpOwAAaqo7AABqqzsAAGoURAAAahVEAABqrjsAAGqvOwAAarA7AABqsTsAAGq0OwAAarU7AABqtjsAAGq3OwAAarg7AABquTsAAGq6OwAAars7AABqvDsAAGq9OwAAar47AABqvzsAAGrAOwAAasE7AABqwjsAAGrDOwAAasQ7AABqxTsAAGrGOwAAasc7AABqyDsAAGrJOwAAaso7AABqyzsAAGrMOwAAas07AABqzjsAAGrPOwAAatA7AABq0TsAAGqiSAAAaqNIAABq0jsAAGrTOwAAatQ7AABq1TsAAGrWOwAAatc7AABq2DsAAGrZOwAAato7AABq2zsAAGrcOwAAat07AABq3jsAAGrfOwAAauA7AABq4TsAAGriOwAAauM7AABq2kAAAGrbQAAAauY7AABq5zsAAGroOwAAauk7AABq6jsAAGrrOwAAauw7AABq7TsAAGruOwAAau87AABq8DsAAGrxOwAAavI7AABq8zsAAGr0OwAAavU7AABq9jsAAGr3OwAAavg7AABq+TsAAGr6OwAAavs7AABqLkMAAGovQwAAaiRLAABqJUsAAGr+OwAAav87AABqADwAAGoBPAAAagI8AABqAzwAAGoEPAAAagU8AABqBjwAAGoHPAAAagg8AABqCTwAAGqUSQAAapVJAABqCjwAAGoLPAAAagw8AABqDTwAAGoOPAAAag88AABqEDwAAGoRPAAAahI8AABqEzwAAGpORQAAak9FAABqFDwAAGoVPAAAahY8AABqFzwAAGoYPAAAahk8AABqGjwAAGobPAAAahw8AABqHTwAAGoePAAAah88AABqIDwAAGohPAAAaiI8AABqIzwAAGokPAAAaiU8AABqJjwAAGonPAAAaig8AABqKTwAAGoqPAAAais8AABqLDwAAGotPAAAai48AABqLzwAAGpkRwAAamVHAABqMDwAAGoxPAAAajI8AABqMzwAAGo0PAAAajU8AABqNjwAAGo3PAAAajg8AABqOTwAAGo6PAAAajs8AABqPDwAAGo9PAAAamA9AABqYT0AAGpAPAAAakE8AABqDksAAGoPSwAAaixEAABqLUQAAGpEPAAAakU8AABqRjwAAGpHPAAAakg8AABqSTwAAGpKPAAAaks8AABqTDwAAGpNPAAAak48AABqTzwAAGpQPAAAalE8AABqUjwAAGpTPAAAalQ8AABqVTwAAGpWPAAAalc8AABqWDwAAGpZPAAAajQ7AABqNTsAAGpcPAAAal08AABqXjwAAGpfPAAAarZHAABqt0cAAGpgPAAAamE8AABqYjwAAGpjPAAAamg9AABqaT0AAGpmPAAAamc8AABqaDwAAGppPAAAamo8AABqazwAAGpsPAAAam08AABqbjwAAGpvPAAAanxHAABqfUcAAGogSQAAaiFJAABqcjwAAGpzPAAAanQ8AABqdTwAAGpyQAAAanNAAABqeDwAAGp5PAAAano8AABqezwAAGp8PAAAan08AABqfjwAAGp/PAAAaoA8AABqgTwAAGqCPAAAaoM8AABqhDwAAGqFPAAAaog8AABqiTwAAGqKPAAAaos8AABqjDwAAGqNPAAAao48AABqjzwAAGqQPAAAapE8AABqkjwAAGqTPAAAapQ8AABqlTwAAGqWPAAAapc8AABqmDwAAGqZPAAAapo8AABqmzwAAGqcPAAAap08AABqnjwAAGqfPAAAaqA8AABqoTwAAGqiPAAAaqM8AABqpDwAAGqlPAAAaqY8AABqpzwAAGqoPAAAaqk8AABqqjwAAGqrPAAAavRAAABq9UAAAGquPAAAaq88AABqsDwAAGqxPAAAanA9AABqcT0AAGq0PAAAarU8AABqtjwAAGq3PAAAaro8AABquzwAAGq+PAAAar88AABqwDwAAGrBPAAAasI8AABqwzwAAGrEPAAAasU8AABqyDwAAGrJPAAAaso8AABqyzwAAGrMPAAAas08AABqzjwAAGrPPAAAatA8AABq0TwAAGrSPAAAatM8AABq/j0AAGr/PQAAavxAAABq/UAAAGrYPAAAatk8AABq2jwAAGrbPAAAatw8AABq3TwAAGrePAAAat88AABqQEQAAGpBRAAAauI8AABq4zwAAGrkPAAAauU8AABq5jwAAGrnPAAAaug8AABq6TwAAGrqPAAAaus8AABq7jwAAGrvPAAAavA8AABq8TwAAGryPAAAavM8AABq9DwAAGr1PAAAavY8AABq9zwAAGr4PAAAavk8AABq+jwAAGr7PAAAatA5AABq0TkAAGr+PAAAav88AABquEkAAGq5SQAAagA9AABqAT0AAGoOOwAAag87AABqBD0AAGoFPQAAagY9AABqBz0AAGoIPQAAagk9AABqIDoAAGohOgAAagw9AABqDT0AAGoOPQAAag89AABqED0AAGoRPQAAavw7AABq/TsAAGoUPQAAahU9AABqFj0AAGoXPQAAap46AABqnzoAAGoaPQAAahs9AABqHD0AAGodPQAAah49AABqHz0AAGogPQAAaiE9AABqIj0AAGojPQAAaiQ9AABqJT0AAGomPQAAaic9AABqKD0AAGopPQAAaio9AABqKz0AAGosPQAAai09AABqQDsAAGpBOwAAagpBAABqC0EAAGoyPQAAajM9AABqND0AAGo1PQAAajY9AABqNz0AAGo4PQAAajk9AABqOj0AAGo7PQAAajw9AABqPT0AAGpQRAAAalFEAABqQD0AAGpBPQAAaqBHAABqoUcAAGqSOwAAapM7AABqRj0AAGpHPQAAakg9AABqST0AAGpKPQAAaks9AABqTD0AAGpNPQAAak49AABqTz0AAGpQPQAAalE9AABqUj0AAGpTPQAAalREAABqVUQAAGpWPQAAalc9AABqVkoAAGpXSgAAalo9AABqWz0AAGpcPQAAal09AABqXj0AAGpfPQAAaj48AABqPzwAAGpiPQAAamM9AABqZD0AAGplPQAAamY9AABqZz0AAGpkPAAAamU8AABqvEEAAGq9QQAAamo9AABqaz0AAGpsPQAAam09AABqbj0AAGpvPQAAarI8AABqszwAAGp0PQAAanU9AABqdj0AAGp3PQAAang9AABqeT0AAGp6PQAAans9AABqpkcAAGqnRwAAan49AABqfz0AAGqAPQAAaoE9AABqgj0AAGqDPQAAaoQ9AABqhT0AAGqIPQAAaok9AABqij0AAGqLPQAAaow9AABqjT0AAGqOPQAAao89AABqXkQAAGpfRAAAapI9AABqkz0AAGqUPQAAapU9AABqlj0AAGqXPQAAajxEAABqPUQAAGqYPQAAapk9AABqmj0AAGqbPQAAapw9AABqnT0AAGqePQAAap89AABqoD0AAGqhPQAAaqQ9AABqpT0AAGqmPQAAaqc9AABq7koAAGrvSgAAaqg9AABqqT0AAGqqPQAAaqs9AABqrD0AAGqtPQAAaq49AABqrz0AAGqwPQAAarE9AABqsj0AAGqzPQAAarQ9AABqtT0AAGq2PQAAarc9AABquD0AAGq5PQAAaro9AABquz0AAGq0RwAAarVHAABqvj0AAGq/PQAAasA9AABqwT0AAGrCPQAAasM9AABqxD0AAGrFPQAAasY9AABqxz0AAGo6SAAAajtIAABqyD0AAGrJPQAAaso9AABqyz0AAGrMPQAAas09AABqzj0AAGrPPQAAahRLAABqFUsAAGqCRQAAaoNFAABq0j0AAGrTPQAAatQ9AABq1T0AAGrWPQAAatc9AABq2D0AAGrZPQAAato9AABq2z0AAGp6RAAAantEAABq3D0AAGrdPQAAat49AABq3z0AAGrsPAAAau08AABq4j0AAGrjPQAAauQ9AABq5T0AAGrmPQAAauc9AABqtEkAAGq1SQAAaug9AABq6T0AAGrqPQAAaus9AABq7D0AAGrtPQAAau49AABq7z0AAGrwPQAAavE9AABqxj4AAGrHPgAAavQ9AABq9T0AAGr2PQAAavc9AABq+D0AAGr5PQAAav4/AABq/z8AAGr8PQAAav09AABqAD4AAGoBPgAAagI+AABqAz4AAGoEPgAAagU+AABqCD4AAGoJPgAAago+AABqCz4AAGoMPgAAag0+AABqDj4AAGoPPgAAahA+AABqET4AAGoSPgAAahM+AABqFD4AAGoVPgAAahY+AABqFz4AAGoYPgAAahk+AABqGj4AAGobPgAAahw+AABqHT4AAGoePgAAah8+AABqID4AAGohPgAAam5EAABqb0QAAGokPgAAaiU+AABqJj4AAGonPgAAaig+AABqKT4AAGoqPgAAais+AABqLD4AAGotPgAAajA+AABqMT4AAGpcRwAAal1HAABqMj4AAGozPgAAasZHAABqx0cAAGo2PgAAajc+AABqOD4AAGo5PgAAajo+AABqOz4AAGo8PgAAaj0+AABqPj4AAGo/PgAAakA+AABqQT4AAGpAQQAAakFBAABqyEcAAGrJRwAAakY+AABqRz4AAGoeSwAAah9LAABqSj4AAGpLPgAAakw+AABqTT4AAGpOPgAAak8+AABqUD4AAGpRPgAAalI+AABqUz4AAGpUPgAAalU+AABqVj4AAGpXPgAAalg+AABqWT4AAGpaPgAAals+AABqXD4AAGpdPgAAal4+AABqXz4AAGpgPgAAamE+AABqYj4AAGpjPgAAaqxIAABqrUgAAGpmPgAAamc+AABqaD4AAGppPgAAamo+AABqaz4AAGpsPgAAam0+AABqfkQAAGp/RAAAanI+AABqcz4AAGp0PgAAanU+AABq3kIAAGrfQgAAanY+AABqdz4AAGp4PgAAank+AABqfD4AAGp9PgAAaoA+AABqgT4AAGqCPgAAaoM+AABqhD4AAGqFPgAAaoY+AABqhz4AAGqIPgAAaok+AABqij4AAGqLPgAAaow+AABqjT4AAGqOPgAAao8+AABqkD4AAGqRPgAAasY8AABqxzwAAGqUPgAAapU+AABqlj4AAGqXPgAAapg+AABqmT4AAGqaPgAAaps+AABqnD4AAGqdPgAAap4+AABqnz4AAGrcTAAAat1MAABqBj4AAGoHPgAAaqI+AABqoz4AAGqkPgAAaqU+AABqpj4AAGqnPgAAaqg+AABqqT4AAGqqPgAAaqs+AABqrD4AAGqtPgAAaq4+AABqrz4AAGqwPgAAarE+AABqsj4AAGqzPgAAarQ+AABqtT4AAGq2PgAAarc+AABquD4AAGq5PgAAaro+AABquz4AAGq8PgAAar0+AABqvj4AAGq/PgAAajRLAABqNUsAAGrCPgAAasM+AABqNksAAGo3SwAAasg+AABqyT4AAGrKPgAAass+AABqVkEAAGpXQQAAas4+AABqzz4AAGrQPgAAatE+AABq0j4AAGrTPgAAatQ+AABq1T4AAGrWPgAAatc+AABq2D4AAGrZPgAAato+AABq2z4AAGo6SwAAajtLAABq6EcAAGrpRwAAauA+AABq4T4AAGriPgAAauM+AABq5D4AAGrlPgAAauY+AABq5z4AAGrqPgAAaus+AABq7D4AAGrtPgAAau4+AABq7z4AAGqYRAAAaplEAABq8j4AAGrzPgAAavQ+AABq9T4AAGr2PgAAavc+AABqLj4AAGovPgAAavo+AABq+z4AAGr8PgAAav0+AABq/j4AAGr/PgAAagA/AABqAT8AAGoCPwAAagM/AABqBD8AAGoFPwAAalg6AABqWToAAGoIPwAAagk/AABqvkUAAGq/RQAAagw/AABqDT8AAGo+RgAAaj9GAABqEj8AAGoTPwAAavJHAABq80cAAGoWPwAAahc/AABqGD8AAGoZPwAAaho/AABqGz8AAGocPwAAah0/AABqHj8AAGofPwAAaiA/AABqIT8AAGr0RwAAavVHAABqJD8AAGolPwAAaiY/AABqJz8AAGoqPwAAais/AABqLD8AAGotPwAAai4/AABqLz8AAGowPwAAajE/AABqMj8AAGozPwAAajQ/AABqNT8AAGo2PwAAajc/AABqOD8AAGo5PwAAajo/AABqOz8AAGpERwAAakVHAABqPj8AAGo/PwAAakA/AABqQT8AAGrgPQAAauE9AABqRD8AAGpFPwAAakY/AABqRz8AAGpIPwAAakk/AABqTD8AAGpNPwAAaupKAABq60oAAGpOPwAAak8/AABqUD8AAGpRPwAAagJIAABqA0gAAGpUPwAAalU/AABqVj8AAGpXPwAAamxBAABqbUEAAGpaPwAAals/AABqXD8AAGpdPwAAam5BAABqb0EAAGpgPwAAamE/AABqYj8AAGpjPwAAamQ/AABqZT8AAGpmPwAAamc/AABqaD8AAGppPwAAamo/AABqaz8AAGqmRAAAaqdEAABqbj8AAGpvPwAAavxMAABq/UwAAGpwPwAAanE/AABqcj8AAGpzPwAAanQ/AABqdT8AAGp2PwAAanc/AABqeD8AAGp5PwAAano/AABqez8AAGp8PwAAan0/AABqfj8AAGp/PwAAaoA/AABqgT8AAGqCPwAAaoM/AABqhD8AAGqFPwAAaoY/AABqhz8AAGqIPwAAaok/AABqjD8AAGqNPwAAao4/AABqjz8AAGqQPwAAapE/AABqkj8AAGqTPwAAapQ/AABqlT8AAGqWPwAAapc/AABqmD8AAGqZPwAAapo/AABqmz8AAGqcPwAAap0/AABqnj8AAGqfPwAAaqA/AABqoT8AAGqiPwAAaqM/AABqpD8AAGqlPwAAaqY/AABqpz8AAGqoPwAAaqk/AABqqj8AAGqrPwAAaq4/AABqrz8AAGqwPwAAarE/AABqsj8AAGqzPwAAarQ/AABqtT8AAGq2PwAAarc/AABquD8AAGq5PwAAaro/AABquz8AAGq8PwAAar0/AABqvj8AAGq/PwAAasA/AABqwT8AAGrCPwAAasM/AABqxD8AAGrFPwAAasY/AABqxz8AAGrIPwAAask/AABqyj8AAGrLPwAAasw/AABqzT8AAGrOPwAAas8/AABq0D8AAGrRPwAAatI/AABq0z8AAGp0TAAAanVMAABq1D8AAGrVPwAAatY/AABq1z8AAGrYPwAAatk/AABq2j8AAGrbPwAAatw/AABq3T8AAGrePwAAat8/AABq4D8AAGrhPwAAauI/AABq4z8AAGrkPwAAauU/AABq5j8AAGrnPwAAaug/AABq6T8AAGrqPwAAaus/AABq7D8AAGrtPwAAasRIAABqxUgAAGruPwAAau8/AABq8D8AAGrxPwAAavI/AABq8z8AAGr0PwAAavU/AABq9j8AAGr3PwAAavg/AABq+T8AAGr6PwAAavs/AABq/D8AAGr9PwAAagBAAABqAUAAAGoCQAAAagNAAABqBEAAAGoFQAAAagZAAABqB0AAAGq4PAAAark8AABqCkAAAGoLQAAAagxAAABqDUAAAGoOQAAAag9AAABqEEAAAGoRQAAAaqZNAABqp00AAGoSQAAAahNAAABqFEAAAGoVQAAAahZAAABqF0AAAGqCQQAAaoNBAABqGkAAAGobQAAAahxAAABqHUAAAGoeQAAAah9AAABqIEAAAGohQAAAaohBAABqiUEAAGokQAAAaiVAAABqJkAAAGonQAAAaihAAABqKUAAAGoqQAAAaitAAABqLEAAAGotQAAAai5AAABqL0AAAGowQAAAajFAAABqMkAAAGozQAAAajRAAABqNUAAAGo2QAAAajdAAABqIkgAAGojSAAAajpAAABqO0AAAGo+QAAAaj9AAABqQEAAAGpBQAAAakJAAABqQ0AAAGpEQAAAakVAAABqJk0AAGonTQAAaiRIAABqJUgAAGoIRgAAaglGAABqTEAAAGpNQAAAak5AAABqT0AAAGpQQAAAalFAAABqUkAAAGpTQAAAalZAAABqV0AAAGqQQQAAapFBAABqXEAAAGpdQAAAal5AAABqX0AAAGpgQAAAamFAAABqYkAAAGpjQAAAamRAAABqZUAAAGpmQAAAamdAAABqaEAAAGppQAAAamxAAABqbUAAAGpuQAAAam9AAABqcEAAAGpxQAAAanRAAABqdUAAAGp2QAAAandAAABqeEAAAGp5QAAAanpAAABqe0AAAGoqSAAAaitIAABqfkAAAGp/QAAAaoBAAABqgUAAAGpMTAAAak1MAABqJDoAAGolOgAAaoRAAABqhUAAAGqGQAAAaodAAABqiEAAAGqJQAAAakI6AABqQzoAAGqMQAAAao1AAABqjkAAAGqPQAAAapBAAABqkUAAAGqSQAAAapNAAABqlEAAAGqVQAAAaphAAABqmUAAAGqaQAAAaptAAABqnEAAAGqdQAAAap5AAABqn0AAAGqgQAAAaqFAAABqokAAAGqjQAAAaqRAAABqpUAAAGqmQAAAaqdAAABqqEAAAGqpQAAAaqpAAABqq0AAAGqsQAAAaq1AAABqrkAAAGqvQAAAarBAAABqsUAAAGqyQAAAarNAAABqtEAAAGq1QAAAarZAAABqt0AAAGq4QAAAarlAAABqukAAAGq7QAAAarxAAABqvUAAAGpKOwAAaks7AABqwEAAAGrBQAAAasJAAABqw0AAAGrEQAAAasVAAABqxkAAAGrHQAAAashAAABqyUAAAGrKQAAAastAAABqzEAAAGrNQAAAas5AAABqz0AAAGrQQAAAatFAAABq0kAAAGrTQAAAatRAAABq1UAAAGrWQAAAatdAAABq2EAAAGrZQAAAauQ7AABq5TsAAGo0SAAAajVIAABqpDoAAGqlOgAAat5AAABq30AAAGrgQAAAauFAAABq4kAAAGrjQAAAajxLAABqPUsAAGrkQAAAauVAAABq5kAAAGrnQAAAauhAAABq6UAAAGrqQAAAautAAABq7EAAAGrtQAAAau5AAABq70AAAGrwQAAAavFAAABq0kUAAGrTRQAAavJAAABq80AAAGqsPAAAaq08AABq9kAAAGr3QAAAavhAAABq+UAAAGr6QAAAavtAAABq1jwAAGrXPAAAav5AAABq/0AAAGoAQQAAagFBAABqAkEAAGoDQQAAahI9AABqEz0AAGqpUgAAaqpSAABqCEEAAGoJQQAAajA9AABqMT0AAGoMQQAAag1BAABq9ksAAGr3SwAAag5BAABqD0EAAGoQQQAAahFBAABqEkEAAGoTQQAAahRBAABqFUEAAGoWQQAAahdBAABqGEEAAGoZQQAAarJBAABqs0EAAGocQQAAah1BAABqHkEAAGofQQAAaiBBAABqIUEAAGoiQQAAaiNBAABqJEEAAGolQQAAaiZBAABqJ0EAAGpCSAAAakNIAABqKkEAAGorQQAAaixBAABqLUEAAGouQQAAai9BAABq8j0AAGrzPQAAajRBAABqNUEAAGryRAAAavNEAABqNkEAAGo3QQAAajhBAABqOUEAAGo6QQAAajtBAABqPEEAAGo9QQAAaj5BAABqP0EAAGpCPgAAakM+AABqQkEAAGpDQQAAakRBAABqRUEAAGpqQAAAamtAAABqSEEAAGpJQQAAdShqSkEAAGpLQQAAakxBAABqTUEAAGpOQQAAak9BAABqUEEAAGpRQQAAalJBAABqU0EAAGpUQQAAalVBAABqzD4AAGrNPgAAalhBAABqWUEAAGpISAAAaklIAABqXEEAAGpdQQAAal5BAABqX0EAAGpgQQAAamFBAABqYkEAAGpjQQAAamRBAABqZUEAAGpmQQAAamdBAABqaEEAAGppQQAAasRBAABqxUEAAGpYPwAAalk/AABqXj8AAGpfPwAAasZBAABqx0EAAGpyQQAAanNBAABqdEEAAGp1QQAAanZBAABqd0EAAGp4QQAAanlBAABqekEAAGp7QQAAan5BAABqf0EAAGqAQQAAaoFBAABqGEAAAGoZQAAAak5IAABqT0gAAGqGQQAAaodBAABqIkAAAGojQAAAaopBAABqi0EAAGqMQQAAao1BAABqjkEAAGqPQQAAalhAAABqWUAAAGqSQQAAapNBAABqlEEAAGqVQQAAapZBAABql0EAAGqYQQAAaplBAABqmkEAAGqbQQAAapxBAABqnUEAAGqeQQAAap9BAABqoEEAAGqhQQAAaqI9AABqoz0AAGqmQQAAaqdBAABqqEEAAGqpQQAAaqpBAABqq0EAAGqsQQAAaq1BAABqsEEAAGqxQQAAahpBAABqG0EAAGq0QQAAarVBAABqtkEAAGq3QQAAarhBAABquUEAAGq6QQAAartBAABqlkAAAGqXQAAAar5BAABqv0EAAGrAQQAAasFBAABqwkEAAGrDQQAAampBAABqa0EAAGpwQQAAanFBAABqyEEAAGrJQQAAaspBAABqy0EAAGpCTQAAakNNAABqzEEAAGrNQQAAas5BAABqz0EAAGrQQQAAatFBAABq0kEAAGrTQQAAatRBAABq1UEAAGrYQQAAatlBAABq3EEAAGrdQQAAat5BAABq30EAAGrgQQAAauFBAABq4kEAAGrjQQAAauRBAABq5UEAAGrmQQAAaudBAABq6EEAAGrpQQAAaupBAABq60EAAGqqSwAAaqtLAABq7kEAAGrvQQAAavBBAABq8UEAAGryQQAAavNBAABq9EEAAGr1QQAAavZBAABq90EAAGr4QQAAavlBAABq+kEAAGr7QQAAaqdSAABqqFIAAGr8QQAAav1BAABq/kEAAGr/QQAAagBCAABqAUIAAGoCQgAAagNCAABqBEIAAGoFQgAAagZCAABqB0IAAGoIQgAAaglCAABqCkIAAGoLQgAAagxCAABqDUIAAGoOQgAAag9CAABqEEIAAGoRQgAAahJCAABqE0IAAGp+PgAAan8+AABqFkIAAGoXQgAAahhCAABqGUIAAGoaQgAAahtCAABqHEIAAGodQgAAah5CAABqH0IAAGogQgAAaiFCAABqIkIAAGojQgAAaiRCAABqJUIAAGomQgAAaidCAABqKEIAAGopQgAAaipCAABqK0IAAGosQgAAai1CAABqLkIAAGovQgAAajBCAABqMUIAAGoyQgAAajNCAABqBEEAAGoFQQAAajRCAABqNUIAAGo2QgAAajdCAABqOEIAAGo5QgAAajpCAABqO0IAAGo8QgAAaj1CAABqPkIAAGo/QgAAakBCAABqQUIAAGpCQgAAakNCAABqtEsAAGq1SwAAakZCAABqR0IAAGpIQgAAaklCAABqSkIAAGpLQgAAaqVSAABqplIAAGpMQgAAak1CAABquEsAAGq5SwAAak5CAABqT0IAAGpQQgAAalFCAABqUkIAAGpTQgAAalRCAABqVUIAAGpWQgAAaldCAABqWEIAAGpZQgAAalpCAABqW0IAAGpcQgAAal1CAABqXkIAAGpfQgAAamBCAABqYUIAAGpiQgAAamNCAABqZEIAAGplQgAAamZCAABqZ0IAAGpsSAAAam1IAABqakIAAGprQgAAamxCAABqbUIAAGpuQgAAam9CAABqcEIAAGpxQgAAanJCAABqc0IAAGp0QgAAanVCAABqdkIAAGp3QgAAanhCAABqeUIAAGp6QgAAantCAABqIkUAAGojRQAAan5CAABqf0IAAGqAQgAAaoFCAABqgkIAAGqDQgAAaoRCAABqhUIAAGqGQgAAaodCAABqiEIAAGqJQgAAaopCAABqi0IAAGqMQgAAao1CAABqjkIAAGqPQgAAapBCAABqkUIAAGqSQgAAapNCAABqlEIAAGqVQgAAapZCAABql0IAAGqaQgAAaptCAABqnEIAAGqdQgAAanZIAABqd0gAAGqgQgAAaqFCAABqokIAAGqjQgAAaqRCAABqpUIAAGqmQgAAaqdCAABqqkIAAGqrQgAAaqxCAABqrUIAAGquQgAAaq9CAABqsEIAAGqxQgAAarJCAABqs0IAAGq0QgAAarVCAABqtkIAAGq3QgAAarhCAABquUIAAGq6QgAAartCAABq1EgAAGrVSAAAarxCAABqvUIAAGq+QgAAar9CAABqwkIAAGrDQgAAasRCAABqxUIAAGrGQgAAasdCAABqyEIAAGrJQgAAaspCAABqy0IAAGrMQgAAas1CAABqzkIAAGrPQgAAatBCAABq0UIAAGrSQgAAatNCAABq1EIAAGrVQgAAatZCAABq10IAAGrYQgAAatlCAABq2kIAAGrbQgAAatxCAABq3UIAAGoKPwAAags/AABq4EIAAGrhQgAAauJCAABq40IAAGrkQgAAauVCAABq5kIAAGrnQgAAauhCAABq6UIAAGrqQgAAautCAABq7EIAAGrtQgAAau5CAABq70IAAGrwQgAAavFCAABq8kIAAGrzQgAAavRCAABq9UIAAGouTAAAai9MAABq9kIAAGr3QgAAavhCAABq+UIAAGr6QgAAavtCAABq/EIAAGr9QgAAav5CAABq/0IAAGoAQwAAagFDAABqAkMAAGoDQwAAahRCAABqFUIAAGoGQwAAagdDAABqCEMAAGoJQwAAagpDAABqC0MAAGq6TAAAartMAABqDEMAAGoNQwAAag5DAABqD0MAAGoQQwAAahFDAABqEkMAAGoTQwAAahRDAABqFUMAAGoWQwAAahdDAABqGEMAAGoZQwAAahpDAABqG0MAAGocQwAAah1DAABqHkMAAGofQwAAaiJDAABqI0MAAGokQwAAaiVDAABqJkMAAGonQwAAaihDAABqKUMAAGoqQwAAaitDAABqLEMAAGotQwAAapI+AABqkz4AAGowQwAAajFDAABqMkMAAGozQwAAajRDAABqNUMAAGpGRAAAakdEAABqOEMAAGo5QwAAajpDAABqO0MAAGo8QwAAaj1DAABqPkMAAGo/QwAAakBDAABqQUMAAGpCQwAAakNDAABqlEgAAGqVSAAAakRDAABqRUMAAGpGQwAAakdDAABqSEMAAGpJQwAAakpDAABqS0MAAGpMQwAAak1DAABqTkMAAGpPQwAAalBDAABqUUMAAGpSQwAAalNDAABqVEMAAGpVQwAAajBBAABqMUEAAGpYQwAAallDAABqWkMAAGpbQwAAalxDAABqXUMAAGpeQwAAal9DAABqYEMAAGphQwAAamJDAABqY0MAAGpkQwAAamVDAABqZkMAAGpnQwAAamhDAABqaUMAAGpqQwAAamtDAABqbEMAAGptQwAAam5DAABqb0MAAGpwQwAAanFDAABqdEMAAGp1QwAAanZDAABqd0MAAGp4QwAAanlDAABqekMAAGp7QwAAanxDAABqfUMAAGp+QwAAan9DAABqgEMAAGqBQwAAaoJDAABqg0MAAGqkQQAAaqVBAABqhkMAAGqHQwAAaohDAABqiUMAAGqKQwAAaotDAABqjEMAAGqNQwAAao5DAABqj0MAAGqQQwAAapFDAABqkkMAAGqTQwAAaqhCAABqqUIAAGrESQAAasVJAABqlkMAAGqXQwAAasBCAABqwUIAAGqgPgAAaqE+AABqnEMAAGqdQwAAap5DAABqn0MAAGqgQwAAaqFDAABqokMAAGqjQwAAaqRDAABqpUMAAGqmQwAAaqdDAABqqEMAAGqpQwAAaqpDAABqq0MAAGquQwAAaq9DAABqsEMAAGqxQwAAarJDAABqs0MAAGq0QwAAarVDAABqtkMAAGq3QwAAarpDAABqu0MAAGq8QwAAar1DAABqvkMAAGq/QwAAasBDAABqwUMAAGrCQwAAasNDAABqxEMAAGrFQwAAal5FAABqX0UAAGrGQwAAasdDAABqiDkAAGqJOQAAaqZLAABqp0sAAGrKQwAAastDAABqzEMAAGrNQwAAas5DAABqz0MAAGrQQwAAatFDAABq0kMAAGrTQwAAatRDAABq1UMAAGrWQwAAatdDAABqykoAAGrLSgAAathDAABq2UMAAGraQwAAattDAABq3EMAAGrdQwAAat5DAABq30MAAGrgQwAAauFDAABq4kMAAGrjQwAAauRDAABq5UMAAGrmQwAAaudDAABq6EMAAGrpQwAAaupDAABq60MAAGrgRwAAauFHAABq7EMAAGrtQwAAanY6AABqdzoAAGrwQwAAavFDAABqtEgAAGq1SAAAavRDAABq9UMAAGr2QwAAavdDAABqtkgAAGq3SAAAavpDAABq+0MAAGr8QwAAav1DAABqADsAAGoBOwAAaqpJAABqq0kAAGoARAAAagFEAABqAkQAAGoDRAAAagREAABqBUQAAGoGRAAAagdEAABqCEQAAGoJRAAAarpIAABqu0gAAGoMRAAAag1EAABqDkQAAGoPRAAAahBEAABqEUQAAGoSRAAAahNEAABqvEgAAGq9SAAAaqw7AABqrTsAAGoWRAAAahdEAABqGEQAAGoZRAAAahpEAABqG0QAAGocRAAAah1EAABqZjoAAGpnOgAAaiBEAABqIUQAAGoiRAAAaiNEAABqJEQAAGolRAAAaiZLAABqJ0sAAGomRAAAaidEAABqKEQAAGopRAAAaipEAABqK0QAAGpCPAAAakM8AABqLkQAAGovRAAAajBEAABqMUQAAGoyRAAAajNEAABqNEQAAGo1RAAAajZEAABqN0QAAGo4RAAAajlEAABqOkQAAGo7RAAAatQ8AABq1TwAAGo+RAAAaj9EAABq4DwAAGrhPAAAakJEAABqQ0QAAGpERAAAakVEAABqajsAAGprOwAAasZIAABqx0gAAGpIRAAAaklEAABqTEQAAGpNRAAAap9SAABqoFIAAGo+PQAAaj89AABqUkQAAGpTRAAAalQ9AABqVT0AAGpYRAAAallEAABqWkQAAGpbRAAAalxEAABqXUQAAGqQPQAAapE9AABqYEQAAGphRAAAamJEAABqY0QAAGpmRAAAamdEAABqaEQAAGppRAAAampEAABqa0QAAGpsRAAAam1EAABqIj4AAGojPgAAanBEAABqcUQAAGpyRAAAanNEAABqdEQAAGp1RAAAanZEAABqd0QAAGp4RAAAanlEAABqaDsAAGppOwAAanxEAABqfUQAAGpuPgAAam8+AABqgEQAAGqBRAAAaoJEAABqg0QAAGqERAAAaoVEAABqhkQAAGqHRAAAaohEAABqiUQAAGqKRAAAaotEAABqjEQAAGqNRAAAao5EAABqj0QAAGqQRAAAapFEAABqkkQAAGqTRAAAapREAABqlUQAAGqWRAAAapdEAABqKEwAAGopTAAAavA+AABq8T4AAGqaRAAAaptEAABqnEQAAGqdRAAAap5EAABqn0QAAGqgRAAAaqFEAABqokQAAGqjRAAAaqREAABqpUQAAGpsPwAAam0/AABqqEQAAGqpRAAAaqpEAABqq0QAAGocTAAAah1MAABq0kgAAGrTSAAAarBEAABqsUQAAGqyRAAAarNEAABqtEQAAGq1RAAAarZEAABqt0QAAGq4RAAAarlEAABqukQAAGq7RAAAapRHAABqlUcAAGq+RAAAar9EAABqwEQAAGrBRAAAasJEAABqw0QAAGrERAAAasVEAABqIEwAAGohTAAAapZFAABql0UAAGooPwAAaik/AABqzEQAAGrNRAAAas5EAABqz0QAAGrQRAAAatFEAABq0kQAAGrTRAAAatREAABq1UQAAGqaRQAAaptFAABq2EQAAGrZRAAAatpEAABq20QAAGrcRAAAat1EAABq3kQAAGrfRAAAauBEAABq4UQAAGriRAAAauNEAABq5EQAAGrlRAAAauZEAABq50QAAGroRAAAaulEAABq7kQAAGrvRAAAavBEAABq8UQAAGpKPwAAaks/AABq9EQAAGr1RAAAavZEAABq90QAAGr4RAAAavlEAABq+kQAAGr7RAAAavxEAABq/UQAAGr+RAAAav9EAABqAEUAAGoBRQAAagJFAABqA0UAAGoERQAAagVFAABqBkUAAGoHRQAAaghFAABqCUUAAGoKRQAAagtFAABqDEUAAGoNRQAAag5FAABqD0UAAGoQRQAAahFFAABq6D4AAGrpPgAAahRFAABqFUUAAGoYRQAAahlFAABqGkUAAGobRQAAahxFAABqHUUAAGoeRQAAah9FAABqIEUAAGohRQAAanxCAABqfUIAAGokRQAAaiVFAABqXkkAAGpfSQAAaiZFAABqJ0UAAGooRQAAailFAABqKkUAAGorRQAAaixFAABqLUUAAGouRQAAai9FAABqMEUAAGoxRQAAajJFAABqM0UAAGo0RQAAajVFAABqNkUAAGo3RQAAanBJAABqcUkAAGo6RQAAajtFAABqPEUAAGo9RQAAaj5FAABqP0UAAGpARQAAakFFAABqskUAAGqzRQAAakZFAABqR0UAAGpIRQAAaklFAABqSkUAAGpLRQAAauxIAABq7UgAAGpYPQAAalk9AABqUEUAAGpRRQAAalJFAABqU0UAAGpURQAAalVFAABqVkUAAGpXRQAAalpFAABqW0UAAGpcRQAAal1FAABqsjsAAGqzOwAAamBFAABqYUUAAGpiRQAAamNFAABqZEUAAGplRQAAamZFAABqZ0UAAGpoRQAAamlFAABqakUAAGprRQAAamxFAABqbUUAAGpuRQAAam9FAABqcEUAAGpxRQAAanJFAABqc0UAAGp0RQAAanVFAABqdkUAAGp3RQAAakZMAABqR0wAAGp4RQAAanlFAABqekUAAGp7RQAAanxFAABqfUUAAGp+RQAAan9FAABqgEUAAGqBRQAAarw8AABqvTwAAGqERQAAaoVFAABqhkUAAGqHRQAAaohFAABqiUUAAGqKRQAAaotFAABqjEUAAGqNRQAAao5FAABqj0UAAGqQRQAAapFFAABqkkUAAGqTRQAAapRFAABqlUUAAGrIRAAAaslEAABqvEUAAGq9RQAAatZEAABq10QAAGqcRQAAap1FAABqnkUAAGqfRQAAaqBFAABqoUUAAGqiRQAAaqNFAABqpEUAAGqlRQAAaqZFAABqp0UAAGqoRQAAaqlFAABqqkUAAGqrRQAAaqxFAABqrUUAAGquRQAAaq9FAABqsEUAAGqxRQAAakRFAABqRUUAAGrARQAAasFFAABqtkUAAGq3RQAAarhFAABquUUAAGq6RQAAartFAABqmEUAAGqZRQAAagRDAABqBUMAAGq0RQAAarVFAABqwkUAAGrDRQAAasRFAABqxUUAAGrGRQAAasdFAABqyEUAAGrJRQAAaspFAABqy0UAAGrORQAAas9FAABqCEkAAGoJSQAAakJFAABqQ0UAAGpOSQAAak9JAABq1EUAAGrVRQAAatZFAABq10UAAGrYRQAAatlFAABq2kUAAGrbRQAAavg+AABq+T4AAGreRQAAat9FAABq4EUAAGrhRQAAauJFAABq40UAAGrkRQAAauVFAABq5kUAAGrnRQAAauhFAABq6UUAAGrqRQAAautFAABqGkYAAGobRgAAauxFAABq7UUAAGruRQAAau9FAABq2EwAAGrZTAAAavBFAABq8UUAAGryRQAAavNFAABqzEsAAGrNSwAAavRFAABq9UUAAGoeRAAAah9EAABq+EUAAGr5RQAAavpFAABq+0UAAGr8RQAAav1FAABq/kUAAGr/RQAAagBGAABqAUYAAGoCRgAAagNGAABqBEYAAGoFRgAAagZGAABqB0YAAGoKRgAAagtGAABqDEYAAGoNRgAAag5GAABqD0YAAGoQRgAAahFGAABqEkYAAGoTRgAAahRGAABqFUYAAGoWRgAAahdGAABqGEYAAGoZRgAAagY/AABqBz8AAGocRgAAah1GAABqHkYAAGofRgAAaiBGAABqIUYAAGoiRgAAaiNGAABqJEYAAGolRgAAaiZGAABqJ0YAAGooRgAAailGAABqKkYAAGorRgAAaiBDAABqIUMAAGouRgAAai9GAABqMEYAAGoxRgAAajJGAABqM0YAAGo0RgAAajVGAABqNkYAAGo3RgAAajhGAABqOUYAAGo6RgAAajtGAABqPEYAAGo9RgAAakBGAABqQUYAAGpCRgAAakNGAABqREYAAGpFRgAAakZGAABqR0YAAGpIRgAAaklGAABqSkYAAGpLRgAAakxGAABqTUYAAGpORgAAak9GAABqUEYAAGpRRgAAalJGAABqU0YAAGpURgAAalVGAABqVkYAAGpXRgAAalhGAABqWUYAAGpaRgAAaltGAABqXEYAAGpdRgAAal5GAABqX0YAAGpmTAAAamdMAABqYkYAAGpjRgAAamhMAABqaUwAAGpmRgAAamdGAABqNkMAAGo3QwAAampGAABqa0YAAGpsRgAAam1GAABqbkYAAGpvRgAAanBGAABqcUYAAGpyRgAAanNGAABqdEYAAGp1RgAAanZGAABqd0YAAGp6RgAAantGAABqfEYAAGp9RgAAan5GAABqf0YAAGosSQAAai1JAABqgkYAAGqDRgAAaoRGAABqhUYAAGqGRgAAaodGAABqeEYAAGp5RgAAaopGAABqi0YAAGqMRgAAao1GAABqjkYAAGqPRgAAapBGAABqkUYAAGqSRgAAapNGAABqlEYAAGqVRgAAavpKAABq+0oAAGqYRgAAaplGAABqmkYAAGqbRgAAapxGAABqnUYAAGqeRgAAap9GAABqoEYAAGqhRgAAaqJGAABqo0YAAGqkRgAAaqVGAABqpkYAAGqnRgAAaqhGAABqqUYAAGqqRgAAaqtGAABqOkkAAGo7SQAAaq5GAABqr0YAAGp4TAAAanlMAABqskYAAGqzRgAAarRGAABqtUYAAGq2RgAAardGAABquEYAAGq5RgAAarpGAABqu0YAAGq8RgAAar1GAABqvkYAAGq/RgAAasBGAABqwUYAAGrCRgAAasNGAABqxEYAAGrFRgAAasZGAABqx0YAAGrIRgAAaslGAABqWEUAAGpZRQAAahxLAABqHUsAAGrMRgAAas1GAABqzkYAAGrPRgAAatBGAABq0UYAAGrSRgAAatNGAABq1EYAAGrVRgAAatZGAABq10YAAGrYRgAAatlGAABq2kYAAGrbRgAAatxGAABq3UYAAGreRgAAat9GAABq4EYAAGrhRgAAauJGAABq40YAAGrkRgAAauVGAABq5kYAAGrnRgAAauhGAABq6UYAAGrqRgAAautGAABq7EYAAGrtRgAAau5GAABq70YAAGrwRgAAavFGAABq8kYAAGrzRgAAavRGAABq9UYAAGr2RgAAavdGAABq+EYAAGr5RgAAavpGAABq+0YAAGr8RgAAav1GAABq/kYAAGr/RgAAagBHAABqAUcAAGoCRwAAagNHAABqBEcAAGoFRwAAagZHAABqB0cAAGoIRwAAaglHAABqCkcAAGoLRwAAagxHAABqDUcAAGqISwAAaolLAABqDkcAAGoPRwAAahBHAABqEUcAAGoSRwAAahNHAABqFEcAAGoVRwAAahZHAABqF0cAAGoYRwAAahlHAABqGkcAAGobRwAAahxHAABqHUcAAGr2RQAAavdFAABqHkcAAGofRwAAaiBHAABqIUcAAGoiRwAAaiNHAABqPjoAAGo/OgAAakQ6AABqRToAAGoqRwAAaitHAABqLEcAAGotRwAAai5HAABqL0cAAGowRwAAajFHAABqMkcAAGozRwAAajRHAABqNUcAAGo2RwAAajdHAABqOEcAAGo5RwAAajpHAABqO0cAAGo8RwAAaj1HAABqPkcAAGo/RwAAakBHAABqQUcAAGpCRwAAakNHAABqRkcAAGpHRwAAakhHAABqSUcAAGosOwAAai07AABqTEcAAGpNRwAAak5HAABqT0cAAGpQRwAAalFHAABqUkcAAGpTRwAAalRHAABqVUcAAGpWRwAAaldHAABqikwAAGqLTAAAaoxMAABqjUwAAGpaRwAAaltHAABquEMAAGq5QwAAal5HAABqX0cAAGpgRwAAamFHAABqmVIAAGqaUgAAamJHAABqY0cAAGooRwAAailHAABqZkcAAGpnRwAAamhHAABqaUcAAGpqRwAAamtHAABqbEcAAGptRwAAam5HAABqb0cAAGpwRwAAanFHAABqckcAAGpzRwAAanRHAABqdUcAAGpGQQAAakdBAABqdkcAAGp3RwAAanhHAABqeUcAAGoSOwAAahM7AABqcDwAAGpxPAAAan5HAABqf0cAAGqARwAAaoFHAABqQj8AAGpDPwAAaoJHAABqg0cAAGqERwAAaoVHAABqhkcAAGqHRwAAaohHAABqiUcAAGqWTAAAapdMAABqjEcAAGqNRwAAao5HAABqj0cAAGqQRwAAapFHAABqkkcAAGqTRwAAaphHAABqmUcAAGoKPQAAags9AABqnEcAAGqdRwAAap5HAABqn0cAAGpCPQAAakM9AABqokcAAGqjRwAAaqRHAABqpUcAAGp8PQAAan09AABqqEcAAGqpRwAAaqpHAABqq0cAAGqsRwAAaq1HAABqrkcAAGqvRwAAarw9AABqvT0AAGp8QQAAan1BAABquEcAAGq5RwAAarpHAABqu0cAAGoCPQAAagM9AABqvEcAAGq9RwAAar5HAABqv0cAAGpuSQAAam9JAABqxEcAAGrFRwAAajQ+AABqNT4AAGpEPgAAakU+AABqykcAAGrLRwAAas5HAABqz0cAAGrQRwAAatFHAABq1EcAAGrVRwAAatZHAABq10cAAGrYRwAAatlHAABq2kcAAGrbRwAAatxHAABq3UcAAGqiTAAAaqNMAABqFkUAAGoXRQAAauJHAABq40cAAGrkRwAAauVHAABq1EwAAGrVTAAAauZHAABq50cAAGrePgAAat8+AABq6kcAAGrrRwAAau5HAABq70cAAGqoTAAAaqlMAABqFD8AAGoVPwAAaiI/AABqIz8AAGr2RwAAavdHAABqqkwAAGqrTAAAavpHAABq+0cAAGr8RwAAav1HAABq/kcAAGr/RwAAagBIAABqAUgAAGpSPwAAalM/AABqBEgAAGoFSAAAagZIAABqB0gAAGoISAAAaglIAABqCkgAAGoLSAAAagxIAABqDUgAAGoOSAAAag9IAABqEEgAAGoRSAAAahJIAABqE0gAAGoUSAAAahVIAABqFkgAAGoXSAAAahhIAABqGUgAAGoaSAAAahtIAABqHEgAAGodSAAAah5IAABqH0gAAGogSAAAaiFIAABqOEAAAGo5QAAAakhAAABqSUAAAGomSAAAaidIAABqKEgAAGopSAAAanxAAABqfUAAAGosSAAAai1IAABqLkgAAGovSAAAajBIAABqMUgAAGoySAAAajNIAABq3EAAAGrdQAAAaoRJAABqhUkAAGo2SAAAajdIAABqOEgAAGo5SAAAaoI6AABqgzoAAGo8SAAAaj1IAABqPkgAAGo/SAAAakBIAABqQUgAAGooQQAAailBAABqREgAAGpFSAAAakZIAABqR0gAAGpaQQAAaltBAABqSkgAAGpLSAAAakxIAABqTUgAAGqEQQAAaoVBAABqUEgAAGpRSAAAalJIAABqU0gAAGpUSAAAalVIAABqVkgAAGpXSAAAalhIAABqWUgAAGpaSAAAaltIAABqXEgAAGpdSAAAal5IAABqX0gAAGpgSAAAamFIAABqrEwAAGqtTAAAamJIAABqY0gAAGpkSAAAamVIAABqZkgAAGpnSAAAamhIAABqaUgAAGrETAAAasVMAABqaEIAAGppQgAAam5IAABqb0gAAGpwSAAAanFIAABqckgAAGpzSAAAanRIAABqdUgAAGqeQgAAap9CAABqeEgAAGp5SAAAanpIAABqe0gAAGp+SAAAan9IAABqgEgAAGqBSAAAaoJIAABqg0gAAGqESAAAaoVIAABqBkEAAGoHQQAAaohIAABqiUgAAGqKSAAAaotIAABqjEgAAGqNSAAAapBIAABqkUgAAGqSSAAAapNIAABqLEYAAGotRgAAapZIAABql0gAAGqYSAAAaplIAABqmkgAAGqbSAAAapxIAABqnUgAAGqeSAAAap9IAABqoEgAAGqhSAAAappDAABqm0MAAGqkSAAAaqVIAABqpkgAAGqnSAAAampNAABqa00AAGqoSAAAaqlIAABqqkgAAGqrSAAAappJAABqm0kAAGqySAAAarNIAABq8kMAAGrzQwAAavhDAABq+UMAAGq4SAAAarlIAABqCkQAAGoLRAAAanxIAABqfUgAAGq+SAAAar9IAABqwEgAAGrBSAAAasJIAABqw0gAAGpWRAAAaldEAABql1IAAGqYUgAAashIAABqyUgAAGrKSAAAastIAABq6kwAAGrrTAAAasxIAABqzUgAAGrOSAAAas9IAABq0EgAAGrRSAAAaq5EAABqr0QAAGoiTQAAaiNNAABqvEQAAGq9RAAAatZIAABq10gAAGrYSAAAatlIAABq0kwAAGrTTAAAatxIAABq3UgAAGreSAAAat9IAABq4EgAAGrhSAAAauJIAABq40gAAGrkSAAAauVIAABq5kgAAGrnSAAAauhIAABq6UgAAGrqSAAAautIAABqTEUAAGpNRQAAau5IAABq70gAAGrwSAAAavFIAABq8kgAAGrzSAAAavRIAABq9UgAAGr2SAAAavdIAABq+EgAAGr5SAAAavpIAABq+0gAAGr8SAAAav1IAABq/kgAAGr/SAAAagBJAABqAUkAAGp6RwAAantHAABqBEkAAGoFSQAAagZJAABqB0kAAGrQRQAAatFFAABqCkkAAGoLSQAAagxJAABqDUkAAGoOSQAAag9JAABqEEkAAGoRSQAAat5MAABq30wAAGoUSQAAahVJAABqFkkAAGoXSQAAdShqGEkAAGoZSQAAahpJAABqG0kAAGocSQAAah1JAABqHkkAAGofSQAAakZAAABqR0AAAGoiSQAAaiNJAABqJEkAAGolSQAAaiZJAABqJ0kAAGrqRAAAautEAABqKkkAAGorSQAAaoBGAABqgUYAAGouSQAAai9JAABqMEkAAGoxSQAAajJJAABqM0kAAGo0SQAAajVJAABqNkkAAGo3SQAAajhJAABqOUkAAGqsRgAAaq1GAABqPEkAAGo9SQAAaj5JAABqP0kAAGpASQAAakFJAABqrkkAAGqvSQAAakRJAABqRUkAAGpGSQAAakdJAABqSEkAAGpJSQAAakpJAABqS0kAAGpMSQAAak1JAABqlkcAAGqXRwAAaiRHAABqJUcAAGpSSQAAalNJAABqVEkAAGpVSQAAalZJAABqV0kAAGpYSQAAallJAABqWkkAAGpbSQAAalxJAABqXUkAAGqsOgAAaq06AABqYEkAAGphSQAAamJJAABqY0kAAGpkSQAAamVJAABqDj8AAGoPPwAAalZNAABqV00AAGpoSQAAamlJAABqakkAAGprSQAAamxJAABqbUkAAGrCRwAAasNHAABqzEcAAGrNRwAAanJJAABqc0kAAGpyPQAAanM9AABqdkkAAGp3SQAAauxHAABq7UcAAGp8SQAAan1JAABqfkkAAGp/SQAAaoBJAABqgUkAAGqCSQAAaoNJAABqhkgAAGqHSAAAaoZJAABqh0kAAGqISQAAaolJAABqikkAAGqLSQAAaoxJAABqjUkAAGqOSQAAao9JAABqPEAAAGo9QAAAapJJAABqk0kAAGqOSAAAao9IAABqlkkAAGqXSQAAaphJAABqmUkAAGquSAAAaq9IAABqnEkAAGqdSQAAap5JAABqn0kAAGqgSQAAaqFJAABqokkAAGqjSQAAavpMAABq+0wAAGqmSQAAaqdJAABqqEkAAGqpSQAAaihJAABqKUkAAGqsSQAAaq1JAABqQkkAAGpDSQAAarBJAABqsUkAAGqySQAAarNJAABqeEkAAGp5SQAAarZJAABqt0kAAGqKPwAAaos/AABqukkAAGq7SQAAarxJAABqvUkAAGq+SQAAar9JAABqwEkAAGrBSQAAasJJAABqw0kAAGp6SQAAantJAABqxkkAAGrHSQAAashJAABqyUkAAGrKSQAAastJAABqzEkAAGrNSQAAas5JAABqz0kAAGrQSQAAatFJAABq0kcAAGrTRwAAatRJAABq1UkAAGrWSQAAatdJAABq2EkAAGrZSQAAatpJAABq20kAAGrcSQAAat1JAABq3kkAAGrfSQAAauBJAABq4UkAAGriSQAAauNJAABq5EkAAGrlSQAAauZJAABq50kAAGroSQAAaulJAABq6kkAAGrrSQAAauxJAABq7UkAAGruSQAAau9JAABq8EkAAGrxSQAAavJJAABq80kAAGr0SQAAavVJAABq9kkAAGr3SQAAavhJAABq+UkAAGr6SQAAavtJAABq/EkAAGr9SQAAav5JAABq/0kAAGrSSQAAatNJAABqAkoAAGoDSgAAagRKAABqBUoAAGoGSgAAagdKAABqCEoAAGoJSgAAagpKAABqC0oAAGoMSgAAag1KAABqDkoAAGoPSgAAahBKAABqEUoAAGoSSgAAahNKAABqFEoAAGoVSgAAahZKAABqF0oAAGpoRgAAamlGAABqGkoAAGobSgAAahxKAABqHUoAAGoeSgAAah9KAABqIEoAAGohSgAAaiJKAABqI0oAAGokSgAAaiVKAABqJkoAAGonSgAAaihKAABqKUoAAGoqSgAAaitKAABqLEoAAGotSgAAai5KAABqL0oAAGowSgAAajFKAABqMkoAAGozSgAAajRKAABqNUoAAGo2SgAAajdKAABqOEoAAGo5SgAAajpKAABqO0oAAGo8SgAAaj1KAABqZkkAAGpnSQAAaj5KAABqP0oAAGpASgAAakFKAABqQkoAAGpDSgAAakRKAABqRUoAAGpGSgAAakdKAABqSEoAAGpJSgAAakpKAABqS0oAAGpMSgAAak1KAABqTkoAAGpPSgAAaq5BAABqr0EAAGpSSgAAalNKAABqEkUAAGoTRQAAalo8AABqWzwAAGoUTQAAahVNAABqWkoAAGpbSgAAalxKAABqXUoAAGpeSgAAal9KAABqYEoAAGphSgAAamJKAABqY0oAAGpkSgAAamVKAABqZkoAAGpnSgAAamhKAABqaUoAAGpqSgAAamtKAABqbEoAAGptSgAAam5KAABqb0oAAGpwSgAAanFKAABqFk0AAGoXTQAAanJKAABqc0oAAGp0SgAAanVKAABqdkoAAGp3SgAAanhLAABqeUsAAGp4SgAAanlKAABqekoAAGp7SgAAahhNAABqGU0AAGp+SgAAan9KAABqgEoAAGqBSgAAaoJKAABqg0oAAGqESgAAaoVKAABqhkoAAGqHSgAAaohKAABqiUoAAGpwPgAAanE+AABqUEkAAGpRSQAAaoxKAABqjUoAAGoIOgAAagk6AABqGDoAAGoZOgAAaiY6AABqJzoAAGqUSgAAapVKAABqlkoAAGqXSgAAaphKAABqmUoAAGoeTQAAah9NAABqnEoAAGqdSgAAap5KAABqn0oAAGqgSgAAaqFKAABqokoAAGqjSgAAap1SAABqnlIAAGqkSgAAaqVKAABqiEYAAGqJRgAAaqpKAABqq0oAAGqsSgAAaq1KAABqrkoAAGqvSgAAarBKAABqsUoAAGqySgAAarNKAABq/joAAGr/OgAAarZKAABqt0oAAGq4SgAAarlKAABqukoAAGq7SgAAarxKAABqvUoAAGq+SgAAar9KAABqRDsAAGpFOwAAasJKAABqw0oAAGrESgAAasVKAABqxkoAAGrHSgAAashKAABqyUoAAGpyQwAAanNDAABqzEoAAGrNSgAAas5KAABqz0oAAGrQSgAAatFKAABq0koAAGrTSgAAatRKAABq1UoAAGpWQwAAaldDAABq2EoAAGrZSgAAatpKAABq20oAAGrcSgAAat1KAABq3koAAGrfSgAAauBKAABq4UoAAGqaRwAAaptHAABq4koAAGrjSgAAauRKAABq5UoAAGqmSgAAaqdKAABq6EoAAGrpSgAAanY8AABqdzwAAGrsSgAAau1KAABqsEcAAGqxRwAAavBKAABq8UoAAGrySgAAavNKAABq9EoAAGr1SgAAavZKAABq90oAAGr4SgAAavlKAABq/EoAAGr9SgAAav5KAABq/0oAAGoASwAAagFLAABqAksAAGoDSwAAagRLAABqBUsAAGoGSwAAagdLAABqCEsAAGoJSwAAagpLAABqC0sAAGoMSwAAag1LAABqzEUAAGrNRQAAahBLAABqEUsAAGoSSwAAahNLAABq0D0AAGrRPQAAagBKAABqAUoAAGoYSwAAahlLAABqPE0AAGo9TQAAavo9AABq+z0AAGpIPgAAakk+AABqIEsAAGohSwAAaiJLAABqI0sAAGrWQQAAatdBAABqZD4AAGplPgAAaihLAABqKUsAAGrSOgAAatM6AABqLEsAAGotSwAAai5LAABqL0sAAGowSwAAajFLAABqOEwAAGo5TAAAajJLAABqM0sAAGrAPgAAasE+AABqxD4AAGrFPgAAajhLAABqOUsAAGrcPgAAat0+AABqhjwAAGqHPAAAaj5LAABqP0sAAGpASwAAakFLAABqED8AAGoRPwAAakRLAABqRUsAAGpGSwAAakdLAABqSEsAAGpJSwAAakpLAABqS0sAAGpMSwAAak1LAABqTksAAGpPSwAAalBLAABqUUsAAGpSSwAAalNLAABqVEsAAGpVSwAAalhLAABqWUsAAGpaSwAAaltLAABqXEsAAGpdSwAAal5LAABqX0sAAGpgSwAAamFLAABqYksAAGpjSwAAamRLAABqZUsAAGpmSwAAamdLAABqaEsAAGppSwAAampLAABqa0sAAGpsSwAAam1LAABqbksAAGpvSwAAanBLAABqcUsAAGpySwAAanNLAABqdEsAAGp1SwAAanZLAABqd0sAAGoYSgAAahlKAABqSkAAAGpLQAAAanpLAABqe0sAAGp8SwAAan1LAABqfksAAGp/SwAAaoBLAABqgUsAAGqCSwAAaoNLAABqhEsAAGqFSwAAaoZLAABqh0sAAGqwSAAAarFIAABqiksAAGqLSwAAak5EAABqT0QAAGqMSwAAao1LAABqjksAAGqPSwAAapBLAABqkUsAAGqSSwAAapNLAABqlEsAAGqVSwAAapZLAABql0sAAGqYSwAAaplLAABqmksAAGqbSwAAapxLAABqnUsAAGqeSwAAap9LAABqoEsAAGqhSwAAaqJLAABqo0sAAGqkSwAAaqVLAABq2kEAAGrbQQAAaqhLAABqqUsAAGrsQQAAau1BAABqrEsAAGqtSwAAaq5LAABqr0sAAGqwSwAAarFLAABqsksAAGqzSwAAatZKAABq10oAAGpEQgAAakVCAABqtksAAGq3SwAAaghAAABqCUAAAGqKSgAAaotKAABquksAAGq7SwAAarxLAABqvUsAAGq+SwAAar9LAABqwEsAAGrBSwAAasJLAABqw0sAAGrESwAAasVLAABqxksAAGrHSwAAashLAABqyUsAAGrKSwAAastLAABqmEIAAGqZQgAAas5LAABqz0sAAGrQSwAAatFLAABq0ksAAGrTSwAAatRLAABq1UsAAGrWSwAAatdLAABq2EsAAGrZSwAAatpLAABq20sAAGrcSwAAat1LAABq3ksAAGrfSwAAauBLAABq4UsAAGriSwAAauNLAABq5EsAAGrlSwAAauZLAABq50sAAGp0SQAAanVJAABq6EsAAGrpSwAAaupLAABq60sAAGrsSwAAau1LAABq7ksAAGrvSwAAavBLAABq8UsAAGrySwAAavNLAABq9EsAAGr1SwAAalpAAABqW0AAAGr4SwAAavlLAABq+ksAAGr7SwAAavxLAABq/UsAAGr+SwAAav9LAABqAEwAAGoBTAAAagJMAABqA0wAAGoETAAAagVMAABqBkwAAGoHTAAAaghMAABqCUwAAGoKTAAAagtMAABqDEwAAGoNTAAAag5MAABqD0wAAGoQTAAAahFMAABqEkwAAGoTTAAAahRMAABqFUwAAGoWTAAAahdMAABqGEwAAGoZTAAAahpMAABqG0wAAGqsRAAAaq1EAABqHkwAAGofTAAAasZEAABqx0QAAGoiTAAAaiNMAABqck0AAGpzTQAAaiZMAABqJ0wAAGrsRAAAau1EAABqKkwAAGorTAAAaixMAABqLUwAAGoWSwAAahdLAABqrD8AAGqtPwAAajBMAABqMUwAAGoyTAAAajNMAABqNEwAAGo1TAAAajZMAABqN0wAAGo4RQAAajlFAABqOkwAAGo7TAAAajxMAABqPUwAAGo+TAAAaj9MAABqQEwAAGpBTAAAakJMAABqQ0wAAGrKRgAAastGAABqhEMAAGqFQwAAakhMAABqSUwAAGpKTAAAaktMAABqrEMAAGqtQwAAak5MAABqT0wAAGpQTAAAalFMAABqUkwAAGpTTAAAalRMAABqVUwAAGpWTAAAaldMAABqWEwAAGpZTAAAalpMAABqW0wAAGpcTAAAal1MAABqXkwAAGpfTAAAamBMAABqYUwAAGpiTAAAamNMAABqek0AAGp7TQAAamBGAABqYUYAAGpkRgAAamVGAABqakwAAGprTAAAamxMAABqbUwAAGpuTAAAam9MAABqcEwAAGpxTAAAanJMAABqc0wAAGqWRgAAapdGAABqdkwAAGp3TAAAarBGAABqsUYAAGp6TAAAantMAABqfEwAAGp9TAAAan5MAABqf0wAAGqATAAAaoFMAABqgkwAAGqDTAAAaoRMAABqhUwAAGqGTAAAaodMAABqiEwAAGqJTAAAatxFAABq3UUAAGpYRwAAallHAABqjkwAAGqPTAAAapBMAABqkUwAAGqSTAAAapNMAABqlEwAAGqVTAAAaopHAABqi0cAAGqYTAAAaplMAABqmkwAAGqbTAAAapxMAABqnUwAAGqeTAAAap9MAABqoEwAAGqhTAAAapRDAABqlUMAAGreRwAAat9HAABqpEwAAGqlTAAAaqZMAABqp0wAAGrwRwAAavFHAABq+EcAAGr5RwAAasBHAABqwUcAAGquTAAAaq9MAABqsEwAAGqxTAAAarJMAABqs0wAAGq0TAAAarVMAABqtkwAAGq3TAAAarhMAABquUwAAGqYQwAAaplDAABqvEwAAGq9TAAAar5MAABqv0wAAGrATAAAasFMAABqwkwAAGrDTAAAampIAABqa0gAAGrGTAAAasdMAABqyEwAAGrJTAAAaspMAABqy0wAAGrMTAAAas1MAABqzkwAAGrPTAAAapBNAABqkU0AAGrQTAAAatFMAABq2kgAAGrbSAAAakpEAABqS0QAAGrWTAAAatdMAABqUEoAAGpRSgAAatpMAABq20wAAGo8PwAAaj0/AABqEkkAAGoTSQAAauBMAABq4UwAAGriTAAAauNMAABq5EwAAGrlTAAAauZMAABq50wAAGqWTQAAapdNAABqZEQAAGplRAAAauxMAABq7UwAAGruTAAAau9MAABq8EwAAGrxTAAAagJJAABqA0kAAGryTAAAavNMAABq9EwAAGr1TAAAavZMAABq90wAAGr4TAAAavlMAABqpEkAAGqlSQAAaoY9AABqhz0AAGr+TAAAav9MAABqAE0AAGoBTQAAagJNAABqA00AAGoETQAAagVNAABqBk0AAGoHTQAAaghNAABqCU0AAGoKTQAAagtNAABqDE0AAGoNTQAAag5NAABqD00AAGpUSgAAalVKAABqEE0AAGoRTQAAahJNAABqE00AAGpYSgAAallKAABqej4AAGp7PgAAanxKAABqfUoAAGoaTQAAahtNAABqHE0AAGodTQAAappKAABqm0oAAGogTQAAaiFNAABqtEoAAGq1SgAAaiRNAABqJU0AAGooTQAAailNAABqLE0AAGotTQAAai5NAABqL00AAGowTQAAajFNAABqMk0AAGozTQAAaqJNAABqo00AAGo2TQAAajdNAABqOE0AAGo5TQAAajpNAABqO00AAGoaSwAAahtLAABqPk0AAGo/TQAAakBNAABqQU0AAGqyRwAAarNHAABqRE0AAGpFTQAAakZNAABqR00AAGpITQAAaklNAABqSk0AAGpLTQAAakxNAABqTU0AAGpOTQAAak9NAABqUE0AAGpRTQAAalJNAABqU00AAGpUTQAAalVNAABqkEkAAGqRSQAAan47AABqfzsAAGpYTQAAallNAABqWk0AAGpbTQAAalxNAABqXU0AAGpeTQAAal9NAABqYE0AAGphTQAAamJNAABqY00AAGpkTQAAamVNAABqZk0AAGpnTQAAamhNAABqaU0AAGoqTQAAaitNAABqbE0AAGptTQAAam5NAABqb00AAGpwTQAAanFNAABqJEwAAGolTAAAanRNAABqdU0AAGp2TQAAandNAABqeE0AAGp5TQAAamRMAABqZUwAAGp8TQAAan1NAABqfk0AAGp/TQAAaoBNAABqgU0AAGqCTQAAaoNNAABqhE0AAGqFTQAAaoZNAABqh00AAGqwTQAAarFNAABqik0AAGqLTQAAaoxNAABqjU0AAGqOTQAAao9NAABqykQAAGrLRAAAapJNAABqk00AAGqUTQAAapVNAABq6EwAAGrpTAAAaphNAABqmU0AAGqaTQAAaptNAABqnE0AAGqdTQAAap5NAABqn00AAGqgTQAAaqFNAABqNE0AAGo1TQAAaqRNAABqpU0AAGpWSwAAaldLAABqqE0AAGqpTQAAaqpNAABqq00AAGqsTQAAaq1NAABqrk0AAGqvTQAAaohNAABqiU0AAGqyTQAAarNNAABqtE0AAGq1TQAAdWoHUwAAfXL8UwAAKGq3TQAAarhNAABquU0AAGq6TQAAamlOAABqak4AAGq9TQAAar5NAABqv00AAGrATQAAasFNAABqwk0AAGrDTQAAasRNAABqxU0AAGrGTQAAasdNAABqyE0AAGrJTQAAaspNAABqy00AAGrMTQAAas1NAABqzk0AAGrPTQAAatBNAABq0U0AAGrSTQAAatNNAABq1E0AAGrVTQAAatZNAABq100AAGrYTQAAatlNAABq2k0AAGrbTQAAatxNAABq3U0AAGreTQAAat9NAABq4E0AAGrhTQAAauJNAABq400AAGrkTQAAauVNAABq5k0AAGrnTQAAauhNAABq6U0AAGrqTQAAag9TAABqEFMAAGoxUQAAajJRAABq600AAGrsTQAAau1NAABq7k0AAGrvTQAAavBNAABq8U0AAGryTQAAamdRAABqaFEAAGr1TQAAavZNAABqM08AAGo0TwAAavlNAABq+k0AAGr7TQAAavxNAABqJVIAAGomUgAAav1NAABq/k0AAGr/TQAAagBOAABqAU4AAGoCTgAAajtRAABqPFEAAGoFTgAAagZOAABqCVMAAGoKUwAAagdOAABqCE4AAGoJTgAAagpOAABqC04AAGoMTgAAag1OAABqDk4AAGoLUwAAagxTAABqEU4AAGoSTgAAanFRAABqclEAAGoVTgAAahZOAABqGU4AAGoaTgAAahtOAABqHE4AAGodTgAAah5OAABqH04AAGogTgAAaiFOAABqIk4AAGojTgAAaiROAABqJU4AAGomTgAAaidOAABqKE4AAGopTgAAaipOAABqK04AAGosTgAAai1OAABqLk4AAGrxUAAAavJQAABqMU4AAGoyTgAAajNOAABqNE4AAGo1TgAAajZOAABqN04AAGo4TgAAajlOAABqOk4AAGo7TgAAajxOAABqPU4AAGo+TgAAaj9OAABqQE4AAGr9TwAAav5PAABqQ04AAGpETgAAakVOAABqRk4AAGpHTgAAakhOAABqSU4AAGpKTgAAak1OAABqTk4AAGpPTgAAalBOAABqUU4AAGpSTgAAalNOAABqVE4AAGpVTgAAalZOAABqMVAAAGoyUAAAaldOAABqWE4AAGpZTgAAalpOAABqW04AAGpcTgAAav9RAABqAFIAAGphTgAAamJOAABqY04AAGpkTgAAamVOAABqZk4AAGrHUAAAashQAABqu00AAGq8TQAAamtOAABqbE4AAGptTgAAam5OAABqcU4AAGpyTgAAanNOAABqdE4AAGp1TgAAanZOAABqd04AAGp4TgAAanlOAABqek4AAGp7TgAAanxOAABqfU4AAGp+TgAAan9OAABqgE4AAGqBTgAAaoJOAABqg04AAGqETgAAaoVOAABqhk4AAGqHTgAAaohOAABqiU4AAGqKTgAAaotOAABqjE4AAGqNTgAAao5OAABqj04AAGqQTgAAapFOAABqkk4AAGqTTgAAapROAABqlU4AAGqWTgAAapdOAABqmE4AAGqZTgAAappOAABqm04AAGqcTgAAap1OAABqnk4AAGqfTgAAaqBOAABqoU4AAGqiTgAAaqNOAABqpE4AAGqlTgAAaqZOAABqp04AAGqoTgAAaqlOAABqqk4AAGqrTgAAaqxOAABqrU4AAGquTgAAaq9OAABqsE4AAGqxTgAAarJOAABqs04AAGq0TgAAarVOAABqtk4AAGq3TgAAarhOAABquU4AAGq6TgAAartOAABqvE4AAGq9TgAAar5OAABqv04AAGrATgAAasFOAABqwk4AAGrDTgAAasROAABqxU4AAGrGTgAAasdOAABqyE4AAGrJTgAAaspOAABqy04AAGrMTgAAas1OAABqzk4AAGrPTgAAatBOAABq0U4AAGrSTgAAatNOAABq1E4AAGrVTgAAatZOAABq104AAGrYTgAAatlOAABq2k4AAGrbTgAAatxOAABq3U4AAGreTgAAat9OAABq4E4AAGrhTgAAauJOAABq404AAGrkTgAAauVOAABq5k4AAGrnTgAAauhOAABq6U4AAGrqTgAAautOAABq7E4AAGrtTgAAau5OAABq704AAGrwTgAAavFOAABq8k4AAGrzTgAAavROAABq9U4AAGr2TgAAavdOAABq+E4AAGr5TgAAavpOAABq+04AAGr8TgAAav1OAABq/k4AAGodUAAAah5QAABqAU8AAGoCTwAAagVPAABqBk8AAGoHTwAAaghPAABqCU8AAGoKTwAAagtPAABqDE8AAGoNTwAAag5PAABqD08AAGoQTwAAahFPAABqEk8AAGoTTwAAahRPAABqFU8AAGoWTwAAahdPAABqGE8AAGrdTwAAat5PAABqGU8AAGoaTwAAahtPAABqHE8AAGodTwAAah5PAABqH08AAGogTwAAaiFPAABqIk8AAGojTwAAaiRPAABqJU8AAGomTwAAaidPAABqKE8AAGopTwAAaipPAABqK08AAGosTwAAai1PAABqLk8AAGovTwAAajBPAABqMU8AAGoyTwAAavdNAABq+E0AAGo1TwAAajZPAABqN08AAGo4TwAAajlPAABqOk8AAGo7TwAAajxPAABqPU8AAGo+TwAAahlQAABqGlAAAGo/TwAAakBPAABqDVMAAGoOUwAAakFPAABqQk8AAGpDTwAAakRPAABqRU8AAGpGTwAAakdPAABqSE8AAGpJTwAAakpPAABqS08AAGpMTwAAak1PAABqTk8AAGpPTwAAalBPAABqUU8AAGpSTwAAalNPAABqVE8AAGovUAAAajBQAABqV08AAGpYTwAAallPAABqWk8AAGpbTwAAalxPAABqX08AAGpgTwAAaqlRAABqqlEAAGpjTwAAamRPAABqZU8AAGpmTwAAamdPAABqaE8AAGppTwAAampPAABqa08AAGpsTwAAam1PAABqbk8AAGpvTwAAanBPAABqcU8AAGpyTwAAanNPAABqdE8AAGp1TwAAanZPAABqd08AAGp4TwAAanlPAABqek8AAGp7TwAAanxPAABqfU8AAGp+TwAAan9PAABqgE8AAGqBTwAAaoJPAABqg08AAGqETwAAaoVPAABqhk8AAGqHTwAAaohPAABqiU8AAGqKTwAAaotPAABqjE8AAGqNTwAAao5PAABqj08AAGqQTwAAapFPAABqkk8AAGqTTwAAapRPAABqX04AAGpgTgAAapdPAABqmE8AAGqZTwAAappPAABqm08AAGqcTwAAap1PAABqnk8AAGoBUQAAagJRAABqoU8AAGqiTwAAaqNPAABqpE8AAGqnTwAAaqhPAABqqU8AAGqqTwAAaqtPAABqrE8AAGqvTwAAarBPAABqsU8AAGqyTwAAarNPAABqtE8AAGqtTwAAaq5PAABqt08AAGq4TwAAarlPAABquk8AAGq7TwAAarxPAABqvU8AAGq+TwAAar9PAABqwE8AAGo9UAAAaj5QAABqw08AAGrETwAAag9OAABqEE4AAGrHTwAAashPAABqyU8AAGrKTwAAastPAABqzE8AAGo/UAAAakBQAABqz08AAGrQTwAAatFPAABq0k8AAGrTTwAAatRPAABq1U8AAGrWTwAAatdPAABq2E8AAGrvUQAAavBRAABq2U8AAGraTwAAattPAABq3E8AAGqlTwAAaqZPAABq308AAGrgTwAAauFPAABq4k8AAGrjTwAAauRPAABq5U8AAGrmTwAAaudPAABq6E8AAGrpTwAAaupPAABq608AAGrsTwAAau1PAABq7k8AAGprUQAAamxRAABqC1EAAGoMUQAAavNPAABq9E8AAGr1TwAAavZPAABq908AAGr4TwAAavlPAABq+k8AAGoPUQAAahBRAABqQU4AAGpCTgAAav9PAABqAFAAAGoBUAAAagJQAABqA1AAAGoEUAAAagVQAABqBlAAAGq7UQAAarxRAABqCVAAAGoKUAAAagtQAABqDFAAAGoNUAAAag5QAABqD1AAAGoQUAAAahFQAABqElAAAGoTUAAAahRQAABqFVAAAGoWUAAAahdQAABqGFAAAGpdTgAAal5OAABqG1AAAGocUAAAav9OAABqAE8AAGofUAAAaiBQAABqIVAAAGoiUAAAaiNQAABqJFAAAGolUAAAaiZQAABqJ1AAAGooUAAAailQAABqKlAAAGorUAAAaixQAABqLVAAAGouUAAAalVPAABqVk8AAGpdTwAAal5PAABqM1AAAGo0UAAAajVQAABqNlAAAGo3UAAAajhQAABqOVAAAGo6UAAAarVPAABqtk8AAGq1UQAAarZRAABqwU8AAGrCTwAAas1PAABqzk8AAGpBUAAAakJQAABqQ1AAAGpEUAAAakVQAABqRlAAAGpHUAAAakhQAABqSVAAAGpKUAAAaktQAABqTFAAAGpNUAAAak5QAABqT1AAAGpQUAAAalFQAABqUlAAAGpTUAAAalRQAABqVVAAAGpWUAAAaldQAABqWFAAAGqFUQAAaoZRAABqWVAAAGpaUAAAaltQAABqXFAAAGpdUAAAal5QAABqX1AAAGpgUAAAamFQAABqYlAAAGpjUAAAamRQAABqZVAAAGpmUAAAamdQAABqaFAAAGppUAAAampQAABqa1AAAGpsUAAAapVPAABqlk8AAGptUAAAam5QAABqb1AAAGpwUAAAanFQAABqclAAAGpzUAAAanRQAABqdVAAAGp2UAAAandQAABqeFAAAGp5UAAAanpQAABqe1AAAGp8UAAAan1QAABqflAAAGp/UAAAaoBQAABqgVAAAGqCUAAAaoNQAABqhFAAAGqFUAAAaoZQAABqh1AAAGqIUAAAaolQAABqilAAAGqLUAAAaoxQAABqjVAAAGqOUAAAao9QAABqkFAAAGqRUAAAapJQAABqk1AAAGqUUAAAapVQAABqllAAAGrdUQAAat5RAABqmVAAAGqaUAAAagNPAABqBE8AAGqdUAAAap5QAABqn1AAAGqgUAAAaqFQAABqolAAAGqjUAAAaqRQAABqpVAAAGqmUAAAaqdQAABqqFAAAGqpUAAAaqpQAABqq1AAAGqsUAAAaidRAABqKFEAAGqvUAAAarBQAABqsVAAAGqyUAAAarNQAABqtFAAAGq1UAAAarZQAABqt1AAAGq4UAAAarlQAABqulAAAGq7UAAAarxQAABqvVAAAGq+UAAAar9QAABqwFAAAGrBUAAAasJQAABqw1AAAGrEUAAAasVQAABqxlAAAGpnTgAAamhOAABqyVAAAGrKUAAAastQAABqzFAAAGrNUAAAas5QAABq0VAAAGrSUAAAatNQAABq1FAAAGrVUAAAatZQAABq11AAAGrYUAAAatlQAABq2lAAAGrbUAAAatxQAABq6VEAAGrqUQAAat1QAABq3lAAAGrfUAAAauBQAABq4VAAAGriUAAAauNQAABq5FAAAGrlUAAAauZQAABq51AAAGroUAAAaulQAABq6lAAAGofUQAAaiBRAABq61AAAGrsUAAAau1QAABq7lAAAGrvUAAAavBQAABq81AAAGr0UAAAavtQAABq/FAAAGr3UAAAavhQAABqFVMAAGoWUwAAam9OAABqcE4AAGpLTgAAakxOAABq/1AAAGoAUQAAap9PAABqoE8AAGoDUQAAagRRAABqBVEAAGoGUQAAagdRAABqCFEAAGoJUQAAagpRAABq8U8AAGryTwAAag1RAABqDlEAAGr7TwAAavxPAABqEVEAAGoSUQAAahNRAABqFFEAAGoVUQAAahZRAABqF1EAAGoYUQAAahlRAABqGlEAAGobUQAAahxRAABqHVEAAGoeUQAAav1QAABq/lAAAGohUQAAaiJRAABqI1EAAGokUQAAaiVRAABqJlEAAGqtUAAAaq5QAABqKVEAAGoqUQAAaitRAABqLFEAAGotUQAAai5RAABqL1EAAGowUQAAavlQAABq+lAAAGozUQAAajRRAABqNVEAAGo2UQAAajdRAABqOFEAAGo/UQAAakBRAABqF04AAGoYTgAAaj1RAABqPlEAAGo5UQAAajpRAABqQVEAAGpCUQAAakNRAABqRFEAAGpFUQAAakZRAABqR1EAAGpIUQAAaklRAABqSlEAAGpLUQAAakxRAABqTVEAAGpOUQAAak9RAABqUFEAAGo7UAAAajxQAABqUVEAAGpSUQAAalNRAABqVFEAAGpVUQAAalZRAABqWVEAAGpaUQAAaltRAABqXFEAAGpdUQAAal5RAABqX1EAAGpgUQAAamFRAABqYlEAAGpjUQAAamRRAABqCVIAAGoKUgAAamVRAABqZlEAAGrzTQAAavRNAABqaVEAAGpqUQAAagNOAABqBE4AAGptUQAAam5RAABqb1EAAGpwUQAAahNOAABqFE4AAGpzUQAAanRRAABqdVEAAGp2UQAAandRAABqeFEAAGp5UQAAanpRAABqC1IAAGoMUgAAan1RAABqflEAAGp/UQAAaoBRAABqgVEAAGqCUQAAaoNRAABqhFEAAGovTgAAajBOAABqD1IAAGoQUgAAaolRAABqilEAAGoZUgAAahpSAABqi1EAAGqMUQAAao1RAABqjlEAAGqPUQAAapBRAABqkVEAAGqSUQAAapNRAABqlFEAAGqVUQAAapZRAABqEVMAAGoSUwAAapdRAABqmFEAAGqZUQAAappRAABqm1EAAGqcUQAAap1RAABqnlEAAGqfUQAAaqBRAABqoVEAAGqiUQAAaqNRAABqpFEAAGqlUQAAaqZRAABqp1EAAGqoUQAAamFPAABqYk8AAGqrUQAAaqxRAABqxU8AAGrGTwAAaq1RAABqrlEAAGqvUQAAarBRAABqsVEAAGqyUQAAarNRAABqtFEAAGpXUQAAalhRAABqt1EAAGq4UQAAau9PAABq8E8AAGoHUAAAaghQAABqvVEAAGq+UQAAar9RAABqwFEAAGrBUQAAasJRAABqw1EAAGrEUQAAasVRAABqxlEAAGrHUQAAashRAABqyVEAAGrKUQAAastRAABqzFEAAGrNUQAAas5RAABqz1EAAGrQUQAAatFRAABq0lEAAGrTUQAAatRRAABq1VEAAGrWUQAAatdRAABq2FEAAGrZUQAAatpRAABq21EAAGrcUQAAapdQAABqmFAAAGrfUQAAauBRAABq4VEAAGriUQAAauNRAABq5FEAAGrlUQAAauZRAABq51EAAGroUQAAahNTAABqFFMAAGrrUQAAauxRAABq7VEAAGruUQAAavVQAABq9lAAAGrxUQAAavJRAABq81EAAGr0UQAAavVRAABq9lEAAGr3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AABhhVJyf1UAAGj4aAVdcoBVAABYJgAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2ZpbGVzeXN0ZW1zLnB5coFVAABhhVJyglUAAGjWaAVdcoNVAABYOgAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2djcC9kYXRhc3RvcmUvdjEvZmFrZV9kYXRhc3RvcmUucHlyhFUAAGGFUnKFVQAAaL1oBV1yhlUAAFg5AAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9pbnRlcmFjdGl2ZS9jYWNoZV9tYW5hZ2VyLnB5codVAABhhVJyiFUAAGi+aAVdcolVAABYNQAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvZGlyZWN0L2J1bmRsZV9mYWN0b3J5LnB5copVAABhhVJyi1UAAGi/aAVdcoxVAABYKgAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3RyYW5zZm9ybXMvZGlzcGxheS5weXKNVQAAYYVSco5VAABowGgFXXKPVQAAWCgAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9vcHRpb25zL19faW5pdF9fLnB5cpBVAABhhVJykVUAAGjBaAVdcpJVAABYKAAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL2ludGVybmFsL3BpY2tsZXIucHlyk1UAAGGFUnKUVQAAaMJoBV1ylVUAAFg/AAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vZmxpbmsvZmxpbmtfc3RyZWFtaW5nX2ltcHVsc2Vfc291cmNlLnB5cpZVAABhhVJyl1UAAGoUAQAAaAVdcphVAABYOAAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvZGlyZWN0L3dhdGVybWFya19tYW5hZ2VyLnB5cplVAABhhVJymlUAAGjEaAVdcptVAABYKgAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3R5cGVoaW50cy9fX2luaXRfXy5weXKcVQAAYYVScp1VAABoxWgFXXKeVQAAWDUAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2RpcmVjdC9kaXJlY3RfbWV0cmljcy5weXKfVQAAYYVScqBVAABoxmgFXXKhVQAAWCUAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9pby9nY3AvcHVic3ViLnB5cqJVAABhhVJyo1UAAGjHaAVdcqRVAABYQgAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3Rlc3RpbmcvYmVuY2htYXJrcy9uZXhtYXJrL21vZGVscy9fX2luaXRfXy5weXKlVQAAYYVScqZVAABoyGgFXXKnVQAAWCIAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS91dGlscy91cm5zLnB5cqhVAABhhVJyqVUAAGjKaAVdcqpVAABYMAAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL29wdGlvbnMvcGlwZWxpbmVfb3B0aW9ucy5weXKrVQAAYYVScqxVAABoy2gFXXKtVQAAWC4AAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9vcHRpb25zL3ZhbHVlX3Byb3ZpZGVyLnB5cq5VAABhhVJyr1UAAGi6aAVdcrBVAABYJwAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2djcC9iaWdxdWVyeS5weXKxVQAAYYVScrJVAABozWgFXXKzVQAAWCsAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS90cmFuc2Zvcm1zL19faW5pdF9fLnB5crRVAABhhVJytVUAAGjOaAVdcrZVAABYMgAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3Rlc3RpbmcvcGlwZWxpbmVfdmVyaWZpZXJzLnB5crdVAABhhVJyuFUAAGjPaAVdcrlVAABYRAAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3BvcnRhYmlsaXR5L2FwaS9zdGFuZGFyZF93aW5kb3dfZm5zX3BiMl9ncnBjLnB5crpVAABhhVJyu1UAAGjQaAVdcrxVAABYJgAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvcnVubmVyLnB5cr1VAABhhVJyvlUAAGjRaAVdcr9VAABYQQAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3Rlc3RpbmcvYmVuY2htYXJrcy9uZXhtYXJrL3F1ZXJpZXMvcXVlcnkyLnB5csBVAABhhVJywVUAAGjSaAVdcsJVAABYQQAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3Rlc3RpbmcvYmVuY2htYXJrcy9uZXhtYXJrL3F1ZXJpZXMvcXVlcnkxLnB5csNVAABhhVJyxFUAAGjTaAVdcsVVAABYQQAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3Rlc3RpbmcvYmVuY2htYXJrcy9uZXhtYXJrL3F1ZXJpZXMvcXVlcnkwLnB5csZVAABhhVJyx1UAAGjUaAVdcshVAABYRAAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvaW50ZXJhY3RpdmUvZGlzcGxheS9kaXNwbGF5X21hbmFnZXIucHljcslVAABhhVJyylUAAGjfaAVdcstVAABYKQAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2ZsaW5rL19faW5pdF9fLnB5csxVAABhhVJyzVUAAGi8aAVdcs5VAABYKgAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3RyYW5zZm9ybXMvdHJpZ2dlci5weXLPVQAAYYVSctBVAABo12gFXXLRVQAAWDkAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2RpcmVjdC90ZXN0X2RpcmVjdF9ydW5uZXIucHly0lUAAGGFUnLTVQAAaPpoBV1y1FUAAFgsAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vc291cmNlX3Rlc3RfdXRpbHMucHly1VUAAGGFUnLWVQAAaNloBV1y11UAAFglAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vZmlsZXN5c3RlbS5weXLYVQAAYYVSctlVAABo2mgFXXLaVQAAWCsAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS90ZXN0aW5nL3Rlc3Rfc3RyZWFtLnB5cttVAABhhVJy3FUAAGjbaAVdct1VAABYIAAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL3V0aWxzLnB5ct5VAABhhVJy31UAAGjcaAVdcuBVAABYOgAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2djcC9kYXRhc3RvcmVfd3JpdGVfaXRfcGlwZWxpbmUucHly4VUAAGGFUnLiVQAAaN1oBV1y41UAAFgnAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vY29kZXJzL19faW5pdF9fLnB5cuRVAABhhVJy5VUAAGjeaAVdcuZVAABYLQAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL2ludGVybmFsL2djcC9fX2luaXRfXy5weXLnVQAAYYVScuhVAABo1WgFXXLpVQAAWCkAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9pby9yYW5nZV90cmFja2Vycy5weXLqVQAAYYVScutVAABo4GgFXXLsVQAAWCQAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9pby9wYXJxdWV0aW8ucHly7VUAAGGFUnLuVQAAaOFoBV1y71UAAFgqAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9zZGZfY29tbW9uLnB5cvBVAABhhVJy8VUAAGjiaAVdcvJVAABYLAAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvam9iL19faW5pdF9fLnB5cvNVAABhhVJy9FUAAGoxAQAAaAVdcvVVAABYIAAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL3ZjZmlvLnB5cvZVAABhhVJy91UAAGoQAQAAaAVdcvhVAABYNgAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3Rvb2xzL3NpZGVpbnB1dF9taWNyb2JlbmNobWFyay5weXL5VQAAYYVScvpVAABo42gFXXL7VQAAWCUAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9tZXRyaWNzL2NlbGxzLnB5cvxVAABhhVJy/VUAAGoTAQAAaAVdcv5VAABYMgAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2djcC9kYXRhc3RvcmUvdjEvaGVscGVyLnB5cv9VAABhhVJyAFYAAGjlaAVdcgFWAABYLAAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3BvcnRhYmlsaXR5L19faW5pdF9fLnB5cgJWAABhhVJyA1YAAGjmaAVdcgRWAABYIAAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3BpcGVsaW5lLnB5cgVWAABhhVJyBlYAAGjnaAVdcgdWAABYPQAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvaW50ZXJhY3RpdmUvcGlwZWxpbmVfYW5hbHl6ZXIucHlyCFYAAGGFUnIJVgAAaOhoBV1yClYAAFhJAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9kaXJlY3QvY29uc3VtZXJfdHJhY2tpbmdfcGlwZWxpbmVfdmlzaXRvci5weXILVgAAYYVScgxWAABo6WgFXXINVgAAWDoAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9wb3J0YWJpbGl0eS9hcGkvZW5kcG9pbnRzX3BiMl9ncnBjLnB5cg5WAABhhVJyD1YAAGjqaAVdchBWAABYMAAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2djcC9kYXRhc3RvcmUvdjEvdXRpbC5weXIRVgAAYYVSchJWAABo62gFXXITVgAAWCgAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS90ZXN0aW5nL19faW5pdF9fLnB5chRWAABhhVJyFVYAAGjsaAVdchZWAABYMwAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3Rlc3RpbmcvbG9hZF90ZXN0cy9fX2luaXRfXy5weXIXVgAAYYVSchhWAABo7WgFXXIZVgAAWDsAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2RhdGFmbG93L25hdGl2ZV9pby9fX2luaXRfXy5weXIaVgAAYYVSchtWAABo7mgFXXIcVgAAWCoAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9jb2RlcnMvc2xvd19zdHJlYW0ucHlyHVYAAGGFUnIeVgAAaO9oBV1yH1YAAFg8AAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9pbnRlcmFjdGl2ZS9kaXNwbGF5L19faW5pdF9fLnB5ciBWAABhhVJyIVYAAGjwaAVdciJWAABYLQAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3RyYW5zZm9ybXMvcHRyYW5zZm9ybS5weXIjVgAAYYVSciRWAABo8mgFXXIlVgAAWEEAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS90b29scy9kaXN0cmlidXRpb25fY291bnRlcl9taWNyb2JlbmNobWFyay5weXImVgAAYYVScidWAABo82gFXXIoVgAAWCgAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9pby9maWxlYmFzZWRzaW5rLnB5cilWAABhhVJyKlYAAGj0aAVdcitWAABYJwAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3RyYW5zZm9ybXMvY29yZS5weXIsVgAAYYVSci1WAABo9WgFXXIuVgAAWCEAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9pby90ZXh0aW8ucHlyL1YAAGGFUnIwVgAAaPZoBV1yMVYAAFgxAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vZ2NwL3B1YnN1Yl9pdF9waXBlbGluZS5weXIyVgAAYYVScjNWAABo92gFXXI0VgAAWDIAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS90ZXN0aW5nL3N5bnRoZXRpY19waXBlbGluZS5weXI1VgAAYYVScjZWAABoyWgFXXI3VgAAWDMAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS90ZXN0aW5nL2JlbmNobWFya3MvX19pbml0X18ucHlyOFYAAGGFUnI5VgAAaPloBV1yOlYAAFg/AAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vdGVzdGluZy9iZW5jaG1hcmtzL25leG1hcmsvbmV4bWFya191dGlsLnB5cjtWAABhhVJyPFYAAGjYaAVdcj1WAABYLAAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2djcC9nY3NmaWxlc3lzdGVtLnB5cj5WAABhhVJyP1YAAGj7aAVdckBWAABYKQAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL2ludGVybmFsL19faW5pdF9fLnB5ckFWAABhhVJyQlYAAGorAQAAaAVdckNWAABYLAAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3RyYW5zZm9ybXMvdXNlcnN0YXRlLnB5ckRWAABhhVJyRVYAAGpOAQAAaAVdckZWAABYKAAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvX19pbml0X18ucHlyR1YAAGGFUnJIVgAAaP1oBV1ySVYAAFg6AAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vb3B0aW9ucy9waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5weXJKVgAAYYVScktWAABo/mgFXXJMVgAAWCYAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS91dGlscy9wcm9maWxlci5weXJNVgAAYYVSck5WAABo/2gFXXJPVgAAWCcAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS91dGlscy9wcm9jZXNzZXMucHlyUFYAAGGFUnJRVgAAagABAABoBV1yUlYAAFg4AAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9kaXJlY3QvaGVscGVyX3RyYW5zZm9ybXMucHlyU1YAAGGFUnJUVgAAagEBAABoBV1yVVYAAFgrAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vaGFkb29wZmlsZXN5c3RlbS5weXJWVgAAYYVScldWAABqAgEAAGgFXXJYVgAAWDgAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2RhdGFmbG93L2RhdGFmbG93X3J1bm5lci5weXJZVgAAYYVSclpWAABqAwEAAGgFXXJbVgAAWCMAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS91dGlscy9yZXRyeS5weXJcVgAAYYVScl1WAABqBAEAAGgFXXJeVgAAWCcAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS91dGlscy90aW1lc3RhbXAucHlyX1YAAGGFUnJgVgAAagUBAABoBV1yYVYAAFgpAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9qb2IvdXRpbHMucHlyYlYAAGGFUnJjVgAAagYBAABoBV1yZFYAAFhHAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vdGVzdGluZy9iZW5jaG1hcmtzL25leG1hcmsvbW9kZWxzL25leG1hcmtfbW9kZWwucHlyZVYAAGGFUnJmVgAAagcBAABoBV1yZ1YAAFhDAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9kYXRhZmxvdy9uYXRpdmVfaW8vc3RyZWFtaW5nX2NyZWF0ZS5weXJoVgAAYYVScmlWAABqCAEAAGgFXXJqVgAAWEAAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9pby9nY3AvYmlnX3F1ZXJ5X3F1ZXJ5X3RvX3RhYmxlX3BpcGVsaW5lLnB5cmtWAABhhVJybFYAAGoJAQAAaAVdcm1WAABYKgAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3Rlc3RpbmcvdGVzdF91dGlscy5weXJuVgAAYYVScm9WAABqCgEAAGgFXXJwVgAAWEMAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS90ZXN0aW5nL2JlbmNobWFya3MvbmV4bWFyay9uZXhtYXJrX2xhdW5jaGVyLnB5cnFWAABhhVJyclYAAGofAQAAaAVdcnNWAABYKQAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3V0aWxzL3Byb3RvX3V0aWxzLnB5cnRWAABhhVJydVYAAGoMAQAAaAVdcnZWAABYQwAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3Rlc3RpbmcvYmVuY2htYXJrcy9uZXhtYXJrL3F1ZXJpZXMvX19pbml0X18ucHlyd1YAAGGFUnJ4VgAAag0BAABoBV1yeVYAAFgsAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vaW50ZXJuYWwvaHR0cF9jbGllbnQucHlyelYAAGGFUnJ7VgAAag4BAABoBV1yfFYAAFgjAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vdG9vbHMvdXRpbHMucHlyfVYAAGGFUnJ+VgAAag8BAABoBV1yf1YAAFgzAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vdG9vbHMvY29kZXJzX21pY3JvYmVuY2htYXJrLnB5coBWAABhhVJygVYAAGohAQAAaAVdcoJWAABYJQAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL2ludGVybmFsL3V0aWwucHlyg1YAAGGFUnKEVgAAahEBAABoBV1yhVYAAFg7AAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vdGVzdGluZy9iZW5jaG1hcmtzL25leG1hcmsvX19pbml0X18ucHlyhlYAAGGFUnKHVgAAahIBAABoBV1yiFYAAFhCAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9pbnRlcmFjdGl2ZS9kaXNwbGF5L3BpcGVsaW5lX2dyYXBoLnB5colWAABhhVJyilYAAGjkaAVdcotWAABYJAAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3Rlc3RpbmcvdXRpbC5weXKMVgAAYYVSco1WAABow2gFXXKOVgAAWDAAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9wb3J0YWJpbGl0eS9hcGkvX19pbml0X18ucHlyj1YAAGGFUnKQVgAAahUBAABoBV1ykVYAAFgsAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vdHJhbnNmb3Jtcy9jb21iaW5lcnMucHlyklYAAGGFUnKTVgAAahYBAABoBV1ylFYAAFgnAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vZ2NwL19faW5pdF9fLnB5cpVWAABhhVJyllYAAGoXAQAAaAVdcpdWAABYSwAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvaW50ZXJhY3RpdmUvZGlzcGxheS9waXBlbGluZV9ncmFwaF9yZW5kZXJlci5weXKYVgAAYYVScplWAABqGAEAAGgFXXKaVgAAWC0AAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS90cmFuc2Zvcm1zL3NpZGVpbnB1dHMucHlym1YAAGGFUnKcVgAAahkBAABoBV1ynVYAAFg4AAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vZ2NwL2JpZ3F1ZXJ5X2lvX3JlYWRfcGlwZWxpbmUucHlynlYAAGGFUnKfVgAAahoBAABoBV1yoFYAAFgmAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vdXRpbHMvX19pbml0X18ucHlyoVYAAGGFUnKiVgAAaPFoBV1yo1YAAFgdAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vZXJyb3IucHlypFYAAGGFUnKlVgAAahwBAABoBV1yplYAAFgpAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vdHJhbnNmb3Jtcy93aW5kb3cucHlyp1YAAGGFUnKoVgAAah0BAABoBV1yqVYAAFgrAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vdHlwZWhpbnRzL3R5cGVjaGVjay5weXKqVgAAYYVScqtWAABqHgEAAGgFXXKsVgAAWCkAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9jb2RlcnMvb2JzZXJ2YWJsZS5weXKtVgAAYYVScq5WAABqWwEAAGgFXXKvVgAAWCEAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9pby9pb2Jhc2UucHlysFYAAGGFUnKxVgAAaiABAABoBV1yslYAAFg+AAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vZ2NwL2RhdGFzdG9yZS92MS9hZGFwdGl2ZV90aHJvdHRsZXIucHlys1YAAGGFUnK0VgAAakIBAABoBV1ytVYAAFg6AAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vZ2NwL2RhdGFzdG9yZS92MS9xdWVyeV9zcGxpdHRlci5weXK2VgAAYYVScrdWAABqIgEAAGgFXXK4VgAAWDQAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2RpcmVjdC9kaXJlY3RfcnVubmVyLnB5crlWAABhhVJyulYAAGojAQAAaAVdcrtWAABYOAAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvZGlyZWN0L3NkZl9kaXJlY3RfcnVubmVyLnB5crxWAABhhVJyvVYAAGokAQAAaAVdcr5WAABYOQAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvZGlyZWN0L2V2YWx1YXRpb25fY29udGV4dC5weXK/VgAAYYVScsBWAABqJQEAAGgFXXLBVgAAWDsAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS90eXBlaGludHMvbmF0aXZlX3R5cGVfY29tcGF0aWJpbGl0eS5weXLCVgAAYYVScsNWAABqJgEAAGgFXXLEVgAAWCsAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS90cmFuc2Zvcm1zL3RpbWV1dGlsLnB5csVWAABhhVJyxlYAAGonAQAAaAVdcsdWAABYNwAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2djcC9kYXRhc3RvcmUvdjEvZGF0YXN0b3JlaW8ucHlyyFYAAGGFUnLJVgAAaigBAABoBV1yylYAAFglAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vdGZyZWNvcmRpby5weXLLVgAAYYVScsxWAABqKQEAAGgFXXLNVgAAWCYAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS90b29scy9fX2luaXRfXy5weXLOVgAAYYVScs9WAABqKgEAAGgFXXLQVgAAWDQAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2ludGVyYWN0aXZlL19faW5pdF9fLnB5ctFWAABhhVJy0lYAAGjMaAVdctNWAABYKwAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvZGlyZWN0L3V0aWwucHly1FYAAGGFUnLVVgAAakoBAABoBV1y1lYAAFhOAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9pbnRlcmFjdGl2ZS9kaXNwbGF5L2ludGVyYWN0aXZlX3BpcGVsaW5lX2dyYXBoLnB5ctdWAABhhVJy2FYAAGosAQAAaAVdctlWAABYLAAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvZGlyZWN0L2Nsb2NrLnB5ctpWAABhhVJy21YAAGouAQAAaAVdctxWAABYQgAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3BvcnRhYmlsaXR5L2FwaS9iZWFtX2FydGlmYWN0X2FwaV9wYjJfZ3JwYy5weXLdVgAAYYVSct5WAABqLwEAAGgFXXLfVgAAWCQAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS91dGlscy9wbHVnaW4ucHly4FYAAGGFUnLhVgAAajABAABoBV1y4lYAAFgeAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vcHZhbHVlLnB5cuNWAABhhVJy5FYAAGotAQAAaAVdcuVWAABYJAAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2djcC9nY3Npby5weXLmVgAAYYVScudWAABqMgEAAGgFXXLoVgAAWDAAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9tZXRyaWNzL21vbml0b3JpbmdfaW5mb3MucHly6VYAAGGFUnLqVgAAajMBAABoBV1y61YAAFgoAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vbWV0cmljcy9fX2luaXRfXy5weXLsVgAAYYVScu1WAABqNAEAAGgFXXLuVgAAWC8AAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9wb3J0YWJpbGl0eS9jb21tb25fdXJucy5weXLvVgAAYYVScvBWAABqNgEAAGgFXXLxVgAAWC8AAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2RpcmVjdC9fX2luaXRfXy5weXLyVgAAYYVScvNWAABqNwEAAGgFXXL0VgAAWEIAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS90ZXN0aW5nL2xvYWRfdGVzdHMvbG9hZF90ZXN0X21ldHJpY3NfdXRpbHMucHly9VYAAGGFUnL2VgAAagsBAABoBV1y91YAAFgsAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vdHlwZWhpbnRzL2RlY29yYXRvcnMucHly+FYAAGGFUnL5VgAAajgBAABoBV1y+lYAAFgjAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vX19pbml0X18ucHly+1YAAGGFUnL8VgAAajkBAABoBV1y/VYAAFgqAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vbWV0cmljcy9tZXRyaWNiYXNlLnB5cv5WAABhhVJy/1YAAGo6AQAAaAVdcgBXAABYMAAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvcGlwZWxpbmVfY29udGV4dC5weXIBVwAAYYVScgJXAABqOwEAAGgFXXIDVwAAWC0AAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS90ZXN0aW5nL3Rlc3RfcGlwZWxpbmUucHlyBFcAAGGFUnIFVwAAajwBAABoBV1yBlcAAFgnAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vZmlsZXN5c3RlbWlvLnB5cgdXAABhhVJyCFcAAGo9AQAAaAVdcglXAABYJQAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL2NvZGVycy9jb2RlcnMucHlyClcAAGGFUnILVwAAaj4BAABoBV1yDFcAAFgvAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vcG9ydGFiaWxpdHkvcHl0aG9uX3VybnMucHlyDVcAAGGFUnIOVwAAalABAABoBV1yD1cAAFg+AAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9pbnRlcmFjdGl2ZS9pbnRlcmFjdGl2ZV9ydW5uZXIucHlyEFcAAGGFUnIRVwAAakABAABoBV1yElcAAFgpAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vaW50ZXJuYWwvZ2NwL2F1dGgucHlyE1cAAGGFUnIUVwAAakEBAABoBV1yFVcAAFg0AAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vZ2NwL2RhdGFzdG9yZS92MS9fX2luaXRfXy5weXIWVwAAYYVSchdXAABqQwEAAGgFXXIYVwAAWDEAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2ludGVybmFsL19faW5pdF9fLnB5chlXAABhhVJyGlcAAGpEAQAAaAVdchtXAABYQwAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3BvcnRhYmlsaXR5L2FwaS9iZWFtX3Byb3Zpc2lvbl9hcGlfcGIyX2dycGMucHlyHFcAAGGFUnIdVwAAakUBAABoBV1yHlcAAFg9AAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9kYXRhZmxvdy90ZXN0X2RhdGFmbG93X3J1bm5lci5weXIfVwAAYYVSciBXAABqRgEAAGgFXXIhVwAAWC8AAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9pby9yZXN0cmljdGlvbl90cmFja2Vycy5weXIiVwAAYYVSciNXAABqRwEAAGgFXXIkVwAAWC8AAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2RpcmVjdC9leGVjdXRvci5weXIlVwAAYYVSciZXAABqSAEAAGgFXXInVwAAWCYAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9tZXRyaWNzL21ldHJpYy5weXIoVwAAYYVScilXAABqSQEAAGgFXXIqVwAAWD0AAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9wb3J0YWJpbGl0eS9hcGkvYmVhbV9qb2JfYXBpX3BiMl9ncnBjLnB5citXAABhhVJyLFcAAGi7aAVdci1XAAAoWA8AAABhcGFjaGVfYmVhbS5yc3RyLlcAAFggAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vX19pbml0X18ucHlyL1cAAGWFUnIwVwAAaksBAABoBV1yMVcAAFg0AAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vdHlwZWhpbnRzL3RyaXZpYWxfaW5mZXJlbmNlLnB5Y3IyVwAAYYVScjNXAABqTAEAAGgFXXI0VwAAWDkAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2RhdGFmbG93L25hdGl2ZV9pby9pb2Jhc2UucHlyNVcAAGGFUnI2VwAAak0BAABoBV1yN1cAAFg3AAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9kaXJlY3QvZGlyZWN0X3VzZXJzdGF0ZS5weXI4VwAAYYVScjlXAABo/GgFXXI6VwAAWD0AAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2RhdGFmbG93L3B0cmFuc2Zvcm1fb3ZlcnJpZGVzLnB5cjtXAABhhVJyPFcAAGpPAQAAaAVdcj1XAABYHwAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3ZlcnNpb24ucHlyPlcAAGGFUnI/VwAAaj8BAABoBV1yQFcAAFg6AAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9kaXJlY3QvdHJhbnNmb3JtX2V2YWx1YXRvci5weXJBVwAAYYVSckJXAABqUQEAAGgFXXJDVwAAWDEAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2RhdGFmbG93L19faW5pdF9fLnB5ckRXAABhhVJyRVcAAGo1AQAAaAVdckZXAABYLwAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL2ludGVybmFsL2djcC9qc29uX3ZhbHVlLnB5ckdXAABhhVJySFcAAGpTAQAAaAVdcklXAABYOQAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvZGF0YWZsb3cvZGF0YWZsb3dfbWV0cmljcy5weXJKVwAAYYVScktXAABqVAEAAGgFXXJMVwAAWDAAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS90cmFuc2Zvcm1zL2NyZWF0ZV9zb3VyY2UucHlyTVcAAGGFUnJOVwAAalUBAABoBV1yT1cAAFgpAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vdXRpbHMvYW5ub3RhdGlvbnMucHlyUFcAAGGFUnJRVwAAalYBAABoBV1yUlcAAFgqAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vbG9jYWxmaWxlc3lzdGVtLnB5clNXAABhhVJyVFcAAGpXAQAAaAVdclVXAABYKQAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL2NvZGVycy90eXBlY29kZXJzLnB5clZXAABhhVJyV1cAAGpYAQAAaAVdclhXAABYKwAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3R5cGVoaW50cy90eXBlaGludHMucHlyWVcAAGGFUnJaVwAAalkBAABoBV1yW1cAAFguAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9pbnRlcm5hbC9uYW1lcy5weXJcVwAAYYVScl1XAABqWgEAAGgFXXJeVwAAWDwAAAAuLi8uLi8uLi9hcGFjaGVfYmVhbS9wb3J0YWJpbGl0eS9hcGkvYmVhbV9mbl9hcGlfcGIyX2dycGMucHlyX1cAAGGFUnJgVwAAalwBAABoBV1yYVcAAFgnAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vdHJhbnNmb3Jtcy91dGlsLnB5cmJXAABhhVJyY1cAAGpdAQAAaAVdcmRXAABYKAAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2NvbmNhdF9zb3VyY2UucHlyZVcAAGGFUnJmVwAAal4BAABoBV1yZ1cAAFgqAAAALi4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vZmlsZWJhc2Vkc291cmNlLnB5cmhXAABhhVJyaVcAAGpfAQAAaAVdcmpXAABYKwAAAC4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvam9iL21hbmFnZXIucHlya1cAAGGFUnJsVwAAdVUSdmVyc2lvbmluZ19jb21wYXJlcm1XAACJVQhtZXRhZGF0YXJuVwAAanJVAABjX19idWlsdGluX18KZGljdApyb1cAAIVScnBXAAAoaLh9cnFXAABouX1yclcAAGpSAQAAfXJzVwAAahsBAAB9cnRXAABo+H1ydVcAAGjWfXJ2VwAAaL19cndXAABovn1yeFcAAGi/fXJ5VwAAaMB9cnpXAABowX1ye1cAAGjCfXJ8VwAAahQBAAB9cn1XAABoxH1yflcAAGjFfXJ/VwAAaMZ9coBXAABox31ygVcAAGjIfXKCVwAAaMp9coNXAABoy31yhFcAAGi6fXKFVwAAaM19coZXAABozn1yh1cAAGjPfXKIVwAAaNB9colXAABo0X1yilcAAGjSfXKLVwAAaNN9coxXAABo1H1yjVcAAGjffXKOVwAAaLx9co9XAABo131ykFcAAGj6fXKRVwAAaNl9cpJXAABo2n1yk1cAAGjbfXKUVwAAaNx9cpVXAABo3X1yllcAAGjefXKXVwAAaNV9cphXAABo4H1ymVcAAGjhfXKaVwAAaOJ9cptXAABqMQEAAH1ynFcAAGoQAQAAfXKdVwAAaON9cp5XAABqEwEAAH1yn1cAAGjlfXKgVwAAaOZ9cqFXAABo531yolcAAGjofXKjVwAAaOl9cqRXAABo6n1ypVcAAGjrfXKmVwAAaOx9cqdXAABo7X1yqFcAAGjufXKpVwAAaO99cqpXAABo8H1yq1cAAGjyfXKsVwAAaPN9cq1XAABo9H1yrlcAAGj1fXKvVwAAaPZ9crBXAABo931ysVcAAGjJfXKyVwAAaPl9crNXAABo2H1ytFcAAGj7fXK1VwAAaisBAAB9crZXAABqTgEAAH1yt1cAAGj9fXK4VwAAaP59crlXAABo/31yulcAAGoAAQAAfXK7VwAAagEBAAB9crxXAABqAgEAAH1yvVcAAGoDAQAAfXK+VwAAagQBAAB9cr9XAABqBQEAAH1ywFcAAGoGAQAAfXLBVwAAagcBAAB9csJXAABqCAEAAH1yw1cAAGoJAQAAfXLEVwAAagoBAAB9csVXAABqHwEAAH1yxlcAAGoMAQAAfXLHVwAAag0BAAB9cshXAABqDgEAAH1yyVcAAGoPAQAAfXLKVwAAaiEBAAB9cstXAABqEQEAAH1yzFcAAGoSAQAAfXLNVwAAaOR9cs5XAABow31yz1cAAGoVAQAAfXLQVwAAahYBAAB9ctFXAABqFwEAAH1y0lcAAGoYAQAAfXLTVwAAahkBAAB9ctRXAABqGgEAAH1y1VcAAGjxfXLWVwAAahwBAAB9ctdXAABqHQEAAH1y2FcAAGoeAQAAfXLZVwAAalsBAAB9ctpXAABqIAEAAH1y21cAAGpCAQAAfXLcVwAAaiIBAAB9ct1XAABqIwEAAH1y3lcAAGokAQAAfXLfVwAAaiUBAAB9cuBXAABqJgEAAH1y4VcAAGonAQAAfXLiVwAAaigBAAB9cuNXAABqKQEAAH1y5FcAAGoqAQAAfXLlVwAAaMx9cuZXAABqSgEAAH1y51cAAGosAQAAfXLoVwAAai4BAAB9culXAABqLwEAAH1y6lcAAGowAQAAfXLrVwAAai0BAAB9cuxXAABqMgEAAH1y7VcAAGozAQAAfXLuVwAAajQBAAB9cu9XAABqNgEAAH1y8FcAAGo3AQAAfXLxVwAAagsBAAB9cvJXAABqOAEAAH1y81cAAGo5AQAAfXL0VwAAajoBAAB9cvVXAABqOwEAAH1y9lcAAGo8AQAAfXL3VwAAaj0BAAB9cvhXAABqPgEAAH1y+VcAAGpQAQAAfXL6VwAAakABAAB9cvtXAABqQQEAAH1y/FcAAGpDAQAAfXL9VwAAakQBAAB9cv5XAABqRQEAAH1y/1cAAGpGAQAAfXIAWAAAakcBAAB9cgFYAABqSAEAAH1yAlgAAGpJAQAAfXIDWAAAaLt9cgRYAABqSwEAAH1yBVgAAGpMAQAAfXIGWAAAak0BAAB9cgdYAABo/H1yCFgAAGpPAQAAfXIJWAAAaj8BAAB9cgpYAABqUQEAAH1yC1gAAGo1AQAAfXIMWAAAalMBAAB9cg1YAABqVAEAAH1yDlgAAGpVAQAAfXIPWAAAalYBAAB9chBYAABqVwEAAH1yEVgAAGpYAQAAfXISWAAAalkBAAB9chNYAABqWgEAAH1yFFgAAGpcAQAAfXIVWAAAal0BAAB9chZYAABqXgEAAH1yF1gAAGpfAQAAfXIYWAAAdVUKZG9jdHJlZWRpcnIZWAAAWGUAAAAvdXNyL2xvY2FsL2dvb2dsZS9ob21lL2tsay93ZWJzaXRlX3VwZGF0ZV9kaXIvcHl0aG9uX2RvYy9iZWFtL3Nka3MvcHl0aG9uL3RhcmdldC9kb2NzL19idWlsZC9kb2N0cmVlc3IaWAAAVQR0b2NzchtYAAB9chxYAAAoaLhjZG9jdXRpbHMubm9kZXMKYnVsbGV0X2xpc3QKch1YAAApgXIeWAAAfXIfWAAAKFUHdGFnbmFtZXIgWAAAVQtidWxsZXRfbGlzdHIhWAAAVQhjaGlsZHJlbnIiWAAAXXIjWAAAY2RvY3V0aWxzLm5vZGVzCmxpc3RfaXRlbQpyJFgAACmBciVYAAB9ciZYAAAoaiBYAABVCWxpc3RfaXRlbXInWAAAaiJYAABdcihYAABjc3BoaW54LmFkZG5vZGVzCmNvbXBhY3RfcGFyYWdyYXBoCnIpWAAAKYFyKlgAAH1yK1gAAChqIFgAAFURY29tcGFjdF9wYXJhZ3JhcGhyLFgAAGoiWAAAXXItWAAAY2RvY3V0aWxzLm5vZGVzCnJlZmVyZW5jZQpyLlgAACmBci9YAAB9cjBYAAAoaiBYAABVCXJlZmVyZW5jZXIxWAAAaiJYAABdcjJYAABjZG9jdXRpbHMubm9kZXMKVGV4dApyM1gAAFg7AAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfZ3JwYyBtb2R1bGVyNFgAAIWBcjVYAAB9cjZYAAAoVQlyYXdzb3VyY2VyN1gAAFhDAAAAYXBhY2hlXF9iZWFtXC5wb3J0YWJpbGl0eVwuYXBpXC5iZWFtXF9ydW5uZXJcX2FwaVxfcGIyXF9ncnBjIG1vZHVsZXI4WAAAVQZwYXJlbnRyOVgAAGovWAAAdWJhajdYAABVAGo5WAAAaipYAABVCmF0dHJpYnV0ZXNyOlgAAH1yO1gAAChVBW5hbWVzcjxYAABdVQhkdXBu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P1sAAChqIFgAAGolWgAAaiJYAABdckBbAABqKVgAACmBckFbAAB9ckJbAAAoaiBYAABqKVoAAGoiWAAAXXJDWwAAai5YAAApgXJEWwAAfXJFWwAAKGogWAAAai1aAABqIlgAAF1yRlsAAGozWAAAWDwAAABhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5xdWVyaWVzLnF1ZXJ5MiBtb2R1bGVyR1sAAIWBckhbAAB9cklbAAAoajdYAABYQgAAAGFwYWNoZVxfYmVhbVwudGVzdGluZ1wuYmVuY2htYXJrc1wubmV4bWFya1wucXVlcmllc1wucXVlcnkyIG1vZHVsZXJKWwAAajlYAABqRFsAAHViYWo3WAAAVQBqOVgAAGpBWwAAajpYAAB9cktbAAAoajRaAABdajVaAABdajZaAABdajdaAABdajhaAABdVQphbmNob3JuYW1lVQBVBnJlZnVyaVg1AAAAYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsucXVlcmllcy5xdWVyeTJyTFsAAFUIaW50ZXJuYWyIdXViYWo3WAAAVQBqOVgAAGo+WwAAajpYAAB9ck1bAAAoajVaAABdajZaAABdajdaAABdajhaAABdajRaAABddXViYWo3WAAAVQBqOVgAAGo7WwAAajpYAAB9ck5bAAAoajVaAABdajZaAABdajdaAABdajhaAABdajRaAABddXViYWo3WAAAVQBqOlgAAH1yT1sAAChqNVoAAF1qNloAAF1qN1oAAF1qOFoAAF1qNFoAAF11dWJo0modWAAAKYFyUFsAAH1yUVsAAChqIFgAAGohWgAAaiJYAABdclJbAABqJFgAACmBclNbAAB9clRbAAAoaiBYAABqJVoAAGoiWAAAXXJVWwAAailYAAApgXJWWwAAfXJXWwAAKGogWAAAailaAABqIlgAAF1yWFsAAGouWAAAKYFyWVsAAH1yWlsAAChqIFgAAGotWgAAaiJYAABdcltbAABqM1gAAFg8AAAAYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsucXVlcmllcy5xdWVyeTEgbW9kdWxlclxbAACFgXJdWwAAfXJeWwAAKGo3WAAAWEIAAABhcGFjaGVcX2JlYW1c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4FgAAF11dWJhajdYAABVAGo6WAAAfXI9XgAAKGrhWAAAXWriWAAAXWrjWAAAXWrkWAAAXWrgWAAAXXV1Ymjrah1YAAApgXI+XgAAfXI/XgAAKGogWAAAaiFaAABqIlgAAF1yQF4AAGokWAAAKYFyQV4AAH1yQl4AAChqIFgAAGolWgAAaiJYAABdckNeAAAoailYAAApgXJEXgAAfXJFXgAAKGogWAAAailaAABqIlgAAF1yRl4AAGouWAAAKYFyR14AAH1ySF4AAChqIFgAAGotWgAAaiJYAABdckleAABqM1gAAFgbAAAAYXBhY2hlX2JlYW0udGVzdGluZyBwYWNrYWdlckpeAACFgXJLXgAAfXJMXgAAKGo3WAAAWB0AAABhcGFjaGVcX2JlYW1cLnRlc3RpbmcgcGFja2FnZXJNXgAAajlYAABqR14AAHViYWo3WAAAVQBqOVgAAGpEXgAAajpYAAB9ck5eAAAoajRaAABdajVaAABdajZaAABdajdaAABdajhaAABdVQphbmNob3JuYW1lVQBVBnJlZnVyaWo6VAAAVQhpbnRlcm5hbIh1dWJhajdYAABVAGo5WAAAakFeAABqOlgAAH1yT14AAChqNVoAAF1qNloAAF1qN1oAAF1qOFoAAF1qNFoAAF11dWJqHVgAACmBclBeAAB9clFeAAAoaiBYAABqIVoAAGoiWAAAXXJSXgAAKGokWAAAKYFyU14AAH1yVF4AAChqIFgAAGolWgAAaiJYAABdclVeAAAoailYAAApgXJWXgAAfXJXXgAAKGogWAAAailaAABqIlgAAF1yWF4AAGouWAAAKYFyWV4AAH1yWl4AAChqIFgAAGotWgAAaiJYAABdclteAABqM1gAAFgLAAAAU3VicGFja2FnZXNyXF4AAIWBcl1eAAB9cl5eAAAoajdYAABYCwAAAFN1YnBhY2thZ2VzajlYAABqWV4AAHViYWo3WAAAVQBqOVgAAGpWXgAAajpYAAB9cl9eAAAoajRaAABdajVaAABdajZaAABdajdaAABdajhaAABdVQphbmNob3JuYW1lVQwjc3VicGFja2FnZXNVBnJlZnVyaWo6VAAAVQhpbnRlcm5hbIh1dWJhajdYAABVAGo5WAAAalNeAABqOlgAAH1yYF4AAChqNVoAAF1qNloAAF1qN1oAAF1qOFoA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WAAAXXV1YmFqN1gAAFUAajlYAABqpV8AAGo6WAAAfXK4XwAAKGrhWAAAXWriWAAAXWrjWAAAXWrkWAAAXWrgWAAAXXV1YmFqN1gAAFUAajpYAAB9crlfAAAoauFYAABdauJYAABdauNYAABdauRYAABdauBYAABddXViaPdqHVgAACmBcrpfAAB9crtfAAAoaiBYAABquVoAAGoiWAAAXXK8XwAAaiRYAAApgXK9XwAAfXK+XwAAKGogWAAAar1aAABqIlgAAF1yv18AAGopWAAAKYFywF8AAH1ywV8AAChqIFgAAGrBWgAAaiJYAABdcsJfAABqLlgAACmBcsNfAAB9csRfAAAoaiBYAABqxVoAAGoiWAAAXXLFXwAAajNYAABYLQAAAGFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lIG1vZHVsZXLGXwAAhYFyx18AAH1yyF8AAChqN1gAAFgxAAAAYXBhY2hlXF9iZWFtXC50ZXN0aW5nXC5zeW50aGV0aWNcX3BpcGVsaW5lIG1vZHVsZXLJXwAAajlYAABqw18AAHViYWo3WAAAVQBqOVgAAGrAXwAAajpYAAB9cspfAAAoasxaAABdas1aAABdas5aAABdas9aAABdatBaAABdVQphbmNob3JuYW1lVQBVBnJlZnVyaVgmAAAAYXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmVyy18AAFUIaW50ZXJuYWyIdXViYWo3WAAAVQBqOVgAAGq9XwAAajpYAAB9csxfAAAoas1aAABdas5aAABdas9aAABdatBaAABdasxaAABddXViYWo3WAAAVQBqOVgAAGq6XwAAajpYAAB9cs1fAAAoas1aAABdas5aAABdas9aAABdatBaAABdasxaAABddXViYWo3WAAAVQBqOlgAAH1yzl8AAChqzVoAAF1qzloAAF1qz1oAAF1q0FoAAF1qzFoAAF11dWJoyWodWAAAKYFyz18AAH1y0F8AAChqIFgAAGohWgAAaiJYAABdctFfAABqJFgAACmBctJfAAB9ctNfAAAoaiBYAABqJVoAAGoiWAAAXXLUXwAAKGopWAAAKYFy1V8AAH1y1l8AAChqIFgAAGopWgAAaiJYAABdctdfAABqLlgAACmBcthfAAB9ctlfAAAoaiBYAABqLVoAAGoiWAAAXXLaXwAAajNYAABYJgAAAGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcyBwYWNrYWdlcttfAACFgXLcXwAAfXLdXwAAKGo3WAAAWCkAAABhcGFjaGVcX2JlYW1cLnRlc3RpbmdcLmJlbmNobWFya3MgcGFja2FnZXLeXwAAajlYAABq2F8AAHViYWo3WAAAVQBqOVgAAGrVXwAAajpYAAB9ct9fAAAoajRaAABdajVaAABdajZaAABdajdaAABdajhaAABdVQphbmNob3JuYW1lVQBVBnJlZnVyaWrNVAAAVQhpbnRlcm5hbIh1dWJhajdYAABVAGo5WAAAatJfAABqOlgAAH1y4F8AAChqNVoAAF1qNloAAF1qN1oAAF1qOFoAAF1qNFoAAF11dWJqHVgAACmBcuFfAAB9cuJfAAAoaiBYAABqIVoAAGoiWAAAXXLjXwAAaiRYAAApgXLkXwAAfXLlXwAAKGogWAAAaiVaAABqIlgAAF1y5l8AAChqKVgAACmBcudfAAB9cuhfAAAoaiBYAABqKVoAAGoiWAAAXXLpXwAAai5YAAApgXLqXwAAfXLrXwAAKGogWAAAai1aAABqIlgAAF1y7F8AAGozWAAAWAsAAABTdWJwYWNrYWdlc3LtXwAAhYFy7l8AAH1y718AAChqN1gAAFgLAAAAU3VicGFja2FnZXNqOVgAAGrqXwAAdWJhajdYAABVAGo5WAAAaudfAABqOlgAAH1y8F8AAChqNFoAAF1qNVoAAF1qNloAAF1qN1oAAF1qOFoAAF1VCmFuY2hvcm5hbWVVDCNzdWJwYWNrYWdlc1UGcmVmdXJpas1UAABVCGludGVybmFsiHV1YmFqN1gAAFUAajlYAABq5F8AAGo6WAAAfXLxXwAAKGo1WgAAXWo2WgAAXWo3WgAAXWo4WgAAXWo0WgAAXXV1YmodWAAAKYFy8l8AAH1y818AAChqIFgAAGohWgAAaiJYAABdcvRfAABqp1gAACmBcvVfAAB9cvZfAAAoajpYAAB9cvdfAAAoVQdlbnRyaWVzXXL4XwAATmqMUwAAhnL5XwAAYVUIbnVtYmVyZWRLAFUHY2FwdGlvbk5qNFoAAF1qNVoAAF1VDWluY2x1ZGVoaWRkZW6JajdaAABdVQxpbmNsdWRlZmlsZXNdcvpfAABqjFMAAGFVBmhpZGRlbolVCG1heGRlcHRoSv////9VBGdsb2KJajhaAABdVQZwYXJlbnRqzVQAAGo2WgAAXVUKdGl0bGVzb25seYl1aiBYAABqVFoAAGoiWAAAXWo3WAAAVQBqr1gAAEsMarBYAABYfwAAAC91c3IvbG9jYWwvZ29vZ2xlL2hvbWUva2xrL3dlYnNpdGVfdXBkYXRlX2Rpci9weXRob25fZG9jL2JlYW0vc2Rrcy9weXRob24vdGFyZ2V0L2RvY3Mvc291cmNlL2FwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5yc3RqOVgAAGryXwAAdWJhajdYAABVAGo5WAAAauRfAABqOlgAAH1y+18AAChqNVoAAF1qNloAAF1qN1oAAF1qOFoAAF1qNFoAAF11dWJlajdYAABVAGo5WAAAauFfAABqOlgAAH1y/F8AAChqNVoAAF1qNloAAF1qN1oAAF1qOFoAAF1qNFoAAF11dWJhajdYAABVAGo5WAAAatJfAABqOlgAAH1y/V8AAChqNVoAAF1qNloAAF1qN1oAAF1qOFoAAF1qNFoAAF11dWJlajdYAABVAGo5WAAAas9fAABqOlgAAH1y/l8AAChqNVoAAF1qNloAAF1qN1oAAF1qOFoAAF1qNFoAAF11dWJhajdYAABVAGo6WAAAfXL/XwAAKGo1WgAAXWo2WgAAXWo3WgAAXWo4WgAAXWo0WgAAXXV1Ymj5ah1YAAApgXIAYAAAfXIBYAAAKGogWAAAaiFaAABqIlgAAF1yAmAAAGokWAAAKYFyA2AAAH1yBGAAAChqIFgAAGolWgAAaiJYAABdcgVgAABqKVgAACmBcgZgAAB9cgdgAAAoaiBYAABqKVoAAGoiWAAAXXIIYAAAai5YAAApgXIJYAAAfXIKYAAAKGogWAAAai1aAABqIlgAAF1yC2AAAGozWAAAWDoAAABhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5uZXhtYXJrX3V0aWwgbW9kdWxlcgxgAACFgXINYAAAfXIOYAAAKGo3WAAAWEAAAABhcGFjaGVcX2JlYW1cLnRlc3RpbmdcLmJlbmNobWFya3NcLm5leG1hcmtcLm5leG1hcmtcX3V0aWwgbW9kdWxlcg9gAABqOVgAAGoJYAAAdWJhajdYAABVAGo5WAAAagZgAABqOlgAAH1yEGAAAChqNFoAAF1qNVoAAF1qNloAAF1qN1oAAF1qOFoAAF1VCmFuY2hvcm5hbWVVAFUGcmVmdXJpWDMAAABhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5uZXhtYXJrX3V0aWxyEWAAAFUIaW50ZXJuYWyIdXViYWo3WAAAVQBqOVgAAGoDYAAAajpYAAB9chJgAAAoajVaAABdajZaAABdajdaAABdajhaAABdajRaAABddXViYWo3WAAAVQBqOVgAAGoAYAAAajpYAAB9chNgAAAoajVaAABdajZaAABdajdaAABdajhaAABdajRaAABddXViYWo3WAAAVQBqOlgAAH1yFGAAAChqNVoAAF1qNloAAF1qN1oAAF1qOFoAAF1qNFoAAF11dWJo2GodWAAAKYFyFWAAAH1yFmAAAChqIFgAAGrNWAAAaiJYAABdchdgAABqJFgAACmBchhgAAB9chlgAAAoaiBYAABq0VgAAGoiWAAAXXIaYAAAailYAAApgXIbYAAAfXIcYAAAKGogWAAAatVYAABqIlgAAF1yHWAAAGouWAAAKYFyHmAAAH1yH2AAAChqIFgAAGrZWAAAaiJYAABdciBgAABqM1gAAFgnAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW0gbW9kdWxlciFgAACFgXIiYAAAfXIjYAAAKGo3WAAAWCsAAABhcGFjaGVcX2JlYW1cLmlvXC5nY3BcLmdjc2ZpbGVzeXN0ZW0gbW9kdWxlciRgAABqOVgAAGoeYAAAdWJhajdYAABVAGo5WAAAahtgAABqOlgAAH1yJWAAAChq4FgAAF1q4VgAAF1q4lgAAF1q41gAAF1q5FgAAF1VCmFuY2hvcm5hbWVVAFUGcmVmdXJpWCAAAABhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbXImYAAAVQhpbnRlcm5hbIh1dWJhajdYAABVAGo5WAAAahhgAABqOlgAAH1yJ2AAAChq4VgAAF1q4lgAAF1q41gAAF1q5FgAAF1q4FgAAF11dWJhajdYAABVAGo5WAAAahVgAABqOlgAAH1yKGAAAChq4VgAAF1q4lgAAF1q41gAAF1q5FgAAF1q4FgAAF11dWJhajdYAABVAGo6WAAAfXIpYAAAKGrhWAAAXWriWAAAXWrjWAAAXWrkWAAAXWrgWAAAXXV1Ymj7ah1YAAApgXIqYAAAfXIrYAAAKGogWAAAanBZAABqIlgAAF1yLGAAAGokWAAAKYFyLWAAAH1yLmAAAChqIFgAAGp0WQAAaiJYAABdci9gAAAoailYAAApgXIwYAAAfXIxYAAAKGogWAAAanhZAABqIlgAAF1yMmAAAGouWAAAKYFyM2AAAH1yNGAAAChqIFgAAGp8WQAAaiJYAABdcjVgAABqM1gAAFgcAAAAYXBhY2hlX2JlYW0uaW50ZXJuYWwgcGFja2FnZXI2YAAAhYFyN2AAAH1yOGAAAChqN1gAAFgeAAAAYXBhY2hlXF9iZWFtXC5pbnRlcm5hbCBwYWNrYWdlcjlgAABqOVgAAGozYAAAdWJhajdYAABVAGo5WAAAajBgAABqOlgAAH1yOmAAAChqg1kAAF1qhFkAAF1qhVkAAF1qhlkAAF1qh1kAAF1VCmFuY2hvcm5hbWVVAFUGcmVmdXJpah1UAABVCGludGVybmFsiHV1YmFqN1gAAFUAajlYAABqLWAAAGo6WAAAfXI7YAAAKGqEWQAAXWqFWQAAXWqGWQAAXWqHWQAAXWqDWQAAXXV1YmodWAAAKYFyPGAAAH1yPWAAAChqIFgAAGpwWQAAaiJYAABdcj5gAAAoaiRYAAApgXI/YAAAfXJAYAAAKGogWAAAanRZAABqIlgAAF1yQWAAAChqKVgAACmBckJgAAB9ckNgAAAoaiBYAABqeFkAAGoiWAAAXXJEYAAAai5YAAApgXJFYAAAfXJGYAAAKGogWAAAanxZAABqIlgAAF1yR2AAAGozWAAAWAsAAABTdWJwYWNrYWdlc3JIYAAAhYFySWAAAH1ySmAAAChqN1gAAFgLAAAAU3VicGFja2FnZXNqOVgAAGpFYAAAdWJhajdYAABVAGo5WAAAakJgAABqOlgAAH1yS2AAAChqg1kAAF1qhFkAAF1qhVkAAF1qhlkAAF1qh1kAAF1VCmFuY2hvcm5hbWVVDCNzdWJwYWNrYWdlc1UGcmVmdXJpah1UAABVCGludGVybmFsiHV1YmFqN1gAAFUAajlYAABqP2AAAGo6WAAAfXJMYAAAKGqEWQAAXWqFWQAAXWqGWQAAXWqHWQAAXWqDWQAAXXV1YmodWAAAKYFyTWAAAH1yTmAAAChqIFgAAGpwWQAAaiJYAABdck9gAABqp1gAACmBclBgAAB9clFgAAAoajpYAAB9clJgAAAoVQdlbnRyaWVzXXJTYAAATmqOUwAAhnJUYAAAYVUIbnVtYmVyZWRLAFUHY2FwdGlvbk5qg1kAAF1qhFkAAF1VDWluY2x1ZGVoaWRkZW6JaoZZAABdVQxpbmNsdWRlZmlsZXNdclVgAABqjlMAAGFVBmhpZGRlbolVCG1heGRlcHRoSv////9VBGdsb2KJaodZAABdVQZwYXJlbnRqHVQAAGqFWQAAXVUKdGl0bGVzb25seYl1aiBYAABqi1wAAGoiWAAAXWo3WAAAVQBqr1gAAEsMarBYAABYdQAAAC91c3IvbG9jYWwvZ29vZ2xlL2hvbWUva2xrL3dlYnNpdGVfdXBkYXRlX2Rpci9weXRob25fZG9jL2JlYW0vc2Rrcy9weXRob24vdGFyZ2V0L2RvY3Mvc291cmNlL2FwYWNoZV9iZWFtLmludGVybmFsLnJzdHJWYAAAajlYAABqTWAAAHViYWo3WAAAVQBqOVgAAGo/YAAAajpYAAB9cldgAAAoaoRZAABdaoVZAABdaoZZAABdaodZAABdaoNZAABddXViZWo3WAAAVQBqOVgAAGo8YAAAajpYAAB9clhgAAAoaoRZAABdaoVZAABdaoZZAABdaodZAABdaoNZAABddXViaiRYAAApgXJZYAAAfXJaYAAAKGogWAAAanRZAABqIlgAAF1yW2AAAChqKVgAACmBclxgAAB9cl1gAAAoaiBYAABqeFkAAGoiWAAAXXJeYAAAai5YAAApgXJfYAAAfXJgYAAAKGogWAAAanxZAABqIlgAAF1yYWAAAGozWAAAWAoAAABTdWJtb2R1bGVzcmJgAACFgXJjYAAAfXJkYAAAKGo3WAAAWAoAAABTdWJtb2R1bGVzajlYAABqX2AAAHViYWo3WAAAVQBqOVgAAGpcYAAAajpYAAB9cmVgAAAoaoNZAABdaoRZAABdaoVZAABdaoZZAABdaodZAABdVQphbmNob3JuYW1lVQsjc3VibW9kdWxlc1UGcmVmdXJpah1UAABVCGludGVybmFsiHV1YmFqN1gAAFUAajlYAABqWWAAAGo6WAAAfXJmYAAAKGqEWQAAXWqFWQAAXWqGWQAAXWqHWQAAXWqDWQAAXXV1YmodWAAAKYFyZ2AAAH1yaGAAAChqIFgAAGpwWQAAaiJYAABdcmlgAABqp1gAACmBcmpgAAB9cmtgAAAoajpYAAB9cmxgAAAoVQdlbnRyaWVzXXJtYAAAKE5qj1MAAIZybmAAAE5qkFMAAIZyb2AAAE5qkVMAAIZycGAAAGVVCG51bWJlcmVkSwBVB2NhcHRpb25OaoNZAABdaoRZAABdVQ1pbmNsdWRlaGlkZGVuiWqGWQAAXVUMaW5jbHVkZWZpbGVzXXJxYAAAKGqPUwAAapBTAABqkVMAAGVVBmhpZGRlbolVCG1heGRlcHRoSv////9VBGdsb2KJaodZAABdVQZwYXJlbnRqHVQAAGqFWQAAXVUKdGl0bGVzb25seYl1aiBYAABqi1wAAGoiWAAAXWo3WAAAVQBqr1gAAEsTarBYAABqVmAAAGo5WAAAamdgAAB1YmFqN1gAAFUAajlYAABqWWAAAGo6WAAAfXJyYAAAKGqEWQAAXWqFWQAAXWqGWQAAXWqHWQAAXWqDWQAAXXV1YmVqN1gAAFUAajlYAABqPGAAAGo6WAAAfXJzYAAAKGqEWQAAXWqFWQAAXWqGWQAAXWqHWQAAXWqDWQAAXXV1YmVqN1gAAFUAajlYAABqLWAAAGo6WAAAfXJ0YAAAKGqEWQAAXWqFWQAAXWqGWQAAXWqHWQAAXWqDWQAAXXV1YmVqN1gAAFUAajlYAABqKmAAAGo6WAAAfXJ1YAAAKGqEWQAAXWqFWQAAXWqGWQAAXWqHWQAAXWqDWQAAXXV1YmFqN1gAAFUAajpYAAB9cnZgAAAoaoRZAABdaoVZAABdaoZZAABdaodZAABdaoNZAABddXViaisBAABqHVgAACmBcndgAAB9cnhgAAAoaiBYAABqZVgAAGoiWAAAXXJ5YAAAaiRYAAApgXJ6YAAAfXJ7YAAAKGogWAAAamlYAABqIlgAAF1yfGAAAGopWAAAKYFyfWAAAH1yfmAAAChqIFgAAGptWAAAaiJYAABdcn9gAABqLlgAACmBcoBgAAB9coFgAAAoaiBYAABqcVgAAGoiWAAAXXKCYAAAajNYAABYJwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlIG1vZHVsZXKDYAAAhYFyhGAAAH1yhWAAAChqN1gAAFgqAAAAYXBhY2hlXF9iZWFtXC50cmFuc2Zvcm1zXC51c2Vyc3RhdGUgbW9kdWxlcoZgAABqOVgAAGqAYAAAdWJhajdYAABVAGo5WAAAan1gAABqOlgAAH1yh2AAAChqeFgAAF1qeVgAAF1qelgAAF1qe1gAAF1qfFgAAF1VCmFuY2hvcm5hbWVVAFUGcmVmdXJpWCAAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZXKIYAAAVQhpbnRlcm5hbIh1dWJhajdYAABVAGo5WAAAanpgAABqOlgAAH1yiWAAAChqeVgAAF1qelgAAF1qe1gAAF1qfFgAAF1qeFgAAF11dWJhajdYAABVAGo5WAAAandgAABqOlgAAH1yimAAAChqeVgAAF1qelgAAF1qe1gAAF1qfFgAAF1qeFgAAF11dWJhajdYAABVAGo6WAAAfXKLYAAAKGp5WAAAXWp6WAAAXWp7WAAAXWp8WAAAXWp4WAAAXXV1YmpOAQAAah1YAAApgXKMYAAAfXKNYAAAKGogWAAAaglZAABqIlgAAF1yjmAAAGokWAAAKYFyj2AAAH1ykGAAAChqIFgAAGoNWQAAaiJYAABdcpFgAAAoailYAAApgXKSYAAAfXKTYAAAKGogWAAAahFZAABqIlgAAF1ylGAAAGouWAAAKYFylWAAAH1ylmAAAChqIFgAAGoVWQAAaiJYAABdcpdgAABqM1gAAFgbAAAAYXBhY2hlX2JlYW0ucnVubmVycyBwYWNrYWdlcphgAACFgXKZYAAAfXKaYAAAKGo3WAAAWB0AAABhcGFjaGVcX2JlYW1cLnJ1bm5lcnMgcGFja2FnZXKbYAAAajlYAABqlWAAAHViYWo3WAAAVQBqOVgAAGqSYAAAajpYAAB9cpxgAAAoahxZAABdah1ZAABdah5ZAABdah9ZAABdaiBZAABdVQphbmNob3JuYW1lVQBVBnJlZnVyaWo/VAAAVQhpbnRlcm5hbIh1dWJhajdYAABVAGo5WAAAao9gAABqOlgAAH1ynWAAAChqHVkAAF1qHlkAAF1qH1kAAF1qIFkAAF1qHFkAAF11dWJqHVgAACmBcp5gAAB9cp9gAAAoaiBYAABqCVkAAGoiWAAAXXKgYAAAKGokWAAAKYFyoWAAAH1yomAAAChqIFgAAGoNWQAAaiJYAABdcqNgAAAoailYAAApgXKkYAAAfXKlYAAAKGogWAAAahFZAABqIlgAAF1ypmAAAGouWAAAKYFyp2AAAH1yqGAAAChqIFgAAGoVWQAAaiJYAABdcqlgAABqM1gAAFgLAAAAU3VicGFja2FnZXNyqmAAAIWBcqtgAAB9cqxgAAAoajdYAABYCwAAAFN1YnBhY2thZ2VzajlYAABqp2AAAHViYWo3WAAAVQBqOVgAAGqkYAAAajpYAAB9cq1gAAAoahxZAABdah1ZAABdah5ZAABdah9ZAABdaiBZAABdVQphbmNob3JuYW1lVQwjc3VicGFja2FnZXNVBnJlZnVyaWo/VAAAVQhpbnRlcm5hbIh1dWJhajdYAABVAGo5WAAAaqFgAABqOlgAAH1yrmAAAChqHVkAAF1qHlkAAF1qH1kAAF1qIFkAAF1qHFkAAF11dWJqHVgAACmBcq9gAAB9crBgAAAoaiBYAABqCVkAAGoiWAAAXXKxYAAAaqdYAAApgXKyYAAAfXKzYAAAKGo6WAAAfXK0YAAAKFUHZW50cmllc11ytWAAAChOaqlTAACGcrZgAABOaqpTAACGcrdgAABOaqtTAACGcrhgAABOaqxTAACGcrlgAABOaq1TAACGcrpgAABlVQhudW1iZXJlZEsAVQdjYXB0aW9uTmocWQAAXWodWQAAXVUNaW5jbHVkZWhpZGRlbolqH1kAAF1VDGluY2x1ZGVmaWxlc11yu2AAAChqqVMAAGqqUwAAaqtTAABqrFMAAGqtUwAAZVUGaGlkZGVuiVUIbWF4ZGVwdGhK/////1UEZ2xvYolqIFkAAF1VBnBhcmVudGo/VAAAah5ZAABdVQp0aXRsZXNvbmx5iXVqIFgAAGrtXgAAaiJYAABdajdYAABVAGqvWAAASwxqsFgAAFh0AAAAL3Vzci9sb2NhbC9nb29nbGUvaG9tZS9rbGsvd2Vic2l0ZV91cGRhdGVfZGlyL3B5dGhvbl9kb2MvYmVhbS9zZGtzL3B5dGhvbi90YXJnZXQvZG9jcy9zb3VyY2UvYXBhY2hlX2JlYW0ucnVubmVycy5yc3RyvGAAAGo5WAAAaq9gAAB1YmFqN1gAAFUAajlYAABqoWAAAGo6WAAAfXK9YAAAKGodWQAAXWoeWQAAXWofWQAAXWogWQAAXWocWQAAXXV1YmVqN1gAAFUAajlYAABqnmAAAGo6WAAAfXK+YAAAKGodWQAAXWoeWQAAXWofWQAAXWogWQAAXWocWQAAXXV1YmokWAAAKYFyv2AAAH1ywGAAAChqIFgAAGoNWQAAaiJYAABdcsFgAAAoailYAAApgXLCYAAAfXLDYAAAKGogWAAAahFZAABqIlgAAF1yxGAAAGouWAAAKYFyxWAAAH1yxmAAAChqIFgAAGoVWQAAaiJYAABdcsdgAABqM1gAAFgKAAAAU3VibW9kdWxlc3LIYAAAhYFyyWAAAH1yymAAAChqN1gAAFgKAAAAU3VibW9kdWxlc2o5WAAAasVgAAB1YmFqN1gAAFUAajlYAABqwmAAAGo6WAAAfXLLYAAAKGocWQAAXWodWQAAXWoeWQAAXWofWQAAXWogWQAAXVUKYW5jaG9ybmFtZVULI3N1Ym1vZHVsZXNVBnJlZnVyaWo/VAAAVQhpbnRlcm5hbIh1dWJhajdYAABVAGo5WAAAar9gAABqOlgAAH1yzGAAAChqHVkAAF1qHlkAAF1qH1kAAF1qIFkAAF1qHFkAAF11dWJqHVgAACmBcs1gAAB9cs5gAAAoaiBYAABqCVkAAGoiWAAAXXLPYAAAaqdYAAApgXLQYAAAfXLRYAAAKGo6WAAAfXLSYAAAKFUHZW50cmllc11y02AAAChOaq5TAACGctRgAABOaq9TAACGctVgAABOarBTAACGctZgAABlVQhudW1iZXJlZEsAVQdjYXB0aW9uTmocWQAAXWodWQAAXVUNaW5jbHVkZWhpZGRlbolqH1kAAF1VDGluY2x1ZGVmaWxlc11y12AAAChqrlMAAGqvUwAAarBTAABlVQZoaWRkZW6JVQhtYXhkZXB0aEr/////VQRnbG9iiWogWQAAXVUGcGFyZW50aj9UAABqHlkAAF1VCnRpdGxlc29ubHmJdWogWAAAau1eAABqIlgAAF1qN1gAAFUAaq9YAABLF2qwWAAAarxgAABqOVgAAGrNYAAAdWJhajdYAABVAGo5WAAAar9gAABqOlgAAH1y2GAAAChqHVkAAF1qHlkAAF1qH1kAAF1qIFkAAF1qHFkAAF11dWJlajdYAABVAGo5WAAAap5gAABqOlgAAH1y2WAAAChqHVkAAF1qHlkAAF1qH1kAAF1qIFkAAF1qHFkAAF11dWJlajdYAABVAGo5WAAAao9gAABqOlgAAH1y2mAAAChqHVkAAF1qHlkAAF1qH1kAAF1qIFkAAF1qHFkAAF11dWJlajdYAABVAGo5WAAAaoxgAABqOlgAAH1y22AAAChqHVkAAF1qHlkAAF1qH1kAAF1qIFkAAF1qHFkAAF11dWJhajdYAABVAGo6WAAAfXLcYAAAKGodWQAAXWoeWQAAXWofWQAAXWogWQAAXWocWQAAXXV1Ymj9ah1YAAApgXLdYAAAfXLeYAAAKGogWAAAaiFYAABqIlgAAF1y32AAAGokWAAAKYFy4GAAAH1y4WAAAChqIFgAAGonWAAAaiJYAABdcuJgAABqKVgAACmBcuNgAAB9cuRgAAAoaiBYAABqLFgAAGoiWAAAXXLlYAAAai5YAAApgXLmYAAAfXLnYAAAKGogWAAAajFYAABqIlgAAF1y6GAAAGozWAAAWDUAAABhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yIG1vZHVsZXLpYAAAhYFy6mAAAH1y62AAAChqN1gAAFg6AAAAYXBhY2hlXF9iZWFtXC5vcHRpb25zXC5waXBlbGluZVxfb3B0aW9uc1xfdmFsaWRhdG9yIG1vZHVsZXLsYAAAajlYAABq5mAAAHViYWo3WAAAVQBqOVgAAGrjYAAAajpYAAB9cu1gAAAoajxYAABdaj1YAABdaj5YAABdaj9YAABdakBYAABdVQphbmNob3JuYW1lVQBVBnJlZnVyaVguAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvcnLuYAAAVQhpbnRlcm5hbIh1dWJhajdYAABVAGo5WAAAauBgAABqOlgAAH1y72AAAChqPVgAAF1qPlgAAF1qP1gAAF1qQFgAAF1qPFgAAF11dWJhajdYAABVAGo5WAAAat1gAABqOlgAAH1y8GAAAChqPVgAAF1qPlgAAF1qP1gAAF1qQFgAAF1qPFgAAF11dWJhajdYAABVAGo6WAAAfXLxYAAAKGo9WAAAXWo+WAAAXWo/WAAAXWpAWAAAXWo8WAAAXXV1Ymj+ah1YAAApgXLyYAAAfXLzYAAAKGogWAAAalxaAABqIlgAAF1y9GAAAGokWAAAKYFy9WAAAH1y9mAAAChqIFgAAGpgWgAAaiJYAABdcvdgAABqKVgAACmBcvhgAAB9cvlgAAAoaiBYAABqZFoAAGoiWAAAXXL6YAAAai5YAAApgXL7YAAAfXL8YAAAKGogWAAAamhaAABqIlgAAF1y/WAAAGozWAAAWCEAAABhcGFjaGVfYmVhbS51dGlscy5wcm9maWxlciBtb2R1bGVy/mAAAIWBcv9gAAB9cgBhAAAoajdYAABYJAAAAGFwYWNoZVxfYmVhbVwudXRpbHNcLnByb2ZpbGVyIG1vZHVsZXIBYQAAajlYAABq+2AAAHViYWo3WAAAVQBqOVgAAGr4YAAAajpYAAB9cgJhAAAoam9aAABdanBaAABdanFaAABdanJaAABdanNaAABdVQphbmNob3JuYW1lVQBVBnJlZnVyaVgaAAAAYXBhY2hlX2JlYW0udXRpbHMucHJvZmlsZXJyA2EAAFUIaW50ZXJuYWyIdXViYWo3WAAAVQBqOVgAAGr1YAAAajpYAAB9cgRhAAAoanBaAABdanFaAABdanJaAABdanNaAABdam9aAABddXViYWo3WAAAVQBqOVgAAGryYAAAajpYAAB9cgVhAAAoanBaAABdanFaAABdanJaAABdanNaAABdam9aAABddXViYWo3WAAAVQBqOlgAAH1yBmEAAChqcFoAAF1qcVoAAF1qcloAAF1qc1oAAF1qb1oAAF11dWJo/2odWAAAKYFyB2EAAH1yCGEAAChqIFgAAGpcWgAAaiJYAABdcglhAABqJFgAACmBcgphAAB9cgthAAAoaiBYAABqYFoAAGoiWAAAXXIMYQAAailYAAApgXINYQAAfXIOYQAAKGogWAAAamRaAABqIlgAAF1yD2EAAGouWAAAKYFyEGEAAH1yEWEAAChqIFgAAGpoWgAAaiJYAABdchJhAABqM1gAAFgiAAAAYXBhY2hlX2JlYW0udXRpbHMucHJvY2Vzc2VzIG1vZHVsZXITYQAAhYFyFGEAAH1yFWEAAChqN1gAAFglAAAAYXBhY2hlXF9iZWFtXC51dGlsc1wucHJvY2Vzc2VzIG1vZHVsZXIWYQAAajlYAABqEGEAAHViYWo3WAAAVQBqOVgAAGoNYQAAajpYAAB9chdhAAAoam9aAABdanBaAABdanFaAABdanJaAABdanNaAABdVQphbmNob3JuYW1lVQBVBnJl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AABdajZaAABdajdaAABdajhaAABdajRaAABddXViZWo3WAAAVQBqOVgAAGqxYgAAajpYAAB9cs5iAAAoajVaAABdajZaAABdajdaAABdajhaAABdajRaAABddXViaiRYAAApgXLPYgAAfXLQYgAAKGogWAAAaiVaAABqIlgAAF1y0WIAAChqKVgAACmBctJiAAB9ctNiAAAoaiBYAABqKVoAAGoiWAAAXXLUYgAAai5YAAApgXLVYgAAfXLWYgAAKGogWAAAai1aAABqIlgAAF1y12IAAGozWAAAWAoAAABTdWJtb2R1bGVzcthiAACFgXLZYgAAfXLaYgAAKGo3WAAAWAoAAABTdWJtb2R1bGVzajlYAABq1WIAAHViYWo3WAAAVQBqOVgAAGrSYgAAajpYAAB9cttiAAAoajRaAABdajVaAABdajZaAABdajdaAABdajhaAABdVQphbmNob3JuYW1lVQsjc3VibW9kdWxlc1UGcmVmdXJpaitUAABVCGludGVybmFsiHV1YmFqN1gAAFUAajlYAABqz2IAAGo6WAAAfXLcYgAAKGo1WgAAXWo2WgAAXWo3WgAAXWo4WgAAXWo0WgAAXXV1YmodWAAAKYFy3WIAAH1y3mIAAChqIFgAAGohWgAAaiJYAABdct9iAABqp1gAACmBcuBiAAB9cuFiAAAoajpYAAB9cuJiAAAoVQdlbnRyaWVzXXLjYgAAKE5q4VMAAIZy5GIAAE5q4lMAAIZy5WIAAGVVCG51bWJlcmVkSwBVB2NhcHRpb25OajRaAABdajVaAABdVQ1pbmNsdWRlaGlkZGVuiWo3WgAAXVUMaW5jbHVkZWZpbGVzXXLmYgAAKGrhUwAAauJTAABlVQZoaWRkZW6JVQhtYXhkZXB0aEr/////VQRnbG9iiWo4WgAAXVUGcGFyZW50aitUAABqNloAAF1VCnRpdGxlc29ubHmJdWogWAAAalRaAABqIlgAAF1qN1gAAFUAaq9YAABLFGqwWAAAasxiAABqOVgAAGrdYgAAdWJhajdYAABVAGo5WAAAas9iAABqOlgAAH1y52IAAChqNVoAAF1qNloAAF1qN1oAAF1qOFoAAF1qNFoAAF11dWJlajdYAABVAGo5WAAAarFiAABqOlgAAH1y6GIAAChqNVoAAF1qNloAAF1qN1oAAF1qOFoAAF1q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ACmBcmtnAAB9cmxnAAAoaiBYAABqcFkAAGoiWAAAXXJtZwAAaqdYAAApgXJuZwAAfXJvZwAAKGo6WAAAfXJwZwAAKFUHZW50cmllc11ycWcAAChOajZTAACGcnJnAABOajdTAACGcnNnAABOajhTAACGcnRnAABOajlTAACGcnVnAABOajpTAACGcnZnAABOajtTAACGcndnAABOajxTAACGcnhnAABOaj1TAACGcnlnAABOaj5TAACGcnpnAABOaj9TAACGcntnAABOakBTAACGcnxnAABOakFTAACGcn1nAABOakJTAACGcn5nAABOakNTAACGcn9nAABOakRTAACGcoBnAABOakVTAACGcoFnAABOakZTAACGcoJnAABOakdTAACGcoNnAABlVQhudW1iZXJlZEsAVQdjYXB0aW9uTmqDWQAAXWqEWQAAXVUNaW5jbHVkZWhpZGRlbolqhlkAAF1VDGluY2x1ZGVmaWxlc11yhGcAAChqNlMAAGo3UwAAajhTAABqOVMAAGo6UwAAajtTAABqPFMAAGo9UwAAaj5TAABqP1MAAGpAUwAAakFTAABqQlMAAGpDUwAAakRTAABqRVMAAGpGUwAAakdTAABlVQZoaWRkZW6JVQhtYXhkZXB0aEr/////VQRnbG9iiWqHWQAAXVUGcGFyZW50agNUAABqhVkAAF1VCnRpdGxlc29ubHmJdWogWAAAaotcAABqIlgAAF1qN1gAAFUAaq9YAABLFGqwWAAAalpnAABqOVgAAGprZwAAdWJhajdYAABVAGo5WAAAal1nAABqOlgAAH1yhWcAAChqhFkAAF1qhVkAAF1qhlkAAF1qh1kAAF1qg1kAAF11dWJlajdYAABVAGo5WAAAaj9nAABqOlgAAH1yhmcAAChqhFkAAF1qhVkAAF1qhlkAAF1qh1kAAF1qg1kAAF11dWJlajdYAABVAGo5WAAAajBnAABqOlgAAH1yh2cAAChqhFkAAF1qhVkAAF1qhlkAAF1qh1kAAF1qg1kAAF11dWJlajdYAABVAGo5WAAAai1nAABqOlgAAH1yiGcAAChqhFkAAF1qhVkAAF1qhlkAAF1qh1kAAF1qg1kAAF11dWJhajdYAABVAGo6WAAAfXKJZwAAKGqEWQAAXWqFWQAAXWqGWQAAXWqHWQAAXWqDWQAAXXV1Ymo5AQAAah1YAAApgXKKZwAAfXKLZwAAKGogWAAAauxbAABqIlgAAF1yjGcAAGokWAAAKYFyjWcAAH1yjmcAAChqIFgAAGrwWwAAaiJYAABdco9nAABqKVgAACmBcpBnAAB9cpFnAAAoaiBYAABq9FsAAGoiWAAAXXKSZwAAai5YAAApgXKTZwAAfXKUZwAAKGogWAAAavhbAABqIlgAAF1ylWcAAGozWAAAWCUAAABhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpY2Jhc2UgbW9kdWxlcpZnAACFgXKXZwAAfXKYZwAAKGo3WAAAWCgAAABhcGFjaGVcX2JlYW1cLm1ldHJpY3NcLm1ldHJpY2Jhc2UgbW9kdWxlcplnAABqOVgAAGqTZwAAdWJhajdYAABVAGo5WAAAapBnAABqOlgAAH1ymmcAAChq/1sAAF1qAFwAAF1qAVwAAF1qAlwAAF1qA1wAAF1VCmFuY2hvcm5hbWVVAFUGcmVmdXJpWB4AAABhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpY2Jhc2Vym2cAAFUIaW50ZXJuYWyIdXViYWo3WAAAVQBqOVgAAGqNZwAAajpYAAB9cpxnAAAoagBcAABdagFcAABdagJcAABdagNcAABdav9bAABddXViYWo3WAAAVQBqOVgAAGqKZwAAajpYAAB9cp1nAAAoagBcAABdagFcAABdagJcAABdagNcAABdav9bAABddXViYWo3WAAAVQBqOlgAAH1ynmcAAChqAFwAAF1qAVwAAF1qAlwAAF1qA1wAAF1q/1sAAF11dWJqOgEAAGodWAAAKYFyn2cAAH1yoGcAAChqIFgAAGrrWAAAaiJYAABdcqFnAABqJFgAACmBcqJnAAB9cqNnAAAoaiBYAABq71gAAGoiWAAAXXKkZwAAailYAAApgXKlZwAAfXKmZwAAKGogWAAAavNYAABqIlgAAF1yp2cAAGouWAAAKYFyqGcAAH1yqWcAAChqIFgAAGr3WAAAaiJYAABdcqpnAABqM1gAAFgrAAAAYXBhY2hlX2JlYW0ucnVubmVycy5waXBlbGluZV9jb250ZXh0IG1vZHVsZXKrZwAAhYFyrGcAAH1yrWcAAChqN1gAAFgvAAAAYXBhY2hlXF9iZWFtXC5ydW5uZXJzXC5waXBlbGluZVxfY29udGV4dCBtb2R1bGVyrmcAAGo5WAAAaqhnAAB1YmFqN1gAAFUAajlYAABqpWcAAGo6WAAAfXKvZwAAKGr+WAAAXWr/WAAAXWoAWQAAXWoBWQAAXWoCWQAAXVUKYW5jaG9ybmFtZVUAVQZyZWZ1cmlYJAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMucGlwZWxpbmVfY29udGV4dHKwZwAAVQhpbnRlcm5hbIh1dWJhajdYAABVAGo5WAAAaqJnAABqOlgAAH1ysWcAAChq/1gAAF1qAFkAAF1qAVkAAF1qAlkAAF1q/lgAAF11dWJhajdYAABVAGo5WAAAap9nAABqOlgAAH1ysmcAAChq/1gAAF1qAFkAAF1qAVkAAF1qAlkAAF1q/lgAAF11dWJhajdYAABVAGo6WAAAfXKzZwAAKGr/WAAAXWoAWQAAXWoBWQAAXWoCWQAAXWr+WAAAXXV1Ymo7AQAAah1YAAApgXK0ZwAAfXK1ZwAAKGogWAAAarlaAABqIlgAAF1ytmcAAGokWAAAKYFyt2cAAH1yuGcAAChqIFgAAGq9WgAAaiJYAABdcrlnAABqKVgAACmBcrpnAAB9crtnAAAoaiBYAABqwVoAAGoiWAAAXXK8ZwAAai5YAAApgXK9ZwAAfXK+ZwAAKGogWAAAasVaAABqIlgAAF1yv2cAAGozWAAAWCgAAABhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3RfcGlwZWxpbmUgbW9kdWxlcsBnAACFgXLBZwAAfXLCZwAAKGo3WAAAWCwAAABhcGFjaGVcX2JlYW1cLnRlc3RpbmdcLnRlc3RcX3BpcGVsaW5lIG1vZHVsZXLDZwAAajlYAABqvWcAAHViYWo3WAAAVQBqOVgAAGq6ZwAAajpYAAB9csRnAAAoasxaAABdas1aAABdas5aAABdas9aAABdatBaAABdVQphbmNob3JuYW1lVQBVBnJlZnVyaVghAAAAYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3BpcGVsaW5lcsVnAABVCGludGVybmFsiHV1YmFqN1gAAFUAajlYAABqt2cAAGo6WAAAfXLGZwAAKGrNWgAAXWrOWgAAXWrPWgAAXWrQWgAAXWrMWgAAXXV1YmFqN1gAAFUAajlYAABqtGcAAGo6WAAAfXLHZwAAKGrNWgAAXWrOWgAAXWrPWgAAXWrQWgAAXWrMWgAAXXV1YmFqN1gAAFUAajpYAAB9cshnAAAoas1aAABdas5aAABdas9aAABdatBaAABdasxaAABddXViajwBAABqHVgAACmBcslnAAB9cspnAAAoaiBYAABqR1gAAGoiWAAAXXLLZwAAaiRYAAApgXLMZwAAfXLNZwAAKGogWAAAaktYAABqIlgAAF1yzmcAAGopWAAAKYFyz2cAAH1y0GcAAChqIFgAAGpPWAAAaiJYAABdctFnAABqLlgAACmBctJnAAB9ctNnAAAoaiBYAABqU1gAAGoiWAAAXXLUZwAAajNYAABYIgAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pbyBtb2R1bGVy1WcAAIWBctZnAAB9ctdnAAAoajdYAABYJQAAAGFwYWNoZVxfYmVhbVwuaW9cLmZpbGVzeXN0ZW1pbyBtb2R1bGVy2GcAAGo5WAAAatJnAAB1YmFqN1gAAFUAajlYAABqz2cAAGo6WAAAfXLZZwAAKGpaWAAAXWpbWAAAXWpcWAAAXWpdWAAAXWpeWAAAXVUKYW5jaG9ybmFtZVUAVQZyZWZ1cmlYGwAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pb3LaZwAAVQhpbnRlcm5hbIh1dWJhajdYAABVAGo5WAAAasxnAABqOlgAAH1y22cAAChqW1gAAF1qXFgAAF1qXVgAAF1qXlgAAF1qWlgAAF11dWJhajdYAABVAGo5WAAAaslnAABqOlgAAH1y3GcAAChqW1gAAF1qXFgAAF1qXVgAAF1qXlgAAF1qWlgAAF11dWJhajdYAABVAGo6WAAAfXLdZwAAKGpbWAAAXWpcWAAAXWpdWAAAXWpeWAAAXWpaWAAAXXV1Ymo9AQAAah1YAAApgXLeZwAAfXLfZwAAKGogWAAAanBZAABqIlgAAF1y4GcAAGokWAAAKYFy4WcAAH1y4mcAAChqIFgAAGp0WQAAaiJYAABdcuNnAABqKVgAACmBcuRnAAB9cuVnAAAoaiBYAABqeFkAAGoiWAAAXXLmZwAAai5YAAApgXLnZwAAfXLoZwAAKGogWAAAanxZAABqIlgAAF1y6WcAAGozWAAAWCAAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzIG1vZHVsZXLqZwAAhYFy62cAAH1y7GcAAChqN1gAAFgjAAAAYXBhY2hlXF9iZWFtXC5jb2RlcnNcLmNvZGVycyBtb2R1bGVy7WcAAGo5WAAAaudnAAB1YmFqN1gAAFUAajlYAABq5GcAAGo6WAAAfXLuZwAAKGqDWQAAXWqEWQAAXWqFWQAAXWqGWQAAXWqHWQAAXVUKYW5jaG9ybmFtZVUAVQZyZWZ1cmlYGQAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnNy72cAAFUIaW50ZXJuYWyIdXViYWo3WAAAVQBqOVgAAGrhZwAAajpYAAB9cvBnAAAoaoRZAABdaoVZAABdaoZZAABdaodZAABdaoNZAABddXViYWo3WAAAVQBqOVgAAGreZwAAajpYAAB9cvFnAAAoaoRZAABdaoVZAABdaoZZAABdaodZAABdaoNZAABddXViYWo3WAAAVQBqOlgAAH1y8mcAAChqhFkAAF1qhVkAAF1qhlkAAF1qh1kAAF1qg1kAAF11dWJqPgEAAGodWAAAKYFy82cAAH1y9GcAAChqIFgAAGoJWQAAaiJYAABdcvVnAABqJFgAACmBcvZnAAB9cvdnAAAoaiBYAABqDVkAAGoiWAAAXXL4ZwAAailYAAApgXL5ZwAAfXL6ZwAAKGogWAAAahFZAABqIlgAAF1y+2cAAGouWAAAKYFy/GcAAH1y/WcAAChqIFgAAGoVWQAAaiJYAABdcv5nAABqM1gAAFgqAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkucHl0aG9uX3VybnMgbW9kdWxlcv9nAACFgXIAaAAAfXIBaAAAKGo3WAAAWC4AAABhcGFjaGVcX2JlYW1cLnBvcnRhYmlsaXR5XC5weXRob25cX3VybnMgbW9kdWxlcgJoAABqOVgAAGr8ZwAAdWJhajdYAABVAGo5WAAAavlnAABqOlgAAH1yA2gAAChqHFkAAF1qHVkAAF1qHlkAAF1qH1kAAF1qIFkAAF1VCmFuY2hvcm5hbWVVAFUGcmVmdXJpWCMAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5weXRob25fdXJuc3IEaAAAVQhpbnRlcm5hbIh1dWJhajdYAABVAGo5WAAAavZnAABqOlgAAH1yBWgAAChqHVkAAF1qHlkAAF1qH1kAAF1qIFkAAF1qHFkAAF11dWJhajdYAABVAGo5WAAAavNnAABqOlgAAH1yBmgAAChqHVkAAF1qHlkAAF1qH1kAAF1qIFkAAF1qHFkAAF11dWJhajdYAABVAGo6WAAAfXIHaAAAKGodWQAAXWoeWQAAXWofWQAAXWogWQAAXWocWQAAXXV1YmpQAQAAah1YAAApgXIIaAAAfXIJaAAAKGogWAAAautYAABqIlgAAF1yCmgAAGokWAAAKYFyC2gAAH1yDGgAAChqIFgAAGrvWAAAaiJYAABdcg1oAABqKVgAACmBcg5oAAB9cg9oAAAoaiBYAABq81gAAGoiWAAAXXIQaAAAai5YAAApgXIRaAAAfXISaAAAKGogWAAAavdYAABqIlgAAF1yE2gAAGozWAAAWDkAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX3J1bm5lciBtb2R1bGVyFGgAAIWBchVoAAB9chZoAAAoajdYAABYPgAAAGFwYWNoZVxfYmVhbVwucnVubmVyc1wuaW50ZXJhY3RpdmVcLmludGVyYWN0aXZlXF9ydW5uZXIgbW9kdWxlchdoAABqOVgAAGoRaAAAdWJhajdYAABVAGo5WAAAag5oAABqOlgAAH1yGGgAAChq/lgAAF1q/1gAAF1qAFkAAF1qAVkAAF1qAlkAAF1VCmFuY2hvcm5hbWVVAFUGcmVmdXJpWDIAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX3J1bm5lcnIZaAAAVQhpbnRlcm5hbIh1dWJhajdYAABVAGo5WAAAagtoAABqOlgAAH1yGmgAAChq/1gAAF1qAFkAAF1qAVkAAF1qAlkAAF1q/lgAAF11dWJhajdYAABVAGo5WAAAaghoAABqOlgAAH1yG2gAAChq/1gAAF1qAFkAAF1qAVkAAF1qAlkAAF1q/lgAAF11dWJhajdYAABVAGo6WAAAfXIcaAAAKGr/WAAAXWoAWQAAXWoBWQAAXWoCWQAAXWr+WAAAXXV1YmpAAQAAah1YAAApgXIdaAAAfXIeaAAAKGogWAAAanBZAABqIlgAAF1yH2gAAGokWAAAKYFyIGgAAH1yIWgAAChqIFgAAGp0WQAAaiJYAABdciJoAABqKVgAACmBciNoAAB9ciRoAAAoaiBYAABqeFkAAGoiWAAAXXIlaAAAai5YAAApgXImaAAAfXInaAAAKGogWAAAanxZAABqIlgAAF1yKGgAAGozWAAAWCQAAABhcGFjaGVfYmVhbS5pbnRlcm5hbC5nY3AuYXV0aCBtb2R1bGVyKWgAAIWBcipoAAB9citoAAAoajdYAABYKAAAAGFwYWNoZVxfYmVhbVwuaW50ZXJuYWxcLmdjcFwuYXV0aCBtb2R1bGVyLGgAAGo5WAAAaiZoAAB1YmFqN1gAAFUAajlYAABqI2gAAGo6WAAAfXItaAAAKGqDWQAAXWqEWQAAXWqFWQAAXWqGWQAAXWqHWQAAXVUKYW5jaG9ybmFtZVUAVQZyZWZ1cmlYHQAAAGFwYWNoZV9iZWFtLmludGVybmFsLmdjcC5hdXRoci5oAABVCGludGVybmFsiHV1YmFqN1gAAFUAajlYAABqIGgAAGo6WAAAfXIvaAAAKGqEWQAAXWqFWQAAXWqGWQAAXWqHWQAAXWqDWQAAXXV1YmFqN1gAAFUAajlYAABqHWgAAGo6WAAAfXIwaAAAKGqEWQAAXWqFWQAAXWqGWQAAXWqHWQAAXWqDWQAAXXV1YmFqN1gAAFUAajpYAAB9cjFoAAAoaoRZAABdaoVZAABdaoZZAABdaodZAABdaoNZAABddXViakEBAABqHVgAACmBcjJoAAB9cjNoAAAoaiBYAABqzVgAAGoiWAAAXXI0aAAAaiRYAAApgXI1aAAAfXI2aAAAKGogWAAAatFYAABqIlgAAF1yN2gAAChqKVgAACmBcjhoAAB9cjloAAAoaiBYAABq1VgAAGoiWAAAXXI6aAAAai5YAAApgXI7aAAAfXI8aAAAKGogWAAAatlYAABqIlgAAF1yPWgAAGozWAAAWCcAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxIHBhY2thZ2VyPmgAAIWBcj9oAAB9ckBoAAAoajdYAABYLAAAAGFwYWNoZVxfYmVhbVwuaW9cLmdjcFwuZGF0YXN0b3JlXC52MSBwYWNrYWdlckFoAABqOVgAAGo7aAAAdWJhajdYAABVAGo5WAAAajhoAABqOlgAAH1yQmgAAChq4FgAAF1q4VgAAF1q4lgAAF1q41gAAF1q5FgAAF1VCmFuY2hvcm5hbWVVAFUGcmVmdXJpag5UAABVCGludGVybmFsiHV1YmFqN1gAAFUAajlYAABqNWgAAGo6WAAAfXJDaAAAKGrhWAAAXWriWAAAXWrjWAAAXWrkWAAAXWrgWAAAXXV1YmodWAAAKYFyRGgAAH1yRWgAAChqIFgAAGrNWAAAaiJYAABdckZoAABqJFgAACmBckdoAAB9ckhoAAAoaiBYAABq0VgAAGoiWAAAXXJJaAAAKGopWAAAKYFySmgAAH1yS2gAAChqIFgAAGrVWAAAaiJYAABdckxoAABqLlgAACmBck1oAAB9ck5oAAAoaiBYAABq2VgAAGoiWAAAXXJPaAAAajNYAABYCgAAAFN1Ym1vZHVsZXNyUGgAAIWBclFoAAB9clJoAAAoajdYAABYCgAAAFN1Ym1vZHVsZXNqOVgAAGpNaAAAdWJhajdYAABVAGo5WAAAakpoAABqOlgAAH1yU2gAAChq4FgAAF1q4VgAAF1q4lgAAF1q41gAAF1q5FgAAF1VCmFuY2hvcm5hbWVVCyNzdWJtb2R1bGVzVQZyZWZ1cmlqDlQAAFUIaW50ZXJuYWyIdXViYWo3WAAAVQBqOVgAAGpHaAAAajpYAAB9clRoAAAoauFYAABdauJYAABdauNYAABdauRYAABdauBYAABddXViah1YAAApgXJVaAAAfXJWaAAAKGogWAAAas1YAABqIlgAAF1yV2gAAGqnWAAAKYFyWGgAAH1yWWgAAChqOlgAAH1yWmgAAChVB2VudHJpZXNdcltoAAAoTmpyUwAAhnJcaAAATmpzUwAAhnJdaAAATmp0UwAAhnJeaAAATmp1UwAAhnJfaAAATmp2UwAAhnJgaAAATmp3UwAAhnJhaAAAZVUIbnVtYmVyZWRLAFUHY2FwdGlvbk5q4FgAAF1q4VgAAF1VDWluY2x1ZGVoaWRkZW6JauNYAABdVQxpbmNsdWRlZmlsZXNdcmJoAAAoanJTAABqc1MAAGp0UwAAanVTAABqdlMAAGp3UwAAZVUGaGlkZGVuiVUIbWF4ZGVwdGhK/////1UEZ2xvYolq5FgAAF1VBnBhcmVudGoOVAAAauJYAABdVQp0aXRsZXNvbmx5iXVqIFgAAFUHdG9jdHJlZWoiWAAAXWo3WAAAVQBqr1gAAEsMarBYAABYgAAAAC91c3IvbG9jYWwvZ29vZ2xlL2hvbWUva2xrL3dlYnNpdGVfdXBkYXRlX2Rpci9weXRob25fZG9jL2JlYW0vc2Rrcy9weXRob24vdGFyZ2V0L2RvY3Mvc291cmNlL2FwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEucnN0ajlYAABqVWgAAHViYWo3WAAAVQBqOVgAAGpHaAAAajpYAAB9cmNoAAAoauFYAABdauJYAABdauNYAABdauRYAABdauBYAABddXViZWo3WAAAVQBqOVgAAGpEaAAAajpYAAB9cmRoAAAoauFYAABdauJYAABdauNYAABdauRYAABdauBYAABddXViYWo3WAAAVQBqOVgAAGo1aAAAajpYAAB9cmVoAAAoauFYAABdauJYAABdauNYAABdauRYAABdauBYAABddXViZWo3WAAAVQBqOVgAAGoyaAAAajpYAAB9cmZoAAAoauFYAABdauJYAABdauNYAABdauRYAABdauBYAABddXViYWo3WAAAVQBqOlgAAH1yZ2gAAChq4VgAAF1q4lgAAF1q41gAAF1q5FgAAF1q4FgAAF11dWJqQwEAAGodWAAAKYFyaGgAAH1yaWgAAChqIFgAAGrrWAAAaiJYAABdcmpoAABqJFgAACmBcmtoAAB9cmxoAAAoaiBYAABq71gAAGoiWAAAXXJtaAAAKGopWAAAKYFybmgAAH1yb2gAAChqIFgAAGrzWAAAaiJYAABdcnBoAABqLlgAACmBcnFoAAB9cnJoAAAoaiBYAABq91gAAGoiWAAAXXJzaAAAajNYAABYJAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJuYWwgcGFja2FnZXJ0aAAAhYFydWgAAH1ydmgAAChqN1gAAFgnAAAAYXBhY2hlXF9iZWFtXC5ydW5uZXJzXC5pbnRlcm5hbCBwYWNrYWdlcndoAABqOVgAAGpxaAAAdWJhajdYAABVAGo5WAAAam5oAABqOlgAAH1yeGgAAChq/lgAAF1q/1gAAF1qAFkAAF1qAVkAAF1qAlkAAF1VCmFuY2hvcm5hbWVVAFUGcmVmdXJpamBVAABVCGludGVybmFsiHV1YmFqN1gAAFUAajlYAABqa2gAAGo6WAAAfXJ5aAAAKGr/WAAAXWoAWQAAXWoBWQAAXWoCWQAAXWr+WAAAXXV1YmodWAAAKYFyemgAAH1ye2gAAChqIFgAAGrrWAAAaiJYAABdcnxoAABqJFgAACmBcn1oAAB9cn5oAAAoaiBYAABq71gAAGoiWAAAXXJ/aAAAKGopWAAAKYFygGgAAH1ygWgAAChqIFgAAGrzWAAAaiJYAABdcoJoAABqLlgAACmBcoNoAAB9coRoAAAoaiBYAABq91gAAGoiWAAAXXKFaAAAajNYAABYCgAAAFN1Ym1vZHVsZXNyhmgAAIWBcodoAAB9cohoAAAoajdYAABYCgAAAFN1Ym1vZHVsZXNqOVgAAGqDaAAAdWJhajdYAABVAGo5WAAAaoBoAABqOlgAAH1yiWgAAChq/lgAAF1q/1gAAF1qAFkAAF1qAVkAAF1qAlkAAF1VCmFuY2hvcm5hbWVVCyNzdWJtb2R1bGVzVQZyZWZ1cmlqYFUAAFUIaW50ZXJuYWyIdXViYWo3WAAAVQBqOVgAAGp9aAAAajpYAAB9copoAAAoav9YAABdagBZAABdagFZAABdagJZAABdav5YAABddXViah1YAAApgXKLaAAAfXKMaAAAKGogWAAAautYAABqIlgAAF1yjWgAAGqnWAAAKYFyjmgAAH1yj2gAAChqOlgAAH1ykGgAAChVB2VudHJpZXNdcpFoAABOaohTAACGcpJoAABhVQhudW1iZXJlZEsAVQdjYXB0aW9uTmr+WAAAXWr/WAAAXVUNaW5jbHVkZWhpZGRlbolqAVkAAF1VDGluY2x1ZGVmaWxlc11yk2gAAGqIUwAAYVUGaGlkZGVuiVUIbWF4ZGVwdGhK/////1UEZ2xvYolqAlkAAF1VBnBhcmVudGpgVQAAagBZAABdVQp0aXRsZXNvbmx5iXVqIFgAAGovXQAAaiJYAABdajdYAABVAGqvWAAASwxqsFgAAFh9AAAAL3Vzci9sb2NhbC9nb29nbGUvaG9tZS9rbGsvd2Vic2l0ZV91cGRhdGVfZGlyL3B5dGhvbl9kb2MvYmVhbS9zZGtzL3B5dGhvbi90YXJnZXQvZG9jcy9zb3VyY2UvYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcm5hbC5yc3RqOVgAAGqLaAAAdWJhajdYAABVAGo5WAAAan1oAABqOlgAAH1ylGgAAChq/1gAAF1qAFkAAF1qAVkAAF1qAlkAAF1q/lgAAF11dWJlajdYAABVAGo5WAAAanpoAABqOlgAAH1ylWgAAChq/1gAAF1qAFkAAF1qAVkAAF1qAlkAAF1q/lgAAF11dWJhajdYAABVAGo5WAAAamtoAABqOlgAAH1ylmgAAChq/1gAAF1qAFkAAF1qAVkAAF1qAlkAAF1q/lgAAF11dWJlajdYAABVAGo5WAAAamhoAABqOlgAAH1yl2gAAChq/1gAAF1qAFkAAF1qAVkAAF1qAlkAAF1q/lgAAF11dWJhajdYAABVAGo6WAAAfXKYaAAAKGr/WAAAXWoAWQAAXWoBWQAAXWoCWQAAXWr+WAAAXXV1YmpEAQAAah1YAAApgXKZaAAAfXKaaAAAKGogWAAAaiFYAABqIlgAAF1ym2gAAGokWAAAKYFynGgAAH1ynWgAAChqIFgAAGonWAAAaiJYAABdcp5oAABqKVgAACmBcp9oAAB9cqBoAAAoaiBYAABqLFgAAGoiWAAAXXKhaAAAai5YAAApgXKiaAAAfXKjaAAAKGogWAAAajFYAABqIlgAAF1ypGgAAGozWAAAWD4AAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9wcm92aXNpb25fYXBpX3BiMl9ncnBjIG1vZHVsZXKlaAAAhYFypmgAAH1yp2gAAChqN1gAAFhGAAAAYXBhY2hlXF9iZWFtXC5wb3J0YWJpbGl0eVwuYXBpXC5iZWFtXF9wcm92aXNpb25cX2FwaVxfcGIyXF9ncnBjIG1vZHVsZXKoaAAAajlYAABqomgAAHViYWo3WAAAVQBqOVgAAGqfaAAAajpYAAB9cqloAAAoajxYAABdaj1YAABdaj5YAABdaj9YAABdakBYAABdVQphbmNob3JuYW1lVQBVBnJlZnVyaVg3AAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcHJvdmlzaW9uX2FwaV9wYjJfZ3JwY3KqaAAAVQhpbnRlcm5hbIh1dWJhajdYAABVAGo5WAAAapxoAABqOlgAAH1yq2gAAChqPVgAAF1qPlgAAF1qP1gAAF1qQFgAAF1qPFgAAF11dWJhajdYAABVAGo5WAAAaploAABqOlgAAH1yrGgAAChqPVgAAF1qPlgAAF1qP1gAAF1qQFgAAF1qPFgAAF11dWJhajdYAABVAGo6WAAAfXKtaAAAKGo9WAAAXWo+WAAAXWo/WAAAXWpAWAAAXWo8WAAAXXV1YmpFAQAAah1YAAApgXKuaAAAfXKvaAAAKGogWAAAaglZAABqIlgAAF1ysGgAAGokWAAAKYFysWgAAH1ysmgAAChqIFgAAGoNWQAAaiJYAABdcrNoAABqKVgAACmBcrRoAAB9crVoAAAoaiBYAABqEVkAAGoiWAAAXXK2aAAAai5YAAApgXK3aAAAfXK4aAAAKGogWAAAahVZAABqIlgAAF1yuWgAAGozWAAAWDgAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LnRlc3RfZGF0YWZsb3dfcnVubmVyIG1vZHVsZXK6aAAAhYFyu2gAAH1yvGgAAChqN1gAAFg+AAAAYXBhY2hlXF9iZWFtXC5ydW5uZXJzXC5kYXRhZmxvd1wudGVzdFxfZGF0YWZsb3dcX3J1bm5lciBtb2R1bGVyvWgAAGo5WAAAardoAAB1YmFqN1gAAFUAajlYAABqtGgAAGo6WAAAfXK+aAAAKGocWQAAXWodWQAAXWoeWQAAXWofWQAAXWogWQAAXVUKYW5jaG9ybmFtZVUAVQZyZWZ1cmlYMQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cudGVzdF9kYXRhZmxvd19ydW5uZXJyv2gAAFUIaW50ZXJuYWyIdXViYWo3WAAAVQBqOVgAAGqxaAAAajpYAAB9csBoAAAoah1ZAABdah5ZAABdah9ZAABdaiBZAABdahxZAABddXViYWo3WAAAVQBqOVgAAGquaAAAajpYAAB9csFoAAAoah1ZAABdah5ZAABdah9ZAABdaiBZAABdahxZAABddXViYWo3WAAAVQBqOlgAAH1ywmgAAChqHVkAAF1qHlkAAF1qH1kAAF1qIFkAAF1qHFkAAF11dWJqRgEAAGodWAAAKYFyw2gAAH1yxGgAAChqIFgAAGrsWwAAaiJYAABdcsVoAABqJFgAACmBcsZoAAB9csdoAAAoaiBYAABq8FsAAGoiWAAAXXLIaAAAailYAAApgXLJaAAAfXLKaAAAKGogWAAAavRbAABqIlgAAF1yy2gAAGouWAAAKYFyzGgAAH1yzWgAAChqIFgAAGr4WwAAaiJYAABdcs5oAABqM1gAAFgqAAAAYXBhY2hlX2JlYW0uaW8ucmVzdHJpY3Rpb25fdHJhY2tlcnMgbW9kdWxlcs9oAACFgXLQaAAAfXLRaAAAKGo3WAAAWC4AAABhcGFjaGVcX2JlYW1cLmlvXC5yZXN0cmljdGlvblxfdHJhY2tlcnMgbW9kdWxlctJoAABqOVgAAGrMaAAAdWJhajdYAABVAGo5WAAAasloAABqOlgAAH1y02gAAChq/1sAAF1qAFwAAF1qAVwAAF1qAlwAAF1qA1wAAF1VCmFuY2hvcm5hbWVVAFUGcmVmdXJpWCMAAABhcGFjaGVfYmVhbS5pby5yZXN0cmljdGlvbl90cmFja2Vyc3LUaAAAVQhpbnRlcm5hbIh1dWJhajdYAABVAGo5WAAAasZoAABqOlgAAH1y1WgAAChqAFwAAF1qAVwAAF1qAlwAAF1qA1wAAF1q/1sAAF11dWJhajdYAABVAGo5WAAAasNoAABqOlgAAH1y1mgAAChqAFwAAF1qAVwAAF1qAlwAAF1qA1wAAF1q/1sAAF11dWJhajdYAABVAGo6WAAAfXLXaAAAKGoAXAAAXWoBXAAAXWoCXAAAXWoDXAAAXWr/WwAAXXV1YmpHAQAAah1YAAApgXLYaAAAfXLZaAAAKGogWAAAaqNZAABqIlgAAF1y2mgAAGokWAAAKYFy22gAAH1y3GgAAChqIFgAAGqnWQAAaiJYAABdct1oAABqKVgAACmBct5oAAB9ct9oAAAoaiBYAABqq1kAAGoiWAAAXXLgaAAAai5YAAApgXLhaAAAfXLiaAAAKGogWAAAaq9ZAABqIlgAAF1y42gAAGozWAAAWCoAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5leGVjdXRvciBtb2R1bGVy5GgAAIWBcuVoAAB9cuZoAAAoajdYAABYLgAAAGFwYWNoZVxfYmVhbVwucnVubmVyc1wuZGlyZWN0XC5leGVjdXRvciBtb2R1bGVy52gAAGo5WAAAauFoAAB1YmFqN1gAAFUAajlYAABq3mgAAGo6WAAAfXLoaAAAKGq2WQAAXWq3WQAAXWq4WQAAXWq5WQAAXWq6WQAAXVUKYW5jaG9ybmFtZVUAVQZyZWZ1cmlYIwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV4ZWN1dG9yculoAABVCGludGVybmFsiHV1YmFqN1gAAFUAajlYAABq22gAAGo6WAAAfXLqaAAAKGq3WQAAXWq4WQAAXWq5WQAAXWq6WQAAXWq2WQAAXXV1YmFqN1gAAFUAajlYAABq2GgAAGo6WAAAfXLraAAAKGq3WQAAXWq4WQAAXWq5WQAAXWq6WQAAXWq2WQAAXXV1YmFqN1gAAFUAajpYAAB9cuxoAAAoardZAABdarhZAABdarlZAABdarpZAABdarZZAABddXViakgBAABqHVgAACmBcu1oAAB9cu5oAAAoaiBYAABq7FsAAGoiWAAAXXLvaAAAaiRYAAApgXLwaAAAfXLxaAAAKGogWAAAavBbAABqIlgAAF1y8mgAAGopWAAAKYFy82gAAH1y9GgAAChqIFgAAGr0WwAAaiJYAABdcvVoAABqLlgAACmBcvZoAAB9cvdoAAAoaiBYAABq+FsAAGoiWAAAXXL4aAAAajNYAABYIQAAAGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljIG1vZHVsZXL5aAAAhYFy+mgAAH1y+2gAAChqN1gAAFgkAAAAYXBhY2hlXF9iZWFtXC5tZXRyaWNzXC5tZXRyaWMgbW9kdWxlcvxoAABqOVgAAGr2aAAAdWJhajdYAABVAGo5WAAAavNoAABqOlgAAH1y/WgAAChq/1sAAF1qAFwAAF1qAVwAAF1qAlwAAF1qA1wAAF1VCmFuY2hvcm5hbWVVAFUGcmVmdXJpWBoAAABhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpY3L+aAAAVQhpbnRlcm5hbIh1dWJhajdYAABVAGo5WAAAavBoAABqOlgAAH1y/2gAAChqAFwAAF1qAVwAAF1qAlwAAF1qA1wAAF1q/1sAAF11dWJhajdYAABVAGo5WAAAau1oAABqOlgAAH1yAGkAAChqAFwAAF1qAVwAAF1qAlwAAF1qA1wAAF1q/1sAAF11dWJhajdYAABVAGo6WAAAfXIBaQAAKGoAXAAAXWoBXAAAXWoCXAAAXWoDXAAAXWr/WwAAXXV1YmpJAQAAah1YAAApgXICaQAAfXIDaQAAKGogWAAAaiFYAABqIlgAAF1yBGkAAGokWAAAKYFyBWkAAH1yBmkAAChqIFgAAGonWAAAaiJYAABdcgdpAABqKVgAACmBcghpAAB9cglpAAAoaiBYAABqLFgAAGoiWAAAXXIKaQAAai5YAAApgXILaQAAfXIMaQAAKGogWAAAajFYAABqIlgAAF1yDWkAAGozWAAAWDgAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9qb2JfYXBpX3BiMl9ncnBjIG1vZHVsZXIOaQAAhYFyD2kAAH1yEGkAAChqN1gAAFhAAAAAYXBhY2hlXF9iZWFtXC5wb3J0YWJpbGl0eVwuYXBpXC5iZWFtXF9qb2JcX2FwaVxfcGIyXF9ncnBjIG1vZHVsZXIRaQAAajlYAABqC2kAAHViYWo3WAAAVQBqOVgAAGoIaQAAajpYAAB9chJpAAAoajxYAABdaj1YAABdaj5YAABdaj9YAABdakBYAABdVQphbmNob3JuYW1lVQBVBnJlZnVyaVgxAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fam9iX2FwaV9wYjJfZ3JwY3ITaQAAVQhpbnRlcm5hbIh1dWJhajdYAABVAGo5WAAAagVpAABqOlgAAH1yFGkAAChqPVgAAF1qPlgAAF1qP1gAAF1qQFgAAF1qPFgAAF11dWJhajdYAABVAGo5WAAAagJpAABqOlgAAH1yFWkAAChqPVgAAF1qPlgAAF1qP1gAAF1qQFgAAF1qPFgAAF11dWJhajdYAABVAGo6WAAAfXIWaQAAKGo9WAAAXWo+WAAAXWo/WAAAXWpAWAAAXWo8WAAAXXV1Ymi7ah1YAAApgXIXaQAAfXIYaQAAKGogWAAAalxaAABqIlgAAF1yGWkAAChqJFgAACmBchppAAB9chtpAAAoaiBYAABqYFoAAGoiWAAAXXIcaQAAKGopWAAAKYFyHWkAAH1yHmkAAChqIFgAAGpkWgAAaiJYAABdch9pAABqLlgAACmBciBpAAB9ciFpAAAoaiBYAABqaFoAAGoiWAAAXXIiaQAAajNYAABYGgAAAEFwYWNoZSBCZWFtIFNESyBmb3IgUHl0aG9uciNpAACFgXIkaQAAfXIlaQAAKGo3WAAAWBoAAABBcGFjaGUgQmVhbSBTREsgZm9yIFB5dGhvbnImaQAAajlYAABqIGkAAHViYWo3WAAAVQBqOVgAAGodaQAAajpYAAB9cidpAAAoam9aAABdanBaAABdanFaAABdanJaAABdanNaAABdVQphbmNob3JuYW1lVQBVBnJlZnVyaWoaVAAAVQhpbnRlcm5hbIh1dWJhajdYAABVAGo5WAAAahppAABqOlgAAH1yKGkAAChqcFoAAF1qcVoAAF1qcloAAF1qc1oAAF1qb1oAAF11dWJqHVgAACmBcilpAAB9cippAAAoaiBYAABqXFoAAGoiWAAAXXIraQAAKGokWAAAKYFyLGkAAH1yLWkAAChqIFgAAGpgWgAAaiJYAABdci5pAABqKVgAACmBci9pAAB9cjBpAAAoaiBYAABqZFoAAGoiWAAAXXIxaQAAai5YAAApgXIyaQAAfXIzaQAAKGogWAAAamhaAABqIlgAAF1yNGkAAGozWAAAWAYAAABTdGF0dXNyNWkAAIWBcjZpAAB9cjdpAAAoajdYAABYBgAAAFN0YXR1c2o5WAAAajJpAAB1YmFqN1gAAFUAajlYAABqL2kAAGo6WAAAfXI4aQAAKGpvWgAAXWpwWgAAXWpxWgAAXWpyWgAAXWpzWgAAXVUKYW5jaG9ybmFtZVUHI3N0YXR1c1UGcmVmdXJpahpUAABVCGludGVybmFsiHV1YmFqN1gAAFUAajlYAABqLGkAAGo6WAAAfXI5aQAAKGpwWgAAXWpxWgAAXWpyWgAAXWpzWgAAXWpvWgAAXXV1YmFqN1gAAFUAajlYAABqKWkAAGo6WAAAfXI6aQAAKGpwWgAAXWpxWgAAXWpyWgAAXWpzWgAAXWpvWgAAXXV1YmokWAAAKYFyO2kAAH1yPGkAAChqIFgAAGpgWgAAaiJYAABdcj1pAABqKVgAACmBcj5pAAB9cj9pAAAoaiBYAABqZFoAAGoiWAAAXXJAaQAAai5YAAApgXJBaQAAfXJCaQAAKGogWAAAamhaAABqIlgAAF1yQ2kAAGozWAAAWAgAAABPdmVydmlld3JEaQAAhYFyRWkAAH1yRmkAAChqN1gAAFgIAAAAT3ZlcnZpZXdqOVgAAGpBaQAAdWJhajdYAABVAGo5WAAAaj5pAABqOlgAAH1yR2kAAChqb1oAAF1qcFoAAF1qcVoAAF1qcloAAF1qc1oAAF1VCmFuY2hvcm5hbWVVCSNvdmVydmlld1UGcmVmdXJpahpUAABVCGludGVybmFsiHV1YmFqN1gAAFUAajlYAABqO2kAAGo6WAAAfXJIaQAAKGpwWgAAXWpxWgAAXWpyWgAAXWpzWgAAXWpvWgAAXXV1YmFqN1gAAFUAajlYAABqKWkAAGo6WAAAfXJJaQAAKGpwWgAAXWpxWgAAXWpyWgAAXWpzWgAAXWpvWgAAXXV1YmokWAAAKYFySmkAAH1yS2kAAChqIFgAAGpgWgAAaiJYAABdckxpAABqKVgAACmBck1pAAB9ck5pAAAoaiBYAABqZFoAAGoiWAAAXXJPaQAAai5YAAApgXJQaQAAfXJRaQAAKGogWAAAamhaAABqIlgAAF1yUmkAAGozWAAAWA0AAABUeXBpY2FsIHVzYWdlclNpAACFgXJUaQAAfXJVaQAAKGo3WAAAWA0AAABUeXBpY2FsIHVzYWdlajlYAABqUGkAAHViYWo3WAAAVQBqOVgAAGpNaQAAajpYAAB9clZpAAAoam9aAABdanBaAABdanFaAABdanJaAABdanNaAABdVQphbmNob3JuYW1lVQ4jdHlwaWNhbC11c2FnZVUGcmVmdXJpahpUAABVCGludGVybmFsiHV1YmFqN1gAAFUAajlYAABqSmkAAGo6WAAAfXJXaQAAKGpwWgAAXWpxWgAAXWpyWgAAXWpzWgAAXWpvWgAAXXV1YmFqN1gAAFUAajlYAABqKWkAAGo6WAAAfXJYaQAAKGpwWgAAXWpxWgAAXWpyWgAAXWpzWgAAXWpvWgAAXXV1YmVqN1gAAFUAajlYAABqGmkAAGo6WAAAfXJZaQAAKGpwWgAAXWpxWgAAXWpyWgAAXWpzWgAAXWpvWgAAXXV1YmVqN1gAAFUAajlYAABqF2kAAGo6WAAAfXJaaQAAKGpwWgAAXWpxWgAAXWpyWgAAXWpzWgAAXWpvWgAAXXV1YmokWAAAKYFyW2kAAH1yXGkAAChqIFgAAGpgWgAAaiJYAABdcl1pAAAoailYAAApgXJeaQAAfXJfaQAAKGogWAAAamRaAABqIlgAAF1yYGkAAGouWAAAKYFyYWkAAH1yYmkAAChqIFgAAGpoWgAAaiJYAABdcmNpAABqM1gAAFgLAAAAU3VicGFja2FnZXNyZGkAAIWBcmVpAAB9cmZpAAAoajdYAABYCwAAAFN1YnBhY2thZ2VzajlYAABqYWkAAHViYWo3WAAAVQBqOVgAAGpeaQAAajpYAAB9cmdpAAAoam9aAABdanBaAABdanFaAABdanJaAABdanNaAABdVQphbmNob3JuYW1lVQwjc3VicGFja2FnZXNVBnJlZnVyaWoaVAAAVQhpbnRlcm5hbIh1dWJhajdYAABVAGo5WAAAaltpAABqOlgAAH1yaGkAAChqcFoAAF1qcVoAAF1qcloAAF1qc1oAAF1qb1oAAF11dWJqHVgAACmBcmlpAAB9cmppAAAoaiBYAABqXFoAAGoiWAAAXXJraQAAaqdYAAApgXJsaQAAfXJtaQAAKGo6WAAAfXJuaQAAKFUHZW50cmllc11yb2kAAChOarJTAACGcnBpAABOarNTAACGcnFpAABOarRTAACGcnJpAABOarVTAACGcnNpAABOarZTAACGcnRpAABOardTAACGcnVpAABOarhTAACGcnZpAABOarlTAACGcndpAABOarpTAACGcnhpAABOartTAACGcnlpAABOarxTAACGcnppAABOar1TAACGcntpAABlVQhudW1iZXJlZEsAVQdjYXB0aW9uTmpvWgAAXWpwWgAAXVUNaW5jbHVkZWhpZGRlbolqcloAAF1VDGluY2x1ZGVmaWxlc11yfGkAAChqslMAAGqzUwAAarRTAABqtVMAAGq2UwAAardTAABquFMAAGq5UwAAarpTAABqu1MAAGq8UwAAar1TAABlVQZoaWRkZW6JVQhtYXhkZXB0aEr/////VQRnbG9iiWpzWgAAXVUGcGFyZW50ahpUAABqcVoAAF1VCnRpdGxlc29ubHmJdWogWAAAaiZkAABqIlgAAF1qN1gAAFUAaq9YAABLCmqwWAAAY2RvY3V0aWxzLm5vZGVzCnJlcHJ1bmljb2RlCnJ9aQAAWCIAAAB0YXJnZXQvZG9jcy9zb3VyY2UvYXBhY2hlX2JlYW0ucnN0cn5pAACFgXJ/aQAAfXKAaQAAYmo5WAAAamlpAAB1YmFqN1gAAFUAajlYAABqW2kAAGo6WAAAfXKBaQAAKGpwWgAAXWpxWgAAXWpyWgAAXWpzWgAAXWpvWgAAXXV1YmVqN1gAAFUAajlYAABqF2kAAGo6WAAAfXKCaQAAKGpwWgAAXWpxWgAAXWpyWgAAXWpzWgAAXWpvWgAAXXV1YmokWAAAKYFyg2kAAH1yhGkAAChqIFgAAGpgWgAAaiJYAABdcoVpAAAoailYAAApgXKGaQAAfXKHaQAAKGogWAAAamRaAABqIlgAAF1yiGkAAGouWAAAKYFyiWkAAH1yimkAAChqIFgAAGpoWgAAaiJYAABdcotpAABqM1gAAFgKAAAAU3VibW9kdWxlc3KMaQAAhYFyjWkAAH1yjmkAAChqN1gAAFgKAAAAU3VibW9kdWxlc2o5WAAAaolpAAB1YmFqN1gAAFUAajlYAABqhmkAAGo6WAAAfXKPaQAAKGpvWgAAXWpwWgAAXWpxWgAAXWpyWgAAXWpzWgAAXVUKYW5jaG9ybmFtZVULI3N1Ym1vZHVsZXNVBnJlZnVyaWoaVAAAVQhpbnRlcm5hbIh1dWJhajdYAABVAGo5WAAAaoNpAABqOlgAAH1ykGkAAChqcFoAAF1qcVoAAF1qcloAAF1qc1oAAF1qb1oAAF11dWJqHVgAACmBcpFpAAB9cpJpAAAoaiBYAABqXFoAAGoiWAAAXXKTaQAAaqdYAAApgXKUaQAAfXKVaQAAKGo6WAAAfXKWaQAAKFUHZW50cmllc11yl2kAAChOar5TAACGcphpAABOar9TAACGcplpAABOasBTAACGcpppAABOasFTAACGcptpAABlVQhudW1iZXJlZEsAVQdjYXB0aW9uTmpvWgAAXWpwWgAAXVUNaW5jbHVkZWhpZGRlbolqcloAAF1VDGluY2x1ZGVmaWxlc11ynGkAAChqvlMAAGq/UwAAasBTAABqwVMAAGVVBmhpZGRlbolVCG1heGRlcHRoSv////9VBGdsb2KJanNaAABdVQZwYXJlbnRqGlQAAGpxWgAAXVUKdGl0bGVzb25seYl1aiBYAABqJmQAAGoiWAAAXWo3WAAAVQBqr1gAAEscarBYAABqf2kAAGo5WAAAapFpAAB1YmFqN1gAAFUAajlYAABqg2kAAGo6WAAAfXKdaQAAKGpwWgAAXWpxWgAAXWpyWgAAXWpzWgAAXWpvWgAAXXV1YmVqN1gAAFUAajlYAABqF2kAAGo6WAAAfXKeaQAAKGpwWgAAXWpxWgAAXWpyWgAAXWpzWgAAXWpvWgAAXXV1YmVqN1gAAFUAajpYAAB9cp9pAAAoanBaAABdanFaAABdanJaAABdanNaAABdam9aAABddXViaksBAABqHVgAACmBcqBpAAB9cqFpAAAoaiBYAABqXFoAAGoiWAAAXXKiaQAAaiRYAAApgXKjaQAAfXKkaQAAKGogWAAAamBaAABqIlgAAF1ypWkAAGopWAAAKYFypmkAAH1yp2kAAChqIFgAAGpkWgAAaiJYAABdcqhpAABqLlgAACmBcqlpAAB9cqppAAAoaiBYAABqaFoAAGoiWAAAXXKraQAAajNYAABYLgAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZSBtb2R1bGVyrGkAAIWBcq1pAAB9cq5pAAAoajdYAABYMgAAAGFwYWNoZVxfYmVhbVwudHlwZWhpbnRzXC50cml2aWFsXF9pbmZlcmVuY2UgbW9kdWxlcq9pAABqOVgAAGqpaQAAdWJhajdYAABVAGo5WAAAaqZpAABqOlgAAH1ysGkAAChqb1oAAF1qcFoAAF1qcVoAAF1qcloAAF1qc1oAAF1VCmFuY2hvcm5hbWVVAFUGcmVmdXJpWCcAAABhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2VysWkAAFUIaW50ZXJuYWyIdXViYWo3WAAAVQBqOVgAAGqjaQAAajpYAAB9crJpAAAoanBaAABdanFaAABdanJaAABdanNaAABdam9aAABddXViYWo3WAAAVQBqOVgAAGqgaQAAajpYAAB9crNpAAAoanBaAABdanFaAABdanJaAABdanNaAABdam9aAABddXViYWo3WAAAVQBqOlgAAH1ytGkAAChqcFoAAF1qcVoAAF1qcloAAF1qc1oAAF1qb1oAAF11dWJqTAEAAGodWAAAKYFytWkAAH1ytmkAAChqIFgAAGoJWQAAaiJYAABdcrdpAABqJFgAACmBcrhpAAB9crlpAAAoaiBYAABqDVkAAGoiWAAAXXK6aQAAailYAAApgXK7aQAAfXK8aQAAKGogWAAAahFZAABqIlgAAF1yvWkAAGouWAAAKYFyvmkAAH1yv2kAAChqIFgAAGoVWQAAaiJYAABdcsBpAABqM1gAAFg0AAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlIG1vZHVsZXLBaQAAhYFywmkAAH1yw2kAAChqN1gAAFg6AAAAYXBhY2hlXF9iZWFtXC5ydW5uZXJzXC5kYXRhZmxvd1wubmF0aXZlXF9pb1wuaW9iYXNlIG1vZHVsZXLEaQAAajlYAABqvmkAAHViYWo3WAAAVQBqOVgAAGq7aQAAajpYAAB9csVpAAAoahxZAABdah1ZAABdah5ZAABdah9ZAABdaiBZAABdVQphbmNob3JuYW1lVQBVBnJlZnVyaVgtAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlcsZpAABVCGludGVybmFsiHV1YmFqN1gAAFUAajlYAABquGkAAGo6WAAAfXLHaQAAKGodWQAAXWoeWQAAXWofWQAAXWogWQAAXWocWQAAXXV1YmFqN1gAAFUAajlYAABqtWkAAGo6WAAAfXLIaQAAKGodWQAAXWoeWQAAXWofWQAAXWogWQAAXWocWQAAXXV1YmFqN1gAAFUAajpYAAB9cslpAAAoah1ZAABdah5ZAABdah9ZAABdaiBZAABdahxZAABddXViak0BAABqHVgAACmBcsppAAB9cstpAAAoaiBYAABqo1kAAGoiWAAAXXLMaQAAaiRYAAApgXLNaQAAfXLOaQAAKGogWAAAaqdZAABqIlgAAF1yz2kAAGopWAAAKYFy0GkAAH1y0WkAAChqIFgAAGqrWQAAaiJYAABdctJpAABqLlgAACmBctNpAAB9ctRpAAAoaiBYAABqr1kAAGoiWAAAXXLVaQAAajNYAABYMgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF91c2Vyc3RhdGUgbW9kdWxlctZpAACFgXLXaQAAfXLYaQAAKGo3WAAAWDcAAABhcGFjaGVcX2JlYW1cLnJ1bm5lcnNcLmRpcmVjdFwuZGlyZWN0XF91c2Vyc3RhdGUgbW9kdWxlctlpAABqOVgAAGrTaQAAdWJhajdYAABVAGo5WAAAatBpAABqOlgAAH1y2mkAAChqtlkAAF1qt1kAAF1quFkAAF1quVkAAF1qulkAAF1VCmFuY2hvcm5hbWVVAFUGcmVmdXJpWCsAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfdXNlcnN0YXRlcttpAABVCGludGVybmFsiHV1YmFqN1gAAFUAajlYAABqzWkAAGo6WAAAfXLcaQAAKGq3WQAAXWq4WQAAXWq5WQAAXWq6WQAAXWq2WQAAXXV1YmFqN1gAAFUAajlYAABqymkAAGo6WAAAfXLdaQAAKGq3WQAAXWq4WQAAXWq5WQAAXWq6WQAAXWq2WQAAXXV1YmFqN1gAAFUAajpYAAB9ct5pAAAoardZAABdarhZAABdarlZAABdarpZAABdarZZAABddXViaPxqHVgAACmBct9pAAB9cuBpAAAoaiBYAABqCVkAAGoiWAAAXXLhaQAAaiRYAAApgXLiaQAAfXLjaQAAKGogWAAAag1ZAABqIlgAAF1y5GkAAGopWAAAKYFy5WkAAH1y5mkAAChqIFgAAGoRWQAAaiJYAABdcudpAABqLlgAACmBcuhpAAB9culpAAAoaiBYAABqFVkAAGoiWAAAXXLqaQAAajNYAABYOAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cucHRyYW5zZm9ybV9vdmVycmlkZXMgbW9kdWxlcutpAACFgXLsaQAAfXLtaQAAKGo3WAAAWD0AAABhcGFjaGVcX2JlYW1cLnJ1bm5lcnNcLmRhdGFmbG93XC5wdHJhbnNmb3JtXF9vdmVycmlkZXMgbW9kdWxlcu5pAABqOVgAAGroaQAAdWJhajdYAABVAGo5WAAAauVpAABqOlgAAH1y72kAAChqHFkAAF1qHVkAAF1qHlkAAF1qH1kAAF1qIFkAAF1VCmFuY2hvcm5hbWVVAFUGcmVmdXJpWDEAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LnB0cmFuc2Zvcm1fb3ZlcnJpZGVzcvBpAABVCGludGVybmFsiHV1YmFqN1gAAFUAajlYAABq4mkAAGo6WAAAfXLxaQAAKGodWQAAXWoeWQAAXWofWQAAXWogWQAAXWocWQAAXXV1YmFqN1gAAFUAajlYAABq32kAAGo6WAAAfXLyaQAAKGodWQAAXWoeWQAAXWofWQAAXWogWQAAXWocWQAAXXV1YmFqN1gAAFUAajpYAAB9cvNpAAAoah1ZAABdah5ZAABdah9ZAABdaiBZAABdahxZAABddXViak8BAABqHVgAACmBcvRpAAB9cvVpAAAoaiBYAABqXFoAAGoiWAAAXXL2aQAAaiRYAAApgXL3aQAAfXL4aQAAKGogWAAAamBaAABqIlgAAF1y+WkAAGopWAAAKYFy+mkAAH1y+2kAAChqIFgAAGpkWgAAaiJYAABdcvxpAABqLlgAACmBcv1pAAB9cv5pAAAoaiBYAABqaFoAAGoiWAAAXXL/aQAAajNYAABYGgAAAGFwYWNoZV9iZWFtLnZlcnNpb24gbW9kdWxlcgBqAACFgXIBagAAfXICagAAKGo3WAAAWBwAAABhcGFjaGVcX2JlYW1cLnZlcnNpb24gbW9kdWxlcgNqAABqOVgAAGr9aQAAdWJhajdYAABVAGo5WAAAavppAABqOlgAAH1yBGoAAChqb1oAAF1qcFoAAF1qcVoAAF1qcloAAF1qc1oAAF1VCmFuY2hvcm5hbWVVAFUGcmVmdXJpWBMAAABhcGFjaGVfYmVhbS52ZXJzaW9ucgVqAABVCGludGVybmFsiHV1YmFqN1gAAFUAajlYAABq92kAAGo6WAAAfXIGagAAKGpwWgAAXWpxWgAAXWpyWgAAXWpzWgAAXWpvWgAAXXV1YmFqN1gAAFUAajlYAABq9GkAAGo6WAAAfXIHagAAKGpwWgAAXWpxWgAAXWpyWgAAXWpzWgAAXWpvWgAAXXV1YmFqN1gAAFUAajpYAAB9cghqAAAoanBaAABdanFaAABdanJaAABdanNaAABdam9aAABddXViaj8BAABqHVgAACmBcglqAAB9cgpqAAAoaiBYAABqo1kAAGoiWAAAXXILagAAaiRYAAApgXIMagAAfXINagAAKGogWAAAaqdZAABqIlgAAF1yDmoAAGopWAAAKYFyD2oAAH1yEGoAAChqIFgAAGqrWQAAaiJYAABdchFqAABqLlgAACmBchJqAAB9chNqAAAoaiBYAABqr1kAAGoiWAAAXXIUagAAajNYAABYNQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnRyYW5zZm9ybV9ldmFsdWF0b3IgbW9kdWxlchVqAACFgXIWagAAfXIXagAAKGo3WAAAWDoAAABhcGFjaGVcX2JlYW1cLnJ1bm5lcnNcLmRpcmVjdFwudHJhbnNmb3JtXF9ldmFsdWF0b3IgbW9kdWxlchhqAABqOVgAAGoSagAAdWJhajdYAABVAGo5WAAAag9qAABqOlgAAH1yGWoAAChqtlkAAF1qt1kAAF1quFkAAF1quVkAAF1qulkAAF1VCmFuY2hvcm5hbWVVAFUGcmVmdXJpWC4AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC50cmFuc2Zvcm1fZXZhbHVhdG9ychpqAABVCGludGVybmFsiHV1YmFqN1gAAFUAajlYAABqDGoAAGo6WAAAfXIbagAAKGq3WQAAXWq4WQAAXWq5WQAAXWq6WQAAXWq2WQAAXXV1YmFqN1gAAFUAajlYAABqCWoAAGo6WAAAfXIcagAAKGq3WQAAXWq4WQAAXWq5WQAAXWq6WQAAXWq2WQAAXXV1YmFqN1gAAFUAajpYAAB9ch1qAAAoardZAABdarhZAABdarlZAABdarpZAABdarZZAABddXVialEBAABqHVgAACmBch5qAAB9ch9qAAAoaiBYAABqCVkAAGoiWAAAXXIgagAAaiRYAAApgXIhagAAfXIiagAAKGogWAAAag1ZAABqIlgAAF1yI2oAAChqKVgAACmBciRqAAB9ciVqAAAoaiBYAABqEVkAAGoiWAAAXXImagAAai5YAAApgXInagAAfXIoagAAKGogWAAAahVZAABqIlgAAF1yKWoAAGozWAAAWCQAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93IHBhY2thZ2VyKmoAAIWBcitqAAB9cixqAAAoajdYAABYJwAAAGFwYWNoZVxfYmVhbVwucnVubmVyc1wuZGF0YWZsb3cgcGFja2FnZXItagAAajlYAABqJ2oAAHViYWo3WAAAVQBqOVgAAGokagAAajpYAAB9ci5qAAAoahxZAABdah1ZAABdah5ZAABdah9ZAABdaiBZAABdVQphbmNob3JuYW1lVQBVBnJlZnVyaWqAVAAAVQhpbnRlcm5hbIh1dWJhajdYAABVAGo5WAAAaiFqAABqOlgAAH1yL2oAAChqHVkAAF1qHlkAAF1qH1kAAF1qIFkAAF1qHFkAAF11dWJqHVgAACmBcjBqAAB9cjFqAAAoaiBYAABqCVkAAGoiWAAAXXIyagAAKGokWAAAKYFyM2oAAH1yNGoAAChqIFgAAGoNWQAAaiJYAABdcjVqAAAoailYAAApgXI2agAAfXI3agAAKGogWAAAahFZAABqIlgAAF1yOGoAAGouWAAAKYFyOWoAAH1yOmoAAChqIFgAAGoVWQAAaiJYAABdcjtqAABqM1gAAFgLAAAAU3VicGFja2FnZXNyPGoAAIWBcj1qAAB9cj5qAAAoajdYAABYCwAAAFN1YnBhY2thZ2VzajlYAABqOWoAAHViYWo3WAAAVQBqOVgAAGo2agAAajpYAAB9cj9qAAAoahxZAABdah1ZAABdah5ZAABdah9ZAABdaiBZAABdVQphbmNob3JuYW1lVQwjc3VicGFja2FnZXNVBnJlZnVyaWqAVAAAVQhpbnRlcm5hbIh1dWJhajdYAABVAGo5WAAAajNqAABqOlgAAH1yQGoAAChqHVkAAF1qHlkAAF1qH1kAAF1qIFkAAF1qHFkAAF11dWJqHVgAACmBckFqAAB9ckJqAAAoaiBYAABqCVkAAGoiWAAAXXJDagAAaqdYAAApgXJEagAAfXJFagAAKGo6WAAAfXJGagAAKFUHZW50cmllc11yR2oAAE5qw1MAAIZySGoAAGFVCG51bWJlcmVkSwBVB2NhcHRpb25OahxZAABdah1ZAABdVQ1pbmNsdWRlaGlkZGVuiWofWQAAXVUMaW5jbHVkZWZpbGVzXXJJagAAasNTAABhVQZoaWRkZW6JVQhtYXhkZXB0aEr/////VQRnbG9iiWogWQAAXVUGcGFyZW50aoBUAABqHlkAAF1VCnRpdGxlc29ubHmJdWogWAAAau1eAABqIlgAAF1qN1gAAFUAaq9YAABLDGqwWAAAWH0AAAAvdXNyL2xvY2FsL2dvb2dsZS9ob21lL2tsay93ZWJzaXRlX3VwZGF0ZV9kaXIvcHl0aG9uX2RvYy9iZWFtL3Nka3MvcHl0aG9uL3RhcmdldC9kb2NzL3NvdXJjZS9hcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LnJzdHJKagAAajlYAABqQWoAAHViYWo3WAAAVQBqOVgAAGozagAAajpYAAB9cktqAAAoah1ZAABdah5ZAABdah9ZAABdaiBZAABdahxZAABddXViZWo3WAAAVQBqOVgAAGowagAAajpYAAB9ckxqAAAoah1ZAABdah5ZAABdah9ZAABdaiBZAABdahxZAABddXViaiRYAAApgXJNagAAfXJOagAAKGogWAAAag1ZAABqIlgAAF1yT2oAAChqKVgAACmBclBqAAB9clFqAAAoaiBYAABqEVkAAGoiWAAAXXJSagAAai5YAAApgXJTagAAfXJUagAAKGogWAAAahVZAABqIlgAAF1yVWoAAGozWAAAWAoAAABTdWJtb2R1bGVzclZqAACFgXJXagAAfXJYagAAKGo3WAAAWAoAAABTdWJtb2R1bGVzajlYAABqU2oAAHViYWo3WAAAVQBqOVgAAGpQagAAajpYAAB9cllqAAAoahxZAABdah1ZAABdah5ZAABdah9ZAABdaiBZAABdVQphbmNob3JuYW1lVQsjc3VibW9kdWxlc1UGcmVmdXJpaoBUAABVCGludGVybmFsiHV1YmFqN1gAAFUAajlYAABqTWoAAGo6WAAAfXJaagAAKGodWQAAXWoeWQAAXWofWQAAXWogWQAAXWocWQAAXXV1YmodWAAAKYFyW2oAAH1yXGoAAChqIFgAAGoJWQAAaiJYAABdcl1qAABqp1gAACmBcl5qAAB9cl9qAAAoajpYAAB9cmBqAAAoVQdlbnRyaWVzXXJhagAAKE5qxFMAAIZyYmoAAE5qxVMAAIZyY2oAAE5qxlMAAIZyZGoAAE5qx1MAAIZyZWoAAGVVCG51bWJlcmVkSwBVB2NhcHRpb25OahxZAABdah1ZAABdVQ1pbmNsdWRlaGlkZGVuiWofWQAAXVUMaW5jbHVkZWZpbGVzXXJmagAAKGrEUwAAasVTAABqxlMAAGrHUwAAZVUGaGlkZGVuiVUIbWF4ZGVwdGhK/////1UEZ2xvYolqIFkAAF1VBnBhcmVudGqAVAAAah5ZAABdVQp0aXRsZXNvbmx5iXVqIFgAAGrtXgAAaiJYAABdajdYAABVAGqvWAAASxNqsFgAAGpKagAAajlYAABqW2oAAHViYWo3WAAAVQBqOVgAAGpNagAAajpYAAB9cmdqAAAoah1ZAABdah5ZAABdah9ZAABdaiBZAABdahxZAABddXViZWo3WAAAVQBqOVgAAGowagAAajpYAAB9cmhqAAAoah1ZAABdah5ZAABdah9ZAABdaiBZAABdahxZAABddXViZWo3WAAAVQBqOVgAAGohagAAajpYAAB9cmlqAAAoah1ZAABdah5ZAABdah9ZAABdaiBZAABdahxZAABddXViZWo3WAAAVQBqOVgAAGoeagAAajpYAAB9cmpqAAAoah1ZAABdah5ZAABdah9ZAABdaiBZAABdahxZAABddXViYWo3WAAAVQBqOlgAAH1ya2oAAChqHVkAAF1qHlkAAF1qH1kAAF1qIFkAAF1qHFkAAF11dWJqNQEAAGodWAAAKYFybGoAAH1ybWoAAChqIFgAAGpwWQAAaiJYAABdcm5qAABqJFgAACmBcm9qAAB9cnBqAAAoaiBYAABqdFkAAGoiWAAAXXJxagAAailYAAApgXJyagAAfXJzagAAKGogWAAAanhZAABqIlgAAF1ydGoAAGouWAAAKYFydWoAAH1ydmoAAChqIFgAAGp8WQAAaiJYAABdcndqAABqM1gAAFgqAAAAYXBhY2hlX2JlYW0uaW50ZXJuYWwuZ2NwLmpzb25fdmFsdWUgbW9kdWxlcnhqAACFgXJ5agAAfXJ6agAAKGo3WAAAWC8AAABhcGFjaGVcX2JlYW1cLmludGVybmFsXC5nY3BcLmpzb25cX3ZhbHVlIG1vZHVsZXJ7agAAajlYAABqdWoAAHViYWo3WAAAVQBqOVgAAGpyagAAajpYAAB9cnxqAAAoaoNZAABdaoRZAABdaoVZAABdaoZZAABdaodZAABdVQphbmNob3JuYW1lVQBVBnJlZnVyaVgjAAAAYXBhY2hlX2JlYW0uaW50ZXJuYWwuZ2NwLmpzb25fdmFsdWVyfWoAAFUIaW50ZXJuYWyIdXViYWo3WAAAVQBqOVgAAGpvagAAajpYAAB9cn5qAAAoaoRZAABdaoVZAABdaoZZAABdaodZAABdaoNZAABddXViYWo3WAAAVQBqOVgAAGpsagAAajpYAAB9cn9qAAAoaoRZAABdaoVZAABdaoZZAABdaodZAABdaoNZAABddXViYWo3WAAAVQBqOlgAAH1ygGoAAChqhFkAAF1qhVkAAF1qhlkAAF1qh1kAAF1qg1kAAF11dWJqUwEAAGodWAAAKYFygWoAAH1ygmoAAChqIFgAAGoJWQAAaiJYAABdcoNqAABqJFgAACmBcoRqAAB9coVqAAAoaiBYAABqDVkAAGoiWAAAXXKGagAAailYAAApgXKHagAAfXKIagAAKGogWAAAahFZAABqIlgAAF1yiWoAAGouWAAAKYFyimoAAH1yi2oAAChqIFgAAGoVWQAAaiJYAABdcoxqAABqM1gAAFg0AAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19tZXRyaWNzIG1vZHVsZXKNagAAhYFyjmoAAH1yj2oAAChqN1gAAFg5AAAAYXBhY2hlXF9iZWFtXC5ydW5uZXJzXC5kYXRhZmxvd1wuZGF0YWZsb3dcX21ldHJpY3MgbW9kdWxlcpBqAABqOVgAAGqKagAAdWJhajdYAABVAGo5WAAAaodqAABqOlgAAH1ykWoAAChqHFkAAF1qHVkAAF1qHlkAAF1qH1kAAF1qIFkAAF1VCmFuY2hvcm5hbWVVAFUGcmVmdXJpWC0AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X21ldHJpY3NykmoAAFUIaW50ZXJuYWyIdXViYWo3WAAAVQBqOVgAAGqEagAAajpYAAB9cpNqAAAoah1ZAABdah5ZAABdah9ZAABdaiBZAABdahxZAABddXViYWo3WAAAVQBqOVgAAGqBagAAajpYAAB9cpRqAAAoah1ZAABdah5ZAABdah9ZAABdaiBZAABdahxZAABddXViYWo3WAAAVQBqOlgAAH1ylWoAAChqHVkAAF1qHlkAAF1qH1kAAF1qIFkAAF1qHFkAAF11dWJqVAEAAGodWAAAKYFylmoAAH1yl2oAAChqIFgAAGplWAAAaiJYAABdcphqAABqJFgAACmBcplqAAB9cppqAAAoaiBYAABqaVgAAGoiWAAAXXKbagAAailYAAApgXKcagAAfXKdagAAKGogWAAAam1YAABqIlgAAF1ynmoAAGouWAAAKYFyn2oAAH1yoGoAAChqIFgAAGpxWAAAaiJYAABdcqFqAABqM1gAAFgrAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jcmVhdGVfc291cmNlIG1vZHVsZXKiagAAhYFyo2oAAH1ypGoAAChqN1gAAFgvAAAAYXBhY2hlXF9iZWFtXC50cmFuc2Zvcm1zXC5jcmVhdGVcX3NvdXJjZSBtb2R1bGVypWoAAGo5WAAAap9qAAB1YmFqN1gAAFUAajlYAABqnGoAAGo6WAAAfXKmagAAKGp4WAAAXWp5WAAAXWp6WAAAXWp7WAAAXWp8WAAAXVUKYW5jaG9ybmFtZVUAVQZyZWZ1cmlYJAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY3JlYXRlX3NvdXJjZXKnagAAVQhpbnRlcm5hbIh1dWJhajdYAABVAGo5WAAAaplqAABqOlgAAH1yqGoAAChqeVgAAF1qelgAAF1qe1gAAF1qfFgAAF1qeFgAAF11dWJhajdYAABVAGo5WAAAapZqAABqOlgAAH1yqWoAAChqeVgAAF1qelgAAF1qe1gAAF1qfFgAAF1qeFgAAF11dWJhajdYAABVAGo6WAAAfXKqagAAKGp5WAAAXWp6WAAAXWp7WAAAXWp8WAAAXWp4WAAAXXV1YmpVAQAAah1YAAApgXKragAAfXKsagAAKGogWAAAalxaAABqIlgAAF1yrWoAAGokWAAAKYFyrmoAAH1yr2oAAChqIFgAAGpgWgAAaiJYAABdcrBqAABqKVgAACmBcrFqAAB9crJqAAAoaiBYAABqZFoAAGoiWAAAXXKzagAAai5YAAApgXK0agAAfXK1agAAKGogWAAAamhaAABqIlgAAF1ytmoAAGozWAAAWCQAAABhcGFjaGVfYmVhbS51dGlscy5hbm5vdGF0aW9ucyBtb2R1bGVyt2oAAIWBcrhqAAB9crlqAAAoajdYAABYJwAAAGFwYWNoZVxfYmVhbVwudXRpbHNcLmFubm90YXRpb25zIG1vZHVsZXK6agAAajlYAABqtGoAAHViYWo3WAAAVQBqOVgAAGqxagAAajpYAAB9crtqAAAoam9aAABdanBaAABdanFaAABdanJaAABdanNaAABdVQphbmNob3JuYW1lVQBVBnJlZnVyaVgdAAAAYXBhY2hlX2JlYW0udXRpbHMuYW5ub3RhdGlvbnNyvGoAAFUIaW50ZXJuYWyIdXViYWo3WAAAVQBqOVgAAGquagAAajpYAAB9cr1qAAAoanBaAABdanFaAABdanJaAABdanNaAABdam9aAABddXViYWo3WAAAVQBqOVgAAGqragAAajpYAAB9cr5qAAAoanBaAABdanFaAABdanJaAABdanNaAABdam9aAABddXViYWo3WAAAVQBqOlgAAH1yv2oAAChqcFoAAF1qcVoAAF1qcloAAF1qc1oAAF1qb1oAAF11dWJqVgEAAGodWAAAKYFywGoAAH1ywWoAAChqIFgAAGrsWwAAaiJYAABdcsJqAABqJFgAACmBcsNqAAB9csRqAAAoaiBYAABq8FsAAGoiWAAAXXLFagAAailYAAApgXLGagAAfXLHagAAKGogWAAAavRbAABqIlgAAF1yyGoAAGouWAAAKYFyyWoAAH1yymoAAChqIFgAAGr4WwAAaiJYAABdcstqAABqM1gAAFglAAAAYXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtIG1vZHVsZXLMagAAhYFyzWoAAH1yzmoAAChqN1gAAFgoAAAAYXBhY2hlXF9iZWFtXC5pb1wubG9jYWxmaWxlc3lzdGVtIG1vZHVsZXLPagAAajlYAABqyWoAAHViYWo3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AFg+AAAAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LmRpc3BsYXlfbWFuYWdlciBtb2R1bGVyVGwAAIWBclVsAAB9clZsAAAoajdYAABqiVsAAGo5WAAAalFsAAB1YmFqN1gAAFUAajpYAAB9cldsAAAoav9YAABdagBZAABdagFZAABdagJZAABdav5YAABddXViaN9qgWsAACmBclhsAAB9cllsAAAoaiBYAABqjGsAAGoiWAAAXXJabAAAajNYAABYHAAAAGFwYWNoZV9iZWFtLmlvLmZsaW5rIHBhY2thZ2VyW2wAAIWBclxsAAB9cl1sAAAoajdYAABqnlsAAGo5WAAAalhsAAB1YmFqN1gAAFUAajpYAAB9cl5sAAAoaltYAABdalxYAABdal1YAABdal5YAABdalpYAABddXViaLxqgWsAACmBcl9sAAB9cmBsAAAoaiBYAABqlGsAAGoiWAAAXXJhbAAAajNYAABYJQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlciBtb2R1bGVyYmwAAIWBcmNsAAB9cmRsAAAoajdYAABqz1sAAGo5WAAAal9sAAB1YmFqN1gAAFUAajpYAAB9cmVsAAAoanlYAABdanpYAABdantYAABdanxYAABdanhYAABddXViaNdqgWsAACmBcmZsAAB9cmdsAAAoaiBYAABq32sAAGoiWAAAXXJobAAAajNYAABYNAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnRlc3RfZGlyZWN0X3J1bm5lciBtb2R1bGVyaWwAAIWBcmpsAAB9cmtsAAAoajdYAABq5FsAAGo5WAAAamZsAAB1YmFqN1gAAFUAajpYAAB9cmxsAAAoardZAABdarhZAABdarlZAABdarpZAABdarZZAABddXViaPpqgWsAACmBcm1sAAB9cm5sAAAoaiBYAABVBXRpdGxlcm9sAABqIlgAAF1ycGwAAGozWAAAWCcAAABhcGFjaGVfYmVhbS5pby5zb3VyY2VfdGVzdF91dGlscyBtb2R1bGVycWwAAIWBcnJsAAB9cnNsAAAoajdYAABq/VsAAGo5WAAAam1sAAB1YmFqN1gAAFUAajpYAAB9cnRsAAAoagBcAABdagFcAABdagJcAABdagNcAABd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SwJo8EsBaPJLAWjzSwFo9EsBaPVLAWj2SwFo90sBaMlLAmj5SwFo2EsBaPtLA2orAQAASwFqTgEAAEsDaP1LAWj+SwFo/0sBagABAABLAWoBAQAASwFqAgEAAEsBagMBAABLAWoEAQAASwFqBQEAAEsBagYBAABLAWoHAQAASwFqCAEAAEsBagkBAABLAWoKAQAASwFqHwEAAEsBagwBAABLAmoNAQAASwFqDgEAAEsBag8BAABLAWohAQAASwFqEQEAAEsDahIBAABLAWjkSwFow0sCahUBAABLAWoWAQAASwNqFwEAAEsBahgBAABLAWoZAQAASwFqGgEAAEsCaPFLAWocAQAASwFqHQEAAEsBah4BAABLAWpbAQAASwFqIAEAAEsBakIBAABLAWoiAQAASwFqIwEAAEsBaiQBAABLAWolAQAASwFqJgEAAEsBaicBAABLAWooAQAASwFqKQEAAEsCaioBAABLA2jMSwFqSgEAAEsBaiwBAABLAWouAQAASwFqLwEAAEsBajABAABLAWotAQAASwFqMgEAAEsBajMBAABLAmo0AQAASwFqNgEAAEsCajcBAABLAWoLAQAASwFqOAEAAEsDajkBAABLAWo6AQAASwFqOwEAAEsBajwBAABLAWo9AQAASwFqPgEAAEsBalABAABLAWpAAQAASwFqQQEAAEsCakMBAABLAmpEAQAASwFqRQEAAEsBakYBAABLAWpHAQAASwFqSAEAAEsBakkBAABLAWi7SwZqSwEAAEsBakwBAABLAWpNAQAASwFo/EsBak8BAABLAWo/AQAASwFqUQEAAEsDajUBAABLAWpTAQAASwFqVAEAAEsBalUBAABLAWpWAQAASwFqVwEAAEsBalgBAABLAWpZAQAASwFqWgEAAEsBalwBAABLAWpdAQAASwFqXgEAAEsBal8BAABLAXVVCmRvbWFpbmRhdGFyLnAAAH1yL3AAAChVA3JzdHIwcAAAfXIxcAAAKFUHb2JqZWN0c3IycAAAfWp9awAASwB1VQNjcHByM3AAAH1yNHAAAChqfWsAAEsAVQtyb290X3N5bWJvbHI1cAAAY3NwaGlueC5kb21haW5zLmNwcApTeW1ib2wKcjZwAAApgXI3cAAAfXI4cAAAKFUMdGVtcGxhdGVBcmdzcjlwAABOVQ50ZW1wbGF0ZVBhcmFtc3I6cAAATlUKaWRlbnRpZmllcnI7cAAATmoiWAAAXVUHZG9jbmFtZXI8cAAATmo5WAAATlULZGVjbGFyYXRpb25yPXAAAE51YlUFbmFtZXNyPnAAAH11VQFjfXI/cAAAKGoycAAAfWp9awAASwB1VQNzdGRyQHAAAH1yQXAAAChVCWNpdGF0aW9uc3JCcAAAfWp9awAASwBVBmxhYmVsc3JDcAAAfXJEcAAAKFUGc2VhcmNockVwAABqRXAAAFUAY3NwaGlueC5sb2NhbGUKX1RyYW5zbGF0aW9uUHJveHkKckZwAABjc3BoaW54LmxvY2FsZQpteWdldHRleHQKckdwAABVC1NlYXJjaCBQYWdlckhwAACGgXJJcAAAakdwAABqSHAAAIVySnAAAIZih1UIbW9kaW5kZXhyS3AAAFULcHktbW9kaW5kZXhyTHAAAFUAakZwAABqR3AAAFUMTW9kdWxlIEluZGV4ck1wAACGgXJOcAAAakdwAABqTXAAAIVyT3AAAIZih1UIZ2VuaW5kZXhyUHAAAGpQcAAAVQBqRnAAAGpHcAAAVQVJbmRleHJRcAAAhoFyUnAAAGpHcAAAalFwAACFclNwAACGYod1VQtwcm9nb3B0aW9uc3JUcAAAfWoycAAAfVUKYW5vbmxhYmVsc3JVcAAAfXJWcAAAKGpFcAAAakVwAABVAIZyV3AAAGpLcAAAVQtweS1tb2RpbmRleFUAhnJYcAAAalBwAABqUHAAAFUAhnJZcAAAdVUNY2l0YXRpb25fcmVmc3JacAAAfXVVAnB5cltwAAB9clxwAAAoajJwAAB9cl1wAAAoWDMAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuUGFyRG8uaW5mZXJfb3V0cHV0X3R5cGVyXnAAAGqMXwAAWAYAAABtZXRob2RyX3AAAIZYNQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5SZXBlYXRlZGx5LnNob3VsZF9maXJlcmBwAABq0VsAAFgGAAAAbWV0aG9kcmFwAACGWDgAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlR1cGxlU2VxdWVuY2VDb2Rlci52YWx1ZV9jb2RlcnJicAAAau9nAABYBgAAAG1ldGhvZIZYKAAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmlucGFsY2Vfb3JyY3AAAGp9WAAAWAgAAABmdW5jdGlvbnJkcAAAhlg+AAAAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoZV9tYW5hZ2VyLlJlYWRDYWNoZS5leHBhbmRyZXAAAGoDWQAAWAYAAABtZXRob2SGWDwAAABhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWNoZWNrLlR5cGVDaGVja1dyYXBwZXJEb0ZuLnByb2Nlc3NyZnAAAGpnZAAAWAYAAABtZXRob2RyZ3AAAIZYMAAAAGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5PdXRwdXRTdHJlYW0uc2l6ZXJocAAAagRfAABYBgAAAG1ldGhvZIZYXwAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZGF0YXN0b3JlaW8uUmVhZEZyb21EYXRhc3RvcmUucXVlcnlfbGF0ZXN0X3N0YXRpc3RpY3NfdGltZXN0YW1wcmlwAABqOWUAAFgMAAAAc3RhdGljbWV0aG9khlgtAAAAYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsubW9kZWxzcmpwAABqtVQAAFUGbW9kdWxlcmtwAACGWD0AAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlR1cGxlU2VxdWVuY2VDb2Rlci5pc19kZXRlcm1pbmlzdGljcmxwAABq72cAAFgGAAAAbWV0aG9khlgwAAAAYXBhY2hlX2JlYW0uaW8uaGFkb29wZmlsZXN5c3RlbS5IYWRvb3BGaWxlU3lzdGVtcm1wAABqQmEAAFgFAAAAY2xhc3OGWBYAAABhcGFjaGVfYmVhbS51dGlscy51cm5zcm5wAABqdFoAAFUGbW9kdWxlcm9wAACGWFIAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2FuYWx5emVyLlBpcGVsaW5lQW5hbHl6ZXIud3JpdGVfY2FjaGVfaWRzcnBwAABq+10AAFgGAAAAbWV0aG9khlglAAAAYXBhY2hlX2JlYW0uaW8uYXZyb2lvLlJlYWRBbGxGcm9tQXZyb3JxcAAAal9YAABYBQAAAGNsYXNzhlgwAAAAYXBhY2hlX2JlYW0ucnVubmVycy5zZGZfY29tbW9uLlJhbmRvbVVuaXF1ZUtleUZucnJwAABq/lwAAFgFAAAAY2xhc3OGWDQAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmhlbHBlci5nZXRfZGF0YXN0b3JlcnNwAABqhV0AAFgIAAAAZnVuY3Rpb26GWDgAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZS5Vc2VyU3RhdGVDb250ZXh0LmNvbW1pdHJ0cAAAaohgAABYBgAAAG1ldGhvZHJ1cAAAhlhWAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLk5hdGl2ZVNvdXJjZVJlYWRlci5yZXF1ZXN0X2R5bmFtaWNfc3BsaXRydnAAAGrGaQAAWAYAAABtZXRob2SGWC4AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnNpZGVpbnB1dHMuU2lkZUlucHV0TWFwcndwAABq2mMAAFgFAAAAY2xhc3NyeHAAAIZYKwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Eb0ZuLlN0YXRlUGFyYW1yeXAAAGqMXwAAWAkAAABhdHRyaWJ1dGVyenAAAIZYVgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyLmdyb3VwX2J5X2tleV9pbnB1dF92aXNpdG9ycntwAABqV2EAAFgMAAAAc3RhdGljbWV0aG9khlg+AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyUHJvY2Vzc2luZ1RpbWUuc2hvdWxkX2ZpcmVyfHAAAGrRWwAAWAYAAABtZXRob2RyfXAAAIZYPwAAAGFwYWNoZV9iZWFtLmlvLnNvdXJjZV90ZXN0X3V0aWxzLmFzc2VydF9yZWVudHJhbnRfcmVhZHNfc3VjY2VlZHJ+cAAAagRcAABYCAAAAGZ1bmN0aW9uhlhGAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUuQ29tYmluaW5nVmFsdWVTdGF0ZVNwZWMudG9fcnVubmVyX2FwaXJ/cAAAaohgAABYBgAAAG1ldGhvZHKAcAAAhlg7AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyV2F0ZXJtYXJrLnRvX3J1bm5lcl9hcGlygXAAAGrRWwAAWAYAAABtZXRob2RygnAAAIZYNQAAAGFwYWNoZV9iZWFtLmlvLmxvY2FsZmlsZXN5c3RlbS5Mb2NhbEZpbGVTeXN0ZW0uZGVsZXRlcoNwAABq0WoAAFgGAAAAbWV0aG9khlhHAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuU2FtcGxlLkZpeGVkU2l6ZUdsb2JhbGx5LmRlZmF1bHRfbGFiZWxyhHAAAGpeYwAAWAYAAABtZXRob2SGWDkAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlNpbmdsZXRvbkNvZGVyLmlzX2RldGVybWluaXN0aWNyhXAAAGrvZwAAWAYAAABtZXRob2SGWDYAAABhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYy5NZXRyaWNzLkRlbGVnYXRpbmdHYXVnZS5zZXRyhnAAAGr+aAAAWAYAAABtZXRob2SGWDQAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuUGFyRG8uZGVmYXVsdF90eXBlX2hpbnRzcodwAABqjF8AAFgGAAAAbWV0aG9kcohwAACGWCcAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXlyiXAAAGpJVAAAVQZtb2R1bGVyinAAAIZYOAAAAGFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNvdXJjZS5GaWxlQmFzZWRTb3VyY2Uub3Blbl9maWxlcotwAABqZGsAAFgGAAAAbWV0aG9khlg8AAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLkhhZG9vcEZpbGVTeXN0ZW1PcHRpb25zcoxwAABqiVoAAFgFAAAAY2xhc3OGWEMAAABhcGFjaGVfYmVhbS50b29scy5kaXN0cmlidXRpb25fY291bnRlcl9taWNyb2JlbmNobWFyay5ydW5fYmVuY2htYXJrco1wAABqYl8AAFgIAAAAZnVuY3Rpb26GWDkAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5Cb3VuZGVkV2luZG93Lm1heF90aW1lc3RhbXByjnAAAGpSZAAAWAYAAABtZXRob2Ryj3AAAIZYbAAAAGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yLkVSUl9JTlZBTElEX1RFU1RfTUFUQ0hFUl9VTlBJQ0tMQUJMRXKQcAAAau5gAABYCQAAAGF0dHJpYnV0ZYZYNwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLlNhbXBsZS5GaXhlZFNpemVQZXJLZXlykXAAAGpeYwAAWAUAAABjbGFzc4ZYLgAAAGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljLk1ldHJpY3NGaWx0ZXIubmFtZXNyknAAAGr+aAAAWAkAAABhdHRyaWJ1dGWGWCsAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5iaW5hcnlfcnNoaWZ0cpNwAABqfVgAAFgIAAAAZnVuY3Rpb25ylHAAAIZYMgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LkludGVydmFsV2luZG93LnVuaW9ucpVwAABqUmQAAFgGAAAAbWV0aG9kcpZwAACGWDYAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZS5SdW50aW1lU3RhdGUuZm9yX3NwZWNyl3AAAGqIYAAAWAwAAABzdGF0aWNtZXRob2RymHAAAIZYIwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5JbXB1bHNlcplwAABqjF8AAFgFAAAAY2xhc3NymnAAAIZYKAAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQ29kZXIuZ2V0X2ltcGxym3AAAGrvZwAAWAYAAABtZXRob2SGWCoAAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkZpbGVTeXN0ZW0ubWF0Y2hynHAAAGoZXAAAWAYAAABtZXRob2SGWDkAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlRpbWVzdGFtcENvZGVyLmlzX2RldGVybWluaXN0aWNynXAAAGrvZwAAWAYAAABtZXRob2SGWDcAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5zdHJlYW1pbmdfY3JlYXRlcp5wAABqwGEAAFUGbW9kdWxlcp9wAACGWEAAAABhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5VbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIudHJ5X2NsYWltcqBwAABq1FwAAFgGAAAAbWV0aG9khlhGAAAAYXBhY2hlX2JlYW0udGVzdGluZy5waXBlbGluZV92ZXJpZmllcnMuRmlsZUNoZWNrc3VtTWF0Y2hlci5kZXNjcmliZV90b3KhcAAAag1bAABYBgAAAG1ldGhvZIZYPQAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuV2luZG93ZWRWYWx1ZUNvZGVyLmlzX2RldGVybWluaXN0aWNyonAAAGrvZwAAWAYAAABtZXRob2SGWFMAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9hcnRpZmFjdF9hcGlfcGIyX2dycGMuQXJ0aWZhY3RSZXRyaWV2YWxTZXJ2aWNlU3R1YnKjcAAAaiRmAABYBQAAAGNsYXNzhlg0AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuQ291bnQuUGVyS2V5LmV4cGFuZHKkcAAAal5jAABYBgAAAG1ldGhvZIZYSAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnRyYW5zZm9ybV9ldmFsdWF0b3IuRGVmYXVsdFJvb3RCdW5kbGVQcm92aWRlcnKlcAAAahpqAABYBQAAAGNsYXNzhlg9AAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlLkZyYW1lU3RhdGUuY29uc3RfdHlwZXKmcAAAarFpAABYBgAAAG1ldGhvZHKncAAAhlg6AAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuaGVscGVyX3RyYW5zZm9ybXMuRmluaXNoQ29tYmluZXKocAAAai1hAABYBQAAAGNsYXNzhlhCAAAAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoZV9tYW5hZ2VyLkNhY2hlTWFuYWdlci5jbGVhbnVwcqlwAABqA1kAAFgGAAAAbWV0aG9khlg1AAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW0uR0NTRmlsZVN5c3RlbS5jcmVhdGVyqnAAAGomYAAAWAYAAABtZXRob2SGWBUAAABhcGFjaGVfYmVhbS5pby50ZXh0aW9yq3AAAGqhXwAAVQZtb2R1bGVyrHAAAIZYKgAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmxvYWRfY2xvc3VyZXKtcAAAan1YAABYCAAAAGZ1bmN0aW9ucq5wAACGWDoAAABhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2UuVHlwZUluZmVyZW5jZUVycm9ycq9wAABqsWkAAFgJAAAAZXhjZXB0aW9ucrBwAACGWDYAAABhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVJ1bm5lci5ydW5fcGlwZWxpbmVysXAAAGo3WwAAWAYAAABtZXRob2SGWCsAAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkZpbGVTeXN0ZW0uZGVsZXRlcrJwAABqGVwAAFgGAAAAbWV0aG9khlgdAAAAYXBhY2hlX2JlYW0uY29kZXJzLm9ic2VydmFibGVys3AAAGp8ZAAAVQZtb2R1bGVytHAAAIZYMgAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuYWRhcHRpdmVfdGhyb3R0bGVycrVwAABqpmQAAFUGbW9kdWxlcrZwAACGWDMAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUZuLmRlZmF1bHRfbGFiZWxyt3AAAGqMXwAAWAYAAABtZXRob2RyuHAAAIZYWgAAAGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLlVuc3BsaXR0YWJsZVJhbmdlVHJhY2tlci5zZXRfc3BsaXRfcG9pbnRzX3VuY2xhaW1lZF9jYWxsYmFja3K5cAAAatRcAABYBgAAAG1ldGhvZIZYMAAAAGFwYWNoZV9iZWFtLmludGVybmFsLmdjcC5hdXRoLnNldF9ydW5uaW5nX2luX2djZXK6cAAAai5oAABYCAAAAGZ1bmN0aW9uhlg+AAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5UdXBsZUNvZGVyLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXJyu3AAAGrvZwAAWAwAAABzdGF0aWNtZXRob2SGWC8AAABhcGFjaGVfYmVhbS50eXBlaGludHMubmF0aXZlX3R5cGVfY29tcGF0aWJpbGl0eXK8cAAAag9lAABVBm1vZHVsZXK9cAAAhlgkAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5GaWxlU3lzdGVtcr5wAABqGVwAAFgFAAAAY2xhc3OGWEoAAABhcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHMubG9hZF90ZXN0X21ldHJpY3NfdXRpbHMuTWVhc3VyZVRpbWUucHJvY2Vzc3K/cAAAahRnAABYBgAAAG1ldGhvZIZYMAAAAGFwYWNoZV9iZWFtLnV0aWxzLnRpbWVzdGFtcC5UaW1lc3RhbXAudG9fcmZjMzMzOXLAcAAAaoFhAABYBgAAAG1ldGhvZHLBcAAAhlgtAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMucmVuYW1lcsJwAABqx1gAAFgMAAAAc3RhdGljbWV0aG9khlhrAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IudmFsaWRhdGVfb3B0aW9uYWxfYXJndW1lbnRfcG9zaXRpdmVyw3AAAGruYAAAWAYAAABtZXRob2SGWE0AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UuUmVhZGVyUHJvZ3Jlc3MucGVyY2VudF9jb21wbGV0ZXLEcAAAasZpAABYCQAAAGF0dHJpYnV0ZYZYNQAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuUHJvdG9Db2Rlci5pc19kZXRlcm1pbmlzdGljcsVwAABq72cAAFgGAAAAbWV0aG9khlhFAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIucnVuX1BhckRvcsZwAABqV2EAAFgGAAAAbWV0aG9khlhKAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVjaGVjay5UeXBlQ2hlY2tWaXNpdG9yLmVudGVyX2NvbXBvc2l0ZV90cmFuc2Zvcm1yx3AAAGpnZAAAWAYAAABtZXRob2RyyHAAAIZYEgAAAGFwYWNoZV9iZWFtLnB2YWx1ZXLJcAAAak5mAABqn3AAAIZYOQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlcldhdGVybWFyay5zaG91bGRfZmlyZXLKcAAAatFbAABYBgAAAG1ldGhvZHLLcAAAhlg2AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuQ291bnQuR2xvYmFsbHkuZXhwYW5kcsxwAABqXmMAAFgGAAAAbWV0aG9khlgwAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlci5WYWx1ZVByb3ZpZGVycs1wAABqnloAAFgFAAAAY2xhc3OGWCsAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jbG9jay5DbG9jay50aW1lcs5wAABqD2YAAFgGAAAAbWV0aG9khlg4AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm4udG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJyz3AAAGqMXwAAWAYAAABtZXRob2Ry0HAAAIZYPQAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuVmFySW50Q29kZXIudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJy0XAAAGrvZwAAWAYAAABtZXRob2SGWDAAAABhcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmFuZ2VUcmFja2VyLnN0b3BfcG9zaXRpb25y0nAAAGqRZAAAWAYAAABtZXRob2SGWDMAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJDb3VudC5DT1VOVF9UQUdy03AAAGrRWwAAWAkAAABhdHRyaWJ1dGVy1HAAAIZYQQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5QYXJEby5ydW5uZXJfYXBpX3JlcXVpcmVzX2tleWVkX2lucHV0ctVwAABqjF8AAFgGAAAAbWV0aG9kctZwAACGWDMAAABhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2UuQm91bmRNZXRob2Ry13AAAGqxaQAAWAUAAABjbGFzc3LYcAAAhlglAAAAYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wLlRpbWVzdGFtcHLZcAAAaoFhAABYBQAAAGNsYXNzctpwAACGWCgAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlRpbWVzdGFtcENvZGVycttwAABq72cAAFgFAAAAY2xhc3OGWCEAAABhcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmVhZC5leHBhbmRy3HAAAGqRZAAAWAYAAABtZXRob2SGWDUAAABhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuUHJvZmlsaW5nT3B0aW9uc3LdcAAAaolaAABYBQAAAGNsYXNzhlgxAAAAYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVTdGF0ZS5TVEFSVElOR3LecAAAajdbAABYCQAAAGF0dHJpYnV0ZYZYJAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMucGlwZWxpbmVfY29udGV4dHLfcAAAarBnAABqinAAAIZYMwAAAGFwYWNoZV9iZWFtLmlvLmdjcC5nY3NmaWxlc3lzdGVtLkdDU0ZpbGVTeXN0ZW0uY29weXLgcAAAaiZgAABYBgAAAG1ldGhvZIZYHwAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjFy4XAAAGoOVAAAarZwAACGWCsAAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtaW8uRG93bmxvYWRlci5zaXplcuJwAABq2mcAAFgJAAAAYXR0cmlidXRlhlgeAAAAYXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9ucuNwAABqTmYAAFgFAAAAY2xhc3OGWCkAAABhcGFjaGVfYmVhbS51dGlscy5wcm90b191dGlscy5wYWNrX1N0cnVjdHLkcAAAahRiAABYCAAAAGZ1bmN0aW9ucuVwAACGWFEAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmRhdGFzdG9yZWlvLlJlYWRGcm9tRGF0YXN0b3JlLlJlYWRGbi5kaXNwbGF5X2RhdGFy5nAAAGo5ZQAAWAYAAABtZXRob2SGWDcAAABhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpY2Jhc2UuTWV0cmljTmFtZS50b19ydW5uZXJfYXBpcudwAABqm2cAAFgGAAAAbWV0aG9khlhSAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5wdHJhbnNmb3JtX292ZXJyaWRlcy5DcmVhdGVQVHJhbnNmb3JtT3ZlcnJpZGUubWF0Y2hlc3LocAAAavBpAABYBgAAAG1ldGhvZIZYUQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfYW5hbHl6ZXIuUGlwZWxpbmVBbmFseXplci5yZWFkX2NhY2hlX2lkc3LpcAAAavtdAABYBgAAAG1ldGhvZIZYJwAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmxvYWRfYXR0cnLqcAAAan1YAABYCAAAAGZ1bmN0aW9ucutwAACGWDsAAABhcGFjaGVfYmVhbS5pby5sb2NhbGZpbGVzeXN0ZW0uTG9jYWxGaWxlU3lzdGVtLmxhc3RfdXBkYXRlZHLscAAAatFqAABYBgAAAG1ldGhvZIZYLwAAAGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SYW5nZVRyYWNrZXIuc3BsaXRfcG9pbnRzcu1wAABqkWQAAFgGAAAAbWV0aG9khlhaAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IuUFJPSkVDVF9JRF9QQVRURVJOcu5wAABq7mAAAFgJAAAAYXR0cmlidXRlhlg5AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm0ucmVnaXN0ZXJfdXJucu9wAABqTV8AAFgLAAAAY2xhc3NtZXRob2Ry8HAAAIZYKAAAAGFwYWNoZV9iZWFtLmlvLnV0aWxzLkNvdW50aW5nU291cmNlLnJlYWRy8XAAAGpDXAAAWAYAAABtZXRob2SGWEcAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lci5ydW5fRmxhdHRlbnLycAAAaldhAABYBgAAAG1ldGhvZIZYRwAAAGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9waXBlbGluZS5UZXN0UGlwZWxpbmUuZ2V0X2Z1bGxfb3B0aW9uc19hc19hcmdzcvNwAABqxWcAAFgGAAAAbWV0aG9khlhuAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIuQ3JlYXRlUFRyYW5zZm9ybU92ZXJyaWRlLmdldF9yZXBsYWNlbWVudF90cmFuc2Zvcm1y9HAAAGpXYQAAWAYAAABtZXRob2SGWCsAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5iaW5hcnlfc3Vic2NycvVwAABqfVgAAFgIAAAAZnVuY3Rpb25y9nAAAIZYKAAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pby5VcGxvYWRlci5wdXRy93AAAGraZwAAWAYAAABtZXRob2SGWFAAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2FuYWx5emVyLlBpcGVsaW5lQW5hbHl6ZXIucGlwZWxpbmVfaW5mb3L4cAAAavtdAABYBgAAAG1ldGhvZIZYMQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlNsaWRpbmdXaW5kb3dzLnNpemVy+XAAAGpSZAAAWAkAAABhdHRyaWJ1dGVy+nAAAIZYIQAAAGFwYWNoZV9iZWFtLmlvLmF2cm9pby5Xcml0ZVRvQXZyb3L7cAAAal9YAABYBQAAAGNsYXNzhlgnAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLnB1YnN1Yi5Xcml0ZVRvUHViU3VicvxwAABqG1oAAFgFAAAAY2xhc3OGWC8AAABhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkuQmlnUXVlcnlTaW5rLndyaXRlcnL9cAAAarNaAABYBgAAAG1ldGhvZIZYMgAAAGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZS5EaXN0cmlidXRpb24udXBkYXRlcv5wAABqm2cAAFgGAAAAbWV0aG9khlgsAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuTWVhbi5QZXJLZXly/3AAAGpeYwAAWAUAAABjbGFzc4ZYMgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckVhY2guSU5ERVhfVEFHcgBxAABq0VsAAFgJAAAAYXR0cmlidXRlcgFxAACGWDwAAABhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2UuRmlsZUJhc2VkU291cmNlLmVzdGltYXRlX3NpemVyAnEAAGpkawAAWAYAAABtZXRob2SGWDQAAABhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbS5HQ1NGaWxlU3lzdGVtLnNwbGl0cgNxAABqJmAAAFgGAAAAbWV0aG9khlg3AAAAYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc2luay5GaWxlQmFzZWRTaW5rLnByZV9maW5hbGl6ZXIEcQAAandfAABYBgAAAG1ldGhvZIZYPgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtLmluZmVyX291dHB1dF90eXBlcgVxAABqTV8AAFgGAAAAbWV0aG9kcgZxAACGWDQAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ3JlYXRlLmluZmVyX291dHB1dF90eXBlcgdxAABqjF8AAFgGAAAAbWV0aG9kcghxAACGWCMAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy51bmFyeXIJcQAAan1YAABYCAAAAGZ1bmN0aW9ucgpxAACGWEwAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkucGlwZWxpbmVfZ3JhcGhfcmVuZGVyZXIuTXV0ZVJlbmRlcmVycgtxAABqxWMAAFgFAAAAY2xhc3OGWEUAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuR3JvdXBCeUtleS5SZWlmeVdpbmRvd3MuaW5mZXJfb3V0cHV0X3R5cGVyDHEAAGqMXwAAWAYAAABtZXRob2RyDXEAAIZYGQAAAGFwYWNoZV9iZWFtLnB2YWx1ZS5Bc0l0ZXJyDnEAAGpOZgAAWAUAAABjbGFzc4ZYTAAAAGFwYWNoZV9iZWFtLnRlc3RpbmcucGlwZWxpbmVfdmVyaWZpZXJzLkZpbGVDaGVja3N1bU1hdGNoZXIuZGVzY3JpYmVfbWlzbWF0Y2hyD3EAAGoNWwAAWAYAAABtZXRob2SGWDcAAABhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uQnl0ZUNvdW50aW5nT3V0cHV0U3RyZWFtchBxAABqBF8AAFgFAAAAY2xhc3OGWDIAAABhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkuV3JpdGVUb0JpZ1F1ZXJ5LmV4cGFuZHIRcQAAarNaAABYBgAAAG1ldGhvZIZYRAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZS5OYXRpdmVTaW5rV3JpdGVyLldyaXRlchJxAABqxmkAAFgGAAAAbWV0aG9khlg6AAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLk5hdGl2ZVNvdXJjZXITcQAAasZpAABYBQAAAGNsYXNzhlg5AAAAYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWMuTWV0cmljcy5EZWxlZ2F0aW5nRGlzdHJpYnV0aW9uchRxAABq/mgAAFgFAAAAY2xhc3OGWEAAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfcnVubmVyLkJ1bmRsZUJhc2VkRGlyZWN0UnVubmVychVxAABq0GQAAFgFAAAAY2xhc3OGWCwAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRG9Gbi5XaW5kb3dQYXJhbXIWcQAAaoxfAABYCQAAAGF0dHJpYnV0ZXIXcQAAhlhUAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjLmFkZF9CZWFtRm5Mb2dnaW5nU2VydmljZXJfdG9fc2VydmVychhxAABqJWsAAFgIAAAAZnVuY3Rpb26GWDMAAABhcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZS5kaXZfcm91bmRfdXByGXEAAGrLXwAAWAgAAABmdW5jdGlvboZYQgAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3Npb25UeXBlcy5kZXRlY3RfY29tcHJlc3Npb25fdHlwZXIacQAAahlcAABYCwAAAGNsYXNzbWV0aG9khlhLAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X3J1bm5lci5Td2l0Y2hpbmdEaXJlY3RSdW5uZXIucnVuX3BpcGVsaW5lchtxAABq0GQAAFgGAAAAbWV0aG9khlgiAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsLkt2U3dhcHIccQAAajprAABYCAAAAGZ1bmN0aW9uch1xAACGWFIAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lci5Qcm9jZXNzS2V5ZWRFbGVtZW50c1ZpYUtleWVkV29ya0l0ZW1zch5xAABq5WQAAFgFAAAAY2xhc3OGWDEAAABhcGFjaGVfYmVhbS50b29scy5jb2RlcnNfbWljcm9iZW5jaG1hcmsuc21hbGxfaW50ch9xAABqhmIAAFgIAAAAZnVuY3Rpb26GWDIAAABhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWNoZWNrLlR5cGVDaGVja0NvbWJpbmVGbnIgcQAAamdkAABYBQAAAGNsYXNzciFxAACGWDYAAABhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzaW5rLkZpbGVCYXNlZFNpbmsub3Blbl93cml0ZXJyInEAAGp3XwAAWAYAAABtZXRob2SGWCgAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlNpbmdsZXRvbkNvZGVyciNxAABq72cAAFgFAAAAY2xhc3OGWCQAAABhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpY2Jhc2UuR2F1Z2VyJHEAAGqbZwAAWAUAAABjbGFzc4ZYMAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lVmFsdWVzLmV4cGFuZHIlcQAAaoxfAABYBgAAAG1ldGhvZHImcQAAhlg+AAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5mYWtlX2RhdGFzdG9yZS5jcmVhdGVfcmVzcG9uc2VyJ3EAAGrlWAAAWAgAAABmdW5jdGlvboZYOgAAAGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLnF1ZXJpZXMucXVlcnkyLmxvYWRyKHEAAGpMWwAAWAgAAABmdW5jdGlvboZYQgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlclByb2Nlc3NpbmdUaW1lLmZyb21fcnVubmVyX2FwaXIpcQAAatFbAABYDAAAAHN0YXRpY21ldGhvZHIqcQAAhlhHAAAAYXBhY2hlX2JlYW0uaW8ucmVzdHJpY3Rpb25fdHJhY2tlcnMuT2Zmc2V0UmVzdHJpY3Rpb25UcmFja2VyLmNoZWNrX2RvbmVyK3EAAGrUaAAAWAYAAABtZXRob2SGWEQAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkZhc3RQcmltaXRpdmVzQ29kZXIuYXNfZGV0ZXJtaW5pc3RpY19jb2RlcnIscQAAau9nAABYBgAAAG1ldGhvZIZYNQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV4ZWN1dG9yLkV4ZWN1dG9yLnNodXRkb3duci1xAABq6WgAAFgGAAAAbWV0aG9khlg7AAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuY29tbW9uX3VybnMuUHJvcGVydGllc0Zyb21FbnVtVmFsdWVyLnEAAGrBZgAAWAUAAABjbGFzc4ZYUQAAAGFwYWNoZV9iZWFtLmlvLnNvdXJjZV90ZXN0X3V0aWxzLmFzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9zdWNjZWVkc19hbmRfY29uc2lzdGVudHIvcQAAagRcAABYCAAAAGZ1bmN0aW9uhlgUAAAAYXBhY2hlX2JlYW0uaW50ZXJuYWxyMHEAAGodVAAAarRwAACGWCAAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZXIxcQAAaohgAABqvXAAAIZYXAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyLkNyZWF0ZVBUcmFuc2Zvcm1PdmVycmlkZS5tYXRjaGVzcjJxAABqV2EAAFgGAAAAbWV0aG9khlgxAAAAYXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZS5Db25jYXRTb3VyY2Uuc291cmNlc3IzcQAAak9rAABYCQAAAGF0dHJpYnV0ZYZYQQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlLkNvbWJpbmluZ1ZhbHVlUnVudGltZVN0YXRlLmNsZWFycjRxAABqiGAAAFgGAAAAbWV0aG9kcjVxAACGWDcAAABhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyLlJ1bnRpbWVWYWx1ZVByb3ZpZGVycjZxAABqnloAAFgFAAAAY2xhc3OGWCYAAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtcy5GaWxlU3lzdGVtc3I3cQAAasdYAABYBQAAAGNsYXNzhlg0AAAAYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJhbmdlVHJhY2tlci5mcmFjdGlvbl9jb25zdW1lZHI4cQAAapFkAABYBgAAAG1ldGhvZIZYOQAAAGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLk9yZGVyZWRQb3NpdGlvblJhbmdlVHJhY2tlcnI5cQAAatRcAABYBQAAAGNsYXNzhlg8AAAAYXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmUuU2h1ZmZsZUJhcnJpZXIuZXhwYW5kcjpxAABqy18AAFgGAAAAbWV0aG9khlg8AAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5oZWxwZXIubWFrZV9raW5kX3N0YXRzX3F1ZXJ5cjtxAABqhV0AAFgIAAAAZnVuY3Rpb26GWFsAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5oZWxwZXJfdHJhbnNmb3Jtcy5QYXJ0aWFsR3JvdXBCeUtleUNvbWJpbmluZ1ZhbHVlcy5maW5pc2hfYnVuZGxlcjxxAABqLWEAAFgGAAAAbWV0aG9khlgyAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVHbG9iYWxseS5leHBhbmRyPXEAAGqMXwAAWAYAAABtZXRob2RyPnEAAIZYOwAAAGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm5leG1hcmtfdXRpbC5kaXNwbGF5cj9xAABqEWAAAFgIAAAAZnVuY3Rpb26GWCwAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwuUmVzaHVmZmxlLmV4cGFuZHJAcQAAajprAABYBgAAAG1ldGhvZHJBcQAAhlgnAAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5JdGVyYWJsZUNvZGVyckJxAABq72cAAFgFAAAAY2xhc3OGWEQAAABhcGFjaGVfYmVhbS5ydW5uZXJzLnBpcGVsaW5lX2NvbnRleHQuUGlwZWxpbmVDb250ZXh0LmZyb21fcnVubmVyX2FwaXJDcQAAarBnAABYDAAAAHN0YXRpY21ldGhvZIZYOQAAAGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9waXBlbGluZS5UZXN0UGlwZWxpbmUuZ2V0X29wdGlvbnJEcQAAasVnAABYBgAAAG1ldGhvZIZYGQAAAGFwYWNoZV9iZWFtLmludGVybmFsLnV0aWxyRXEAAGqbYgAAarRwAACGWDUAAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtaW8uRG93bmxvYWRlclN0cmVhbS5zZWVrYWJsZXJGcQAAatpnAABYBgAAAG1ldGhvZIZYTAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyLnJ1bl9fTmF0aXZlV3JpdGVyR3EAAGpXYQAAWAYAAABtZXRob2SGWDMAAABhcGFjaGVfYmVhbS50b29scy5jb2RlcnNfbWljcm9iZW5jaG1hcmsubGFyZ2VfdHVwbGVySHEAAGqGYgAAWAgAAABmdW5jdGlvboZYVQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dC5FdmFsdWF0aW9uQ29udGV4dC5nZXRfYWdncmVnYXRvcl92YWx1ZXNySXEAAGr6ZAAAWAYAAABtZXRob2SGWG0AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jb25zdW1lcl90cmFja2luZ19waXBlbGluZV92aXNpdG9yLkNvbnN1bWVyVHJhY2tpbmdQaXBlbGluZVZpc2l0b3IudmlzaXRfdHJhbnNmb3JtckpxAABqEF4AAFgGAAAAbWV0aG9khlgsAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsLlJlbW92ZUR1cGxpY2F0ZXNyS3EAAGo6awAAWAgAAABmdW5jdGlvbnJMcQAAhlguAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLlRyaWdnZXJGbi5yZXNldHJNcQAAatFbAABYBgAAAG1ldGhvZHJOcQAAhlg4AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm0uc2lkZV9pbnB1dHNyT3EAAGpNXwAAWAkAAABhdHRyaWJ1dGVyUHEAAIZYUgAAAGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yLkdDU19CVUNLRVRyUXEAAGruYAAAWAkAAABhdHRyaWJ1dGWGWC4AAABhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uZ2V0X3ZhcmludF9zaXplclJxAABqBF8AAFgIAAAAZnVuY3Rpb26GWC4AAABhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2UuRmlsZUJhc2VkU291cmNlclNxAABqZGsAAFgFAAAAY2xhc3OGWFMAAABhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci5KT0JfUEFUVEVSTnJUcQAAau5gAABYCQAAAGF0dHJpYnV0ZYZYNQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlLkJhZ1J1bnRpbWVTdGF0ZS5yZWFkclVxAABqiGAAAFgGAAAAbWV0aG9kclZxAACGWCcAAABhcGFjaGVfYmVhbS5pby5nY3AuZ2NzaW8uR2NzSU8uY2hlY2tzdW1yV3EAAGpjZgAAWAYAAABtZXRob2SGWCQAAABhcGFjaGVfYmVhbS50ZXN0aW5nLnV0aWwub3Blbl9zaGFyZHNyWHEAAGoSYwAAWAgAAABmdW5jdGlvboZYEwAAAGFwYWNoZV9iZWFtLnRlc3RpbmdyWXEAAGo6VAAAamtwAACGWC0AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC51dGlsLktleWVkV29ya0l0ZW1yWnEAAGrlZQAAWAUAAABjbGFzc4ZYSwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMucGlwZWxpbmVfY29udGV4dC5QaXBlbGluZUNvbnRleHQuZGVmYXVsdF9lbnZpcm9ubWVudF9pZHJbcQAAarBnAABYBgAAAG1ldGhvZIZYRgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9tZXRyaWNzLkRpcmVjdE1ldHJpYy5jb21taXRfcGh5c2ljYWxyXHEAAGoGWgAAWAYAAABtZXRob2SGWE8AAABhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5uZXhtYXJrX2xhdW5jaGVyLk5leG1hcmtMYXVuY2hlci5jbGVhbnVwcl1xAABq/2EAAFgGAAAAbWV0aG9khlgsAAAAYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJhbmdlVHJhY2tlci50cnlfY2xhaW1yXnEAAGqRZAAAWAYAAABtZXRob2SGWDUAAABhcGFjaGVfYmVhbS5pby5oYWRvb3BmaWxlc3lzdGVtLkhhZG9vcEZpbGVTeXN0ZW0ub3BlbnJfcQAAakJhAABYBgAAAG1ldGhvZIZYOAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLkNvdW50LlBlckVsZW1lbnQuZXhwYW5kcmBxAABqXmMAAFgGAAAAbWV0aG9khlg5AAAAYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc291cmNlLkZpbGVCYXNlZFNvdXJjZS5zcGxpdHRhYmxlcmFxAABqZGsAAFgJAAAAYXR0cmlidXRlhlg8AAAAYXBhY2hlX2JlYW0udG9vbHMuY29kZXJzX21pY3JvYmVuY2htYXJrLnJ1bl9jb2Rlcl9iZW5jaG1hcmtzcmJxAABqhmIAAFgIAAAAZnVuY3Rpb26GWDcAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9wcm92aXNpb25fYXBpX3BiMl9ncnBjcmNxAABqqmgAAFUGbW9kdWxlcmRxAACGWCIAAABhcGFjaGVfYmVhbS51dGlscy5wcm9maWxlci5Qcm9maWxlcmVxAABqA2EAAFgFAAAAY2xhc3NyZnEAAIZYJwAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLnBvcF90aHJlZXJncQAAan1YAABYCAAAAGZ1bmN0aW9ucmhxAACGWC8AAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzaW9uVHlwZXMuQVVUT3JpcQAAahlcAABYCQAAAGF0dHJpYnV0ZYZYUgAAAGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm5leG1hcmtfbGF1bmNoZXIuTmV4bWFya0xhdW5jaGVyLnBhcnNlX2FyZ3NyanEAAGr/YQAAWAYAAABtZXRob2SGWDAAAABhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWNoZWNrLlR5cGVDaGVja1Zpc2l0b3Jya3EAAGpnZAAAWAUAAABjbGFzc3JscQAAhlhRAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy50ZXN0X2RhdGFmbG93X3J1bm5lci5UZXN0RGF0YWZsb3dSdW5uZXIucnVuX3BpcGVsaW5lcm1xAABqv2gAAFgGAAAAbWV0aG9khlg6AAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuY29tbW9uX3VybnMuUHJvcGVydGllc0Zyb21FbnVtVHlwZXJucQAAasFmAABYBQAAAGNsYXNzhlhCAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5oZWxwZXIubWFrZV9sYXRlc3RfdGltZXN0YW1wX3F1ZXJ5cm9xAABqhV0AAFgIAAAAZnVuY3Rpb26GWFgAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UuTmF0aXZlU291cmNlUmVhZGVyLnJldHVybnNfd2luZG93ZWRfdmFsdWVzcnBxAABqxmkAAFgJAAAAYXR0cmlidXRlhlhDAAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5UdXBsZVNlcXVlbmNlQ29kZXIuYXNfZGV0ZXJtaW5pc3RpY19jb2RlcnJxcQAAau9nAABYBgAAAG1ldGhvZIZYSgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyLnJ1bl9Hcm91cEJ5S2V5cnJxAABqV2EAAFgGAAAAbWV0aG9khlgqAAAAYXBhY2hlX2JlYW0uaW8udGZyZWNvcmRpby5SZWFkRnJvbVRGUmVjb3JkcnNxAABqTmUAAFgFAAAAY2xhc3OGWCkAAABhcGFjaGVfYmVhbS5pby5hdnJvaW8uUmVhZEZyb21BdnJvLmV4cGFuZHJ0cQAAal9YAABYBgAAAG1ldGhvZIZYSwAAAGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm5leG1hcmtfbGF1bmNoZXIuTmV4bWFya0xhdW5jaGVyLnJ1bnJ1cQAAav9hAABYBgAAAG1ldGhvZIZYNQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5sYWJlbF9mcm9tX2NhbGxhYmxlcnZxAABqTV8AAFgIAAAAZnVuY3Rpb25yd3EAAIZYMQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfYW5hbHl6ZXJyeHEAAGr7XQAAaopwAACGWEgAAABhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5uZXhtYXJrX3V0aWwuUGFyc2VFdmVudEZuLnByb2Nlc3NyeXEAAGoRYAAAWAYAAABtZXRob2SGWEAAAABhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuR29vZ2xlQ2xvdWRPcHRpb25zLnZhbGlkYXRlcnpxAABqiVoAAFgGAAAAbWV0aG9khlhMAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm0ucnVubmVyX2FwaV9yZXF1aXJlc19rZXllZF9pbnB1dHJ7cQAAak1fAABYBgAAAG1ldGhvZHJ8cQAAhlgcAAAAYXBhY2hlX2JlYW0uaW50ZXJuYWwucGlja2xlcnJ9cQAAaohZAABqtHAAAIZYOgAAAGFwYWNoZV9iZWFtLnV0aWxzLnVybnMuUnVubmVyQXBpRm4udG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJyfnEAAGp0WgAAWAYAAABtZXRob2Ryf3EAAIZYGwAAAGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5Xcml0ZXKAcQAAapFkAABYBQAAAGNsYXNzhlgyAAAAYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wLlRpbWVzdGFtcC5mcm9tX3JmYzMzMzlygXEAAGqBYQAAWAsAAABjbGFzc21ldGhvZHKCcQAAhlg0AAAAYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3V0aWxzLmNsZWFudXBfc3Vic2NyaXB0aW9uc3KDcQAAauphAABYCAAAAGZ1bmN0aW9uhlhMAAAAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9ydW5uZXIuSW50ZXJhY3RpdmVSdW5uZXIuY2xlYW51cHKEcQAAahloAABYBgAAAG1ldGhvZIZYMAAAAGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5UeXBlT3B0aW9uc3KFcQAAaolaAABYBQAAAGNsYXNzhlhXAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5kYXRhc3RvcmVpby5SZWFkRnJvbURhdGFzdG9yZS5TcGxpdFF1ZXJ5Rm4uZGlzcGxheV9kYXRhcoZxAABqOWUAAFgGAAAAbWV0aG9khlgpAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5GaWxlU3lzdGVtLnNpemVyh3EAAGoZXAAAWAYAAABtZXRob2SGWDYAAABhcGFjaGVfYmVhbS51dGlscy51cm5zLlJ1bm5lckFwaUZuLnJlZ2lzdGVyX3BpY2tsZV91cm5yiHEAAGp0WgAAWAsAAABjbGFzc21ldGhvZHKJcQAAhlhCAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjLkJlYW1GbkNvbnRyb2xTdHVicopxAABqJWsAAFgFAAAAY2xhc3OGWDEAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJDb3VudC5vbl9maXJlcotxAABq0VsAAFgGAAAAbWV0aG9kcoxxAACGWEsAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmNhY2hlX21hbmFnZXIuRmlsZUJhc2VkQ2FjaGVNYW5hZ2VyLmNsZWFudXByjXEAAGoDWQAAWAYAAABtZXRob2SGWDwAAABhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWNoZWNrLlR5cGVDaGVja1dyYXBwZXJEb0ZuLndyYXBwZXJyjnEAAGpnZAAAWAYAAABtZXRob2Ryj3EAAIZYIwAAAGFwYWNoZV9iZWFtLmlvLnV0aWxzLkNvdW50aW5nU291cmNlcpBxAABqQ1wAAFgFAAAAY2xhc3OGWCkAAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkZpbGVTeXN0ZW0ub3BlbnKRcQAAahlcAABYBgAAAG1ldGhvZIZYLQAAAGFwYWNoZV9iZWFtLmludGVybmFsLmh0dHBfY2xpZW50LmdldF9uZXdfaHR0cHKScQAAalxiAABYCAAAAGZ1bmN0aW9uhlgwAAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5UdXBsZUNvZGVyLmlzX2t2X2NvZGVycpNxAABq72cAAFgGAAAAbWV0aG9khlhTAAAAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LnBpcGVsaW5lX2dyYXBoX3JlbmRlcmVyLk11dGVSZW5kZXJlci5vcHRpb25ylHEAAGrFYwAAWAsAAABjbGFzc21ldGhvZIZYJAAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQnl0ZXNDb2RlcnKVcQAAau9nAABYBQAAAGNsYXNzhlhVAAAAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LmRpc3BsYXlfbWFuYWdlci5EaXNwbGF5TWFuYWdlci51cGRhdGVfZGlzcGxheXKWcQAAaotbAABYBgAAAG1ldGhvZIZYKQAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmRlbGV0ZV9hdHRycpdxAABqfVgAAFgIAAAAZnVuY3Rpb25ymHEAAIZYXgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dC5FdmFsdWF0aW9uQ29udGV4dC5nZXRfdmFsdWVfb3JfYmxvY2tfdW50aWxfcmVhZHlymXEAAGr6ZAAAWAYAAABtZXRob2SGWDYAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlZhckludENvZGVyLmlzX2RldGVybWluaXN0aWNymnEAAGrvZwAAWAYAAABtZXRob2SGWDUAAABhcGFjaGVfYmVhbS5pby5sb2NhbGZpbGVzeXN0ZW0uTG9jYWxGaWxlU3lzdGVtLnNjaGVtZXKbcQAAatFqAABYCwAAAGNsYXNzbWV0aG9khlhAAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LkJpZ1F1ZXJ5RGlzcG9zaXRpb24uQ1JFQVRFX0lGX05FRURFRHKccQAAarNaAABYCQAAAGF0dHJpYnV0ZYZYSAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9tZXRyaWNzLkRpcmVjdE1ldHJpYy5leHRyYWN0X2NvbW1pdHRlZHKdcQAAagZaAABYBgAAAG1ldGhvZIZYNwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Eb0ZuLmdldF9mdW5jdGlvbl9hcmd1bWVudHNynnEAAGqMXwAAWAYAAABtZXRob2Ryn3EAAIZYMQAAAGFwYWNoZV9iZWFtLmlvLnNvdXJjZV90ZXN0X3V0aWxzLnJlYWRfZnJvbV9zb3VyY2VyoHEAAGoEXAAAWAgAAABmdW5jdGlvboZYXQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmNvbnN1bWVyX3RyYWNraW5nX3BpcGVsaW5lX3Zpc2l0b3IuQ29uc3VtZXJUcmFja2luZ1BpcGVsaW5lVmlzaXRvcnKhcQAAahBeAABYBQAAAGNsYXNzhlhQAAAAYXBhY2hlX2JlYW0ucnVubmVycy5zZGZfY29tbW9uLlNwbGl0dGFibGVQYXJEb092ZXJyaWRlLmdldF9yZXBsYWNlbWVudF90cmFuc2Zvcm1yonEAAGr+XAAAWAYAAABtZXRob2SGWEIAAABhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uT3V0cHV0U3RyZWFtLndyaXRlX2JpZ2VuZGlhbl91aW50NjRyo3EAAGoEXwAAWAYAAABtZXRob2SGWBUAAABhcGFjaGVfYmVhbS50eXBlaGludHNypHEAAGoGVAAAar1wAACGWDYAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZVBlcktleS5kaXNwbGF5X2RhdGFypXEAAGqMXwAAWAYAAABtZXRob2RypnEAAIZYNwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlNlc3Npb25zLmdldF93aW5kb3dfY29kZXJyp3EAAGpSZAAAWAYAAABtZXRob2RyqHEAAIZYNAAAAGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5UYWJsZVJvd0pzb25Db2Rlci5lbmNvZGVyqXEAAGqzWgAAWAYAAABtZXRob2SGWC8AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5GaXhlZFdpbmRvd3Muc2l6ZXKqcQAAalJkAABYCQAAAGF0dHJpYnV0ZXKrcQAAhlhTAAAAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LnBpcGVsaW5lX2dyYXBoX3JlbmRlcmVyLlRleHRSZW5kZXJlci5vcHRpb25yrHEAAGrFYwAAWAsAAABjbGFzc21ldGhvZIZYPAAAAGFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lLlN5bnRoZXRpY1N0ZXAucHJvY2Vzc3KtcQAAastfAABYBgAAAG1ldGhvZIZYNAAAAGFwYWNoZV9iZWFtLnRvb2xzLmNvZGVyc19taWNyb2JlbmNobWFyay5kaWN0X2ludF9pbnRyrnEAAGqGYgAAWAgAAABmdW5jdGlvboZYIwAAAGFwYWNoZV9iZWFtLmlvLmdjcC5nY3Npby5HY3NJTy5jb3B5cq9xAABqY2YAAFgGAAAAbWV0aG9khlguAAAAYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsucXVlcmllc3KwcQAAakJUAABqa3AAAIZYQQAAAGFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIuUnVudGltZVZhbHVlUHJvdmlkZXIuZ2V0X3ZhbHVlcrFxAABqnloAAFgLAAAAY2xhc3NtZXRob2SGWDQAAABhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2UuQ29uc3QudW53cmFwcrJxAABqsWkAAFgMAAAAc3RhdGljbWV0aG9kcrNxAACGWDYAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZS5CYWdSdW50aW1lU3RhdGUuY2xlYXJytHEAAGqIYAAAWAYAAABtZXRob2RytXEAAIZYNQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlcldhdGVybWFyay5pc19sYXRlcrZxAABq0VsAAFgGAAAAbWV0aG9kcrdxAACGWDUAAABhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkuQmlnUXVlcnlTaW5rLmRpc3BsYXlfZGF0YXK4cQAAarNaAABYBgAAAG1ldGhvZIZYPwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5waXBlbGluZV9ncmFwaF9yZW5kZXJlcnK5cQAAasVjAABqinAAAIZYSgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGVfbWFuYWdlci5GaWxlQmFzZWRDYWNoZU1hbmFnZXIuc291cmNlcrpxAABqA1kAAFgGAAAAbWV0aG9khlghAAAAYXBhY2hlX2JlYW0udGVzdGluZy51dGlsLmlzX2VtcHR5crtxAABqEmMAAFgIAAAAZnVuY3Rpb26GWFMAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9qb2JfYXBpX3BiMl9ncnBjLkpvYlNlcnZpY2VTZXJ2aWNlci5HZXRTdGF0ZVN0cmVhbXK8cQAAahNpAABYBgAAAG1ldGhvZIZYUAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5pbnRlcmFjdGl2ZV9waXBlbGluZV9ncmFwaC5mb3JtYXRfc2FtcGxlcr1xAABq+mUAAFgIAAAAZnVuY3Rpb26GWEkAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2FuYWx5emVyLlBpcGVsaW5lSW5mby5EZXJpdmF0aW9ucr5xAABq+10AAFgFAAAAY2xhc3OGWBEAAABhcGFjaGVfYmVhbS5lcnJvcnK/cQAAaj1kAABqtHAAAIZYLwAAAGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljLk1ldHJpY3MuZGlzdHJpYnV0aW9ucsBxAABq/mgAAFgMAAAAc3RhdGljbWV0aG9khlgyAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlLkZyYW1lU3RhdGVywXEAAGqxaQAAWAUAAABjbGFzc3LCcQAAhlgyAAAAYXBhY2hlX2JlYW0uaW8ucGFycXVldGlvLlJlYWRBbGxGcm9tUGFycXVldC5leHBhbmRyw3EAAGrpXAAAWAYAAABtZXRob2SGWCsAAABhcGFjaGVfYmVhbS5pby5pb2Jhc2UuU2luay5pbml0aWFsaXplX3dyaXRlcsRxAABqkWQAAFgGAAAAbWV0aG9khlg5AAAAYXBhY2hlX2JlYW0uaW8uaGFkb29wZmlsZXN5c3RlbS5IYWRvb3BGaWxlU3lzdGVtLmhhc19kaXJzcsVxAABqQmEAAFgGAAAAbWV0aG9khlhEAAAAYXBhY2hlX2JlYW0uaW8uc291cmNlX3Rlc3RfdXRpbHMuYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2V4aGF1c3RpdmVyxnEAAGoEXAAAWAgAAABmdW5jdGlvboZYNgAAAGFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lLnBhcnNlX2J5dGVfc2l6ZXLHcQAAastfAABYCAAAAGZ1bmN0aW9uhlgtAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUuUnVudGltZVRpbWVycshxAABqiGAAAFgFAAAAY2xhc3NyyXEAAIZYKAAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLnN0b3JlX2F0dHJyynEAAGp9WAAAWAgAAABmdW5jdGlvbnLLcQAAhlgqAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUuVGltZXJTcGVjcsxxAABqiGAAAFgFAAAAY2xhc3NyzXEAAIZYPwAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuSXRlcmFibGVDb2Rlci50b19ydW5uZXJfYXBpX3BhcmFtZXRlcnLOcQAAau9nAABYBgAAAG1ldGhvZIZYQwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lUGVyS2V5LmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXJyz3EAAGqMXwAAWAwAAABzdGF0aWNtZXRob2Ry0HEAAIZYNQAAAGFwYWNoZV9iZWFtLmlvLnJlc3RyaWN0aW9uX3RyYWNrZXJzLk9mZnNldFJhbmdlLnNwbGl0ctFxAABq1GgAAFgGAAAAbWV0aG9khlgwAAAAYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVTdGF0ZS5TVE9QUEVEctJxAABqN1sAAFgJAAAAYXR0cmlidXRlhlg7AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkltcHVsc2UudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJy03EAAGqMXwAAWAYAAABtZXRob2Ry1HEAAIZYMQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlLlJ1bnRpbWVUaW1lci5zZXRy1XEAAGqIYAAAWAYAAABtZXRob2Ry1nEAAIZYJgAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pby5Eb3dubG9hZGVyctdxAABq2mcAAFgFAAAAY2xhc3OGWDIAAABhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYy5NZXRyaWNzLkRlbGVnYXRpbmdHYXVnZXLYcQAAav5oAABYBQAAAGNsYXNzhlgzAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbWlvLlVwbG9hZGVyU3RyZWFtLndyaXRhYmxlctlxAABq2mcAAFgGAAAAbWV0aG9khlhFAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuYnVuZGxlX2ZhY3RvcnkuQnVuZGxlRmFjdG9yeS5jcmVhdGVfYnVuZGxlctpxAABqIVkAAFgGAAAAbWV0aG9khlguAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS51dGlsLk1vdmluZ1N1bXLbcQAAajpeAABYBQAAAGNsYXNzhlgzAAAAYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWMuTWV0cmljc0ZpbHRlci53aXRoX3N0ZXBzctxxAABq/mgAAFgGAAAAbWV0aG9khlg+AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5LkRpc3BsYXlEYXRhLmNyZWF0ZV9mcm9tX29wdGlvbnNy3XEAAGo2WQAAWAsAAABjbGFzc21ldGhvZHLecQAAhlgyAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLnB1YnN1Yi5QdWJzdWJNZXNzYWdlLmF0dHJpYnV0ZXNy33EAAGobWgAAWAkAAABhdHRyaWJ1dGWGWEsAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC50ZXN0X2RpcmVjdF9ydW5uZXIuVGVzdERpcmVjdFJ1bm5lci5ydW5fcGlwZWxpbmVy4HEAAGrmWwAAWAYAAABtZXRob2SGWCgAAABhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYy5NZXRyaWNzRmlsdGVycuFxAABq/mgAAFgFAAAAY2xhc3OGWD4AAABhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl9jb21tb24uU3BsaXRSZXN0cmljdGlvbkZuLnN0YXJ0X2J1bmRsZXLicQAAav5cAABYBgAAAG1ldGhvZIZYLwAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQ29kZXIuZnJvbV9ydW5uZXJfYXBpcuNxAABq72cAAFgLAAAAY2xhc3NtZXRob2SGWBwAAABhcGFjaGVfYmVhbS5pby5pb2Jhc2UuV3JpdGVycuRxAABqkWQAAFgFAAAAY2xhc3OGWDQAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUZuLmV4dHJhY3Rfb3V0cHV0cuVxAABqjF8AAFgGAAAAbWV0aG9kcuZxAACGWEIAAABhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PZmZzZXRSYW5nZVRyYWNrZXIuZnJhY3Rpb25fY29uc3VtZWRy53EAAGrUXAAAWAYAAABtZXRob2SGWDEAAABhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkuQmlnUXVlcnlTb3VyY2UuZm9ybWF0cuhxAABqs1oAAFgJAAAAYXR0cmlidXRlhlgwAAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5UdXBsZUNvZGVyLnZhbHVlX2NvZGVyculxAABq72cAAFgGAAAAbWV0aG9khlgxAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVWYWx1ZXMubWFrZV9mbnLqcQAAaoxfAABYBgAAAG1ldGhvZHLrcQAAhlgzAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkRlZmF1bHRUcmlnZ2VyLnJlc2V0cuxxAABq0VsAAFgGAAAAbWV0aG9kcu1xAACGWDsAAABhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbS5HQ1NGaWxlU3lzdGVtLmxhc3RfdXBkYXRlZHLucQAAaiZgAABYBgAAAG1ldGhvZIZYTAAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZGF0YXN0b3JlaW8uUmVhZEZyb21EYXRhc3RvcmUuUmVhZEZuLnByb2Nlc3Ny73EAAGo5ZQAAWAYAAABtZXRob2SGWD8AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2FuYWx5emVyLnNldF9wcm90b19tYXBy8HEAAGr7XQAAWAgAAABmdW5jdGlvboZYOAAAAGFwYWNoZV9iZWFtLnRvb2xzLnNpZGVpbnB1dF9taWNyb2JlbmNobWFyay5ydW5fYmVuY2htYXJrcvFxAABqW10AAFgIAAAAZnVuY3Rpb26GWB8AAABhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzcvJxAABq+2oAAGpvcAAAhlgxAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLlJlcGVhdGVkbHkub25fZmlyZXLzcQAAatFbAABYBgAAAG1ldGhvZHL0cQAAhlg9AAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5GYXN0UHJpbWl0aXZlc0NvZGVyLmFzX2Nsb3VkX29iamVjdHL1cQAAau9nAABYBgAAAG1ldGhvZIZYJQAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLnJvdF90d29y9nEAAGp9WAAAWAgAAABmdW5jdGlvbnL3cQAAhlggAAAAYXBhY2hlX2JlYW0uaW8udmNmaW8uVmFyaWFudENhbGxy+HEAAGpGXQAAWAUAAABjbGFzc4ZYNQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5QYXJ0aXRpb25Gbi5kZWZhdWx0X2xhYmVscvlxAABqjF8AAFgGAAAAbWV0aG9kcvpxAACGWDQAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5XaW5kb3dGbi5Bc3NpZ25Db250ZXh0cvtxAABqUmQAAFgFAAAAY2xhc3Ny/HEAAIZYKQAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uRmlsZVN5c3RlbS5qb2lucv1xAABqGVwAAFgGAAAAbWV0aG9khlgxAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkltcHVsc2UuZ2V0X3dpbmRvd2luZ3L+cQAAaoxfAABYBgAAAG1ldGhvZHL/cQAAhlhEAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLlBpcGVsaW5lT3B0aW9ucy5mcm9tX2RpY3Rpb25hcnlyAHIAAGqJWgAAWAsAAABjbGFzc21ldGhvZIZYKQAAAGFwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2UuQ29uY2F0U291cmNlcgFyAABqT2sAAFgFAAAAY2xhc3OGWBoAAABhcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmVhZHICcgAAapFkAABYBQAAAGNsYXNzhlhAAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LldyaXRlVG9CaWdRdWVyeS50YWJsZV9zY2hlbWFfdG9fZGljdHIDcgAAarNaAABYDAAAAHN0YXRpY21ldGhvZIZYTwAAAGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLkxleGljb2dyYXBoaWNLZXlSYW5nZVRyYWNrZXIucG9zaXRpb25fdG9fZnJhY3Rpb25yBHIAAGrUXAAAWAsAAABjbGFzc21ldGhvZIZYPwAAAGFwYWNoZV9iZWFtLmNvZGVycy5vYnNlcnZhYmxlLk9ic2VydmFibGVNaXhpbi5yZWdpc3Rlcl9vYnNlcnZlcnIFcgAAanxkAABYBgAAAG1ldGhvZIZYXQAAAGFwYWNoZV9iZWFtLmlvLmZsaW5rLmZsaW5rX3N0cmVhbWluZ19pbXB1bHNlX3NvdXJjZS5GbGlua1N0cmVhbWluZ0ltcHVsc2VTb3VyY2UuZ2V0X3dpbmRvd2luZ3IGcgAAap1ZAABYBgAAAG1ldGhvZIZYJgAAAGFwYWNoZV9iZWFtLnRvb2xzLnV0aWxzLmNoZWNrX2NvbXBpbGVkcgdyAABqcWIAAFgIAAAAZnVuY3Rpb26GWEsAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9qb2JfYXBpX3BiMl9ncnBjLkpvYlNlcnZpY2VTZXJ2aWNlci5DYW5jZWxyCHIAAGoTaQAAWAYAAABtZXRob2SGWDcAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUdsb2JhbGx5LndpdGhfZmFub3V0cglyAABqjF8AAFgGAAAAbWV0aG9kcgpyAACGWEsAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lci5Qcm9jZXNzRWxlbWVudHMubmV3X3Byb2Nlc3NfZm5yC3IAAGrlZAAAWAYAAABtZXRob2SGWC4AAABhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9ycy5XaXRoVHlwZUhpbnRzcgxyAABqKWcAAFgFAAAAY2xhc3NyDXIAAIZYMQAAAGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5CaWdRdWVyeVNvdXJjZS5yZWFkZXJyDnIAAGqzWgAAWAYAAABtZXRob2SGWE8AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC53YXRlcm1hcmtfbWFuYWdlci5XYXRlcm1hcmtNYW5hZ2VyLnVwZGF0ZV93YXRlcm1hcmtzcg9yAABqu1kAAFgGAAAAbWV0aG9khlgpAAAAYXBhY2hlX2JlYW0uaW8udXRpbHMuQ291bnRpbmdTb3VyY2Uuc3BsaXRyEHIAAGpDXAAAWAYAAABtZXRob2SGWC0AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC50ZXN0X2RpcmVjdF9ydW5uZXJyEXIAAGrmWwAAVQZtb2R1bGVyEnIAAIZYOwAAAGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5CeXRlQ291bnRpbmdPdXRwdXRTdHJlYW0uZ2V0chNyAABqBF8AAFgGAAAAbWV0aG9khlgvAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuU2Vzc2lvbnMuZ2FwX3NpemVyFHIAAGpSZAAAWAkAAABhdHRyaWJ1dGVyFXIAAIZYLQAAAGFwYWNoZV9iZWFtLmludGVybmFsLnV0aWwuQXJndW1lbnRQbGFjZWhvbGRlcnIWcgAAaptiAABYBQAAAGNsYXNzhlhCAAAAYXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmUuU3ludGhldGljU3RlcC5maW5pc2hfYnVuZGxlchdyAABqy18AAFgGAAAAbWV0aG9khlhEAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLlBpcGVsaW5lT3B0aW9ucy5nZXRfYWxsX29wdGlvbnNyGHIAAGqJWgAAWAYAAABtZXRob2SGWDcAAABhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl9jb21tb24uRXhwbG9kZVdpbmRvd3NGbi5wcm9jZXNzchlyAABq/lwAAFgGAAAAbWV0aG9khlgrAAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2Rlci52YWx1ZV9jb2RlcnIacgAAau9nAABYBgAAAG1ldGhvZIZYVQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyLmJ5dGVfYXJyYXlfdG9fanNvbl9zdHJpbmdyG3IAAGpXYQAAWAwAAABzdGF0aWNtZXRob2SGWD8AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZS5Db21iaW5pbmdWYWx1ZVJ1bnRpbWVTdGF0ZS5hZGRyHHIAAGqIYAAAWAYAAABtZXRob2RyHXIAAIZYLwAAAGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF91dGlscy5UZW1wRGlyLmdldF9wYXRoch5yAABq6mEAAFgGAAAAbWV0aG9khlg+AAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LkJpZ1F1ZXJ5RGlzcG9zaXRpb24udmFsaWRhdGVfd3JpdGVyH3IAAGqzWgAAWAwAAABzdGF0aWNtZXRob2SGWDcAAABhcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZS5leHBhbmRfdXNpbmdfZ2JrciByAABqy18AAFgIAAAAZnVuY3Rpb26GWCYAAABhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpY2Jhc2UuQ291bnRlcnIhcgAAaptnAABYBQAAAGNsYXNzhlgxAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLkRlYnVnT3B0aW9uc3IicgAAaolaAABYBQAAAGNsYXNzhlguAAAAYXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZS5Db25jYXRTb3VyY2UucmVhZHIjcgAAak9rAABYBgAAAG1ldGhvZIZYUgAAAGFwYWNoZV9iZWFtLnRlc3RpbmcubG9hZF90ZXN0cy5sb2FkX3Rlc3RfbWV0cmljc191dGlscy5NZXRyaWNzTW9uaXRvci5zZW5kX21ldHJpY3NyJHIAAGoUZwAAWAYAAABtZXRob2SGWBgAAABhcGFjaGVfYmVhbS5pby5wYXJxdWV0aW9yJXIAAGrpXAAAaqxwAACGWCoAAABhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtLlRlc3RTdHJlYW1yJnIAAGouXAAAWAUAAABjbGFzc4ZYNwAAAGFwYWNoZV9iZWFtLmlvLmxvY2FsZmlsZXN5c3RlbS5Mb2NhbEZpbGVTeXN0ZW0uaGFzX2RpcnNyJ3IAAGrRagAAWAYAAABtZXRob2SGWGEAAABhcGFjaGVfYmVhbS5pby5mbGluay5mbGlua19zdHJlYW1pbmdfaW1wdWxzZV9zb3VyY2UuRmxpbmtTdHJlYW1pbmdJbXB1bHNlU291cmNlLmluZmVyX291dHB1dF90eXBlcihyAABqnVkAAFgGAAAAbWV0aG9khlg9AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyV2F0ZXJtYXJrLmZyb21fcnVubmVyX2FwaXIpcgAAatFbAABYDAAAAHN0YXRpY21ldGhvZHIqcgAAhlg7AAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlLkZyYW1lU3RhdGUuZ2V0X25hbWVyK3IAAGqxaQAAWAYAAABtZXRob2RyLHIAAIZYGwAAAGFwYWNoZV9iZWFtLmVycm9yLkJlYW1FcnJvcnItcgAAaj1kAABYCQAAAGV4Y2VwdGlvboZYNwAAAGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5Hb29nbGVDbG91ZE9wdGlvbnNyLnIAAGqJWgAAWAUAAABjbGFzc4ZYPwAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYy5CZWFtRm5EYXRhU3R1YnIvcgAAaiVrAABYBQAAAGNsYXNzhlg9AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuVGltZXN0YW1wQ29tYmluZXIuT1VUUFVUX0FUX0VPV3IwcgAAalJkAABYCQAAAGF0dHJpYnV0ZXIxcgAAhlgbAAAAYXBhY2hlX2JlYW0udXRpbHMucHJvY2Vzc2VzcjJyAABqGGEAAGpvcAAAhlhGAAAAYXBhY2hlX2JlYW0uaW8uc291cmNlX3Rlc3RfdXRpbHMuYXNzZXJ0X3NvdXJjZXNfZXF1YWxfcmVmZXJlbmNlX3NvdXJjZXIzcgAAagRcAABYCAAAAGZ1bmN0aW9uhlgqAAAAYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLklucHV0U3RyZWFtcjRyAABqBF8AAFgFAAAAY2xhc3OGWEIAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlX3dyaXRlX2l0X3BpcGVsaW5lLm1ha2VfYW5jZXN0b3JfcXVlcnlyNXIAAGpYXAAAWAgAAABmdW5jdGlvboZYJwAAAGFwYWNoZV9iZWFtLnRvb2xzLmNvZGVyc19taWNyb2JlbmNobWFya3I2cgAAaoZiAABVBm1vZHVsZXI3cgAAhlgqAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50aW1ldXRpbC5UaW1lRG9tYWlucjhyAABqJGUAAFgFAAAAY2xhc3NyOXIAAIZYKgAAAGFwYWNoZV9iZWFtLmlvLmdjcC5nY3Npby5HY3NJTy5saXN0X3ByZWZpeHI6cgAAamNmAABYBgAAAG1ldGhvZIZYUQAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYy5CZWFtRm5FeHRlcm5hbFdvcmtlclBvb2xTZXJ2aWNlcnI7cgAAaiVrAABYBQAAAGNsYXNzhlglAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuZHVwX3RvcHI8cgAAan1YAABYCAAAAGZ1bmN0aW9ucj1yAACGWEcAAABhcGFjaGVfYmVhbS50ZXN0aW5nLnBpcGVsaW5lX3ZlcmlmaWVycy5QaXBlbGluZVN0YXRlTWF0Y2hlci5kZXNjcmliZV90b3I+cgAAag1bAABYBgAAAG1ldGhvZIZYUQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dC5FdmFsdWF0aW9uQ29udGV4dC5pc19yb290X3RyYW5zZm9ybXI/cgAAavpkAABYBgAAAG1ldGhvZIZYNgAAAGFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIuU3RhdGljVmFsdWVQcm92aWRlcnJAcgAAap5aAABYBQAAAGNsYXNzhlgeAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2lvLkdjc0lPckFyAABqY2YAAFgFAAAAY2xhc3OGWEIAAABhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uQnl0ZUNvdW50aW5nT3V0cHV0U3RyZWFtLndyaXRlX2J5dGVyQnIAAGoEXwAAWAYAAABtZXRob2SGWDcAAABhcGFjaGVfYmVhbS5pby5oYWRvb3BmaWxlc3lzdGVtLkhhZG9vcEZpbGVTeXN0ZW0ucmVuYW1lckNyAABqQmEAAFgGAAAAbWV0aG9khlgxAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuaW5wbGFjZV90cnVlX2RpdmlkZXJEcgAAan1YAABYCAAAAGZ1bmN0aW9uckVyAACGWDAAAABhcGFjaGVfYmVhbS51dGlscy5yZXRyeS53aXRoX2V4cG9uZW50aWFsX2JhY2tvZmZyRnIAAGpsYQAAWAgAAABmdW5jdGlvbnJHcgAAhlgqAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LkJpZ1F1ZXJ5U291cmNlckhyAABqs1oAAFgFAAAAY2xhc3OGWCsAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5kZWxldGVfZ2xvYmFscklyAABqfVgAAFgIAAAAZnVuY3Rpb25ySnIAAIZYFQAAAGFwYWNoZV9iZWFtLmlvLmlvYmFzZXJLcgAAapFkAABqtnAAAIZYVwAAAGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm5leG1hcmtfbGF1bmNoZXIuTmV4bWFya0xhdW5jaGVyLmdlbmVyYXRlX2V2ZW50c3JMcgAAav9hAABYBgAAAG1ldGhvZIZYOQAAAGFwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2UuQ29uY2F0UmFuZ2VUcmFja2VyLnRyeV9zcGxpdHJNcgAAak9rAABYBgAAAG1ldGhvZIZYQQAAAGFwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2UuQ29uY2F0UmFuZ2VUcmFja2VyLnN1Yl9yYW5nZV90cmFja2Vyck5yAABqT2sAAFgGAAAAbWV0aG9khlgrAAAAYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLk91dHB1dFN0cmVhbXJPcgAAagRfAABYBQAAAGNsYXNzhlhGAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuU2FtcGxlLkZpeGVkU2l6ZUdsb2JhbGx5LmRpc3BsYXlfZGF0YXJQcgAAal5jAABYBgAAAG1ldGhvZIZYOQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLlRvcC5QZXJLZXkuZGVmYXVsdF9sYWJlbHJRcgAAal5jAABYBgAAAG1ldGhvZIZYUgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyLlByb2Nlc3NGbi5zZXRfcHJvY2Vzc19lbGVtZW50X2ludm9rZXJyUnIAAGrlZAAAWAYAAABtZXRob2SGWEAAAABhcGFjaGVfYmVhbS50b29scy5jb2RlcnNfbWljcm9iZW5jaG1hcmsud3Zfd2l0aF9tdWx0aXBsZV93aW5kb3dzclNyAABqhmIAAFgIAAAAZnVuY3Rpb26GWFYAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5zdHJlYW1pbmdfY3JlYXRlLlN0cmVhbWluZ0NyZWF0ZS5JbXB1bHNlLmV4cGFuZHJUcgAAasBhAABYBgAAAG1ldGhvZIZYOwAAAGFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIuUnVudGltZVZhbHVlUHJvdmlkZXIuZ2V0clVyAABqnloAAFgGAAAAbWV0aG9khlhXAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5hZGFwdGl2ZV90aHJvdHRsZXIuQWRhcHRpdmVUaHJvdHRsZXIuc3VjY2Vzc2Z1bF9yZXF1ZXN0clZyAABqpmQAAFgGAAAAbWV0aG9khlg/AAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXZhbHVhdGlvbl9jb250ZXh0LkRpcmVjdFN0ZXBDb250ZXh0cldyAABq+mQAAFgFAAAAY2xhc3OGWEMAAABhcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZS5TeW50aGV0aWNTb3VyY2UuZWxlbWVudF9zaXplclhyAABqy18AAFgJAAAAYXR0cmlidXRlhlg8AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFjY3VtdWxhdGlvbk1vZGUuQUNDVU1VTEFUSU5HcllyAABq0VsAAFgJAAAAYXR0cmlidXRlclpyAACGWE0AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfcnVubmVyLkJ1bmRsZUJhc2VkRGlyZWN0UnVubmVyLnJ1bl9waXBlbGluZXJbcgAAatBkAABYBgAAAG1ldGhvZIZYLQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Hcm91cEJ5S2V5LmV4cGFuZHJccgAAaoxfAABYBgAAAG1ldGhvZHJdcgAAhlgpAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVWYWx1ZXNyXnIAAGqMXwAAWAUAAABjbGFzc3JfcgAAhlg7AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuRml4ZWRXaW5kb3dzLmdldF93aW5kb3dfY29kZXJyYHIAAGpSZAAAWAYAAABtZXRob2RyYXIAAIZYOQAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zLlVSSV9TQ0hFTUFfUEFUVEVSTnJicgAAasdYAABYCQAAAGF0dHJpYnV0ZYZYLgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX2NvbW1vbi5TcGxpdHRhYmxlUGFyRG9yY3IAAGr+XAAAWAUAAABjbGFzc4ZYRQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfcnVubmVyLlBpcGVsaW5lUmVzdWx0LmdldHJkcgAAahloAABYBgAAAG1ldGhvZIZYIwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5GbGF0TWFwcmVyAABqjF8AAFgIAAAAZnVuY3Rpb25yZnIAAIZYHgAAAGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZXJncgAAaptnAABqrHAAAIZYMwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lUnVubmVyLnJ1bl9hc3luY3JocgAAajdbAABYBgAAAG1ldGhvZIZYKAAAAGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5Xcml0ZS5kaXNwbGF5X2RhdGFyaXIAAGqRZAAAWAYAAABtZXRob2SGWEMAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lci5Qcm9jZXNzRm4uc3RlcF9jb250ZXh0cmpyAABq5WQAAFgJAAAAYXR0cmlidXRlhlhLAAAAYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyLnNldF9jdXJyZW50X3Bvc2l0aW9ucmtyAABq1FwAAFgGAAAAbWV0aG9khlgpAAAAYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVSdW5uZXJybHIAAGo3WwAAWAUAAABjbGFzc4ZYLgAAAGFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbi5mcm9tX3J1bm5lcl9hcGlybXIAAGpOZgAAWAwAAABzdGF0aWNtZXRob2SGWCwAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy51bmFyeV9uZWdhdGl2ZXJucgAAan1YAABYCAAAAGZ1bmN0aW9ucm9yAACGWCYAAABhcGFjaGVfYmVhbS5pby5pb2Jhc2UuU2luay5vcGVuX3dyaXRlcnJwcgAAapFkAABYBgAAAG1ldGhvZIZYQAAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2suQWJzdHJhY3REb0ZuV3JhcHBlci5zdGFydF9idW5kbGVycXIAAGpnZAAAWAYAAABtZXRob2RycnIAAIZYMgAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEudXRpbC5Nb3ZpbmdTdW0uYWRkcnNyAABqOl4AAFgGAAAAbWV0aG9khlgoAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMubG9hZF9jb25zdHJ0cgAAan1YAABYCAAAAGZ1bmN0aW9ucnVyAACGWEAAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5TYW1wbGUuRml4ZWRTaXplR2xvYmFsbHkuZXhwYW5kcnZyAABqXmMAAFgGAAAAbWV0aG9khlhNAAAAYXBhY2hlX2JlYW0udGVzdGluZy5waXBlbGluZV92ZXJpZmllcnMuUGlwZWxpbmVTdGF0ZU1hdGNoZXIuZGVzY3JpYmVfbWlzbWF0Y2hyd3IAAGoNWwAAWAYAAABtZXRob2SGWC0AAABhcGFjaGVfYmVhbS5tZXRyaWNzLm1vbml0b3JpbmdfaW5mb3MuaXNfZ2F1Z2VyeHIAAGp4ZgAAWAgAAABmdW5jdGlvboZYMQAAAGFwYWNoZV9iZWFtLm1ldHJpY3MuY2VsbHMuRGlzdHJpYnV0aW9uUmVzdWx0Lm1lYW5yeXIAAGpwXQAAWAkAAABhdHRyaWJ1dGWGWD0AAABhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2UuRnJhbWVTdGF0ZS5nZXRfZ2xvYmFscnpyAABqsWkAAFgGAAAAbWV0aG9kcntyAACGWFEAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX3J1bm5lci5JbnRlcmFjdGl2ZVJ1bm5lci5ydW5fcGlwZWxpbmVyfHIAAGoZaAAAWAYAAABtZXRob2SGWEcAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHQuRXZhbHVhdGlvbkNvbnRleHQubWV0cmljc3J9cgAAavpkAABYBgAAAG1ldGhvZIZYVgAAAGFwYWNoZV9iZWFtLmlvLmZsaW5rLmZsaW5rX3N0cmVhbWluZ19pbXB1bHNlX3NvdXJjZS5GbGlua1N0cmVhbWluZ0ltcHVsc2VTb3VyY2UuZXhwYW5kcn5yAABqnVkAAFgGAAAAbWV0aG9khlgtAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLlBhcnRpdGlvbi5tYWtlX2Zucn9yAABqjF8AAFgGAAAAbWV0aG9kcoByAACGWC8AAABhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl9jb21tb24uRXhwbG9kZVdpbmRvd3NGbnKBcgAAav5cAABYBQAAAGNsYXNzhlgmAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuV2luZG93Rm5ygnIAAGpSZAAAWAUAAABjbGFzc3KDcgAAhlhEAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5kYXRhc3RvcmVpby5SZWFkRnJvbURhdGFzdG9yZS5leHBhbmRyhHIAAGo5ZQAAWAYAAABtZXRob2SGWEQAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5TYW1wbGUuRml4ZWRTaXplUGVyS2V5LmRpc3BsYXlfZGF0YXKFcgAAal5jAABYBgAAAG1ldGhvZIZYPwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZS5OYXRpdmVTaW5rLndyaXRlcnKGcgAAasZpAABYBgAAAG1ldGhvZIZYMQAAAGFwYWNoZV9iZWFtLmlvLnV0aWxzLkNvdW50aW5nU291cmNlLmVzdGltYXRlX3NpemVyh3IAAGpDXAAAWAYAAABtZXRob2SGWDMAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkl0ZXJhYmxlQ29kZXIudmFsdWVfY29kZXJyiHIAAGrvZwAAWAYAAABtZXRob2SGWB4AAABhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2VyiXIAAGpkawAAVQZtb2R1bGVyinIAAIZYLQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5EZWZhdWx0VHJpZ2dlcnKLcgAAatFbAABYBQAAAGNsYXNzcoxyAACGWEEAAABhcGFjaGVfYmVhbS5pby5hdnJvaW8uUmVhZEFsbEZyb21BdnJvLkRFRkFVTFRfREVTSVJFRF9CVU5ETEVfU0laRXKNcgAAal9YAABYCQAAAGF0dHJpYnV0ZYZYMQAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pby5Eb3dubG9hZGVyU3RyZWFtLnNlZWtyjnIAAGraZwAAWAYAAABtZXRob2SGWFMAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX3J1bm5lci5QaXBlbGluZVJlc3VsdC53YWl0X3VudGlsX2ZpbmlzaHKPcgAAahloAABYBgAAAG1ldGhvZIZYOwAAAGFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lLlN5bnRoZXRpY1NvdXJjZS5yZWFkcpByAABqy18AAFgGAAAAbWV0aG9khlg7AAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVjaGVjay5BYnN0cmFjdERvRm5XcmFwcGVyLnByb2Nlc3NykXIAAGpnZAAAWAYAAABtZXRob2RyknIAAIZYPgAAAGFwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2UuQ29uY2F0UmFuZ2VUcmFja2VyLnN0YXJ0X3Bvc2l0aW9ucpNyAABqT2sAAFgGAAAAbWV0aG9khlgyAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm0ubGFiZWxylHIAAGpNXwAAWAkAAABhdHRyaWJ1dGVylXIAAIZYJwAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmxvYWRfbmFtZXKWcgAAan1YAABYCAAAAGZ1bmN0aW9ucpdyAACGWEQAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5TbGlkaW5nV2luZG93cy50b19ydW5uZXJfYXBpX3BhcmFtZXRlcnKYcgAAalJkAABYBgAAAG1ldGhvZHKZcgAAhlgzAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVjaGVjay5BYnN0cmFjdERvRm5XcmFwcGVycppyAABqZ2QAAFgFAAAAY2xhc3Nym3IAAIZYUAAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3Byb3Zpc2lvbl9hcGlfcGIyX2dycGMuUHJvdmlzaW9uU2VydmljZVNlcnZpY2VycpxyAABqqmgAAFgFAAAAY2xhc3OGWC8AAABhcGFjaGVfYmVhbS5pby5wYXJxdWV0aW8uUmVhZEZyb21QYXJxdWV0LmV4cGFuZHKdcgAAaulcAABYBgAAAG1ldGhvZIZYJQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5QYXJ0aXRpb25ynnIAAGqMXwAAWAUAAABjbGFzc3KfcgAAhlhDAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVWYWx1ZXMuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcnKgcgAAaoxfAABYDAAAAHN0YXRpY21ldGhvZHKhcgAAhlg7AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkZsYXR0ZW4udG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJyonIAAGqMXwAAWAYAAABtZXRob2Ryo3IAAIZYMQAAAGFwYWNoZV9iZWFtLnRvb2xzLmNvZGVyc19taWNyb2JlbmNobWFyay5sYXJnZV9pbnRypHIAAGqGYgAAWAgAAABmdW5jdGlvboZYNQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9ydW5uZXIuRGlyZWN0UnVubmVycqVyAABq0GQAAFgJAAAAYXR0cmlidXRlhlgtAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm4uc3RhcnRfYnVuZGxlcqZyAABqjF8AAFgGAAAAbWV0aG9kcqdyAACGWCkAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5pbnBsYWNlX3hvcnKocgAAan1YAABYCAAAAGZ1bmN0aW9ucqlyAACGWDUAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5Ub3AuT2YuZGVmYXVsdF9sYWJlbHKqcgAAal5jAABYBgAAAG1ldGhvZIZYPAAAAGFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lLlN5bnRoZXRpY1NvdXJjZS5zcGxpdHKrcgAAastfAABYBgAAAG1ldGhvZIZYLgAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQ29kZXIuZnJvbV90eXBlX2hpbnRyrHIAAGrvZwAAWAsAAABjbGFzc21ldGhvZIZYKAAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmxvYWRfZGVyZWZyrXIAAGp9WAAAWAgAAABmdW5jdGlvbnKucgAAhlgmAAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2Rlci5kZWNvZGVyr3IAAGrvZwAAWAYAAABtZXRob2SGWD8AAABhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PZmZzZXRSYW5nZVRyYWNrZXIuc3RhcnRfcG9zaXRpb25ysHIAAGrUXAAAWAYAAABtZXRob2SGWCoAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuSW1wdWxzZS5leHBhbmRysXIAAGqMXwAAWAYAAABtZXRob2RysnIAAIZYIgAAAGFwYWNoZV9iZWFtLmludGVybmFsLnBpY2tsZXIubG9hZHNys3IAAGqIWQAAWAgAAABmdW5jdGlvboZYPwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGVfbWFuYWdlci5Xcml0ZUNhY2hlLmV4cGFuZHK0cgAAagNZAABYBgAAAG1ldGhvZIZYNQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlcldhdGVybWFyay5vbl9maXJlcrVyAABq0VsAAFgGAAAAbWV0aG9kcrZyAACGWCwAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLldpbmRvd2VkVmFsdWVDb2RlcnK3cgAAau9nAABYBQAAAGNsYXNzhlgrAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2lvLkdjc0lPLmxhc3RfdXBkYXRlZHK4cgAAamNmAABYBgAAAG1ldGhvZIZYKQAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmxvYWRfbG9jYWxzcrlyAABqfVgAAFgIAAAAZnVuY3Rpb25yunIAAIZYMQAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLnN5bW1ldHJpY19iaW5hcnlfb3Byu3IAAGp9WAAAWAgAAABmdW5jdGlvbnK8cgAAhlhDAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLlN0YW5kYXJkT3B0aW9ucy5ERUZBVUxUX1JVTk5FUnK9cgAAaolaAABYCQAAAGF0dHJpYnV0ZYZYKgAAAGFwYWNoZV9iZWFtLnRlc3RpbmcudXRpbC5UZXN0V2luZG93ZWRWYWx1ZXK+cgAAahJjAABYBQAAAGNsYXNzhlgwAAAAYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVSZXN1bHQuY2FuY2Vscr9yAABqN1sAAFgGAAAAbWV0aG9khlgtAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm4uRWxlbWVudFBhcmFtcsByAABqjF8AAFgJAAAAYXR0cmlidXRlcsFyAACGWDAAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmpvYi5tYW5hZ2VyLkRvY2tlclJQQ01hbmFnZXJywnIAAGp5awAAWAUAAABjbGFzc4ZYNAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lRm4uZm9yX2lucHV0X3R5cGVyw3IAAGqMXwAAWAYAAABtZXRob2RyxHIAAIZYQAAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHMuVHlwZVZhcmlhYmxlLmJpbmRfdHlwZV92YXJpYWJsZXNyxXIAAGr7agAAWAYAAABtZXRob2RyxnIAAIZYMAAAAGFwYWNoZV9iZWFtLm1ldHJpY3MubW9uaXRvcmluZ19pbmZvcy5pbnQ2NF9nYXVnZXLHcgAAanhmAABYCAAAAGZ1bmN0aW9uhlgtAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUuQmFnU3RhdGVTcGVjcshyAABqiGAAAFgFAAAAY2xhc3NyyXIAAIZYNAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckNvdW50Lm9uX2VsZW1lbnRyynIAAGrRWwAAWAYAAABtZXRob2Ryy3IAAIZYNQAAAGFwYWNoZV9iZWFtLmlvLmdjcC5nY3NmaWxlc3lzdGVtLkdDU0ZpbGVTeXN0ZW0uZGVsZXRlcsxyAABqJmAAAFgGAAAAbWV0aG9khlg6AAAAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoZV9tYW5hZ2VyLkNhY2hlTWFuYWdlcnLNcgAAagNZAABYBQAAAGNsYXNzhlgvAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLnB1YnN1Yi5SZWFkRnJvbVB1YlN1Yi5leHBhbmRyznIAAGobWgAAWAYAAABtZXRob2SGWDIAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ3JlYXRlLmdldF9vdXRwdXRfdHlwZXLPcgAAaoxfAABYBgAAAG1ldGhvZHLQcgAAhlgyAAAAYXBhY2hlX2JlYW0udGVzdGluZy51dGlsLlRlc3RXaW5kb3dlZFZhbHVlLndpbmRvd3Ny0XIAAGoSYwAAWAkAAABhdHRyaWJ1dGWGWB0AAABhcGFjaGVfYmVhbS5lcnJvci5SdW5uZXJFcnJvcnLScgAAaj1kAABYCQAAAGV4Y2VwdGlvboZYZAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cucHRyYW5zZm9ybV9vdmVycmlkZXMuQ3JlYXRlUFRyYW5zZm9ybU92ZXJyaWRlLmdldF9yZXBsYWNlbWVudF90cmFuc2Zvcm1y03IAAGrwaQAAWAYAAABtZXRob2SGWFkAAABhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci5pc19zZXJ2aWNlX3J1bm5lcnLUcgAAau5gAABYBgAAAG1ldGhvZIZYJwAAAGFwYWNoZV9iZWFtLmlvLnZjZmlvLlJlYWRGcm9tVmNmLmV4cGFuZHLVcgAAakZdAABYBgAAAG1ldGhvZIZYMwAAAGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm5leG1hcmtfdXRpbHLWcgAAahFgAABqa3AAAIZYMQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlLlVzZXJTdGF0ZUNvbnRleHRy13IAAGqIYAAAWAUAAABjbGFzc3LYcgAAhlglAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2lvLkdjc0lPLmRlbGV0ZXLZcgAAamNmAABYBgAAAG1ldGhvZIZYRAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfcnVubmVyLkludGVyYWN0aXZlUnVubmVyctpyAABqGWgAAFgFAAAAY2xhc3OGWDsAAABhcGFjaGVfYmVhbS5pby5yZXN0cmljdGlvbl90cmFja2Vycy5PZmZzZXRSYW5nZS5uZXdfdHJhY2tlcnLbcgAAatRoAABYBgAAAG1ldGhvZIZYNAAAAGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SZWFkLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXJy3HIAAGqRZAAAWAwAAABzdGF0aWNtZXRob2SGWDoAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybS5kZWZhdWx0X2xhYmVsct1yAABqTV8AAFgGAAAAbWV0aG9kct5yAACGWEAAAABhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9ycy5XaXRoVHlwZUhpbnRzLndpdGhfb3V0cHV0X3R5cGVzct9yAABqKWcAAFgGAAAAbWV0aG9kcuByAACGWFcAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmRhdGFzdG9yZWlvLlJlYWRGcm9tRGF0YXN0b3JlLlNwbGl0UXVlcnlGbi5zdGFydF9idW5kbGVy4XIAAGo5ZQAAWAYAAABtZXRob2SGWDgAAABhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uSW5wdXRTdHJlYW0ucmVhZF9ieXRlX3B5M3LicgAAagRfAABYBgAAAG1ldGhvZIZYOAAAAGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5JbnB1dFN0cmVhbS5yZWFkX2J5dGVfcHkycuNyAABqBF8AAFgGAAAAbWV0aG9khlgyAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyUHJvY2Vzc2luZ1RpbWVy5HIAAGrRWwAAWAUAAABjbGFzc3LlcgAAhlhBAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVjaGVjay5BYnN0cmFjdERvRm5XcmFwcGVyLmZpbmlzaF9idW5kbGVy5nIAAGpnZAAAWAYAAABtZXRob2Ry53IAAIZYPwAAAGFwYWNoZV9iZWFtLmlvLnNvdXJjZV90ZXN0X3V0aWxzLmFzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9mYWlsc3LocgAAagRcAABYCAAAAGZ1bmN0aW9uhlgxAAAAYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVTdGF0ZS5EUkFJTklOR3LpcgAAajdbAABYCQAAAGF0dHJpYnV0ZYZYNwAAAGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljLk1ldHJpY3NGaWx0ZXIud2l0aF9uYW1lc3BhY2Vy6nIAAGr+aAAAWAYAAABtZXRob2SGWCwAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lcnLrcgAAaldhAABqn3AAAIZYMwAAAGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SZXN0cmljdGlvblRyYWNrZXIuY2hlY2twb2ludHLscgAAapFkAABYBgAAAG1ldGhvZIZYNgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5waXBlbGluZV9ncmFwaHLtcgAAav1iAABqinAAAIZYOAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlcldhdGVybWFyay5vbl9lbGVtZW50cu5yAABq0VsAAFgGAAAAbWV0aG9kcu9yAACGWGAAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHQuRXZhbHVhdGlvbkNvbnRleHQuc2NoZWR1bGVfcGVuZGluZ191bmJsb2NrZWRfdGFza3Ny8HIAAGr6ZAAAWAYAAABtZXRob2SGWGIAAABhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci5FUlJfSU5WQUxJRF9QUk9KRUNUX05VTUJFUnLxcgAAau5gAABYCQAAAGF0dHJpYnV0ZYZYMAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbC5CYXRjaEVsZW1lbnRzLmV4cGFuZHLycgAAajprAABYBgAAAG1ldGhvZHLzcgAAhlguAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm4uZmluaXNoX2J1bmRsZXL0cgAAaoxfAABYBgAAAG1ldGhvZHL1cgAAhlgoAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LkJpZ1F1ZXJ5U2lua3L2cgAAarNaAABYBQAAAGNsYXNzhlhEAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5kYXRhc3RvcmVpby5SZWFkRnJvbURhdGFzdG9yZS5SZWFkRm5y93IAAGo5ZQAAWAUAAABjbGFzc4ZYUgAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZGF0YXN0b3JlaW8uRGVsZXRlRnJvbURhdGFzdG9yZS50b19kZWxldGVfbXV0YXRpb25y+HIAAGo5ZQAAWAwAAABzdGF0aWNtZXRob2SGWD4AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfcnVubmVyLlN3aXRjaGluZ0RpcmVjdFJ1bm5lcnL5cgAAatBkAABYBQAAAGNsYXNzhlhWAAAAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9ydW5uZXIuSW50ZXJhY3RpdmVSdW5uZXIuc2V0X3JlbmRlcl9vcHRpb25y+nIAAGoZaAAAWAYAAABtZXRob2SGWD4AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2FuYWx5emVyLlBpcGVsaW5lSW5mb3L7cgAAavtdAABYBQAAAGNsYXNzhlguAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm4uZGVmYXVsdF9sYWJlbHL8cgAAaoxfAABYBgAAAG1ldGhvZHL9cgAAhlgiAAAAYXBhY2hlX2JlYW0uaW8udGV4dGlvLlJlYWRGcm9tVGV4dHL+cgAAaqFfAABYBQAAAGNsYXNzhlg1AAAAYXBhY2hlX2JlYW0udXRpbHMucmV0cnkucmV0cnlfb25fc2VydmVyX2Vycm9yc19maWx0ZXJy/3IAAGpsYQAAWAgAAABmdW5jdGlvbnIAcwAAhlguAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5Db21wcmVzc2VkRmlsZS53cml0ZXIBcwAAahlcAABYBgAAAG1ldGhvZIZYOAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlLlRpbWVyU3BlYy50b19ydW5uZXJfYXBpcgJzAABqiGAAAFgGAAAAbWV0aG9kcgNzAACGWCwAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5leGVjdXRvci5FeGVjdXRvcnIEcwAAauloAABYBQAAAGNsYXNzhlgqAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbWlvLlVwbG9hZGVyU3RyZWFtcgVzAABq2mcAAFgFAAAAY2xhc3OGWC4AAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlR1cGxlQ29kZXIua2V5X2NvZGVycgZzAABq72cAAFgGAAAAbWV0aG9khlguAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5Db21wcmVzc2VkRmlsZS5mbHVzaHIHcwAAahlcAABYBgAAAG1ldGhvZIZYGAAAAGFwYWNoZV9iZWFtLnV0aWxzLnBsdWdpbnIIcwAAajlmAABqb3AAAIZYJwAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmxvYWRfZmFzdHIJcwAAan1YAABYCAAAAGZ1bmN0aW9ucgpzAACGWEoAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX3J1bm5lci5JbnRlcmFjdGl2ZVJ1bm5lci5hcHBseXILcwAAahloAABYBgAAAG1ldGhvZIZYQAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5XaW5kb3dJbnRvLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXJyDHMAAGqMXwAAWAwAAABzdGF0aWNtZXRob2RyDXMAAIZYPgAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZmFrZV9kYXRhc3RvcmUuY3JlYXRlX2VudGl0aWVzcg5zAABq5VgAAFgIAAAAZnVuY3Rpb26GWDEAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5iaW5hcnlfZmxvb3JfZGl2aWRlcg9zAABqfVgAAFgIAAAAZnVuY3Rpb25yEHMAAIZYTAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5waXBlbGluZV9ncmFwaF9yZW5kZXJlci5nZXRfcmVuZGVyZXJyEXMAAGrFYwAAWAgAAABmdW5jdGlvboZYKwAAAGFwYWNoZV9iZWFtLmlvLnBhcnF1ZXRpby5SZWFkQWxsRnJvbVBhcnF1ZXRyEnMAAGrpXAAAWAUAAABjbGFzc4ZYMAAAAGFwYWNoZV9iZWFtLm1ldHJpY3MuY2VsbHMuRGlzdHJpYnV0aW9uUmVzdWx0Lm1pbnITcwAAanBdAABYCQAAAGF0dHJpYnV0ZYZYNgAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuaGVscGVyLndyaXRlX211dGF0aW9uc3IUcwAAaoVdAABYCAAAAGZ1bmN0aW9uhlhCAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuVGltZXN0YW1wQ29tYmluZXIuT1VUUFVUX0FUX0VBUkxJRVNUchVzAABqUmQAAFgJAAAAYXR0cmlidXRlchZzAACGWCgAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5iaW5hcnlfeG9ychdzAABqfVgAAFgIAAAAZnVuY3Rpb25yGHMAAIZYRgAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2suQWJzdHJhY3REb0ZuV3JhcHBlci5pc19wcm9jZXNzX2JvdW5kZWRyGXMAAGpnZAAAWAYAAABtZXRob2RyGnMAAIZYPgAAAGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5CaWdRdWVyeURpc3Bvc2l0aW9uLldSSVRFX1RSVU5DQVRFchtzAABqs1oAAFgJAAAAYXR0cmlidXRlhlg7AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLlBhckRvLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXJyHHMAAGqMXwAAWAwAAABzdGF0aWNtZXRob2RyHXMAAIZYRwAAAGFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIuUnVudGltZVZhbHVlUHJvdmlkZXIucnVudGltZV9vcHRpb25zch5zAABqnloAAFgJAAAAYXR0cmlidXRlhlgpAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuaW1wb3J0X25hbWVyH3MAAGp9WAAAWAgAAABmdW5jdGlvbnIgcwAAhlg6AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuR2xvYmFsV2luZG93cy53aW5kb3dlZF92YWx1ZXIhcwAAalJkAABYCwAAAGNsYXNzbWV0aG9kciJzAACGWFEAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmRhdGFzdG9yZWlvLlJlYWRGcm9tRGF0YXN0b3JlLlJlYWRGbi5zdGFydF9idW5kbGVyI3MAAGo5ZQAAWAYAAABtZXRob2SGWDEAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5Db3VudC5QZXJFbGVtZW50ciRzAABqXmMAAFgFAAAAY2xhc3OGWBgAAABhcGFjaGVfYmVhbS5pby5nY3AuZ2NzaW9yJXMAAGpjZgAAarZwAACGWFwAAABhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci5FUlJfSU5WQUxJRF9KT0JfTkFNRXImcwAAau5gAABYCQAAAGF0dHJpYnV0ZYZYSwAAAGFwYWNoZV9iZWFtLmlvLnJlc3RyaWN0aW9uX3RyYWNrZXJzLk9mZnNldFJlc3RyaWN0aW9uVHJhY2tlci5zdGFydF9wb3NpdGlvbnIncwAAatRoAABYBgAAAG1ldGhvZIZYQgAAAGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm1vZGVscy5uZXhtYXJrX21vZGVsLlBlcnNvbnIocwAAaqthAABYBQAAAGNsYXNzhlg1AAAAYXBhY2hlX2JlYW0uaW8uaGFkb29wZmlsZXN5c3RlbS5IYWRvb3BGaWxlU3lzdGVtLmpvaW5yKXMAAGpCYQAAWAYAAABtZXRob2SGWCEAAABhcGFjaGVfYmVhbS5waXBlbGluZS5QaXBlbGluZS5ydW5yKnMAAGrmXQAAWAYAAABtZXRob2SGWE0AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHQuRXZhbHVhdGlvbkNvbnRleHQuaGFuZGxlX3Jlc3VsdHIrcwAAavpkAABYBgAAAG1ldGhvZIZYKwAAAGFwYWNoZV9iZWFtLmlvLmdjcC5nY3Npby5HY3NJTy5kZWxldGVfYmF0Y2hyLHMAAGpjZgAAWAYAAABtZXRob2SGWCkAAABhcGFjaGVfYmVhbS51dGlscy5wcm90b191dGlscy5mcm9tX21pY3Jvc3ItcwAAahRiAABYCAAAAGZ1bmN0aW9uci5zAACGWDQAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZS5CYWdSdW50aW1lU3RhdGUuYWRkci9zAABqiGAAAFgGAAAAbWV0aG9kcjBzAACGWFwAAABhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci5pc19mdWxsX3N0cmluZ19tYXRjaHIxcwAAau5gAABYBgAAAG1ldGhvZIZYXAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5waXBlbGluZV9ncmFwaF9yZW5kZXJlci5QaXBlbGluZUdyYXBoUmVuZGVyZXIub3B0aW9ucjJzAABqxWMAAFgLAAAAY2xhc3NtZXRob2SGWCMAAABhcGFjaGVfYmVhbS5pby5yZXN0cmljdGlvbl90cmFja2Vyc3IzcwAAatRoAABqrHAAAIZYJwAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLnN0b3JlX21hcHI0cwAAan1YAABYCAAAAGZ1bmN0aW9ucjVzAACGWC0AAABhcGFjaGVfYmVhbS5jb2RlcnMub2JzZXJ2YWJsZS5PYnNlcnZhYmxlTWl4aW5yNnMAAGp8ZAAAWAUAAABjbGFzc4ZYNwAAAGFwYWNoZV9iZWFtLm1ldHJpY3MubW9uaXRvcmluZ19pbmZvcy50b190aW1lc3RhbXBfcHJvdG9yN3MAAGp4ZgAAWAgAAABmdW5jdGlvboZYLQAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zLmV4aXN0c3I4cwAAasdYAABYDAAAAHN0YXRpY21ldGhvZIZYMwAAAGFwYWNoZV9iZWFtLnRvb2xzLmNvZGVyc19taWNyb2JlbmNobWFyay5zbWFsbF90dXBsZXI5cwAAaoZiAABYCAAAAGZ1bmN0aW9uhlg8AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuR2xvYmFsV2luZG93cy5nZXRfd2luZG93X2NvZGVycjpzAABqUmQAAFgGAAAAbWV0aG9kcjtzAACGWBoAAABhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpY3I8cwAAav5oAABqrHAAAIZYMQAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2pvYl9hcGlfcGIyX2dycGNyPXMAAGoTaQAAamRxAACGWCcAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy51bmFyeV9ub3RyPnMAAGp9WAAAWAgAAABmdW5jdGlvbnI/cwAAhlgTAAAAYXBhY2hlX2JlYW0ucnVubmVyc3JAcwAAaj9UAABqn3AAAIZYXgAAAGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yLnZhbGlkYXRlX2Nsb3VkX29wdGlvbnNyQXMAAGruYAAAWAYAAABtZXRob2SGWD4AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuR3JvdXBCeUtleS50b19ydW5uZXJfYXBpX3BhcmFtZXRlcnJCcwAAaoxfAABYBgAAAG1ldGhvZHJDcwAAhlg3AAAAYXBhY2hlX2JlYW0uaW8uaGFkb29wZmlsZXN5c3RlbS5IYWRvb3BGaWxlU3lzdGVtLmRlbGV0ZXJEcwAAakJhAABYBgAAAG1ldGhvZIZYKwAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zLmpvaW5yRXMAAGrHWAAAWAwAAABzdGF0aWNtZXRob2SGWDUAAABhcGFjaGVfYmVhbS5pby5sb2NhbGZpbGVzeXN0ZW0uTG9jYWxGaWxlU3lzdGVtLm1rZGlyc3JGcwAAatFqAABYBgAAAG1ldGhvZIZYOwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlclByb2Nlc3NpbmdUaW1lLm9uX21lcmdlckdzAABq0VsAAFgGAAAAbWV0aG9kckhzAACGWEAAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UuTmF0aXZlU291cmNlUmVhZGVycklzAABqxmkAAFgFAAAAY2xhc3OGWD0AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRmxhdHRlbi5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyckpzAABqjF8AAFgMAAAAc3RhdGljbWV0aG9kcktzAACGWEUAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5HbG9iYWxXaW5kb3dzLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXJyTHMAAGpSZAAAWAwAAABzdGF0aWNtZXRob2RyTXMAAIZYQQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dC5EaXJlY3RVbm1lcmdlZFN0YXRlck5zAABq+mQAAFgFAAAAY2xhc3OGWC4AAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5jYWxsX2Z1bmN0aW9uX2t3ck9zAABqfVgAAFgIAAAAZnVuY3Rpb25yUHMAAIZYKAAAAGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZS5HYXVnZS5zZXRyUXMAAGqbZwAAWAYAAABtZXRob2SGWCgAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5iaW5hcnlfYWRkclJzAABqfVgAAFgIAAAAZnVuY3Rpb25yU3MAAIZYLwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbC5Db0dyb3VwQnlLZXkuZXhwYW5kclRzAABqOmsAAFgGAAAAbWV0aG9kclVzAACGWD0AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5leGVjdXRvci5FeGVjdXRvci5hd2FpdF9jb21wbGV0aW9uclZzAABq6WgAAFgGAAAAbWV0aG9khlgtAAAAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoZV9tYW5hZ2VycldzAABqA1kAAGqKcAAAhlg7AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUuQmFnU3RhdGVTcGVjLnRvX3J1bm5lcl9hcGlyWHMAAGqIYAAAWAYAAABtZXRob2RyWXMAAIZYLAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LndhdGVybWFya19tYW5hZ2VyclpzAABqu1kAAGoScgAAhlhVAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fYXJ0aWZhY3RfYXBpX3BiMl9ncnBjLkFydGlmYWN0U3RhZ2luZ1NlcnZpY2VTZXJ2aWNlcnJbcwAAaiRmAABYBQAAAGNsYXNzhlhKAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5kYXRhc3RvcmVpby5SZWFkRnJvbURhdGFzdG9yZS5TcGxpdFF1ZXJ5Rm5yXHMAAGo5ZQAAWAUAAABjbGFzc4ZYPAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtLmZyb21fcnVubmVyX2FwaXJdcwAAak1fAABYCwAAAGNsYXNzbWV0aG9kcl5zAACGWBkAAABhcGFjaGVfYmVhbS5pby5nY3AucHVic3Vicl9zAABqG1oAAGq2cAAAhlgzAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLldpbmRvd0ludG8uV2luZG93SW50b0ZucmBzAABqjF8AAFgFAAAAY2xhc3NyYXMAAIZYLgAAAGFwYWNoZV9iZWFtLmlvLmF2cm9pby5Xcml0ZVRvQXZyby5kaXNwbGF5X2RhdGFyYnMAAGpfWAAAWAYAAABtZXRob2SGWDUAAABhcGFjaGVfYmVhbS5pby5wYXJxdWV0aW8uUmVhZEZyb21QYXJxdWV0LmRpc3BsYXlfZGF0YXJjcwAAaulcAABYBgAAAG1ldGhvZIZYJAAAAGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc3JkcwAAaolaAABqZHEAAIZYJAAAAGFwYWNoZV9iZWFtLnRlc3RpbmcudXRpbC5hc3NlcnRfdGhhdHJlcwAAahJjAABYCAAAAGZ1bmN0aW9uhlgvAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuVGltZXN0YW1wQ29tYmluZXJyZnMAAGpSZAAAWAUAAABjbGFzc3JncwAAhlgxAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuRml4ZWRXaW5kb3dzLm9mZnNldHJocwAAalJkAABYCQAAAGF0dHJpYnV0ZXJpcwAAhlg5AAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5xdWVyeV9zcGxpdHRlci5nZXRfc3BsaXRzcmpzAABqu2QAAFgIAAAAZnVuY3Rpb26GWFgAAABhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci5FTkRQT0lOVF9QQVRURVJOcmtzAABq7mAAAFgJAAAAYXR0cmlidXRlhlg3AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuSW50ZXJ2YWxXaW5kb3cuaW50ZXJzZWN0c3JscwAAalJkAABYBgAAAG1ldGhvZHJtcwAAhlglAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVGbnJucwAAaoxfAABYBQAAAGNsYXNzcm9zAACGWDoAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybS5nZXRfd2luZG93aW5ncnBzAABqTV8AAFgGAAAAbWV0aG9kcnFzAACGWFQAAABhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PZmZzZXRSYW5nZVRyYWNrZXIuc2V0X3NwbGl0X3BvaW50c191bmNsYWltZWRfY2FsbGJhY2tycnMAAGrUXAAAWAYAAABtZXRob2SGWDAAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGNyc3MAAGolawAAamRxAACGWC4AAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlX3dyaXRlX2l0X3BpcGVsaW5lcnRzAABqWFwAAGq2cAAAhlgwAAAAYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT2Zmc2V0UmFuZ2VUcmFja2VycnVzAABq1FwAAFgFAAAAY2xhc3OGWCUAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5NZWFucnZzAABqXmMAAFgFAAAAY2xhc3OGWCgAAABhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYy5NZXRyaWNzLmdhdWdlcndzAABq/mgAAFgMAAAAc3RhdGljbWV0aG9khlgrAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMubWFrZV9mdW5jdGlvbnJ4cwAAan1YAABYCAAAAGZ1bmN0aW9ucnlzAACGWCIAAABhcGFjaGVfYmVhbS5pby5pb2Jhc2UuV3JpdGUuZXhwYW5kcnpzAABqkWQAAFgGAAAAbWV0aG9khlg3AAAAYXBhY2hlX2JlYW0uaW8uaGFkb29wZmlsZXN5c3RlbS5IYWRvb3BGaWxlU3lzdGVtLnNjaGVtZXJ7cwAAakJhAABYCwAAAGNsYXNzbWV0aG9khlhFAAAAYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT2Zmc2V0UmFuZ2VUcmFja2VyLnNldF9jdXJyZW50X3Bvc2l0aW9ucnxzAABq1FwAAFgGAAAAbWV0aG9khlhSAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLlJlYWRlclByb2dyZXNzLmNvbnN1bWVkX3NwbGl0X3BvaW50c3J9cwAAasZpAABYCQAAAGF0dHJpYnV0ZYZYKwAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pby5QaXBlU3RyZWFtLnRlbGxyfnMAAGraZwAAWAYAAABtZXRob2SGWCgAAABhcGFjaGVfYmVhbS51dGlscy5wcm9jZXNzZXMuY2hlY2tfb3V0cHV0cn9zAABqGGEAAFgIAAAAZnVuY3Rpb25ygHMAAIZYRwAAAGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9ycoFzAABq7mAAAFgFAAAAY2xhc3OGWC4AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5Ub0xpc3QuZXhwYW5kcoJzAABqXmMAAFgGAAAAbWV0aG9khlgmAAAAYXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmVyg3MAAGrLXwAAajdyAACGWEgAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmNhY2hlX21hbmFnZXIuRmlsZUJhc2VkQ2FjaGVNYW5hZ2VyLnNpbmtyhHMAAGoDWQAAWAYAAABtZXRob2SGWDcAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkNvZGVyLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVycoVzAABq72cAAFgGAAAAbWV0aG9khlhhAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uc3RyZWFtaW5nX2NyZWF0ZS5TdHJlYW1pbmdDcmVhdGUuSW1wdWxzZS5pbmZlcl9vdXRwdXRfdHlwZXKGcwAAasBhAABYBgAAAG1ldGhvZIZYIwAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuRGlsbENvZGVycodzAABq72cAAFgFAAAAY2xhc3OGWC4AAABhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9ycohzAABq7mAAAGpkcQAAhlgxAAAAYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wLlRpbWVzdGFtcC5wcmVkZWNlc3NvcnKJcwAAaoFhAABYBgAAAG1ldGhvZHKKcwAAhlgaAAAAYXBhY2hlX2JlYW0udXRpbHMucHJvZmlsZXJyi3MAAGoDYQAAam9wAACGWCAAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwuS2V5c3KMcwAAajprAABYCAAAAGZ1bmN0aW9uco1zAACGWCwAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5oZWxwZXJfdHJhbnNmb3Jtc3KOcwAAai1hAABqEnIAAIZYVQAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuYWRhcHRpdmVfdGhyb3R0bGVyLkFkYXB0aXZlVGhyb3R0bGVyLnRocm90dGxlX3JlcXVlc3Ryj3MAAGqmZAAAWAYAAABtZXRob2SGWGcAAABhcGFjaGVfYmVhbS5pby5mbGluay5mbGlua19zdHJlYW1pbmdfaW1wdWxzZV9zb3VyY2UuRmxpbmtTdHJlYW1pbmdJbXB1bHNlU291cmNlLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVycpBzAABqnVkAAFgGAAAAbWV0aG9khlgzAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMubGFzdF91cGRhdGVkcpFzAABqx1gAAFgMAAAAc3RhdGljbWV0aG9khlgsAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuU2Vzc2lvbnMubWVyZ2VyknMAAGpSZAAAWAYAAABtZXRob2Ryk3MAAIZYNwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LldpbmRvd0ZuLmdldF93aW5kb3dfY29kZXJylHMAAGpSZAAAWAYAAABtZXRob2RylXMAAIZYMQAAAGFwYWNoZV9iZWFtLmlvLnZjZmlvLk1hbGZvcm1lZFZjZlJlY29yZC5maWxlX25hbWVylnMAAGpGXQAAWAkAAABhdHRyaWJ1dGWGWCkAAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkZpbGVTeXN0ZW0uY29weXKXcwAAahlcAABYBgAAAG1ldGhvZIZYQwAAAGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLk9yZGVyZWRQb3NpdGlvblJhbmdlVHJhY2tlci50cnlfY2xhaW1ymHMAAGrUXAAAWAYAAABtZXRob2SGWB8AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRpbWV1dGlscplzAABqJGUAAGq9cAAAhlhMAAAAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoZV9tYW5hZ2VyLkNhY2hlTWFuYWdlci5pc19sYXRlc3RfdmVyc2lvbnKacwAAagNZAABYBgAAAG1ldGhvZIZYLQAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLnVucGFja19zZXF1ZW5jZXKbcwAAan1YAABYCAAAAGZ1bmN0aW9ucpxzAACGWDUAAABhcGFjaGVfYmVhbS5pby5sb2NhbGZpbGVzeXN0ZW0uTG9jYWxGaWxlU3lzdGVtLmV4aXN0c3KdcwAAatFqAABYBgAAAG1ldGhvZIZYKwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lR2xvYmFsbHlynnMAAGqMXwAAWAUAAABjbGFzc3KfcwAAhlgmAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMucm90X2ZvdXJyoHMAAGp9WAAAWAgAAABmdW5jdGlvbnKhcwAAhlggAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnNyonMAAGpeYwAAajdyAACGWFQAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lci5DcmVhdGVQVHJhbnNmb3JtT3ZlcnJpZGVyo3MAAGpXYQAAWAUAAABjbGFzc4ZYOQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLlNhbXBsZS5GaXhlZFNpemVHbG9iYWxseXKkcwAAal5jAABYBQAAAGNsYXNzhlgyAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5Db21wcmVzc2VkRmlsZS53cml0ZWFibGVypXMAAGoZXAAAWAYAAABtZXRob2SGWDYAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5Ob25NZXJnaW5nV2luZG93Rm4ubWVyZ2VypnMAAGpSZAAAWAYAAABtZXRob2Ryp3MAAIZYNAAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuaGVscGVyLlF1ZXJ5SXRlcmF0b3JyqHMAAGqFXQAAWAUAAABjbGFzc4ZYGgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0cqlzAABqFFQAAGqfcAAAhlg7AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUuVXNlclN0YXRlQ29udGV4dC5nZXRfc3RhdGVyqnMAAGqIYAAAWAYAAABtZXRob2Ryq3MAAIZYKgAAAGFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lLnJ1bnKscwAAastfAABYCAAAAGZ1bmN0aW9uhlhMAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLkR5bmFtaWNTcGxpdFJlc3VsdFdpdGhQb3NpdGlvbnKtcwAAasZpAABYBQAAAGNsYXNzhlhDAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjLkJlYW1GbkRhdGFTZXJ2aWNlcnKucwAAaiVrAABYBQAAAGNsYXNzhlhJAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLkdvb2dsZUNsb3VkT3B0aW9ucy5EQVRBRkxPV19FTkRQT0lOVHKvcwAAaolaAABYCQAAAGF0dHJpYnV0ZYZYOQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lRm4ubWF5YmVfZnJvbV9jYWxsYWJsZXKwcwAAaoxfAABYDAAAAHN0YXRpY21ldGhvZHKxcwAAhlhSAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IuR0NTX1NDSEVNRXKycwAAau5gAABYCQAAAGF0dHJpYnV0ZYZYMAAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZS5oYXNoYWJsZXKzcwAAarFpAABYCAAAAGZ1bmN0aW9ucrRzAACGWGIAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lci5Qcm9jZXNzS2V5ZWRFbGVtZW50c1ZpYUtleWVkV29ya0l0ZW1zT3ZlcnJpZGUubWF0Y2hlc3K1cwAAauVkAABYBgAAAG1ldGhvZIZYOAAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuV2luZG93ZWRWYWx1ZUNvZGVyLnZhbHVlX2NvZGVycrZzAABq72cAAFgGAAAAbWV0aG9khlgrAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuYmluYXJ5X2RpdmlkZXK3cwAAan1YAABYCAAAAGZ1bmN0aW9ucrhzAACGWCMAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5jb21tb25fdXJuc3K5cwAAasFmAABqn3AAAIZYMwAAAGFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIuY2hlY2tfYWNjZXNzaWJsZXK6cwAAap5aAABYCAAAAGZ1bmN0aW9uhlhBAAAAYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLk91dHB1dFN0cmVhbS53cml0ZV9iaWdlbmRpYW5faW50NjRyu3MAAGoEXwAAWAYAAABtZXRob2SGWDwAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlBpY2tsZUNvZGVyLmFzX2RldGVybWluaXN0aWNfY29kZXJyvHMAAGrvZwAAWAYAAABtZXRob2SGWEAAAABhcGFjaGVfYmVhbS5pbnRlcm5hbC5odHRwX2NsaWVudC5wcm94eV9pbmZvX2Zyb21fZW52aXJvbm1lbnRfdmFycr1zAABqXGIAAFgIAAAAZnVuY3Rpb26GWDwAAABhcGFjaGVfYmVhbS5pby5yZXN0cmljdGlvbl90cmFja2Vycy5PZmZzZXRSZXN0cmljdGlvblRyYWNrZXJyvnMAAGrUaAAAWAUAAABjbGFzc4ZYQwAAAGFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIuUnVudGltZVZhbHVlUHJvdmlkZXIuZXhwZXJpbWVudHNyv3MAAGqeWgAAWAkAAABhdHRyaWJ1dGWGWCcAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJBbnlywHMAAGrRWwAAWAUAAABjbGFzc3LBcwAAhlgqAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkZsYXR0ZW4uZXhwYW5kcsJzAABqjF8AAFgGAAAAbWV0aG9kcsNzAACGWDkAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuRGVmYXVsdFRyaWdnZXIuc2hvdWxkX2ZpcmVyxHMAAGrRWwAAWAYAAABtZXRob2RyxXMAAIZYKQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckNvdW50csZzAABq0VsAAFgFAAAAY2xhc3Nyx3MAAIZYMwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlcldhdGVybWFyay5yZXNldHLIcwAAatFbAABYBgAAAG1ldGhvZHLJcwAAhlhAAAAAYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT2Zmc2V0UmFuZ2VUcmFja2VyLk9GRlNFVF9JTkZJTklUWXLKcwAAatRcAABYCQAAAGF0dHJpYnV0ZYZYMgAAAGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5EaXJlY3RPcHRpb25zcstzAABqiVoAAFgFAAAAY2xhc3OGWDcAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZS52YWxpZGF0ZV9zdGF0ZWZ1bF9kb2ZucsxzAABqiGAAAFgIAAAAZnVuY3Rpb25yzXMAAIZYLwAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQ29kZXIuYXNfY2xvdWRfb2JqZWN0cs5zAABq72cAAFgGAAAAbWV0aG9khlgzAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVGbi5mcm9tX2NhbGxhYmxlcs9zAABqjF8AAFgMAAAAc3RhdGljbWV0aG9kctBzAACGWCcAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5Ub0xpc3Ry0XMAAGpeYwAAWAUAAABjbGFzc4ZYIgAAAGFwYWNoZV9iZWFtLnV0aWxzLnJldHJ5Lm5vX3JldHJpZXNy0nMAAGpsYQAAWAgAAABmdW5jdGlvbnLTcwAAhlgtAAAAYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVSdW5uZXIucnVuctRzAABqN1sAAFgGAAAAbWV0aG9khlgtAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlctVzAABqxmkAAGqfcAAAhlhjAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fYXJ0aWZhY3RfYXBpX3BiMl9ncnBjLmFkZF9BcnRpZmFjdFN0YWdpbmdTZXJ2aWNlU2VydmljZXJfdG9fc2VydmVyctZzAABqJGYAAFgIAAAAZnVuY3Rpb26GWEwAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfdXNlcnN0YXRlLkRpcmVjdFVzZXJTdGF0ZUNvbnRleHQuZ2V0X3N0YXRlctdzAABq22kAAFgGAAAAbWV0aG9khlgxAAAAYXBhY2hlX2JlYW0uaW8udGZyZWNvcmRpby5SZWFkRnJvbVRGUmVjb3JkLmV4cGFuZHLYcwAAak5lAABYBgAAAG1ldGhvZIZYKQAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmxvYWRfZ2xvYmFsctlzAABqfVgAAFgIAAAAZnVuY3Rpb25y2nMAAIZYLAAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmlucGxhY2VfbHNoaWZ0cttzAABqfVgAAFgIAAAAZnVuY3Rpb25y3HMAAIZYNQAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pby5Eb3dubG9hZGVyU3RyZWFtLnJlYWRhYmxlct1zAABq2mcAAFgGAAAAbWV0aG9khlgnAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyQWxsct5zAABq0VsAAFgFAAAAY2xhc3Ny33MAAIZYQQAAAGFwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2UuQ29uY2F0UmFuZ2VUcmFja2VyLmZyYWN0aW9uX2NvbnN1bWVkcuBzAABqT2sAAFgGAAAAbWV0aG9khlgZAAAAYXBhY2hlX2JlYW0ucHZhbHVlLkFzTGlzdHLhcwAAak5mAABYBQAAAGNsYXNzhlg1AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkltcHVsc2UuaW5mZXJfb3V0cHV0X3R5cGVy4nMAAGqMXwAAWAYAAABtZXRob2Ry43MAAIZYLwAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5kZWNvcmF0b3JzLlR5cGVDaGVja0Vycm9ycuRzAABqKWcAAFgJAAAAZXhjZXB0aW9ucuVzAACGWCsAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5HbG9iYWxXaW5kb3dzcuZzAABqUmQAAFgFAAAAY2xhc3Ny53MAAIZYPQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfbWV0cmljcy5EYXRhZmxvd01ldHJpY3Ny6HMAAGqSagAAWAUAAABjbGFzc4ZYGwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZXLpcwAAaoxfAABqvXAAAIZYLAAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmRlbGV0ZV9zbGljZV8wcupzAABqfVgAAFgIAAAAZnVuY3Rpb25y63MAAIZYPQAAAGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5CeXRlQ291bnRpbmdPdXRwdXRTdHJlYW0ud3JpdGVy7HMAAGoEXwAAWAYAAABtZXRob2SGWCwAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5kZWxldGVfc2xpY2VfMnLtcwAAan1YAABYCAAAAGZ1bmN0aW9ucu5zAACGWCwAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5kZWxldGVfc2xpY2VfM3LvcwAAan1YAABYCAAAAGZ1bmN0aW9ucvBzAACGWDgAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJFYWNoLmZyb21fcnVubmVyX2FwaXLxcwAAatFbAABYDAAAAHN0YXRpY21ldGhvZHLycwAAhlgvAAAAYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVSdW5uZXIuYXBwbHly83MAAGo3WwAAWAYAAABtZXRob2SGWB0AAABhcGFjaGVfYmVhbS5waXBlbGluZS5QaXBlbGluZXL0cwAAauZdAABYBQAAAGNsYXNzhlguAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLlBhckRvLndpdGhfb3V0cHV0c3L1cwAAaoxfAABYBgAAAG1ldGhvZHL2cwAAhlgzAAAAYXBhY2hlX2JlYW0uaW8uZmxpbmsuZmxpbmtfc3RyZWFtaW5nX2ltcHVsc2Vfc291cmNlcvdzAABqnVkAAGqKcgAAhlgmAAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2Rlci5lbmNvZGVy+HMAAGrvZwAAWAYAAABtZXRob2SGWC8AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC51dGlsLlRyYW5zZm9ybVJlc3VsdHL5cwAAauVlAABYBQAAAGNsYXNzhlgxAAAAYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wLlRpbWVzdGFtcC5SRkNfMzMzOV9SRXL6cwAAaoFhAABYCQAAAGF0dHJpYnV0ZXL7cwAAhlg5AAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLlRlc3RPcHRpb25zLnZhbGlkYXRlcvxzAABqiVoAAFgGAAAAbWV0aG9khlgzAAAAYXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtLkxvY2FsRmlsZVN5c3RlbS5zaXplcv1zAABq0WoAAFgGAAAAbWV0aG9khlg5AAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5GYXN0UHJpbWl0aXZlc0NvZGVyLnZhbHVlX2NvZGVycv5zAABq72cAAFgGAAAAbWV0aG9khlgtAAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2Rlci5lc3RpbWF0ZV9zaXplcv9zAABq72cAAFgGAAAAbWV0aG9khlgpAAAAYXBhY2hlX2JlYW0ucGlwZWxpbmUuUGlwZWxpbmUucmVwbGFjZV9hbGxyAHQAAGrmXQAAWAYAAABtZXRob2SGWEgAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlX3dyaXRlX2l0X3BpcGVsaW5lLkVudGl0eVdyYXBwZXIubWFrZV9lbnRpdHlyAXQAAGpYXAAAWAYAAABtZXRob2SGWCoAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5zdG9yZV9nbG9iYWxyAnQAAGp9WAAAWAgAAABmdW5jdGlvbnIDdAAAhlg3AAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5TdHJVdGY4Q29kZXIuaXNfZGV0ZXJtaW5pc3RpY3IEdAAAau9nAABYBgAAAG1ldGhvZIZYKgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93Lkdsb2JhbFdpbmRvd3IFdAAAalJkAABYBQAAAGNsYXNzcgZ0AACGWBQAAABhcGFjaGVfYmVhbS5pby51dGlsc3IHdAAAakNcAABqrHAAAIZYGAAAAGFwYWNoZV9iZWFtLmludGVybmFsLmdjcHIIdAAAaixVAABqtHAAAIZYMAAAAGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5UZXN0T3B0aW9uc3IJdAAAaolaAABYBQAAAGNsYXNzhlg9AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuU2xpZGluZ1dpbmRvd3MuZ2V0X3dpbmRvd19jb2RlcnIKdAAAalJkAABYBgAAAG1ldGhvZHILdAAAhlg0AAAAYXBhY2hlX2JlYW0ubWV0cmljcy5tb25pdG9yaW5nX2luZm9zLmlzX2Rpc3RyaWJ1dGlvbnIMdAAAanhmAABYCAAAAGZ1bmN0aW9uhlg1AAAAYXBhY2hlX2JlYW0udXRpbHMucmV0cnkucmV0cnlfb25fYmVhbV9pb19lcnJvcl9maWx0ZXJyDXQAAGpsYQAAWAgAAABmdW5jdGlvbnIOdAAAhlg6AAAAYXBhY2hlX2JlYW0ubWV0cmljcy5tb25pdG9yaW5nX2luZm9zLmV4dHJhY3RfY291bnRlcl92YWx1ZXIPdAAAanhmAABYCAAAAGZ1bmN0aW9uhlgXAAAAYXBhY2hlX2JlYW0ucnVubmVycy5qb2JyEHQAAGqyVAAAaopwAACGWB4AAABhcGFjaGVfYmVhbS5wdmFsdWUuQXNTaW5nbGV0b25yEXQAAGpOZgAAWAUAAABjbGFzc4ZYLAAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmlucGxhY2VfcnNoaWZ0chJ0AABqfVgAAFgIAAAAZnVuY3Rpb25yE3QAAIZYKwAAAGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF91dGlscy5jb21wdXRlX2hhc2hyFHQAAGrqYQAAWAgAAABmdW5jdGlvboZYOAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5UcmlnZ2VyRm4uZnJvbV9ydW5uZXJfYXBpchV0AABq0VsAAFgMAAAAc3RhdGljbWV0aG9kchZ0AACGWDEAAABhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl9jb21tb24uU3BsaXRSZXN0cmljdGlvbkZuchd0AABq/lwAAFgFAAAAY2xhc3OGWDEAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZVBlcktleS5tYWtlX2Zuchh0AABqjF8AAFgGAAAAbWV0aG9kchl0AACGWDEAAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzZWRGaWxlLnNlZWthYmxlchp0AABqGVwAAFgJAAAAYXR0cmlidXRlhlg9AAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuY29uc3VtZXJfdHJhY2tpbmdfcGlwZWxpbmVfdmlzaXRvcnIbdAAAahBeAABqEnIAAIZYQgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfYW5hbHl6ZXIuUGlwZWxpbmVBbmFseXplcnIcdAAAavtdAABYBQAAAGNsYXNzhlhDAAAAYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyLnNwbGl0X3BvaW50c3IddAAAatRcAABYBgAAAG1ldGhvZIZYKAAAAGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SZWFkLmdldF93aW5kb3dpbmdyHnQAAGqRZAAAWAYAAABtZXRob2SGWE4AAABhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXIucG9zaXRpb25fdG9fZnJhY3Rpb25yH3QAAGrUXAAAWAYAAABtZXRob2SGWDYAAABhcGFjaGVfYmVhbS5tZXRyaWNzLm1vbml0b3JpbmdfaW5mb3MudG9fdGltZXN0YW1wX3NlY3NyIHQAAGp4ZgAAWAgAAABmdW5jdGlvboZYJAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLlRvcHIhdAAAal5jAABYBQAAAGNsYXNzhlgzAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuU2xpZGluZ1dpbmRvd3MucGVyaW9kciJ0AABqUmQAAFgJAAAAYXR0cmlidXRlciN0AACGWDgAAABhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkuV3JpdGVUb0JpZ1F1ZXJ5LmRpc3BsYXlfZGF0YXIkdAAAarNaAABYBgAAAG1ldGhvZIZYKAAAAGFwYWNoZV9iZWFtLnV0aWxzLnByb3RvX3V0aWxzLnVucGFja19BbnlyJXQAAGoUYgAAWAgAAABmdW5jdGlvbnImdAAAhlgwAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuYmluYXJ5X3RydWVfZGl2aWRlcid0AABqfVgAAFgIAAAAZnVuY3Rpb25yKHQAAIZYLgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheS5EaXNwbGF5RGF0YUl0ZW1yKXQAAGo2WQAAWAUAAABjbGFzc3IqdAAAhlguAAAAYXBhY2hlX2JlYW0uaW50ZXJuYWwudXRpbC5ydW5fdXNpbmdfdGhyZWFkcG9vbHIrdAAAaptiAABYCAAAAGZ1bmN0aW9uhlgrAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMudW5hcnlfY29udmVydHIsdAAAan1YAABYCAAAAGZ1bmN0aW9uci10AACGWC4AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJFYWNoLnJlc2V0ci50AABq0VsAAFgGAAAAbWV0aG9kci90AACGWDgAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUZuLmNyZWF0ZV9hY2N1bXVsYXRvcnIwdAAAaoxfAABYBgAAAG1ldGhvZHIxdAAAhlgqAAAAYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc2luay5GaWxlQmFzZWRTaW5rcjJ0AABqd18AAFgFAAAAY2xhc3OGWDsAAABhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2UuRmlsZUJhc2VkU291cmNlLmRpc3BsYXlfZGF0YXIzdAAAamRrAABYBgAAAG1ldGhvZIZYMwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlNsaWRpbmdXaW5kb3dzLmFzc2lnbnI0dAAAalJkAABYBgAAAG1ldGhvZHI1dAAAhlg+AAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIuUHJvY2Vzc0ZuLnByb2Nlc3NyNnQAAGrlZAAAWAYAAABtZXRob2SGWEQAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybS50b19ydW5uZXJfYXBpX3BhcmFtZXRlcnI3dAAAak1fAABYBgAAAG1ldGhvZHI4dAAAhlgrAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuYmluYXJ5X21vZHVsb3I5dAAAan1YAABYCAAAAGZ1bmN0aW9ucjp0AACGWDMAAABhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uSW5wdXRTdHJlYW0ucmVhZF9hbGxyO3QAAGoEXwAAWAYAAABtZXRob2SGWDIAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJDb3VudC5vbl9tZXJnZXI8dAAAatFbAABYBgAAAG1ldGhvZHI9dAAAhlhlAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fYXJ0aWZhY3RfYXBpX3BiMl9ncnBjLmFkZF9BcnRpZmFjdFJldHJpZXZhbFNlcnZpY2VTZXJ2aWNlcl90b19zZXJ2ZXJyPnQAAGokZgAAWAgAAABmdW5jdGlvboZYMgAAAGFwYWNoZV9iZWFtLnRvb2xzLmNvZGVyc19taWNyb2JlbmNobWFyay5sYXJnZV9saXN0cj90AABqhmIAAFgIAAAAZnVuY3Rpb26GWAsAAABhcGFjaGVfYmVhbXJAdAAAahpUAABqb3AAAIZYLgAAAGFwYWNoZV9iZWFtLmlvLnRleHRpby5SZWFkRnJvbVRleHRXaXRoRmlsZW5hbWVyQXQAAGqhXwAAWAUAAABjbGFzc4ZYUAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfcnVubmVyLkludGVyYWN0aXZlUnVubmVyLmVuZF9zZXNzaW9uckJ0AABqGWgAAFgGAAAAbWV0aG9khlg1AAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5WYXJJbnRDb2Rlci5hc19jbG91ZF9vYmplY3RyQ3QAAGrvZwAAWAYAAABtZXRob2SGWDsAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXkuRGlzcGxheURhdGFJdGVtLmRyb3BfaWZfbm9uZXJEdAAAajZZAABYBgAAAG1ldGhvZHJFdAAAhlgpAAAAYXBhY2hlX2JlYW0udXRpbHMucHJvZmlsZXIuTWVtb3J5UmVwb3J0ZXJyRnQAAGoDYQAAWAUAAABjbGFzc3JHdAAAhlgmAAAAYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3V0aWxzLlRlbXBEaXJySHQAAGrqYQAAWAUAAABjbGFzc4ZYOgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV4ZWN1dG9yLlRyYW5zZm9ybUV4ZWN1dG9yLmNhbGxySXQAAGrpaAAAWAYAAABtZXRob2SGWEcAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2FuYWx5emVyLlBpcGVsaW5lSW5mby5wcm9kdWNlcnJKdAAAavtdAABYBgAAAG1ldGhvZIZYMQAAAGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SYW5nZVRyYWNrZXIuc3RhcnRfcG9zaXRpb25yS3QAAGqRZAAAWAYAAABtZXRob2SGWFMAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lci5wb2xsX2Zvcl9qb2JfY29tcGxldGlvbnJMdAAAaldhAABYDAAAAHN0YXRpY21ldGhvZIZYQwAAAGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLk9yZGVyZWRQb3NpdGlvblJhbmdlVHJhY2tlci5VTlNUQVJURURyTXQAAGrUXAAAWAkAAABhdHRyaWJ1dGWGWE4AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lci5zaWRlX2lucHV0X3Zpc2l0b3JyTnQAAGpXYQAAWAwAAABzdGF0aWNtZXRob2SGWCcAAABhcGFjaGVfYmVhbS5pby52Y2Zpby5NYWxmb3JtZWRWY2ZSZWNvcmRyT3QAAGpGXQAAWAUAAABjbGFzc4ZYMAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5UcmlnZ2VyRm4ub25fZmlyZXJQdAAAatFbAABYBgAAAG1ldGhvZHJRdAAAhlg0AAAAYXBhY2hlX2JlYW0uaW8uZ2NwLnB1YnN1Yi5Xcml0ZVRvUHViU3ViLnRvX3Byb3RvX3N0cnJSdAAAahtaAABYDAAAAHN0YXRpY21ldGhvZIZYHQAAAGFwYWNoZV9iZWFtLmludGVybmFsLmdjcC5hdXRoclN0AABqLmgAAGq0cAAAhlgnAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuYnVpbGRfbWFwclR0AABqfVgAAFgIAAAAZnVuY3Rpb25yVXQAAIZYHAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJuYWxyVnQAAGpgVQAAaopwAACGWDMAAABhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbS5HQ1NGaWxlU3lzdGVtLnNpemVyV3QAAGomYAAAWAYAAABtZXRob2SGWDgAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5UaW1lc3RhbXBlZFZhbHVlLnRpbWVzdGFtcHJYdAAAalJkAABYCQAAAGF0dHJpYnV0ZXJZdAAAhlhhAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fYXJ0aWZhY3RfYXBpX3BiMl9ncnBjLkFydGlmYWN0U3RhZ2luZ1NlcnZpY2VTZXJ2aWNlci5QdXRBcnRpZmFjdHJadAAAaiRmAABYBgAAAG1ldGhvZIZYOAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lR2xvYmFsbHkuaGFzX2RlZmF1bHRzclt0AABqjF8AAFgJAAAAYXR0cmlidXRlclx0AACGWFgAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lci5zZXJpYWxpemVfd2luZG93aW5nX3N0cmF0ZWd5cl10AABqV2EAAFgLAAAAY2xhc3NtZXRob2SGWE8AAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmRhdGFzdG9yZWlvLldyaXRlVG9EYXRhc3RvcmUudG9fdXBzZXJ0X211dGF0aW9ucl50AABqOWUAAFgMAAAAc3RhdGljbWV0aG9khlg4AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUuQ29tYmluaW5nVmFsdWVTdGF0ZVNwZWNyX3QAAGqIYAAAWAUAAABjbGFzc3JgdAAAhlg6AAAAYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT2Zmc2V0UmFuZ2VUcmFja2VyLnRyeV9jbGFpbXJhdAAAatRcAABYBgAAAG1ldGhvZIZYKwAAAGFwYWNoZV9iZWFtLnB2YWx1ZS5Bc1NpbmdsZXRvbi5lbGVtZW50X3R5cGVyYnQAAGpOZgAAWAkAAABhdHRyaWJ1dGWGWB0AAABhcGFjaGVfYmVhbS5jb2RlcnMudHlwZWNvZGVyc3JjdAAAauZqAABqtHAAAIZYSgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cucHRyYW5zZm9ybV9vdmVycmlkZXMuQ3JlYXRlUFRyYW5zZm9ybU92ZXJyaWRlcmR0AABq8GkAAFgFAAAAY2xhc3OGWDMAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybS5leHBhbmRyZXQAAGpNXwAAWAYAAABtZXRob2RyZnQAAIZYNgAAAGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5PdXRwdXRTdHJlYW0ud3JpdGVfYnl0ZXJndAAAagRfAABYBgAAAG1ldGhvZIZYJgAAAGFwYWNoZV9iZWFtLnV0aWxzLmFubm90YXRpb25zLmFubm90YXRlcmh0AABqvGoAAFgIAAAAZnVuY3Rpb25yaXQAAIZYLQAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuU3RyVXRmOENvZGVyLmRlY29kZXJqdAAAau9nAABYBgAAAG1ldGhvZIZYKgAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uRmlsZVN5c3RlbS5zcGxpdHJrdAAAahlcAABYBgAAAG1ldGhvZIZYLQAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmJpbmFyeV9tdWx0aXBseXJsdAAAan1YAABYCAAAAGZ1bmN0aW9ucm10AACGWD8AAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmZha2VfZGF0YXN0b3JlLmNyZWF0ZV9ydW5fcXVlcnlybnQAAGrlWAAAWAgAAABmdW5jdGlvboZYKAAAAGFwYWNoZV9iZWFtLmlvLmF2cm9pby5Xcml0ZVRvQXZyby5leHBhbmRyb3QAAGpfWAAAWAYAAABtZXRob2SGWE0AAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGMuQmVhbUZuRXh0ZXJuYWxXb3JrZXJQb29sU3R1YnJwdAAAaiVrAABYBQAAAGNsYXNzhlhVAAAAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9hbmFseXplci5QaXBlbGluZUluZm8uRGVyaXZhdGlvbi5jYWNoZV9sYWJlbHJxdAAAavtdAABYBgAAAG1ldGhvZIZYKgAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLnVuYXJ5X2ludmVydHJydAAAan1YAABYCAAAAGZ1bmN0aW9ucnN0AACGWDYAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZS5SdW50aW1lU3RhdGUucHJlZmV0Y2hydHQAAGqIYAAAWAYAAABtZXRob2RydXQAAIZYJAAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pby5VcGxvYWRlcnJ2dAAAatpnAABYBQAAAGNsYXNzhlguAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuaW5wbGFjZV9tdWx0aXBseXJ3dAAAan1YAABYCAAAAGZ1bmN0aW9ucnh0AACGWDUAAABhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5xdWVyaWVzLnF1ZXJ5MnJ5dAAAakxbAABqa3AAAIZYNQAAAGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLnF1ZXJpZXMucXVlcnkxcnp0AABqYVsAAGprcAAAhlg1AAAAYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsucXVlcmllcy5xdWVyeTBye3QAAGp2WwAAamtwAACGWE0AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5oZWxwZXJfdHJhbnNmb3Jtcy5QYXJ0aWFsR3JvdXBCeUtleUNvbWJpbmluZ1ZhbHVlc3J8dAAAai1hAABYBQAAAGNsYXNzhlg3AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVQZXJLZXkuZGVmYXVsdF9sYWJlbHJ9dAAAaoxfAABYBgAAAG1ldGhvZHJ+dAAAhlgZAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXJ/dAAAahlcAABqinIAAIZYOgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheS5EaXNwbGF5RGF0YUl0ZW0uc2hvdWxkX2Ryb3BygHQAAGo2WQAAWAYAAABtZXRob2RygXQAAIZYNwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheS5EaXNwbGF5RGF0YUl0ZW0uZ2V0X2RpY3RygnQAAGo2WQAAWAYAAABtZXRob2Ryg3QAAIZYHwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5NYXByhHQAAGqMXwAAWAgAAABmdW5jdGlvbnKFdAAAhlgrAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuQm91bmRlZFdpbmRvd3KGdAAAalJkAABYBQAAAGNsYXNzcod0AACGWBQAAABhcGFjaGVfYmVhbS5pby5mbGlua3KIdAAAaiBUAABqinIAAIZYOAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5QYXJ0aXRpb24uQXBwbHlQYXJ0aXRpb25GbkZucol0AABqjF8AAFgFAAAAY2xhc3NyinQAAIZYLAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3Jtcot0AABqTV8AAFgFAAAAY2xhc3NyjHQAAIZYKgAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLnN0b3JlX3N1YnNjcnKNdAAAan1YAABYCAAAAGZ1bmN0aW9uco50AACGWDcAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5idW5kbGVfZmFjdG9yeS5CdW5kbGVGYWN0b3J5co90AABqIVkAAFgFAAAAY2xhc3OGWDAAAABhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYy5NZXRyaWNzLmdldF9uYW1lc3BhY2VykHQAAGr+aAAAWAwAAABzdGF0aWNtZXRob2SGWCgAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRG9Gbi5wcm9jZXNzcpF0AABqjF8AAFgGAAAAbWV0aG9kcpJ0AACGWCsAAABhcGFjaGVfYmVhbS5tZXRyaWNzLm1vbml0b3JpbmdfaW5mb3MudG9fa2V5cpN0AABqeGYAAFgIAAAAZnVuY3Rpb26GWC0AAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkZpbGVTeXN0ZW0uaGFzX2RpcnNylHQAAGoZXAAAWAYAAABtZXRob2SGWC8AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRG9Gbi5TaWRlSW5wdXRQYXJhbXKVdAAAaoxfAABYCQAAAGF0dHJpYnV0ZXKWdAAAhlg3AAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5JdGVyYWJsZUNvZGVyLmFzX2Nsb3VkX29iamVjdHKXdAAAau9nAABYBgAAAG1ldGhvZIZYJQAAAGFwYWNoZV9iZWFtLmlvLmdjcC5nY3Npby5HY3NJTy5leGlzdHNymHQAAGpjZgAAWAYAAABtZXRob2SGWDYAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuT3JGaW5hbGx5LnRvX3J1bm5lcl9hcGlymXQAAGrRWwAAWAYAAABtZXRob2RymnQAAIZYNgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlcldhdGVybWFyay5vbl9tZXJnZXKbdAAAatFbAABYBgAAAG1ldGhvZHKcdAAAhlgUAAAAYXBhY2hlX2JlYW0uaW8udmNmaW9ynXQAAGpGXQAAaqxwAACGWB4AAABhcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHNynnQAAGoXVQAAamtwAACGWDQAAABhcGFjaGVfYmVhbS50b29scy5jb2RlcnNfbWljcm9iZW5jaG1hcmsubGFyZ2Vfc3RyaW5ncp90AABqhmIAAFgIAAAAZnVuY3Rpb26GWDQAAABhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2UuRmlsZUJhc2VkU291cmNlLnNwbGl0cqB0AABqZGsAAFgGAAAAbWV0aG9khlg1AAAAYXBhY2hlX2JlYW0udG9vbHMuZGlzdHJpYnV0aW9uX2NvdW50ZXJfbWljcm9iZW5jaG1hcmtyoXQAAGpiXwAAajdyAACGWD0AAABhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9ycy5XaXRoVHlwZUhpbnRzLmdldF90eXBlX2hpbnRzcqJ0AABqKWcAAFgGAAAAbWV0aG9kcqN0AACGWDEAAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkZpbGVTeXN0ZW0ubGFzdF91cGRhdGVkcqR0AABqGVwAAFgGAAAAbWV0aG9khlg7AAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLldvcmtlck9wdGlvbnMudmFsaWRhdGVypXQAAGqJWgAAWAYAAABtZXRob2SGWDoAAABhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PZmZzZXRSYW5nZVRyYWNrZXIudHJ5X3NwbGl0cqZ0AABq1FwAAFgGAAAAbWV0aG9khlgaAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXNyp3QAAGrHWAAAaopyAACGWEEAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UuRHluYW1pY1NwbGl0UmVxdWVzdHKodAAAasZpAABYBQAAAGNsYXNzhlg5AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuV2luZG93Rm4uTWVyZ2VDb250ZXh0Lm1lcmdlcql0AABqUmQAAFgGAAAAbWV0aG9kcqp0AACGWD8AAABhcGFjaGVfYmVhbS50b29scy5jb2RlcnNfbWljcm9iZW5jaG1hcmsuY29kZXJfYmVuY2htYXJrX2ZhY3Rvcnlyq3QAAGqGYgAAWAgAAABmdW5jdGlvboZYQwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyLlByb2Nlc3NFbGVtZW50cy5leHBhbmRyrHQAAGrlZAAAWAYAAABtZXRob2SGWDIAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5Ub3AuUGVyS2V5LmV4cGFuZHKtdAAAal5jAABYBgAAAG1ldGhvZIZYKQAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmJ1aWxkX2NsYXNzcq50AABqfVgAAFgIAAAAZnVuY3Rpb25yr3QAAIZYHwAAAGFwYWNoZV9iZWFtLmlvLmhhZG9vcGZpbGVzeXN0ZW1ysHQAAGpCYQAAarZwAACGWCMAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRmxhdHRlbnKxdAAAaoxfAABYBQAAAGNsYXNzcrJ0AACGWC4AAABhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbS5HQ1NGaWxlU3lzdGVtcrN0AABqJmAAAFgFAAAAY2xhc3OGWCgAAABhcGFjaGVfYmVhbS5pby5pb2Jhc2UuQm91bmRlZFNvdXJjZS5yZWFkcrR0AABqkWQAAFgGAAAAbWV0aG9khlgWAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtc3K1dAAAahdUAABqN3IAAIZYLQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlLlJ1bnRpbWVTdGF0ZXK2dAAAaohgAABYBQAAAGNsYXNzcrd0AACGWDQAAABhcGFjaGVfYmVhbS5pby5nY3AuYmlnX3F1ZXJ5X3F1ZXJ5X3RvX3RhYmxlX3BpcGVsaW5lcrh0AABq1WEAAGqKcgAAhlg2AAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5XaW5kb3dlZFZhbHVlQ29kZXIua2V5X2NvZGVycrl0AABq72cAAFgGAAAAbWV0aG9khlhXAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudHJhbnNmb3JtX2V2YWx1YXRvci5UcmFuc2Zvcm1FdmFsdWF0b3JSZWdpc3RyeS5nZXRfZXZhbHVhdG9ycrp0AABqGmoAAFgGAAAAbWV0aG9khlglAAAAYXBhY2hlX2JlYW0ubWV0cmljcy5jZWxscy5HYXVnZVJlc3VsdHK7dAAAanBdAABYBQAAAGNsYXNzhlg/AAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LkJpZ1F1ZXJ5RGlzcG9zaXRpb24udmFsaWRhdGVfY3JlYXRlcrx0AABqs1oAAFgMAAAAc3RhdGljbWV0aG9khlgwAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVGbi5hZGRfaW5wdXRzcr10AABqjF8AAFgGAAAAbWV0aG9kcr50AACGWDIAAABhcGFjaGVfYmVhbS51dGlscy5yZXRyeS5GdXp6ZWRFeHBvbmVudGlhbEludGVydmFsc3K/dAAAamxhAABYBQAAAGNsYXNzcsB0AACGWEwAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfdXNlcnN0YXRlLkRpcmVjdFVzZXJTdGF0ZUNvbnRleHQuZ2V0X3RpbWVycsF0AABq22kAAFgGAAAAbWV0aG9khlgbAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpcsJ0AABqAFQAAGpkcQAAhlgnAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2lvLkdjc0lPLmNvcHl0cmVlcsN0AABqY2YAAFgGAAAAbWV0aG9khlhVAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXZhbHVhdGlvbl9jb250ZXh0LkV2YWx1YXRpb25Db250ZXh0LmdldF9leGVjdXRpb25fY29udGV4dHLEdAAAavpkAABYBgAAAG1ldGhvZIZYLwAAAGFwYWNoZV9iZWFtLmlvLnJlc3RyaWN0aW9uX3RyYWNrZXJzLk9mZnNldFJhbmdlcsV0AABq1GgAAFgFAAAAY2xhc3OGWDIAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRG9Gbi5pbmZlcl9vdXRwdXRfdHlwZXLGdAAAaoxfAABYBgAAAG1ldGhvZHLHdAAAhlgvAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMuY2hlY2tzdW1yyHQAAGrHWAAAWAwAAABzdGF0aWNtZXRob2SGWCkAAABhcGFjaGVfYmVhbS5pby50ZXh0aW8uUmVhZEZyb21UZXh0LmV4cGFuZHLJdAAAaqFfAABYBgAAAG1ldGhvZIZYNAAAAGFwYWNoZV9iZWFtLnV0aWxzLmFubm90YXRpb25zLkJlYW1EZXByZWNhdGlvbldhcm5pbmdyynQAAGq8agAAWAkAAABleGNlcHRpb25yy3QAAIZYPAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZS5SZWFkZXJQcm9ncmVzc3LMdAAAasZpAABYBQAAAGNsYXNzhlgfAAAAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZXLNdAAAahFUAABqEnIAAIZYOAAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuV2luZG93ZWRWYWx1ZUNvZGVyLmlzX2t2X2NvZGVycs50AABq72cAAFgGAAAAbWV0aG9khlgzAAAAYXBhY2hlX2JlYW0uaW50ZXJuYWwuZ2NwLmpzb25fdmFsdWUuZnJvbV9qc29uX3ZhbHVlcs90AABqfWoAAFgIAAAAZnVuY3Rpb26GWD8AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmNhY2hlX21hbmFnZXIuQ2FjaGVNYW5hZ2VyLnNpbmty0HQAAGoDWQAAWAYAAABtZXRob2SGWCwAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5Ub3AuTGFyZ2VzdHLRdAAAal5jAABYDAAAAHN0YXRpY21ldGhvZIZYHwAAAGFwYWNoZV9iZWFtLnB2YWx1ZS5UYWdnZWRPdXRwdXRy0nQAAGpOZgAAWAUAAABjbGFzc4ZYMQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lUmVzdWx0Lm1ldHJpY3Ny03QAAGo3WwAAWAYAAABtZXRob2SGWC8AAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzZWRGaWxlLmNsb3NlZHLUdAAAahlcAABYBgAAAG1ldGhvZIZYOQAAAGFwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2UuQ29uY2F0UmFuZ2VUcmFja2VyLnRyeV9jbGFpbXLVdAAAak9rAABYBgAAAG1ldGhvZIZYKAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbC5Db0dyb3VwQnlLZXly1nQAAGo6awAAWAUAAABjbGFzc3LXdAAAhlhHAAAAYXBhY2hlX2JlYW0uaW8ucGFycXVldGlvLlJlYWRBbGxGcm9tUGFycXVldC5ERUZBVUxUX0RFU0lSRURfQlVORExFX1NJWkVy2HQAAGrpXAAAWAkAAABhdHRyaWJ1dGWGWDQAAABhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuU3RhbmRhcmRPcHRpb25zctl0AABqiVoAAFgFAAAAY2xhc3OGWE0AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UuTmF0aXZlU291cmNlUmVhZGVyLmdldF9wcm9ncmVzc3LadAAAasZpAABYBgAAAG1ldGhvZIZYNgAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uRmlsZVN5c3RlbS50cmFuc2xhdGVfcGF0dGVybnLbdAAAahlcAABYDAAAAHN0YXRpY21ldGhvZIZYRAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyLnJ1bl9SZWFkctx0AABqV2EAAFgGAAAAbWV0aG9khlgsAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50cy5UeXBlVmFyaWFibGVy3XQAAGr7agAAWAUAAABjbGFzc3LedAAAhlhAAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLkR5bmFtaWNTcGxpdFJlc3VsdHLfdAAAasZpAABYBQAAAGNsYXNzhlgyAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnMud2l0aF9vdXRwdXRfdHlwZXNy4HQAAGopZwAAWAgAAABmdW5jdGlvbnLhdAAAhlhBAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLlBpcGVsaW5lT3B0aW9ucy5kaXNwbGF5X2RhdGFy4nQAAGqJWgAAWAYAAABtZXRob2SGWF0AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5zdHJlYW1pbmdfY3JlYXRlLlN0cmVhbWluZ0NyZWF0ZS5JbXB1bHNlLmdldF93aW5kb3dpbmdy43QAAGrAYQAAWAYAAABtZXRob2SGWFUAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lci5qc29uX3N0cmluZ190b19ieXRlX2FycmF5cuR0AABqV2EAAFgMAAAAc3RhdGljbWV0aG9khlg+AAAAYXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmUuU2lkZUlucHV0QmFycmllci5leHBhbmRy5XQAAGrLXwAAWAYAAABtZXRob2SGWCcAAABhcGFjaGVfYmVhbS5pby5nY3AucHVic3ViLlB1YnN1Yk1lc3NhZ2Vy5nQAAGobWgAAWAUAAABjbGFzc4ZYNwAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuRmFzdFByaW1pdGl2ZXNDb2Rlci5rZXlfY29kZXJy53QAAGrvZwAAWAYAAABtZXRob2SGWDUAAABhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbS5HQ1NGaWxlU3lzdGVtLnNjaGVtZXLodAAAaiZgAABYCwAAAGNsYXNzbWV0aG9khlgvAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVGbi5hZGRfaW5wdXRy6XQAAGqMXwAAWAYAAABtZXRob2Ry6nQAAIZYLwAAAGFwYWNoZV9iZWFtLm1ldHJpY3MuY2VsbHMuR2F1Z2VSZXN1bHQudGltZXN0YW1wcut0AABqcF0AAFgJAAAAYXR0cmlidXRlhlhPAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IuT1BUSU9OU3LsdAAAau5gAABYCQAAAGF0dHJpYnV0ZYZYLwAAAGFwYWNoZV9iZWFtLnBpcGVsaW5lLlBUcmFuc2Zvcm1PdmVycmlkZS5tYXRjaGVzcu10AABq5l0AAFgGAAAAbWV0aG9khlgnAAAAYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJlYWQuZGlzcGxheV9kYXRhcu50AABqkWQAAFgGAAAAbWV0aG9khlhfAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjLmFkZF9CZWFtRm5FeHRlcm5hbFdvcmtlclBvb2xTZXJ2aWNlcl90b19zZXJ2ZXJy73QAAGolawAAWAgAAABmdW5jdGlvboZYMwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLk1lYW4uUGVyS2V5LmV4cGFuZHLwdAAAal5jAABYBgAAAG1ldGhvZIZYMAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lU3RhdGUuVU5LTk9XTnLxdAAAajdbAABYCQAAAGF0dHJpYnV0ZYZYLwAAAGFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNpbmsuRmlsZUJhc2VkU2luay5vcGVucvJ0AABqd18AAFgGAAAAbWV0aG9khlg6AAAAYXBhY2hlX2JlYW0ucnVubmVycy5zZGZfY29tbW9uLlByb2Nlc3NLZXllZEVsZW1lbnRzLmV4cGFuZHLzdAAAav5cAABYBgAAAG1ldGhvZIZYQwAAAGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm1vZGVscy5uZXhtYXJrX21vZGVsLkF1Y3Rpb25y9HQAAGqrYQAAWAUAAABjbGFzc4ZYNQAAAGFwYWNoZV9iZWFtLmlvLmhhZG9vcGZpbGVzeXN0ZW0uSGFkb29wRmlsZVN5c3RlbS5jb3B5cvV0AABqQmEAAFgGAAAAbWV0aG9khlgiAAAAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcm5hbC5uYW1lc3L2dAAAahBrAABqinAAAIZYLQAAAGFwYWNoZV9iZWFtLnBpcGVsaW5lLlBpcGVsaW5lLmZyb21fcnVubmVyX2FwaXL3dAAAauZdAABYDAAAAHN0YXRpY21ldGhvZIZYMgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LkludGVydmFsV2luZG93LnN0YXJ0cvh0AABqUmQAAFgJAAAAYXR0cmlidXRlcvl0AACGWD8AAABhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uSW5wdXRTdHJlYW0ucmVhZF9iaWdlbmRpYW5faW50NjRy+nQAAGoEXwAAWAYAAABtZXRob2SGWDwAAABhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkuQmlnUXVlcnlEaXNwb3NpdGlvbi5DUkVBVEVfTkVWRVJy+3QAAGqzWgAAWAkAAABhdHRyaWJ1dGWGWBwAAABhcGFjaGVfYmVhbS5pby52Y2Zpby5WYXJpYW50cvx0AABqRl0AAFgFAAAAY2xhc3OGWEgAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lci5ydW5fcGlwZWxpbmVy/XQAAGpXYQAAWAYAAABtZXRob2SGWEEAAABhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl9jb21tb24uUGFpcldpdGhSZXN0cmljdGlvbkZuLnN0YXJ0X2J1bmRsZXL+dAAAav5cAABYBgAAAG1ldGhvZIZYLwAAAGFwYWNoZV9iZWFtLmludGVybmFsLnV0aWwuaW5zZXJ0X3ZhbHVlc19pbl9hcmdzcv90AABqm2IAAFgIAAAAZnVuY3Rpb26GWBMAAABhcGFjaGVfYmVhbS5vcHRpb25zcgB1AABqMVQAAGpkcQAAhlgsAAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2Rlci5yZWdpc3Rlcl91cm5yAXUAAGrvZwAAWAsAAABjbGFzc21ldGhvZIZYPgAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuSXRlcmFibGVDb2Rlci5hc19kZXRlcm1pbmlzdGljX2NvZGVycgJ1AABq72cAAFgGAAAAbWV0aG9khlg3AAAAYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbS5UZXN0U3RyZWFtLmFkZF9lbGVtZW50c3IDdQAAai5cAABYBgAAAG1ldGhvZIZYHAAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmVyBHUAAGovVQAAaopyAACGWDMAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmhlbHBlci5jb21wYXJlX3BhdGhyBXUAAGqFXQAAWAgAAABmdW5jdGlvboZYKwAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uRmlsZVN5c3RlbS5zY2hlbWVyBnUAAGoZXAAAWAsAAABjbGFzc21ldGhvZIZYYwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5waXBlbGluZV9ncmFwaF9yZW5kZXJlci5QeWRvdFJlbmRlcmVyLnJlbmRlcl9waXBlbGluZV9ncmFwaHIHdQAAasVjAABYBgAAAG1ldGhvZIZYMQAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3NlZEZpbGUucmVhZGFibGVyCHUAAGoZXAAAWAYAAABtZXRob2SGWDEAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRmxhdHRlbi5nZXRfd2luZG93aW5ncgl1AABqjF8AAFgGAAAAbWV0aG9kcgp1AACGWDcAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkuZGlzcGxheV9tYW5hZ2Vycgt1AABqi1sAAGqKcAAAhlhHAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X21ldHJpY3MuRGlyZWN0TWV0cmljcy51cGRhdGVfcGh5c2ljYWxyDHUAAGoGWgAAWAYAAABtZXRob2SGWF4AAABhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci5QUk9KRUNUX05VTUJFUl9QQVRURVJOcg11AABq7mAAAFgJAAAAYXR0cmlidXRlhlgvAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LkJpZ1F1ZXJ5U2luay5mb3JtYXRyDnUAAGqzWgAAWAkAAABhdHRyaWJ1dGWGWCYAAABhcGFjaGVfYmVhbS5pby5nY3AuZ2NzaW8uR2NzSU8ua21zX2tleXIPdQAAamNmAABYBgAAAG1ldGhvZIZYNAAAAGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljLk1ldHJpY3MuRGVsZWdhdGluZ0NvdW50ZXJyEHUAAGr+aAAAWAUAAABjbGFzc4ZYLQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LldpbmRvd0ZuLmFzc2lnbnIRdQAAalJkAABYBgAAAG1ldGhvZHISdQAAhlgdAAAAYXBhY2hlX2JlYW0udXRpbHMucmV0cnkuQ2xvY2tyE3UAAGpsYQAAWAUAAABjbGFzc3IUdQAAhlgpAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuaW5wbGFjZV9hbmRyFXUAAGp9WAAAWAgAAABmdW5jdGlvbnIWdQAAhlhLAAAAYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyLnBvc2l0aW9uX2F0X2ZyYWN0aW9uchd1AABq1FwAAFgGAAAAbWV0aG9khlhGAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkdyb3VwQnlLZXkucnVubmVyX2FwaV9yZXF1aXJlc19rZXllZF9pbnB1dHIYdQAAaoxfAABYBgAAAG1ldGhvZHIZdQAAhlg7AAAAYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVSZXN1bHQuYWdncmVnYXRlZF92YWx1ZXNyGnUAAGo3WwAAWAYAAABtZXRob2SGWCwAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5pbnBsYWNlX21vZHVsb3IbdQAAan1YAABYCAAAAGZ1bmN0aW9uchx1AACGWDIAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLnV0aWwuTW92aW5nU3VtLnN1bXIddQAAajpeAABYBgAAAG1ldGhvZIZYOAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZS5OYXRpdmVTaW5rch51AABqxmkAAFgFAAAAY2xhc3OGWEIAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5GaXhlZFdpbmRvd3MudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJyH3UAAGpSZAAAWAYAAABtZXRob2RyIHUAAIZYPwAAAGFwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2UuQ29uY2F0UmFuZ2VUcmFja2VyLmdsb2JhbF90b19sb2NhbHIhdQAAak9rAABYBgAAAG1ldGhvZIZYLwAAAGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5CaWdRdWVyeURpc3Bvc2l0aW9uciJ1AABqs1oAAFgFAAAAY2xhc3OGWBwAAABhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzaW5rciN1AABqd18AAGqKcgAAhlg4AAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5JdGVyYWJsZUNvZGVyLmlzX2RldGVybWluaXN0aWNyJHUAAGrvZwAAWAYAAABtZXRob2SGWDMAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUdsb2JhbGx5LmFzX3ZpZXdyJXUAAGqMXwAAWAkAAABhdHRyaWJ1dGVyJnUAAIZYKAAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLnB1c2hfdmFsdWVyJ3UAAGp9WAAAWAgAAABmdW5jdGlvbnIodQAAhlg5AAAAYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWNiYXNlLk1ldHJpY05hbWUuZnJvbV9ydW5uZXJfYXBpcil1AABqm2cAAFgMAAAAc3RhdGljbWV0aG9khlgoAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLlRyaWdnZXJGbnIqdQAAatFbAABYBQAAAGNsYXNzcit1AACGWFUAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5oZWxwZXJfdHJhbnNmb3Jtcy5QYXJ0aWFsR3JvdXBCeUtleUNvbWJpbmluZ1ZhbHVlcy5wcm9jZXNzcix1AABqLWEAAFgGAAAAbWV0aG9khlgyAAAAYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3V0aWxzLlB1bGxSZXNwb25zZU1lc3NhZ2VyLXUAAGrqYQAAWAUAAABjbGFzc4ZYKQAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmJ1aWxkX3R1cGxlci51AABqfVgAAFgIAAAAZnVuY3Rpb25yL3UAAIZYTgAAAGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLk9yZGVyZWRQb3NpdGlvblJhbmdlVHJhY2tlci5mcmFjdGlvbl90b19wb3NpdGlvbnIwdQAAatRcAABYBgAAAG1ldGhvZIZYMAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlLkJhZ1J1bnRpbWVTdGF0ZXIxdQAAaohgAABYBQAAAGNsYXNzcjJ1AACGWDwAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlR1cGxlQ29kZXIudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJyM3UAAGrvZwAAWAYAAABtZXRob2SGWDEAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuVHJpZ2dlckZuLm9uX21lcmdlcjR1AABq0VsAAFgGAAAAbWV0aG9kcjV1AACGWCEAAABhcGFjaGVfYmVhbS5wdmFsdWUuRW1wdHlTaWRlSW5wdXRyNnUAAGpOZgAAWAUAAABjbGFzc4ZYLwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckNvdW50LnJlc2V0cjd1AABq0VsAAFgGAAAAbWV0aG9kcjh1AACGWC0AAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzZWRGaWxlLnRlbGxyOXUAAGoZXAAAWAYAAABtZXRob2SGWD4AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC50ZXN0X2RpcmVjdF9ydW5uZXIuVGVzdERpcmVjdFJ1bm5lcnI6dQAAauZbAABYBQAAAGNsYXNzhlg7AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkRlZmF1bHRUcmlnZ2VyLnRvX3J1bm5lcl9hcGlyO3UAAGrRWwAAWAYAAABtZXRob2RyPHUAAIZYKQAAAGFwYWNoZV9iZWFtLmlvLnRmcmVjb3JkaW8uV3JpdGVUb1RGUmVjb3Jkcj11AABqTmUAAFgFAAAAY2xhc3OGWDwAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmRhdGFzdG9yZWlvLldyaXRlVG9EYXRhc3RvcmVyPnUAAGo5ZQAAWAUAAABjbGFzc4ZYNAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlRpbWVzdGFtcGVkVmFsdWUudmFsdWVyP3UAAGpSZAAAWAkAAABhdHRyaWJ1dGVyQHUAAIZYPQAAAGFwYWNoZV9iZWFtLm1ldHJpY3MubW9uaXRvcmluZ19pbmZvcy5wYXJzZV9uYW1lc3BhY2VfYW5kX25hbWVyQXUAAGp4ZgAAWAgAAABmdW5jdGlvboZYRQAAAGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5IYWRvb3BGaWxlU3lzdGVtT3B0aW9ucy52YWxpZGF0ZXJCdQAAaolaAABYBgAAAG1ldGhvZIZYLwAAAGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5JbnB1dFN0cmVhbS5zaXplckN1AABqBF8AAFgGAAAAbWV0aG9khlgjAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMucm90X25yRHUAAGp9WAAAWAgAAABmdW5jdGlvbnJFdQAAhlg+AAAAYXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZS5Db25jYXRTb3VyY2UuZGVmYXVsdF9vdXRwdXRfY29kZXJyRnUAAGpPawAAWAYAAABtZXRob2SGWCgAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5jb21wYXJlX29wckd1AABqfVgAAFgIAAAAZnVuY3Rpb25ySHUAAIZYRQAAAGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLk9mZnNldFJhbmdlVHJhY2tlci5wb3NpdGlvbl9hdF9mcmFjdGlvbnJJdQAAatRcAABYBgAAAG1ldGhvZIZYKAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lU3RhdGVySnUAAGo3WwAAWAUAAABjbGFzc4ZYHQAAAGFwYWNoZV9iZWFtLnV0aWxzLnByb3RvX3V0aWxzckt1AABqFGIAAGpvcAAAhlgqAAAAYXBhY2hlX2JlYW0udG9vbHMuc2lkZWlucHV0X21pY3JvYmVuY2htYXJrckx1AABqW10AAGo3cgAAhlg4AAAAYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWMuTWV0cmljcy5EZWxlZ2F0aW5nQ291bnRlci5pbmNyTXUAAGr+aAAAWAYAAABtZXRob2SGWEMAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmNhY2hlX21hbmFnZXIuRmlsZUJhc2VkQ2FjaGVNYW5hZ2Vyck51AABqA1kAAFgFAAAAY2xhc3OGWCkAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkNvZGVyLmtleV9jb2RlcnJPdQAAau9nAABYBgAAAG1ldGhvZIZYLAAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zLm1hdGNoclB1AABqx1gAAFgMAAAAc3RhdGljbWV0aG9khlhHAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X21ldHJpY3MuRGlyZWN0TWV0cmljcy5jb21taXRfcGh5c2ljYWxyUXUAAGoGWgAAWAYAAABtZXRob2SGWDsAAABhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWNoZWNrLkFic3RyYWN0RG9GbldyYXBwZXIud3JhcHBlcnJSdQAAamdkAABYBgAAAG1ldGhvZHJTdQAAhlhAAAAAYXBhY2hlX2JlYW0uaW8uc291cmNlX3Rlc3RfdXRpbHMuYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2JpbmFyeXJUdQAAagRcAABYCAAAAGZ1bmN0aW9uhlgiAAAAYXBhY2hlX2JlYW0uaW50ZXJuYWwucGlja2xlci5kdW1wc3JVdQAAaohZAABYCAAAAGZ1bmN0aW9uhlhAAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVjaGVjay5UeXBlQ2hlY2tWaXNpdG9yLnZpc2l0X3RyYW5zZm9ybXJWdQAAamdkAABYBgAAAG1ldGhvZHJXdQAAhlg8AAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5XaW5kb3dlZFZhbHVlQ29kZXIuYXNfY2xvdWRfb2JqZWN0clh1AABq72cAAFgGAAAAbWV0aG9khlg1AAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMuZ2V0X2ZpbGVzeXN0ZW1yWXUAAGrHWAAAWAwAAABzdGF0aWNtZXRob2SGWD4AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybS50eXBlX2NoZWNrX2lucHV0c3JadQAAak1fAABYBgAAAG1ldGhvZHJbdQAAhlhEAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ19xdWVyeV9xdWVyeV90b190YWJsZV9waXBlbGluZS5ydW5fYnFfcGlwZWxpbmVyXHUAAGrVYQAAWAgAAABmdW5jdGlvboZYRAAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3Npb25UeXBlcy5pc192YWxpZF9jb21wcmVzc2lvbl90eXBlcl11AABqGVwAAFgLAAAAY2xhc3NtZXRob2SGWEAAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJQcm9jZXNzaW5nVGltZS50b19ydW5uZXJfYXBpcl51AABq0VsAAFgGAAAAbWV0aG9kcl91AACGWCQAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlByb3RvQ29kZXJyYHUAAGrvZwAAWAUAAABjbGFzc4ZYLQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLkNvdW50LlBlcktleXJhdQAAal5jAABYBQAAAGNsYXNzhlg9AAAAYXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmUubWVyZ2VfdXNpbmdfc2lkZV9pbnB1dHJidQAAastfAABYCAAAAGZ1bmN0aW9uhlguAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuaW5wbGFjZV9zdWJ0cmFjdHJjdQAAan1YAABYCAAAAGZ1bmN0aW9ucmR1AACGWCIAAABhcGFjaGVfYmVhbS5pby5pb2Jhc2UuV3JpdGVyLndyaXRlcmV1AABqkWQAAFgGAAAAbWV0aG9khlg8AAAAYXBhY2hlX2JlYW0ucnVubmVycy5zZGZfY29tbW9uLlBhaXJXaXRoUmVzdHJpY3Rpb25Gbi5wcm9jZXNzcmZ1AABq/lwAAFgGAAAAbWV0aG9khlg3AAAAYXBhY2hlX2JlYW0uaW8uaGFkb29wZmlsZXN5c3RlbS5IYWRvb3BGaWxlU3lzdGVtLmV4aXN0c3JndQAAakJhAABYBgAAAG1ldGhvZIZYRQAAAGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLlVuc3BsaXR0YWJsZVJhbmdlVHJhY2tlci5zdGFydF9wb3NpdGlvbnJodQAAatRcAABYBgAAAG1ldGhvZIZYMwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LldpbmRvd0ZuLk1lcmdlQ29udGV4dHJpdQAAalJkAABYBQAAAGNsYXNzcmp1AACGWEgAAABhcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZS5TeW50aGV0aWNTb3VyY2UuZ2V0X3JhbmdlX3RyYWNrZXJya3UAAGrLXwAAWAYAAABtZXRob2SGWEsAAABhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuR29vZ2xlQ2xvdWRPcHRpb25zLlNUT1JBR0VfQVBJX1NFUlZJQ0VybHUAAGqJWgAAWAkAAABhdHRyaWJ1dGWGWEEAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UuTmF0aXZlU291cmNlLnJlYWRlcnJtdQAAasZpAABYBgAAAG1ldGhvZIZ1KFgvAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5GaWxlU3lzdGVtLkNIVU5LX1NJWkVybnUAAGoZXAAAWAkAAABhdHRyaWJ1dGWGWEQAAABhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5VbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIuc3RvcF9wb3NpdGlvbnJvdQAAatRcAABYBgAAAG1ldGhvZIZYKwAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLnN0b3JlX3NsaWNlXzFycHUAAGp9WAAAWAgAAABmdW5jdGlvbnJxdQAAhlgrAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuc3RvcmVfc2xpY2VfMHJydQAAan1YAABYCAAAAGZ1bmN0aW9ucnN1AACGWCsAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5zdG9yZV9zbGljZV8zcnR1AABqfVgAAFgIAAAAZnVuY3Rpb25ydXUAAIZYKwAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLnN0b3JlX3NsaWNlXzJydnUAAGp9WAAAWAgAAABmdW5jdGlvbnJ3dQAAhlgvAAAAYXBhY2hlX2JlYW0udXRpbHMucHJvZmlsZXIuTWVtb3J5UmVwb3J0ZXIuc3RhcnRyeHUAAGoDYQAAWAYAAABtZXRob2RyeXUAAIZYTwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LndhdGVybWFya19tYW5hZ2VyLldhdGVybWFya01hbmFnZXIuV0FURVJNQVJLX05FR19JTkZyenUAAGq7WQAAWAkAAABhdHRyaWJ1dGWGWCwAAABhcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmFuZ2VUcmFja2VyLnRyeV9zcGxpdHJ7dQAAapFkAABYBgAAAG1ldGhvZIZYQwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfbWV0cmljcy5EYXRhZmxvd01ldHJpY3MucXVlcnlyfHUAAGqSagAAWAYAAABtZXRob2SGWCsAAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtaW8uVXBsb2FkZXIuZmluaXNocn11AABq2mcAAFgGAAAAbWV0aG9khlhEAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X2lvX3JlYWRfcGlwZWxpbmUuUm93VG9TdHJpbmdXaXRoU2xvd0Rvd25yfnUAAGrvYwAAWAUAAABjbGFzc4ZYQQAAAGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5Xcml0ZVRvQmlnUXVlcnkuZ2V0X2RpY3RfdGFibGVfc2NoZW1hcn91AABqs1oAAFgMAAAAc3RhdGljbWV0aG9khlggAAAAYXBhY2hlX2JlYW0uZXJyb3IuU2lkZUlucHV0RXJyb3JygHUAAGo9ZAAAWAkAAABleGNlcHRpb26GWDcAAABhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5uZXhtYXJrX2xhdW5jaGVycoF1AABq/2EAAGprcAAAhlgsAAAAYXBhY2hlX2JlYW0ubWV0cmljcy5jZWxscy5EaXN0cmlidXRpb25SZXN1bHRygnUAAGpwXQAAWAUAAABjbGFzc4ZYTAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyLmFwcGx5X0dyb3VwQnlLZXlyg3UAAGpXYQAAWAYAAABtZXRob2SGWCYAAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtaW8uUGlwZVN0cmVhbXKEdQAAatpnAABYBQAAAGNsYXNzhlhAAAAAYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLklucHV0U3RyZWFtLnJlYWRfYmlnZW5kaWFuX3VpbnQ2NHKFdQAAagRfAABYBgAAAG1ldGhvZIZYGwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbHKGdQAAajprAABqvXAAAIZYKwAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uRmlsZVN5c3RlbS5jcmVhdGVyh3UAAGoZXAAAWAYAAABtZXRob2SGWDYAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJXYXRlcm1hcmsuTEFURV9UQUdyiHUAAGrRWwAAWAkAAABhdHRyaWJ1dGVyiXUAAIZYHAAAAGFwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2VyinUAAGpPawAAaopyAACGWC0AAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5iaW5hcnlfc3VidHJhY3Ryi3UAAGp9WAAAWAgAAABmdW5jdGlvbnKMdQAAhlhAAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUuQ29tYmluaW5nVmFsdWVSdW50aW1lU3RhdGUucmVhZHKNdQAAaohgAABYBgAAAG1ldGhvZHKOdQAAhlgfAAAAYXBhY2hlX2JlYW0ucnVubmVycy5qb2IubWFuYWdlcnKPdQAAanlrAABqinAAAIZYKwAAAGFwYWNoZV9iZWFtLm1ldHJpY3MuY2VsbHMuR2F1Z2VSZXN1bHQudmFsdWVykHUAAGpwXQAAWAkAAABhdHRyaWJ1dGWGWC4AAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmZha2VfZGF0YXN0b3JlcpF1AABq5VgAAGq2cAAAhlg2AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkRlZmF1bHRUcmlnZ2VyLm9uX21lcmdlcpJ1AABq0VsAAFgGAAAAbWV0aG9kcpN1AACGWCgAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuT3JGaW5hbGx5cpR1AABq0VsAAFgFAAAAY2xhc3NylXUAAIZYHQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93cpZ1AABqUmQAAGq9cAAAhlhIAAAAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoZV9tYW5hZ2VyLkZpbGVCYXNlZENhY2hlTWFuYWdlci5yZWFkcpd1AABqA1kAAFgGAAAAbWV0aG9khlhAAAAAYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWMuTWV0cmljcy5EZWxlZ2F0aW5nRGlzdHJpYnV0aW9uLnVwZGF0ZXKYdQAAav5oAABYBgAAAG1ldGhvZIZYLQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlcldhdGVybWFya3KZdQAAatFbAABYBQAAAGNsYXNzcpp1AACGWDgAAABhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2UuaW5zdGFuY2VfdG9fdHlwZXKbdQAAarFpAABYCAAAAGZ1bmN0aW9ucpx1AACGWCcAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5yb3RfdGhyZWVynXUAAGp9WAAAWAgAAABmdW5jdGlvbnKedQAAhlg7AAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5UdXBsZUNvZGVyLmFzX2RldGVybWluaXN0aWNfY29kZXJyn3UAAGrvZwAAWAYAAABtZXRob2SGWCkAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5kZWxldGVfZmFzdHKgdQAAan1YAABYCAAAAGZ1bmN0aW9ucqF1AACGWC8AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jbG9jay5UZXN0Q2xvY2sudGltZXKidQAAag9mAABYBgAAAG1ldGhvZIZYGwAAAGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeXKjdQAAarNaAABqinIAAIZYJgAAAGFwYWNoZV9iZWFtLnRlc3RpbmcucGlwZWxpbmVfdmVyaWZpZXJzcqR1AABqDVsAAGo3cgAAhlhOAAAAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9hbmFseXplci5QaXBlbGluZUluZm8uRGVyaXZhdGlvbi5qc29ucqV1AABq+10AAFgGAAAAbWV0aG9khlg4AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLldpbmRvd0ludG8uaW5mZXJfb3V0cHV0X3R5cGVypnUAAGqMXwAAWAYAAABtZXRob2Ryp3UAAIZYLgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5QYXJEby5kaXNwbGF5X2RhdGFyqHUAAGqMXwAAWAYAAABtZXRob2RyqXUAAIZYNgAAAGFwYWNoZV9iZWFtLnV0aWxzLnBsdWdpbi5CZWFtUGx1Z2luLmdldF9hbGxfc3ViY2xhc3Nlc3KqdQAAajlmAABYCwAAAGNsYXNzbWV0aG9kcqt1AACGWDAAAABhcGFjaGVfYmVhbS51dGlscy51cm5zLlJ1bm5lckFwaUZuLnRvX3J1bm5lcl9hcGlyrHUAAGp0WgAAWAYAAABtZXRob2RyrXUAAIZYLAAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuVHVwbGVTZXF1ZW5jZUNvZGVycq51AABq72cAAFgFAAAAY2xhc3OGWDkAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuUmVwZWF0ZWRseS5mcm9tX3J1bm5lcl9hcGlyr3UAAGrRWwAAWAwAAABzdGF0aWNtZXRob2RysHUAAIZYQgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV4ZWN1dG9yLlRyYW5zZm9ybUV4ZWN1dG9yLmF0dGVtcHRfY2FsbHKxdQAAauloAABYBgAAAG1ldGhvZIZYLgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLlRvcC5PZi5leHBhbmRysnUAAGpeYwAAWAYAAABtZXRob2SGWEAAAABhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5uZXhtYXJrX3V0aWwuUGFyc2VFdmVudEZucrN1AABqEWAAAFgFAAAAY2xhc3OGWCMAAABhcGFjaGVfYmVhbS5pby5pb2Jhc2UuQm91bmRlZFNvdXJjZXK0dQAAapFkAABYBQAAAGNsYXNzhlgiAAAAYXBhY2hlX2JlYW0udXRpbHMudXJucy5SdW5uZXJBcGlGbnK1dQAAanRaAABYBQAAAGNsYXNzcrZ1AACGWC4AAABhcGFjaGVfYmVhbS5pby5nY3AucHVic3ViLldyaXRlVG9QdWJTdWIuZXhwYW5kcrd1AABqG1oAAFgGAAAAbWV0aG9khlgvAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFjY3VtdWxhdGlvbk1vZGVyuHUAAGrRWwAAWAUAAABjbGFzc3K5dQAAhlhBAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVWYWx1ZXMudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJyunUAAGqMXwAAWAYAAABtZXRob2Ryu3UAAIZYRQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLlNhbXBsZS5GaXhlZFNpemVQZXJLZXkuZGVmYXVsdF9sYWJlbHK8dQAAal5jAABYBgAAAG1ldGhvZIZYJgAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuaGVscGVycr11AABqhV0AAGq2cAAAhlgpAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNyZWF0ZS5leHBhbmRyvnUAAGqMXwAAWAYAAABtZXRob2Ryv3UAAIZYLQAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQ29kZXIudG9fcnVubmVyX2FwaXLAdQAAau9nAABYBgAAAG1ldGhvZIZYPgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZS5OYXRpdmVTaW5rV3JpdGVycsF1AABqxmkAAFgFAAAAY2xhc3OGWC4AAABhcGFjaGVfYmVhbS5pby5pb2Jhc2UuQm91bmRlZFNvdXJjZS5pc19ib3VuZGVkcsJ1AABqkWQAAFgGAAAAbWV0aG9khlgkAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS51dGlscsN1AABqOl4AAGq2cAAAhlgvAAAAYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVSZXN1bHQuc3RhdGVyxHUAAGo3WwAAWAkAAABhdHRyaWJ1dGWGWC8AAABhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVN0YXRlLkZBSUxFRHLFdQAAajdbAABYCQAAAGF0dHJpYnV0ZYZYTwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9tZXRyaWNzLkRpcmVjdE1ldHJpYy5leHRyYWN0X2xhdGVzdF9hdHRlbXB0ZWRyxnUAAGoGWgAAWAYAAABtZXRob2SGWB4AAABhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW1yx3UAAGoEXwAAarRwAACGWEwAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lci5TREZQcm9jZXNzRWxlbWVudEludm9rZXIuUmVzdWx0csh1AABq5WQAAFgFAAAAY2xhc3OGWDcAAABhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3RfdXRpbHMuVGVtcERpci5jcmVhdGVfdGVtcF9maWxlcsl1AABq6mEAAFgGAAAAbWV0aG9khlgqAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuYmluYXJ5X3Bvd2Vycsp1AABqfVgAAFgIAAAAZnVuY3Rpb25yy3UAAIZYRQAAAGFwYWNoZV9iZWFtLnRlc3RpbmcubG9hZF90ZXN0cy5sb2FkX3Rlc3RfbWV0cmljc191dGlscy5CaWdRdWVyeUNsaWVudHLMdQAAahRnAABYBQAAAGNsYXNzhlhFAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm5hdGl2ZV90eXBlX2NvbXBhdGliaWxpdHkuY29udmVydF90b19iZWFtX3R5cGVzcs11AABqD2UAAFgIAAAAZnVuY3Rpb25yznUAAIZYNwAAAGFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lLlNpZGVJbnB1dEJhcnJpZXJyz3UAAGrLXwAAWAUAAABjbGFzc4ZYPQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5JbXB1bHNlLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXJy0HUAAGqMXwAAWAwAAABzdGF0aWNtZXRob2Ry0XUAAIZYOQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX2NvbW1vbi5TcGxpdFJlc3RyaWN0aW9uRm4ucHJvY2Vzc3LSdQAAav5cAABYBgAAAG1ldGhvZIZYOQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckNvdW50LmZyb21fcnVubmVyX2FwaXLTdQAAatFbAABYDAAAAHN0YXRpY21ldGhvZHLUdQAAhlhCAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X3VzZXJzdGF0ZS5EaXJlY3RVc2VyU3RhdGVDb250ZXh0ctV1AABq22kAAFgFAAAAY2xhc3OGWD0AAABhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PZmZzZXRSYW5nZVRyYWNrZXIuc3BsaXRfcG9pbnRzctZ1AABq1FwAAFgGAAAAbWV0aG9khlgyAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm4uRG9GblByb2Nlc3NQYXJhbXNy13UAAGqMXwAAWAkAAABhdHRyaWJ1dGVy2HUAAIZYIwAAAGFwYWNoZV9iZWFtLmlvLmdjcC5nY3Npby5HY3NJTy5zaXplctl1AABqY2YAAFgGAAAAbWV0aG9khlhaAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuaGVscGVyX3RyYW5zZm9ybXMuUGFydGlhbEdyb3VwQnlLZXlDb21iaW5pbmdWYWx1ZXMuc3RhcnRfYnVuZGxlctp1AABqLWEAAFgGAAAAbWV0aG9khlg0AAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LlRhYmxlUm93SnNvbkNvZGVyLmRlY29kZXLbdQAAarNaAABYBgAAAG1ldGhvZIZYTAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5waXBlbGluZV9ncmFwaC5QaXBlbGluZUdyYXBoLmdldF9kb3Ry3HUAAGr9YgAAWAYAAABtZXRob2SGWC4AAABhcGFjaGVfYmVhbS5pby5nY3AucHVic3ViLldyaXRlU3RyaW5nc1RvUHViU3Vict11AABqG1oAAFgIAAAAZnVuY3Rpb26GWDYAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lci5Qcm9jZXNzRm5y3nUAAGrlZAAAWAUAAABjbGFzc4ZYUQAAAGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm5leG1hcmtfbGF1bmNoZXIuTmV4bWFya0xhdW5jaGVyLnJ1bl9xdWVyeXLfdQAAav9hAABYBgAAAG1ldGhvZIZYMgAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zLnNldF9vcHRpb25zcuB1AABqx1gAAFgLAAAAY2xhc3NtZXRob2SGWCwAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5pbnBsYWNlX2RpdmlkZXLhdQAAan1YAABYCAAAAGZ1bmN0aW9ucuJ1AACGWEgAAABhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtLlRlc3RTdHJlYW0uYWR2YW5jZV93YXRlcm1hcmtfdG9faW5maW5pdHly43UAAGouXAAAWAYAAABtZXRob2SGWGAAAABhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci5FUlJfSU5WQUxJRF9OT1RfUE9TSVRJVkVy5HUAAGruYAAAWAkAAABhdHRyaWJ1dGWGWGsAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkucGlwZWxpbmVfZ3JhcGhfcmVuZGVyZXIuUGlwZWxpbmVHcmFwaFJlbmRlcmVyLnJlbmRlcl9waXBlbGluZV9ncmFwaHLldQAAasVjAABYBgAAAG1ldGhvZIZYOwAAAGFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNpbmsuRmlsZUJhc2VkU2luay5pbml0aWFsaXplX3dyaXRlcuZ1AABqd18AAFgGAAAAbWV0aG9khlg9AAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuY29tbW9uX3VybnMuUHJvcGVydGllc0Zyb21QYXlsb2FkVHlwZXLndQAAasFmAABYCAAAAGZ1bmN0aW9uhlgxAAAAYXBhY2hlX2JlYW0udG9vbHMudXRpbHMuQmVuY2htYXJrQ29uZmlnLmJlbmNobWFya3LodQAAanFiAABYCQAAAGF0dHJpYnV0ZYZYIQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuc2lkZWlucHV0c3LpdQAAatpjAABqvXAAAIZYMwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmNsb2NrLkNsb2NrLmFkdmFuY2VfdGltZXLqdQAAag9mAABYBgAAAG1ldGhvZIZYLwAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pby5VcGxvYWRlclN0cmVhbS50ZWxscut1AABq2mcAAFgGAAAAbWV0aG9khlhEAAAAYXBhY2hlX2JlYW0ubWV0cmljcy5tb25pdG9yaW5nX2luZm9zLmV4dHJhY3RfbWV0cmljX3Jlc3VsdF9tYXBfdmFsdWVy7HUAAGp4ZgAAWAgAAABmdW5jdGlvboZYMAAAAGFwYWNoZV9iZWFtLnRvb2xzLmNvZGVyc19taWNyb2JlbmNobWFyay5saXN0X2ludHLtdQAAaoZiAABYCAAAAGZ1bmN0aW9uhlheAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IuRVJSX0lOVkFMSURfUFJPSkVDVF9JRHLudQAAau5gAABYCQAAAGF0dHJpYnV0ZYZYNwAAAGFwYWNoZV9iZWFtLm1ldHJpY3MubW9uaXRvcmluZ19pbmZvcy5pbnQ2NF9kaXN0cmlidXRpb25y73UAAGp4ZgAAWAgAAABmdW5jdGlvboZYNwAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZS5rZXlfdmFsdWVfdHlwZXNy8HUAAGqxaQAAWAgAAABmdW5jdGlvbnLxdQAAhlhHAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuaGVscGVyX3RyYW5zZm9ybXMuTGlmdGVkQ29tYmluZVBlcktleS5leHBhbmRy8nUAAGotYQAAWAYAAABtZXRob2SGWDQAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuV2luZG93SW50by5nZXRfd2luZG93aW5ncvN1AABqjF8AAFgGAAAAbWV0aG9kcvR1AACGWFcAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9hcnRpZmFjdF9hcGlfcGIyX2dycGMuQXJ0aWZhY3RSZXRyaWV2YWxTZXJ2aWNlU2VydmljZXJy9XUAAGokZgAAWAUAAABjbGFzc4ZYIAAAAGFwYWNoZV9iZWFtLmVycm9yLlRyYW5zZm9ybUVycm9ycvZ1AABqPWQAAFgJAAAAZXhjZXB0aW9uhlgsAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbWlvLkRvd25sb2FkZXJTdHJlYW1y93UAAGraZwAAWAUAAABjbGFzc4ZYRAAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYy5CZWFtRm5TdGF0ZVNlcnZpY2Vycvh1AABqJWsAAFgFAAAAY2xhc3OGWDUAAABhcGFjaGVfYmVhbS51dGlscy5wcm9maWxlci5NZW1vcnlSZXBvcnRlci5yZXBvcnRfb25jZXL5dQAAagNhAABYBgAAAG1ldGhvZHL6dQAAhlg1AAAAYXBhY2hlX2JlYW0uaW50ZXJuYWwuZ2NwLmF1dGguQXV0aGVudGljYXRpb25FeGNlcHRpb25y+3UAAGouaAAAWAkAAABleGNlcHRpb26GWCAAAABhcGFjaGVfYmVhbS5pby52Y2Zpby5SZWFkRnJvbVZjZnL8dQAAakZdAABYBQAAAGNsYXNzhlglAAAAYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWNiYXNlLk1ldHJpY3L9dQAAaptnAABYBQAAAGNsYXNzhlg/AAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXZhbHVhdGlvbl9jb250ZXh0LkV2YWx1YXRpb25Db250ZXh0cv51AABq+mQAAFgFAAAAY2xhc3OGWD0AAABhcGFjaGVfYmVhbS5pby5oYWRvb3BmaWxlc3lzdGVtLkhhZG9vcEZpbGVTeXN0ZW0ubGFzdF91cGRhdGVkcv91AABqQmEAAFgGAAAAbWV0aG9khlg+AAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlLmluZmVyX3JldHVybl90eXBlX2Z1bmNyAHYAAGqxaQAAWAgAAABmdW5jdGlvbnIBdgAAhlg7AAAAYXBhY2hlX2JlYW0udGVzdGluZy5waXBlbGluZV92ZXJpZmllcnMuUGlwZWxpbmVTdGF0ZU1hdGNoZXJyAnYAAGoNWwAAWAUAAABjbGFzc4ZYIAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Eb0ZucgN2AABqjF8AAFgFAAAAY2xhc3NyBHYAAIZYLwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Eb0ZuLlRpbWVzdGFtcFBhcmFtcgV2AABqjF8AAFgJAAAAYXR0cmlidXRlcgZ2AACGWD4AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuV2luZG93SW50by50b19ydW5uZXJfYXBpX3BhcmFtZXRlcnIHdgAAaoxfAABYBgAAAG1ldGhvZHIIdgAAhlhSAAAAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9ydW5uZXIuSW50ZXJhY3RpdmVSdW5uZXIuc3RhcnRfc2Vzc2lvbnIJdgAAahloAABYBgAAAG1ldGhvZIZYQQAAAGFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lLlN5bnRoZXRpY1N0ZXAuc3RhcnRfYnVuZGxlcgp2AABqy18AAFgGAAAAbWV0aG9khlg/AAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnMuV2l0aFR5cGVIaW50cy53aXRoX2lucHV0X3R5cGVzcgt2AABqKWcAAFgGAAAAbWV0aG9kcgx2AACGWCgAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5idWlsZF9saXN0cg12AABqfVgAAFgIAAAAZnVuY3Rpb25yDnYAAIZYOwAAAGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5CaWdRdWVyeURpc3Bvc2l0aW9uLldSSVRFX0VNUFRZcg92AABqs1oAAFgJAAAAYXR0cmlidXRlhlg/AAAAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoZV9tYW5hZ2VyLkNhY2hlTWFuYWdlci5yZWFkchB2AABqA1kAAFgGAAAAbWV0aG9khlgrAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVGbi5hcHBseXIRdgAAaoxfAABYBgAAAG1ldGhvZHISdgAAhlgwAAAAYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVTdGF0ZS5SVU5OSU5HchN2AABqN1sAAFgJAAAAYXR0cmlidXRlhlhcAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IuRVJSX01JU1NJTkdfR0NTX1BBVEhyFHYAAGruYAAAWAkAAABhdHRyaWJ1dGWGWFQAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGMuYWRkX0JlYW1GbkNvbnRyb2xTZXJ2aWNlcl90b19zZXJ2ZXJyFXYAAGolawAAWAgAAABmdW5jdGlvboZYNQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX2NvbW1vbi5TcGxpdHRhYmxlUGFyRG8uZXhwYW5kchZ2AABq/lwAAFgGAAAAbWV0aG9khlhGAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X21ldHJpY3MuRGlyZWN0TWV0cmljLnVwZGF0ZV9waHlzaWNhbHIXdgAAagZaAABYBgAAAG1ldGhvZIZYNQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5XaW5kb3dpbmcuZnJvbV9ydW5uZXJfYXBpchh2AABqjF8AAFgMAAAAc3RhdGljbWV0aG9kchl2AACGWEgAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9qb2JfYXBpX3BiMl9ncnBjLkpvYlNlcnZpY2VTZXJ2aWNlci5SdW5yGnYAAGoTaQAAWAYAAABtZXRob2SGWDUAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5leGVjdXRvci5UcmFuc2Zvcm1FeGVjdXRvcnIbdgAAauloAABYBQAAAGNsYXNzhlgmAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuY2xvY2suQ2xvY2tyHHYAAGoPZgAAWAUAAABjbGFzc4ZYNQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5QYXJ0aXRpb25Gbi5wYXJ0aXRpb25fZm9ych12AABqjF8AAFgGAAAAbWV0aG9kch52AACGWCkAAABhcGFjaGVfYmVhbS5pbnRlcm5hbC5waWNrbGVyLmR1bXBfc2Vzc2lvbnIfdgAAaohZAABYCAAAAGZ1bmN0aW9uhlg3AAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS51dGlsLk1vdmluZ1N1bS5oYXNfZGF0YXIgdgAAajpeAABYBgAAAG1ldGhvZIZYYQAAAGFwYWNoZV9iZWFtLmlvLmZsaW5rLmZsaW5rX3N0cmVhbWluZ19pbXB1bHNlX3NvdXJjZS5GbGlua1N0cmVhbWluZ0ltcHVsc2VTb3VyY2Uuc2V0X21lc3NhZ2VfY291bnRyIXYAAGqdWQAAWAYAAABtZXRob2SGWB4AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXJyInYAAGrRWwAAar1wAACGWCoAAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzaW9uVHlwZXNyI3YAAGoZXAAAWAUAAABjbGFzc4ZYMAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckVhY2gub25fZmlyZXIkdgAAatFbAABYBgAAAG1ldGhvZHIldgAAhlglAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2lvLkdjc0lPLnJlbmFtZXImdgAAamNmAABYBgAAAG1ldGhvZIZYNwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5SZXBlYXRlZGx5LnRvX3J1bm5lcl9hcGlyJ3YAAGrRWwAAWAYAAABtZXRob2RyKHYAAIZYMAAAAGFwYWNoZV9iZWFtLnRvb2xzLnV0aWxzLkJlbmNobWFya0NvbmZpZy5udW1fcnVuc3IpdgAAanFiAABYCQAAAGF0dHJpYnV0ZYZYNAAAAGFwYWNoZV9iZWFtLm1ldHJpY3MubW9uaXRvcmluZ19pbmZvcy51c2VyX21ldHJpY191cm5yKnYAAGp4ZgAAWAgAAABmdW5jdGlvboZYNAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX2NvbW1vbi5QYWlyV2l0aFJlc3RyaWN0aW9uRm5yK3YAAGr+XAAAWAUAAABjbGFzc4ZYKgAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLm1ha2VfY2xvc3VyZXIsdgAAan1YAABYCAAAAGZ1bmN0aW9uci12AACGWDsAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUZuLmdldF9hY2N1bXVsYXRvcl9jb2RlcnIudgAAaoxfAABYBgAAAG1ldGhvZHIvdgAAhlg7AAAAYXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZS5Db25jYXRTb3VyY2UuZ2V0X3JhbmdlX3RyYWNrZXJyMHYAAGpPawAAWAYAAABtZXRob2SGWCwAAABhcGFjaGVfYmVhbS5pby52Y2Zpby5WYXJpYW50SW5mby5maWVsZF9jb3VudHIxdgAAakZdAABYCQAAAGF0dHJpYnV0ZYZYKwAAAGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZS5EaXN0cmlidXRpb25yMnYAAGqbZwAAWAUAAABjbGFzc4ZYSQAAAGFwYWNoZV9iZWFtLnRlc3RpbmcucGlwZWxpbmVfdmVyaWZpZXJzLnJldHJ5X29uX2lvX2Vycm9yX2FuZF9zZXJ2ZXJfZXJyb3JyM3YAAGoNWwAAWAgAAABmdW5jdGlvboZYTQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5waXBlbGluZV9ncmFwaF9yZW5kZXJlci5QeWRvdFJlbmRlcmVycjR2AABqxWMAAFgFAAAAY2xhc3OGWDAAAABhcGFjaGVfYmVhbS50ZXN0aW5nLnV0aWwuVGVzdFdpbmRvd2VkVmFsdWUudmFsdWVyNXYAAGoSYwAAWAkAAABhdHRyaWJ1dGWGWDMAAABhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbS5HQ1NGaWxlU3lzdGVtLmpvaW5yNnYAAGomYAAAWAYAAABtZXRob2SGWF0AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHQuRXZhbHVhdGlvbkNvbnRleHQuY3JlYXRlX2VtcHR5X2NvbW1pdHRlZF9idW5kbGVyN3YAAGr6ZAAAWAYAAABtZXRob2SGWEIAAABhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uT3V0cHV0U3RyZWFtLndyaXRlX2JpZ2VuZGlhbl9kb3VibGVyOHYAAGoEXwAAWAYAAABtZXRob2SGWDAAAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzaW9uVHlwZXMuQlpJUDJyOXYAAGoZXAAAWAkAAABhdHRyaWJ1dGWGWE4AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5UaW1lc3RhbXBDb21iaW5lci5PVVRQVVRfQVRfRUFSTElFU1RfVFJBTlNGT1JNRURyOnYAAGpSZAAAWAkAAABhdHRyaWJ1dGVyO3YAAIZYRQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyLlNERlByb2Nlc3NFbGVtZW50SW52b2tlcnI8dgAAauVkAABYBQAAAGNsYXNzhlgxAAAAYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLk91dHB1dFN0cmVhbS53cml0ZXI9dgAAagRfAABYBgAAAG1ldGhvZIZYQAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMucGlwZWxpbmVfY29udGV4dC5FbnZpcm9ubWVudC5mcm9tX3J1bm5lcl9hcGlyPnYAAGqwZwAAWAwAAABzdGF0aWNtZXRob2SGWDAAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5Ob25NZXJnaW5nV2luZG93Rm5yP3YAAGpSZAAAWAUAAABjbGFzc3JAdgAAhlg9AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVGbi50b19ydW5uZXJfYXBpX3BhcmFtZXRlcnJBdgAAaoxfAABYBgAAAG1ldGhvZHJCdgAAhlhRAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIuYXBwbHlfV3JpdGVUb0JpZ1F1ZXJ5ckN2AABqV2EAAFgGAAAAbWV0aG9khlg3AAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW0uR0NTRmlsZVN5c3RlbS5oYXNfZGlyc3JEdgAAaiZgAABYBgAAAG1ldGhvZIZYLgAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5lbmRwb2ludHNfcGIyX2dycGNyRXYAAGolXgAAamRxAACGWDcAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jbG9jay5UZXN0Q2xvY2suYWR2YW5jZV90aW1lckZ2AABqD2YAAFgGAAAAbWV0aG9khlg1AAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW0uR0NTRmlsZVN5c3RlbS5yZW5hbWVyR3YAAGomYAAAWAYAAABtZXRob2SGWEQAAABhcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZS5TeW50aGV0aWNTb3VyY2UuZXN0aW1hdGVfc2l6ZXJIdgAAastfAABYBgAAAG1ldGhvZIZYTAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LndhdGVybWFya19tYW5hZ2VyLldhdGVybWFya01hbmFnZXIuZ2V0X3dhdGVybWFya3NySXYAAGq7WQAAWAYAAABtZXRob2SGWFgAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2FuYWx5emVyLlBpcGVsaW5lQW5hbHl6ZXIudGxfcmVxdWlyZWRfdHJhbnNfaWRzckp2AABq+10AAFgGAAAAbWV0aG9khlg3AAAAYXBhY2hlX2JlYW0udXRpbHMucHJvZmlsZXIuUHJvZmlsZS5kZWZhdWx0X2ZpbGVfY29weV9mbnJLdgAAagNhAABYDAAAAHN0YXRpY21ldGhvZHJMdgAAhlg9AAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5kYXRhc3RvcmVpby5SZWFkRnJvbURhdGFzdG9yZXJNdgAAajllAABYBQAAAGNsYXNzhlglAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5NYXRjaFJlc3VsdHJOdgAAahlcAABYBQAAAGNsYXNzhlg3AAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5Db21wcmVzc2lvblR5cGVzLlVOQ09NUFJFU1NFRHJPdgAAahlcAABYCQAAAGF0dHJpYnV0ZYZYJwAAAGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5TaW5rLnByZV9maW5hbGl6ZXJQdgAAapFkAABYBgAAAG1ldGhvZIZYYwAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2FydGlmYWN0X2FwaV9wYjJfZ3JwYy5BcnRpZmFjdFJldHJpZXZhbFNlcnZpY2VTZXJ2aWNlci5HZXRBcnRpZmFjdHJRdgAAaiRmAABYBgAAAG1ldGhvZIZYKQAAAGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZS5NZXRyaWNOYW1lclJ2AABqm2cAAFgFAAAAY2xhc3OGWEYAAABhcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmFuZ2VUcmFja2VyLnNldF9zcGxpdF9wb2ludHNfdW5jbGFpbWVkX2NhbGxiYWNrclN2AABqkWQAAFgGAAAAbWV0aG9khlg7AAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXJyVHYAAGpXYQAAWAUAAABjbGFzc4ZYMwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlNsaWRpbmdXaW5kb3dzLm9mZnNldHJVdgAAalJkAABYCQAAAGF0dHJpYnV0ZXJWdgAAhlg6AAAAYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsucXVlcmllcy5xdWVyeTAubG9hZHJXdgAAanZbAABYCAAAAGZ1bmN0aW9uhlhBAAAAYXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmUuZXhwYW5kX3VzaW5nX3NlY29uZF9vdXRwdXRyWHYAAGrLXwAAWAgAAABmdW5jdGlvboZYOgAAAGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLkxleGljb2dyYXBoaWNLZXlSYW5nZVRyYWNrZXJyWXYAAGrUXAAAWAUAAABjbGFzc4ZYOAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5EZWZhdWx0VHJpZ2dlci5vbl9lbGVtZW50clp2AABq0VsAAFgGAAAAbWV0aG9kclt2AACGWBkAAABhcGFjaGVfYmVhbS5wdmFsdWUuQXNEaWN0clx2AABqTmYAAFgFAAAAY2xhc3OGWDcAAABhcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmFuZ2VUcmFja2VyLlNQTElUX1BPSU5UU19VTktOT1dOcl12AABqkWQAAFgJAAAAYXR0cmlidXRlhlhRAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIuZmxhdHRlbl9pbnB1dF92aXNpdG9ycl52AABqV2EAAFgMAAAAc3RhdGljbWV0aG9khlgqAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuRml4ZWRXaW5kb3dzcl92AABqUmQAAFgFAAAAY2xhc3NyYHYAAIZYRAAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuV2luZG93ZWRWYWx1ZUNvZGVyLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVycmF2AABq72cAAFgGAAAAbWV0aG9khlgyAAAAYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWMuTWV0cmljc0ZpbHRlci53aXRoX25hbWVyYnYAAGr+aAAAWAYAAABtZXRob2SGWE4AAABhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXIucG9zaXRpb25fYXRfZnJhY3Rpb25yY3YAAGrUXAAAWAYAAABtZXRob2SGWBsAAABhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXByZHYAAGqBYQAAam9wAACGWCgAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJFYWNocmV2AABq0VsAAFgFAAAAY2xhc3NyZnYAAIZYPgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMucGlwZWxpbmVfY29udGV4dC5FbnZpcm9ubWVudC50b19ydW5uZXJfYXBpcmd2AABqsGcAAFgGAAAAbWV0aG9khlgyAAAAYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3BpcGVsaW5lLlRlc3RQaXBlbGluZS5ydW5yaHYAAGrFZwAAWAYAAABtZXRob2SGWDMAAABhcGFjaGVfYmVhbS5pby5sb2NhbGZpbGVzeXN0ZW0uTG9jYWxGaWxlU3lzdGVtLmNvcHlyaXYAAGrRagAAWAYAAABtZXRob2SGWDsAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuR3JvdXBCeUtleS5SZWlmeVdpbmRvd3MucHJvY2Vzc3JqdgAAaoxfAABYBgAAAG1ldGhvZHJrdgAAhlhBAAAAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoZV9tYW5hZ2VyLkNhY2hlTWFuYWdlci5zb3VyY2VybHYAAGoDWQAAWAYAAABtZXRob2SGWEYAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGMuQmVhbUZuTG9nZ2luZ1NlcnZpY2Vycm12AABqJWsAAFgFAAAAY2xhc3OGWDYAAABhcGFjaGVfYmVhbS50b29scy5jb2RlcnNfbWljcm9iZW5jaG1hcmsubGFyZ2VfaXRlcmFibGVybnYAAGqGYgAAWAgAAABmdW5jdGlvboZYNgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudGltZXV0aWwuVGltZURvbWFpbi5mcm9tX3N0cmluZ3JvdgAAaiRlAABYDAAAAHN0YXRpY21ldGhvZHJwdgAAhlg8AAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIuUHJvY2Vzc0VsZW1lbnRzcnF2AABq5WQAAFgFAAAAY2xhc3OGWCgAAABhcGFjaGVfYmVhbS5pbnRlcm5hbC5waWNrbGVyLnNhdmVfbW9kdWxlcnJ2AABqiFkAAFgIAAAAZnVuY3Rpb26GWEUAAABhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWNoZWNrLlR5cGVDaGVja0NvbWJpbmVGbi5tZXJnZV9hY2N1bXVsYXRvcnNyc3YAAGpnZAAAWAYAAABtZXRob2RydHYAAIZYKwAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uRmlsZVN5c3RlbS5ta2RpcnNydXYAAGoZXAAAWAYAAABtZXRob2SGWC0AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXkuSGFzRGlzcGxheURhdGFydnYAAGo2WQAAWAUAAABjbGFzc3J3dgAAhlgxAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMuZ2V0X3NjaGVtZXJ4dgAAasdYAABYDAAAAHN0YXRpY21ldGhvZIZYMwAAAGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9zdHJlYW0uUHJvY2Vzc2luZ1RpbWVFdmVudHJ5dgAAai5cAABYBQAAAGNsYXNzhlg0AAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS51dGlsLk1vdmluZ1N1bS5jb3VudHJ6dgAAajpeAABYBgAAAG1ldGhvZIZYPgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LldpbmRvd0ZuLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVycnt2AABqUmQAAFgGAAAAbWV0aG9kcnx2AACGWDgAAABhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl9jb21tb24uUmFuZG9tVW5pcXVlS2V5Rm4ucHJvY2Vzc3J9dgAAav5cAABYBgAAAG1ldGhvZIZYMQAAAGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5TZXR1cE9wdGlvbnNyfnYAAGqJWgAAWAUAAABjbGFzc4ZYMgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckFsbC5jb21iaW5lX29wcn92AABq0VsAAFgGAAAAbWV0aG9kcoB2AACGWE8AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5zdHJlYW1pbmdfY3JlYXRlLlN0cmVhbWluZ0NyZWF0ZS5JbXB1bHNlcoF2AABqwGEAAFgFAAAAY2xhc3OGWD0AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuRGVmYXVsdFRyaWdnZXIuZnJvbV9ydW5uZXJfYXBpcoJ2AABq0VsAAFgMAAAAc3RhdGljbWV0aG9kcoN2AACGWEoAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2FuYWx5emVyLlBpcGVsaW5lSW5mby5jYWNoZV9sYWJlbHKEdgAAavtdAABYBgAAAG1ldGhvZIZYJQAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuVmFySW50Q29kZXJyhXYAAGrvZwAAWAUAAABjbGFzc4ZYMwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lU3RhdGUuQ0FOQ0VMTElOR3KGdgAAajdbAABYCQAAAGF0dHJpYnV0ZYZYRAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cudGVzdF9kYXRhZmxvd19ydW5uZXIuVGVzdERhdGFmbG93UnVubmVycod2AABqv2gAAFgFAAAAY2xhc3OGWDMAAABhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl9jb21tb24uUHJvY2Vzc0tleWVkRWxlbWVudHNyiHYAAGr+XAAAWAUAAABjbGFzc4ZYRgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyLmFwcGx5X1JlYWRyiXYAAGpXYQAAWAYAAABtZXRob2SGWCEAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuUGFyRG9yinYAAGqMXwAAWAUAAABjbGFzc3KLdgAAhlg3AAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2Rlci5yZWdpc3Rlcl9zdHJ1Y3R1cmVkX3VybnKMdgAAau9nAABYDAAAAHN0YXRpY21ldGhvZIZYKwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Eb0ZuLlRpbWVyUGFyYW1yjXYAAGqMXwAAWAkAAABhdHRyaWJ1dGVyjnYAAIZYNAAAAGFwYWNoZV9iZWFtLmlvLnBhcnF1ZXRpby5Xcml0ZVRvUGFycXVldC5kaXNwbGF5X2RhdGFyj3YAAGrpXAAAWAYAAABtZXRob2SGWEIAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5oZWxwZXJfdHJhbnNmb3Jtcy5GaW5pc2hDb21iaW5lLnByb2Nlc3NykHYAAGotYQAAWAYAAABtZXRob2SGWDsAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5Ob25NZXJnaW5nV2luZG93Rm4uaXNfbWVyZ2luZ3KRdgAAalJkAABYBgAAAG1ldGhvZHKSdgAAhlgjAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkucHl0aG9uX3VybnNyk3YAAGoEaAAAap9wAACGWCIAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ3JlYXRlcpR2AABqjF8AAFgFAAAAY2xhc3NylXYAAIZYLgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlRpbWVzdGFtcGVkVmFsdWVylnYAAGpSZAAAWAUAAABjbGFzc3KXdgAAhlhJAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm0udHlwZV9jaGVja19pbnB1dHNfb3Jfb3V0cHV0c3KYdgAAak1fAABYBgAAAG1ldGhvZHKZdgAAhlhAAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuaGVscGVyX3RyYW5zZm9ybXMuTGlmdGVkQ29tYmluZVBlcktleXKadgAAai1hAABYBQAAAGNsYXNzhlhQAAAAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9hbmFseXplci5QaXBlbGluZUluZm8ubGVhZl9wY29sbGVjdGlvbnNym3YAAGr7XQAAWAYAAABtZXRob2SGWCgAAABhcGFjaGVfYmVhbS5pby5nY3AucHVic3ViLlJlYWRGcm9tUHViU3Vicpx2AABqG1oAAFgFAAAAY2xhc3OGWDcAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJDb3VudC50b19ydW5uZXJfYXBpcp12AABq0VsAAFgGAAAAbWV0aG9kcp52AACGWC0AAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtcy5GaWxlU3lzdGVtcy5ta2RpcnNyn3YAAGrHWAAAWAwAAABzdGF0aWNtZXRob2SGWFYAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LnRlc3RfZGF0YWZsb3dfcnVubmVyLlRlc3REYXRhZmxvd1J1bm5lci5idWlsZF9jb25zb2xlX3VybHKgdgAAar9oAABYBgAAAG1ldGhvZIZYLAAAAGFwYWNoZV9iZWFtLmlvLnRleHRpby5SZWFkQWxsRnJvbVRleHQuZXhwYW5kcqF2AABqoV8AAFgGAAAAbWV0aG9khlgzAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW0uR0NTRmlsZVN5c3RlbS5vcGVucqJ2AABqJmAAAFgGAAAAbWV0aG9khlg1AAAAYXBhY2hlX2JlYW0udG9vbHMuY29kZXJzX21pY3JvYmVuY2htYXJrLnJhbmRvbV9zdHJpbmdyo3YAAGqGYgAAWAgAAABmdW5jdGlvboZYMgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5SZXBlYXRlZGx5Lm9uX21lcmdlcqR2AABq0VsAAFgGAAAAbWV0aG9kcqV2AACGWFwAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2FuYWx5emVyLlBpcGVsaW5lQW5hbHl6ZXIucGlwZWxpbmVfcHJvdG9fdG9fZXhlY3V0ZXKmdgAAavtdAABYBgAAAG1ldGhvZIZYLgAAAGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9waXBlbGluZS5UZXN0UGlwZWxpbmVyp3YAAGrFZwAAWAUAAABjbGFzc4ZYLQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfbWV0cmljc3KodgAAapJqAABqn3AAAIZYQQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lUGVyS2V5LnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVycql2AABqjF8AAFgGAAAAbWV0aG9kcqp2AACGWD4AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRpbWV1dGlsLlRpbWVEb21haW4uREVQRU5ERU5UX1JFQUxfVElNRXKrdgAAaiRlAABYCQAAAGF0dHJpYnV0ZXKsdgAAhlgmAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuU2Vzc2lvbnNyrXYAAGpSZAAAWAUAAABjbGFzc3KudgAAhlhIAAAAYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyLnN0YXJ0X3Bvc2l0aW9ucq92AABq1FwAAFgGAAAAbWV0aG9khlgxAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUuaXNfc3RhdGVmdWxfZG9mbnKwdgAAaohgAABYCAAAAGZ1bmN0aW9ucrF2AACGWDsAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZS5Vc2VyU3RhdGVDb250ZXh0LmdldF90aW1lcnKydgAAaohgAABYBgAAAG1ldGhvZHKzdgAAhlgmAAAAYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmtytHYAAGorVAAAamtwAACGWCAAAABhcGFjaGVfYmVhbS51dGlscy5wcm9jZXNzZXMuY2FsbHK1dgAAahhhAABYCAAAAGZ1bmN0aW9ucrZ2AACGWD8AAABhcGFjaGVfYmVhbS50b29scy5jb2RlcnNfbWljcm9iZW5jaG1hcmsuZ2xvYmFsbHlfd2luZG93ZWRfdmFsdWVyt3YAAGqGYgAAWAgAAABmdW5jdGlvboZYLwAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmNhbGxfZnVuY3Rpb25fdmFycrh2AABqfVgAAFgIAAAAZnVuY3Rpb25yuXYAAIZYIAAAAGFwYWNoZV9iZWFtLmlvLnZjZmlvLlZhcmlhbnRJbmZvcrp2AABqRl0AAFgFAAAAY2xhc3OGWCIAAABhcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmFuZ2VUcmFja2Vycrt2AABqkWQAAFgFAAAAY2xhc3OGWDcAAABhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkuQmlnUXVlcnlTb3VyY2UuZGlzcGxheV9kYXRhcrx2AABqs1oAAFgGAAAAbWV0aG9khlhaAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IuRVJSX01JU1NJTkdfT1BUSU9Ocr12AABq7mAAAFgJAAAAYXR0cmlidXRlhlhiAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudHJhbnNmb3JtX2V2YWx1YXRvci5UcmFuc2Zvcm1FdmFsdWF0b3JSZWdpc3RyeS5nZXRfcm9vdF9idW5kbGVfcHJvdmlkZXJyvnYAAGoaagAAWAYAAABtZXRob2SGWDgAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUZuLm1lcmdlX2FjY3VtdWxhdG9yc3K/dgAAaoxfAABYBgAAAG1ldGhvZHLAdgAAhlhZAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uc3RyZWFtaW5nX2NyZWF0ZS5TdHJlYW1pbmdDcmVhdGUuRGVjb2RlQW5kRW1pdERvRm5ywXYAAGrAYQAAWAUAAABjbGFzc4ZYPgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheS5EaXNwbGF5RGF0YUl0ZW0uZHJvcF9pZl9kZWZhdWx0csJ2AABqNlkAAFgGAAAAbWV0aG9kcsN2AACGWDUAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuRGVmYXVsdFRyaWdnZXIub25fZmlyZXLEdgAAatFbAABYBgAAAG1ldGhvZHLFdgAAhlhIAAAAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9ydW5uZXIuUGlwZWxpbmVSZXN1bHQuc2FtcGxlcsZ2AABqGWgAAFgGAAAAbWV0aG9khlgrAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuY2FsbF9mdW5jdGlvbnLHdgAAan1YAABYCAAAAGZ1bmN0aW9ucsh2AACGWEwAAABhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2UuRmlsZUJhc2VkU291cmNlLk1JTl9GUkFDVElPTl9PRl9GSUxFU19UT19TVEFUcsl2AABqZGsAAFgJAAAAYXR0cmlidXRlhlhgAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuaGVscGVyX3RyYW5zZm9ybXMuUGFydGlhbEdyb3VwQnlLZXlDb21iaW5pbmdWYWx1ZXMuZGVmYXVsdF90eXBlX2hpbnRzcsp2AABqLWEAAFgGAAAAbWV0aG9khlhkAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fYXJ0aWZhY3RfYXBpX3BiMl9ncnBjLkFydGlmYWN0U3RhZ2luZ1NlcnZpY2VTZXJ2aWNlci5Db21taXRNYW5pZmVzdHLLdgAAaiRmAABYBgAAAG1ldGhvZIZYQAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5QYXJ0aXRpb24uQXBwbHlQYXJ0aXRpb25GbkZuLnByb2Nlc3NyzHYAAGqMXwAAWAYAAABtZXRob2RyzXYAAIZYIwAAAGFwYWNoZV9iZWFtLnV0aWxzLnJldHJ5LkNsb2NrLnNsZWVwcs52AABqbGEAAFgGAAAAbWV0aG9kcs92AACGWDQAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkJ5dGVzQ29kZXIuYXNfY2xvdWRfb2JqZWN0ctB2AABq72cAAFgGAAAAbWV0aG9khlhKAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjLkJlYW1GblN0YXRlU2VydmljZXIuU3RhdGVy0XYAAGolawAAWAYAAABtZXRob2SGWBoAAABhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lcnLSdgAAajdbAABqa3AAAIZYOQAAAGFwYWNoZV9iZWFtLnRvb2xzLnNpZGVpbnB1dF9taWNyb2JlbmNobWFyay5sb25nX2dlbmVyYXRvcnLTdgAAaltdAABYCAAAAGZ1bmN0aW9uhlg+AAAAYXBhY2hlX2JlYW0uaW50ZXJuYWwuZ2NwLmpzb25fdmFsdWUuZ2V0X3R5cGVkX3ZhbHVlX2Rlc2NyaXB0b3Jy1HYAAGp9agAAWAgAAABmdW5jdGlvboZYLAAAAGFwYWNoZV9iZWFtLnRvb2xzLnV0aWxzLkJlbmNobWFya0NvbmZpZy5zaXplctV2AABqcWIAAFgJAAAAYXR0cmlidXRlhlgvAAAAYXBhY2hlX2JlYW0ubWV0cmljcy5tb25pdG9yaW5nX2luZm9zLmlzX2NvdW50ZXJy1nYAAGp4ZgAAWAgAAABmdW5jdGlvboZYMwAAAGFwYWNoZV9iZWFtLmlvLmxvY2FsZmlsZXN5c3RlbS5Mb2NhbEZpbGVTeXN0ZW0ub3BlbnLXdgAAatFqAABYBgAAAG1ldGhvZIZYMgAAAGFwYWNoZV9iZWFtLm1ldHJpY3MuY2VsbHMuRGlzdHJpYnV0aW9uUmVzdWx0LmNvdW50cth2AABqcF0AAFgJAAAAYXR0cmlidXRlhlg3AAAAYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc2luay5GaWxlQmFzZWRTaW5rLmRpc3BsYXlfZGF0YXLZdgAAandfAABYBgAAAG1ldGhvZIZYMgAAAGFwYWNoZV9iZWFtLnV0aWxzLnVybnMuUnVubmVyQXBpRm4uZnJvbV9ydW5uZXJfYXBpctp2AABqdFoAAFgLAAAAY2xhc3NtZXRob2Ry23YAAIZYKAAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLnN0b3JlX2Zhc3Ry3HYAAGp9WAAAWAgAAABmdW5jdGlvbnLddgAAhlgmAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLldpbmRvd0ludG9y3nYAAGqMXwAAWAUAAABjbGFzc3LfdgAAhlg6AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyUHJvY2Vzc2luZ1RpbWUub25fZmlyZXLgdgAAatFbAABYBgAAAG1ldGhvZHLhdgAAhlhiAAAAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LnBpcGVsaW5lX2dyYXBoX3JlbmRlcmVyLk11dGVSZW5kZXJlci5yZW5kZXJfcGlwZWxpbmVfZ3JhcGhy4nYAAGrFYwAAWAYAAABtZXRob2SGWDQAAABhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVN0YXRlLmlzX3Rlcm1pbmFscuN2AABqN1sAAFgLAAAAY2xhc3NtZXRob2SGWC0AAABhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3RfdXRpbHMuY2xlYW51cF90b3BpY3Ny5HYAAGrqYQAAWAgAAABmdW5jdGlvboZYHgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX2NvbW1vbnLldgAAav5cAABqa3AAAIZYMgAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmVfd3JpdGVfaXRfcGlwZWxpbmUucnVucuZ2AABqWFwAAFgIAAAAZnVuY3Rpb26GWCYAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5Db3VudHLndgAAal5jAABYBQAAAGNsYXNzhlguAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuVG9EaWN0LmV4cGFuZHLodgAAal5jAABYBgAAAG1ldGhvZIZYGQAAAGFwYWNoZV9iZWFtLm1ldHJpY3MuY2VsbHNy6XYAAGpwXQAAaqxwAACGWDYAAABhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl9jb21tb24uU3BsaXR0YWJsZVBhckRvT3ZlcnJpZGVy6nYAAGr+XAAAWAUAAABjbGFzc4ZYNwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGVfbWFuYWdlci5SZWFkQ2FjaGVy63YAAGoDWQAAWAUAAABjbGFzc4ZYJgAAAGFwYWNoZV9iZWFtLnV0aWxzLnByb2Nlc3Nlcy5jaGVja19jYWxscux2AABqGGEAAFgIAAAAZnVuY3Rpb25y7XYAAIZYPAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lR2xvYmFsbHkud2l0aG91dF9kZWZhdWx0c3LudgAAaoxfAABYBgAAAG1ldGhvZHLvdgAAhlgnAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuU2FtcGxlcvB2AABqXmMAAFgFAAAAY2xhc3OGWEwAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9qb2JfYXBpX3BiMl9ncnBjLkpvYlNlcnZpY2VTZXJ2aWNlci5QcmVwYXJlcvF2AABqE2kAAFgGAAAAbWV0aG9khlgmAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW9y8nYAAGq4VAAAap9wAACGWDYAAABhcGFjaGVfYmVhbS5pby5oYWRvb3BmaWxlc3lzdGVtLkhhZG9vcEZpbGVTeXN0ZW0uc3BsaXRy83YAAGpCYQAAWAYAAABtZXRob2SGWFgAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LnRlc3RfZGF0YWZsb3dfcnVubmVyLlRlc3REYXRhZmxvd1J1bm5lci53YWl0X3VudGlsX2luX3N0YXRlcvR2AABqv2gAAFgGAAAAbWV0aG9khlgmAAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5TdHJVdGY4Q29kZXJy9XYAAGrvZwAAWAUAAABjbGFzc4ZYRgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5kaXNwbGF5X21hbmFnZXIuRGlzcGxheU1hbmFnZXJy9nYAAGqLWwAAWAUAAABjbGFzc4ZYNwAAAGFwYWNoZV9iZWFtLnV0aWxzLnByb2ZpbGVyLlByb2ZpbGUuZmFjdG9yeV9mcm9tX29wdGlvbnNy93YAAGoDYQAAWAwAAABzdGF0aWNtZXRob2Ry+HYAAIZYTAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5waXBlbGluZV9ncmFwaF9yZW5kZXJlci5UZXh0UmVuZGVyZXJy+XYAAGrFYwAAWAUAAABjbGFzc4ZYRAAAAGFwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2UuQ29uY2F0UmFuZ2VUcmFja2VyLnBvc2l0aW9uX2F0X2ZyYWN0aW9ucvp2AABqT2sAAFgGAAAAbWV0aG9khlgpAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLlJlcGVhdGVkbHly+3YAAGrRWwAAWAUAAABjbGFzc3L8dgAAhlg1AAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5oZWxwZXIuZmV0Y2hfZW50aXRpZXNy/XYAAGqFXQAAWAgAAABmdW5jdGlvboZYRQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGVfbWFuYWdlci5TYWZlRmFzdFByaW1pdGl2ZXNDb2RlcnL+dgAAagNZAABYBQAAAGNsYXNzhlgoAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5Db21wcmVzc2VkRmlsZXL/dgAAahlcAABYBQAAAGNsYXNzhlhGAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjLkJlYW1GbkNvbnRyb2xTZXJ2aWNlcnIAdwAAaiVrAABYBQAAAGNsYXNzhlg+AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuU2Vzc2lvbnMudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJyAXcAAGpSZAAAWAYAAABtZXRob2RyAncAAIZYOAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlclByb2Nlc3NpbmdUaW1lLnJlc2V0cgN3AABq0VsAAFgGAAAAbWV0aG9kcgR3AACGWFkAAABhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci52YWxpZGF0ZV9nY3NfcGF0aHIFdwAAau5gAABYBgAAAG1ldGhvZIZYNQAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuVHVwbGVDb2Rlci5pc19kZXRlcm1pbmlzdGljcgZ3AABq72cAAFgGAAAAbWV0aG9khlg/AAAAYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbS5UZXN0U3RyZWFtLmFkdmFuY2Vfd2F0ZXJtYXJrX3Rvcgd3AABqLlwAAFgGAAAAbWV0aG9khlg/AAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlLkZyYW1lU3RhdGUuY2xvc3VyZV90eXBlcgh3AABqsWkAAFgGAAAAbWV0aG9kcgl3AACGWD0AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJQcm9jZXNzaW5nVGltZS5vbl9lbGVtZW50cgp3AABq0VsAAFgGAAAAbWV0aG9kcgt3AACGWC4AAABhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtLldhdGVybWFya0V2ZW50cgx3AABqLlwAAFgFAAAAY2xhc3OGWD0AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZVBlcktleS53aXRoX2hvdF9rZXlfZmFub3V0cg13AABqjF8AAFgGAAAAbWV0aG9kcg53AACGWCgAAABhcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb24ud2luZG93aW5ncg93AABqTmYAAFgJAAAAYXR0cmlidXRlhlgyAAAAYXBhY2hlX2JlYW0ubWV0cmljcy5tb25pdG9yaW5nX2luZm9zLmNyZWF0ZV9sYWJlbHNyEHcAAGp4ZgAAWAgAAABmdW5jdGlvboZYOQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lR2xvYmFsbHkud2l0aF9kZWZhdWx0c3IRdwAAaoxfAABYBgAAAG1ldGhvZHISdwAAhlgSAAAAYXBhY2hlX2JlYW0uaW8uZ2NwchN3AABqCVQAAGqKcgAAhlg5AAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5oZWxwZXIucmV0cnlfb25fcnBjX2Vycm9ychR3AABqhV0AAFgIAAAAZnVuY3Rpb26GWDoAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybS50b19ydW5uZXJfYXBpchV3AABqTV8AAFgGAAAAbWV0aG9kchZ3AACGWC0AAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzZWRGaWxlLnNlZWtyF3cAAGoZXAAAWAYAAABtZXRob2SGWCwAAABhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfaW9fcmVhZF9waXBlbGluZXIYdwAAau9jAABqinIAAIZYMgAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZS51bmlvbl9saXN0chl3AABqsWkAAFgIAAAAZnVuY3Rpb25yGncAAIZYMgAAAGFwYWNoZV9iZWFtLmlvLmdjcC5wdWJzdWJfaXRfcGlwZWxpbmUucnVuX3BpcGVsaW5lcht3AABqtl8AAFgIAAAAZnVuY3Rpb26GWC4AAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLnF1ZXJ5X3NwbGl0dGVychx3AABqu2QAAGq2cAAAhlg0AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLlJlcGVhdGVkbHkub25fZWxlbWVudHIddwAAatFbAABYBgAAAG1ldGhvZHIedwAAhlhFAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLk5hdGl2ZVNvdXJjZS5pc19ib3VuZGVkch93AABqxmkAAFgGAAAAbWV0aG9khlgpAAAAYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlNpbmsuZmluYWxpemVfd3JpdGVyIHcAAGqRZAAAWAYAAABtZXRob2SGWCYAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5nZXRfaXRlcnIhdwAAan1YAABYCAAAAGZ1bmN0aW9uciJ3AACGWFMAAABhcGFjaGVfYmVhbS5pby5mbGluay5mbGlua19zdHJlYW1pbmdfaW1wdWxzZV9zb3VyY2UuRmxpbmtTdHJlYW1pbmdJbXB1bHNlU291cmNlLlVSTnIjdwAAap1ZAABYCQAAAGF0dHJpYnV0ZYZYOAAAAGFwYWNoZV9iZWFtLnV0aWxzLnBsdWdpbi5CZWFtUGx1Z2luLmdldF9hbGxfcGx1Z2luX3BhdGhzciR3AABqOWYAAFgLAAAAY2xhc3NtZXRob2RyJXcAAIZYIwAAAGFwYWNoZV9iZWFtLnBpcGVsaW5lLlBpcGVsaW5lLmFwcGx5ciZ3AABq5l0AAFgGAAAAbWV0aG9khlg9AAAAYXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZS5Db25jYXRSYW5nZVRyYWNrZXIuc3RvcF9wb3NpdGlvbnIndwAAak9rAABYBgAAAG1ldGhvZIZYKwAAAGFwYWNoZV9iZWFtLnBpcGVsaW5lLlBpcGVsaW5lLnRvX3J1bm5lcl9hcGlyKHcAAGrmXQAAWAYAAABtZXRob2SGWEIAAABhcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHMubG9hZF90ZXN0X21ldHJpY3NfdXRpbHMuTWVhc3VyZVRpbWVyKXcAAGoUZwAAWAUAAABjbGFzc4ZYIAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmNsb2Nrcip3AABqD2YAAGoScgAAhlg4AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLk9yRmluYWxseS5mcm9tX3J1bm5lcl9hcGlyK3cAAGrRWwAAWAwAAABzdGF0aWNtZXRob2RyLHcAAIZYKQAAAGFwYWNoZV9iZWFtLmlvLmdjcC5nY3Npby5HY3NJTy5jb3B5X2JhdGNoci13AABqY2YAAFgGAAAAbWV0aG9khlg+AAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5GYXN0UHJpbWl0aXZlc0NvZGVyLmlzX2RldGVybWluaXN0aWNyLncAAGrvZwAAWAYAAABtZXRob2SGWFEAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9hcnRpZmFjdF9hcGlfcGIyX2dycGMuQXJ0aWZhY3RTdGFnaW5nU2VydmljZVN0dWJyL3cAAGokZgAAWAUAAABjbGFzc4ZYQAAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYy5CZWFtRm5TdGF0ZVN0dWJyMHcAAGolawAAWAUAAABjbGFzc4ZYHQAAAGFwYWNoZV9iZWFtLmVycm9yLlBWYWx1ZUVycm9ycjF3AABqPWQAAFgJAAAAZXhjZXB0aW9uhlhTAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLlJlYWRlclByb2dyZXNzLnJlbWFpbmluZ19zcGxpdF9wb2ludHNyMncAAGrGaQAAWAkAAABhdHRyaWJ1dGWGWF4AAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9wcm92aXNpb25fYXBpX3BiMl9ncnBjLmFkZF9Qcm92aXNpb25TZXJ2aWNlU2VydmljZXJfdG9fc2VydmVycjN3AABqqmgAAFgIAAAAZnVuY3Rpb26GWCUAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5wb3BfdHdvcjR3AABqfVgAAFgIAAAAZnVuY3Rpb25yNXcAAIZYJwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5QYXJ0aXRpb25GbnI2dwAAaoxfAABYBQAAAGNsYXNzcjd3AACGWCsAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmRhdGFzdG9yZWlvcjh3AABqOWUAAGq2cAAAhlhDAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5zaWRlaW5wdXRzLlNpZGVJbnB1dE1hcC5pc19nbG9iYWxseV93aW5kb3dlZHI5dwAAatpjAABYBgAAAG1ldGhvZHI6dwAAhlgoAAAAYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wLlRpbWVzdGFtcC5vZnI7dwAAaoFhAABYDAAAAHN0YXRpY21ldGhvZHI8dwAAhlgqAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuY2xvY2suUmVhbENsb2Nrcj13AABqD2YAAFgFAAAAY2xhc3OGWBsAAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtaW9yPncAAGraZwAAaopyAACGWDMAAABhcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmVzdHJpY3Rpb25UcmFja2VyLmNoZWNrX2RvbmVyP3cAAGqRZAAAWAYAAABtZXRob2SGWDcAAABhcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNlLkNvbmNhdFNvdXJjZS5lc3RpbWF0ZV9zaXplckB3AABqT2sAAFgGAAAAbWV0aG9khlguAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudHJhbnNmb3JtX2V2YWx1YXRvcnJBdwAAahpqAABqEnIAAIZYPgAAAGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLk9mZnNldFJhbmdlVHJhY2tlci5zdG9wX3Bvc2l0aW9uckJ3AABq1FwAAFgGAAAAbWV0aG9khlhBAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50cy5UeXBlVmFyaWFibGUubWF0Y2hfdHlwZV92YXJpYWJsZXNyQ3cAAGr7agAAWAYAAABtZXRob2RyRHcAAIZYLAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LkludGVydmFsV2luZG93ckV3AABqUmQAAFgFAAAAY2xhc3NyRncAAIZYOwAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuVHVwbGVTZXF1ZW5jZUNvZGVyLmZyb21fdHlwZV9oaW50ckd3AABq72cAAFgMAAAAc3RhdGljbWV0aG9khlg7AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5zaWRlaW5wdXRzLmRlZmF1bHRfd2luZG93X21hcHBpbmdfZm5ySHcAAGraYwAAWAgAAABmdW5jdGlvbnJJdwAAhlghAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3Jtckp3AABqTV8AAGq9cAAAhlhSAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudHJhbnNmb3JtX2V2YWx1YXRvci5Sb290QnVuZGxlUHJvdmlkZXIuZ2V0X3Jvb3RfYnVuZGxlc3JLdwAAahpqAABYBgAAAG1ldGhvZIZYQgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5pbnRlcmFjdGl2ZV9waXBlbGluZV9ncmFwaHJMdwAAavplAABqinAAAIZYNgAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQ29kZXIuYXNfZGV0ZXJtaW5pc3RpY19jb2RlcnJNdwAAau9nAABYBgAAAG1ldGhvZIZYRwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dC5FdmFsdWF0aW9uQ29udGV4dC5pc19kb25lck53AABq+mQAAFgGAAAAbWV0aG9khlghAAAAYXBhY2hlX2JlYW0udXRpbHMucHJvY2Vzc2VzLlBvcGVuck93AABqGGEAAFgIAAAAZnVuY3Rpb25yUHcAAIZYKQAAAGFwYWNoZV9iZWFtLnV0aWxzLnByb2ZpbGVyLlByb2ZpbGUuU09SVEJZclF3AABqA2EAAFgJAAAAYXR0cmlidXRlclJ3AACGWFIAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9qb2JfYXBpX3BiMl9ncnBjLmFkZF9Kb2JTZXJ2aWNlU2VydmljZXJfdG9fc2VydmVyclN3AABqE2kAAFgIAAAAZnVuY3Rpb26GWD8AAABhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5uZXhtYXJrX3V0aWwuQ29tbWFuZC5ydW5yVHcAAGoRYAAAWAYAAABtZXRob2SGWDcAAABhcGFjaGVfYmVhbS5pby5oYWRvb3BmaWxlc3lzdGVtLkhhZG9vcEZpbGVTeXN0ZW0ubWtkaXJzclV3AABqQmEAAFgGAAAAbWV0aG9khlh0AAAAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LmludGVyYWN0aXZlX3BpcGVsaW5lX2dyYXBoLkludGVyYWN0aXZlUGlwZWxpbmVHcmFwaC51cGRhdGVfcGNvbGxlY3Rpb25fc3RhdHNyVncAAGr6ZQAAWAYAAABtZXRob2SGWDAAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZVBlcktleS5leHBhbmRyV3cAAGqMXwAAWAYAAABtZXRob2RyWHcAAIZYNAAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX2dycGNyWXcAAGpBWAAAamRxAACGWEwAAABhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuR29vZ2xlQ2xvdWRPcHRpb25zLkJJR1FVRVJZX0FQSV9TRVJWSUNFclp3AABqiVoAAFgJAAAAYXR0cmlidXRlhlhFAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlci5SdW50aW1lVmFsdWVQcm92aWRlci5pc19hY2Nlc3NpYmxlclt3AABqnloAAFgGAAAAbWV0aG9khlgaAAAAYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlNpbmtyXHcAAGqRZAAAWAUAAABjbGFzc4ZYYQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnRyYW5zZm9ybV9ldmFsdWF0b3IuVHJhbnNmb3JtRXZhbHVhdG9yUmVnaXN0cnkuc2hvdWxkX2V4ZWN1dGVfc2VyaWFsbHlyXXcAAGoaagAAWAYAAABtZXRob2SGWDQAAABhcGFjaGVfYmVhbS50ZXN0aW5nLnV0aWwuVGVzdFdpbmRvd2VkVmFsdWUudGltZXN0YW1wcl53AABqEmMAAFgJAAAAYXR0cmlidXRlhlglAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMucG9wX29uZXJfdwAAan1YAABYCAAAAGZ1bmN0aW9ucmB3AACGWCUAAABhcGFjaGVfYmVhbS5waXBlbGluZS5QaXBlbGluZS5vcHRpb25zcmF3AABq5l0AAFgJAAAAYXR0cmlidXRlhlgxAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuRml4ZWRXaW5kb3dzLmFzc2lnbnJidwAAalJkAABYBgAAAG1ldGhvZHJjdwAAhlgsAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMudW5hcnlfcG9zaXRpdmVyZHcAAGp9WAAAWAgAAABmdW5jdGlvbnJldwAAhlghAAAAYXBhY2hlX2JlYW0uaW8udGV4dGlvLldyaXRlVG9UZXh0cmZ3AABqoV8AAFgFAAAAY2xhc3OGWD0AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfbWV0cmljcy5EaXJlY3RNZXRyaWNzLnF1ZXJ5cmd3AABqBloAAFgGAAAAbWV0aG9khlg4AAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLnN0YW5kYXJkX3dpbmRvd19mbnNfcGIyX2dycGNyaHcAAGoiWwAAamRxAACGWDgAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRpbWV1dGlsLlRpbWVEb21haW4udG9fcnVubmVyX2FwaXJpdwAAaiRlAABYDAAAAHN0YXRpY21ldGhvZHJqdwAAhlhJAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZV93cml0ZV9pdF9waXBlbGluZS5uZXdfcGlwZWxpbmVfd2l0aF9qb2JfbmFtZXJrdwAAalhcAABYCAAAAGZ1bmN0aW9uhlgyAAAAYXBhY2hlX2JlYW0ubWV0cmljcy5tb25pdG9yaW5nX2luZm9zLmludDY0X2NvdW50ZXJybHcAAGp4ZgAAWAgAAABmdW5jdGlvboZYRAAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2pvYl9hcGlfcGIyX2dycGMuSm9iU2VydmljZVNlcnZpY2Vycm13AABqE2kAAFgFAAAAY2xhc3OGWCAAAABhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbXJudwAAaiZgAABqtnAAAIZYPwAAAGFwYWNoZV9iZWFtLmlvLmdjcC5wdWJzdWIuV3JpdGVUb1B1YlN1Yi50b19ydW5uZXJfYXBpX3BhcmFtZXRlcnJvdwAAahtaAABYBgAAAG1ldGhvZIZYMwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlLlJ1bnRpbWVUaW1lci5jbGVhcnJwdwAAaohgAABYBgAAAG1ldGhvZHJxdwAAhlhAAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuVGltZXN0YW1wQ29tYmluZXIuT1VUUFVUX0FUX0xBVEVTVHJydwAAalJkAABYCQAAAGF0dHJpYnV0ZXJzdwAAhlg1AAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5oZWxwZXIubWFrZV9wYXJ0aXRpb25ydHcAAGqFXQAAWAgAAABmdW5jdGlvboZYNwAAAGFwYWNoZV9iZWFtLnV0aWxzLnRpbWVzdGFtcC5UaW1lc3RhbXAuZnJvbV91dGNfZGF0ZXRpbWVydXcAAGqBYQAAWAsAAABjbGFzc21ldGhvZHJ2dwAAhlgrAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuaW5wbGFjZV9wb3dlcnJ3dwAAan1YAABYCAAAAGZ1bmN0aW9ucnh3AACGWEAAAABhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uSW5wdXRTdHJlYW0ucmVhZF9iaWdlbmRpYW5fZG91Ymxlcnl3AABqBF8AAFgGAAAAbWV0aG9khlg8AAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLkNvbmNhdFBvc2l0aW9ucnp3AABqxmkAAFgFAAAAY2xhc3OGWFEAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lci5TREZQcm9jZXNzRWxlbWVudEludm9rZXIudGVzdF9tZXRob2Rye3cAAGrlZAAAWAYAAABtZXRob2SGWD0AAABhcGFjaGVfYmVhbS50b29scy5jb2RlcnNfbWljcm9iZW5jaG1hcmsucmFuZG9tX3dpbmRvd2VkX3ZhbHVlcnx3AABqhmIAAFgIAAAAZnVuY3Rpb26GWFwAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkuZGlzcGxheV9tYW5hZ2VyLkRpc3BsYXlNYW5hZ2VyLnN0YXJ0X3BlcmlvZGljX3VwZGF0ZXJ9dwAAaotbAABYBgAAAG1ldGhvZIZYIwAAAGFwYWNoZV9iZWFtLnBpcGVsaW5lLlBpcGVsaW5lLnZpc2l0cn53AABq5l0AAFgGAAAAbWV0aG9khlg6AAAAYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsucXVlcmllcy5xdWVyeTEubG9hZHJ/dwAAamFbAABYCAAAAGZ1bmN0aW9uhlhMAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcHJvdmlzaW9uX2FwaV9wYjJfZ3JwYy5Qcm92aXNpb25TZXJ2aWNlU3R1YnKAdwAAaqpoAABYBQAAAGNsYXNzhlg/AAAAYXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZS5Db25jYXRSYW5nZVRyYWNrZXIubG9jYWxfdG9fZ2xvYmFscoF3AABqT2sAAFgGAAAAbWV0aG9khlhLAAAAYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyLmZyYWN0aW9uX2NvbnN1bWVkcoJ3AABq1FwAAFgGAAAAbWV0aG9khlgtAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50cy5XaW5kb3dlZFZhbHVlcoN3AABq+2oAAFgJAAAAYXR0cmlidXRlcoR3AACGWE4AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5zdHJlYW1pbmdfY3JlYXRlLlN0cmVhbWluZ0NyZWF0ZS5leHBhbmRyhXcAAGrAYQAAWAYAAABtZXRob2SGWC8AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZS5nZXRfZG9mbl9zcGVjc3KGdwAAaohgAABYCAAAAGZ1bmN0aW9ucod3AACGWC0AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5TZXNzaW9ucy5hc3NpZ25yiHcAAGpSZAAAWAYAAABtZXRob2RyiXcAAIZYJwAAAGFwYWNoZV9iZWFtLmlvLnBhcnF1ZXRpby5Xcml0ZVRvUGFycXVldHKKdwAAaulcAABYBQAAAGNsYXNzhlg3AAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LkJpZ1F1ZXJ5U2luay5zY2hlbWFfYXNfanNvbnKLdwAAarNaAABYBgAAAG1ldGhvZIZYIwAAAGFwYWNoZV9iZWFtLmlvLmdjcC5nY3Npby5HY3NJTy5vcGVucox3AABqY2YAAFgGAAAAbWV0aG9khlgsAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLnB1YnN1Yi5QdWJzdWJNZXNzYWdlLmRhdGFyjXcAAGobWgAAWAkAAABhdHRyaWJ1dGWGWEEAAABhcGFjaGVfYmVhbS51dGlscy5yZXRyeS5yZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2FuZF90aW1lb3V0X2ZpbHRlcnKOdwAAamxhAABYCAAAAGZ1bmN0aW9uco93AACGWBUAAABhcGFjaGVfYmVhbS5pby5hdnJvaW9ykHcAAGpfWAAAaopyAACGWC0AAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkZhc3RQcmltaXRpdmVzQ29kZXJykXcAAGrvZwAAWAUAAABjbGFzc4ZYMAAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pby5VcGxvYWRlclN0cmVhbS53cml0ZXKSdwAAatpnAABYBgAAAG1ldGhvZIZYLwAAAGFwYWNoZV9iZWFtLnV0aWxzLnVybnMuUnVubmVyQXBpRm4ucmVnaXN0ZXJfdXJucpN3AABqdFoAAFgLAAAAY2xhc3NtZXRob2RylHcAAIZYVAAAAGFwYWNoZV9iZWFtLnRlc3RpbmcubG9hZF90ZXN0cy5sb2FkX3Rlc3RfbWV0cmljc191dGlscy5CaWdRdWVyeUNsaWVudC5tYXRjaF9hbmRfc2F2ZXKVdwAAahRnAABYBgAAAG1ldGhvZIZYRgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlNsaWRpbmdXaW5kb3dzLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXJylncAAGpSZAAAWAwAAABzdGF0aWNtZXRob2Ryl3cAAIZYNQAAAGFwYWNoZV9iZWFtLmludGVybmFsLmdjcC5hdXRoLmdldF9zZXJ2aWNlX2NyZWRlbnRpYWxzcph3AABqLmgAAFgIAAAAZnVuY3Rpb26GWDgAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZS5TdGF0ZVNwZWMudG9fcnVubmVyX2FwaXKZdwAAaohgAABYBgAAAG1ldGhvZHKadwAAhlhMAAAAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoZV9tYW5hZ2VyLlNhZmVGYXN0UHJpbWl0aXZlc0NvZGVyLmRlY29kZXKbdwAAagNZAABYBgAAAG1ldGhvZIZYJQAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLnNsaWNlXzFynHcAAGp9WAAAWAgAAABmdW5jdGlvbnKddwAAhlhPAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IuR0NTX1VSSXKedwAAau5gAABYCQAAAGF0dHJpYnV0ZYZYJQAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLnNsaWNlXzNyn3cAAGp9WAAAWAgAAABmdW5jdGlvbnKgdwAAhlglAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuc2xpY2VfMnKhdwAAan1YAABYCAAAAGZ1bmN0aW9ucqJ3AACGWDAAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5JbnRlcnZhbFdpbmRvdy5lbmRyo3cAAGpSZAAAWAkAAABhdHRyaWJ1dGVypHcAAIZYFwAAAGFwYWNoZV9iZWFtLnV0aWxzLnJldHJ5cqV3AABqbGEAAGpvcAAAhlgyAAAAYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJlYWQudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJypncAAGqRZAAAWAYAAABtZXRob2SGWDsAAABhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5tb2RlbHMubmV4bWFya19tb2RlbHKndwAAaqthAABqa3AAAIZYOAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGVfbWFuYWdlci5Xcml0ZUNhY2hlcqh3AABqA1kAAFgFAAAAY2xhc3OGWDkAAABhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzaW5rLkZpbGVCYXNlZFNpbmsuZmluYWxpemVfd3JpdGVyqXcAAGp3XwAAWAYAAABtZXRob2SGWE8AAABhcGFjaGVfYmVhbS5ydW5uZXJzLnBpcGVsaW5lX2NvbnRleHQuUGlwZWxpbmVDb250ZXh0LmNvZGVyX2lkX2Zyb21fZWxlbWVudF90eXBlcqp3AABqsGcAAFgGAAAAbWV0aG9khlgxAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyRWFjaC5vbl9tZXJnZXKrdwAAatFbAABYBgAAAG1ldGhvZHKsdwAAhlhKAAAAYXBhY2hlX2JlYW0uaW8ucmVzdHJpY3Rpb25fdHJhY2tlcnMuT2Zmc2V0UmVzdHJpY3Rpb25UcmFja2VyLnN0b3BfcG9zaXRpb25yrXcAAGrUaAAAWAYAAABtZXRob2SGWGEAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9wcm92aXNpb25fYXBpX3BiMl9ncnBjLlByb3Zpc2lvblNlcnZpY2VTZXJ2aWNlci5HZXRQcm92aXNpb25JbmZvcq53AABqqmgAAFgGAAAAbWV0aG9khlg8AAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLlJlYWRlclBvc2l0aW9ucq93AABqxmkAAFgFAAAAY2xhc3OGWCAAAABhcGFjaGVfYmVhbS5pbnRlcm5hbC5odHRwX2NsaWVudHKwdwAAalxiAABqtHAAAIZYTQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyLnJ1bl9Db21iaW5lVmFsdWVzcrF3AABqV2EAAFgGAAAAbWV0aG9khlhPAAAAYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuTGV4aWNvZ3JhcGhpY0tleVJhbmdlVHJhY2tlci5mcmFjdGlvbl90b19wb3NpdGlvbnKydwAAatRcAABYCwAAAGNsYXNzbWV0aG9khlg3AAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlLkZyYW1lU3RhdGUuY29weXKzdwAAarFpAABYBgAAAG1ldGhvZHK0dwAAhlguAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuTWVhbi5HbG9iYWxseXK1dwAAal5jAABYBQAAAGNsYXNzhlgxAAAAYXBhY2hlX2JlYW0uaW50ZXJuYWwucGlja2xlci5uZXdfc2F2ZV9tb2R1bGVfZGljdHK2dwAAaohZAABYCAAAAGZ1bmN0aW9uhlgrAAAAYXBhY2hlX2JlYW0uZXJyb3IuUnVudGltZVZhbHVlUHJvdmlkZXJFcnJvcnK3dwAAaj1kAABYCQAAAGV4Y2VwdGlvboZYSAAAAGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5Xcml0ZVRvQmlnUXVlcnkuZ2V0X3RhYmxlX3NjaGVtYV9mcm9tX3N0cmluZ3K4dwAAarNaAABYDAAAAHN0YXRpY21ldGhvZIZYKgAAAGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljLk1ldHJpY3MuY291bnRlcnK5dwAAav5oAABYDAAAAHN0YXRpY21ldGhvZIZYIAAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5kZWNvcmF0b3Jzcrp3AABqKWcAAGq9cAAAhlgzAAAAYXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtLkxvY2FsRmlsZVN5c3RlbS5qb2lucrt3AABq0WoAAFgGAAAAbWV0aG9khlg9AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsLlJlc2h1ZmZsZS50b19ydW5uZXJfYXBpX3BhcmFtZXRlcnK8dwAAajprAABYBgAAAG1ldGhvZHK9dwAAhlhBAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnMuV2l0aFR5cGVIaW50cy5kZWZhdWx0X3R5cGVfaGludHNyvncAAGopZwAAWAYAAABtZXRob2Ryv3cAAIZYKgAAAGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF91dGlscy5wYXRjaF9yZXRyeXLAdwAAauphAABYCAAAAGZ1bmN0aW9uhlhVAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuYnVuZGxlX2ZhY3RvcnkuQnVuZGxlRmFjdG9yeS5jcmVhdGVfZW1wdHlfY29tbWl0dGVkX2J1bmRsZXLBdwAAaiFZAABYBgAAAG1ldGhvZIZYLQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dHLCdwAAavpkAABqEnIAAIZYIgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5GaWx0ZXJyw3cAAGqMXwAAWAgAAABmdW5jdGlvbnLEdwAAhlg3AAAAYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVSdW5uZXIucnVuX3RyYW5zZm9ybXLFdwAAajdbAABYBgAAAG1ldGhvZIZYNQAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQnl0ZXNDb2Rlci5pc19kZXRlcm1pbmlzdGljcsZ3AABq72cAAFgGAAAAbWV0aG9khlgRAAAAYXBhY2hlX2JlYW0udG9vbHNyx3cAAGpoVAAAajdyAACGWEMAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5HbG9iYWxXaW5kb3dzLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVycsh3AABqUmQAAFgGAAAAbWV0aG9kcsl3AACGWCEAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5ub3ByyncAAGp9WAAAWAgAAABmdW5jdGlvbnLLdwAAhlhlAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IuRVJSX0lOVkFMSURfVEVTVF9NQVRDSEVSX1RZUEVyzHcAAGruYAAAWAkAAABhdHRyaWJ1dGWGWC0AAABhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkuVGFibGVSb3dKc29uQ29kZXJyzXcAAGqzWgAAWAUAAABjbGFzc4ZYMAAAAGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV9pb19yZWFkX3BpcGVsaW5lLnJ1bnLOdwAAau9jAABYCAAAAGZ1bmN0aW9uhlgkAAAAYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wLkR1cmF0aW9ucs93AABqgWEAAFgFAAAAY2xhc3Ny0HcAAIZYQQAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2suVHlwZUNoZWNrQ29tYmluZUZuLmV4dHJhY3Rfb3V0cHV0ctF3AABqZ2QAAFgGAAAAbWV0aG9kctJ3AACGWCsAAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtcy5GaWxlU3lzdGVtcy5vcGVuctN3AABqx1gAAFgMAAAAc3RhdGljbWV0aG9khlgxAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnMud2l0aF9pbnB1dF90eXBlc3LUdwAAailnAABYCAAAAGZ1bmN0aW9uctV3AACGWEsAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkuaW50ZXJhY3RpdmVfcGlwZWxpbmVfZ3JhcGgubmljZV9zdHJy1ncAAGr6ZQAAWAgAAABmdW5jdGlvboZYQQAAAGFwYWNoZV9iZWFtLmlvLnRleHRpby5SZWFkQWxsRnJvbVRleHQuREVGQVVMVF9ERVNJUkVEX0JVTkRMRV9TSVpFctd3AABqoV8AAFgJAAAAYXR0cmlidXRlhlgwAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNyZWF0ZS5nZXRfd2luZG93aW5ncth3AABqjF8AAFgGAAAAbWV0aG9kctl3AACGWDYAAABhcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHMubG9hZF90ZXN0X21ldHJpY3NfdXRpbHNy2ncAAGoUZwAAajdyAACGWDwAAABhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWNoZWNrLlR5cGVDaGVja0NvbWJpbmVGbi5hZGRfaW5wdXRy23cAAGpnZAAAWAYAAABtZXRob2Ry3HcAAIZYMQAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3NlZEZpbGUucmVhZGxpbmVy3XcAAGoZXAAAWAYAAABtZXRob2SGWCQAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkZsb2F0Q29kZXJy3ncAAGrvZwAAWAUAAABjbGFzc4ZYLAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlNsaWRpbmdXaW5kb3dzct93AABqUmQAAFgFAAAAY2xhc3Ny4HcAAIZYJgAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmR1cF90b3B4cuF3AABqfVgAAFgIAAAAZnVuY3Rpb25y4ncAAIZYKQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlLm9uX3RpbWVycuN3AABqiGAAAFgIAAAAZnVuY3Rpb25y5HcAAIZYMQAAAGFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lLnJvdGF0ZV9rZXly5XcAAGrLXwAAWAgAAABmdW5jdGlvboZYLAAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmRlbGV0ZV9zbGljZV8xcuZ3AABqfVgAAFgIAAAAZnVuY3Rpb25y53cAAIZYKwAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pby5QaXBlU3RyZWFtLnJlYWRy6HcAAGraZwAAWAYAAABtZXRob2SGWCIAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwuVmFsdWVzcul3AABqOmsAAFgIAAAAZnVuY3Rpb25y6ncAAIZYMgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfcnVubmVycut3AABqGWgAAGqKcAAAhlg3AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5LkRpc3BsYXlEYXRhSXRlbS50eXBlRGljdHLsdwAAajZZAABYCQAAAGF0dHJpYnV0ZXLtdwAAhlgzAAAAYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3V0aWxzLmNyZWF0ZV9wdWxsX3Jlc3BvbnNlcu53AABq6mEAAFgIAAAAZnVuY3Rpb26GWDEAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LnRlc3RfZGF0YWZsb3dfcnVubmVycu93AABqv2gAAGqfcAAAhlhaAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIuUHJvY2Vzc0tleWVkRWxlbWVudHNWaWFLZXllZFdvcmtJdGVtc092ZXJyaWRlcvB3AABq5WQAAFgFAAAAY2xhc3OGWDsAAABhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2UuRmlsZUJhc2VkU291cmNlLnJlYWRfcmVjb3Jkc3LxdwAAamRrAABYBgAAAG1ldGhvZIZYTwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LndhdGVybWFya19tYW5hZ2VyLldhdGVybWFya01hbmFnZXIuV0FURVJNQVJLX1BPU19JTkZy8ncAAGq7WQAAWAkAAABhdHRyaWJ1dGWGWE0AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5oZWxwZXJfdHJhbnNmb3Jtcy5GaW5pc2hDb21iaW5lLmRlZmF1bHRfdHlwZV9oaW50c3LzdwAAai1hAABYBgAAAG1ldGhvZIZYMwAAAGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljLk1ldHJpY3NGaWx0ZXIud2l0aF9uYW1lc3L0dwAAav5oAABYBgAAAG1ldGhvZIZYPwAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZGF0YXN0b3JlaW8uRGVsZXRlRnJvbURhdGFzdG9yZXL1dwAAajllAABYBQAAAGNsYXNzhlgrAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X3VzZXJzdGF0ZXL2dwAAattpAABqEnIAAIZYLQAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zLmRlbGV0ZXL3dwAAasdYAABYDAAAAHN0YXRpY21ldGhvZIZYKQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbC5CYXRjaEVsZW1lbnRzcvh3AABqOmsAAFgFAAAAY2xhc3Ny+XcAAIZYOgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5DcmVhdGUudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJy+ncAAGqMXwAAWAYAAABtZXRob2Ry+3cAAIZYNQAAAGFwYWNoZV9iZWFtLmlvLmdjcC5nY3NmaWxlc3lzdGVtLkdDU0ZpbGVTeXN0ZW0ubWtkaXJzcvx3AABqJmAAAFgGAAAAbWV0aG9khlh0AAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIuUHJvY2Vzc0tleWVkRWxlbWVudHNWaWFLZXllZFdvcmtJdGVtc092ZXJyaWRlLmdldF9yZXBsYWNlbWVudF90cmFuc2Zvcm1y/XcAAGrlZAAAWAYAAABtZXRob2SGWC0AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuV2luZG93SW50by5leHBhbmRy/ncAAGqMXwAAWAYAAABtZXRob2Ry/3cAAIZYYgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5waXBlbGluZV9ncmFwaF9yZW5kZXJlci5UZXh0UmVuZGVyZXIucmVuZGVyX3BpcGVsaW5lX2dyYXBocgB4AABqxWMAAFgGAAAAbWV0aG9khlgyAAAAYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWMuTWV0cmljc0ZpbHRlci53aXRoX3N0ZXByAXgAAGr+aAAAWAYAAABtZXRob2SGWB8AAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkNvZGVycgJ4AABq72cAAFgFAAAAY2xhc3OGWDUAAABhcGFjaGVfYmVhbS5pby5sb2NhbGZpbGVzeXN0ZW0uTG9jYWxGaWxlU3lzdGVtLmNyZWF0ZXIDeAAAatFqAABYBgAAAG1ldGhvZIZYDgAAAGFwYWNoZV9iZWFtLmlvcgR4AABqA1QAAGq0cAAAhlheAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IuRVJSX0lOVkFMSURfR0NTX09CSkVDVHIFeAAAau5gAABYCQAAAGF0dHJpYnV0ZYZYKAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5QYXJEby5leHBhbmRyBngAAGqMXwAAWAYAAABtZXRob2RyB3gAAIZYIwAAAGFwYWNoZV9iZWFtLmludGVybmFsLmdjcC5qc29uX3ZhbHVlcgh4AABqfWoAAGq0cAAAhlgdAAAAYXBhY2hlX2JlYW0udXRpbHMuYW5ub3RhdGlvbnNyCXgAAGq8agAAam9wAACGWD4AAABhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyLlZhbHVlUHJvdmlkZXIuaXNfYWNjZXNzaWJsZXIKeAAAap5aAABYBgAAAG1ldGhvZIZYJwAAAGFwYWNoZV9iZWFtLnBpcGVsaW5lLlBUcmFuc2Zvcm1PdmVycmlkZXILeAAAauZdAABYBQAAAGNsYXNzhlg2AAAAYXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmUuU3ludGhldGljU291cmNlcgx4AABqy18AAFgFAAAAY2xhc3OGWEAAAABhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5VbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIudHJ5X3NwbGl0cg14AABq1FwAAFgGAAAAbWV0aG9khlg7AAAAYXBhY2hlX2JlYW0ubWV0cmljcy5tb25pdG9yaW5nX2luZm9zLmNyZWF0ZV9tb25pdG9yaW5nX2luZm9yDngAAGp4ZgAAWAgAAABmdW5jdGlvboZYNAAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuVHVwbGVDb2Rlci5hc19jbG91ZF9vYmplY3RyD3gAAGrvZwAAWAYAAABtZXRob2SGWDwAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlX3dyaXRlX2l0X3BpcGVsaW5lLkVudGl0eVdyYXBwZXJyEHgAAGpYXAAAWAUAAABjbGFzc4ZYMQAAAGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5Cb3VuZGVkU291cmNlLmVzdGltYXRlX3NpemVyEXgAAGqRZAAAWAYAAABtZXRob2SGWEgAAABhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5VbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIuZnJhY3Rpb25fY29uc3VtZWRyEngAAGrUXAAAWAYAAABtZXRob2SGWCUAAABhcGFjaGVfYmVhbS5pby52Y2Zpby5WYXJpYW50SW5mby5kYXRhchN4AABqRl0AAFgJAAAAYXR0cmlidXRlhlhGAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X21ldHJpY3MuRGlyZWN0TWV0cmljcy5jb21taXRfbG9naWNhbHIUeAAAagZaAABYBgAAAG1ldGhvZIZYRwAAAGFwYWNoZV9iZWFtLmlvLnJlc3RyaWN0aW9uX3RyYWNrZXJzLk9mZnNldFJlc3RyaWN0aW9uVHJhY2tlci5jaGVja3BvaW50chV4AABq1GgAAFgGAAAAbWV0aG9khlgvAAAAYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLk91dHB1dFN0cmVhbS5nZXRyFngAAGoEXwAAWAYAAABtZXRob2SGWDQAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRpbWV1dGlsLlRpbWVEb21haW4uUkVBTF9USU1Fchd4AABqJGUAAFgJAAAAYXR0cmlidXRlchh4AACGWD4AAABhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl9jb21tb24uU3BsaXR0YWJsZVBhckRvT3ZlcnJpZGUubWF0Y2hlc3IZeAAAav5cAABYBgAAAG1ldGhvZIZYNAAAAGFwYWNoZV9iZWFtLnRvb2xzLmNvZGVyc19taWNyb2JlbmNobWFyay5zbWFsbF9zdHJpbmdyGngAAGqGYgAAWAgAAABmdW5jdGlvboZYHwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnV0aWxyG3gAAGrlZQAAahJyAACGWEsAAABhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuR29vZ2xlQ2xvdWRPcHRpb25zLkNPTVBVVEVfQVBJX1NFUlZJQ0VyHHgAAGqJWgAAWAkAAABhdHRyaWJ1dGWGWDkAAABhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uSW5wdXRTdHJlYW0ucmVhZF92YXJfaW50NjRyHXgAAGoEXwAAWAYAAABtZXRob2SGWCIAAABhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYy5NZXRyaWNzch54AABq/mgAAFgFAAAAY2xhc3OGWEUAAABhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWNoZWNrLlR5cGVDaGVja0NvbWJpbmVGbi5jcmVhdGVfYWNjdW11bGF0b3JyH3gAAGpnZAAAWAYAAABtZXRob2RyIHgAAIZYPwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtLnR5cGVfY2hlY2tfb3V0cHV0c3IheAAAak1fAABYBgAAAG1ldGhvZHIieAAAhlgfAAAAYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbXIjeAAAai5cAABqN3IAAIZYRAAAAGFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIuU3RhdGljVmFsdWVQcm92aWRlci5pc19hY2Nlc3NpYmxlciR4AABqnloAAFgGAAAAbWV0aG9khlgSAAAAYXBhY2hlX2JlYW0uY29kZXJzciV4AABqg1QAAGq0cAAAhlgrAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5GaWxlU3lzdGVtLnJlbmFtZXImeAAAahlcAABYBgAAAG1ldGhvZIZYPQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lR2xvYmFsbHkuYXNfc2luZ2xldG9uX3ZpZXdyJ3gAAGqMXwAAWAYAAABtZXRob2RyKHgAAIZYHQAAAGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzcil4AABq1FwAAGqscAAAhlg0AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyRWFjaC5zaG91bGRfZmlyZXIqeAAAatFbAABYBgAAAG1ldGhvZHIreAAAhlgpAAAAYXBhY2hlX2JlYW0uaW50ZXJuYWwucGlja2xlci5sb2FkX3Nlc3Npb25yLHgAAGqIWQAAWAgAAABmdW5jdGlvboZYQQAAAGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5CeXRlQ291bnRpbmdPdXRwdXRTdHJlYW0uZ2V0X2NvdW50ci14AABqBF8AAFgGAAAAbWV0aG9khlgyAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVHbG9iYWxseS5mYW5vdXRyLngAAGqMXwAAWAkAAABhdHRyaWJ1dGVyL3gAAIZYTQAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2pvYl9hcGlfcGIyX2dycGMuSm9iU2VydmljZVNlcnZpY2VyLkdldFN0YXRlcjB4AABqE2kAAFgGAAAAbWV0aG9khlgoAAAAYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJlc3RyaWN0aW9uVHJhY2tlcnIxeAAAapFkAABYBQAAAGNsYXNzhlgsAAAAYXBhY2hlX2JlYW0uaW8uYXZyb2lvLlJlYWRBbGxGcm9tQXZyby5leHBhbmRyMngAAGpfWAAAWAYAAABtZXRob2SGWCMAAABhcGFjaGVfYmVhbS51dGlscy5wbHVnaW4uQmVhbVBsdWdpbnIzeAAAajlmAABYBQAAAGNsYXNzcjR4AACGWC4AAABhcGFjaGVfYmVhbS5pby5wYXJxdWV0aW8uV3JpdGVUb1BhcnF1ZXQuZXhwYW5kcjV4AABq6VwAAFgGAAAAbWV0aG9khlhWAAAAYXBhY2hlX2JlYW0uaW8uZmxpbmsuZmxpbmtfc3RyZWFtaW5nX2ltcHVsc2Vfc291cmNlLkZsaW5rU3RyZWFtaW5nSW1wdWxzZVNvdXJjZS5jb25maWdyNngAAGqdWQAAWAkAAABhdHRyaWJ1dGWGWFIAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmRhdGFzdG9yZWlvLlJlYWRGcm9tRGF0YXN0b3JlLlNwbGl0UXVlcnlGbi5wcm9jZXNzcjd4AABqOWUAAFgGAAAAbWV0aG9khlhOAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjLkJlYW1GbkNvbnRyb2xTZXJ2aWNlci5Db250cm9scjh4AABqJWsAAFgGAAAAbWV0aG9khlg2AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyRWFjaC50b19ydW5uZXJfYXBpcjl4AABq0VsAAFgGAAAAbWV0aG9kcjp4AACGWE0AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHQuRXZhbHVhdGlvbkNvbnRleHQuY3JlYXRlX2J1bmRsZXI7eAAAavpkAABYBgAAAG1ldGhvZIZYOQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lR2xvYmFsbHkuZGVmYXVsdF9sYWJlbHI8eAAAaoxfAABYBgAAAG1ldGhvZHI9eAAAhlgwAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5GaWxlU3lzdGVtLm1hdGNoX2ZpbGVzcj54AABqGVwAAFgGAAAAbWV0aG9khlhVAAAAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LnBpcGVsaW5lX2dyYXBoX3JlbmRlcmVyLlBpcGVsaW5lR3JhcGhSZW5kZXJlcnI/eAAAasVjAABYBQAAAGNsYXNzhlg2AAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5JdGVyYWJsZUNvZGVyLmZyb21fdHlwZV9oaW50ckB4AABq72cAAFgMAAAAc3RhdGljbWV0aG9khlgyAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyQW55LmNvbWJpbmVfb3ByQXgAAGrRWwAAWAYAAABtZXRob2RyQngAAIZYJQAAAGFwYWNoZV9iZWFtLmlvLmdjcC5wdWJzdWJfaXRfcGlwZWxpbmVyQ3gAAGq2XwAAarZwAACGWFEAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmFkYXB0aXZlX3Rocm90dGxlci5BZGFwdGl2ZVRocm90dGxlci5NSU5fUkVRVUVTVFNyRHgAAGqmZAAAWAkAAABhdHRyaWJ1dGWGWDkAAABhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbS5HQ1NGaWxlU3lzdGVtLkNIVU5LX1NJWkVyRXgAAGomYAAAWAkAAABhdHRyaWJ1dGWGWEEAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmNhY2hlX21hbmFnZXIuQ2FjaGVNYW5hZ2VyLmV4aXN0c3JGeAAAagNZAABYBgAAAG1ldGhvZIZYTgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfYW5hbHl6ZXIuUGlwZWxpbmVBbmFseXplci5jYWNoZXNfdXNlZHJHeAAAavtdAABYBgAAAG1ldGhvZIZYTwAAAGFwYWNoZV9iZWFtLmlvLmZsaW5rLmZsaW5rX3N0cmVhbWluZ19pbXB1bHNlX3NvdXJjZS5GbGlua1N0cmVhbWluZ0ltcHVsc2VTb3VyY2VySHgAAGqdWQAAWAUAAABjbGFzc4ZYRAAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5uYXRpdmVfdHlwZV9jb21wYXRpYmlsaXR5LmNvbnZlcnRfdG9fYmVhbV90eXBlckl4AABqD2UAAFgIAAAAZnVuY3Rpb25ySngAAIZYMAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMucGlwZWxpbmVfY29udGV4dC5FbnZpcm9ubWVudHJLeAAAarBnAABYBQAAAGNsYXNzhlg6AAAAYXBhY2hlX2JlYW0udG9vbHMuY29kZXJzX21pY3JvYmVuY2htYXJrLnd2X3dpdGhfb25lX3dpbmRvd3JMeAAAaoZiAABYCAAAAGZ1bmN0aW9uhlhAAAAAYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc291cmNlLkZpbGVCYXNlZFNvdXJjZS5nZXRfcmFuZ2VfdHJhY2tlcnJNeAAAamRrAABYBgAAAG1ldGhvZIZYMQAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pby5Eb3dubG9hZGVyU3RyZWFtLnRlbGxyTngAAGraZwAAWAYAAABtZXRob2SGWEsAAABhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyLlJ1bnRpbWVWYWx1ZVByb3ZpZGVyLnNldF9ydW50aW1lX29wdGlvbnNyT3gAAGqeWgAAWAsAAABjbGFzc21ldGhvZIZYOgAAAGFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIuU3RhdGljVmFsdWVQcm92aWRlci5nZXRyUHgAAGqeWgAAWAYAAABtZXRob2SGWEsAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UuUmVhZGVyUHJvZ3Jlc3MucmVtYWluaW5nX3RpbWVyUXgAAGrGaQAAWAkAAABhdHRyaWJ1dGWGWCoAAABhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpY2Jhc2UuQ291bnRlci5pbmNyUngAAGqbZwAAWAYAAABtZXRob2SGWFQAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UuTmF0aXZlU2lua1dyaXRlci50YWtlc193aW5kb3dlZF92YWx1ZXNyU3gAAGrGaQAAWAkAAABhdHRyaWJ1dGWGWDMAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlByb3RvQ29kZXIuZnJvbV90eXBlX2hpbnRyVHgAAGrvZwAAWAwAAABzdGF0aWNtZXRob2SGWFAAAABhcGFjaGVfYmVhbS5pby5yZXN0cmljdGlvbl90cmFja2Vycy5PZmZzZXRSZXN0cmljdGlvblRyYWNrZXIuY3VycmVudF9yZXN0cmljdGlvbnJVeAAAatRoAABYBgAAAG1ldGhvZIZYHQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuam9iLnV0aWxzclZ4AABqlmEAAGqKcAAAhlg1AAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5oZWxwZXIua2V5X2NvbXBhcmF0b3JyV3gAAGqFXQAAWAgAAABmdW5jdGlvboZYJgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Hcm91cEJ5S2V5clh4AABqjF8AAFgFAAAAY2xhc3NyWXgAAIZYKQAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmltcG9ydF9mcm9tclp4AABqfVgAAFgIAAAAZnVuY3Rpb25yW3gAAIZYSQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnRyYW5zZm9ybV9ldmFsdWF0b3IuVHJhbnNmb3JtRXZhbHVhdG9yUmVnaXN0cnlyXHgAAGoaagAAWAUAAABjbGFzc4ZYKgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmNsb2NrLlRlc3RDbG9ja3JdeAAAag9mAABYBQAAAGNsYXNzhlheAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IuRVJSX0lOVkFMSURfR0NTX0JVQ0tFVHJeeAAAau5gAABYCQAAAGF0dHJpYnV0ZYZYSgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGVfbWFuYWdlci5GaWxlQmFzZWRDYWNoZU1hbmFnZXIuZXhpc3Rzcl94AABqA1kAAFgGAAAAbWV0aG9khlhLAAAAYXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmUuU3ludGhldGljU291cmNlLmRlZmF1bHRfb3V0cHV0X2NvZGVycmB4AABqy18AAFgGAAAAbWV0aG9khlgvAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuY2xvY2suUmVhbENsb2NrLnRpbWVyYXgAAGoPZgAAWAYAAABtZXRob2SGWFsAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkuZGlzcGxheV9tYW5hZ2VyLkRpc3BsYXlNYW5hZ2VyLnN0b3BfcGVyaW9kaWNfdXBkYXRlcmJ4AABqi1sAAFgGAAAAbWV0aG9khlgfAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVjaGVja3JjeAAAamdkAABqb3AAAIZYLQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLlRvcC5TbWFsbGVzdHJkeAAAal5jAABYDAAAAHN0YXRpY21ldGhvZIZYMgAAAGFwYWNoZV9iZWFtLnRvb2xzLmNvZGVyc19taWNyb2JlbmNobWFyay5sYXJnZV9kaWN0cmV4AABqhmIAAFgIAAAAZnVuY3Rpb26GWDAAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuV2luZG93aW5nLmlzX2RlZmF1bHRyZngAAGqMXwAAWAYAAABtZXRob2RyZ3gAAIZYTwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyLmFwcGx5X0NvbWJpbmVWYWx1ZXNyaHgAAGpXYQAAWAYAAABtZXRob2SGWDUAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJDb3VudC5zaG91bGRfZmlyZXJpeAAAatFbAABYBgAAAG1ldGhvZHJqeAAAhlgsAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXJya3gAAGrlZAAAahJyAACGWCkAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuUGFyRG8ubWFrZV9mbnJseAAAaoxfAABYBgAAAG1ldGhvZHJteAAAhlg+AAAAYXBhY2hlX2JlYW0uY29kZXJzLm9ic2VydmFibGUuT2JzZXJ2YWJsZU1peGluLm5vdGlmeV9vYnNlcnZlcnNybngAAGp8ZAAAWAYAAABtZXRob2SGWEIAAABhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PZmZzZXRSYW5nZVRyYWNrZXIubGFzdF9yZWNvcmRfc3RhcnRyb3gAAGrUXAAAWAkAAABhdHRyaWJ1dGWGWDsAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuV2luZG93SW50by5XaW5kb3dJbnRvRm4ucHJvY2Vzc3JweAAAaoxfAABYBgAAAG1ldGhvZHJxeAAAhlgpAAAAYXBhY2hlX2JlYW0uaW8uaW9iYXNlLkJvdW5kZWRTb3VyY2Uuc3BsaXRycngAAGqRZAAAWAYAAABtZXRob2SGWDAAAABhcGFjaGVfYmVhbS5tZXRyaWNzLmNlbGxzLkRpc3RyaWJ1dGlvblJlc3VsdC5tYXhyc3gAAGpwXQAAWAkAAABhdHRyaWJ1dGWGWCwAAABhcGFjaGVfYmVhbS5pby52Y2Zpby5NYWxmb3JtZWRWY2ZSZWNvcmQubGluZXJ0eAAAakZdAABYCQAAAGF0dHJpYnV0ZYZYMQAAAGFwYWNoZV9iZWFtLmludGVybmFsLmdjcC5qc29uX3ZhbHVlLnRvX2pzb25fdmFsdWVydXgAAGp9agAAWAgAAABmdW5jdGlvboZYOAAAAGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljLk1ldHJpY3NGaWx0ZXIud2l0aF9uYW1lc3BhY2VzcnZ4AABq/mgAAFgGAAAAbWV0aG9khlgqAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUuU3RhdGVTcGVjcnd4AABqiGAAAFgFAAAAY2xhc3NyeHgAAIZYLgAAAGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljLk1ldHJpY3NGaWx0ZXIuc3RlcHNyeXgAAGr+aAAAWAkAAABhdHRyaWJ1dGWGWDEAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5XaW5kb3dGbi5pc19tZXJnaW5ncnp4AABqUmQAAFgGAAAAbWV0aG9kcnt4AACGWDsAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZS5Db21iaW5pbmdWYWx1ZVJ1bnRpbWVTdGF0ZXJ8eAAAaohgAABYBQAAAGNsYXNzcn14AACGWBMAAABhcGFjaGVfYmVhbS5tZXRyaWNzcn54AABqa1QAAGqscAAAhlgwAAAAYXBhY2hlX2JlYW0ubWV0cmljcy5jZWxscy5EaXN0cmlidXRpb25SZXN1bHQuc3Vtcn94AABqcF0AAFgJAAAAYXR0cmlidXRlhlhAAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuU2Vzc2lvbnMuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcnKAeAAAalJkAABYDAAAAHN0YXRpY21ldGhvZHKBeAAAhlgsAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuV2luZG93Rm4ubWVyZ2VygngAAGpSZAAAWAYAAABtZXRob2Ryg3gAAIZYOAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Hcm91cEJ5S2V5LmluZmVyX291dHB1dF90eXBlcoR4AABqjF8AAFgGAAAAbWV0aG9kcoV4AACGWCUAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5zbGljZV8wcoZ4AABqfVgAAFgIAAAAZnVuY3Rpb25yh3gAAIZYKAAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmJpbmFyeV9hbmRyiHgAAGp9WAAAWAgAAABmdW5jdGlvbnKJeAAAhlg+AAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVjaGVjay5PdXRwdXRDaGVja1dyYXBwZXJEb0ZuLndyYXBwZXJyingAAGpnZAAAWAYAAABtZXRob2Ryi3gAAIZYKwAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQ29kZXIuaXNfa3ZfY29kZXJyjHgAAGrvZwAAWAYAAABtZXRob2SGWDoAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXkuSGFzRGlzcGxheURhdGEuZGlzcGxheV9kYXRhco14AABqNlkAAFgGAAAAbWV0aG9kco54AACGWDcAAABhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzaW5rLkZpbGVCYXNlZFNpbmsud3JpdGVfcmVjb3Jkco94AABqd18AAFgGAAAAbWV0aG9khlgyAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuVG9wLkxhcmdlc3RQZXJLZXlykHgAAGpeYwAAWAwAAABzdGF0aWNtZXRob2SGWCwAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmpvYi51dGlscy5kaWN0X3RvX3N0cnVjdHKReAAAapZhAABYCAAAAGZ1bmN0aW9uhlg1AAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbWlvLkRvd25sb2FkZXJTdHJlYW0ucmVhZGludG9ykngAAGraZwAAWAYAAABtZXRob2SGWDYAAABhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5VbnNwbGl0dGFibGVSYW5nZVRyYWNrZXJyk3gAAGrUXAAAWAUAAABjbGFzc4ZYQgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMucGlwZWxpbmVfY29udGV4dC5QaXBlbGluZUNvbnRleHQudG9fcnVubmVyX2FwaXKUeAAAarBnAABYBgAAAG1ldGhvZIZYNAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMucGlwZWxpbmVfY29udGV4dC5QaXBlbGluZUNvbnRleHRylXgAAGqwZwAAWAUAAABjbGFzc4ZYNgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5UcmlnZ2VyRm4udG9fcnVubmVyX2FwaXKWeAAAatFbAABYBgAAAG1ldGhvZHKXeAAAhlgkAAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5UdXBsZUNvZGVycph4AABq72cAAFgFAAAAY2xhc3OGWDQAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuVHJpZ2dlckZuLnNob3VsZF9maXJlcpl4AABq0VsAAFgGAAAAbWV0aG9kcpp4AACGWCcAAABhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2Vym3gAAGqxaQAAam9wAACGWDEAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LnB0cmFuc2Zvcm1fb3ZlcnJpZGVzcpx4AABq8GkAAGqfcAAAhlgcAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvd3KdeAAAaoBUAABqn3AAAIZYKwAAAGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5Xcml0ZVRvQmlnUXVlcnlynngAAGqzWgAAWAUAAABjbGFzc4ZYJAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY3JlYXRlX3NvdXJjZXKfeAAAaqdqAABqvXAAAIZYTgAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYy5CZWFtRm5Mb2dnaW5nU2VydmljZXIuTG9nZ2luZ3KgeAAAaiVrAABYBgAAAG1ldGhvZIZYNQAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zLmdldF9jaHVua19zaXplcqF4AABqx1gAAFgMAAAAc3RhdGljbWV0aG9khlgnAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuVG9wLk9mcqJ4AABqXmMAAFgFAAAAY2xhc3OGWDYAAABhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWNoZWNrLk91dHB1dENoZWNrV3JhcHBlckRvRm5yo3gAAGpnZAAAWAUAAABjbGFzc3KkeAAAhlhJAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X3VzZXJzdGF0ZS5EaXJlY3RVc2VyU3RhdGVDb250ZXh0LmNvbW1pdHKleAAAattpAABYBgAAAG1ldGhvZIZYMAAAAGFwYWNoZV9iZWFtLmlvLnRmcmVjb3JkaW8uV3JpdGVUb1RGUmVjb3JkLmV4cGFuZHKmeAAAak5lAABYBgAAAG1ldGhvZIZYJgAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uRmlsZU1ldGFkYXRhcqd4AABqGVwAAFgFAAAAY2xhc3OGWFIAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGMuYWRkX0JlYW1GblN0YXRlU2VydmljZXJfdG9fc2VydmVycqh4AABqJWsAAFgIAAAAZnVuY3Rpb26GWDwAAABhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuUGlwZWxpbmVPcHRpb25zLnZpZXdfYXNyqXgAAGqJWgAAWAYAAABtZXRob2SGWCwAAABhcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb24udG9fcnVubmVyX2FwaXKqeAAAak5mAABYBgAAAG1ldGhvZIZYKwAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuVHVwbGVDb2Rlci5jb2RlcnNyq3gAAGrvZwAAWAYAAABtZXRob2SGWD0AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybS53aXRoX2lucHV0X3R5cGVzcqx4AABqTV8AAFgGAAAAbWV0aG9kcq14AACGWF0AAABhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci52YWxpZGF0ZV90ZXN0X21hdGNoZXJyrngAAGruYAAAWAYAAABtZXRob2SGWDIAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5pbnBsYWNlX2Zsb29yX2RpdmlkZXKveAAAan1YAABYCAAAAGZ1bmN0aW9ucrB4AACGWDQAAABhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl9jb21tb24uRWxlbWVudEFuZFJlc3RyaWN0aW9ucrF4AABq/lwAAFgFAAAAY2xhc3OGWCkAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfbWV0cmljc3KyeAAAagZaAABqEnIAAIZYUgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dC5FdmFsdWF0aW9uQ29udGV4dC5leHRyYWN0X2FsbF90aW1lcnNys3gAAGr6ZAAAWAYAAABtZXRob2SGWEgAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGMuQmVhbUZuRGF0YVNlcnZpY2VyLkRhdGFytHgAAGolawAAWAYAAABtZXRob2SGWC0AAABhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVN0YXRlLkRPTkVytXgAAGo3WwAAWAkAAABhdHRyaWJ1dGWGWCIAAABhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVycrZ4AABqnloAAGpkcQAAhlhEAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5hZGFwdGl2ZV90aHJvdHRsZXIuQWRhcHRpdmVUaHJvdHRsZXJyt3gAAGqmZAAAWAUAAABjbGFzc4ZYJQAAAGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9zdHJlYW0uRXZlbnRyuHgAAGouXAAAWAUAAABjbGFzc4ZYJgAAAGFwYWNoZV9iZWFtLnRvb2xzLnV0aWxzLnJ1bl9iZW5jaG1hcmtzcrl4AABqcWIAAFgIAAAAZnVuY3Rpb26GWD8AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwuUmVzaHVmZmxlLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXJyungAAGo6awAAWAwAAABzdGF0aWNtZXRob2Ryu3gAAIZYNwAAAGFwYWNoZV9iZWFtLmlvLmxvY2FsZmlsZXN5c3RlbS5Mb2NhbEZpbGVTeXN0ZW0uY2hlY2tzdW1yvHgAAGrRagAAWAYAAABtZXRob2SGWDwAAABhcGFjaGVfYmVhbS5tZXRyaWNzLm1vbml0b3JpbmdfaW5mb3MuaXNfdXNlcl9tb25pdG9yaW5nX2luZm9yvXgAAGp4ZgAAWAgAAABmdW5jdGlvboZYMAAAAGFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNpbmsuRmlsZUJhc2VkU2luay5jbG9zZXK+eAAAandfAABYBgAAAG1ldGhvZIZYQQAAAGFwYWNoZV9iZWFtLnBpcGVsaW5lLlBUcmFuc2Zvcm1PdmVycmlkZS5nZXRfcmVwbGFjZW1lbnRfdHJhbnNmb3Jtcr94AABq5l0AAFgGAAAAbWV0aG9khlg5AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLlBhckRvLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVycsB4AABqjF8AAFgGAAAAbWV0aG9kcsF4AACGWCkAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5idW5kbGVfZmFjdG9yeXLCeAAAaiFZAABqn3AAAIZYRQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9tZXRyaWNzLkRpcmVjdE1ldHJpYy5jb21taXRfbG9naWNhbHLDeAAAagZaAABYBgAAAG1ldGhvZIZYRAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LkZpeGVkV2luZG93cy5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVycsR4AABqUmQAAFgMAAAAc3RhdGljbWV0aG9kcsV4AACGWDIAAABhcGFjaGVfYmVhbS50b29scy5jb2RlcnNfbWljcm9iZW5jaG1hcmsuc21hbGxfZGljdHLGeAAAaoZiAABYCAAAAGZ1bmN0aW9uhlgtAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlLkNvbnN0csd4AABqsWkAAFgFAAAAY2xhc3NyyHgAAIZYMwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5XaW5kb3dpbmcudG9fcnVubmVyX2FwaXLJeAAAaoxfAABYBgAAAG1ldGhvZHLKeAAAhlgmAAAAYXBhY2hlX2JlYW0udXRpbHMucHJvdG9fdXRpbHMucGFja19Bbnlyy3gAAGoUYgAAWAgAAABmdW5jdGlvbnLMeAAAhlgzAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5oZWxwZXIuaXNfa2V5X3ZhbGlkcs14AABqhV0AAFgIAAAAZnVuY3Rpb26GWFUAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9qb2JfYXBpX3BiMl9ncnBjLkpvYlNlcnZpY2VTZXJ2aWNlci5HZXRNZXNzYWdlU3RyZWFtcs54AABqE2kAAFgGAAAAbWV0aG9khlhGAAAAYXBhY2hlX2JlYW0uaW8ucmVzdHJpY3Rpb25fdHJhY2tlcnMuT2Zmc2V0UmVzdHJpY3Rpb25UcmFja2VyLnRyeV9jbGFpbXLPeAAAatRoAABYBgAAAG1ldGhvZIZYPgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtLndpdGhfb3V0cHV0X3R5cGVzctB4AABqTV8AAFgGAAAAbWV0aG9kctF4AACGWBQAAABhcGFjaGVfYmVhbS5waXBlbGluZXLSeAAAauZdAABqZHEAAIZYPAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lUGVyS2V5LmRlZmF1bHRfdHlwZV9oaW50c3LTeAAAaoxfAABYBgAAAG1ldGhvZHLUeAAAhlhJAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVQZXJLZXkucnVubmVyX2FwaV9yZXF1aXJlc19rZXllZF9pbnB1dHLVeAAAaoxfAABYBgAAAG1ldGhvZHLWeAAAhlg1AAAAYXBhY2hlX2JlYW0uaW8udXRpbHMuQ291bnRpbmdTb3VyY2UuZ2V0X3JhbmdlX3RyYWNrZXJy13gAAGpDXAAAWAYAAABtZXRob2SGWEQAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkucGlwZWxpbmVfZ3JhcGguUGlwZWxpbmVHcmFwaHLYeAAAav1iAABYBQAAAGNsYXNzhlhKAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5kYXRhc3RvcmVpby5SZWFkRnJvbURhdGFzdG9yZS5kaXNwbGF5X2RhdGFy2XgAAGo5ZQAAWAYAAABtZXRob2SGWB4AAABhcGFjaGVfYmVhbS5pby5sb2NhbGZpbGVzeXN0ZW1y2ngAAGrRagAAaqxwAACGWCUAAABhcGFjaGVfYmVhbS5pby50ZXh0aW8uUmVhZEFsbEZyb21UZXh0ctt4AABqoV8AAFgFAAAAY2xhc3OGWDMAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJFYWNoLm9uX2VsZW1lbnRy3HgAAGrRWwAAWAYAAABtZXRob2Ry3XgAAIZYOgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BY2N1bXVsYXRpb25Nb2RlLkRJU0NBUkRJTkdy3ngAAGrRWwAAWAkAAABhdHRyaWJ1dGVy33gAAIZYIAAAAGFwYWNoZV9iZWFtLmlvLnNvdXJjZV90ZXN0X3V0aWxzcuB4AABqBFwAAGqscAAAhlhHAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uc3RyZWFtaW5nX2NyZWF0ZS5TdHJlYW1pbmdDcmVhdGVy4XgAAGrAYQAAWAUAAABjbGFzc4ZYLQAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uRmlsZVN5c3RlbS5jaGVja3N1bXLieAAAahlcAABYBgAAAG1ldGhvZIZYOgAAAGFwYWNoZV9iZWFtLnRlc3RpbmcucGlwZWxpbmVfdmVyaWZpZXJzLkZpbGVDaGVja3N1bU1hdGNoZXJy43gAAGoNWwAAWAUAAABjbGFzc4ZYLQAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuU3RyVXRmOENvZGVyLmVuY29kZXLkeAAAau9nAABYBgAAAG1ldGhvZIZYJgAAAGFwYWNoZV9iZWFtLnB2YWx1ZS5Bc0l0ZXIuZWxlbWVudF90eXBlcuV4AABqTmYAAFgJAAAAYXR0cmlidXRlhlhCAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjLkJlYW1GbkxvZ2dpbmdTdHVicuZ4AABqJWsAAFgFAAAAY2xhc3OGWCkAAABhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVJlc3VsdHLneAAAajdbAABYBQAAAGNsYXNzhlgvAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLnB0cmFuc2Zvcm1fZm5y6HgAAGpNXwAAWAgAAABmdW5jdGlvbnLpeAAAhlgsAAAAYXBhY2hlX2JlYW0ucnVubmVycy5qb2IudXRpbHMuc3RydWN0X3RvX2RpY3Ry6ngAAGqWYQAAWAgAAABmdW5jdGlvboZYWQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyLlByb2Nlc3NLZXllZEVsZW1lbnRzVmlhS2V5ZWRXb3JrSXRlbXMuZXhwYW5kcut4AABq5WQAAFgGAAAAbWV0aG9khlhFAAAAYXBhY2hlX2JlYW0udGVzdGluZy5sb2FkX3Rlc3RzLmxvYWRfdGVzdF9tZXRyaWNzX3V0aWxzLk1ldHJpY3NNb25pdG9ycux4AABqFGcAAFgFAAAAY2xhc3OGWB4AAABhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3RfdXRpbHNy7XgAAGrqYQAAajdyAACGWBcAAABhcGFjaGVfYmVhbS50b29scy51dGlsc3LueAAAanFiAABqN3IAAIZYKQAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmxpc3RfYXBwZW5kcu94AABqfVgAAFgIAAAAZnVuY3Rpb25y8HgAAIZYOgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lUnVubmVyLmFwcGx5X1BUcmFuc2Zvcm1y8XgAAGo3WwAAWAYAAABtZXRob2SGWCcAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5iaW5hcnlfb3Jy8ngAAGp9WAAAWAgAAABmdW5jdGlvbnLzeAAAhlhWAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5kYXRhc3RvcmVpby5SZWFkRnJvbURhdGFzdG9yZS5nZXRfZXN0aW1hdGVkX251bV9zcGxpdHNy9HgAAGo5ZQAAWAwAAABzdGF0aWNtZXRob2SGWCoAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXkuRGlzcGxheURhdGFy9XgAAGo2WQAAWAUAAABjbGFzc3L2eAAAhlgwAAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2Rlci5pc19kZXRlcm1pbmlzdGljcvd4AABq72cAAFgGAAAAbWV0aG9khlgwAAAAYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVTdGF0ZS5VUERBVEVEcvh4AABqN1sAAFgJAAAAYXR0cmlidXRlhlgoAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X3J1bm5lcnL5eAAAatBkAABqEnIAAIZYPwAAAGFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNpbmsuRmlsZUJhc2VkU2luay53cml0ZV9lbmNvZGVkX3JlY29yZHL6eAAAandfAABYBgAAAG1ldGhvZIZYJQAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLnBvcF90b3By+3gAAGp9WAAAWAgAAABmdW5jdGlvbnL8eAAAhlhAAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fam9iX2FwaV9wYjJfZ3JwYy5Kb2JTZXJ2aWNlU3R1YnL9eAAAahNpAABYBQAAAGNsYXNzhlg4AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuVGltZXN0YW1wQ29tYmluZXIuZ2V0X2ltcGxy/ngAAGpSZAAAWAwAAABzdGF0aWNtZXRob2Ry/3gAAIZYTwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfYW5hbHl6ZXIuUGlwZWxpbmVJbmZvLmFsbF9wY29sbGVjdGlvbnNyAHkAAGr7XQAAWAYAAABtZXRob2SGWEcAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lci5ydW5fSW1wdWxzZXIBeQAAaldhAABYBgAAAG1ldGhvZIZYQgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LldpbmRvd0ZuLmdldF90cmFuc2Zvcm1lZF9vdXRwdXRfdGltZXICeQAAalJkAABYBgAAAG1ldGhvZHIDeQAAhlg1AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuTWVhbi5HbG9iYWxseS5leHBhbmRyBHkAAGpeYwAAWAYAAABtZXRob2SGWEIAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybS50b19ydW5uZXJfYXBpX3BpY2tsZWRyBXkAAGpNXwAAWAYAAABtZXRob2RyBnkAAIZYIQAAAGFwYWNoZV9iZWFtLnRlc3RpbmcudXRpbC5lcXVhbF90b3IHeQAAahJjAABYCAAAAGZ1bmN0aW9uhlhHAAAAYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyLnN0b3BfcG9zaXRpb25yCHkAAGrUXAAAWAYAAABtZXRob2SGWCsAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5Ub3AuUGVyS2V5cgl5AABqXmMAAFgFAAAAY2xhc3OGWDAAAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtaW8uRG93bmxvYWRlci5nZXRfcmFuZ2VyCnkAAGraZwAAWAYAAABtZXRob2SGWDsAAABhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uT3V0cHV0U3RyZWFtLndyaXRlX3Zhcl9pbnQ2NHILeQAAagRfAABYBgAAAG1ldGhvZIZYJwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLlRvRGljdHIMeQAAal5jAABYBQAAAGNsYXNzhlgkAAAAYXBhY2hlX2JlYW0ubWV0cmljcy5tb25pdG9yaW5nX2luZm9zcg15AABqeGYAAGqscAAAhlgsAAAAYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbS5FbGVtZW50RXZlbnRyDnkAAGouXAAAWAUAAABjbGFzc4ZYNAAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3Npb25UeXBlcy5taW1lX3R5cGVyD3kAAGoZXAAAWAsAAABjbGFzc21ldGhvZIZYNQAAAGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5Cb3VuZGVkU291cmNlLmdldF9yYW5nZV90cmFja2VychB5AABqkWQAAFgGAAAAbWV0aG9khlhQAAAAYXBhY2hlX2JlYW0udGVzdGluZy5sb2FkX3Rlc3RzLmxvYWRfdGVzdF9tZXRyaWNzX3V0aWxzLk1lYXN1cmVUaW1lLmZpbmlzaF9idW5kbGVyEXkAAGoUZwAAWAYAAABtZXRob2SGWEEAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC50cmFuc2Zvcm1fZXZhbHVhdG9yLlJvb3RCdW5kbGVQcm92aWRlcnISeQAAahpqAABYBQAAAGNsYXNzhlhLAAAAYXBhY2hlX2JlYW0udG9vbHMuZGlzdHJpYnV0aW9uX2NvdW50ZXJfbWljcm9iZW5jaG1hcmsuZ2VuZXJhdGVfaW5wdXRfdmFsdWVzchN5AABqYl8AAFgIAAAAZnVuY3Rpb26GWDMAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuR3JvdXBCeUtleS5SZWlmeVdpbmRvd3NyFHkAAGqMXwAAWAUAAABjbGFzc3IVeQAAhlgyAAAAYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVTdGF0ZS5DQU5DRUxMRURyFnkAAGo3WwAAWAkAAABhdHRyaWJ1dGWGWDAAAABhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVN0YXRlLkRSQUlORURyF3kAAGo3WwAAWAkAAABhdHRyaWJ1dGWGWEwAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmNhY2hlX21hbmFnZXIuU2FmZUZhc3RQcmltaXRpdmVzQ29kZXIuZW5jb2Rlchh5AABqA1kAAFgGAAAAbWV0aG9khlgvAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuQm91bmRlZFdpbmRvdy5lbmRyGXkAAGpSZAAAWAkAAABhdHRyaWJ1dGVyGnkAAIZYNQAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuRmxvYXRDb2Rlci5pc19kZXRlcm1pbmlzdGljcht5AABq72cAAFgGAAAAbWV0aG9khlglAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLldpbmRvd2luZ3IceQAAaoxfAABYBQAAAGNsYXNzch15AACGWCkAAABhcGFjaGVfYmVhbS51dGlscy5wcm90b191dGlscy5wYXJzZV9CeXRlc3IeeQAAahRiAABYCAAAAGZ1bmN0aW9uch95AACGWFoAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2FuYWx5emVyLlBpcGVsaW5lQW5hbHl6ZXIudGxfcmVmZXJlbmNlZF9wY29sbF9pZHNyIHkAAGr7XQAAWAYAAABtZXRob2SGWCEAAABhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3RfcGlwZWxpbmVyIXkAAGrFZwAAajdyAACGWDQAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRpbWV1dGlsLlRpbWVEb21haW4uV0FURVJNQVJLciJ5AABqJGUAAFgJAAAAYXR0cmlidXRlciN5AACGWDMAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5Ub3AuU21hbGxlc3RQZXJLZXlyJHkAAGpeYwAAWAwAAABzdGF0aWNtZXRob2SGWCgAAABhcGFjaGVfYmVhbS5pby50ZXh0aW8uV3JpdGVUb1RleHQuZXhwYW5kciV5AABqoV8AAFgGAAAAbWV0aG9khlgZAAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVyc3ImeQAAau9nAABqtHAAAIZYNwAAAGFwYWNoZV9iZWFtLmlvLmdjcC5nY3NmaWxlc3lzdGVtLkdDU0ZpbGVTeXN0ZW0uY2hlY2tzdW1yJ3kAAGomYAAAWAYAAABtZXRob2SGWDQAAABhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2UuZWxlbWVudF90eXBlcih5AABqsWkAAFgIAAAAZnVuY3Rpb25yKXkAAIZYMgAAAGFwYWNoZV9iZWFtLmludGVybmFsLnV0aWwucmVtb3ZlX29iamVjdHNfZnJvbV9hcmdzcip5AABqm2IAAFgIAAAAZnVuY3Rpb26GWDMAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuVHJpZ2dlckZuLm9uX2VsZW1lbnRyK3kAAGrRWwAAWAYAAABtZXRob2RyLHkAAIZYSgAAAGFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNvdXJjZS5GaWxlQmFzZWRTb3VyY2UuTUlOX05VTUJFUl9PRl9GSUxFU19UT19TVEFUci15AABqZGsAAFgJAAAAYXR0cmlidXRlhlg8AAAAYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5CeXRlc0NvZGVyLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyci55AABq72cAAFgGAAAAbWV0aG9khlgjAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXhlY3V0b3JyL3kAAGrpaAAAahJyAACGWDIAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5HbG9iYWxXaW5kb3dzLmFzc2lnbnIweQAAalJkAABYBgAAAG1ldGhvZHIxeQAAhlgyAAAAYXBhY2hlX2JlYW0udG9vbHMuY29kZXJzX21pY3JvYmVuY2htYXJrLnNtYWxsX2xpc3RyMnkAAGqGYgAAWAgAAABmdW5jdGlvboZYXAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyLlNERlByb2Nlc3NFbGVtZW50SW52b2tlci5pbnZva2VfcHJvY2Vzc19lbGVtZW50cjN5AABq5WQAAFgGAAAAbWV0aG9khlhcAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IuRVJSX0lOVkFMSURfR0NTX1BBVEhyNHkAAGruYAAAWAkAAABhdHRyaWJ1dGWGWEEAAABhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uT3V0cHV0U3RyZWFtLndyaXRlX2JpZ2VuZGlhbl9pbnQzMnI1eQAAagRfAABYBgAAAG1ldGhvZIZYKwAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLnByaW50X25ld2xpbmVyNnkAAGp9WAAAWAgAAABmdW5jdGlvbnI3eQAAhlhjAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fYXJ0aWZhY3RfYXBpX3BiMl9ncnBjLkFydGlmYWN0UmV0cmlldmFsU2VydmljZVNlcnZpY2VyLkdldE1hbmlmZXN0cjh5AABqJGYAAFgGAAAAbWV0aG9khlgrAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5GaWxlU3lzdGVtLmV4aXN0c3I5eQAAahlcAABYBgAAAG1ldGhvZIZYKQAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmJ1aWxkX3NsaWNlcjp5AABqfVgAAFgIAAAAZnVuY3Rpb25yO3kAAIZYNQAAAGFwYWNoZV9iZWFtLmlvLmhhZG9vcGZpbGVzeXN0ZW0uSGFkb29wRmlsZVN5c3RlbS5zaXplcjx5AABqQmEAAFgGAAAAbWV0aG9khlgxAAAAYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbS5UZXN0U3RyZWFtLmV4cGFuZHI9eQAAai5cAABYBgAAAG1ldGhvZIZYPgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLlNhbXBsZS5GaXhlZFNpemVQZXJLZXkuZXhwYW5kcj55AABqXmMAAFgGAAAAbWV0aG9khlgiAAAAYXBhY2hlX2JlYW0uaW8uaW9iYXNlLldyaXRlci5jbG9zZXI/eQAAapFkAABYBgAAAG1ldGhvZIZYLAAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zLnNwbGl0ckB5AABqx1gAAFgMAAAAc3RhdGljbWV0aG9khlhpAAAAYXBhY2hlX2JlYW0uaW8uZmxpbmsuZmxpbmtfc3RyZWFtaW5nX2ltcHVsc2Vfc291cmNlLkZsaW5rU3RyZWFtaW5nSW1wdWxzZVNvdXJjZS5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyckF5AABqnVkAAFgMAAAAc3RhdGljbWV0aG9khlgvAAAAYXBhY2hlX2JlYW0uaW8uYXZyb2lvLlJlYWRGcm9tQXZyby5kaXNwbGF5X2RhdGFyQnkAAGpfWAAAWAYAAABtZXRob2SGWEoAAABhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWNoZWNrLlR5cGVDaGVja1Zpc2l0b3IubGVhdmVfY29tcG9zaXRlX3RyYW5zZm9ybXJDeQAAamdkAABYBgAAAG1ldGhvZHJEeQAAhlgdAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXNyRXkAAGp9WAAAar1wAACGWDgAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUdsb2JhbGx5LmRpc3BsYXlfZGF0YXJGeQAAaoxfAABYBgAAAG1ldGhvZHJHeQAAhlhHAAAAYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsubmV4bWFya19sYXVuY2hlci5OZXhtYXJrTGF1bmNoZXJySHkAAGr/YQAAWAUAAABjbGFzc4ZYPAAAAGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5CaWdRdWVyeURpc3Bvc2l0aW9uLldSSVRFX0FQUEVORHJJeQAAarNaAABYCQAAAGF0dHJpYnV0ZYZYJwAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmV4ZWNfc3RtdHJKeQAAan1YAABYCAAAAGZ1bmN0aW9uckt5AACGWCIAAABhcGFjaGVfYmVhbS5pby5hdnJvaW8uUmVhZEZyb21BdnJvckx5AABqX1gAAFgFAAAAY2xhc3OGWDAAAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtaW8uVXBsb2FkZXJTdHJlYW0uY2xvc2VyTXkAAGraZwAAWAYAAABtZXRob2SGWB4AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXlyTnkAAGo2WQAAar1wAACGWE8AAABhcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHMubG9hZF90ZXN0X21ldHJpY3NfdXRpbHMuTWVhc3VyZVRpbWUuc3RhcnRfYnVuZGxlck95AABqFGcAAFgGAAAAbWV0aG9khlg1AAAAYXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmUuU2h1ZmZsZUJhcnJpZXJyUHkAAGrLXwAAWAUAAABjbGFzc4ZYNwAAAGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SYW5nZVRyYWNrZXIuc2V0X2N1cnJlbnRfcG9zaXRpb25yUXkAAGqRZAAAWAYAAABtZXRob2SGWEIAAABhcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHMubG9hZF90ZXN0X21ldHJpY3NfdXRpbHMuY291bnRfYnl0ZXNyUnkAAGoUZwAAWAgAAABmdW5jdGlvboZYJwAAAGFwYWNoZV9iZWFtLnV0aWxzLnRpbWVzdGFtcC5EdXJhdGlvbi5vZnJTeQAAaoFhAABYDAAAAHN0YXRpY21ldGhvZHJUeQAAhlg7AAAAYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVSZXN1bHQud2FpdF91bnRpbF9maW5pc2hyVXkAAGo3WwAAWAYAAABtZXRob2SGWCoAAABhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpY2Jhc2UuQ291bnRlci5kZWNyVnkAAGqbZwAAWAYAAABtZXRob2SGWFAAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC53YXRlcm1hcmtfbWFuYWdlci5XYXRlcm1hcmtNYW5hZ2VyLmV4dHJhY3RfYWxsX3RpbWVyc3JXeQAAartZAABYBgAAAG1ldGhvZIZYOQAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuRmFzdFByaW1pdGl2ZXNDb2Rlci5pc19rdl9jb2RlcnJYeQAAau9nAABYBgAAAG1ldGhvZIZYLQAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zLmNyZWF0ZXJZeQAAasdYAABYDAAAAHN0YXRpY21ldGhvZIZYOAAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZS5Db25zdC51bndyYXBfYWxsclp5AABqsWkAAFgMAAAAc3RhdGljbWV0aG9kclt5AACGWCsAAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtaW8uUGlwZVN0cmVhbS5zZWVrclx5AABq2mcAAFgGAAAAbWV0aG9khlhQAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IudmFsaWRhdGVyXXkAAGruYAAAWAYAAABtZXRob2SGWDcAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfbWV0cmljcy5EaXJlY3RNZXRyaWNzcl55AABqBloAAFgFAAAAY2xhc3OGWC4AAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzZWRGaWxlLmNsb3Nlcl95AABqGVwAAFgGAAAAbWV0aG9khlg5AAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlLmluZmVyX3JldHVybl90eXBlcmB5AABqsWkAAFgIAAAAZnVuY3Rpb25yYXkAAIZYVAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5waXBlbGluZV9ncmFwaF9yZW5kZXJlci5QeWRvdFJlbmRlcmVyLm9wdGlvbnJieQAAasVjAABYCwAAAGNsYXNzbWV0aG9khlg0AAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVjaGVjay5UeXBlQ2hlY2tXcmFwcGVyRG9GbnJjeQAAamdkAABYBQAAAGNsYXNzcmR5AACGWDkAAABhcGFjaGVfYmVhbS5pby5oYWRvb3BmaWxlc3lzdGVtLkhhZG9vcEZpbGVTeXN0ZW0uY2hlY2tzdW1yZXkAAGpCYQAAWAYAAABtZXRob2SGWFYAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmRhdGFzdG9yZWlvLlJlYWRGcm9tRGF0YXN0b3JlLmdldF9lc3RpbWF0ZWRfc2l6ZV9ieXRlc3JmeQAAajllAABYDAAAAHN0YXRpY21ldGhvZIZYLwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5SZXBlYXRlZGx5LnJlc2V0cmd5AABq0VsAAFgGAAAAbWV0aG9kcmh5AACGWC8AAABhcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNlLkNvbmNhdFJhbmdlVHJhY2tlcnJpeQAAak9rAABYBQAAAGNsYXNzhlgXAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHlyankAAGrUVAAAamRxAACGWB8AAABhcGFjaGVfYmVhbS5lcnJvci5QaXBlbGluZUVycm9ycmt5AABqPWQAAFgJAAAAZXhjZXB0aW9uhlgrAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuYmluYXJ5X2xzaGlmdHJseQAAan1YAABYCAAAAGZ1bmN0aW9ucm15AACGWDUAAABhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXAuVGltZXN0YW1wLnRvX3V0Y19kYXRldGltZXJueQAAaoFhAABYBgAAAG1ldGhvZHJveQAAhlgtAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5Db21wcmVzc2VkRmlsZS5yZWFkcnB5AABqGVwAAFgGAAAAbWV0aG9khlgvAAAAYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLklucHV0U3RyZWFtLnJlYWRycXkAAGoEXwAAWAYAAABtZXRob2SGWCsAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC51dGlsLlRpbWVyRmlyaW5ncnJ5AABq5WUAAFgFAAAAY2xhc3OGWD8AAABhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5tb2RlbHMubmV4bWFya19tb2RlbC5CaWRyc3kAAGqrYQAAWAUAAABjbGFzc4ZYWwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5pbnRlcmFjdGl2ZV9waXBlbGluZV9ncmFwaC5JbnRlcmFjdGl2ZVBpcGVsaW5lR3JhcGhydHkAAGr6ZQAAWAUAAABjbGFzc4ZYQgAAAGFwYWNoZV9iZWFtLmlvLnNvdXJjZV90ZXN0X3V0aWxzLmFzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9iZWhhdmlvcnJ1eQAAagRcAABYCAAAAGZ1bmN0aW9uhlg2AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5LkRpc3BsYXlEYXRhLmNyZWF0ZV9mcm9tcnZ5AABqNlkAAFgLAAAAY2xhc3NtZXRob2Ryd3kAAIZYPwAAAGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5JbnB1dFN0cmVhbS5yZWFkX2JpZ2VuZGlhbl9pbnQzMnJ4eQAAagRfAABYBgAAAG1ldGhvZIZYRAAAAGFwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2UuQ29uY2F0UmFuZ2VUcmFja2VyLnNldF9jdXJyZW50X3Bvc2l0aW9ucnl5AABqT2sAAFgGAAAAbWV0aG9khlgeAAAAYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzcnp5AABqzVQAAGprcAAAhlg0AAAAYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlci5WYWx1ZVByb3ZpZGVyLmdldHJ7eQAAap5aAABYBgAAAG1ldGhvZIZYNAAAAGFwYWNoZV9iZWFtLmlvLmxvY2FsZmlsZXN5c3RlbS5Mb2NhbEZpbGVTeXN0ZW0uc3BsaXRyfHkAAGrRagAAWAYAAABtZXRob2SGWC4AAABhcGFjaGVfYmVhbS5pby5sb2NhbGZpbGVzeXN0ZW0uTG9jYWxGaWxlU3lzdGVtcn15AABq0WoAAFgFAAAAY2xhc3OGWDcAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRG9Gbi5XYXRlcm1hcmtSZXBvcnRlclBhcmFtcn55AABqjF8AAFgJAAAAYXR0cmlidXRlcn95AACGWEMAAABhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXIudHJ5X3NwbGl0coB5AABq1FwAAFgGAAAAbWV0aG9khlg2AAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X21ldHJpY3MuRGlyZWN0TWV0cmljcoF5AABqBloAAFgFAAAAY2xhc3OGWD0AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC53YXRlcm1hcmtfbWFuYWdlci5XYXRlcm1hcmtNYW5hZ2VycoJ5AABqu1kAAFgFAAAAY2xhc3OGWDwAAABhcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmVzdHJpY3Rpb25UcmFja2VyLmN1cnJlbnRfcmVzdHJpY3Rpb25yg3kAAGqRZAAAWAYAAABtZXRob2SGWDAAAABhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVN0YXRlLlBFTkRJTkdyhHkAAGo3WwAAWAkAAABhdHRyaWJ1dGWGWC8AAABhcGFjaGVfYmVhbS5pby5nY3AucHVic3ViLlJlYWRTdHJpbmdzRnJvbVB1YlN1YnKFeQAAahtaAABYCAAAAGZ1bmN0aW9uhlhPAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXZhbHVhdGlvbl9jb250ZXh0LkRpcmVjdFN0ZXBDb250ZXh0LmdldF9rZXllZF9zdGF0ZXKGeQAAavpkAABYBgAAAG1ldGhvZIZYLwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLkNvdW50Lkdsb2JhbGx5cod5AABqXmMAAFgFAAAAY2xhc3OGWBMAAABhcGFjaGVfYmVhbS52ZXJzaW9ucoh5AABqBWoAAGpvcAAAhlhZAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudHJhbnNmb3JtX2V2YWx1YXRvci5EZWZhdWx0Um9vdEJ1bmRsZVByb3ZpZGVyLmdldF9yb290X2J1bmRsZXNyiXkAAGoaagAAWAYAAABtZXRob2SGWDkAAABhcGFjaGVfYmVhbS5tZXRyaWNzLm1vbml0b3JpbmdfaW5mb3MuZXh0cmFjdF9kaXN0cmlidXRpb25yinkAAGp4ZgAAWAgAAABmdW5jdGlvboZYWgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyLmRlc2VyaWFsaXplX3dpbmRvd2luZ19zdHJhdGVneXKLeQAAaldhAABYCwAAAGNsYXNzbWV0aG9khlgYAAAAYXBhY2hlX2JlYW0udGVzdGluZy51dGlscox5AABqEmMAAGo3cgAAhlhhAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uc3RyZWFtaW5nX2NyZWF0ZS5TdHJlYW1pbmdDcmVhdGUuRGVjb2RlQW5kRW1pdERvRm4ucHJvY2Vzc3KNeQAAasBhAABYBgAAAG1ldGhvZIZYLgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Eb0ZuLmZyb21fY2FsbGFibGVyjnkAAGqMXwAAWAwAAABzdGF0aWNtZXRob2Ryj3kAAIZYEQAAAGFwYWNoZV9iZWFtLnV0aWxzcpB5AABqLlQAAGpvcAAAhlg1AAAAYXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtLkxvY2FsRmlsZVN5c3RlbS5yZW5hbWVykXkAAGrRagAAWAYAAABtZXRob2SGWDQAAABhcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZS5TeW50aGV0aWNTdGVwcpJ5AABqy18AAFgFAAAAY2xhc3OGWDMAAABhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2UuRmlsZUJhc2VkU291cmNlLnJlYWRyk3kAAGpkawAAWAYAAABtZXRob2SGWDMAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmhlbHBlci5tYWtlX3JlcXVlc3RylHkAAGqFXQAAWAgAAABmdW5jdGlvboZYMwAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuVHVwbGVDb2Rlci5mcm9tX3R5cGVfaGludHKVeQAAau9nAABYDAAAAHN0YXRpY21ldGhvZIZYZwAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYy5CZWFtRm5FeHRlcm5hbFdvcmtlclBvb2xTZXJ2aWNlci5Ob3RpZnlSdW5uZXJBdmFpbGFibGVylnkAAGolawAAWAYAAABtZXRob2SGWCwAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuUGFydGl0aW9uLmV4cGFuZHKXeQAAaoxfAABYBgAAAG1ldGhvZHKYeQAAhlgvAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5Db21wcmVzc2lvblR5cGVzLkdaSVBymXkAAGoZXAAAWAkAAABhdHRyaWJ1dGWGWBkAAABhcGFjaGVfYmVhbS5pby50ZnJlY29yZGlvcpp5AABqTmUAAGqscAAAhlgoAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMucHJpbnRfaXRlbXKbeQAAan1YAABYCAAAAGZ1bmN0aW9ucpx5AACGWCUAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlBpY2tsZUNvZGVycp15AABq72cAAFgFAAAAY2xhc3OGWDYAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9hcnRpZmFjdF9hcGlfcGIyX2dycGNynnkAAGokZgAAamRxAACGWCkAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZVBlcktleXKfeQAAaoxfAABYBQAAAGNsYXNzcqB5AACGWCcAAABhcGFjaGVfYmVhbS50b29scy51dGlscy5CZW5jaG1hcmtDb25maWdyoXkAAGpxYgAAWAUAAABjbGFzc4ZYNQAAAGFwYWNoZV9iZWFtLmlvLmdjcC5nY3NmaWxlc3lzdGVtLkdDU0ZpbGVTeXN0ZW0uZXhpc3RzcqJ5AABqJmAAAFgGAAAAbWV0aG9khlgqAAAAYXBhY2hlX2JlYW0udXRpbHMucmV0cnkuUGVybWFuZW50RXhjZXB0aW9ucqN5AABqbGEAAFgJAAAAZXhjZXB0aW9ucqR5AACGWDMAAABhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYy5NZXRyaWNzRmlsdGVyLm5hbWVzcGFjZXNypXkAAGr+aAAAWAkAAABhdHRyaWJ1dGWGWDIAAABhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuV29ya2VyT3B0aW9uc3KmeQAAaolaAABYBQAAAGNsYXNzhlg4AAAAYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbS5UZXN0U3RyZWFtLmdldF93aW5kb3dpbmdyp3kAAGouXAAAWAYAAABtZXRob2SGWEEAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX3J1bm5lci5QaXBlbGluZVJlc3VsdHKoeQAAahloAABYBQAAAGNsYXNzhlgvAAAAYXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZS5Db25jYXRTb3VyY2Uuc3BsaXRyqXkAAGpPawAAWAYAAABtZXRob2SGWEUAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UuUmVhZGVyUHJvZ3Jlc3MucG9zaXRpb25yqnkAAGrGaQAAWAkAAABhdHRyaWJ1dGWGWEAAAABhcGFjaGVfYmVhbS5pby5nY3AucHVic3ViLlJlYWRGcm9tUHViU3ViLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVycqt5AABqG1oAAFgGAAAAbWV0aG9khlg1AAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm0ucGlwZWxpbmVyrHkAAGpNXwAAWAkAAABhdHRyaWJ1dGVyrXkAAIZYNwAAAGFwYWNoZV9iZWFtLmlvLmhhZG9vcGZpbGVzeXN0ZW0uSGFkb29wRmlsZVN5c3RlbS5jcmVhdGVyrnkAAGpCYQAAWAYAAABtZXRob2SGWDkAAABhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbS5HQ1NGaWxlU3lzdGVtLkdDU19QUkVGSVhyr3kAAGomYAAAWAkAAABhdHRyaWJ1dGWGWDYAAABhcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZS5tZXJnZV91c2luZ19nYmtysHkAAGrLXwAAWAgAAABmdW5jdGlvboZYMgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV4ZWN1dG9yLkV4ZWN1dG9yLnN0YXJ0crF5AABq6WgAAFgGAAAAbWV0aG9khlhfAAAAYXBhY2hlX2JlYW0uaW8uZmxpbmsuZmxpbmtfc3RyZWFtaW5nX2ltcHVsc2Vfc291cmNlLkZsaW5rU3RyZWFtaW5nSW1wdWxzZVNvdXJjZS5zZXRfaW50ZXJ2YWxfbXNysnkAAGqdWQAAWAYAAABtZXRob2SGWEAAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuR3JvdXBCeUtleS5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVycrN5AABqjF8AAFgMAAAAc3RhdGljbWV0aG9kcrR5AACGWDMAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRG9Gbi5pc19wcm9jZXNzX2JvdW5kZWRytXkAAGqMXwAAWAYAAABtZXRob2RytnkAAIZYTAAAAGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV9pb19yZWFkX3BpcGVsaW5lLlJvd1RvU3RyaW5nV2l0aFNsb3dEb3duLnByb2Nlc3Nyt3kAAGrvYwAAWAYAAABtZXRob2SGWEIAAABhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtLlRlc3RTdHJlYW0uYWR2YW5jZV9wcm9jZXNzaW5nX3RpbWVyuHkAAGouXAAAWAYAAABtZXRob2SGWCsAAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtcy5GaWxlU3lzdGVtcy5jb3B5crl5AABqx1gAAFgMAAAAc3RhdGljbWV0aG9khlgxAAAAYXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmUucGFyc2VfYXJnc3K6eQAAastfAABYCAAAAGZ1bmN0aW9uhlgoAAAAYXBhY2hlX2JlYW0uaW8ucGFycXVldGlvLlJlYWRGcm9tUGFycXVldHK7eQAAaulcAABYBQAAAGNsYXNzhlgtAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlLnVuaW9ucrx5AABqsWkAAFgIAAAAZnVuY3Rpb25yvXkAAIZYNwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheS5EaXNwbGF5RGF0YUl0ZW0uaXNfdmFsaWRyvnkAAGo2WQAAWAYAAABtZXRob2Ryv3kAAIZYNAAAAGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5QaXBlbGluZU9wdGlvbnNywHkAAGqJWgAAWAUAAABjbGFzc4ZYOwAAAGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm5leG1hcmtfdXRpbC5Db21tYW5kcsF5AABqEWAAAFgFAAAAY2xhc3OGWDwAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmZha2VfZGF0YXN0b3JlLmNyZWF0ZV9jb21taXRywnkAAGrlWAAAWAgAAABmdW5jdGlvboZYLgAAAGFwYWNoZV9iZWFtLnV0aWxzLnByb2ZpbGVyLk1lbW9yeVJlcG9ydGVyLnN0b3Byw3kAAGoDYQAAWAYAAABtZXRob2RyxHkAAIZYOAAAAGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5Cb3VuZGVkU291cmNlLmRlZmF1bHRfb3V0cHV0X2NvZGVycsV5AABqkWQAAFgGAAAAbWV0aG9khlg3AAAAYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJhbmdlVHJhY2tlci5wb3NpdGlvbl9hdF9mcmFjdGlvbnLGeQAAapFkAABYBgAAAG1ldGhvZIZYJQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbC5SZXNodWZmbGVyx3kAAGo6awAAWAUAAABjbGFzc3LIeQAAhlgyAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuY2FsbF9mdW5jdGlvbl92YXJfd2tyyXkAAGp9WAAAWAgAAABmdW5jdGlvbnLKeQAAhlgpAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuaW5wbGFjZV9hZGRyy3kAAGp9WAAAWAgAAABmdW5jdGlvbnLMeQAAhlhRAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjLmFkZF9CZWFtRm5EYXRhU2VydmljZXJfdG9fc2VydmVycs15AABqJWsAAFgIAAAAZnVuY3Rpb26GdWp9awAASwBVB21vZHVsZXNyznkAAH1yz3kAAChqWXcAAChqQVgAAFUAVQCJdGqQdwAAKGpfWAAAVQBVAIl0akV5AAAoan1YAABVAFUAiXRy0HkAAGoEdQAAKGovVQAAVQBVAIl0aqd0AAAoasdYAABVAFUAiXRqkXUAAChq5VgAAFUAVQCJdGpXcwAAKGoDWQAAVQBVAIl0asJ4AAAoaiFZAABVAFUAiXRqTnkAAChqNlkAAFUAVQCJdHLReQAAagB1AAAoajFUAABVAFUAiXRqfXEAAChqiFkAAFUAVQCJdGr3cwAAKGqdWQAAVQBVAIl0alpzAAAoartZAABVAFUAiXRqpHEAAChqBlQAAFUAVQCJdHLSeQAAarJ4AAAoagZaAABVAFUA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amRrAABVAFUAiXRqj3UAAChqeWsAAFUAVQCJdHV1VQJqc3LseQAAfXLteQAAKGoycAAAfWp9awAASwBqznkAAH11dVULcmVmX2NvbnRleHRy7nkAAH1VDnZlcnNpb25jaGFuZ2Vzcu95AAB9VQZ0aXRsZXNy8HkAAH1y8XkAAChouGqCawAAaLlqimsAAGpSAQAAapJrAABqGwEAAGqaawAAaPhqoWsAAGjWaqhrAABovWqwawAAaL5quGsAAGi/asBrAABowGrHawAAaMFqzmsAAGjCatZrAABqFAEAAGrdawAAaMRq5WsAAGjFauxrAABoxmrzawAAaMdq+msAAGjIagJsAABoymoKbAAAaMtqEWwAAGi6ahhsAABozWofbAAAaM5qJ2wAAGjPai5sAABo0Go1bAAAaNFqPGwAAGjSakNsAABo02pKbAAAaNRqUWwAAGjfalhsAABovGpfbAAAaNdqZmwAAGj6am1sAABo2Wp1bAAAaNpqfGwAAGjbaoNsAABo3GqKbAAAaN1qkWwAAGjeaphsAABo1WqfbAAAaOBqpmwAAGjhaq1sAABo4mq0bAAAajEBAABqu2wAAGoQAQAAasJsAABo42rJbAAAahMBAABq0GwAAGjlatdsAABo5mrebAAAaOdq5WwAAGjoauxsAABo6WrzbAAAaOpq+mwAAGjragFtAABo7GoIbQAAaO1qD20AAGjuahZtAABo72odbQAAaPBqJG0AAGjyaittAABo82oybQAAaPRqOW0AAGj1akBtAABo9mpHbQAAaPdqTm0AAGjJalVtAABo+WpcbQAAaNhqY20AAGj7amptAABqKwEAAGpxbQAAak4BAABqeG0AAGj9an9tAABo/mqGbQAAaP9qjW0AAGoAAQAAapRtAABqAQEAAGqbbQAAagIBAABqom0AAGoDAQAAaqltAABqBAEAAGqwbQAAagUBAABqt20AAGoGAQAAar5tAABqBwEAAGrFbQAAaggBAABqzG0AAGoJAQAAatNtAABqCgEAAGrabQAAah8BAABq4W0AAGoMAQAAauhtAABqDQEAAGrvbQAAag4BAABq9m0AAGoPAQAAav1tAABqIQEAAGoEbgAAahEBAABqC24AAGoSAQAAahJuAABo5GoZbgAAaMNqIG4AAGoVAQAAaiduAABqFgEAAGoubgAAahcBAABqNW4AAGoYAQAAajxuAABqGQEAAGpDbgAAahoBAABqSm4AAGjxalFuAABqHAEAAGpYbgAAah0BAABqX24AAGoeAQAAamZuAABqWwEAAGptbgAAaiABAABqdG4AAGpCAQAAantuAABqIgEAAGqCbgAAaiMBAABqiW4AAGokAQAAapBuAABqJQEAAGqXbgAAaiYBAABqnm4AAGonAQAAaqVuAABqKAEAAGqsbgAAaikBAABqs24AAGoqAQAAarpuAABozGrBbgAAakoBAABqyG4AAGosAQAAas9uAABqLgEAAGrWbgAAai8BAABq3W4AAGowAQAAauRuAABqLQEAAGrrbgAAajIBAABq8m4AAGozAQAAavluAABqNAEAAGoAbwAAajYBAABqB28AAGo3AQAAag5vAABqCwEAAGoVbwAAajgBAABqHG8AAGo5AQAAaiNvAABqOgEAAGoqbwAAajsBAABqMW8AAGo8AQAAajhvAABqPQEAAGo/bwAAaj4BAABqRm8AAGpQAQAAak1vAABqQAEAAGpUbwAAakEBAABqW28AAGpDAQAAamJvAABqRAEAAGppbwAAakUBAABqcG8AAGpGAQAAandvAABqRwEAAGp+bwAAakgBAABqhW8AAGpJAQAAaoxvAABou2qTbwAAaksBAABqmm8AAGpMAQAAaqFvAABqTQEAAGqobwAAaPxqr28AAGpPAQAAarZvAABqPwEAAGq9bwAAalEBAABqxG8AAGo1AQAAastvAABqUwEAAGrSbwAAalQBAABq2W8AAGpVAQAAauBvAABqVgEAAGrnbwAAalcBAABq7m8AAGpYAQAAavVvAABqWQEAAGr8bwAAaloBAABqA3AAAGpcAQAAagpwAABqXQEAAGoRcAAAal4BAABqGHAAAGpfAQAAah9wAAB1VQlfd2FybmZ1bmNy8nkAAE5VDGluZGV4ZW50cmllc3LzeQAAfXL0eQAAKGi4XXL1eQAAKFUGc2luZ2xlcvZ5AABYPQAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX2dycGMgKG1vZHVsZSlYOwAAAG1vZHVsZS1hcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl9ncnBjVQBOdHL3eQAAYWi5XXL4eQAAKChVBnNpbmdsZXL5eQAAWB4AAABhcGFjaGVfYmVhbS5pby5hdnJvaW8gKG1vZHVsZSlYHAAAAG1vZHVsZS1hcGFjaGVfYmVhbS5pby5hdnJvaW9VAE50cvp5AAAoavl5AABYLQAAAFJlYWRGcm9tQXZybyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uYXZyb2lvKWpMeQAAVQBOdHL7eQAAKGr5eQAAWDQAAABleHBhbmQoKSAoYXBhY2hlX2JlYW0uaW8uYXZyb2lvLlJlYWRGcm9tQXZybyBtZXRob2QpanRxAABVAE50cvx5AAAoavl5AABYOgAAAGRpc3BsYXlfZGF0YSgpIChhcGFjaGVfYmVhbS5pby5hdnJvaW8uUmVhZEZyb21BdnJvIG1ldGhvZClqQnkAAFUATnRy/XkAAChq+XkAAFgwAAAAUmVhZEFsbEZyb21BdnJvIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5hdnJvaW8panFwAABVAE50cv55AAAoavl5AABYTQAAAERFRkFVTFRfREVTSVJFRF9CVU5ETEVfU0laRSAoYXBhY2hlX2JlYW0uaW8uYXZyb2lvLlJlYWRBbGxGcm9tQXZybyBhdHRyaWJ1dGUpao1yAABVAE50cv95AAAoavl5AABYNwAAAGV4cGFuZCgpIChhcGFjaGVfYmVhbS5pby5hdnJvaW8uUmVhZEFsbEZyb21BdnJvIG1ldGhvZClqMngAAFUATnRyAHoAAChq+XkAAFgsAAAAV3JpdGVUb0F2cm8gKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmF2cm9pbylq+3AAAFUATnRyAXoAAChq+XkAAFgzAAAAZXhwYW5kKCkgKGFwYWNoZV9iZWFtLmlvLmF2cm9pby5Xcml0ZVRvQXZybyBtZXRob2Qpam90AABVAE50cgJ6AAAoavl5AABYOQAAAGRpc3BsYXlfZGF0YSgpIChhcGFjaGVfYmVhbS5pby5hdnJvaW8uV3JpdGVUb0F2cm8gbWV0aG9kKWpicwAAVQBOdHIDegAAZWpSAQAAXXIEegAAKChVBnNpbmdsZXIFegAAWCYAAABhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcyAobW9kdWxlKVgkAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzVQBOdHIGegAAKGoFegAAWDMAAABwb3Bfb25lKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqX3cAAFUATnRyB3oAAChqBXoAAFgzAAAAcG9wX3R3bygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpajR3AABVAE50cgh6AAAoagV6AABYNQAAAHBvcF90aHJlZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpamdxAABVAE50cgl6AAAoagV6AABYNgAAAHB1c2hfdmFsdWUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWondQAAVQBOdHIKegAAKGoFegAAWC8AAABub3AoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWrKdwAAVQBOdHILegAAKGoFegAAWDMAAABwb3BfdG9wKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcylq+3gAAFUATnRyDHoAAChqBXoAAFgxAAAAcm90X24oKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWpEdQAAVQBOdHINegAAKGoFegAAWDMAAAByb3RfdHdvKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcylq9nEAAFUATnRyDnoAAChqBXoAAFg1AAAAcm90X3RocmVlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqnXUAAFUATnRyD3oAAChqBXoAAFg0AAAAcm90X2ZvdXIoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWqgcwAAVQBOdHIQegAAKGoFegAAWDMAAABkdXBfdG9wKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqPHIAAFUATnRyEXoAAChqBXoAAFgxAAAAdW5hcnkoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWoJcQAAVQBOdHISegAAKGoFegAAWDoAAAB1bmFyeV9wb3NpdGl2ZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpamR3AABVAE50chN6AAAoagV6AABYOgAAAHVuYXJ5X25lZ2F0aXZlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqbnIAAFUATnRyFHoAAChqBXoAAFg4AAAAdW5hcnlfaW52ZXJ0KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqcnQAAFUATnRyFXoAAChqBXoAAFg1AAAAdW5hcnlfbm90KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqPnMAAFUATnRyFnoAAChqBXoAAFg5AAAAdW5hcnlfY29udmVydCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpaix0AABVAE50chd6AAAoagV6AABYNAAAAGdldF9pdGVyKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqIXcAAFUATnRyGHoAAChqBXoAAFg/AAAAc3ltbWV0cmljX2JpbmFyeV9vcCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpartyAABVAE50chl6AAAoagV6AABYOAAAAGJpbmFyeV9wb3dlcigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpasp1AABVAE50chp6AAAoagV6AABYOQAAAGlucGxhY2VfcG93ZXIoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWp3dwAAVQBOdHIbegAAKGoFegAAWDsAAABiaW5hcnlfbXVsdGlwbHkoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWpsdAAAVQBOdHIcegAAKGoFegAAWDwAAABpbnBsYWNlX211bHRpcGx5KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcylqd3QAAFUATnRyHXoAAChqBXoAAFg6AAAAaW5wbGFjZV9kaXZpZGUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWrhdQAAVQBOdHIeegAAKGoFegAAWEAAAABpbnBsYWNlX2Zsb29yX2RpdmlkZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpaq94AABVAE50ch96AAAoagV6AABYPgAAAGJpbmFyeV90cnVlX2RpdmlkZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpaid0AABVAE50ciB6AAAoagV6AABYPwAAAGlucGxhY2VfdHJ1ZV9kaXZpZGUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWpEcgAAVQBOdHIhegAAKGoFegAAWDoAAABpbnBsYWNlX21vZHVsbygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpaht1AABVAE50ciJ6AAAoagV6AABYNgAAAGJpbmFyeV9hZGQoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWpScwAAVQBOdHIjegAAKGoFegAAWDcAAABpbnBsYWNlX2FkZCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpast5AABVAE50ciR6AAAoagV6AABYOwAAAGJpbmFyeV9zdWJ0cmFjdCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpaot1AABVAE50ciV6AAAoagV6AABYPAAAAGlucGxhY2Vfc3VidHJhY3QoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWpjdQAAVQBOdHImegAAKGoFegAAWDkAAABiaW5hcnlfc3Vic2NyKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcylq9XAAAFUATnRyJ3oAAChqBXoAAFg5AAAAYmluYXJ5X2xzaGlmdCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpamx5AABVAE50cih6AAAoagV6AABYOgAAAGlucGxhY2VfbHNoaWZ0KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcylq23MAAFUATnRyKXoAAChqBXoAAFg5AAAAYmluYXJ5X3JzaGlmdCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpapNwAABVAE50cip6AAAoagV6AABYOgAAAGlucGxhY2VfcnNoaWZ0KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqEnQAAFUATnRyK3oAAChqBXoAAFg2AAAAYmluYXJ5X2FuZCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpaoh4AABVAE50cix6AAAoagV6AABYNwAAAGlucGxhY2VfYW5kKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqFXUAAFUATnRyLXoAAChqBXoAAFg2AAAAYmluYXJ5X3hvcigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpahdzAABVAE50ci56AAAoagV6AABYNwAAAGlucGxhY2VfeG9yKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqqHIAAFUATnRyL3oAAChqBXoAAFg1AAAAYmluYXJ5X29yKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcylq8ngAAFUATnRyMHoAAChqBXoAAFg2AAAAaW5wYWxjZV9vcigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpamNwAABVAE50cjF6AAAoagV6AABYMwAAAHNsaWNlXzAoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWqGeAAAVQBOdHIyegAAKGoFegAAWDMAAABzbGljZV8xKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqnHcAAFUATnRyM3oAAChqBXoAAFgzAAAAc2xpY2VfMigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpaqF3AABVAE50cjR6AAAoagV6AABYMwAAAHNsaWNlXzMoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWqfdwAAVQBOdHI1egAAKGoFegAAWDkAAABzdG9yZV9zbGljZV8wKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqcnUAAFUATnRyNnoAAChqBXoAAFg5AAAAc3RvcmVfc2xpY2VfMSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpanB1AABVAE50cjd6AAAoagV6AABYOQAAAHN0b3JlX3NsaWNlXzIoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWp2dQAAVQBOdHI4egAAKGoFegAAWDkAAABzdG9yZV9zbGljZV8zKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqdHUAAFUATnRyOXoAAChqBXoAAFg6AAAAZGVsZXRlX3NsaWNlXzAoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWrqcwAAVQBOdHI6egAAKGoFegAAWDoAAABkZWxldGVfc2xpY2VfMSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpauZ3AABVAE50cjt6AAAoagV6AABYOgAAAGRlbGV0ZV9zbGljZV8yKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcylq7XMAAFUATnRyPHoAAChqBXoAAFg6AAAAZGVsZXRlX3NsaWNlXzMoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWrvcwAAVQBOdHI9egAAKGoFegAAWDgAAABzdG9yZV9zdWJzY3IoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWqNdAAAVQBOdHI+egAAKGoFegAAWDkAAABiaW5hcnlfZGl2aWRlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcylqt3MAAFUATnRyP3oAAChqBXoAAFg/AAAAYmluYXJ5X2Zsb29yX2RpdmlkZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpag9zAABVAE50ckB6AAAoagV6AABYOQAAAGJpbmFyeV9tb2R1bG8oKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWo5dAAAVQBOdHJBegAAKGoFegAAWDYAAABwcmludF9pdGVtKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcylqm3kAAFUATnRyQnoAAChqBXoAAFg5AAAAcHJpbnRfbmV3bGluZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpajZ5AABVAE50ckN6AAAoagV6AABYNwAAAGxpc3RfYXBwZW5kKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcylq73gAAFUATnRyRHoAAChqBXoAAFg3AAAAbG9hZF9sb2NhbHMoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWq5cgAAVQBOdHJFegAAKGoFegAAWDUAAABleGVjX3N0bXQoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWpKeQAAVQBOdHJGegAAKGoFegAAWDcAAABidWlsZF9jbGFzcygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpaq50AABVAE50ckd6AAAoagV6AABYOwAAAHVucGFja19zZXF1ZW5jZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpaptzAABVAE50ckh6AAAoagV6AABYNAAAAGR1cF90b3B4KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcylq4XcAAFUATnRySXoAAChqBXoAAFg2AAAAc3RvcmVfYXR0cigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpaspxAABVAE50ckp6AAAoagV6AABYNwAAAGRlbGV0ZV9hdHRyKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcylql3EAAFUATnRyS3oAAChqBXoAAFg4AAAAc3RvcmVfZ2xvYmFsKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqAnQAAFUATnRyTHoAAChqBXoAAFg5AAAAZGVsZXRlX2dsb2JhbCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpaklyAABVAE50ck16AAAoagV6AABYNgAAAGxvYWRfY29uc3QoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWp0cgAAVQBOdHJOegAAKGoFegAAWDUAAABsb2FkX25hbWUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWqWcgAAVQBOdHJPegAAKGoFegAAWDcAAABidWlsZF90dXBsZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpai51AABVAE50clB6AAAoagV6AABYNgAAAGJ1aWxkX2xpc3QoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWoNdgAAVQBOdHJRegAAKGoFegAAWDUAAABidWlsZF9tYXAoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWpUdAAAVQBOdHJSegAAKGoFegAAWDUAAABsb2FkX2F0dHIoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWrqcAAAVQBOdHJTegAAKGoFegAAWDYAAABjb21wYXJlX29wKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqR3UAAFUATnRyVHoAAChqBXoAAFg3AAAAaW1wb3J0X25hbWUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWofcwAAVQBOdHJVegAAKGoFegAAWDcAAABpbXBvcnRfZnJvbSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpalp4AABVAE50clZ6AAAoagV6AABYNwAAAGxvYWRfZ2xvYmFsKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcylq2XMAAFUATnRyV3oAAChqBXoAAFg1AAAAc3RvcmVfbWFwKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqNHMAAFUATnRyWHoAAChqBXoAAFg1AAAAbG9hZF9mYXN0KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqCXMAAFUATnRyWXoAAChqBXoAAFg2AAAAc3RvcmVfZmFzdCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpatx2AABVAE50clp6AAAoagV6AABYNwAAAGRlbGV0ZV9mYXN0KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqoHUAAFUATnRyW3oAAChqBXoAAFg4AAAAbG9hZF9jbG9zdXJlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqrXAAAFUATnRyXHoAAChqBXoAAFg2AAAAbG9hZF9kZXJlZigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpaq1yAABVAE50cl16AAAoagV6AABYOQAAAGNhbGxfZnVuY3Rpb24oKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWrHdgAAVQBOdHJeegAAKGoFegAAWDkAAABtYWtlX2Z1bmN0aW9uKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqeHMAAFUATnRyX3oAAChqBXoAAFg4AAAAbWFrZV9jbG9zdXJlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcylqLHYAAFUATnRyYHoAAChqBXoAAFg3AAAAYnVpbGRfc2xpY2UoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWo6eQAAVQBOdHJhegAAKGoFegAAWD0AAABjYWxsX2Z1bmN0aW9uX3ZhcigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMparh2AABVAE50cmJ6AAAoagV6AABYPAAAAGNhbGxfZnVuY3Rpb25fa3coKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKWpPcwAAVQBOdHJjegAAKGoFegAAWEAAAABjYWxsX2Z1bmN0aW9uX3Zhcl93aygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMpasl5AABVAE50cmR6AABlahsBAABdcmV6AAAoavl5AABYJQAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUgKG1vZHVsZSlYIwAAAG1vZHVsZS1hcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlVQBOdHJmegAAYWj4XXJnegAAKChq+XkAAFgjAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXMgKG1vZHVsZSlYIQAAAG1vZHVsZS1hcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtc1UATnRyaHoAAChq+XkAAFgxAAAARmlsZVN5c3RlbXMgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zKWo3cQAAVQBOdHJpegAAKGr5eQAAWEUAAABVUklfU0NIRU1BX1BBVFRFUk4gKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zIGF0dHJpYnV0ZSlqYnIAAFUATnRyanoAAChq+XkAAFhDAAAAc2V0X29wdGlvbnMoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMgY2xhc3MgbWV0aG9kKWrgdQAAVQBOdHJregAAKGr5eQAAWEMAAABnZXRfc2NoZW1lKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zIHN0YXRpYyBtZXRob2Qpanh2AABVAE50cmx6AAAoavl5AABYRwAAAGdldF9maWxlc3lzdGVtKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zIHN0YXRpYyBtZXRob2Qpall1AABVAE50cm16AAAoavl5AABYPQAAAGpvaW4oKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMgc3RhdGljIG1ldGhvZClqRXMAAFUATnRybnoAAChq+XkAAFg+AAAAc3BsaXQoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMgc3RhdGljIG1ldGhvZClqQHkAAFUATnRyb3oAAChq+XkAAFg/AAAAbWtkaXJzKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zIHN0YXRpYyBtZXRob2Qpap92AABVAE50cnB6AAAoavl5AABYPgAAAG1hdGNoKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zIHN0YXRpYyBtZXRob2QpalB1AABVAE50cnF6AAAoavl5AABYPwAAAGNyZWF0ZSgpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtcy5GaWxlU3lzdGVtcyBzdGF0aWMgbWV0aG9kKWpZeQAAVQBOdHJyegAAKGr5eQAAWD0AAABvcGVuKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zIHN0YXRpYyBtZXRob2QpatN3AABVAE50cnN6AAAoavl5AABYPQAAAGNvcHkoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMgc3RhdGljIG1ldGhvZClquXkAAFUATnRydHoAAChq+XkAAFg/AAAAcmVuYW1lKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zIHN0YXRpYyBtZXRob2QpasJwAABVAE50cnV6AAAoavl5AABYPwAAAGV4aXN0cygpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtcy5GaWxlU3lzdGVtcyBzdGF0aWMgbWV0aG9kKWo4cwAAVQBOdHJ2egAAKGr5eQAAWEUAAABsYXN0X3VwZGF0ZWQoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMgc3RhdGljIG1ldGhvZClqkXMAAFUATnRyd3oAAChq+XkAAFhBAAAAY2hlY2tzdW0oKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMgc3RhdGljIG1ldGhvZClqyHQAAFUATnRyeHoAAChq+XkAAFg/AAAAZGVsZXRlKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zIHN0YXRpYyBtZXRob2Qpavd3AABVAE50cnl6AAAoavl5AABYRwAAAGdldF9jaHVua19zaXplKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zIHN0YXRpYyBtZXRob2QpaqF4AABVAE50cnp6AABlaNZdcnt6AAAoKFUGc2luZ2xlcnx6AABYNwAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZmFrZV9kYXRhc3RvcmUgKG1vZHVsZSlYNQAAAG1vZHVsZS1hcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmZha2VfZGF0YXN0b3JlVQBOdHJ9egAAKGp8egAAWE0AAABjcmVhdGVfcnVuX3F1ZXJ5KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmZha2VfZGF0YXN0b3JlKWpudAAAVQBOdHJ+egAAKGp8egAAWEoAAABjcmVhdGVfY29tbWl0KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmZha2VfZGF0YXN0b3JlKWrCeQAAVQBOdHJ/egAAKGp8egAAWEwAAABjcmVhdGVfcmVzcG9uc2UoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZmFrZV9kYXRhc3RvcmUpaidxAABVAE50coB6AAAoanx6AABYTAAAAGNyZWF0ZV9lbnRpdGllcygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5mYWtlX2RhdGFzdG9yZSlqDnMAAFUATnRygXoAAGVovV1ygnoAACgoVQZzaW5nbGVyg3oAAFg2AAAAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoZV9tYW5hZ2VyIChtb2R1bGUpWDQAAABtb2R1bGUtYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoZV9tYW5hZ2VyVQBOdHKEegAAKGqDegAAWEUAAABDYWNoZU1hbmFnZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGVfbWFuYWdlcilqzXIAAFUATnRyhXoAAChqg3oAAFhMAAAAZXhpc3RzKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGVfbWFuYWdlci5DYWNoZU1hbmFnZXIgbWV0aG9kKWpGeAAAVQBOdHKGegAAKGqDegAAWFcAAABpc19sYXRlc3RfdmVyc2lvbigpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmNhY2hlX21hbmFnZXIuQ2FjaGVNYW5hZ2VyIG1ldGhvZClqmnMAAFUATnRyh3oAAChqg3oAAFhKAAAAcmVhZCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmNhY2hlX21hbmFnZXIuQ2FjaGVNYW5hZ2VyIG1ldGhvZClqEHYAAFUATnRyiHoAAChqg3oAAFhMAAAAc291cmNlKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGVfbWFuYWdlci5DYWNoZU1hbmFnZXIgbWV0aG9kKWpsdgAAVQBOdHKJegAAKGqDegAAWEoAAABzaW5rKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGVfbWFuYWdlci5DYWNoZU1hbmFnZXIgbWV0aG9kKWrQdAAAVQBOdHKKegAAKGqDegAAWE0AAABjbGVhbnVwKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGVfbWFuYWdlci5DYWNoZU1hbmFnZXIgbWV0aG9kKWqpcAAAVQBOdHKLegAAKGqDegAAWE4AAABGaWxlQmFzZWRDYWNoZU1hbmFnZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGVfbWFuYWdlcilqTnUAAFUATnRyjHoAAChqg3oAAFhVAAAAZXhpc3RzKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGVfbWFuYWdlci5GaWxlQmFzZWRDYWNoZU1hbmFnZXIgbWV0aG9kKWpfeAAAVQBOdHKNegAAKGqDegAAWFMAAAByZWFkKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGVfbWFuYWdlci5GaWxlQmFzZWRDYWNoZU1hbmFnZXIgbWV0aG9kKWqXdQAAVQBOdHKOegAAKGqDegAAWFUAAABzb3VyY2UoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoZV9tYW5hZ2VyLkZpbGVCYXNlZENhY2hlTWFuYWdlciBtZXRob2QparpxAABVAE50co96AAAoaoN6AABYUwAAAHNpbmsoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoZV9tYW5hZ2VyLkZpbGVCYXNlZENhY2hlTWFuYWdlciBtZXRob2QpaoRzAABVAE50cpB6AAAoaoN6AABYVgAAAGNsZWFudXAoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoZV9tYW5hZ2VyLkZpbGVCYXNlZENhY2hlTWFuYWdlciBtZXRob2Qpao1xAABVAE50cpF6AAAoaoN6AABYQgAAAFJlYWRDYWNoZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoZV9tYW5hZ2VyKWrrdgAAVQBOdHKSegAAKGqDegAAWEkAAABleHBhbmQoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoZV9tYW5hZ2VyLlJlYWRDYWNoZSBtZXRob2QpamVwAABVAE50cpN6AAAoaoN6AABYQwAAAFdyaXRlQ2FjaGUgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGVfbWFuYWdlcilqqHcAAFUATnRylHoAAChqg3oAAFhKAAAAZXhwYW5kKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGVfbWFuYWdlci5Xcml0ZUNhY2hlIG1ldGhvZClqtHIAAFUATnRylXoAAChqg3oAAFhQAAAAU2FmZUZhc3RQcmltaXRpdmVzQ29kZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGVfbWFuYWdlcilq/nYAAFUATnRylnoAAChqg3oAAFhXAAAAZW5jb2RlKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGVfbWFuYWdlci5TYWZlRmFzdFByaW1pdGl2ZXNDb2RlciBtZXRob2Qpahh5AABVAE50cpd6AAAoaoN6AABYVwAAAGRlY29kZSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmNhY2hlX21hbmFnZXIuU2FmZUZhc3RQcmltaXRpdmVzQ29kZXIgbWV0aG9kKWqbdwAAVQBOdHKYegAAZWi+XXKZegAAKChVBnNpbmdsZXKaegAAWDIAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5idW5kbGVfZmFjdG9yeSAobW9kdWxlKVgwAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmJ1bmRsZV9mYWN0b3J5VQBOdHKbegAAKGqaegAAWEIAAABCdW5kbGVGYWN0b3J5IChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5idW5kbGVfZmFjdG9yeSlqj3QAAFUATnRynHoAAChqmnoAAFhQAAAAY3JlYXRlX2J1bmRsZSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5idW5kbGVfZmFjdG9yeS5CdW5kbGVGYWN0b3J5IG1ldGhvZClq2nEAAFUATnRynXoAAChqmnoAAFhgAAAAY3JlYXRlX2VtcHR5X2NvbW1pdHRlZF9idW5kbGUoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuYnVuZGxlX2ZhY3RvcnkuQnVuZGxlRmFjdG9yeSBtZXRob2QpasF3AABVAE50cp56AABlaL9dcp96AAAoKGoFegAAWCcAAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXkgKG1vZHVsZSlYJQAAAG1vZHVsZS1hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXlVAE50cqB6AAAoagV6AABYOAAAAEhhc0Rpc3BsYXlEYXRhIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXkpanZ2AABVAE50cqF6AAAoagV6AABYRQAAAGRpc3BsYXlfZGF0YSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXkuSGFzRGlzcGxheURhdGEgbWV0aG9kKWqNeAAAVQBOdHKiegAAKGoFegAAWDUAAABEaXNwbGF5RGF0YSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5KWr1eAAAVQBOdHKjegAAKGoFegAAWE8AAABjcmVhdGVfZnJvbV9vcHRpb25zKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheS5EaXNwbGF5RGF0YSBjbGFzcyBtZXRob2Qpat1xAABVAE50cqR6AAAoagV6AABYRwAAAGNyZWF0ZV9mcm9tKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheS5EaXNwbGF5RGF0YSBjbGFzcyBtZXRob2QpanZ5AABVAE50cqV6AAAoagV6AABYOQAAAERpc3BsYXlEYXRhSXRlbSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5KWopdAAAVQBOdHKmegAAKGoFegAAWEMAAAB0eXBlRGljdCAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5LkRpc3BsYXlEYXRhSXRlbSBhdHRyaWJ1dGUpaux3AABVAE50cqd6AAAoagV6AABYRgAAAGRyb3BfaWZfbm9uZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXkuRGlzcGxheURhdGFJdGVtIG1ldGhvZClqRHQAAFUATnRyqHoAAChqBXoAAFhJAAAAZHJvcF9pZl9kZWZhdWx0KCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheS5EaXNwbGF5RGF0YUl0ZW0gbWV0aG9kKWrCdgAAVQBOdHKpegAAKGoFegAAWEUAAABzaG91bGRfZHJvcCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXkuRGlzcGxheURhdGFJdGVtIG1ldGhvZClqgHQAAFUATnRyqnoAAChqBXoAAFhCAAAAaXNfdmFsaWQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5LkRpc3BsYXlEYXRhSXRlbSBtZXRob2Qpar55AABVAE50cqt6AAAoagV6AABYQgAAAGdldF9kaWN0KCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheS5EaXNwbGF5RGF0YUl0ZW0gbWV0aG9kKWqCdAAAVQBOdHKsegAAZWjAXXKtegAAKGr2eQAAWBwAAABhcGFjaGVfYmVhbS5vcHRpb25zIChtb2R1bGUpWBoAAABtb2R1bGUtYXBhY2hlX2JlYW0ub3B0aW9uc1UATnRyrnoAAGFowV1yr3oAACgoVQZzaW5nbGVysHoAAFglAAAAYXBhY2hlX2JlYW0uaW50ZXJuYWwucGlja2xlciAobW9kdWxlKVgjAAAAbW9kdWxlLWFwYWNoZV9iZWFtLmludGVybmFsLnBpY2tsZXJVAE50crF6AAAoarB6AABYNgAAAHNhdmVfbW9kdWxlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5pbnRlcm5hbC5waWNrbGVyKWpydgAAVQBOdHKyegAAKGqwegAAWD8AAABuZXdfc2F2ZV9tb2R1bGVfZGljdCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW50ZXJuYWwucGlja2xlcilqtncAAFUATnRys3oAAChqsHoAAFgwAAAAZHVtcHMoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmludGVybmFsLnBpY2tsZXIpalV1AABVAE50crR6AAAoarB6AABYMAAAAGxvYWRzKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5pbnRlcm5hbC5waWNrbGVyKWqzcgAAVQBOdHK1egAAKGqwegAAWDcAAABkdW1wX3Nlc3Npb24oKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmludGVybmFsLnBpY2tsZXIpah92AABVAE50crZ6AAAoarB6AABYNwAAAGxvYWRfc2Vzc2lvbigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW50ZXJuYWwucGlja2xlcilqLHgAAFUATnRyt3oAAGVowl1yuHoAACgoavl5AABYPAAAAGFwYWNoZV9iZWFtLmlvLmZsaW5rLmZsaW5rX3N0cmVhbWluZ19pbXB1bHNlX3NvdXJjZSAobW9kdWxlKVg6AAAAbW9kdWxlLWFwYWNoZV9iZWFtLmlvLmZsaW5rLmZsaW5rX3N0cmVhbWluZ19pbXB1bHNlX3NvdXJjZVUATnRyuXoAAChq+XkAAFhaAAAARmxpbmtTdHJlYW1pbmdJbXB1bHNlU291cmNlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5mbGluay5mbGlua19zdHJlYW1pbmdfaW1wdWxzZV9zb3VyY2Upakh4AABVAE50crp6AAAoavl5AABYXwAAAFVSTiAoYXBhY2hlX2JlYW0uaW8uZmxpbmsuZmxpbmtfc3RyZWFtaW5nX2ltcHVsc2Vfc291cmNlLkZsaW5rU3RyZWFtaW5nSW1wdWxzZVNvdXJjZSBhdHRyaWJ1dGUpaiN3AABVAE50crt6AAAoavl5AABYYgAAAGNvbmZpZyAoYXBhY2hlX2JlYW0uaW8uZmxpbmsuZmxpbmtfc3RyZWFtaW5nX2ltcHVsc2Vfc291cmNlLkZsaW5rU3RyZWFtaW5nSW1wdWxzZVNvdXJjZSBhdHRyaWJ1dGUpajZ4AABVAE50crx6AAAoavl5AABYYQAAAGV4cGFuZCgpIChhcGFjaGVfYmVhbS5pby5mbGluay5mbGlua19zdHJlYW1pbmdfaW1wdWxzZV9zb3VyY2UuRmxpbmtTdHJlYW1pbmdJbXB1bHNlU291cmNlIG1ldGhvZClqfnIAAFUATnRyvXoAAChq+XkAAFhoAAAAZ2V0X3dpbmRvd2luZygpIChhcGFjaGVfYmVhbS5pby5mbGluay5mbGlua19zdHJlYW1pbmdfaW1wdWxzZV9zb3VyY2UuRmxpbmtTdHJlYW1pbmdJbXB1bHNlU291cmNlIG1ldGhvZClqBnIAAFUATnRyvnoAAChq+XkAAFhsAAAAaW5mZXJfb3V0cHV0X3R5cGUoKSAoYXBhY2hlX2JlYW0uaW8uZmxpbmsuZmxpbmtfc3RyZWFtaW5nX2ltcHVsc2Vfc291cmNlLkZsaW5rU3RyZWFtaW5nSW1wdWxzZVNvdXJjZSBtZXRob2QpaihyAABVAE50cr96AAAoavl5AABYcgAAAHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLmlvLmZsaW5rLmZsaW5rX3N0cmVhbWluZ19pbXB1bHNlX3NvdXJjZS5GbGlua1N0cmVhbWluZ0ltcHVsc2VTb3VyY2UgbWV0aG9kKWqQcwAAVQBOdHLAegAAKGr5eQAAWGoAAABzZXRfaW50ZXJ2YWxfbXMoKSAoYXBhY2hlX2JlYW0uaW8uZmxpbmsuZmxpbmtfc3RyZWFtaW5nX2ltcHVsc2Vfc291cmNlLkZsaW5rU3RyZWFtaW5nSW1wdWxzZVNvdXJjZSBtZXRob2QparJ5AABVAE50csF6AAAoavl5AABYbAAAAHNldF9tZXNzYWdlX2NvdW50KCkgKGFwYWNoZV9iZWFtLmlvLmZsaW5rLmZsaW5rX3N0cmVhbWluZ19pbXB1bHNlX3NvdXJjZS5GbGlua1N0cmVhbWluZ0ltcHVsc2VTb3VyY2UgbWV0aG9kKWohdgAAVQBOdHLCegAAKGr5eQAAWHsAAABmcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLmlvLmZsaW5rLmZsaW5rX3N0cmVhbWluZ19pbXB1bHNlX3NvdXJjZS5GbGlua1N0cmVhbWluZ0ltcHVsc2VTb3VyY2Ugc3RhdGljIG1ldGhvZClqQXkAAFUATnRyw3oAAGVqFAEAAF1yxHoAACgoVQZzaW5nbGVyxXoAAFg1AAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Qud2F0ZXJtYXJrX21hbmFnZXIgKG1vZHVsZSlYMwAAAG1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC53YXRlcm1hcmtfbWFuYWdlclUATnRyxnoAAChqxXoAAFhIAAAAV2F0ZXJtYXJrTWFuYWdlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Qud2F0ZXJtYXJrX21hbmFnZXIpaoJ5AABVAE50csd6AAAoasV6AABYWwAAAFdBVEVSTUFSS19QT1NfSU5GIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC53YXRlcm1hcmtfbWFuYWdlci5XYXRlcm1hcmtNYW5hZ2VyIGF0dHJpYnV0ZSlq8ncAAFUATnRyyHoAAChqxXoAAFhbAAAAV0FURVJNQVJLX05FR19JTkYgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LndhdGVybWFya19tYW5hZ2VyLldhdGVybWFya01hbmFnZXIgYXR0cmlidXRlKWp6dQAAVQBOdHLJegAAKGrFegAAWFcAAABnZXRfd2F0ZXJtYXJrcygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC53YXRlcm1hcmtfbWFuYWdlci5XYXRlcm1hcmtNYW5hZ2VyIG1ldGhvZClqSXYAAFUATnRyynoAAChqxXoAAFhaAAAAdXBkYXRlX3dhdGVybWFya3MoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Qud2F0ZXJtYXJrX21hbmFnZXIuV2F0ZXJtYXJrTWFuYWdlciBtZXRob2Qpag9yAABVAE50cst6AAAoasV6AABYWwAAAGV4dHJhY3RfYWxsX3RpbWVycygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC53YXRlcm1hcmtfbWFuYWdlci5XYXRlcm1hcmtNYW5hZ2VyIG1ldGhvZClqV3kAAFUATnRyzHoAAGVoxF1yzXoAAChqBXoAAFgeAAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzIChtb2R1bGUpWBwAAABtb2R1bGUtYXBhY2hlX2JlYW0udHlwZWhpbnRzVQBOdHLOegAAYWjFXXLPegAAKChqxXoAAFgyAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X21ldHJpY3MgKG1vZHVsZSlYMAAAAG1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfbWV0cmljc1UATnRy0HoAAChqxXoAAFhCAAAARGlyZWN0TWV0cmljcyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X21ldHJpY3Mpal55AABVAE50ctF6AAAoasV6AABYUQAAAGNvbW1pdF9sb2dpY2FsKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9tZXRyaWNzLkRpcmVjdE1ldHJpY3MgbWV0aG9kKWoUeAAAVQBOdHLSegAAKGrFegAAWFIAAABjb21taXRfcGh5c2ljYWwoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X21ldHJpY3MuRGlyZWN0TWV0cmljcyBtZXRob2QpalF1AABVAE50ctN6AAAoasV6AABYUgAAAHVwZGF0ZV9waHlzaWNhbCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfbWV0cmljcy5EaXJlY3RNZXRyaWNzIG1ldGhvZClqDHUAAFUATnRy1HoAAChqxXoAAFhIAAAAcXVlcnkoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X21ldHJpY3MuRGlyZWN0TWV0cmljcyBtZXRob2Qpamd3AABVAE50ctV6AAAoasV6AABYQQAAAERpcmVjdE1ldHJpYyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X21ldHJpY3MpaoF5AABVAE50ctZ6AAAoasV6AABYUAAAAGNvbW1pdF9sb2dpY2FsKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9tZXRyaWNzLkRpcmVjdE1ldHJpYyBtZXRob2QpasN4AABVAE50ctd6AAAoasV6AABYUQAAAGNvbW1pdF9waHlzaWNhbCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfbWV0cmljcy5EaXJlY3RNZXRyaWMgbWV0aG9kKWpccQAAVQBOdHLYegAAKGrFegAAWFEAAAB1cGRhdGVfcGh5c2ljYWwoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X21ldHJpY3MuRGlyZWN0TWV0cmljIG1ldGhvZClqF3YAAFUATnRy2XoAAChqxXoAAFhTAAAAZXh0cmFjdF9jb21taXR0ZWQoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X21ldHJpY3MuRGlyZWN0TWV0cmljIG1ldGhvZClqnXEAAFUATnRy2noAAChqxXoAAFhaAAAAZXh0cmFjdF9sYXRlc3RfYXR0ZW1wdGVkKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9tZXRyaWNzLkRpcmVjdE1ldHJpYyBtZXRob2QpasZ1AABVAE50ctt6AABlaMZdctx6AAAoKGp8egAAWCIAAABhcGFjaGVfYmVhbS5pby5nY3AucHVic3ViIChtb2R1bGUpWCAAAABtb2R1bGUtYXBhY2hlX2JlYW0uaW8uZ2NwLnB1YnN1YlUATnRy3XoAAChqfHoAAFgyAAAAUHVic3ViTWVzc2FnZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZ2NwLnB1YnN1Yilq5nQAAFUATnRy3noAAChqfHoAAFg4AAAAZGF0YSAoYXBhY2hlX2JlYW0uaW8uZ2NwLnB1YnN1Yi5QdWJzdWJNZXNzYWdlIGF0dHJpYnV0ZSlqjXcAAFUATnRy33oAAChqfHoAAFg+AAAAYXR0cmlidXRlcyAoYXBhY2hlX2JlYW0uaW8uZ2NwLnB1YnN1Yi5QdWJzdWJNZXNzYWdlIGF0dHJpYnV0ZSlq33EAAFUATnRy4HoAAChqfHoAAFgzAAAAUmVhZEZyb21QdWJTdWIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmdjcC5wdWJzdWIpapx2AABVAE50cuF6AAAoanx6AABYOgAAAGV4cGFuZCgpIChhcGFjaGVfYmVhbS5pby5nY3AucHVic3ViLlJlYWRGcm9tUHViU3ViIG1ldGhvZClqznIAAFUATnRy4noAAChqfHoAAFhLAAAAdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLnB1YnN1Yi5SZWFkRnJvbVB1YlN1YiBtZXRob2Qpaqt5AABVAE50cuN6AAAoanx6AABYPQAAAFJlYWRTdHJpbmdzRnJvbVB1YlN1YigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW8uZ2NwLnB1YnN1YilqhXkAAFUATnRy5HoAAChqfHoAAFg8AAAAV3JpdGVTdHJpbmdzVG9QdWJTdWIoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmlvLmdjcC5wdWJzdWIpat11AABVAE50cuV6AAAoanx6AABYMgAAAFdyaXRlVG9QdWJTdWIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmdjcC5wdWJzdWIpavxwAABVAE50cuZ6AAAoanx6AABYRgAAAHRvX3Byb3RvX3N0cigpIChhcGFjaGVfYmVhbS5pby5nY3AucHVic3ViLldyaXRlVG9QdWJTdWIgc3RhdGljIG1ldGhvZClqUnQAAFUATnRy53oAAChqfHoAAFg5AAAAZXhwYW5kKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5wdWJzdWIuV3JpdGVUb1B1YlN1YiBtZXRob2Qpard1AABVAE50cuh6AAAoanx6AABYSgAAAHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5wdWJzdWIuV3JpdGVUb1B1YlN1YiBtZXRob2Qpam93AABVAE50cul6AABlaMddcup6AAAoVQZzaW5nbGVy63oAAFg2AAAAYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsubW9kZWxzIChtb2R1bGUpWDQAAABtb2R1bGUtYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsubW9kZWxzVQBOdHLsegAAYWjIXXLtegAAKChVBnNpbmdsZXLuegAAWB8AAABhcGFjaGVfYmVhbS51dGlscy51cm5zIChtb2R1bGUpWB0AAABtb2R1bGUtYXBhY2hlX2JlYW0udXRpbHMudXJuc1UATnRy73oAAChq7noAAFgtAAAAUnVubmVyQXBpRm4gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnV0aWxzLnVybnMparV1AABVAE50cvB6AAAoau56AABYRQAAAHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLnV0aWxzLnVybnMuUnVubmVyQXBpRm4gbWV0aG9kKWp+cQAAVQBOdHLxegAAKGruegAAWEAAAAByZWdpc3Rlcl91cm4oKSAoYXBhY2hlX2JlYW0udXRpbHMudXJucy5SdW5uZXJBcGlGbiBjbGFzcyBtZXRob2QpapN3AABVAE50cvJ6AAAoau56AABYRwAAAHJlZ2lzdGVyX3BpY2tsZV91cm4oKSAoYXBhY2hlX2JlYW0udXRpbHMudXJucy5SdW5uZXJBcGlGbiBjbGFzcyBtZXRob2QpaohxAABVAE50cvN6AAAoau56AABYOwAAAHRvX3J1bm5lcl9hcGkoKSAoYXBhY2hlX2JlYW0udXRpbHMudXJucy5SdW5uZXJBcGlGbiBtZXRob2Qpaqx1AABVAE50cvR6AAAoau56AABYQwAAAGZyb21fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS51dGlscy51cm5zLlJ1bm5lckFwaUZuIGNsYXNzIG1ldGhvZClq2nYAAFUATnRy9XoAAGVoyl1y9noAACgoavZ5AABYLQAAAGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyAobW9kdWxlKVgrAAAAbW9kdWxlLWFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc1UATnRy93oAAChq9nkAAFg/AAAAUGlwZWxpbmVPcHRpb25zIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMpasB5AABVAE50cvh6AAAoavZ5AABYVQAAAGZyb21fZGljdGlvbmFyeSgpIChhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuUGlwZWxpbmVPcHRpb25zIGNsYXNzIG1ldGhvZClqAHIAAFUATnRy+XoAAChq9nkAAFhPAAAAZ2V0X2FsbF9vcHRpb25zKCkgKGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5QaXBlbGluZU9wdGlvbnMgbWV0aG9kKWoYcgAAVQBOdHL6egAAKGr2eQAAWEwAAABkaXNwbGF5X2RhdGEoKSAoYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLlBpcGVsaW5lT3B0aW9ucyBtZXRob2QpauJ0AABVAE50cvt6AAAoavZ5AABYRwAAAHZpZXdfYXMoKSAoYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLlBpcGVsaW5lT3B0aW9ucyBtZXRob2Qpaql4AABVAE50cvx6AAAoavZ5AABYPwAAAFN0YW5kYXJkT3B0aW9ucyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zKWrZdAAAVQBOdHL9egAAKGr2eQAAWE8AAABERUZBVUxUX1JVTk5FUiAoYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLlN0YW5kYXJkT3B0aW9ucyBhdHRyaWJ1dGUpar1yAABVAE50cv56AAAoavZ5AABYOwAAAFR5cGVPcHRpb25zIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMpaoVxAABVAE50cv96AAAoavZ5AABYPQAAAERpcmVjdE9wdGlvbnMgKGNsYXNzIGluIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucylqy3MAAFUATnRyAHsAAChq9nkAAFhCAAAAR29vZ2xlQ2xvdWRPcHRpb25zIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMpai5yAABVAE50cgF7AAAoavZ5AABYWAAAAEJJR1FVRVJZX0FQSV9TRVJWSUNFIChhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuR29vZ2xlQ2xvdWRPcHRpb25zIGF0dHJpYnV0ZSlqWncAAFUATnRyAnsAAChq9nkAAFhXAAAAQ09NUFVURV9BUElfU0VSVklDRSAoYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLkdvb2dsZUNsb3VkT3B0aW9ucyBhdHRyaWJ1dGUpahx4AABVAE50cgN7AAAoavZ5AABYVwAAAFNUT1JBR0VfQVBJX1NFUlZJQ0UgKGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5Hb29nbGVDbG91ZE9wdGlvbnMgYXR0cmlidXRlKWpsdQAAVQBOdHIEewAAKGr2eQAAWFUAAABEQVRBRkxPV19FTkRQT0lOVCAoYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLkdvb2dsZUNsb3VkT3B0aW9ucyBhdHRyaWJ1dGUpaq9zAABVAE50cgV7AAAoavZ5AABYSwAAAHZhbGlkYXRlKCkgKGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5Hb29nbGVDbG91ZE9wdGlvbnMgbWV0aG9kKWp6cQAAVQBOdHIGewAAKGr2eQAAWEcAAABIYWRvb3BGaWxlU3lzdGVtT3B0aW9ucyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zKWqMcAAAVQBOdHIHewAAKGr2eQAAWFAAAAB2YWxpZGF0ZSgpIChhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuSGFkb29wRmlsZVN5c3RlbU9wdGlvbnMgbWV0aG9kKWpCdQAAVQBOdHIIewAAKGr2eQAAWD0AAABXb3JrZXJPcHRpb25zIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMpaqZ5AABVAE50cgl7AAAoavZ5AABYRgAAAHZhbGlkYXRlKCkgKGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5Xb3JrZXJPcHRpb25zIG1ldGhvZClqpXQAAFUATnRyCnsAAChq9nkAAFg8AAAARGVidWdPcHRpb25zIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMpaiJyAABVAE50cgt7AAAoavZ5AABYQAAAAFByb2ZpbGluZ09wdGlvbnMgKGNsYXNzIGluIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucylq3XAAAFUATnRyDHsAAChq9nkAAFg8AAAAU2V0dXBPcHRpb25zIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMpan52AABVAE50cg17AAAoavZ5AABYOwAAAFRlc3RPcHRpb25zIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMpagl0AABVAE50cg57AAAoavZ5AABYRAAAAHZhbGlkYXRlKCkgKGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5UZXN0T3B0aW9ucyBtZXRob2QpavxzAABVAE50cg97AABlaMtdchB7AAAoKGr2eQAAWCsAAABhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyIChtb2R1bGUpWCkAAABtb2R1bGUtYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlclUATnRyEXsAAChq9nkAAFg7AAAAVmFsdWVQcm92aWRlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlcilqzXAAAFUATnRyEnsAAChq9nkAAFhJAAAAaXNfYWNjZXNzaWJsZSgpIChhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyLlZhbHVlUHJvdmlkZXIgbWV0aG9kKWoKeAAAVQBOdHITewAAKGr2eQAAWD8AAABnZXQoKSAoYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlci5WYWx1ZVByb3ZpZGVyIG1ldGhvZClqe3kAAFUATnRyFHsAAChq9nkAAFhBAAAAU3RhdGljVmFsdWVQcm92aWRlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlcilqQHIAAFUATnRyFXsAAChq9nkAAFhPAAAAaXNfYWNjZXNzaWJsZSgpIChhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyLlN0YXRpY1ZhbHVlUHJvdmlkZXIgbWV0aG9kKWokeAAAVQBOdHIWewAAKGr2eQAAWEUAAABnZXQoKSAoYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlci5TdGF0aWNWYWx1ZVByb3ZpZGVyIG1ldGhvZClqUHgAAFUATnRyF3sAAChq9nkAAFhCAAAAUnVudGltZVZhbHVlUHJvdmlkZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIpajZxAABVAE50chh7AAAoavZ5AABYUwAAAHJ1bnRpbWVfb3B0aW9ucyAoYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlci5SdW50aW1lVmFsdWVQcm92aWRlciBhdHRyaWJ1dGUpah5zAABVAE50chl7AAAoavZ5AABYTwAAAGV4cGVyaW1lbnRzIChhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyLlJ1bnRpbWVWYWx1ZVByb3ZpZGVyIGF0dHJpYnV0ZSlqv3MAAFUATnRyGnsAAChq9nkAAFhQAAAAaXNfYWNjZXNzaWJsZSgpIChhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyLlJ1bnRpbWVWYWx1ZVByb3ZpZGVyIG1ldGhvZClqW3cAAFUATnRyG3sAAChq9nkAAFhSAAAAZ2V0X3ZhbHVlKCkgKGFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIuUnVudGltZVZhbHVlUHJvdmlkZXIgY2xhc3MgbWV0aG9kKWqxcQAAVQBOdHIcewAAKGr2eQAAWEYAAABnZXQoKSAoYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlci5SdW50aW1lVmFsdWVQcm92aWRlciBtZXRob2QpalVyAABVAE50ch17AAAoavZ5AABYXAAAAHNldF9ydW50aW1lX29wdGlvbnMoKSAoYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlci5SdW50aW1lVmFsdWVQcm92aWRlciBjbGFzcyBtZXRob2Qpak94AABVAE50ch57AAAoavZ5AABYQQAAAGNoZWNrX2FjY2Vzc2libGUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIparpzAABVAE50ch97AABlaLpdciB7AAAoKGr5eQAAWCQAAABhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkgKG1vZHVsZSlYIgAAAG1vZHVsZS1hcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlVAE50ciF7AAAoavl5AABYOAAAAFRhYmxlUm93SnNvbkNvZGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkpas13AABVAE50ciJ7AAAoavl5AABYPwAAAGVuY29kZSgpIChhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkuVGFibGVSb3dKc29uQ29kZXIgbWV0aG9kKWqpcQAAVQBOdHIjewAAKGr5eQAAWD8AAABkZWNvZGUoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LlRhYmxlUm93SnNvbkNvZGVyIG1ldGhvZClq23UAAFUATnRyJHsAAChq+XkAAFg6AAAAQmlnUXVlcnlEaXNwb3NpdGlvbiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5KWoidQAAVQBOdHIlewAAKGr5eQAAWEgAAABDUkVBVEVfTkVWRVIgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5CaWdRdWVyeURpc3Bvc2l0aW9uIGF0dHJpYnV0ZSlq+3QAAFUATnRyJnsAAChq+XkAAFhMAAAAQ1JFQVRFX0lGX05FRURFRCAoYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LkJpZ1F1ZXJ5RGlzcG9zaXRpb24gYXR0cmlidXRlKWqccQAAVQBOdHInewAAKGr5eQAAWEoAAABXUklURV9UUlVOQ0FURSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LkJpZ1F1ZXJ5RGlzcG9zaXRpb24gYXR0cmlidXRlKWobcwAAVQBOdHIoewAAKGr5eQAAWEgAAABXUklURV9BUFBFTkQgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5CaWdRdWVyeURpc3Bvc2l0aW9uIGF0dHJpYnV0ZSlqSXkAAFUATnRyKXsAAChq+XkAAFhHAAAAV1JJVEVfRU1QVFkgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5CaWdRdWVyeURpc3Bvc2l0aW9uIGF0dHJpYnV0ZSlqD3YAAFUATnRyKnsAAChq+XkAAFhRAAAAdmFsaWRhdGVfY3JlYXRlKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5CaWdRdWVyeURpc3Bvc2l0aW9uIHN0YXRpYyBtZXRob2Qparx0AABVAE50cit7AAAoavl5AABYUAAAAHZhbGlkYXRlX3dyaXRlKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5CaWdRdWVyeURpc3Bvc2l0aW9uIHN0YXRpYyBtZXRob2Qpah9yAABVAE50cix7AAAoavl5AABYNQAAAEJpZ1F1ZXJ5U291cmNlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkpakhyAABVAE50ci17AAAoavl5AABYQgAAAGRpc3BsYXlfZGF0YSgpIChhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkuQmlnUXVlcnlTb3VyY2UgbWV0aG9kKWq8dgAAVQBOdHIuewAAKGr5eQAAWD0AAABmb3JtYXQgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5CaWdRdWVyeVNvdXJjZSBhdHRyaWJ1dGUpauhxAABVAE50ci97AAAoavl5AABYPAAAAHJlYWRlcigpIChhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkuQmlnUXVlcnlTb3VyY2UgbWV0aG9kKWoOcgAAVQBOdHIwewAAKGr5eQAAWDMAAABCaWdRdWVyeVNpbmsgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeSlq9nIAAFUATnRyMXsAAChq+XkAAFhAAAAAZGlzcGxheV9kYXRhKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5CaWdRdWVyeVNpbmsgbWV0aG9kKWq4cQAAVQBOdHIyewAAKGr5eQAAWEIAAABzY2hlbWFfYXNfanNvbigpIChhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkuQmlnUXVlcnlTaW5rIG1ldGhvZClqi3cAAFUATnRyM3sAAChq+XkAAFg7AAAAZm9ybWF0IChhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkuQmlnUXVlcnlTaW5rIGF0dHJpYnV0ZSlqDnUAAFUATnRyNHsAAChq+XkAAFg6AAAAd3JpdGVyKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5CaWdRdWVyeVNpbmsgbWV0aG9kKWr9cAAAVQBOdHI1ewAAKGr5eQAAWDYAAABXcml0ZVRvQmlnUXVlcnkgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeSlqnngAAFUATnRyNnsAAChq+XkAAFhaAAAAZ2V0X3RhYmxlX3NjaGVtYV9mcm9tX3N0cmluZygpIChhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkuV3JpdGVUb0JpZ1F1ZXJ5IHN0YXRpYyBtZXRob2Qparh3AABVAE50cjd7AAAoavl5AABYUgAAAHRhYmxlX3NjaGVtYV90b19kaWN0KCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5Xcml0ZVRvQmlnUXVlcnkgc3RhdGljIG1ldGhvZClqA3IAAFUATnRyOHsAAChq+XkAAFhTAAAAZ2V0X2RpY3RfdGFibGVfc2NoZW1hKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5Xcml0ZVRvQmlnUXVlcnkgc3RhdGljIG1ldGhvZClqf3UAAFUATnRyOXsAAChq+XkAAFg9AAAAZXhwYW5kKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5Xcml0ZVRvQmlnUXVlcnkgbWV0aG9kKWoRcQAAVQBOdHI6ewAAKGr5eQAAWEMAAABkaXNwbGF5X2RhdGEoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LldyaXRlVG9CaWdRdWVyeSBtZXRob2QpaiR0AABVAE50cjt7AABlaM1dcjx7AAAoVQZzaW5nbGVyPXsAAFgfAAAAYXBhY2hlX2JlYW0udHJhbnNmb3JtcyAobW9kdWxlKVgdAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnRyYW5zZm9ybXNVAE50cj57AABhaM5dcj97AAAoKGo9ewAAWC8AAABhcGFjaGVfYmVhbS50ZXN0aW5nLnBpcGVsaW5lX3ZlcmlmaWVycyAobW9kdWxlKVgtAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnRlc3RpbmcucGlwZWxpbmVfdmVyaWZpZXJzVQBOdHJAewAAKGo9ewAAWEYAAABQaXBlbGluZVN0YXRlTWF0Y2hlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udGVzdGluZy5waXBlbGluZV92ZXJpZmllcnMpagJ2AABVAE50ckF7AAAoaj17AABYUgAAAGRlc2NyaWJlX3RvKCkgKGFwYWNoZV9iZWFtLnRlc3RpbmcucGlwZWxpbmVfdmVyaWZpZXJzLlBpcGVsaW5lU3RhdGVNYXRjaGVyIG1ldGhvZClqPnIAAFUATnRyQnsAAChqPXsAAFhYAAAAZGVzY3JpYmVfbWlzbWF0Y2goKSAoYXBhY2hlX2JlYW0udGVzdGluZy5waXBlbGluZV92ZXJpZmllcnMuUGlwZWxpbmVTdGF0ZU1hdGNoZXIgbWV0aG9kKWp3cgAAVQBOdHJDewAAKGo9ewAAWFcAAAByZXRyeV9vbl9pb19lcnJvcl9hbmRfc2VydmVyX2Vycm9yKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50ZXN0aW5nLnBpcGVsaW5lX3ZlcmlmaWVycylqM3YAAFUATnRyRHsAAChqPXsAAFhFAAAARmlsZUNoZWNrc3VtTWF0Y2hlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udGVzdGluZy5waXBlbGluZV92ZXJpZmllcnMpauN4AABVAE50ckV7AAAoaj17AABYUQAAAGRlc2NyaWJlX3RvKCkgKGFwYWNoZV9iZWFtLnRlc3RpbmcucGlwZWxpbmVfdmVyaWZpZXJzLkZpbGVDaGVja3N1bU1hdGNoZXIgbWV0aG9kKWqhcAAAVQBOdHJGewAAKGo9ewAAWFcAAABkZXNjcmliZV9taXNtYXRjaCgpIChhcGFjaGVfYmVhbS50ZXN0aW5nLnBpcGVsaW5lX3ZlcmlmaWVycy5GaWxlQ2hlY2tzdW1NYXRjaGVyIG1ldGhvZClqD3EAAFUATnRyR3sAAGVoz11ySHsAAChq9nkAAFhBAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLnN0YW5kYXJkX3dpbmRvd19mbnNfcGIyX2dycGMgKG1vZHVsZSlYPwAAAG1vZHVsZS1hcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuc3RhbmRhcmRfd2luZG93X2Zuc19wYjJfZ3JwY1UATnRySXsAAGFo0F1ySnsAACgoaut6AABYIwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyIChtb2R1bGUpWCEAAABtb2R1bGUtYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXJVAE50ckt7AAAoaut6AABYNAAAAFBpcGVsaW5lUnVubmVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lcilqbHIAAFUATnRyTHsAAChq63oAAFg4AAAAcnVuKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lUnVubmVyIG1ldGhvZClq1HMAAFUATnRyTXsAAChq63oAAFg+AAAAcnVuX2FzeW5jKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lUnVubmVyIG1ldGhvZClqaHIAAFUATnRyTnsAAChq63oAAFhBAAAAcnVuX3BpcGVsaW5lKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lUnVubmVyIG1ldGhvZClqsXAAAFUATnRyT3sAAChq63oAAFg6AAAAYXBwbHkoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVSdW5uZXIgbWV0aG9kKWrzcwAAVQBOdHJQewAAKGrregAAWEUAAABhcHBseV9QVHJhbnNmb3JtKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lUnVubmVyIG1ldGhvZClq8XgAAFUATnRyUXsAAChq63oAAFhCAAAAcnVuX3RyYW5zZm9ybSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVJ1bm5lciBtZXRob2QpasV3AABVAE50clJ7AAAoaut6AABYMwAAAFBpcGVsaW5lU3RhdGUgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyKWpKdQAAVQBOdHJTewAAKGrregAAWDwAAABVTktOT1dOIChhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVN0YXRlIGF0dHJpYnV0ZSlq8XQAAFUATnRyVHsAAChq63oAAFg9AAAAU1RBUlRJTkcgKGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lU3RhdGUgYXR0cmlidXRlKWrecAAAVQBOdHJVewAAKGrregAAWDwAAABTVE9QUEVEIChhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVN0YXRlIGF0dHJpYnV0ZSlq0nEAAFUATnRyVnsAAChq63oAAFg8AAAAUlVOTklORyAoYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVTdGF0ZSBhdHRyaWJ1dGUpahN2AABVAE50cld7AAAoaut6AABYOQAAAERPTkUgKGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lU3RhdGUgYXR0cmlidXRlKWq1eAAAVQBOdHJYewAAKGrregAAWDsAAABGQUlMRUQgKGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lU3RhdGUgYXR0cmlidXRlKWrFdQAAVQBOdHJZewAAKGrregAAWD4AAABDQU5DRUxMRUQgKGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lU3RhdGUgYXR0cmlidXRlKWoWeQAAVQBOdHJaewAAKGrregAAWDwAAABVUERBVEVEIChhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVN0YXRlIGF0dHJpYnV0ZSlq+HgAAFUATnRyW3sAAChq63oAAFg9AAAARFJBSU5JTkcgKGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lU3RhdGUgYXR0cmlidXRlKWrpcgAAVQBOdHJcewAAKGrregAAWDwAAABEUkFJTkVEIChhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVN0YXRlIGF0dHJpYnV0ZSlqF3kAAFUATnRyXXsAAChq63oAAFg8AAAAUEVORElORyAoYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVTdGF0ZSBhdHRyaWJ1dGUpaoR5AABVAE50cl57AAAoaut6AABYPwAAAENBTkNFTExJTkcgKGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lU3RhdGUgYXR0cmlidXRlKWqGdgAAVQBOdHJfewAAKGrregAAWEUAAABpc190ZXJtaW5hbCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVN0YXRlIGNsYXNzIG1ldGhvZClq43YAAFUATnRyYHsAAChq63oAAFg0AAAAUGlwZWxpbmVSZXN1bHQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyKWrneAAAVQBOdHJhewAAKGrregAAWDsAAABzdGF0ZSAoYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVSZXN1bHQgYXR0cmlidXRlKWrEdQAAVQBOdHJiewAAKGrregAAWEYAAAB3YWl0X3VudGlsX2ZpbmlzaCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVJlc3VsdCBtZXRob2QpalV5AABVAE50cmN7AAAoaut6AABYOwAAAGNhbmNlbCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVJlc3VsdCBtZXRob2Qpar9yAABVAE50cmR7AAAoaut6AABYPAAAAG1ldHJpY3MoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVSZXN1bHQgbWV0aG9kKWrTdAAAVQBOdHJlewAAKGrregAAWEYAAABhZ2dyZWdhdGVkX3ZhbHVlcygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVJlc3VsdCBtZXRob2Qpahp1AABVAE50cmZ7AABlaNFdcmd7AAAoKGrregAAWD4AAABhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5xdWVyaWVzLnF1ZXJ5MiAobW9kdWxlKVg8AAAAbW9kdWxlLWFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLnF1ZXJpZXMucXVlcnkyVQBOdHJoewAAKGrregAAWEgAAABsb2FkKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5xdWVyaWVzLnF1ZXJ5MilqKHEAAFUATnRyaXsAAGVo0l1yansAACgoaut6AABYPgAAAGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLnF1ZXJpZXMucXVlcnkxIChtb2R1bGUpWDwAAABtb2R1bGUtYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsucXVlcmllcy5xdWVyeTFVAE50cmt7AAAoaut6AABYSAAAAGxvYWQoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLnF1ZXJpZXMucXVlcnkxKWp/dwAAVQBOdHJsewAAZWjTXXJtewAAKChq63oAAFg+AAAAYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsucXVlcmllcy5xdWVyeTAgKG1vZHVsZSlYPAAAAG1vZHVsZS1hcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5xdWVyaWVzLnF1ZXJ5MFUATnRybnsAAChq63oAAFhIAAAAbG9hZCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsucXVlcmllcy5xdWVyeTApald2AABVAE50cm97AABlaNRdcnB7AAAoKGqDegAAWEAAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkuZGlzcGxheV9tYW5hZ2VyIChtb2R1bGUpWD4AAABtb2R1bGUtYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LmRpc3BsYXlfbWFuYWdlclUATnRycXsAAChqg3oAAFhRAAAARGlzcGxheU1hbmFnZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5kaXNwbGF5X21hbmFnZXIpavZ2AABVAE50cnJ7AAAoaoN6AABYZwAAAHN0YXJ0X3BlcmlvZGljX3VwZGF0ZSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkuZGlzcGxheV9tYW5hZ2VyLkRpc3BsYXlNYW5hZ2VyIG1ldGhvZClqfXcAAFUATnRyc3sAAChqg3oAAFhmAAAAc3RvcF9wZXJpb2RpY191cGRhdGUoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LmRpc3BsYXlfbWFuYWdlci5EaXNwbGF5TWFuYWdlciBtZXRob2QpamJ4AABVAE50cnR7AAAoaoN6AABYYAAAAHVwZGF0ZV9kaXNwbGF5KCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5kaXNwbGF5X21hbmFnZXIuRGlzcGxheU1hbmFnZXIgbWV0aG9kKWqWcQAAVQBOdHJ1ewAAZWjfXXJ2ewAAKGr5eQAAWB0AAABhcGFjaGVfYmVhbS5pby5mbGluayAobW9kdWxlKVgbAAAAbW9kdWxlLWFwYWNoZV9iZWFtLmlvLmZsaW5rVQBOdHJ3ewAAYWi8XXJ4ewAAKChqBXoAAFgnAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyIChtb2R1bGUpWCUAAABtb2R1bGUtYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyVQBOdHJ5ewAAKGoFegAAWDoAAABBY2N1bXVsYXRpb25Nb2RlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIparh1AABVAE50cnp7AAAoagV6AABYRgAAAERJU0NBUkRJTkcgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BY2N1bXVsYXRpb25Nb2RlIGF0dHJpYnV0ZSlq3ngAAFUATnRye3sAAChqBXoAAFhIAAAAQUNDVU1VTEFUSU5HIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWNjdW11bGF0aW9uTW9kZSBhdHRyaWJ1dGUpallyAABVAE50cnx7AAAoagV6AABYMwAAAFRyaWdnZXJGbiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyKWoqdQAAVQBOdHJ9ewAAKGoFegAAWD4AAABvbl9lbGVtZW50KCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5UcmlnZ2VyRm4gbWV0aG9kKWoreQAAVQBOdHJ+ewAAKGoFegAAWDwAAABvbl9tZXJnZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuVHJpZ2dlckZuIG1ldGhvZClqNHUAAFUATnRyf3sAAChqBXoAAFg/AAAAc2hvdWxkX2ZpcmUoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLlRyaWdnZXJGbiBtZXRob2Qpapl4AABVAE50coB7AAAoagV6AABYOwAAAG9uX2ZpcmUoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLlRyaWdnZXJGbiBtZXRob2QpalB0AABVAE50coF7AAAoagV6AABYOQAAAHJlc2V0KCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5UcmlnZ2VyRm4gbWV0aG9kKWpNcQAAVQBOdHKCewAAKGoFegAAWEoAAABmcm9tX3J1bm5lcl9hcGkoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLlRyaWdnZXJGbiBzdGF0aWMgbWV0aG9kKWoVdAAAVQBOdHKDewAAKGoFegAAWEEAAAB0b19ydW5uZXJfYXBpKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5UcmlnZ2VyRm4gbWV0aG9kKWqWeAAAVQBOdHKEewAAKGoFegAAWDgAAABEZWZhdWx0VHJpZ2dlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyKWqLcgAAVQBOdHKFewAAKGoFegAAWEMAAABvbl9lbGVtZW50KCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5EZWZhdWx0VHJpZ2dlciBtZXRob2Qpalp2AABVAE50coZ7AAAoagV6AABYQQAAAG9uX21lcmdlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5EZWZhdWx0VHJpZ2dlciBtZXRob2QpapJ1AABVAE50cod7AAAoagV6AABYRAAAAHNob3VsZF9maXJlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5EZWZhdWx0VHJpZ2dlciBtZXRob2QpasRzAABVAE50coh7AAAoagV6AABYQAAAAG9uX2ZpcmUoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkRlZmF1bHRUcmlnZ2VyIG1ldGhvZClqxHYAAFUATnRyiXsAAChqBXoAAFg+AAAAcmVzZXQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkRlZmF1bHRUcmlnZ2VyIG1ldGhvZClq7HEAAFUATnRyinsAAChqBXoAAFhPAAAAZnJvbV9ydW5uZXJfYXBpKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5EZWZhdWx0VHJpZ2dlciBzdGF0aWMgbWV0aG9kKWqCdgAAVQBOdHKLewAAKGoFegAAWEYAAAB0b19ydW5uZXJfYXBpKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5EZWZhdWx0VHJpZ2dlciBtZXRob2Qpajt1AABVAE50cox7AAAoagV6AABYPQAAAEFmdGVyUHJvY2Vzc2luZ1RpbWUgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlcilq5HIAAFUATnRyjXsAAChqBXoAAFhIAAAAb25fZWxlbWVudCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJQcm9jZXNzaW5nVGltZSBtZXRob2Qpagp3AABVAE50co57AAAoagV6AABYRgAAAG9uX21lcmdlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlclByb2Nlc3NpbmdUaW1lIG1ldGhvZClqR3MAAFUATnRyj3sAAChqBXoAAFhJAAAAc2hvdWxkX2ZpcmUoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyUHJvY2Vzc2luZ1RpbWUgbWV0aG9kKWp8cAAAVQBOdHKQewAAKGoFegAAWEUAAABvbl9maXJlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlclByb2Nlc3NpbmdUaW1lIG1ldGhvZClq4HYAAFUATnRykXsAAChqBXoAAFhDAAAAcmVzZXQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyUHJvY2Vzc2luZ1RpbWUgbWV0aG9kKWoDdwAAVQBOdHKSewAAKGoFegAAWFQAAABmcm9tX3J1bm5lcl9hcGkoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyUHJvY2Vzc2luZ1RpbWUgc3RhdGljIG1ldGhvZClqKXEAAFUATnRyk3sAAChqBXoAAFhLAAAAdG9fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJQcm9jZXNzaW5nVGltZSBtZXRob2Qpal51AABVAE50cpR7AAAoagV6AABYOAAAAEFmdGVyV2F0ZXJtYXJrIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIpapl1AABVAE50cpV7AAAoagV6AABYQgAAAExBVEVfVEFHIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJXYXRlcm1hcmsgYXR0cmlidXRlKWqIdQAAVQBOdHKWewAAKGoFegAAWEAAAABpc19sYXRlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlcldhdGVybWFyayBtZXRob2QparZxAABVAE50cpd7AAAoagV6AABYQwAAAG9uX2VsZW1lbnQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyV2F0ZXJtYXJrIG1ldGhvZClq7nIAAFUATnRymHsAAChqBXoAAFhBAAAAb25fbWVyZ2UoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyV2F0ZXJtYXJrIG1ldGhvZClqm3QAAFUATnRymXsAAChqBXoAAFhEAAAAc2hvdWxkX2ZpcmUoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyV2F0ZXJtYXJrIG1ldGhvZClqynAAAFUATnRymnsAAChqBXoAAFhAAAAAb25fZmlyZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJXYXRlcm1hcmsgbWV0aG9kKWq1cgAAVQBOdHKbewAAKGoFegAAWD4AAAByZXNldCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJXYXRlcm1hcmsgbWV0aG9kKWrIcwAAVQBOdHKcewAAKGoFegAAWE8AAABmcm9tX3J1bm5lcl9hcGkoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyV2F0ZXJtYXJrIHN0YXRpYyBtZXRob2QpailyAABVAE50cp17AAAoagV6AABYRgAAAHRvX3J1bm5lcl9hcGkoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyV2F0ZXJtYXJrIG1ldGhvZClqgXAAAFUATnRynnsAAChqBXoAAFg0AAAAQWZ0ZXJDb3VudCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyKWrGcwAAVQBOdHKfewAAKGoFegAAWD8AAABDT1VOVF9UQUcgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckNvdW50IGF0dHJpYnV0ZSlq03AAAFUATnRyoHsAAChqBXoAAFg/AAAAb25fZWxlbWVudCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJDb3VudCBtZXRob2QpaspyAABVAE50cqF7AAAoagV6AABYPQAAAG9uX21lcmdlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckNvdW50IG1ldGhvZClqPHQAAFUATnRyonsAAChqBXoAAFhAAAAAc2hvdWxkX2ZpcmUoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyQ291bnQgbWV0aG9kKWppeAAAVQBOdHKjewAAKGoFegAAWDwAAABvbl9maXJlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckNvdW50IG1ldGhvZClqi3EAAFUATnRypHsAAChqBXoAAFg6AAAAcmVzZXQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyQ291bnQgbWV0aG9kKWo3dQAAVQBOdHKlewAAKGoFegAAWEsAAABmcm9tX3J1bm5lcl9hcGkoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyQ291bnQgc3RhdGljIG1ldGhvZClq03UAAFUATnRypnsAAChqBXoAAFhCAAAAdG9fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJDb3VudCBtZXRob2Qpap12AABVAE50cqd7AAAoagV6AABYNAAAAFJlcGVhdGVkbHkgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlcilq+3YAAFUATnRyqHsAAChqBXoAAFg/AAAAb25fZWxlbWVudCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuUmVwZWF0ZWRseSBtZXRob2Qpah13AABVAE50cql7AAAoagV6AABYPQAAAG9uX21lcmdlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5SZXBlYXRlZGx5IG1ldGhvZClqpHYAAFUATnRyqnsAAChqBXoAAFhAAAAAc2hvdWxkX2ZpcmUoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLlJlcGVhdGVkbHkgbWV0aG9kKWpgcAAAVQBOdHKrewAAKGoFegAAWDwAAABvbl9maXJlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5SZXBlYXRlZGx5IG1ldGhvZClq83EAAFUATnRyrHsAAChqBXoAAFg6AAAAcmVzZXQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLlJlcGVhdGVkbHkgbWV0aG9kKWpneQAAVQBOdHKtewAAKGoFegAAWEsAAABmcm9tX3J1bm5lcl9hcGkoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLlJlcGVhdGVkbHkgc3RhdGljIG1ldGhvZClqr3UAAFUATnRyrnsAAChqBXoAAFhCAAAAdG9fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuUmVwZWF0ZWRseSBtZXRob2Qpaid2AABVAE50cq97AAAoagV6AABYMgAAAEFmdGVyQW55IChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIpasBzAABVAE50crB7AAAoagV6AABYPQAAAGNvbWJpbmVfb3AoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyQW55IG1ldGhvZClqQXgAAFUATnRysXsAAChqBXoAAFgyAAAAQWZ0ZXJBbGwgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlcilq3nMAAFUATnRysnsAAChqBXoAAFg9AAAAY29tYmluZV9vcCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJBbGwgbWV0aG9kKWp/dgAAVQBOdHKzewAAKGoFegAAWDMAAABBZnRlckVhY2ggKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlcilqZXYAAFUATnRytHsAAChqBXoAAFg+AAAASU5ERVhfVEFHIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJFYWNoIGF0dHJpYnV0ZSlqAHEAAFUATnRytXsAAChqBXoAAFg+AAAAb25fZWxlbWVudCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJFYWNoIG1ldGhvZClq3HgAAFUATnRytnsAAChqBXoAAFg8AAAAb25fbWVyZ2UoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyRWFjaCBtZXRob2Qpaqt3AABVAE50crd7AAAoagV6AABYPwAAAHNob3VsZF9maXJlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckVhY2ggbWV0aG9kKWoqeAAAVQBOdHK4ewAAKGoFegAAWDsAAABvbl9maXJlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckVhY2ggbWV0aG9kKWokdgAAVQBOdHK5ewAAKGoFegAAWDkAAAByZXNldCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJFYWNoIG1ldGhvZClqLnQAAFUATnRyunsAAChqBXoAAFhKAAAAZnJvbV9ydW5uZXJfYXBpKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckVhY2ggc3RhdGljIG1ldGhvZClq8XMAAFUATnRyu3sAAChqBXoAAFhBAAAAdG9fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJFYWNoIG1ldGhvZClqOXgAAFUATnRyvHsAAChqBXoAAFgzAAAAT3JGaW5hbGx5IChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIpapR1AABVAE50cr17AAAoagV6AABYSgAAAGZyb21fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuT3JGaW5hbGx5IHN0YXRpYyBtZXRob2Qpait3AABVAE50cr57AAAoagV6AABYQQAAAHRvX3J1bm5lcl9hcGkoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLk9yRmluYWxseSBtZXRob2Qpapl0AABVAE50cr97AABlaNddcsB7AAAoKGrFegAAWDYAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC50ZXN0X2RpcmVjdF9ydW5uZXIgKG1vZHVsZSlYNAAAAG1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC50ZXN0X2RpcmVjdF9ydW5uZXJVAE50csF7AAAoasV6AABYSQAAAFRlc3REaXJlY3RSdW5uZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnRlc3RfZGlyZWN0X3J1bm5lcilqOnUAAFUATnRywnsAAChqxXoAAFhWAAAAcnVuX3BpcGVsaW5lKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnRlc3RfZGlyZWN0X3J1bm5lci5UZXN0RGlyZWN0UnVubmVyIG1ldGhvZClq4HEAAFUATnRyw3sAAGVo+l1yxHsAACgoVQZzaW5nbGVyxXsAAFgpAAAAYXBhY2hlX2JlYW0uaW8uc291cmNlX3Rlc3RfdXRpbHMgKG1vZHVsZSlYJwAAAG1vZHVsZS1hcGFjaGVfYmVhbS5pby5zb3VyY2VfdGVzdF91dGlsc1UATnRyxnsAAChqxXsAAFg/AAAAcmVhZF9mcm9tX3NvdXJjZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW8uc291cmNlX3Rlc3RfdXRpbHMpaqBxAABVAE50csd7AAAoasV7AABYVAAAAGFzc2VydF9zb3VyY2VzX2VxdWFsX3JlZmVyZW5jZV9zb3VyY2UoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmlvLnNvdXJjZV90ZXN0X3V0aWxzKWozcgAAVQBOdHLIewAAKGrFewAAWE0AAABhc3NlcnRfcmVlbnRyYW50X3JlYWRzX3N1Y2NlZWQoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmlvLnNvdXJjZV90ZXN0X3V0aWxzKWp+cAAAVQBOdHLJewAAKGrFewAAWFAAAABhc3NlcnRfc3BsaXRfYXRfZnJhY3Rpb25fYmVoYXZpb3IoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmlvLnNvdXJjZV90ZXN0X3V0aWxzKWp1eQAAVQBOdHLKewAAKGrFewAAWF8AAABhc3NlcnRfc3BsaXRfYXRfZnJhY3Rpb25fc3VjY2VlZHNfYW5kX2NvbnNpc3RlbnQoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmlvLnNvdXJjZV90ZXN0X3V0aWxzKWovcQAAVQBOdHLLewAAKGrFewAAWE0AAABhc3NlcnRfc3BsaXRfYXRfZnJhY3Rpb25fZmFpbHMoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmlvLnNvdXJjZV90ZXN0X3V0aWxzKWrocgAAVQBOdHLMewAAKGrFewAAWE4AAABhc3NlcnRfc3BsaXRfYXRfZnJhY3Rpb25fYmluYXJ5KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5pby5zb3VyY2VfdGVzdF91dGlscylqVHUAAFUATnRyzXsAAChqxXsAAFhSAAAAYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2V4aGF1c3RpdmUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmlvLnNvdXJjZV90ZXN0X3V0aWxzKWrGcQAAVQBOdHLOewAAZWjZXXLPewAAKChq+XkAAFgiAAAAYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbSAobW9kdWxlKVggAAAAbW9kdWxlLWFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1VAE50ctB7AAAoavl5AABYNQAAAENvbXByZXNzaW9uVHlwZXMgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0paiN2AABVAE50ctF7AAAoavl5AABYOwAAAEFVVE8gKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3Npb25UeXBlcyBhdHRyaWJ1dGUpamlxAABVAE50ctJ7AAAoavl5AABYPAAAAEJaSVAyIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzaW9uVHlwZXMgYXR0cmlidXRlKWo5dgAAVQBOdHLTewAAKGr5eQAAWDsAAABHWklQIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzaW9uVHlwZXMgYXR0cmlidXRlKWqZeQAAVQBOdHLUewAAKGr5eQAAWEMAAABVTkNPTVBSRVNTRUQgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3Npb25UeXBlcyBhdHRyaWJ1dGUpak92AABVAE50ctV7AAAoavl5AABYVQAAAGlzX3ZhbGlkX2NvbXByZXNzaW9uX3R5cGUoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5Db21wcmVzc2lvblR5cGVzIGNsYXNzIG1ldGhvZClqXXUAAFUATnRy1nsAAChq+XkAAFhFAAAAbWltZV90eXBlKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3Npb25UeXBlcyBjbGFzcyBtZXRob2Qpag95AABVAE50ctd7AAAoavl5AABYUwAAAGRldGVjdF9jb21wcmVzc2lvbl90eXBlKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3Npb25UeXBlcyBjbGFzcyBtZXRob2QpahpxAABVAE50cth7AAAoavl5AABYMwAAAENvbXByZXNzZWRGaWxlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtKWr/dgAAVQBOdHLZewAAKGr5eQAAWDwAAAByZWFkYWJsZSgpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzZWRGaWxlIG1ldGhvZClqCHUAAFUATnRy2nsAAChq+XkAAFg9AAAAd3JpdGVhYmxlKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3NlZEZpbGUgbWV0aG9kKWqlcwAAVQBOdHLbewAAKGr5eQAAWDkAAAB3cml0ZSgpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzZWRGaWxlIG1ldGhvZClqAXMAAFUATnRy3HsAAChq+XkAAFg4AAAAcmVhZCgpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzZWRGaWxlIG1ldGhvZClqcHkAAFUATnRy3XsAAChq+XkAAFg8AAAAcmVhZGxpbmUoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5Db21wcmVzc2VkRmlsZSBtZXRob2Qpat13AABVAE50ct57AAAoavl5AABYOgAAAGNsb3NlZCgpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzZWRGaWxlIG1ldGhvZClq1HQAAFUATnRy33sAAChq+XkAAFg5AAAAY2xvc2UoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5Db21wcmVzc2VkRmlsZSBtZXRob2Qpal95AABVAE50cuB7AAAoavl5AABYOQAAAGZsdXNoKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3NlZEZpbGUgbWV0aG9kKWoHcwAAVQBOdHLhewAAKGr5eQAAWD0AAABzZWVrYWJsZSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5Db21wcmVzc2VkRmlsZSBhdHRyaWJ1dGUpahp0AABVAE50cuJ7AAAoavl5AABYOAAAAHNlZWsoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5Db21wcmVzc2VkRmlsZSBtZXRob2Qpahd3AABVAE50cuN7AAAoavl5AABYOAAAAHRlbGwoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5Db21wcmVzc2VkRmlsZSBtZXRob2Qpajl1AABVAE50cuR7AAAoavl5AABYMQAAAEZpbGVNZXRhZGF0YSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbSlqp3gAAFUATnRy5XsAAChq+XkAAFgwAAAATWF0Y2hSZXN1bHQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0pak52AABVAE50cuZ7AAAoavl5AABYLwAAAEZpbGVTeXN0ZW0gKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0par5wAABVAE50cud7AAAoavl5AABYOwAAAENIVU5LX1NJWkUgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uRmlsZVN5c3RlbSBhdHRyaWJ1dGUpam51AABVAE50cuh7AAAoavl5AABYPAAAAHNjaGVtZSgpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkZpbGVTeXN0ZW0gY2xhc3MgbWV0aG9kKWoGdQAAVQBOdHLpewAAKGr5eQAAWDQAAABqb2luKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uRmlsZVN5c3RlbSBtZXRob2Qpav1xAABVAE50cup7AAAoavl5AABYNQAAAHNwbGl0KCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uRmlsZVN5c3RlbSBtZXRob2Qpamt0AABVAE50cut7AAAoavl5AABYNgAAAG1rZGlycygpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkZpbGVTeXN0ZW0gbWV0aG9kKWp1dgAAVQBOdHLsewAAKGr5eQAAWDgAAABoYXNfZGlycygpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkZpbGVTeXN0ZW0gbWV0aG9kKWqUdAAAVQBOdHLtewAAKGr5eQAAWDsAAABtYXRjaF9maWxlcygpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkZpbGVTeXN0ZW0gbWV0aG9kKWo+eAAAVQBOdHLuewAAKGr5eQAAWEgAAAB0cmFuc2xhdGVfcGF0dGVybigpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkZpbGVTeXN0ZW0gc3RhdGljIG1ldGhvZClq23QAAFUATnRy73sAAChq+XkAAFg1AAAAbWF0Y2goKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5GaWxlU3lzdGVtIG1ldGhvZClqnHAAAFUATnRy8HsAAChq+XkAAFg2AAAAY3JlYXRlKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uRmlsZVN5c3RlbSBtZXRob2Qpaod1AABVAE50cvF7AAAoavl5AABYNAAAAG9wZW4oKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5GaWxlU3lzdGVtIG1ldGhvZClqkXEAAFUATnRy8nsAAChq+XkAAFg0AAAAY29weSgpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkZpbGVTeXN0ZW0gbWV0aG9kKWqXcwAAVQBOdHLzewAAKGr5eQAAWDYAAAByZW5hbWUoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5GaWxlU3lzdGVtIG1ldGhvZClqJngAAFUATnRy9HsAAChq+XkAAFg2AAAAZXhpc3RzKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uRmlsZVN5c3RlbSBtZXRob2Qpajl5AABVAE50cvV7AAAoavl5AABYNAAAAHNpemUoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5GaWxlU3lzdGVtIG1ldGhvZClqh3EAAFUATnRy9nsAAChq+XkAAFg8AAAAbGFzdF91cGRhdGVkKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uRmlsZVN5c3RlbSBtZXRob2QpaqR0AABVAE50cvd7AAAoavl5AABYOAAAAGNoZWNrc3VtKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uRmlsZVN5c3RlbSBtZXRob2QpauJ4AABVAE50cvh7AAAoavl5AABYNgAAAGRlbGV0ZSgpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkZpbGVTeXN0ZW0gbWV0aG9kKWqycAAAVQBOdHL5ewAAZWjaXXL6ewAAKChqPXsAAFgoAAAAYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbSAobW9kdWxlKVgmAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9zdHJlYW1VAE50cvt7AAAoaj17AABYMAAAAEV2ZW50IChjbGFzcyBpbiBhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtKWq4eAAAVQBOdHL8ewAAKGo9ewAAWDcAAABFbGVtZW50RXZlbnQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9zdHJlYW0pag55AABVAE50cv17AAAoaj17AABYOQAAAFdhdGVybWFya0V2ZW50IChjbGFzcyBpbiBhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtKWoMdwAAVQBOdHL+ewAAKGo9ewAAWD4AAABQcm9jZXNzaW5nVGltZUV2ZW50IChjbGFzcyBpbiBhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtKWp5dgAAVQBOdHL/ewAAKGo9ewAAWDUAAABUZXN0U3RyZWFtIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtKWomcgAAVQBOdHIAfAAAKGo9ewAAWEMAAABnZXRfd2luZG93aW5nKCkgKGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9zdHJlYW0uVGVzdFN0cmVhbSBtZXRob2Qpaqd5AABVAE50cgF8AAAoaj17AABYPAAAAGV4cGFuZCgpIChhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtLlRlc3RTdHJlYW0gbWV0aG9kKWo9eQAAVQBOdHICfAAAKGo9ewAAWEIAAABhZGRfZWxlbWVudHMoKSAoYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbS5UZXN0U3RyZWFtIG1ldGhvZClqA3UAAFUATnRyA3wAAChqPXsAAFhKAAAAYWR2YW5jZV93YXRlcm1hcmtfdG8oKSAoYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbS5UZXN0U3RyZWFtIG1ldGhvZClqB3cAAFUATnRyBHwAAChqPXsAAFhTAAAAYWR2YW5jZV93YXRlcm1hcmtfdG9faW5maW5pdHkoKSAoYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbS5UZXN0U3RyZWFtIG1ldGhvZClq43UAAFUATnRyBXwAAChqPXsAAFhNAAAAYWR2YW5jZV9wcm9jZXNzaW5nX3RpbWUoKSAoYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbS5UZXN0U3RyZWFtIG1ldGhvZClquHkAAFUATnRyBnwAAGVo211yB3wAACgoasV7AABYHQAAAGFwYWNoZV9iZWFtLmlvLnV0aWxzIChtb2R1bGUpWBsAAABtb2R1bGUtYXBhY2hlX2JlYW0uaW8udXRpbHNVAE50cgh8AAAoasV7AABYLgAAAENvdW50aW5nU291cmNlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby51dGlscylqkHEAAFUATnRyCXwAAChqxXsAAFg8AAAAZXN0aW1hdGVfc2l6ZSgpIChhcGFjaGVfYmVhbS5pby51dGlscy5Db3VudGluZ1NvdXJjZSBtZXRob2QpaodyAABVAE50cgp8AAAoasV7AABYQAAAAGdldF9yYW5nZV90cmFja2VyKCkgKGFwYWNoZV9iZWFtLmlvLnV0aWxzLkNvdW50aW5nU291cmNlIG1ldGhvZClq13gAAFUATnRyC3wAAChqxXsAAFgzAAAAcmVhZCgpIChhcGFjaGVfYmVhbS5pby51dGlscy5Db3VudGluZ1NvdXJjZSBtZXRob2QpavFwAABVAE50cgx8AAAoasV7AABYNAAAAHNwbGl0KCkgKGFwYWNoZV9iZWFtLmlvLnV0aWxzLkNvdW50aW5nU291cmNlIG1ldGhvZClqEHIAAFUATnRyDXwAAGVo3F1yDnwAACgoanx6AABYNwAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmVfd3JpdGVfaXRfcGlwZWxpbmUgKG1vZHVsZSlYNQAAAG1vZHVsZS1hcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlX3dyaXRlX2l0X3BpcGVsaW5lVQBOdHIPfAAAKGp8egAAWFcAAABuZXdfcGlwZWxpbmVfd2l0aF9qb2JfbmFtZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZV93cml0ZV9pdF9waXBlbGluZSlqa3cAAFUATnRyEHwAAChqfHoAAFhHAAAARW50aXR5V3JhcHBlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZV93cml0ZV9pdF9waXBlbGluZSlqEHgAAFUATnRyEXwAAChqfHoAAFhTAAAAbWFrZV9lbnRpdHkoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZV93cml0ZV9pdF9waXBlbGluZS5FbnRpdHlXcmFwcGVyIG1ldGhvZClqAXQAAFUATnRyEnwAAChqfHoAAFhQAAAAbWFrZV9hbmNlc3Rvcl9xdWVyeSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZV93cml0ZV9pdF9waXBlbGluZSlqNXIAAFUATnRyE3wAAChqfHoAAFhAAAAAcnVuKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlX3dyaXRlX2l0X3BpcGVsaW5lKWrmdgAAVQBOdHIUfAAAZWjdXXIVfAAAKGqwegAAWBsAAABhcGFjaGVfYmVhbS5jb2RlcnMgKG1vZHVsZSlYGQAAAG1vZHVsZS1hcGFjaGVfYmVhbS5jb2RlcnNVAE50chZ8AABhaN5dchd8AAAoarB6AABYIQAAAGFwYWNoZV9iZWFtLmludGVybmFsLmdjcCAobW9kdWxlKVgfAAAAbW9kdWxlLWFwYWNoZV9iZWFtLmludGVybmFsLmdjcFUATnRyGHwAAGFo1V1yGXwAACgoasV7AABYJgAAAGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzIChtb2R1bGUpWCQAAABtb2R1bGUtYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnNVAE50chp8AAAoasV7AABYOwAAAE9mZnNldFJhbmdlVHJhY2tlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMpanVzAABVAE50cht8AAAoasV7AABYTAAAAE9GRlNFVF9JTkZJTklUWSAoYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT2Zmc2V0UmFuZ2VUcmFja2VyIGF0dHJpYnV0ZSlqynMAAFUATnRyHHwAAChqxXsAAFhKAAAAc3RhcnRfcG9zaXRpb24oKSAoYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT2Zmc2V0UmFuZ2VUcmFja2VyIG1ldGhvZClqsHIAAFUATnRyHXwAAChqxXsAAFhJAAAAc3RvcF9wb3NpdGlvbigpIChhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PZmZzZXRSYW5nZVRyYWNrZXIgbWV0aG9kKWpCdwAAVQBOdHIefAAAKGrFewAAWE4AAABsYXN0X3JlY29yZF9zdGFydCAoYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT2Zmc2V0UmFuZ2VUcmFja2VyIGF0dHJpYnV0ZSlqb3gAAFUATnRyH3wAAChqxXsAAFhFAAAAdHJ5X2NsYWltKCkgKGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLk9mZnNldFJhbmdlVHJhY2tlciBtZXRob2QpamF0AABVAE50ciB8AAAoasV7AABYUAAAAHNldF9jdXJyZW50X3Bvc2l0aW9uKCkgKGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLk9mZnNldFJhbmdlVHJhY2tlciBtZXRob2QpanxzAABVAE50ciF8AAAoasV7AABYRQAAAHRyeV9zcGxpdCgpIChhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PZmZzZXRSYW5nZVRyYWNrZXIgbWV0aG9kKWqmdAAAVQBOdHIifAAAKGrFewAAWE0AAABmcmFjdGlvbl9jb25zdW1lZCgpIChhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PZmZzZXRSYW5nZVRyYWNrZXIgbWV0aG9kKWrncQAAVQBOdHIjfAAAKGrFewAAWFAAAABwb3NpdGlvbl9hdF9mcmFjdGlvbigpIChhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PZmZzZXRSYW5nZVRyYWNrZXIgbWV0aG9kKWpJdQAAVQBOdHIkfAAAKGrFewAAWEgAAABzcGxpdF9wb2ludHMoKSAoYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT2Zmc2V0UmFuZ2VUcmFja2VyIG1ldGhvZClq1nUAAFUATnRyJXwAAChqxXsAAFhfAAAAc2V0X3NwbGl0X3BvaW50c191bmNsYWltZWRfY2FsbGJhY2soKSAoYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT2Zmc2V0UmFuZ2VUcmFja2VyIG1ldGhvZClqcnMAAFUATnRyJnwAAChqxXsAAFhEAAAAT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2VycylqOXEAAFUATnRyJ3wAAChqxXsAAFhPAAAAVU5TVEFSVEVEIChhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXIgYXR0cmlidXRlKWpNdAAAVQBOdHIofAAAKGrFewAAWFMAAABzdGFydF9wb3NpdGlvbigpIChhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXIgbWV0aG9kKWqvdgAAVQBOdHIpfAAAKGrFewAAWFIAAABzdG9wX3Bvc2l0aW9uKCkgKGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLk9yZGVyZWRQb3NpdGlvblJhbmdlVHJhY2tlciBtZXRob2Qpagh5AABVAE50cip8AAAoasV7AABYTgAAAHRyeV9jbGFpbSgpIChhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXIgbWV0aG9kKWqYcwAAVQBOdHIrfAAAKGrFewAAWFkAAABwb3NpdGlvbl9hdF9mcmFjdGlvbigpIChhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXIgbWV0aG9kKWpjdgAAVQBOdHIsfAAAKGrFewAAWE4AAAB0cnlfc3BsaXQoKSAoYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyIG1ldGhvZClqgHkAAFUATnRyLXwAAChqxXsAAFhWAAAAZnJhY3Rpb25fY29uc3VtZWQoKSAoYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyIG1ldGhvZClqgncAAFUATnRyLnwAAChqxXsAAFhZAAAAcG9zaXRpb25fdG9fZnJhY3Rpb24oKSAoYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyIG1ldGhvZClqH3QAAFUATnRyL3wAAChqxXsAAFhZAAAAZnJhY3Rpb25fdG9fcG9zaXRpb24oKSAoYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyIG1ldGhvZClqMHUAAFUATnRyMHwAAChqxXsAAFhBAAAAVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycylqk3gAAFUATnRyMXwAAChqxXsAAFhQAAAAc3RhcnRfcG9zaXRpb24oKSAoYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyIG1ldGhvZClqaHUAAFUATnRyMnwAAChqxXsAAFhPAAAAc3RvcF9wb3NpdGlvbigpIChhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5VbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIgbWV0aG9kKWpvdQAAVQBOdHIzfAAAKGrFewAAWFYAAABwb3NpdGlvbl9hdF9mcmFjdGlvbigpIChhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5VbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIgbWV0aG9kKWoXdQAAVQBOdHI0fAAAKGrFewAAWEsAAAB0cnlfY2xhaW0oKSAoYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyIG1ldGhvZClqoHAAAFUATnRyNXwAAChqxXsAAFhLAAAAdHJ5X3NwbGl0KCkgKGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLlVuc3BsaXR0YWJsZVJhbmdlVHJhY2tlciBtZXRob2Qpag14AABVAE50cjZ8AAAoasV7AABYVgAAAHNldF9jdXJyZW50X3Bvc2l0aW9uKCkgKGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLlVuc3BsaXR0YWJsZVJhbmdlVHJhY2tlciBtZXRob2QpamtyAABVAE50cjd8AAAoasV7AABYUwAAAGZyYWN0aW9uX2NvbnN1bWVkKCkgKGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLlVuc3BsaXR0YWJsZVJhbmdlVHJhY2tlciBtZXRob2QpahJ4AABVAE50cjh8AAAoasV7AABYTgAAAHNwbGl0X3BvaW50cygpIChhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5VbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIgbWV0aG9kKWoddAAAVQBOdHI5fAAAKGrFewAAWGUAAABzZXRfc3BsaXRfcG9pbnRzX3VuY2xhaW1lZF9jYWxsYmFjaygpIChhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5VbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIgbWV0aG9kKWq5cAAAVQBOdHI6fAAAKGrFewAAWEUAAABMZXhpY29ncmFwaGljS2V5UmFuZ2VUcmFja2VyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2VycylqWXYAAFUATnRyO3wAAChqxXsAAFhgAAAAZnJhY3Rpb25fdG9fcG9zaXRpb24oKSAoYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuTGV4aWNvZ3JhcGhpY0tleVJhbmdlVHJhY2tlciBjbGFzcyBtZXRob2QparJ3AABVAE50cjx8AAAoasV7AABYYAAAAHBvc2l0aW9uX3RvX2ZyYWN0aW9uKCkgKGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLkxleGljb2dyYXBoaWNLZXlSYW5nZVRyYWNrZXIgY2xhc3MgbWV0aG9kKWoEcgAAVQBOdHI9fAAAZWjgXXI+fAAAKChqxXsAAFghAAAAYXBhY2hlX2JlYW0uaW8ucGFycXVldGlvIChtb2R1bGUpWB8AAABtb2R1bGUtYXBhY2hlX2JlYW0uaW8ucGFycXVldGlvVQBOdHI/fAAAKGrFewAAWDMAAABSZWFkRnJvbVBhcnF1ZXQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLnBhcnF1ZXRpbylqu3kAAFUATnRyQHwAAChqxXsAAFg6AAAAZXhwYW5kKCkgKGFwYWNoZV9iZWFtLmlvLnBhcnF1ZXRpby5SZWFkRnJvbVBhcnF1ZXQgbWV0aG9kKWqdcgAAVQBOdHJBfAAAKGrFewAAWEAAAABkaXNwbGF5X2RhdGEoKSAoYXBhY2hlX2JlYW0uaW8ucGFycXVldGlvLlJlYWRGcm9tUGFycXVldCBtZXRob2QpamNzAABVAE50ckJ8AAAoasV7AABYNgAAAFJlYWRBbGxGcm9tUGFycXVldCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8ucGFycXVldGlvKWoScwAAVQBOdHJDfAAAKGrFewAAWFMAAABERUZBVUxUX0RFU0lSRURfQlVORExFX1NJWkUgKGFwYWNoZV9iZWFtLmlvLnBhcnF1ZXRpby5SZWFkQWxsRnJvbVBhcnF1ZXQgYXR0cmlidXRlKWrYdAAAVQBOdHJEfAAAKGrFewAAWD0AAABleHBhbmQoKSAoYXBhY2hlX2JlYW0uaW8ucGFycXVldGlvLlJlYWRBbGxGcm9tUGFycXVldCBtZXRob2QpasNxAABVAE50ckV8AAAoasV7AABYMgAAAFdyaXRlVG9QYXJxdWV0IChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5wYXJxdWV0aW8paop3AABVAE50ckZ8AAAoasV7AABYOQAAAGV4cGFuZCgpIChhcGFjaGVfYmVhbS5pby5wYXJxdWV0aW8uV3JpdGVUb1BhcnF1ZXQgbWV0aG9kKWo1eAAAVQBOdHJHfAAAKGrFewAAWD8AAABkaXNwbGF5X2RhdGEoKSAoYXBhY2hlX2JlYW0uaW8ucGFycXVldGlvLldyaXRlVG9QYXJxdWV0IG1ldGhvZClqj3YAAFUATnRySHwAAGVo4V1ySXwAACgoaut6AABYJwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX2NvbW1vbiAobW9kdWxlKVglAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX2NvbW1vblUATnRySnwAAChq63oAAFhBAAAAU3BsaXR0YWJsZVBhckRvT3ZlcnJpZGUgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX2NvbW1vbilq6nYAAFUATnRyS3wAAChq63oAAFhJAAAAbWF0Y2hlcygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl9jb21tb24uU3BsaXR0YWJsZVBhckRvT3ZlcnJpZGUgbWV0aG9kKWoZeAAAVQBOdHJMfAAAKGrregAAWFsAAABnZXRfcmVwbGFjZW1lbnRfdHJhbnNmb3JtKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX2NvbW1vbi5TcGxpdHRhYmxlUGFyRG9PdmVycmlkZSBtZXRob2QpaqJxAABVAE50ck18AAAoaut6AABYOQAAAFNwbGl0dGFibGVQYXJEbyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5zZGZfY29tbW9uKWpjcgAAVQBOdHJOfAAAKGrregAAWEAAAABleHBhbmQoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5zZGZfY29tbW9uLlNwbGl0dGFibGVQYXJEbyBtZXRob2QpahZ2AABVAE50ck98AAAoaut6AABYPwAAAEVsZW1lbnRBbmRSZXN0cmljdGlvbiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5zZGZfY29tbW9uKWqxeAAAVQBOdHJQfAAAKGrregAAWD8AAABQYWlyV2l0aFJlc3RyaWN0aW9uRm4gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX2NvbW1vbilqK3YAAFUATnRyUXwAAChq63oAAFhMAAAAc3RhcnRfYnVuZGxlKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX2NvbW1vbi5QYWlyV2l0aFJlc3RyaWN0aW9uRm4gbWV0aG9kKWr+dAAAVQBOdHJSfAAAKGrregAAWEcAAABwcm9jZXNzKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX2NvbW1vbi5QYWlyV2l0aFJlc3RyaWN0aW9uRm4gbWV0aG9kKWpmdQAAVQBOdHJTfAAAKGrregAAWDwAAABTcGxpdFJlc3RyaWN0aW9uRm4gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX2NvbW1vbilqF3QAAFUATnRyVHwAAChq63oAAFhJAAAAc3RhcnRfYnVuZGxlKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX2NvbW1vbi5TcGxpdFJlc3RyaWN0aW9uRm4gbWV0aG9kKWricQAAVQBOdHJVfAAAKGrregAAWEQAAABwcm9jZXNzKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX2NvbW1vbi5TcGxpdFJlc3RyaWN0aW9uRm4gbWV0aG9kKWrSdQAAVQBOdHJWfAAAKGrregAAWDoAAABFeHBsb2RlV2luZG93c0ZuIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl9jb21tb24paoFyAABVAE50cld8AAAoaut6AABYQgAAAHByb2Nlc3MoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5zZGZfY29tbW9uLkV4cGxvZGVXaW5kb3dzRm4gbWV0aG9kKWoZcgAAVQBOdHJYfAAAKGrregAAWDsAAABSYW5kb21VbmlxdWVLZXlGbiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5zZGZfY29tbW9uKWpycAAAVQBOdHJZfAAAKGrregAAWEMAAABwcm9jZXNzKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX2NvbW1vbi5SYW5kb21VbmlxdWVLZXlGbiBtZXRob2Qpan12AABVAE50clp8AAAoaut6AABYPgAAAFByb2Nlc3NLZXllZEVsZW1lbnRzIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl9jb21tb24paoh2AABVAE50clt8AAAoaut6AABYRQAAAGV4cGFuZCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl9jb21tb24uUHJvY2Vzc0tleWVkRWxlbWVudHMgbWV0aG9kKWrzdAAAVQBOdHJcfAAAZWjiXXJdfAAAKGqDegAAWCAAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmpvYiAobW9kdWxlKVgeAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMuam9iVQBOdHJefAAAYWoxAQAAXXJffAAAKChqxXsAAFgdAAAAYXBhY2hlX2JlYW0uaW8udmNmaW8gKG1vZHVsZSlYGwAAAG1vZHVsZS1hcGFjaGVfYmVhbS5pby52Y2Zpb1UATnRyYHwAAChqxXsAAFgrAAAAVmFyaWFudEluZm8gKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLnZjZmlvKWq6dgAAVQBOdHJhfAAAKGrFewAAWDEAAABkYXRhIChhcGFjaGVfYmVhbS5pby52Y2Zpby5WYXJpYW50SW5mbyBhdHRyaWJ1dGUpahN4AABVAE50cmJ8AAAoasV7AABYOAAAAGZpZWxkX2NvdW50IChhcGFjaGVfYmVhbS5pby52Y2Zpby5WYXJpYW50SW5mbyBhdHRyaWJ1dGUpajF2AABVAE50cmN8AAAoasV7AABYMgAAAE1hbGZvcm1lZFZjZlJlY29yZCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8udmNmaW8pak90AABVAE50cmR8AAAoasV7AABYPQAAAGZpbGVfbmFtZSAoYXBhY2hlX2JlYW0uaW8udmNmaW8uTWFsZm9ybWVkVmNmUmVjb3JkIGF0dHJpYnV0ZSlqlnMAAFUATnRyZXwAAChqxXsAAFg4AAAAbGluZSAoYXBhY2hlX2JlYW0uaW8udmNmaW8uTWFsZm9ybWVkVmNmUmVjb3JkIGF0dHJpYnV0ZSlqdHgAAFUATnRyZnwAAChqxXsAAFgnAAAAVmFyaWFudCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8udmNmaW8pavx0AABVAE50cmd8AAAoasV7AABYKwAAAFZhcmlhbnRDYWxsIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby52Y2Zpbylq+HEAAFUATnRyaHwAAChqxXsAAFgrAAAAUmVhZEZyb21WY2YgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLnZjZmlvKWr8dQAAVQBOdHJpfAAAKGrFewAAWDIAAABleHBhbmQoKSAoYXBhY2hlX2JlYW0uaW8udmNmaW8uUmVhZEZyb21WY2YgbWV0aG9kKWrVcgAAVQBOdHJqfAAAZWoQAQAAXXJrfAAAKChqPXsAAFgzAAAAYXBhY2hlX2JlYW0udG9vbHMuc2lkZWlucHV0X21pY3JvYmVuY2htYXJrIChtb2R1bGUpWDEAAABtb2R1bGUtYXBhY2hlX2JlYW0udG9vbHMuc2lkZWlucHV0X21pY3JvYmVuY2htYXJrVQBOdHJsfAAAKGo9ewAAWEcAAABsb25nX2dlbmVyYXRvcigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udG9vbHMuc2lkZWlucHV0X21pY3JvYmVuY2htYXJrKWrTdgAAVQBOdHJtfAAAKGo9ewAAWEYAAABydW5fYmVuY2htYXJrKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50b29scy5zaWRlaW5wdXRfbWljcm9iZW5jaG1hcmspavFxAABVAE50cm58AABlaONdcm98AAAoKGrFewAAWCIAAABhcGFjaGVfYmVhbS5tZXRyaWNzLmNlbGxzIChtb2R1bGUpWCAAAABtb2R1bGUtYXBhY2hlX2JlYW0ubWV0cmljcy5jZWxsc1UATnRycHwAAChqxXsAAFg3AAAARGlzdHJpYnV0aW9uUmVzdWx0IChjbGFzcyBpbiBhcGFjaGVfYmVhbS5tZXRyaWNzLmNlbGxzKWqCdQAAVQBOdHJxfAAAKGrFewAAWDwAAABtYXggKGFwYWNoZV9iZWFtLm1ldHJpY3MuY2VsbHMuRGlzdHJpYnV0aW9uUmVzdWx0IGF0dHJpYnV0ZSlqc3gAAFUATnRycnwAAChqxXsAAFg8AAAAbWluIChhcGFjaGVfYmVhbS5tZXRyaWNzLmNlbGxzLkRpc3RyaWJ1dGlvblJlc3VsdCBhdHRyaWJ1dGUpahNzAABVAE50cnN8AAAoasV7AABYPgAAAGNvdW50IChhcGFjaGVfYmVhbS5tZXRyaWNzLmNlbGxzLkRpc3RyaWJ1dGlvblJlc3VsdCBhdHRyaWJ1dGUpath2AABVAE50cnR8AAAoasV7AABYPAAAAHN1bSAoYXBhY2hlX2JlYW0ubWV0cmljcy5jZWxscy5EaXN0cmlidXRpb25SZXN1bHQgYXR0cmlidXRlKWp/eAAAVQBOdHJ1fAAAKGrFewAAWD0AAABtZWFuIChhcGFjaGVfYmVhbS5tZXRyaWNzLmNlbGxzLkRpc3RyaWJ1dGlvblJlc3VsdCBhdHRyaWJ1dGUpanlyAABVAE50cnZ8AAAoasV7AABYMAAAAEdhdWdlUmVzdWx0IChjbGFzcyBpbiBhcGFjaGVfYmVhbS5tZXRyaWNzLmNlbGxzKWq7dAAAVQBOdHJ3fAAAKGrFewAAWDcAAAB2YWx1ZSAoYXBhY2hlX2JlYW0ubWV0cmljcy5jZWxscy5HYXVnZVJlc3VsdCBhdHRyaWJ1dGUpapB1AABVAE50cnh8AAAoasV7AABYOwAAAHRpbWVzdGFtcCAoYXBhY2hlX2JlYW0ubWV0cmljcy5jZWxscy5HYXVnZVJlc3VsdCBhdHRyaWJ1dGUpaut0AABVAE50cnl8AABlahMBAABdcnp8AAAoKGp8egAAWC8AAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmhlbHBlciAobW9kdWxlKVgtAAAAbW9kdWxlLWFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuaGVscGVyVQBOdHJ7fAAAKGp8egAAWEMAAABrZXlfY29tcGFyYXRvcigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5oZWxwZXIpald4AABVAE50cnx8AAAoanx6AABYQQAAAGNvbXBhcmVfcGF0aCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5oZWxwZXIpagV1AABVAE50cn18AAAoanx6AABYQgAAAGdldF9kYXRhc3RvcmUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuaGVscGVyKWpzcAAAVQBOdHJ+fAAAKGp8egAAWEEAAABtYWtlX3JlcXVlc3QoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuaGVscGVyKWqUeQAAVQBOdHJ/fAAAKGp8egAAWEMAAABtYWtlX3BhcnRpdGlvbigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5oZWxwZXIpanR3AABVAE50coB8AAAoanx6AABYRwAAAHJldHJ5X29uX3JwY19lcnJvcigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5oZWxwZXIpahR3AABVAE50coF8AAAoanx6AABYQwAAAGZldGNoX2VudGl0aWVzKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmhlbHBlcilq/XYAAFUATnRygnwAAChqfHoAAFhBAAAAaXNfa2V5X3ZhbGlkKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmhlbHBlcilqzXgAAFUATnRyg3wAAChqfHoAAFhEAAAAd3JpdGVfbXV0YXRpb25zKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmhlbHBlcilqFHMAAFUATnRyhHwAAChqfHoAAFhQAAAAbWFrZV9sYXRlc3RfdGltZXN0YW1wX3F1ZXJ5KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmhlbHBlcilqb3EAAFUATnRyhXwAAChqfHoAAFhKAAAAbWFrZV9raW5kX3N0YXRzX3F1ZXJ5KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmhlbHBlcilqO3EAAFUATnRyhnwAAChqfHoAAFg/AAAAUXVlcnlJdGVyYXRvciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5oZWxwZXIpaqhzAABVAE50cod8AABlaOVdcoh8AAAoavZ5AABYIAAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5IChtb2R1bGUpWB4AAABtb2R1bGUtYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHlVAE50col8AABhaOZdcop8AAAoKGr2eQAAWB0AAABhcGFjaGVfYmVhbS5waXBlbGluZSAobW9kdWxlKVgbAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnBpcGVsaW5lVQBOdHKLfAAAKGr2eQAAWCgAAABQaXBlbGluZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucGlwZWxpbmUpavRzAABVAE50cox8AAAoavZ5AABYMQAAAG9wdGlvbnMgKGFwYWNoZV9iZWFtLnBpcGVsaW5lLlBpcGVsaW5lIGF0dHJpYnV0ZSlqYXcAAFUATnRyjXwAAChq9nkAAFg0AAAAcmVwbGFjZV9hbGwoKSAoYXBhY2hlX2JlYW0ucGlwZWxpbmUuUGlwZWxpbmUgbWV0aG9kKWoAdAAAVQBOdHKOfAAAKGr2eQAAWCwAAABydW4oKSAoYXBhY2hlX2JlYW0ucGlwZWxpbmUuUGlwZWxpbmUgbWV0aG9kKWoqcwAAVQBOdHKPfAAAKGr2eQAAWC4AAAB2aXNpdCgpIChhcGFjaGVfYmVhbS5waXBlbGluZS5QaXBlbGluZSBtZXRob2Qpan53AABVAE50cpB8AAAoavZ5AABYLgAAAGFwcGx5KCkgKGFwYWNoZV9iZWFtLnBpcGVsaW5lLlBpcGVsaW5lIG1ldGhvZClqJncAAFUATnRykXwAAChq9nkAAFg2AAAAdG9fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS5waXBlbGluZS5QaXBlbGluZSBtZXRob2Qpaih3AABVAE50cpJ8AAAoavZ5AABYPwAAAGZyb21fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS5waXBlbGluZS5QaXBlbGluZSBzdGF0aWMgbWV0aG9kKWr3dAAAVQBOdHKTfAAAKGr2eQAAWDIAAABQVHJhbnNmb3JtT3ZlcnJpZGUgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnBpcGVsaW5lKWoLeAAAVQBOdHKUfAAAKGr2eQAAWDoAAABtYXRjaGVzKCkgKGFwYWNoZV9iZWFtLnBpcGVsaW5lLlBUcmFuc2Zvcm1PdmVycmlkZSBtZXRob2Qpau10AABVAE50cpV8AAAoavZ5AABYTAAAAGdldF9yZXBsYWNlbWVudF90cmFuc2Zvcm0oKSAoYXBhY2hlX2JlYW0ucGlwZWxpbmUuUFRyYW5zZm9ybU92ZXJyaWRlIG1ldGhvZClqv3gAAFUATnRylnwAAGVo511yl3wAACgoaoN6AABYOgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfYW5hbHl6ZXIgKG1vZHVsZSlYOAAAAG1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2FuYWx5emVyVQBOdHKYfAAAKGqDegAAWE0AAABQaXBlbGluZUFuYWx5emVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2FuYWx5emVyKWocdAAAVQBOdHKZfAAAKGqDegAAWFsAAABwaXBlbGluZV9pbmZvKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfYW5hbHl6ZXIuUGlwZWxpbmVBbmFseXplciBtZXRob2QpavhwAABVAE50cpp8AAAoaoN6AABYZwAAAHBpcGVsaW5lX3Byb3RvX3RvX2V4ZWN1dGUoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9hbmFseXplci5QaXBlbGluZUFuYWx5emVyIG1ldGhvZClqpnYAAFUATnRym3wAAChqg3oAAFhlAAAAdGxfcmVmZXJlbmNlZF9wY29sbF9pZHMoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9hbmFseXplci5QaXBlbGluZUFuYWx5emVyIG1ldGhvZClqIHkAAFUATnRynHwAAChqg3oAAFhjAAAAdGxfcmVxdWlyZWRfdHJhbnNfaWRzKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfYW5hbHl6ZXIuUGlwZWxpbmVBbmFseXplciBtZXRob2Qpakp2AABVAE50cp18AAAoaoN6AABYWQAAAGNhY2hlc191c2VkKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfYW5hbHl6ZXIuUGlwZWxpbmVBbmFseXplciBtZXRob2Qpakd4AABVAE50cp58AAAoaoN6AABYXAAAAHJlYWRfY2FjaGVfaWRzKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfYW5hbHl6ZXIuUGlwZWxpbmVBbmFseXplciBtZXRob2QpaulwAABVAE50cp98AAAoaoN6AABYXQAAAHdyaXRlX2NhY2hlX2lkcygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2FuYWx5emVyLlBpcGVsaW5lQW5hbHl6ZXIgbWV0aG9kKWpwcAAAVQBOdHKgfAAAKGqDegAAWEkAAABQaXBlbGluZUluZm8gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfYW5hbHl6ZXIpavtyAABVAE50cqF8AAAoaoN6AABYWgAAAGFsbF9wY29sbGVjdGlvbnMoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9hbmFseXplci5QaXBlbGluZUluZm8gbWV0aG9kKWoAeQAAVQBOdHKifAAAKGqDegAAWFsAAABsZWFmX3Bjb2xsZWN0aW9ucygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2FuYWx5emVyLlBpcGVsaW5lSW5mbyBtZXRob2Qpapt2AABVAE50cqN8AAAoaoN6AABYUgAAAHByb2R1Y2VyKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfYW5hbHl6ZXIuUGlwZWxpbmVJbmZvIG1ldGhvZClqSnQAAFUATnRypHwAAChqg3oAAFhVAAAAY2FjaGVfbGFiZWwoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9hbmFseXplci5QaXBlbGluZUluZm8gbWV0aG9kKWqEdgAAVQBOdHKlfAAAKGqDegAAWFQAAABQaXBlbGluZUluZm8uRGVyaXZhdGlvbiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9hbmFseXplcilqvnEAAFUATnRypnwAAChqg3oAAFhgAAAAY2FjaGVfbGFiZWwoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9hbmFseXplci5QaXBlbGluZUluZm8uRGVyaXZhdGlvbiBtZXRob2QpanF0AABVAE50cqd8AAAoaoN6AABYWQAAAGpzb24oKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9hbmFseXplci5QaXBlbGluZUluZm8uRGVyaXZhdGlvbiBtZXRob2QpaqV1AABVAE50cqh8AAAoaoN6AABYTQAAAHNldF9wcm90b19tYXAoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfYW5hbHl6ZXIpavBxAABVAE50cql8AABlaOhdcqp8AAAoKGrFegAAWEYAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jb25zdW1lcl90cmFja2luZ19waXBlbGluZV92aXNpdG9yIChtb2R1bGUpWEQAAABtb2R1bGUtYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuY29uc3VtZXJfdHJhY2tpbmdfcGlwZWxpbmVfdmlzaXRvclUATnRyq3wAAChqxXoAAFhoAAAAQ29uc3VtZXJUcmFja2luZ1BpcGVsaW5lVmlzaXRvciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuY29uc3VtZXJfdHJhY2tpbmdfcGlwZWxpbmVfdmlzaXRvcilqoXEAAFUATnRyrHwAAChqxXoAAFh4AAAAdmlzaXRfdHJhbnNmb3JtKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmNvbnN1bWVyX3RyYWNraW5nX3BpcGVsaW5lX3Zpc2l0b3IuQ29uc3VtZXJUcmFja2luZ1BpcGVsaW5lVmlzaXRvciBtZXRob2QpakpxAABVAE50cq18AABlaOldcq58AAAoavZ5AABYNwAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5lbmRwb2ludHNfcGIyX2dycGMgKG1vZHVsZSlYNQAAAG1vZHVsZS1hcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuZW5kcG9pbnRzX3BiMl9ncnBjVQBOdHKvfAAAYWjqXXKwfAAAKChqfHoAAFgtAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS51dGlsIChtb2R1bGUpWCsAAABtb2R1bGUtYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS51dGlsVQBOdHKxfAAAKGp8egAAWDkAAABNb3ZpbmdTdW0gKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEudXRpbClq23EAAFUATnRysnwAAChqfHoAAFg9AAAAc3VtKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEudXRpbC5Nb3ZpbmdTdW0gbWV0aG9kKWoddQAAVQBOdHKzfAAAKGp8egAAWD0AAABhZGQoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS51dGlsLk1vdmluZ1N1bSBtZXRob2QpanNyAABVAE50crR8AAAoanx6AABYPwAAAGNvdW50KCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEudXRpbC5Nb3ZpbmdTdW0gbWV0aG9kKWp6dgAAVQBOdHK1fAAAKGp8egAAWEIAAABoYXNfZGF0YSgpIChhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLnV0aWwuTW92aW5nU3VtIG1ldGhvZClqIHYAAFUATnRytnwAAGVo611yt3wAAChq63oAAFgcAAAAYXBhY2hlX2JlYW0udGVzdGluZyAobW9kdWxlKVgaAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnRlc3RpbmdVAE50crh8AABhaOxdcrl8AAAoaut6AABYJwAAAGFwYWNoZV9iZWFtLnRlc3RpbmcubG9hZF90ZXN0cyAobW9kdWxlKVglAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnRlc3RpbmcubG9hZF90ZXN0c1UATnRyunwAAGFo7V1yu3wAAChqmnoAAFgvAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8gKG1vZHVsZSlYLQAAAG1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pb1UATnRyvHwAAGFo7l1yvXwAACgoarB6AABYJwAAAGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbSAobW9kdWxlKVglAAAAbW9kdWxlLWFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbVUATnRyvnwAAChqsHoAAFg2AAAAT3V0cHV0U3RyZWFtIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0pak9yAABVAE50cr98AAAoarB6AABYPAAAAHdyaXRlKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5PdXRwdXRTdHJlYW0gbWV0aG9kKWo9dgAAVQBOdHLAfAAAKGqwegAAWEEAAAB3cml0ZV9ieXRlKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5PdXRwdXRTdHJlYW0gbWV0aG9kKWpndAAAVQBOdHLBfAAAKGqwegAAWEYAAAB3cml0ZV92YXJfaW50NjQoKSAoYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLk91dHB1dFN0cmVhbSBtZXRob2Qpagt5AABVAE50csJ8AAAoarB6AABYTAAAAHdyaXRlX2JpZ2VuZGlhbl9pbnQ2NCgpIChhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uT3V0cHV0U3RyZWFtIG1ldGhvZClqu3MAAFUATnRyw3wAAChqsHoAAFhNAAAAd3JpdGVfYmlnZW5kaWFuX3VpbnQ2NCgpIChhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uT3V0cHV0U3RyZWFtIG1ldGhvZClqo3EAAFUATnRyxHwAAChqsHoAAFhMAAAAd3JpdGVfYmlnZW5kaWFuX2ludDMyKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5PdXRwdXRTdHJlYW0gbWV0aG9kKWo1eQAAVQBOdHLFfAAAKGqwegAAWE0AAAB3cml0ZV9iaWdlbmRpYW5fZG91YmxlKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5PdXRwdXRTdHJlYW0gbWV0aG9kKWo4dgAAVQBOdHLGfAAAKGqwegAAWDoAAABnZXQoKSAoYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLk91dHB1dFN0cmVhbSBtZXRob2QpahZ4AABVAE50csd8AAAoarB6AABYOwAAAHNpemUoKSAoYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLk91dHB1dFN0cmVhbSBtZXRob2QpamhwAABVAE50csh8AAAoarB6AABYQgAAAEJ5dGVDb3VudGluZ091dHB1dFN0cmVhbSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtKWoQcQAAVQBOdHLJfAAAKGqwegAAWEgAAAB3cml0ZSgpIChhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uQnl0ZUNvdW50aW5nT3V0cHV0U3RyZWFtIG1ldGhvZClq7HMAAFUATnRyynwAAChqsHoAAFhNAAAAd3JpdGVfYnl0ZSgpIChhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uQnl0ZUNvdW50aW5nT3V0cHV0U3RyZWFtIG1ldGhvZClqQnIAAFUATnRyy3wAAChqsHoAAFhMAAAAZ2V0X2NvdW50KCkgKGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5CeXRlQ291bnRpbmdPdXRwdXRTdHJlYW0gbWV0aG9kKWoteAAAVQBOdHLMfAAAKGqwegAAWEYAAABnZXQoKSAoYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLkJ5dGVDb3VudGluZ091dHB1dFN0cmVhbSBtZXRob2QpahNyAABVAE50cs18AAAoarB6AABYNQAAAElucHV0U3RyZWFtIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0pajRyAABVAE50cs58AAAoarB6AABYOgAAAHNpemUoKSAoYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLklucHV0U3RyZWFtIG1ldGhvZClqQ3UAAFUATnRyz3wAAChqsHoAAFg6AAAAcmVhZCgpIChhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uSW5wdXRTdHJlYW0gbWV0aG9kKWpxeQAAVQBOdHLQfAAAKGqwegAAWD4AAAByZWFkX2FsbCgpIChhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uSW5wdXRTdHJlYW0gbWV0aG9kKWo7dAAAVQBOdHLRfAAAKGqwegAAWEMAAAByZWFkX2J5dGVfcHkyKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5JbnB1dFN0cmVhbSBtZXRob2QpauNyAABVAE50ctJ8AAAoarB6AABYQwAAAHJlYWRfYnl0ZV9weTMoKSAoYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLklucHV0U3RyZWFtIG1ldGhvZClq4nIAAFUATnRy03wAAChqsHoAAFhEAAAAcmVhZF92YXJfaW50NjQoKSAoYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLklucHV0U3RyZWFtIG1ldGhvZClqHXgAAFUATnRy1HwAAChqsHoAAFhKAAAAcmVhZF9iaWdlbmRpYW5faW50NjQoKSAoYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLklucHV0U3RyZWFtIG1ldGhvZClq+nQAAFUATnRy1XwAAChqsHoAAFhLAAAAcmVhZF9iaWdlbmRpYW5fdWludDY0KCkgKGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5JbnB1dFN0cmVhbSBtZXRob2QpaoV1AABVAE50ctZ8AAAoarB6AABYSgAAAHJlYWRfYmlnZW5kaWFuX2ludDMyKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5JbnB1dFN0cmVhbSBtZXRob2Qpanh5AABVAE50ctd8AAAoarB6AABYSwAAAHJlYWRfYmlnZW5kaWFuX2RvdWJsZSgpIChhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uSW5wdXRTdHJlYW0gbWV0aG9kKWp5dwAAVQBOdHLYfAAAKGqwegAAWDwAAABnZXRfdmFyaW50X3NpemUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbSlqUnEAAFUATnRy2XwAAGVo711y2nwAAChqg3oAAFgwAAAAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5IChtb2R1bGUpWC4AAABtb2R1bGUtYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5VQBOdHLbfAAAYWjwXXLcfAAAKChqBXoAAFgqAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtIChtb2R1bGUpWCgAAABtb2R1bGUtYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtVQBOdHLdfAAAKGoFegAAWDcAAABQVHJhbnNmb3JtIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0paot0AABVAE50ct58AAAoagV6AABYRAAAAHNpZGVfaW5wdXRzIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybSBhdHRyaWJ1dGUpak9xAABVAE50ct98AAAoagV6AABYQQAAAHBpcGVsaW5lIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybSBhdHRyaWJ1dGUpaqx5AABVAE50cuB8AAAoagV6AABYPgAAAGxhYmVsIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybSBhdHRyaWJ1dGUpapRyAABVAE50cuF8AAAoagV6AABYRQAAAGRlZmF1bHRfbGFiZWwoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm0gbWV0aG9kKWrdcgAAVQBOdHLifAAAKGoFegAAWEgAAAB3aXRoX2lucHV0X3R5cGVzKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtIG1ldGhvZClqrHgAAFUATnRy43wAAChqBXoAAFhJAAAAd2l0aF9vdXRwdXRfdHlwZXMoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm0gbWV0aG9kKWrQeAAAVQBOdHLkfAAAKGoFegAAWEkAAAB0eXBlX2NoZWNrX2lucHV0cygpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybSBtZXRob2Qpalp1AABVAE50cuV8AAAoagV6AABYSQAAAGluZmVyX291dHB1dF90eXBlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtIG1ldGhvZClqBXEAAFUATnRy5nwAAChqBXoAAFhKAAAAdHlwZV9jaGVja19vdXRwdXRzKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtIG1ldGhvZClqIXgAAFUATnRy53wAAChqBXoAAFhUAAAAdHlwZV9jaGVja19pbnB1dHNfb3Jfb3V0cHV0cygpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybSBtZXRob2Qpaph2AABVAE50cuh8AAAoagV6AABYPgAAAGV4cGFuZCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybSBtZXRob2QpamV0AABVAE50cul8AAAoagV6AABYRQAAAGdldF93aW5kb3dpbmcoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm0gbWV0aG9kKWpwcwAAVQBOdHLqfAAAKGoFegAAWEoAAAByZWdpc3Rlcl91cm4oKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm0gY2xhc3MgbWV0aG9kKWrvcAAAVQBOdHLrfAAAKGoFegAAWEUAAAB0b19ydW5uZXJfYXBpKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtIG1ldGhvZClqFXcAAFUATnRy7HwAAChqBXoAAFhNAAAAZnJvbV9ydW5uZXJfYXBpKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtIGNsYXNzIG1ldGhvZClqXXMAAFUATnRy7XwAAChqBXoAAFhPAAAAdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm0gbWV0aG9kKWo3dAAAVQBOdHLufAAAKGoFegAAWE0AAAB0b19ydW5uZXJfYXBpX3BpY2tsZWQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm0gbWV0aG9kKWoFeQAAVQBOdHLvfAAAKGoFegAAWFcAAABydW5uZXJfYXBpX3JlcXVpcmVzX2tleWVkX2lucHV0KCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtIG1ldGhvZClqe3EAAFUATnRy8HwAAChqBXoAAFg9AAAAcHRyYW5zZm9ybV9mbigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtKWroeAAAVQBOdHLxfAAAKGoFegAAWEMAAABsYWJlbF9mcm9tX2NhbGxhYmxlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0panZxAABVAE50cvJ8AABlaPJdcvN8AAAoKGo9ewAAWD4AAABhcGFjaGVfYmVhbS50b29scy5kaXN0cmlidXRpb25fY291bnRlcl9taWNyb2JlbmNobWFyayAobW9kdWxlKVg8AAAAbW9kdWxlLWFwYWNoZV9iZWFtLnRvb2xzLmRpc3RyaWJ1dGlvbl9jb3VudGVyX21pY3JvYmVuY2htYXJrVQBOdHL0fAAAKGo9ewAAWFkAAABnZW5lcmF0ZV9pbnB1dF92YWx1ZXMoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRvb2xzLmRpc3RyaWJ1dGlvbl9jb3VudGVyX21pY3JvYmVuY2htYXJrKWoTeQAAVQBOdHL1fAAAKGo9ewAAWFEAAABydW5fYmVuY2htYXJrKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50b29scy5kaXN0cmlidXRpb25fY291bnRlcl9taWNyb2JlbmNobWFyaylqjXAAAFUATnRy9nwAAGVo811y93wAACgoavl5AABYJQAAAGFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNpbmsgKG1vZHVsZSlYIwAAAG1vZHVsZS1hcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzaW5rVQBOdHL4fAAAKGr5eQAAWDUAAABGaWxlQmFzZWRTaW5rIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzaW5rKWoydAAAVQBOdHL5fAAAKGr5eQAAWEIAAABkaXNwbGF5X2RhdGEoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc2luay5GaWxlQmFzZWRTaW5rIG1ldGhvZClq2XYAAFUATnRy+nwAAChq+XkAAFg6AAAAb3BlbigpIChhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzaW5rLkZpbGVCYXNlZFNpbmsgbWV0aG9kKWrydAAAVQBOdHL7fAAAKGr5eQAAWEIAAAB3cml0ZV9yZWNvcmQoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc2luay5GaWxlQmFzZWRTaW5rIG1ldGhvZClqj3gAAFUATnRy/HwAAChq+XkAAFhKAAAAd3JpdGVfZW5jb2RlZF9yZWNvcmQoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc2luay5GaWxlQmFzZWRTaW5rIG1ldGhvZClq+ngAAFUATnRy/XwAAChq+XkAAFg7AAAAY2xvc2UoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc2luay5GaWxlQmFzZWRTaW5rIG1ldGhvZClqvngAAFUATnRy/nwAAChq+XkAAFhGAAAAaW5pdGlhbGl6ZV93cml0ZSgpIChhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzaW5rLkZpbGVCYXNlZFNpbmsgbWV0aG9kKWrmdQAAVQBOdHL/fAAAKGr5eQAAWEEAAABvcGVuX3dyaXRlcigpIChhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzaW5rLkZpbGVCYXNlZFNpbmsgbWV0aG9kKWoicQAAVQBOdHIAfQAAKGr5eQAAWEIAAABwcmVfZmluYWxpemUoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc2luay5GaWxlQmFzZWRTaW5rIG1ldGhvZClqBHEAAFUATnRyAX0AAChq+XkAAFhEAAAAZmluYWxpemVfd3JpdGUoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc2luay5GaWxlQmFzZWRTaW5rIG1ldGhvZClqqXcAAFUATnRyAn0AAGVo9F1yA30AACgoagV6AABYJAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSAobW9kdWxlKVgiAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZVUATnRyBH0AAChqBXoAAFgrAAAARG9GbiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlKWoDdgAAVQBOdHIFfQAAKGoFegAAWDkAAABFbGVtZW50UGFyYW0gKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Eb0ZuIGF0dHJpYnV0ZSlqwHIAAFUATnRyBn0AAChqBXoAAFg7AAAAU2lkZUlucHV0UGFyYW0gKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Eb0ZuIGF0dHJpYnV0ZSlqlXQAAFUATnRyB30AAChqBXoAAFg7AAAAVGltZXN0YW1wUGFyYW0gKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Eb0ZuIGF0dHJpYnV0ZSlqBXYAAFUATnRyCH0AAChqBXoAAFg4AAAAV2luZG93UGFyYW0gKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Eb0ZuIGF0dHJpYnV0ZSlqFnEAAFUATnRyCX0AAChqBXoAAFhDAAAAV2F0ZXJtYXJrUmVwb3J0ZXJQYXJhbSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm4gYXR0cmlidXRlKWp+eQAAVQBOdHIKfQAAKGoFegAAWD4AAABEb0ZuUHJvY2Vzc1BhcmFtcyAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm4gYXR0cmlidXRlKWrXdQAAVQBOdHILfQAAKGoFegAAWDcAAABTdGF0ZVBhcmFtIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRG9GbiBhdHRyaWJ1dGUpanlwAABVAE50cgx9AAAoagV6AABYNwAAAFRpbWVyUGFyYW0gKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Eb0ZuIGF0dHJpYnV0ZSlqjXYAAFUATnRyDX0AAChqBXoAAFhAAAAAZnJvbV9jYWxsYWJsZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRG9GbiBzdGF0aWMgbWV0aG9kKWqOeQAAVQBOdHIOfQAAKGoFegAAWDkAAABkZWZhdWx0X2xhYmVsKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Eb0ZuIG1ldGhvZClq/HIAAFUATnRyD30AAChqBXoAAFgzAAAAcHJvY2VzcygpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRG9GbiBtZXRob2QpapF0AABVAE50chB9AAAoagV6AABYOAAAAHN0YXJ0X2J1bmRsZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRG9GbiBtZXRob2QpaqZyAABVAE50chF9AAAoagV6AABYOQAAAGZpbmlzaF9idW5kbGUoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm4gbWV0aG9kKWr0cgAAVQBOdHISfQAAKGoFegAAWEIAAABnZXRfZnVuY3Rpb25fYXJndW1lbnRzKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Eb0ZuIG1ldGhvZClqnnEAAFUATnRyE30AAChqBXoAAFg9AAAAaW5mZXJfb3V0cHV0X3R5cGUoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm4gbWV0aG9kKWrGdAAAVQBOdHIUfQAAKGoFegAAWD4AAABpc19wcm9jZXNzX2JvdW5kZWQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm4gbWV0aG9kKWq1eQAAVQBOdHIVfQAAKGoFegAAWEMAAAB0b19ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRG9GbiBtZXRob2Qpas9wAABVAE50chZ9AAAoagV6AABYMAAAAENvbWJpbmVGbiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlKWpucwAAVQBOdHIXfQAAKGoFegAAWD4AAABkZWZhdWx0X2xhYmVsKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lRm4gbWV0aG9kKWq3cAAAVQBOdHIYfQAAKGoFegAAWEMAAABjcmVhdGVfYWNjdW11bGF0b3IoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVGbiBtZXRob2QpajB0AABVAE50chl9AAAoagV6AABYOgAAAGFkZF9pbnB1dCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUZuIG1ldGhvZClq6XQAAFUATnRyGn0AAChqBXoAAFg7AAAAYWRkX2lucHV0cygpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUZuIG1ldGhvZClqvXQAAFUATnRyG30AAChqBXoAAFhDAAAAbWVyZ2VfYWNjdW11bGF0b3JzKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lRm4gbWV0aG9kKWq/dgAAVQBOdHIcfQAAKGoFegAAWD8AAABleHRyYWN0X291dHB1dCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUZuIG1ldGhvZClq5XEAAFUATnRyHX0AAChqBXoAAFg2AAAAYXBwbHkoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVGbiBtZXRob2QpahF2AABVAE50ch59AAAoagV6AABYPwAAAGZvcl9pbnB1dF90eXBlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lRm4gbWV0aG9kKWrDcgAAVQBOdHIffQAAKGoFegAAWEUAAABmcm9tX2NhbGxhYmxlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lRm4gc3RhdGljIG1ldGhvZClqz3MAAFUATnRyIH0AAChqBXoAAFhLAAAAbWF5YmVfZnJvbV9jYWxsYWJsZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUZuIHN0YXRpYyBtZXRob2QparBzAABVAE50ciF9AAAoagV6AABYRgAAAGdldF9hY2N1bXVsYXRvcl9jb2RlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUZuIG1ldGhvZClqLnYAAFUATnRyIn0AAChqBXoAAFhIAAAAdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVGbiBtZXRob2QpakF2AABVAE50ciN9AAAoagV6AABYMgAAAFBhcnRpdGlvbkZuIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUpajZ3AABVAE50ciR9AAAoagV6AABYQAAAAGRlZmF1bHRfbGFiZWwoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLlBhcnRpdGlvbkZuIG1ldGhvZClq+XEAAFUATnRyJX0AAChqBXoAAFhAAAAAcGFydGl0aW9uX2ZvcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuUGFydGl0aW9uRm4gbWV0aG9kKWoddgAAVQBOdHImfQAAKGoFegAAWCwAAABQYXJEbyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlKWqKdgAAVQBOdHInfQAAKGoFegAAWD8AAABkZWZhdWx0X3R5cGVfaGludHMoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLlBhckRvIG1ldGhvZClqh3AAAFUATnRyKH0AAChqBXoAAFg+AAAAaW5mZXJfb3V0cHV0X3R5cGUoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLlBhckRvIG1ldGhvZClqXnAAAFUATnRyKX0AAChqBXoAAFg0AAAAbWFrZV9mbigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuUGFyRG8gbWV0aG9kKWpseAAAVQBOdHIqfQAAKGoFegAAWDkAAABkaXNwbGF5X2RhdGEoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLlBhckRvIG1ldGhvZClqqHUAAFUATnRyK30AAChqBXoAAFgzAAAAZXhwYW5kKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5QYXJEbyBtZXRob2QpagZ4AABVAE50cix9AAAoagV6AABYOQAAAHdpdGhfb3V0cHV0cygpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuUGFyRG8gbWV0aG9kKWr1cwAAVQBOdHItfQAAKGoFegAAWEQAAAB0b19ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuUGFyRG8gbWV0aG9kKWrAeAAAVQBOdHIufQAAKGoFegAAWE0AAABmcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5QYXJEbyBzdGF0aWMgbWV0aG9kKWoccwAAVQBOdHIvfQAAKGoFegAAWEwAAABydW5uZXJfYXBpX3JlcXVpcmVzX2tleWVkX2lucHV0KCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5QYXJEbyBtZXRob2QpatVwAABVAE50cjB9AAAoagV6AABYMQAAAEZsYXRNYXAoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSlqZXIAAFUATnRyMX0AAChqBXoAAFgtAAAATWFwKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUpaoR0AABVAE50cjJ9AAAoagV6AABYMAAAAEZpbHRlcigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlKWrDdwAAVQBOdHIzfQAAKGoFegAAWDYAAABDb21iaW5lR2xvYmFsbHkgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSlqnnMAAFUATnRyNH0AAChqBXoAAFhEAAAAaGFzX2RlZmF1bHRzIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUdsb2JhbGx5IGF0dHJpYnV0ZSlqW3QAAFUATnRyNX0AAChqBXoAAFg/AAAAYXNfdmlldyAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVHbG9iYWxseSBhdHRyaWJ1dGUpaiV1AABVAE50cjZ9AAAoagV6AABYPgAAAGZhbm91dCAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVHbG9iYWxseSBhdHRyaWJ1dGUpai54AABVAE50cjd9AAAoagV6AABYQwAAAGRpc3BsYXlfZGF0YSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUdsb2JhbGx5IG1ldGhvZClqRnkAAFUATnRyOH0AAChqBXoAAFhEAAAAZGVmYXVsdF9sYWJlbCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUdsb2JhbGx5IG1ldGhvZClqPHgAAFUATnRyOX0AAChqBXoAAFhCAAAAd2l0aF9mYW5vdXQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVHbG9iYWxseSBtZXRob2QpaglyAABVAE50cjp9AAAoagV6AABYRAAAAHdpdGhfZGVmYXVsdHMoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVHbG9iYWxseSBtZXRob2QpahF3AABVAE50cjt9AAAoagV6AABYRwAAAHdpdGhvdXRfZGVmYXVsdHMoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVHbG9iYWxseSBtZXRob2Qpau52AABVAE50cjx9AAAoagV6AABYSAAAAGFzX3NpbmdsZXRvbl92aWV3KCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lR2xvYmFsbHkgbWV0aG9kKWoneAAAVQBOdHI9fQAAKGoFegAAWD0AAABleHBhbmQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVHbG9iYWxseSBtZXRob2Qpaj1xAABVAE50cj59AAAoagV6AABYNAAAAENvbWJpbmVQZXJLZXkgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSlqn3kAAFUATnRyP30AAChqBXoAAFhIAAAAd2l0aF9ob3Rfa2V5X2Zhbm91dCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZVBlcktleSBtZXRob2Qpag13AABVAE50ckB9AAAoagV6AABYQQAAAGRpc3BsYXlfZGF0YSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZVBlcktleSBtZXRob2QpaqVxAABVAE50ckF9AAAoagV6AABYPAAAAG1ha2VfZm4oKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVQZXJLZXkgbWV0aG9kKWoYdAAAVQBOdHJCfQAAKGoFegAAWEIAAABkZWZhdWx0X2xhYmVsKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lUGVyS2V5IG1ldGhvZClqfXQAAFUATnRyQ30AAChqBXoAAFg7AAAAZXhwYW5kKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lUGVyS2V5IG1ldGhvZClqV3cAAFUATnRyRH0AAChqBXoAAFhHAAAAZGVmYXVsdF90eXBlX2hpbnRzKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lUGVyS2V5IG1ldGhvZClq03gAAFUATnRyRX0AAChqBXoAAFhMAAAAdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVQZXJLZXkgbWV0aG9kKWqpdgAAVQBOdHJGfQAAKGoFegAAWFUAAABmcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lUGVyS2V5IHN0YXRpYyBtZXRob2Qpas9xAABVAE50ckd9AAAoagV6AABYVAAAAHJ1bm5lcl9hcGlfcmVxdWlyZXNfa2V5ZWRfaW5wdXQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVQZXJLZXkgbWV0aG9kKWrVeAAAVQBOdHJIfQAAKGoFegAAWDQAAABDb21iaW5lVmFsdWVzIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUpal5yAABVAE50ckl9AAAoagV6AABYPAAAAG1ha2VfZm4oKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVWYWx1ZXMgbWV0aG9kKWrqcQAAVQBOdHJKfQAAKGoFegAAWDsAAABleHBhbmQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVWYWx1ZXMgbWV0aG9kKWolcQAAVQBOdHJLfQAAKGoFegAAWEwAAAB0b19ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZVZhbHVlcyBtZXRob2Qparp1AABVAE50ckx9AAAoagV6AABYVQAAAGZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVWYWx1ZXMgc3RhdGljIG1ldGhvZClqoHIAAFUATnRyTX0AAChqBXoAAFgxAAAAR3JvdXBCeUtleSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlKWpYeAAAVQBOdHJOfQAAKGoFegAAWD4AAABHcm91cEJ5S2V5LlJlaWZ5V2luZG93cyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlKWoUeQAAVQBOdHJPfQAAKGoFegAAWEYAAABwcm9jZXNzKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Hcm91cEJ5S2V5LlJlaWZ5V2luZG93cyBtZXRob2Qpamp2AABVAE50clB9AAAoagV6AABYUAAAAGluZmVyX291dHB1dF90eXBlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Hcm91cEJ5S2V5LlJlaWZ5V2luZG93cyBtZXRob2QpagxxAABVAE50clF9AAAoagV6AABYOAAAAGV4cGFuZCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuR3JvdXBCeUtleSBtZXRob2QpalxyAABVAE50clJ9AAAoagV6AABYQwAAAGluZmVyX291dHB1dF90eXBlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Hcm91cEJ5S2V5IG1ldGhvZClqhHgAAFUATnRyU30AAChqBXoAAFhJAAAAdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkdyb3VwQnlLZXkgbWV0aG9kKWpCcwAAVQBOdHJUfQAAKGoFegAAWFIAAABmcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Hcm91cEJ5S2V5IHN0YXRpYyBtZXRob2QparN5AABVAE50clV9AAAoagV6AABYUQAAAHJ1bm5lcl9hcGlfcmVxdWlyZXNfa2V5ZWRfaW5wdXQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkdyb3VwQnlLZXkgbWV0aG9kKWoYdQAAVQBOdHJWfQAAKGoFegAAWDAAAABQYXJ0aXRpb24gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSlqnnIAAFUATnRyV30AAChqBXoAAFhDAAAAUGFydGl0aW9uLkFwcGx5UGFydGl0aW9uRm5GbiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlKWqJdAAAVQBOdHJYfQAAKGoFegAAWEsAAABwcm9jZXNzKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5QYXJ0aXRpb24uQXBwbHlQYXJ0aXRpb25GbkZuIG1ldGhvZClqzHYAAFUATnRyWX0AAChqBXoAAFg4AAAAbWFrZV9mbigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuUGFydGl0aW9uIG1ldGhvZClqf3IAAFUATnRyWn0AAChqBXoAAFg3AAAAZXhwYW5kKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5QYXJ0aXRpb24gbWV0aG9kKWqXeQAAVQBOdHJbfQAAKGoFegAAWDAAAABXaW5kb3dpbmcgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSlqHHkAAFUATnRyXH0AAChqBXoAAFg7AAAAaXNfZGVmYXVsdCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuV2luZG93aW5nIG1ldGhvZClqZngAAFUATnRyXX0AAChqBXoAAFg+AAAAdG9fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuV2luZG93aW5nIG1ldGhvZClqyXgAAFUATnRyXn0AAChqBXoAAFhHAAAAZnJvbV9ydW5uZXJfYXBpKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5XaW5kb3dpbmcgc3RhdGljIG1ldGhvZClqGHYAAFUATnRyX30AAChqBXoAAFgxAAAAV2luZG93SW50byAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlKWredgAAVQBOdHJgfQAAKGoFegAAWD4AAABXaW5kb3dJbnRvLldpbmRvd0ludG9GbiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlKWpgcwAAVQBOdHJhfQAAKGoFegAAWEYAAABwcm9jZXNzKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5XaW5kb3dJbnRvLldpbmRvd0ludG9GbiBtZXRob2QpanB4AABVAE50cmJ9AAAoagV6AABYPwAAAGdldF93aW5kb3dpbmcoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLldpbmRvd0ludG8gbWV0aG9kKWrzdQAAVQBOdHJjfQAAKGoFegAAWEMAAABpbmZlcl9vdXRwdXRfdHlwZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuV2luZG93SW50byBtZXRob2QpaqZ1AABVAE50cmR9AAAoagV6AABYOAAAAGV4cGFuZCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuV2luZG93SW50byBtZXRob2Qpav53AABVAE50cmV9AAAoagV6AABYSQAAAHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5XaW5kb3dJbnRvIG1ldGhvZClqB3YAAFUATnRyZn0AAChqBXoAAFhSAAAAZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuV2luZG93SW50byBzdGF0aWMgbWV0aG9kKWoMcwAAVQBOdHJnfQAAKGoFegAAWC4AAABGbGF0dGVuIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUparF0AABVAE50cmh9AAAoagV6AABYNQAAAGV4cGFuZCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRmxhdHRlbiBtZXRob2QpasJzAABVAE50cml9AAAoagV6AABYPAAAAGdldF93aW5kb3dpbmcoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkZsYXR0ZW4gbWV0aG9kKWoJdQAAVQBOdHJqfQAAKGoFegAAWEYAAAB0b19ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRmxhdHRlbiBtZXRob2QpaqJyAABVAE50cmt9AAAoagV6AABYTwAAAGZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkZsYXR0ZW4gc3RhdGljIG1ldGhvZClqSnMAAFUATnRybH0AAChqBXoAAFgtAAAAQ3JlYXRlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUpapR2AABVAE50cm19AAAoagV6AABYRQAAAHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5DcmVhdGUgbWV0aG9kKWr6dwAAVQBOdHJufQAAKGoFegAAWD8AAABpbmZlcl9vdXRwdXRfdHlwZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ3JlYXRlIG1ldGhvZClqB3EAAFUATnRyb30AAChqBXoAAFg9AAAAZ2V0X291dHB1dF90eXBlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5DcmVhdGUgbWV0aG9kKWrPcgAAVQBOdHJwfQAAKGoFegAAWDQAAABleHBhbmQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNyZWF0ZSBtZXRob2Qpar51AABVAE50cnF9AAAoagV6AABYOwAAAGdldF93aW5kb3dpbmcoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNyZWF0ZSBtZXRob2Qpath3AABVAE50cnJ9AAAoagV6AABYLgAAAEltcHVsc2UgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSlqmXAAAFUATnRyc30AAChqBXoAAFg1AAAAZXhwYW5kKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5JbXB1bHNlIG1ldGhvZClqsXIAAFUATnRydH0AAChqBXoAAFg8AAAAZ2V0X3dpbmRvd2luZygpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuSW1wdWxzZSBtZXRob2Qpav5xAABVAE50cnV9AAAoagV6AABYQAAAAGluZmVyX291dHB1dF90eXBlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5JbXB1bHNlIG1ldGhvZClq4nMAAFUATnRydn0AAChqBXoAAFhGAAAAdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkltcHVsc2UgbWV0aG9kKWrTcQAAVQBOdHJ3fQAAKGoFegAAWE8AAABmcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5JbXB1bHNlIHN0YXRpYyBtZXRob2QpatB1AABVAE50cnh9AABlaPVdcnl9AAAoKGrFewAAWB4AAABhcGFjaGVfYmVhbS5pby50ZXh0aW8gKG1vZHVsZSlYHAAAAG1vZHVsZS1hcGFjaGVfYmVhbS5pby50ZXh0aW9VAE50cnp9AAAoasV7AABYMAAAAFJlYWRBbGxGcm9tVGV4dCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8udGV4dGlvKWrbeAAAVQBOdHJ7fQAAKGrFewAAWE0AAABERUZBVUxUX0RFU0lSRURfQlVORExFX1NJWkUgKGFwYWNoZV9iZWFtLmlvLnRleHRpby5SZWFkQWxsRnJvbVRleHQgYXR0cmlidXRlKWrXdwAAVQBOdHJ8fQAAKGrFewAAWDcAAABleHBhbmQoKSAoYXBhY2hlX2JlYW0uaW8udGV4dGlvLlJlYWRBbGxGcm9tVGV4dCBtZXRob2QpaqF2AABVAE50cn19AAAoasV7AABYLQAAAFJlYWRGcm9tVGV4dCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8udGV4dGlvKWr+cgAAVQBOdHJ+fQAAKGrFewAAWDQAAABleHBhbmQoKSAoYXBhY2hlX2JlYW0uaW8udGV4dGlvLlJlYWRGcm9tVGV4dCBtZXRob2Qpasl0AABVAE50cn99AAAoasV7AABYOQAAAFJlYWRGcm9tVGV4dFdpdGhGaWxlbmFtZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8udGV4dGlvKWpBdAAAVQBOdHKAfQAAKGrFewAAWCwAAABXcml0ZVRvVGV4dCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8udGV4dGlvKWpmdwAAVQBOdHKBfQAAKGrFewAAWDMAAABleHBhbmQoKSAoYXBhY2hlX2JlYW0uaW8udGV4dGlvLldyaXRlVG9UZXh0IG1ldGhvZClqJXkAAFUATnRygn0AAGVo9l1yg30AACgoanx6AABYLgAAAGFwYWNoZV9iZWFtLmlvLmdjcC5wdWJzdWJfaXRfcGlwZWxpbmUgKG1vZHVsZSlYLAAAAG1vZHVsZS1hcGFjaGVfYmVhbS5pby5nY3AucHVic3ViX2l0X3BpcGVsaW5lVQBOdHKEfQAAKGp8egAAWEAAAABydW5fcGlwZWxpbmUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmlvLmdjcC5wdWJzdWJfaXRfcGlwZWxpbmUpaht3AABVAE50coV9AABlaPddcoZ9AAAoKGo9ewAAWC8AAABhcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZSAobW9kdWxlKVgtAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lVQBOdHKHfQAAKGo9ewAAWEQAAABwYXJzZV9ieXRlX3NpemUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lKWrHcQAAVQBOdHKIfQAAKGo9ewAAWEEAAABkaXZfcm91bmRfdXAoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lKWoZcQAAVQBOdHKJfQAAKGo9ewAAWD8AAAByb3RhdGVfa2V5KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZSlq5XcAAFUATnRyin0AAChqPXsAAFg/AAAAU3ludGhldGljU3RlcCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmUpapJ5AABVAE50cot9AAAoaj17AABYTAAAAHN0YXJ0X2J1bmRsZSgpIChhcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZS5TeW50aGV0aWNTdGVwIG1ldGhvZClqCnYAAFUATnRyjH0AAChqPXsAAFhNAAAAZmluaXNoX2J1bmRsZSgpIChhcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZS5TeW50aGV0aWNTdGVwIG1ldGhvZClqF3IAAFUATnRyjX0AAChqPXsAAFhHAAAAcHJvY2VzcygpIChhcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZS5TeW50aGV0aWNTdGVwIG1ldGhvZClqrXEAAFUATnRyjn0AAChqPXsAAFhBAAAAU3ludGhldGljU291cmNlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZSlqDHgAAFUATnRyj30AAChqPXsAAFhPAAAAZWxlbWVudF9zaXplIChhcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZS5TeW50aGV0aWNTb3VyY2UgYXR0cmlidXRlKWpYcgAAVQBOdHKQfQAAKGo9ewAAWE8AAABlc3RpbWF0ZV9zaXplKCkgKGFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lLlN5bnRoZXRpY1NvdXJjZSBtZXRob2Qpakh2AABVAE50cpF9AAAoaj17AABYRwAAAHNwbGl0KCkgKGFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lLlN5bnRoZXRpY1NvdXJjZSBtZXRob2QpaqtyAABVAE50cpJ9AAAoaj17AABYUwAAAGdldF9yYW5nZV90cmFja2VyKCkgKGFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lLlN5bnRoZXRpY1NvdXJjZSBtZXRob2Qpamt1AABVAE50cpN9AAAoaj17AABYRgAAAHJlYWQoKSAoYXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmUuU3ludGhldGljU291cmNlIG1ldGhvZClqkHIAAFUATnRylH0AAChqPXsAAFhWAAAAZGVmYXVsdF9vdXRwdXRfY29kZXIoKSAoYXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmUuU3ludGhldGljU291cmNlIG1ldGhvZClqYHgAAFUATnRylX0AAChqPXsAAFhAAAAAU2h1ZmZsZUJhcnJpZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lKWpQeQAAVQBOdHKWfQAAKGo9ewAAWEcAAABleHBhbmQoKSAoYXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmUuU2h1ZmZsZUJhcnJpZXIgbWV0aG9kKWo6cQAAVQBOdHKXfQAAKGo9ewAAWEIAAABTaWRlSW5wdXRCYXJyaWVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZSlqz3UAAFUATnRymH0AAChqPXsAAFhJAAAAZXhwYW5kKCkgKGFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lLlNpZGVJbnB1dEJhcnJpZXIgbWV0aG9kKWrldAAAVQBOdHKZfQAAKGo9ewAAWEQAAABtZXJnZV91c2luZ19nYmsoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lKWqweQAAVQBOdHKafQAAKGo9ewAAWEsAAABtZXJnZV91c2luZ19zaWRlX2lucHV0KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZSlqYnUAAFUATnRym30AAChqPXsAAFhFAAAAZXhwYW5kX3VzaW5nX2diaygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmUpaiByAABVAE50cpx9AAAoaj17AABYTwAAAGV4cGFuZF91c2luZ19zZWNvbmRfb3V0cHV0KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZSlqWHYAAFUATnRynX0AAChqPXsAAFg/AAAAcGFyc2VfYXJncygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmUparp5AABVAE50cp59AAAoaj17AABYOAAAAHJ1bigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmUpaqxzAABVAE50cp99AABlaMldcqB9AAAoaut6AABYJwAAAGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcyAobW9kdWxlKVglAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrc1UATnRyoX0AAGFo+V1yon0AACgoaut6AABYPAAAAGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm5leG1hcmtfdXRpbCAobW9kdWxlKVg6AAAAbW9kdWxlLWFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm5leG1hcmtfdXRpbFUATnRyo30AAChq63oAAFhGAAAAQ29tbWFuZCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsubmV4bWFya191dGlsKWrBeQAAVQBOdHKkfQAAKGrregAAWEoAAABydW4oKSAoYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsubmV4bWFya191dGlsLkNvbW1hbmQgbWV0aG9kKWpUdwAAVQBOdHKlfQAAKGrregAAWEsAAABQYXJzZUV2ZW50Rm4gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm5leG1hcmtfdXRpbClqs3UAAFUATnRypn0AAChq63oAAFhTAAAAcHJvY2VzcygpIChhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5uZXhtYXJrX3V0aWwuUGFyc2VFdmVudEZuIG1ldGhvZClqeXEAAFUATnRyp30AAChq63oAAFhJAAAAZGlzcGxheSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsubmV4bWFya191dGlsKWo/cQAAVQBOdHKofQAAZWjYXXKpfQAAKChqfHoAAFgpAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW0gKG1vZHVsZSlYJwAAAG1vZHVsZS1hcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbVUATnRyqn0AAChqfHoAAFg5AAAAR0NTRmlsZVN5c3RlbSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW0parN0AABVAE50cqt9AAAoanx6AABYRQAAAENIVU5LX1NJWkUgKGFwYWNoZV9iZWFtLmlvLmdjcC5nY3NmaWxlc3lzdGVtLkdDU0ZpbGVTeXN0ZW0gYXR0cmlidXRlKWpFeAAAVQBOdHKsfQAAKGp8egAAWEUAAABHQ1NfUFJFRklYIChhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbS5HQ1NGaWxlU3lzdGVtIGF0dHJpYnV0ZSlqr3kAAFUATnRyrX0AAChqfHoAAFhGAAAAc2NoZW1lKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5nY3NmaWxlc3lzdGVtLkdDU0ZpbGVTeXN0ZW0gY2xhc3MgbWV0aG9kKWrodAAAVQBOdHKufQAAKGp8egAAWD4AAABqb2luKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5nY3NmaWxlc3lzdGVtLkdDU0ZpbGVTeXN0ZW0gbWV0aG9kKWo2dgAAVQBOdHKvfQAAKGp8egAAWD8AAABzcGxpdCgpIChhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbS5HQ1NGaWxlU3lzdGVtIG1ldGhvZClqA3EAAFUATnRysH0AAChqfHoAAFhAAAAAbWtkaXJzKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5nY3NmaWxlc3lzdGVtLkdDU0ZpbGVTeXN0ZW0gbWV0aG9kKWr8dwAAVQBOdHKxfQAAKGp8egAAWEIAAABoYXNfZGlycygpIChhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbS5HQ1NGaWxlU3lzdGVtIG1ldGhvZClqRHYAAFUATnRysn0AAChqfHoAAFhAAAAAY3JlYXRlKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5nY3NmaWxlc3lzdGVtLkdDU0ZpbGVTeXN0ZW0gbWV0aG9kKWqqcAAAVQBOdHKzfQAAKGp8egAAWD4AAABvcGVuKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5nY3NmaWxlc3lzdGVtLkdDU0ZpbGVTeXN0ZW0gbWV0aG9kKWqidgAAVQBOdHK0fQAAKGp8egAAWD4AAABjb3B5KCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5nY3NmaWxlc3lzdGVtLkdDU0ZpbGVTeXN0ZW0gbWV0aG9kKWrgcAAAVQBOdHK1fQAAKGp8egAAWEAAAAByZW5hbWUoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW0uR0NTRmlsZVN5c3RlbSBtZXRob2Qpakd2AABVAE50crZ9AAAoanx6AABYQAAAAGV4aXN0cygpIChhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbS5HQ1NGaWxlU3lzdGVtIG1ldGhvZClqonkAAFUATnRyt30AAChqfHoAAFg+AAAAc2l6ZSgpIChhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbS5HQ1NGaWxlU3lzdGVtIG1ldGhvZClqV3QAAFUATnRyuH0AAChqfHoAAFhGAAAAbGFzdF91cGRhdGVkKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5nY3NmaWxlc3lzdGVtLkdDU0ZpbGVTeXN0ZW0gbWV0aG9kKWrucQAAVQBOdHK5fQAAKGp8egAAWEIAAABjaGVja3N1bSgpIChhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbS5HQ1NGaWxlU3lzdGVtIG1ldGhvZClqJ3kAAFUATnRyun0AAChqfHoAAFhAAAAAZGVsZXRlKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5nY3NmaWxlc3lzdGVtLkdDU0ZpbGVTeXN0ZW0gbWV0aG9kKWrMcgAAVQBOdHK7fQAAZWj7XXK8fQAAKGqwegAAWB0AAABhcGFjaGVfYmVhbS5pbnRlcm5hbCAobW9kdWxlKVgbAAAAbW9kdWxlLWFwYWNoZV9iZWFtLmludGVybmFsVQBOdHK9fQAAYWorAQAAXXK+fQAAKChqBXoAAFgpAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUgKG1vZHVsZSlYJwAAAG1vZHVsZS1hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZVUATnRyv30AAChqBXoAAFg1AAAAU3RhdGVTcGVjIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZSlqd3gAAFUATnRywH0AAChqBXoAAFhDAAAAdG9fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZS5TdGF0ZVNwZWMgbWV0aG9kKWqZdwAAVQBOdHLBfQAAKGoFegAAWDgAAABCYWdTdGF0ZVNwZWMgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlKWrIcgAAVQBOdHLCfQAAKGoFegAAWEYAAAB0b19ydW5uZXJfYXBpKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlLkJhZ1N0YXRlU3BlYyBtZXRob2QpalhzAABVAE50csN9AAAoagV6AABYQwAAAENvbWJpbmluZ1ZhbHVlU3RhdGVTcGVjIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZSlqX3QAAFUATnRyxH0AAChqBXoAAFhRAAAAdG9fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZS5Db21iaW5pbmdWYWx1ZVN0YXRlU3BlYyBtZXRob2Qpan9wAABVAE50csV9AAAoagV6AABYNQAAAFRpbWVyU3BlYyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUpasxxAABVAE50csZ9AAAoagV6AABYQwAAAHRvX3J1bm5lcl9hcGkoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUuVGltZXJTcGVjIG1ldGhvZClqAnMAAFUATnRyx30AAChqBXoAAFg3AAAAb25fdGltZXIoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlKWrjdwAAVQBOdHLIfQAAKGoFegAAWD0AAABnZXRfZG9mbl9zcGVjcygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUpaoZ3AABVAE50csl9AAAoagV6AABYPwAAAGlzX3N0YXRlZnVsX2RvZm4oKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlKWqwdgAAVQBOdHLKfQAAKGoFegAAWEUAAAB2YWxpZGF0ZV9zdGF0ZWZ1bF9kb2ZuKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZSlqzHMAAFUATnRyy30AAChqBXoAAFg4AAAAUnVudGltZVRpbWVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZSlqyHEAAFUATnRyzH0AAChqBXoAAFg+AAAAY2xlYXIoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUuUnVudGltZVRpbWVyIG1ldGhvZClqcHcAAFUATnRyzX0AAChqBXoAAFg8AAAAc2V0KCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlLlJ1bnRpbWVUaW1lciBtZXRob2QpatVxAABVAE50cs59AAAoagV6AABYOAAAAFJ1bnRpbWVTdGF0ZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUparZ0AABVAE50cs99AAAoagV6AABYSAAAAGZvcl9zcGVjKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlLlJ1bnRpbWVTdGF0ZSBzdGF0aWMgbWV0aG9kKWqXcAAAVQBOdHLQfQAAKGoFegAAWEEAAABwcmVmZXRjaCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZS5SdW50aW1lU3RhdGUgbWV0aG9kKWp0dAAAVQBOdHLRfQAAKGoFegAAWDsAAABCYWdSdW50aW1lU3RhdGUgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlKWoxdQAAVQBOdHLSfQAAKGoFegAAWEAAAAByZWFkKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlLkJhZ1J1bnRpbWVTdGF0ZSBtZXRob2QpalVxAABVAE50ctN9AAAoagV6AABYPwAAAGFkZCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZS5CYWdSdW50aW1lU3RhdGUgbWV0aG9kKWovcwAAVQBOdHLUfQAAKGoFegAAWEEAAABjbGVhcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZS5CYWdSdW50aW1lU3RhdGUgbWV0aG9kKWq0cQAAVQBOdHLVfQAAKGoFegAAWEYAAABDb21iaW5pbmdWYWx1ZVJ1bnRpbWVTdGF0ZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUpanx4AABVAE50ctZ9AAAoagV6AABYSwAAAHJlYWQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUuQ29tYmluaW5nVmFsdWVSdW50aW1lU3RhdGUgbWV0aG9kKWqNdQAAVQBOdHLXfQAAKGoFegAAWEoAAABhZGQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUuQ29tYmluaW5nVmFsdWVSdW50aW1lU3RhdGUgbWV0aG9kKWoccgAAVQBOdHLYfQAAKGoFegAAWEwAAABjbGVhcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZS5Db21iaW5pbmdWYWx1ZVJ1bnRpbWVTdGF0ZSBtZXRob2QpajRxAABVAE50ctl9AAAoagV6AABYPAAAAFVzZXJTdGF0ZUNvbnRleHQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlKWrXcgAAVQBOdHLafQAAKGoFegAAWEYAAABnZXRfdGltZXIoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUuVXNlclN0YXRlQ29udGV4dCBtZXRob2QparJ2AABVAE50ctt9AAAoagV6AABYRgAAAGdldF9zdGF0ZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZS5Vc2VyU3RhdGVDb250ZXh0IG1ldGhvZClqqnMAAFUATnRy3H0AAChqBXoAAFhDAAAAY29tbWl0KCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlLlVzZXJTdGF0ZUNvbnRleHQgbWV0aG9kKWp0cAAAVQBOdHLdfQAAZWpOAQAAXXLefQAAKGqaegAAWBwAAABhcGFjaGVfYmVhbS5ydW5uZXJzIChtb2R1bGUpWBoAAABtb2R1bGUtYXBhY2hlX2JlYW0ucnVubmVyc1UATnRy330AAGFo/V1y4H0AACgoavZ5AABYNwAAAGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IgKG1vZHVsZSlYNQAAAG1vZHVsZS1hcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yVQBOdHLhfQAAKGr2eQAAWFIAAABQaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IgKGNsYXNzIGluIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IpaoFzAABVAE50cuJ9AAAoavZ5AABYWwAAAE9QVElPTlMgKGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yIGF0dHJpYnV0ZSlq7HQAAFUATnRy430AAChq9nkAAFhmAAAARVJSX01JU1NJTkdfT1BUSU9OIChhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvciBhdHRyaWJ1dGUpar12AABVAE50cuR9AAAoavZ5AABYaAAAAEVSUl9NSVNTSU5HX0dDU19QQVRIIChhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvciBhdHRyaWJ1dGUpahR2AABVAE50cuV9AAAoavZ5AABYaAAAAEVSUl9JTlZBTElEX0dDU19QQVRIIChhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvciBhdHRyaWJ1dGUpajR5AABVAE50cuZ9AAAoavZ5AABYagAAAEVSUl9JTlZBTElEX0dDU19CVUNLRVQgKGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yIGF0dHJpYnV0ZSlqXngAAFUATnRy530AAChq9nkAAFhqAAAARVJSX0lOVkFMSURfR0NTX09CSkVDVCAoYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IgYXR0cmlidXRlKWoFeAAAVQBOdHLofQAAKGr2eQAAWGgAAABFUlJfSU5WQUxJRF9KT0JfTkFNRSAoYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IgYXR0cmlidXRlKWomcwAAVQBOdHLpfQAAKGr2eQAAWG4AAABFUlJfSU5WQUxJRF9QUk9KRUNUX05VTUJFUiAoYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IgYXR0cmlidXRlKWrxcgAAVQBOdHLqfQAAKGr2eQAAWGoAAABFUlJfSU5WQUxJRF9QUk9KRUNUX0lEIChhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvciBhdHRyaWJ1dGUpau51AABVAE50cut9AAAoavZ5AABYbAAAAEVSUl9JTlZBTElEX05PVF9QT1NJVElWRSAoYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IgYXR0cmlidXRlKWrkdQAAVQBOdHLsfQAAKGr2eQAAWHEAAABFUlJfSU5WQUxJRF9URVNUX01BVENIRVJfVFlQRSAoYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IgYXR0cmlidXRlKWrMdwAAVQBOdHLtfQAAKGr2eQAAWHgAAABFUlJfSU5WQUxJRF9URVNUX01BVENIRVJfVU5QSUNLTEFCTEUgKGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yIGF0dHJpYnV0ZSlqkHAAAFUATnRy7n0AAChq9nkAAFhbAAAAR0NTX1VSSSAoYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IgYXR0cmlidXRlKWqedwAAVQBOdHLvfQAAKGr2eQAAWF4AAABHQ1NfQlVDS0VUIChhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvciBhdHRyaWJ1dGUpalFxAABVAE50cvB9AAAoavZ5AABYXgAAAEdDU19TQ0hFTUUgKGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yIGF0dHJpYnV0ZSlqsnMAAFUATnRy8X0AAChq9nkAAFhfAAAASk9CX1BBVFRFUk4gKGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yIGF0dHJpYnV0ZSlqVHEAAFUATnRy8n0AAChq9nkAAFhmAAAAUFJPSkVDVF9JRF9QQVRURVJOIChhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvciBhdHRyaWJ1dGUpau5wAABVAE50cvN9AAAoavZ5AABYagAAAFBST0pFQ1RfTlVNQkVSX1BBVFRFUk4gKGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yIGF0dHJpYnV0ZSlqDXUAAFUATnRy9H0AAChq9nkAAFhkAAAARU5EUE9JTlRfUEFUVEVSTiAoYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IgYXR0cmlidXRlKWprcwAAVQBOdHL1fQAAKGr2eQAAWFsAAAB2YWxpZGF0ZSgpIChhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvciBtZXRob2Qpal15AABVAE50cvZ9AAAoavZ5AABYZAAAAGlzX3NlcnZpY2VfcnVubmVyKCkgKGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yIG1ldGhvZClq1HIAAFUATnRy930AAChq9nkAAFhnAAAAaXNfZnVsbF9zdHJpbmdfbWF0Y2goKSAoYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IgbWV0aG9kKWoxcwAAVQBOdHL4fQAAKGr2eQAAWGQAAAB2YWxpZGF0ZV9nY3NfcGF0aCgpIChhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvciBtZXRob2QpagV3AABVAE50cvl9AAAoavZ5AABYaQAAAHZhbGlkYXRlX2Nsb3VkX29wdGlvbnMoKSAoYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IgbWV0aG9kKWpBcwAAVQBOdHL6fQAAKGr2eQAAWHYAAAB2YWxpZGF0ZV9vcHRpb25hbF9hcmd1bWVudF9wb3NpdGl2ZSgpIChhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvciBtZXRob2QpasNwAABVAE50cvt9AAAoavZ5AABYaAAAAHZhbGlkYXRlX3Rlc3RfbWF0Y2hlcigpIChhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvciBtZXRob2Qpaq54AABVAE50cvx9AABlaP5dcv19AAAoKGruegAAWCMAAABhcGFjaGVfYmVhbS51dGlscy5wcm9maWxlciAobW9kdWxlKVghAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnV0aWxzLnByb2ZpbGVyVQBOdHL+fQAAKGruegAAWC0AAABQcm9maWxlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS51dGlscy5wcm9maWxlcilqZXEAAFUATnRy/30AAChq7noAAFg1AAAAU09SVEJZIChhcGFjaGVfYmVhbS51dGlscy5wcm9maWxlci5Qcm9maWxlIGF0dHJpYnV0ZSlqUXcAAFUATnRyAH4AAChq7noAAFhJAAAAZGVmYXVsdF9maWxlX2NvcHlfZm4oKSAoYXBhY2hlX2JlYW0udXRpbHMucHJvZmlsZXIuUHJvZmlsZSBzdGF0aWMgbWV0aG9kKWpLdgAAVQBOdHIBfgAAKGruegAAWEkAAABmYWN0b3J5X2Zyb21fb3B0aW9ucygpIChhcGFjaGVfYmVhbS51dGlscy5wcm9maWxlci5Qcm9maWxlIHN0YXRpYyBtZXRob2Qpavd2AABVAE50cgJ+AAAoau56AABYNAAAAE1lbW9yeVJlcG9ydGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS51dGlscy5wcm9maWxlcilqRnQAAFUATnRyA34AAChq7noAAFg6AAAAc3RhcnQoKSAoYXBhY2hlX2JlYW0udXRpbHMucHJvZmlsZXIuTWVtb3J5UmVwb3J0ZXIgbWV0aG9kKWp4dQAAVQBOdHIEfgAAKGruegAAWDkAAABzdG9wKCkgKGFwYWNoZV9iZWFtLnV0aWxzLnByb2ZpbGVyLk1lbW9yeVJlcG9ydGVyIG1ldGhvZClqw3kAAFUATnRyBX4AAChq7noAAFhAAAAAcmVwb3J0X29uY2UoKSAoYXBhY2hlX2JlYW0udXRpbHMucHJvZmlsZXIuTWVtb3J5UmVwb3J0ZXIgbWV0aG9kKWr5dQAAVQBOdHIGfgAAZWj/XXIHfgAAKChq7noAAFgkAAAAYXBhY2hlX2JlYW0udXRpbHMucHJvY2Vzc2VzIChtb2R1bGUpWCIAAABtb2R1bGUtYXBhY2hlX2JlYW0udXRpbHMucHJvY2Vzc2VzVQBOdHIIfgAAKGruegAAWC4AAABjYWxsKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS51dGlscy5wcm9jZXNzZXMparV2AABVAE50cgl+AAAoau56AABYNAAAAGNoZWNrX2NhbGwoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnV0aWxzLnByb2Nlc3Nlcylq7HYAAFUATnRyCn4AAChq7noAAFg2AAAAY2hlY2tfb3V0cHV0KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS51dGlscy5wcm9jZXNzZXMpan9zAABVAE50cgt+AAAoau56AABYLwAAAFBvcGVuKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS51dGlscy5wcm9jZXNzZXMpak93AABVAE50cgx+AABlagABAABdcg1+AAAoKGrFegAAWDUAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5oZWxwZXJfdHJhbnNmb3JtcyAobW9kdWxlKVgzAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmhlbHBlcl90cmFuc2Zvcm1zVQBOdHIOfgAAKGrFegAAWEsAAABMaWZ0ZWRDb21iaW5lUGVyS2V5IChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5oZWxwZXJfdHJhbnNmb3JtcylqmnYAAFUATnRyD34AAChqxXoAAFhSAAAAZXhwYW5kKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmhlbHBlcl90cmFuc2Zvcm1zLkxpZnRlZENvbWJpbmVQZXJLZXkgbWV0aG9kKWrydQAAVQBOdHIQfgAAKGrFegAAWFgAAABQYXJ0aWFsR3JvdXBCeUtleUNvbWJpbmluZ1ZhbHVlcyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuaGVscGVyX3RyYW5zZm9ybXMpanx0AABVAE50chF+AAAoasV6AABYZQAAAHN0YXJ0X2J1bmRsZSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5oZWxwZXJfdHJhbnNmb3Jtcy5QYXJ0aWFsR3JvdXBCeUtleUNvbWJpbmluZ1ZhbHVlcyBtZXRob2Qpatp1AABVAE50chJ+AAAoasV6AABYYAAAAHByb2Nlc3MoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuaGVscGVyX3RyYW5zZm9ybXMuUGFydGlhbEdyb3VwQnlLZXlDb21iaW5pbmdWYWx1ZXMgbWV0aG9kKWosdQAAVQBOdHITfgAAKGrFegAAWGYAAABmaW5pc2hfYnVuZGxlKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmhlbHBlcl90cmFuc2Zvcm1zLlBhcnRpYWxHcm91cEJ5S2V5Q29tYmluaW5nVmFsdWVzIG1ldGhvZClqPHEAAFUATnRyFH4AAChqxXoAAFhrAAAAZGVmYXVsdF90eXBlX2hpbnRzKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmhlbHBlcl90cmFuc2Zvcm1zLlBhcnRpYWxHcm91cEJ5S2V5Q29tYmluaW5nVmFsdWVzIG1ldGhvZClqynYAAFUATnRyFX4AAChqxXoAAFhFAAAARmluaXNoQ29tYmluZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuaGVscGVyX3RyYW5zZm9ybXMpaqhwAABVAE50chZ+AAAoasV6AABYTQAAAHByb2Nlc3MoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuaGVscGVyX3RyYW5zZm9ybXMuRmluaXNoQ29tYmluZSBtZXRob2QpapB2AABVAE50chd+AAAoasV6AABYWAAAAGRlZmF1bHRfdHlwZV9oaW50cygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5oZWxwZXJfdHJhbnNmb3Jtcy5GaW5pc2hDb21iaW5lIG1ldGhvZClq83cAAFUATnRyGH4AAGVqAQEAAF1yGX4AACgoanx6AABYKAAAAGFwYWNoZV9iZWFtLmlvLmhhZG9vcGZpbGVzeXN0ZW0gKG1vZHVsZSlYJgAAAG1vZHVsZS1hcGFjaGVfYmVhbS5pby5oYWRvb3BmaWxlc3lzdGVtVQBOdHIafgAAKGp8egAAWDsAAABIYWRvb3BGaWxlU3lzdGVtIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5oYWRvb3BmaWxlc3lzdGVtKWptcAAAVQBOdHIbfgAAKGp8egAAWEgAAABzY2hlbWUoKSAoYXBhY2hlX2JlYW0uaW8uaGFkb29wZmlsZXN5c3RlbS5IYWRvb3BGaWxlU3lzdGVtIGNsYXNzIG1ldGhvZClqe3MAAFUATnRyHH4AAChqfHoAAFhAAAAAam9pbigpIChhcGFjaGVfYmVhbS5pby5oYWRvb3BmaWxlc3lzdGVtLkhhZG9vcEZpbGVTeXN0ZW0gbWV0aG9kKWopcwAAVQBOdHIdfgAAKGp8egAAWEEAAABzcGxpdCgpIChhcGFjaGVfYmVhbS5pby5oYWRvb3BmaWxlc3lzdGVtLkhhZG9vcEZpbGVTeXN0ZW0gbWV0aG9kKWrzdgAAVQBOdHIefgAAKGp8egAAWEIAAABta2RpcnMoKSAoYXBhY2hlX2JlYW0uaW8uaGFkb29wZmlsZXN5c3RlbS5IYWRvb3BGaWxlU3lzdGVtIG1ldGhvZClqVXcAAFUATnRyH34AAChqfHoAAFhEAAAAaGFzX2RpcnMoKSAoYXBhY2hlX2JlYW0uaW8uaGFkb29wZmlsZXN5c3RlbS5IYWRvb3BGaWxlU3lzdGVtIG1ldGhvZClqxXEAAFUATnRyIH4AAChqfHoAAFhCAAAAY3JlYXRlKCkgKGFwYWNoZV9iZWFtLmlvLmhhZG9vcGZpbGVzeXN0ZW0uSGFkb29wRmlsZVN5c3RlbSBtZXRob2Qpaq55AABVAE50ciF+AAAoanx6AABYQAAAAG9wZW4oKSAoYXBhY2hlX2JlYW0uaW8uaGFkb29wZmlsZXN5c3RlbS5IYWRvb3BGaWxlU3lzdGVtIG1ldGhvZClqX3EAAFUATnRyIn4AAChqfHoAAFhAAAAAY29weSgpIChhcGFjaGVfYmVhbS5pby5oYWRvb3BmaWxlc3lzdGVtLkhhZG9vcEZpbGVTeXN0ZW0gbWV0aG9kKWr1dAAAVQBOdHIjfgAAKGp8egAAWEIAAAByZW5hbWUoKSAoYXBhY2hlX2JlYW0uaW8uaGFkb29wZmlsZXN5c3RlbS5IYWRvb3BGaWxlU3lzdGVtIG1ldGhvZClqQ3IAAFUATnRyJH4AAChqfHoAAFhCAAAAZXhpc3RzKCkgKGFwYWNoZV9iZWFtLmlvLmhhZG9vcGZpbGVzeXN0ZW0uSGFkb29wRmlsZVN5c3RlbSBtZXRob2Qpamd1AABVAE50ciV+AAAoanx6AABYQAAAAHNpemUoKSAoYXBhY2hlX2JlYW0uaW8uaGFkb29wZmlsZXN5c3RlbS5IYWRvb3BGaWxlU3lzdGVtIG1ldGhvZClqPHkAAFUATnRyJn4AAChqfHoAAFhIAAAAbGFzdF91cGRhdGVkKCkgKGFwYWNoZV9iZWFtLmlvLmhhZG9vcGZpbGVzeXN0ZW0uSGFkb29wRmlsZVN5c3RlbSBtZXRob2Qpav91AABVAE50cid+AAAoanx6AABYRAAAAGNoZWNrc3VtKCkgKGFwYWNoZV9iZWFtLmlvLmhhZG9vcGZpbGVzeXN0ZW0uSGFkb29wRmlsZVN5c3RlbSBtZXRob2QpamV5AABVAE50cih+AAAoanx6AABYQgAAAGRlbGV0ZSgpIChhcGFjaGVfYmVhbS5pby5oYWRvb3BmaWxlc3lzdGVtLkhhZG9vcEZpbGVTeXN0ZW0gbWV0aG9kKWpEcwAAVQBOdHIpfgAAZWoCAQAAXXIqfgAAKChqmnoAAFg1AAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIgKG1vZHVsZSlYMwAAAG1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lclUATnRyK34AAChqmnoAAFhGAAAARGF0YWZsb3dSdW5uZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyKWpUdgAAVQBOdHIsfgAAKGqaegAAWGUAAABwb2xsX2Zvcl9qb2JfY29tcGxldGlvbigpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lciBzdGF0aWMgbWV0aG9kKWpMdAAAVQBOdHItfgAAKGqaegAAWGgAAABncm91cF9ieV9rZXlfaW5wdXRfdmlzaXRvcigpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lciBzdGF0aWMgbWV0aG9kKWp7cAAAVQBOdHIufgAAKGqaegAAWGAAAABzaWRlX2lucHV0X3Zpc2l0b3IoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIgc3RhdGljIG1ldGhvZClqTnQAAFUATnRyL34AAChqmnoAAFhjAAAAZmxhdHRlbl9pbnB1dF92aXNpdG9yKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyIHN0YXRpYyBtZXRob2Qpal52AABVAE50cjB+AAAoapp6AABYUwAAAHJ1bl9waXBlbGluZSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lciBtZXRob2Qpav10AABVAE50cjF+AAAoapp6AABYUgAAAHJ1bl9JbXB1bHNlKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyIG1ldGhvZClqAXkAAFUATnRyMn4AAChqmnoAAFhSAAAAcnVuX0ZsYXR0ZW4oKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIgbWV0aG9kKWrycAAAVQBOdHIzfgAAKGqaegAAWFwAAABhcHBseV9Xcml0ZVRvQmlnUXVlcnkoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIgbWV0aG9kKWpDdgAAVQBOdHI0fgAAKGqaegAAWFcAAABhcHBseV9Hcm91cEJ5S2V5KCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyIG1ldGhvZClqg3UAAFUATnRyNX4AAChqmnoAAFhVAAAAcnVuX0dyb3VwQnlLZXkoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIgbWV0aG9kKWpycQAAVQBOdHI2fgAAKGqaegAAWFAAAABydW5fUGFyRG8oKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIgbWV0aG9kKWrGcAAAVQBOdHI3fgAAKGqaegAAWFoAAABhcHBseV9Db21iaW5lVmFsdWVzKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyIG1ldGhvZClqaHgAAFUATnRyOH4AAChqmnoAAFhYAAAAcnVuX0NvbWJpbmVWYWx1ZXMoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIgbWV0aG9kKWqxdwAAVQBOdHI5fgAAKGqaegAAWFEAAABhcHBseV9SZWFkKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyIG1ldGhvZClqiXYAAFUATnRyOn4AAChqmnoAAFhPAAAAcnVuX1JlYWQoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIgbWV0aG9kKWrcdAAAVQBOdHI7fgAAKGqaegAAWFcAAABydW5fX05hdGl2ZVdyaXRlKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyIG1ldGhvZClqR3EAAFUATnRyPH4AAChqmnoAAFhpAAAAc2VyaWFsaXplX3dpbmRvd2luZ19zdHJhdGVneSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lciBjbGFzcyBtZXRob2Qpal10AABVAE50cj1+AAAoapp6AABYawAAAGRlc2VyaWFsaXplX3dpbmRvd2luZ19zdHJhdGVneSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lciBjbGFzcyBtZXRob2Qpaot5AABVAE50cj5+AAAoapp6AABYZwAAAGJ5dGVfYXJyYXlfdG9fanNvbl9zdHJpbmcoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIgc3RhdGljIG1ldGhvZClqG3IAAFUATnRyP34AAChqmnoAAFhnAAAAanNvbl9zdHJpbmdfdG9fYnl0ZV9hcnJheSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lciBzdGF0aWMgbWV0aG9kKWrkdAAAVQBOdHJAfgAAKGqaegAAWF8AAABEYXRhZmxvd1J1bm5lci5DcmVhdGVQVHJhbnNmb3JtT3ZlcnJpZGUgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyKWqjcwAAVQBOdHJBfgAAKGqaegAAWHkAAABnZXRfcmVwbGFjZW1lbnRfdHJhbnNmb3JtKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyLkNyZWF0ZVBUcmFuc2Zvcm1PdmVycmlkZSBtZXRob2QpavRwAABVAE50ckJ+AAAoapp6AABYZwAAAG1hdGNoZXMoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIuQ3JlYXRlUFRyYW5zZm9ybU92ZXJyaWRlIG1ldGhvZClqMnEAAFUATnRyQ34AAGVqAwEAAF1yRH4AACgoau56AABYIAAAAGFwYWNoZV9iZWFtLnV0aWxzLnJldHJ5IChtb2R1bGUpWB4AAABtb2R1bGUtYXBhY2hlX2JlYW0udXRpbHMucmV0cnlVAE50ckV+AAAoau56AABYEgAAAFBlcm1hbmVudEV4Y2VwdGlvbnJGfgAAaqN5AABVAE50ckd+AAAoau56AABYPQAAAEZ1enplZEV4cG9uZW50aWFsSW50ZXJ2YWxzIChjbGFzcyBpbiBhcGFjaGVfYmVhbS51dGlscy5yZXRyeSlqv3QAAFUATnRySH4AAChq7noAAFhDAAAAcmV0cnlfb25fc2VydmVyX2Vycm9yc19maWx0ZXIoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnV0aWxzLnJldHJ5KWr/cgAAVQBOdHJJfgAAKGruegAAWE8AAAByZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2FuZF90aW1lb3V0X2ZpbHRlcigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udXRpbHMucmV0cnkpao53AABVAE50ckp+AAAoau56AABYQwAAAHJldHJ5X29uX2JlYW1faW9fZXJyb3JfZmlsdGVyKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS51dGlscy5yZXRyeSlqDXQAAFUATnRyS34AAChq7noAAFgoAAAAQ2xvY2sgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnV0aWxzLnJldHJ5KWoTdQAAVQBOdHJMfgAAKGruegAAWC4AAABzbGVlcCgpIChhcGFjaGVfYmVhbS51dGlscy5yZXRyeS5DbG9jayBtZXRob2Qpas52AABVAE50ck1+AAAoau56AABYMAAAAG5vX3JldHJpZXMoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnV0aWxzLnJldHJ5KWrScwAAVQBOdHJOfgAAKGruegAAWD4AAAB3aXRoX2V4cG9uZW50aWFsX2JhY2tvZmYoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnV0aWxzLnJldHJ5KWpGcgAAVQBOdHJPfgAAZWoEAQAAXXJQfgAAKChq7noAAFgkAAAAYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wIChtb2R1bGUpWCIAAABtb2R1bGUtYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wVQBOdHJRfgAAKGruegAAWDAAAABUaW1lc3RhbXAgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnV0aWxzLnRpbWVzdGFtcClq2XAAAFUATnRyUn4AAChq7noAAFg6AAAAb2YoKSAoYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wLlRpbWVzdGFtcCBzdGF0aWMgbWV0aG9kKWo7dwAAVQBOdHJTfgAAKGruegAAWD0AAABSRkNfMzMzOV9SRSAoYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wLlRpbWVzdGFtcCBhdHRyaWJ1dGUpavpzAABVAE50clR+AAAoau56AABYSAAAAGZyb21fdXRjX2RhdGV0aW1lKCkgKGFwYWNoZV9iZWFtLnV0aWxzLnRpbWVzdGFtcC5UaW1lc3RhbXAgY2xhc3MgbWV0aG9kKWp1dwAAVQBOdHJVfgAAKGruegAAWEMAAABmcm9tX3JmYzMzMzkoKSAoYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wLlRpbWVzdGFtcCBjbGFzcyBtZXRob2QpaoFxAABVAE50clZ+AAAoau56AABYPAAAAHByZWRlY2Vzc29yKCkgKGFwYWNoZV9iZWFtLnV0aWxzLnRpbWVzdGFtcC5UaW1lc3RhbXAgbWV0aG9kKWqJcwAAVQBOdHJXfgAAKGruegAAWEAAAAB0b191dGNfZGF0ZXRpbWUoKSAoYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wLlRpbWVzdGFtcCBtZXRob2Qpam55AABVAE50clh+AAAoau56AABYOwAAAHRvX3JmYzMzMzkoKSAoYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wLlRpbWVzdGFtcCBtZXRob2QpasBwAABVAE50cll+AAAoau56AABYLwAAAER1cmF0aW9uIChjbGFzcyBpbiBhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXApas93AABVAE50clp+AAAoau56AABYOQAAAG9mKCkgKGFwYWNoZV9iZWFtLnV0aWxzLnRpbWVzdGFtcC5EdXJhdGlvbiBzdGF0aWMgbWV0aG9kKWpTeQAAVQBOdHJbfgAAZWoFAQAAXXJcfgAAKChqg3oAAFgmAAAAYXBhY2hlX2JlYW0ucnVubmVycy5qb2IudXRpbHMgKG1vZHVsZSlYJAAAAG1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmpvYi51dGlsc1UATnRyXX4AAChqg3oAAFg6AAAAZGljdF90b19zdHJ1Y3QoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnJ1bm5lcnMuam9iLnV0aWxzKWqReAAAVQBOdHJefgAAKGqDegAAWDoAAABzdHJ1Y3RfdG9fZGljdCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0ucnVubmVycy5qb2IudXRpbHMpaup4AABVAE50cl9+AABlagYBAABdcmB+AAAoKGrregAAWEQAAABhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5tb2RlbHMubmV4bWFya19tb2RlbCAobW9kdWxlKVhCAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm1vZGVscy5uZXhtYXJrX21vZGVsVQBOdHJhfgAAKGrregAAWE0AAABQZXJzb24gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm1vZGVscy5uZXhtYXJrX21vZGVsKWoocwAAVQBOdHJifgAAKGrregAAWE4AAABBdWN0aW9uIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5tb2RlbHMubmV4bWFya19tb2RlbClq9HQAAFUATnRyY34AAChq63oAAFhKAAAAQmlkIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5tb2RlbHMubmV4bWFya19tb2RlbClqc3kAAFUATnRyZH4AAGVqBwEAAF1yZX4AACgoapp6AABYQAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLnN0cmVhbWluZ19jcmVhdGUgKG1vZHVsZSlYPgAAAG1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5zdHJlYW1pbmdfY3JlYXRlVQBOdHJmfgAAKGqaegAAWFIAAABTdHJlYW1pbmdDcmVhdGUgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLnN0cmVhbWluZ19jcmVhdGUpauF4AABVAE50cmd+AAAoapp6AABYZAAAAFN0cmVhbWluZ0NyZWF0ZS5EZWNvZGVBbmRFbWl0RG9GbiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uc3RyZWFtaW5nX2NyZWF0ZSlqwXYAAFUATnRyaH4AAChqmnoAAFhsAAAAcHJvY2VzcygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5zdHJlYW1pbmdfY3JlYXRlLlN0cmVhbWluZ0NyZWF0ZS5EZWNvZGVBbmRFbWl0RG9GbiBtZXRob2Qpao15AABVAE50cml+AAAoapp6AABYWgAAAFN0cmVhbWluZ0NyZWF0ZS5JbXB1bHNlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5zdHJlYW1pbmdfY3JlYXRlKWqBdgAAVQBOdHJqfgAAKGqaegAAWGEAAABleHBhbmQoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uc3RyZWFtaW5nX2NyZWF0ZS5TdHJlYW1pbmdDcmVhdGUuSW1wdWxzZSBtZXRob2QpalRyAABVAE50cmt+AAAoapp6AABYaAAAAGdldF93aW5kb3dpbmcoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uc3RyZWFtaW5nX2NyZWF0ZS5TdHJlYW1pbmdDcmVhdGUuSW1wdWxzZSBtZXRob2QpauN0AABVAE50cmx+AAAoapp6AABYbAAAAGluZmVyX291dHB1dF90eXBlKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLnN0cmVhbWluZ19jcmVhdGUuU3RyZWFtaW5nQ3JlYXRlLkltcHVsc2UgbWV0aG9kKWqGcwAAVQBOdHJtfgAAKGqaegAAWFkAAABleHBhbmQoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uc3RyZWFtaW5nX2NyZWF0ZS5TdHJlYW1pbmdDcmVhdGUgbWV0aG9kKWqFdwAAVQBOdHJufgAAZWoIAQAAXXJvfgAAKChq+XkAAFg9AAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ19xdWVyeV9xdWVyeV90b190YWJsZV9waXBlbGluZSAobW9kdWxlKVg7AAAAbW9kdWxlLWFwYWNoZV9iZWFtLmlvLmdjcC5iaWdfcXVlcnlfcXVlcnlfdG9fdGFibGVfcGlwZWxpbmVVAE50cnB+AAAoavl5AABYUgAAAHJ1bl9icV9waXBlbGluZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ19xdWVyeV9xdWVyeV90b190YWJsZV9waXBlbGluZSlqXHUAAFUATnRycX4AAGVqCQEAAF1ycn4AACgoaj17AABYJwAAAGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF91dGlscyAobW9kdWxlKVglAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF91dGlsc1UATnRyc34AAChqPXsAAFgxAAAAVGVtcERpciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3V0aWxzKWpIdAAAVQBOdHJ0fgAAKGo9ewAAWDoAAABnZXRfcGF0aCgpIChhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3RfdXRpbHMuVGVtcERpciBtZXRob2Qpah5yAABVAE50cnV+AAAoaj17AABYQgAAAGNyZWF0ZV90ZW1wX2ZpbGUoKSAoYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3V0aWxzLlRlbXBEaXIgbWV0aG9kKWrJdQAAVQBOdHJ2fgAAKGo9ewAAWDkAAABjb21wdXRlX2hhc2goKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF91dGlscylqFHQAAFUATnRyd34AAChqPXsAAFg4AAAAcGF0Y2hfcmV0cnkoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF91dGlscylqwHcAAFUATnRyeH4AAChqPXsAAFhCAAAAY2xlYW51cF9zdWJzY3JpcHRpb25zKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3RfdXRpbHMpaoNxAABVAE50cnl+AAAoaj17AABYOwAAAGNsZWFudXBfdG9waWNzKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3RfdXRpbHMpauR2AABVAE50cnp+AAAoaj17AABYPQAAAFB1bGxSZXNwb25zZU1lc3NhZ2UgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF91dGlscylqLXUAAFUATnRye34AAChqPXsAAFhBAAAAY3JlYXRlX3B1bGxfcmVzcG9uc2UoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF91dGlscylq7ncAAFUATnRyfH4AAGVqCgEAAF1yfX4AACgoaut6AABYQAAAAGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm5leG1hcmtfbGF1bmNoZXIgKG1vZHVsZSlYPgAAAG1vZHVsZS1hcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5uZXhtYXJrX2xhdW5jaGVyVQBOdHJ+fgAAKGrregAAWFIAAABOZXhtYXJrTGF1bmNoZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm5leG1hcmtfbGF1bmNoZXIpakh5AABVAE50cn9+AAAoaut6AABYXQAAAHBhcnNlX2FyZ3MoKSAoYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsubmV4bWFya19sYXVuY2hlci5OZXhtYXJrTGF1bmNoZXIgbWV0aG9kKWpqcQAAVQBOdHKAfgAAKGrregAAWGIAAABnZW5lcmF0ZV9ldmVudHMoKSAoYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsubmV4bWFya19sYXVuY2hlci5OZXhtYXJrTGF1bmNoZXIgbWV0aG9kKWpMcgAAVQBOdHKBfgAAKGrregAAWFwAAABydW5fcXVlcnkoKSAoYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsubmV4bWFya19sYXVuY2hlci5OZXhtYXJrTGF1bmNoZXIgbWV0aG9kKWrfdQAAVQBOdHKCfgAAKGrregAAWFoAAABjbGVhbnVwKCkgKGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm5leG1hcmtfbGF1bmNoZXIuTmV4bWFya0xhdW5jaGVyIG1ldGhvZClqXXEAAFUATnRyg34AAChq63oAAFhWAAAAcnVuKCkgKGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm5leG1hcmtfbGF1bmNoZXIuTmV4bWFya0xhdW5jaGVyIG1ldGhvZClqdXEAAFUATnRyhH4AAGVqHwEAAF1yhX4AACgoau56AABYJgAAAGFwYWNoZV9iZWFtLnV0aWxzLnByb3RvX3V0aWxzIChtb2R1bGUpWCQAAABtb2R1bGUtYXBhY2hlX2JlYW0udXRpbHMucHJvdG9fdXRpbHNVAE50coZ+AAAoau56AABYNAAAAHBhY2tfQW55KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS51dGlscy5wcm90b191dGlscylqy3gAAFUATnRyh34AAChq7noAAFg2AAAAdW5wYWNrX0FueSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udXRpbHMucHJvdG9fdXRpbHMpaiV0AABVAE50coh+AAAoau56AABYNwAAAHBhcnNlX0J5dGVzKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS51dGlscy5wcm90b191dGlscylqHnkAAFUATnRyiX4AAChq7noAAFg3AAAAcGFja19TdHJ1Y3QoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnV0aWxzLnByb3RvX3V0aWxzKWrkcAAAVQBOdHKKfgAAKGruegAAWDcAAABmcm9tX21pY3JvcygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udXRpbHMucHJvdG9fdXRpbHMpai1zAABVAE50cot+AABlagwBAABdcox+AAAoaut6AABYNwAAAGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLnF1ZXJpZXMgKG1vZHVsZSlYNQAAAG1vZHVsZS1hcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5xdWVyaWVzVQBOdHKNfgAAYWoNAQAAXXKOfgAAKChqsHoAAFgpAAAAYXBhY2hlX2JlYW0uaW50ZXJuYWwuaHR0cF9jbGllbnQgKG1vZHVsZSlYJwAAAG1vZHVsZS1hcGFjaGVfYmVhbS5pbnRlcm5hbC5odHRwX2NsaWVudFUATnRyj34AAChqsHoAAFhOAAAAcHJveHlfaW5mb19mcm9tX2Vudmlyb25tZW50X3ZhcigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW50ZXJuYWwuaHR0cF9jbGllbnQpar1zAABVAE50cpB+AAAoarB6AABYOwAAAGdldF9uZXdfaHR0cCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW50ZXJuYWwuaHR0cF9jbGllbnQpapJxAABVAE50cpF+AABlag4BAABdcpJ+AAAoKGo9ewAAWCAAAABhcGFjaGVfYmVhbS50b29scy51dGlscyAobW9kdWxlKVgeAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnRvb2xzLnV0aWxzVQBOdHKTfgAAKGo9ewAAWDQAAABjaGVja19jb21waWxlZCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udG9vbHMudXRpbHMpagdyAABVAE50cpR+AAAoaj17AABYMgAAAEJlbmNobWFya0NvbmZpZyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udG9vbHMudXRpbHMpaqF5AABVAE50cpV+AAAoaj17AABYPQAAAGJlbmNobWFyayAoYXBhY2hlX2JlYW0udG9vbHMudXRpbHMuQmVuY2htYXJrQ29uZmlnIGF0dHJpYnV0ZSlq6HUAAFUATnRyln4AAChqPXsAAFg4AAAAc2l6ZSAoYXBhY2hlX2JlYW0udG9vbHMudXRpbHMuQmVuY2htYXJrQ29uZmlnIGF0dHJpYnV0ZSlq1XYAAFUATnRyl34AAChqPXsAAFg8AAAAbnVtX3J1bnMgKGFwYWNoZV9iZWFtLnRvb2xzLnV0aWxzLkJlbmNobWFya0NvbmZpZyBhdHRyaWJ1dGUpail2AABVAE50cph+AAAoaj17AABYNAAAAHJ1bl9iZW5jaG1hcmtzKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50b29scy51dGlscylquXgAAFUATnRymX4AAGVqDwEAAF1ymn4AACgoaj17AABYMAAAAGFwYWNoZV9iZWFtLnRvb2xzLmNvZGVyc19taWNyb2JlbmNobWFyayAobW9kdWxlKVguAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnRvb2xzLmNvZGVyc19taWNyb2JlbmNobWFya1UATnRym34AAChqPXsAAFhNAAAAY29kZXJfYmVuY2htYXJrX2ZhY3RvcnkoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRvb2xzLmNvZGVyc19taWNyb2JlbmNobWFyaylqq3QAAFUATnRynH4AAChqPXsAAFg/AAAAc21hbGxfaW50KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50b29scy5jb2RlcnNfbWljcm9iZW5jaG1hcmspah9xAABVAE50cp1+AAAoaj17AABYPwAAAGxhcmdlX2ludCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udG9vbHMuY29kZXJzX21pY3JvYmVuY2htYXJrKWqkcgAAVQBOdHKefgAAKGo9ewAAWEMAAAByYW5kb21fc3RyaW5nKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50b29scy5jb2RlcnNfbWljcm9iZW5jaG1hcmspaqN2AABVAE50cp9+AAAoaj17AABYQgAAAHNtYWxsX3N0cmluZygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udG9vbHMuY29kZXJzX21pY3JvYmVuY2htYXJrKWoaeAAAVQBOdHKgfgAAKGo9ewAAWEIAAABsYXJnZV9zdHJpbmcoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRvb2xzLmNvZGVyc19taWNyb2JlbmNobWFyaylqn3QAAFUATnRyoX4AAChqPXsAAFg+AAAAbGlzdF9pbnQoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRvb2xzLmNvZGVyc19taWNyb2JlbmNobWFyaylq7XUAAFUATnRyon4AAChqPXsAAFhCAAAAZGljdF9pbnRfaW50KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50b29scy5jb2RlcnNfbWljcm9iZW5jaG1hcmspaq5xAABVAE50cqN+AAAoaj17AABYQAAAAHNtYWxsX2xpc3QoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRvb2xzLmNvZGVyc19taWNyb2JlbmNobWFyaylqMnkAAFUATnRypH4AAChqPXsAAFhAAAAAbGFyZ2VfbGlzdCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udG9vbHMuY29kZXJzX21pY3JvYmVuY2htYXJrKWo/dAAAVQBOdHKlfgAAKGo9ewAAWEEAAABzbWFsbF90dXBsZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udG9vbHMuY29kZXJzX21pY3JvYmVuY2htYXJrKWo5cwAAVQBOdHKmfgAAKGo9ewAAWEEAAABsYXJnZV90dXBsZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udG9vbHMuY29kZXJzX21pY3JvYmVuY2htYXJrKWpIcQAAVQBOdHKnfgAAKGo9ewAAWEAAAABzbWFsbF9kaWN0KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50b29scy5jb2RlcnNfbWljcm9iZW5jaG1hcmspasZ4AABVAE50cqh+AAAoaj17AABYQAAAAGxhcmdlX2RpY3QoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRvb2xzLmNvZGVyc19taWNyb2JlbmNobWFyaylqZXgAAFUATnRyqX4AAChqPXsAAFhEAAAAbGFyZ2VfaXRlcmFibGUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRvb2xzLmNvZGVyc19taWNyb2JlbmNobWFyaylqbnYAAFUATnRyqn4AAChqPXsAAFhNAAAAZ2xvYmFsbHlfd2luZG93ZWRfdmFsdWUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRvb2xzLmNvZGVyc19taWNyb2JlbmNobWFyaylqt3YAAFUATnRyq34AAChqPXsAAFhLAAAAcmFuZG9tX3dpbmRvd2VkX3ZhbHVlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50b29scy5jb2RlcnNfbWljcm9iZW5jaG1hcmspanx3AABVAE50cqx+AAAoaj17AABYSAAAAHd2X3dpdGhfb25lX3dpbmRvdygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udG9vbHMuY29kZXJzX21pY3JvYmVuY2htYXJrKWpMeAAAVQBOdHKtfgAAKGo9ewAAWE4AAAB3dl93aXRoX211bHRpcGxlX3dpbmRvd3MoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRvb2xzLmNvZGVyc19taWNyb2JlbmNobWFyaylqU3IAAFUATnRyrn4AAChqPXsAAFhKAAAAcnVuX2NvZGVyX2JlbmNobWFya3MoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRvb2xzLmNvZGVyc19taWNyb2JlbmNobWFyaylqYnEAAFUATnRyr34AAGVqIQEAAF1ysH4AACgoarB6AABYIgAAAGFwYWNoZV9iZWFtLmludGVybmFsLnV0aWwgKG1vZHVsZSlYIAAAAG1vZHVsZS1hcGFjaGVfYmVhbS5pbnRlcm5hbC51dGlsVQBOdHKxfgAAKGqwegAAWDgAAABBcmd1bWVudFBsYWNlaG9sZGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pbnRlcm5hbC51dGlsKWoWcgAAVQBOdHKyfgAAKGqwegAAWEAAAAByZW1vdmVfb2JqZWN0c19mcm9tX2FyZ3MoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmludGVybmFsLnV0aWwpaip5AABVAE50crN+AAAoarB6AABYPQAAAGluc2VydF92YWx1ZXNfaW5fYXJncygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW50ZXJuYWwudXRpbClq/3QAAFUATnRytH4AAChqsHoAAFg8AAAAcnVuX3VzaW5nX3RocmVhZHBvb2woKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmludGVybmFsLnV0aWwpait0AABVAE50crV+AABlahEBAABdcrZ+AAAoaut6AABYLwAAAGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrIChtb2R1bGUpWC0AAABtb2R1bGUtYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmtVAE50crd+AABhahIBAABdcrh+AAAoKGqDegAAWD8AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkucGlwZWxpbmVfZ3JhcGggKG1vZHVsZSlYPQAAAG1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkucGlwZWxpbmVfZ3JhcGhVAE50crl+AAAoaoN6AABYTwAAAFBpcGVsaW5lR3JhcGggKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5waXBlbGluZV9ncmFwaClq2HgAAFUATnRyun4AAChqg3oAAFhXAAAAZ2V0X2RvdCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkucGlwZWxpbmVfZ3JhcGguUGlwZWxpbmVHcmFwaCBtZXRob2Qpatx1AABVAE50crt+AABlaORdcrx+AAAoKGo9ewAAWCEAAABhcGFjaGVfYmVhbS50ZXN0aW5nLnV0aWwgKG1vZHVsZSlYHwAAAG1vZHVsZS1hcGFjaGVfYmVhbS50ZXN0aW5nLnV0aWxVAE50cr1+AAAoaj17AABYNQAAAFRlc3RXaW5kb3dlZFZhbHVlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50ZXN0aW5nLnV0aWwpar5yAABVAE50cr5+AAAoaj17AABYQAAAAHRpbWVzdGFtcCAoYXBhY2hlX2JlYW0udGVzdGluZy51dGlsLlRlc3RXaW5kb3dlZFZhbHVlIGF0dHJpYnV0ZSlqXncAAFUATnRyv34AAChqPXsAAFg8AAAAdmFsdWUgKGFwYWNoZV9iZWFtLnRlc3RpbmcudXRpbC5UZXN0V2luZG93ZWRWYWx1ZSBhdHRyaWJ1dGUpajV2AABVAE50csB+AAAoaj17AABYPgAAAHdpbmRvd3MgKGFwYWNoZV9iZWFtLnRlc3RpbmcudXRpbC5UZXN0V2luZG93ZWRWYWx1ZSBhdHRyaWJ1dGUpatFyAABVAE50csF+AAAoaj17AABYLwAAAGVxdWFsX3RvKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50ZXN0aW5nLnV0aWwpagd5AABVAE50csJ+AAAoaj17AABYLwAAAGlzX2VtcHR5KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50ZXN0aW5nLnV0aWwpartxAABVAE50csN+AAAoaj17AABYMgAAAGFzc2VydF90aGF0KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50ZXN0aW5nLnV0aWwpamVzAABVAE50csR+AAAoaj17AABYMgAAAG9wZW5fc2hhcmRzKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50ZXN0aW5nLnV0aWwpalhxAABVAE50csV+AABlaMNdcsZ+AAAoavZ5AABYJAAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaSAobW9kdWxlKVgiAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaVUATnRyx34AAGFqFQEAAF1yyH4AACgoaj17AABYKQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzIChtb2R1bGUpWCcAAABtb2R1bGUtYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnNVAE50csl+AAAoaj17AABYMAAAAE1lYW4gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzKWp2cwAAVQBOdHLKfgAAKGo9ewAAWDkAAABNZWFuLkdsb2JhbGx5IChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycylqtXcAAFUATnRyy34AAChqPXsAAFhAAAAAZXhwYW5kKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLk1lYW4uR2xvYmFsbHkgbWV0aG9kKWoEeQAAVQBOdHLMfgAAKGo9ewAAWDcAAABNZWFuLlBlcktleSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMpav9wAABVAE50cs1+AAAoaj17AABYPgAAAGV4cGFuZCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5NZWFuLlBlcktleSBtZXRob2QpavB0AABVAE50cs5+AAAoaj17AABYMQAAAENvdW50IChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycylq53YAAFUATnRyz34AAChqPXsAAFg6AAAAQ291bnQuR2xvYmFsbHkgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzKWqHeQAAVQBOdHLQfgAAKGo9ewAAWEEAAABleHBhbmQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuQ291bnQuR2xvYmFsbHkgbWV0aG9kKWrMcAAAVQBOdHLRfgAAKGo9ewAAWDgAAABDb3VudC5QZXJLZXkgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzKWphdQAAVQBOdHLSfgAAKGo9ewAAWD8AAABleHBhbmQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuQ291bnQuUGVyS2V5IG1ldGhvZClqpHAAAFUATnRy034AAChqPXsAAFg8AAAAQ291bnQuUGVyRWxlbWVudCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMpaiRzAABVAE50ctR+AAAoaj17AABYQwAAAGV4cGFuZCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5Db3VudC5QZXJFbGVtZW50IG1ldGhvZClqYHEAAFUATnRy1X4AAChqPXsAAFgvAAAAVG9wIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycylqIXQAAFUATnRy1n4AAChqPXsAAFgyAAAAVG9wLk9mIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycylqongAAFUATnRy134AAChqPXsAAFhAAAAAZGVmYXVsdF9sYWJlbCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5Ub3AuT2YgbWV0aG9kKWqqcgAAVQBOdHLYfgAAKGo9ewAAWDkAAABleHBhbmQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuVG9wLk9mIG1ldGhvZClqsnUAAFUATnRy2X4AAChqPXsAAFg2AAAAVG9wLlBlcktleSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMpagl5AABVAE50ctp+AAAoaj17AABYRAAAAGRlZmF1bHRfbGFiZWwoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuVG9wLlBlcktleSBtZXRob2QpalFyAABVAE50ctt+AAAoaj17AABYPQAAAGV4cGFuZCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5Ub3AuUGVyS2V5IG1ldGhvZClqrXQAAFUATnRy3H4AAChqPXsAAFg+AAAATGFyZ2VzdCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5Ub3Agc3RhdGljIG1ldGhvZClq0XQAAFUATnRy3X4AAChqPXsAAFg/AAAAU21hbGxlc3QoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuVG9wIHN0YXRpYyBtZXRob2QpamR4AABVAE50ct5+AAAoaj17AABYRAAAAExhcmdlc3RQZXJLZXkoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuVG9wIHN0YXRpYyBtZXRob2QpapB4AABVAE50ct9+AAAoaj17AABYRQAAAFNtYWxsZXN0UGVyS2V5KCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLlRvcCBzdGF0aWMgbWV0aG9kKWokeQAAVQBOdHLgfgAAKGo9ewAAWDIAAABTYW1wbGUgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzKWrwdgAAVQBOdHLhfgAAKGo9ewAAWEQAAABTYW1wbGUuRml4ZWRTaXplR2xvYmFsbHkgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzKWqkcwAAVQBOdHLifgAAKGo9ewAAWEsAAABleHBhbmQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuU2FtcGxlLkZpeGVkU2l6ZUdsb2JhbGx5IG1ldGhvZClqdnIAAFUATnRy434AAChqPXsAAFhRAAAAZGlzcGxheV9kYXRhKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLlNhbXBsZS5GaXhlZFNpemVHbG9iYWxseSBtZXRob2QpalByAABVAE50cuR+AAAoaj17AABYUgAAAGRlZmF1bHRfbGFiZWwoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuU2FtcGxlLkZpeGVkU2l6ZUdsb2JhbGx5IG1ldGhvZClqhHAAAFUATnRy5X4AAChqPXsAAFhCAAAAU2FtcGxlLkZpeGVkU2l6ZVBlcktleSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMpapFwAABVAE50cuZ+AAAoaj17AABYSQAAAGV4cGFuZCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5TYW1wbGUuRml4ZWRTaXplUGVyS2V5IG1ldGhvZClqPnkAAFUATnRy534AAChqPXsAAFhPAAAAZGlzcGxheV9kYXRhKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLlNhbXBsZS5GaXhlZFNpemVQZXJLZXkgbWV0aG9kKWqFcgAAVQBOdHLofgAAKGo9ewAAWFAAAABkZWZhdWx0X2xhYmVsKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLlNhbXBsZS5GaXhlZFNpemVQZXJLZXkgbWV0aG9kKWq8dQAAVQBOdHLpfgAAKGo9ewAAWDIAAABUb0xpc3QgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzKWrRcwAAVQBOdHLqfgAAKGo9ewAAWDkAAABleHBhbmQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuVG9MaXN0IG1ldGhvZClqgnMAAFUATnRy634AAChqPXsAAFgyAAAAVG9EaWN0IChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycylqDHkAAFUATnRy7H4AAChqPXsAAFg5AAAAZXhwYW5kKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLlRvRGljdCBtZXRob2Qpauh2AABVAE50cu1+AABlahYBAABdcu5+AAAoavl5AABYGwAAAGFwYWNoZV9iZWFtLmlvLmdjcCAobW9kdWxlKVgZAAAAbW9kdWxlLWFwYWNoZV9iZWFtLmlvLmdjcFUATnRy734AAGFqFwEAAF1y8H4AACgoaoN6AABYSAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5waXBlbGluZV9ncmFwaF9yZW5kZXJlciAobW9kdWxlKVhGAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5waXBlbGluZV9ncmFwaF9yZW5kZXJlclUATnRy8X4AAChqg3oAAFhgAAAAUGlwZWxpbmVHcmFwaFJlbmRlcmVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkucGlwZWxpbmVfZ3JhcGhfcmVuZGVyZXIpaj94AABVAE50cvJ+AAAoaoN6AABYbQAAAG9wdGlvbigpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkucGlwZWxpbmVfZ3JhcGhfcmVuZGVyZXIuUGlwZWxpbmVHcmFwaFJlbmRlcmVyIGNsYXNzIG1ldGhvZClqMnMAAFUATnRy834AAChqg3oAAFh2AAAAcmVuZGVyX3BpcGVsaW5lX2dyYXBoKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5waXBlbGluZV9ncmFwaF9yZW5kZXJlci5QaXBlbGluZUdyYXBoUmVuZGVyZXIgbWV0aG9kKWrldQAAVQBOdHL0fgAAKGqDegAAWFcAAABNdXRlUmVuZGVyZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5waXBlbGluZV9ncmFwaF9yZW5kZXJlcilqC3EAAFUATnRy9X4AAChqg3oAAFhkAAAAb3B0aW9uKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5waXBlbGluZV9ncmFwaF9yZW5kZXJlci5NdXRlUmVuZGVyZXIgY2xhc3MgbWV0aG9kKWqUcQAAVQBOdHL2fgAAKGqDegAAWG0AAAByZW5kZXJfcGlwZWxpbmVfZ3JhcGgoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LnBpcGVsaW5lX2dyYXBoX3JlbmRlcmVyLk11dGVSZW5kZXJlciBtZXRob2QpauJ2AABVAE50cvd+AAAoaoN6AABYVwAAAFRleHRSZW5kZXJlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LnBpcGVsaW5lX2dyYXBoX3JlbmRlcmVyKWr5dgAAVQBOdHL4fgAAKGqDegAAWGQAAABvcHRpb24oKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LnBpcGVsaW5lX2dyYXBoX3JlbmRlcmVyLlRleHRSZW5kZXJlciBjbGFzcyBtZXRob2QpaqxxAABVAE50cvl+AAAoaoN6AABYbQAAAHJlbmRlcl9waXBlbGluZV9ncmFwaCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkucGlwZWxpbmVfZ3JhcGhfcmVuZGVyZXIuVGV4dFJlbmRlcmVyIG1ldGhvZClqAHgAAFUATnRy+n4AAChqg3oAAFhYAAAAUHlkb3RSZW5kZXJlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LnBpcGVsaW5lX2dyYXBoX3JlbmRlcmVyKWo0dgAAVQBOdHL7fgAAKGqDegAAWGUAAABvcHRpb24oKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LnBpcGVsaW5lX2dyYXBoX3JlbmRlcmVyLlB5ZG90UmVuZGVyZXIgY2xhc3MgbWV0aG9kKWpieQAAVQBOdHL8fgAAKGqDegAAWG4AAAByZW5kZXJfcGlwZWxpbmVfZ3JhcGgoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LnBpcGVsaW5lX2dyYXBoX3JlbmRlcmVyLlB5ZG90UmVuZGVyZXIgbWV0aG9kKWoHdQAAVQBOdHL9fgAAKGqDegAAWFoAAABnZXRfcmVuZGVyZXIoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5waXBlbGluZV9ncmFwaF9yZW5kZXJlcilqEXMAAFUATnRy/n4AAGVqGAEAAF1y/34AACgoagV6AABYKgAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuc2lkZWlucHV0cyAobW9kdWxlKVgoAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuc2lkZWlucHV0c1UATnRyAH8AAChqBXoAAFhJAAAAZGVmYXVsdF93aW5kb3dfbWFwcGluZ19mbigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5zaWRlaW5wdXRzKWpIdwAAVQBOdHIBfwAAKGoFegAAWDkAAABTaWRlSW5wdXRNYXAgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuc2lkZWlucHV0cylqd3AAAFUATnRyAn8AAChqBXoAAFhOAAAAaXNfZ2xvYmFsbHlfd2luZG93ZWQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5zaWRlaW5wdXRzLlNpZGVJbnB1dE1hcCBtZXRob2Qpajl3AABVAE50cgN/AABlahkBAABdcgR/AAAoKGr5eQAAWDUAAABhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfaW9fcmVhZF9waXBlbGluZSAobW9kdWxlKVgzAAAAbW9kdWxlLWFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV9pb19yZWFkX3BpcGVsaW5lVQBOdHIFfwAAKGr5eQAAWE8AAABSb3dUb1N0cmluZ1dpdGhTbG93RG93biAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X2lvX3JlYWRfcGlwZWxpbmUpan51AABVAE50cgZ/AAAoavl5AABYVwAAAHByb2Nlc3MoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X2lvX3JlYWRfcGlwZWxpbmUuUm93VG9TdHJpbmdXaXRoU2xvd0Rvd24gbWV0aG9kKWq3eQAAVQBOdHIHfwAAKGr5eQAAWD4AAABydW4oKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV9pb19yZWFkX3BpcGVsaW5lKWrOdwAAVQBOdHIIfwAAZWoaAQAAXXIJfwAAKGruegAAWBoAAABhcGFjaGVfYmVhbS51dGlscyAobW9kdWxlKVgYAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnV0aWxzVQBOdHIKfwAAYWjxXXILfwAAKChqsHoAAFgaAAAAYXBhY2hlX2JlYW0uZXJyb3IgKG1vZHVsZSlYGAAAAG1vZHVsZS1hcGFjaGVfYmVhbS5lcnJvclUATnRyDH8AAChqsHoAAFgJAAAAQmVhbUVycm9yai1yAABVAE50cg1/AAAoarB6AABYDQAAAFBpcGVsaW5lRXJyb3Jqa3kAAFUATnRyDn8AAChqsHoAAFgLAAAAUFZhbHVlRXJyb3JqMXcAAFUATnRyD38AAChqsHoAAFgLAAAAUnVubmVyRXJyb3Jq0nIAAFUATnRyEH8AAChqsHoAAFgZAAAAUnVudGltZVZhbHVlUHJvdmlkZXJFcnJvcmq3dwAAVQBOdHIRfwAAKGqwegAAWA4AAABTaWRlSW5wdXRFcnJvcmqAdQAAVQBOdHISfwAAKGqwegAAWA4AAABUcmFuc2Zvcm1FcnJvcmr2dQAAVQBOdHITfwAAZWocAQAAXXIUfwAAKChqBXoAAFgmAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cgKG1vZHVsZSlYJAAAAG1vZHVsZS1hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvd1UATnRyFX8AAChqBXoAAFg6AAAAVGltZXN0YW1wQ29tYmluZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93KWpmcwAAVQBOdHIWfwAAKGoFegAAWEkAAABPVVRQVVRfQVRfRU9XIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5UaW1lc3RhbXBDb21iaW5lciBhdHRyaWJ1dGUpajByAABVAE50chd/AAAoagV6AABYTgAAAE9VVFBVVF9BVF9FQVJMSUVTVCAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuVGltZXN0YW1wQ29tYmluZXIgYXR0cmlidXRlKWoVcwAAVQBOdHIYfwAAKGoFegAAWEwAAABPVVRQVVRfQVRfTEFURVNUIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5UaW1lc3RhbXBDb21iaW5lciBhdHRyaWJ1dGUpanJ3AABVAE50chl/AAAoagV6AABYWgAAAE9VVFBVVF9BVF9FQVJMSUVTVF9UUkFOU0ZPUk1FRCAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuVGltZXN0YW1wQ29tYmluZXIgYXR0cmlidXRlKWo6dgAAVQBOdHIafwAAKGoFegAAWEoAAABnZXRfaW1wbCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5UaW1lc3RhbXBDb21iaW5lciBzdGF0aWMgbWV0aG9kKWr+eAAAVQBOdHIbfwAAKGoFegAAWDEAAABXaW5kb3dGbiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cpaoJyAABVAE50chx/AAAoagV6AABYPwAAAFdpbmRvd0ZuLkFzc2lnbkNvbnRleHQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93KWr7cQAAVQBOdHIdfwAAKGoFegAAWDgAAABhc3NpZ24oKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuV2luZG93Rm4gbWV0aG9kKWoRdQAAVQBOdHIefwAAKGoFegAAWD4AAABXaW5kb3dGbi5NZXJnZUNvbnRleHQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93KWppdQAAVQBOdHIffwAAKGoFegAAWEQAAABtZXJnZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5XaW5kb3dGbi5NZXJnZUNvbnRleHQgbWV0aG9kKWqpdAAAVQBOdHIgfwAAKGoFegAAWDcAAABtZXJnZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5XaW5kb3dGbiBtZXRob2QpaoJ4AABVAE50ciF/AAAoagV6AABYPAAAAGlzX21lcmdpbmcoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuV2luZG93Rm4gbWV0aG9kKWp6eAAAVQBOdHIifwAAKGoFegAAWEIAAABnZXRfd2luZG93X2NvZGVyKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LldpbmRvd0ZuIG1ldGhvZClqlHMAAFUATnRyI38AAChqBXoAAFhNAAAAZ2V0X3RyYW5zZm9ybWVkX291dHB1dF90aW1lKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LldpbmRvd0ZuIG1ldGhvZClqAnkAAFUATnRyJH8AAChqBXoAAFhJAAAAdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuV2luZG93Rm4gbWV0aG9kKWp7dgAAVQBOdHIlfwAAKGoFegAAWDYAAABCb3VuZGVkV2luZG93IChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdylqhnQAAFUATnRyJn8AAChqBXoAAFg7AAAAZW5kIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5Cb3VuZGVkV2luZG93IGF0dHJpYnV0ZSlqGXkAAFUATnRyJ38AAChqBXoAAFhEAAAAbWF4X3RpbWVzdGFtcCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5Cb3VuZGVkV2luZG93IG1ldGhvZClqjnAAAFUATnRyKH8AAChqBXoAAFg3AAAASW50ZXJ2YWxXaW5kb3cgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93KWpFdwAAVQBOdHIpfwAAKGoFegAAWD4AAABzdGFydCAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuSW50ZXJ2YWxXaW5kb3cgYXR0cmlidXRlKWr4dAAAVQBOdHIqfwAAKGoFegAAWDwAAABlbmQgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LkludGVydmFsV2luZG93IGF0dHJpYnV0ZSlqo3cAAFUATnRyK38AAChqBXoAAFhCAAAAaW50ZXJzZWN0cygpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5JbnRlcnZhbFdpbmRvdyBtZXRob2QpamxzAABVAE50cix/AAAoagV6AABYPQAAAHVuaW9uKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LkludGVydmFsV2luZG93IG1ldGhvZClqlXAAAFUATnRyLX8AAChqBXoAAFg5AAAAVGltZXN0YW1wZWRWYWx1ZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cpapZ2AABVAE50ci5/AAAoagV6AABYQAAAAHZhbHVlIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5UaW1lc3RhbXBlZFZhbHVlIGF0dHJpYnV0ZSlqP3UAAFUATnRyL38AAChqBXoAAFhEAAAAdGltZXN0YW1wIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5UaW1lc3RhbXBlZFZhbHVlIGF0dHJpYnV0ZSlqWHQAAFUATnRyMH8AAChqBXoAAFg1AAAAR2xvYmFsV2luZG93IChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdylqBXQAAFUATnRyMX8AAChqBXoAAFg7AAAATm9uTWVyZ2luZ1dpbmRvd0ZuIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdylqP3YAAFUATnRyMn8AAChqBXoAAFhGAAAAaXNfbWVyZ2luZygpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5Ob25NZXJnaW5nV2luZG93Rm4gbWV0aG9kKWqRdgAAVQBOdHIzfwAAKGoFegAAWEEAAABtZXJnZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5Ob25NZXJnaW5nV2luZG93Rm4gbWV0aG9kKWqmcwAAVQBOdHI0fwAAKGoFegAAWDYAAABHbG9iYWxXaW5kb3dzIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdylq5nMAAFUATnRyNX8AAChqBXoAAFhLAAAAd2luZG93ZWRfdmFsdWUoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuR2xvYmFsV2luZG93cyBjbGFzcyBtZXRob2QpaiFzAABVAE50cjZ/AAAoagV6AABYPQAAAGFzc2lnbigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5HbG9iYWxXaW5kb3dzIG1ldGhvZClqMHkAAFUATnRyN38AAChqBXoAAFhHAAAAZ2V0X3dpbmRvd19jb2RlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5HbG9iYWxXaW5kb3dzIG1ldGhvZClqOnMAAFUATnRyOH8AAChqBXoAAFhOAAAAdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuR2xvYmFsV2luZG93cyBtZXRob2Qpash3AABVAE50cjl/AAAoagV6AABYVwAAAGZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuR2xvYmFsV2luZG93cyBzdGF0aWMgbWV0aG9kKWpMcwAAVQBOdHI6fwAAKGoFegAAWDUAAABGaXhlZFdpbmRvd3MgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93KWpfdgAAVQBOdHI7fwAAKGoFegAAWDsAAABzaXplIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5GaXhlZFdpbmRvd3MgYXR0cmlidXRlKWqqcQAAVQBOdHI8fwAAKGoFegAAWD0AAABvZmZzZXQgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LkZpeGVkV2luZG93cyBhdHRyaWJ1dGUpamhzAABVAE50cj1/AAAoagV6AABYPAAAAGFzc2lnbigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5GaXhlZFdpbmRvd3MgbWV0aG9kKWpidwAAVQBOdHI+fwAAKGoFegAAWEYAAABnZXRfd2luZG93X2NvZGVyKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LkZpeGVkV2luZG93cyBtZXRob2QpamByAABVAE50cj9/AAAoagV6AABYTQAAAHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LkZpeGVkV2luZG93cyBtZXRob2Qpah91AABVAE50ckB/AAAoagV6AABYVgAAAGZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuRml4ZWRXaW5kb3dzIHN0YXRpYyBtZXRob2QpasR4AABVAE50ckF/AAAoagV6AABYNwAAAFNsaWRpbmdXaW5kb3dzIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdylq33cAAFUATnRyQn8AAChqBXoAAFg9AAAAc2l6ZSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuU2xpZGluZ1dpbmRvd3MgYXR0cmlidXRlKWr5cAAAVQBOdHJDfwAAKGoFegAAWD8AAABwZXJpb2QgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlNsaWRpbmdXaW5kb3dzIGF0dHJpYnV0ZSlqInQAAFUATnRyRH8AAChqBXoAAFg/AAAAb2Zmc2V0IChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5TbGlkaW5nV2luZG93cyBhdHRyaWJ1dGUpalV2AABVAE50ckV/AAAoagV6AABYPgAAAGFzc2lnbigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5TbGlkaW5nV2luZG93cyBtZXRob2QpajR0AABVAE50ckZ/AAAoagV6AABYSAAAAGdldF93aW5kb3dfY29kZXIoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuU2xpZGluZ1dpbmRvd3MgbWV0aG9kKWoKdAAAVQBOdHJHfwAAKGoFegAAWE8AAAB0b19ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5TbGlkaW5nV2luZG93cyBtZXRob2QpaphyAABVAE50ckh/AAAoagV6AABYWAAAAGZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuU2xpZGluZ1dpbmRvd3Mgc3RhdGljIG1ldGhvZClqlncAAFUATnRySX8AAChqBXoAAFgxAAAAU2Vzc2lvbnMgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93KWqtdgAAVQBOdHJKfwAAKGoFegAAWDsAAABnYXBfc2l6ZSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuU2Vzc2lvbnMgYXR0cmlidXRlKWoUcgAAVQBOdHJLfwAAKGoFegAAWDgAAABhc3NpZ24oKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuU2Vzc2lvbnMgbWV0aG9kKWqIdwAAVQBOdHJMfwAAKGoFegAAWEIAAABnZXRfd2luZG93X2NvZGVyKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlNlc3Npb25zIG1ldGhvZClqp3EAAFUATnRyTX8AAChqBXoAAFg3AAAAbWVyZ2UoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuU2Vzc2lvbnMgbWV0aG9kKWqScwAAVQBOdHJOfwAAKGoFegAAWEkAAAB0b19ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5TZXNzaW9ucyBtZXRob2QpagF3AABVAE50ck9/AAAoagV6AABYUgAAAGZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuU2Vzc2lvbnMgc3RhdGljIG1ldGhvZClqgHgAAFUATnRyUH8AAGVqHQEAAF1yUX8AACgoau56AABYKAAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2sgKG1vZHVsZSlYJgAAAG1vZHVsZS1hcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWNoZWNrVQBOdHJSfwAAKGruegAAWD4AAABBYnN0cmFjdERvRm5XcmFwcGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWNoZWNrKWqacgAAVQBOdHJTfwAAKGruegAAWEYAAAB3cmFwcGVyKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2suQWJzdHJhY3REb0ZuV3JhcHBlciBtZXRob2QpalJ1AABVAE50clR/AAAoau56AABYSwAAAHN0YXJ0X2J1bmRsZSgpIChhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWNoZWNrLkFic3RyYWN0RG9GbldyYXBwZXIgbWV0aG9kKWpxcgAAVQBOdHJVfwAAKGruegAAWEYAAABwcm9jZXNzKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2suQWJzdHJhY3REb0ZuV3JhcHBlciBtZXRob2QpapFyAABVAE50clZ/AAAoau56AABYTAAAAGZpbmlzaF9idW5kbGUoKSAoYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVjaGVjay5BYnN0cmFjdERvRm5XcmFwcGVyIG1ldGhvZClq5nIAAFUATnRyV38AAChq7noAAFhRAAAAaXNfcHJvY2Vzc19ib3VuZGVkKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2suQWJzdHJhY3REb0ZuV3JhcHBlciBtZXRob2QpahlzAABVAE50clh/AAAoau56AABYQQAAAE91dHB1dENoZWNrV3JhcHBlckRvRm4gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2spaqN4AABVAE50cll/AAAoau56AABYSQAAAHdyYXBwZXIoKSAoYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVjaGVjay5PdXRwdXRDaGVja1dyYXBwZXJEb0ZuIG1ldGhvZClqingAAFUATnRyWn8AAChq7noAAFg/AAAAVHlwZUNoZWNrV3JhcHBlckRvRm4gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2spamN5AABVAE50clt/AAAoau56AABYRwAAAHdyYXBwZXIoKSAoYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVjaGVjay5UeXBlQ2hlY2tXcmFwcGVyRG9GbiBtZXRob2Qpao5xAABVAE50clx/AAAoau56AABYRwAAAHByb2Nlc3MoKSAoYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVjaGVjay5UeXBlQ2hlY2tXcmFwcGVyRG9GbiBtZXRob2QpamZwAABVAE50cl1/AAAoau56AABYPQAAAFR5cGVDaGVja0NvbWJpbmVGbiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVjaGVjaylqIHEAAFUATnRyXn8AAChq7noAAFhQAAAAY3JlYXRlX2FjY3VtdWxhdG9yKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2suVHlwZUNoZWNrQ29tYmluZUZuIG1ldGhvZClqH3gAAFUATnRyX38AAChq7noAAFhHAAAAYWRkX2lucHV0KCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2suVHlwZUNoZWNrQ29tYmluZUZuIG1ldGhvZClq23cAAFUATnRyYH8AAChq7noAAFhQAAAAbWVyZ2VfYWNjdW11bGF0b3JzKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2suVHlwZUNoZWNrQ29tYmluZUZuIG1ldGhvZClqc3YAAFUATnRyYX8AAChq7noAAFhMAAAAZXh0cmFjdF9vdXRwdXQoKSAoYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVjaGVjay5UeXBlQ2hlY2tDb21iaW5lRm4gbWV0aG9kKWrRdwAAVQBOdHJifwAAKGruegAAWDsAAABUeXBlQ2hlY2tWaXNpdG9yIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWNoZWNrKWprcQAAVQBOdHJjfwAAKGruegAAWFUAAABlbnRlcl9jb21wb3NpdGVfdHJhbnNmb3JtKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2suVHlwZUNoZWNrVmlzaXRvciBtZXRob2QpasdwAABVAE50cmR/AAAoau56AABYVQAAAGxlYXZlX2NvbXBvc2l0ZV90cmFuc2Zvcm0oKSAoYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVjaGVjay5UeXBlQ2hlY2tWaXNpdG9yIG1ldGhvZClqQ3kAAFUATnRyZX8AAChq7noAAFhLAAAAdmlzaXRfdHJhbnNmb3JtKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2suVHlwZUNoZWNrVmlzaXRvciBtZXRob2QpalZ1AABVAE50cmZ/AABlah4BAABdcmd/AAAoKGqwegAAWCYAAABhcGFjaGVfYmVhbS5jb2RlcnMub2JzZXJ2YWJsZSAobW9kdWxlKVgkAAAAbW9kdWxlLWFwYWNoZV9iZWFtLmNvZGVycy5vYnNlcnZhYmxlVQBOdHJofwAAKGqwegAAWDgAAABPYnNlcnZhYmxlTWl4aW4gKGNsYXNzIGluIGFwYWNoZV9iZWFtLmNvZGVycy5vYnNlcnZhYmxlKWo2cwAAVQBOdHJpfwAAKGqwegAAWEoAAAByZWdpc3Rlcl9vYnNlcnZlcigpIChhcGFjaGVfYmVhbS5jb2RlcnMub2JzZXJ2YWJsZS5PYnNlcnZhYmxlTWl4aW4gbWV0aG9kKWoFcgAAVQBOdHJqfwAAKGqwegAAWEkAAABub3RpZnlfb2JzZXJ2ZXJzKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5vYnNlcnZhYmxlLk9ic2VydmFibGVNaXhpbiBtZXRob2Qpam54AABVAE50cmt/AABlalsBAABdcmx/AAAoKGp8egAAWB4AAABhcGFjaGVfYmVhbS5pby5pb2Jhc2UgKG1vZHVsZSlYHAAAAG1vZHVsZS1hcGFjaGVfYmVhbS5pby5pb2Jhc2VVAE50cm1/AAAoanx6AABYLgAAAEJvdW5kZWRTb3VyY2UgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmlvYmFzZSlqtHUAAFUATnRybn8AAChqfHoAAFg8AAAAZXN0aW1hdGVfc2l6ZSgpIChhcGFjaGVfYmVhbS5pby5pb2Jhc2UuQm91bmRlZFNvdXJjZSBtZXRob2QpahF4AABVAE50cm9/AAAoanx6AABYNAAAAHNwbGl0KCkgKGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5Cb3VuZGVkU291cmNlIG1ldGhvZClqcngAAFUATnRycH8AAChqfHoAAFhAAAAAZ2V0X3JhbmdlX3RyYWNrZXIoKSAoYXBhY2hlX2JlYW0uaW8uaW9iYXNlLkJvdW5kZWRTb3VyY2UgbWV0aG9kKWoQeQAAVQBOdHJxfwAAKGp8egAAWDMAAAByZWFkKCkgKGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5Cb3VuZGVkU291cmNlIG1ldGhvZClqtHQAAFUATnRycn8AAChqfHoAAFhDAAAAZGVmYXVsdF9vdXRwdXRfY29kZXIoKSAoYXBhY2hlX2JlYW0uaW8uaW9iYXNlLkJvdW5kZWRTb3VyY2UgbWV0aG9kKWrFeQAAVQBOdHJzfwAAKGp8egAAWDkAAABpc19ib3VuZGVkKCkgKGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5Cb3VuZGVkU291cmNlIG1ldGhvZClqwnUAAFUATnRydH8AAChqfHoAAFgtAAAAUmFuZ2VUcmFja2VyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5pb2Jhc2Upart2AABVAE50cnV/AAAoanx6AABYQwAAAFNQTElUX1BPSU5UU19VTktOT1dOIChhcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmFuZ2VUcmFja2VyIGF0dHJpYnV0ZSlqXXYAAFUATnRydn8AAChqfHoAAFg8AAAAc3RhcnRfcG9zaXRpb24oKSAoYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJhbmdlVHJhY2tlciBtZXRob2Qpakt0AABVAE50cnd/AAAoanx6AABYOwAAAHN0b3BfcG9zaXRpb24oKSAoYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJhbmdlVHJhY2tlciBtZXRob2QpatJwAABVAE50cnh/AAAoanx6AABYNwAAAHRyeV9jbGFpbSgpIChhcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmFuZ2VUcmFja2VyIG1ldGhvZClqXnEAAFUATnRyeX8AAChqfHoAAFhCAAAAc2V0X2N1cnJlbnRfcG9zaXRpb24oKSAoYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJhbmdlVHJhY2tlciBtZXRob2QpalF5AABVAE50cnp/AAAoanx6AABYQgAAAHBvc2l0aW9uX2F0X2ZyYWN0aW9uKCkgKGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SYW5nZVRyYWNrZXIgbWV0aG9kKWrGeQAAVQBOdHJ7fwAAKGp8egAAWDcAAAB0cnlfc3BsaXQoKSAoYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJhbmdlVHJhY2tlciBtZXRob2Qpant1AABVAE50cnx/AAAoanx6AABYPwAAAGZyYWN0aW9uX2NvbnN1bWVkKCkgKGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SYW5nZVRyYWNrZXIgbWV0aG9kKWo4cQAAVQBOdHJ9fwAAKGp8egAAWDoAAABzcGxpdF9wb2ludHMoKSAoYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJhbmdlVHJhY2tlciBtZXRob2Qpau1wAABVAE50cn5/AAAoanx6AABYUQAAAHNldF9zcGxpdF9wb2ludHNfdW5jbGFpbWVkX2NhbGxiYWNrKCkgKGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SYW5nZVRyYWNrZXIgbWV0aG9kKWpTdgAAVQBOdHJ/fwAAKGp8egAAWCUAAABTaW5rIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5pb2Jhc2Upalx3AABVAE50coB/AAAoanx6AABYNgAAAGluaXRpYWxpemVfd3JpdGUoKSAoYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlNpbmsgbWV0aG9kKWrEcQAAVQBOdHKBfwAAKGp8egAAWDEAAABvcGVuX3dyaXRlcigpIChhcGFjaGVfYmVhbS5pby5pb2Jhc2UuU2luayBtZXRob2QpanByAABVAE50coJ/AAAoanx6AABYMgAAAHByZV9maW5hbGl6ZSgpIChhcGFjaGVfYmVhbS5pby5pb2Jhc2UuU2luayBtZXRob2QpalB2AABVAE50coN/AAAoanx6AABYNAAAAGZpbmFsaXplX3dyaXRlKCkgKGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5TaW5rIG1ldGhvZClqIHcAAFUATnRyhH8AAChqfHoAAFgnAAAAV3JpdGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5pb2Jhc2UpauRxAABVAE50coV/AAAoanx6AABYLQAAAHdyaXRlKCkgKGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5Xcml0ZXIgbWV0aG9kKWpldQAAVQBOdHKGfwAAKGp8egAAWC0AAABjbG9zZSgpIChhcGFjaGVfYmVhbS5pby5pb2Jhc2UuV3JpdGVyIG1ldGhvZClqP3kAAFUATnRyh38AAChqfHoAAFglAAAAUmVhZCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uaW9iYXNlKWoCcgAAVQBOdHKIfwAAKGp8egAAWCwAAABleHBhbmQoKSAoYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJlYWQgbWV0aG9kKWrccAAAVQBOdHKJfwAAKGp8egAAWDMAAABnZXRfd2luZG93aW5nKCkgKGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SZWFkIG1ldGhvZClqHnQAAFUATnRyin8AAChqfHoAAFgyAAAAZGlzcGxheV9kYXRhKCkgKGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SZWFkIG1ldGhvZClq7nQAAFUATnRyi38AAChqfHoAAFg9AAAAdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJlYWQgbWV0aG9kKWqmdwAAVQBOdHKMfwAAKGp8egAAWEYAAABmcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SZWFkIHN0YXRpYyBtZXRob2QpatxyAABVAE50co1/AAAoanx6AABYJgAAAFdyaXRlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5pb2Jhc2UpaoBxAABVAE50co5/AAAoanx6AABYMwAAAGRpc3BsYXlfZGF0YSgpIChhcGFjaGVfYmVhbS5pby5pb2Jhc2UuV3JpdGUgbWV0aG9kKWppcgAAVQBOdHKPfwAAKGp8egAAWC0AAABleHBhbmQoKSAoYXBhY2hlX2JlYW0uaW8uaW9iYXNlLldyaXRlIG1ldGhvZClqenMAAFUATnRykH8AAChqfHoAAFgzAAAAUmVzdHJpY3Rpb25UcmFja2VyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5pb2Jhc2UpajF4AABVAE50cpF/AAAoanx6AABYRwAAAGN1cnJlbnRfcmVzdHJpY3Rpb24oKSAoYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJlc3RyaWN0aW9uVHJhY2tlciBtZXRob2QpaoN5AABVAE50cpJ/AAAoanx6AABYPgAAAGNoZWNrcG9pbnQoKSAoYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJlc3RyaWN0aW9uVHJhY2tlciBtZXRob2QpauxyAABVAE50cpN/AAAoanx6AABYPgAAAGNoZWNrX2RvbmUoKSAoYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJlc3RyaWN0aW9uVHJhY2tlciBtZXRob2Qpaj93AABVAE50cpR/AABlaiABAABdcpV/AAAoKGp8egAAWDsAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmFkYXB0aXZlX3Rocm90dGxlciAobW9kdWxlKVg5AAAAbW9kdWxlLWFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuYWRhcHRpdmVfdGhyb3R0bGVyVQBOdHKWfwAAKGp8egAAWE8AAABBZGFwdGl2ZVRocm90dGxlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5hZGFwdGl2ZV90aHJvdHRsZXIpard4AABVAE50cpd/AAAoanx6AABYXQAAAE1JTl9SRVFVRVNUUyAoYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5hZGFwdGl2ZV90aHJvdHRsZXIuQWRhcHRpdmVUaHJvdHRsZXIgYXR0cmlidXRlKWpEeAAAVQBOdHKYfwAAKGp8egAAWGAAAAB0aHJvdHRsZV9yZXF1ZXN0KCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuYWRhcHRpdmVfdGhyb3R0bGVyLkFkYXB0aXZlVGhyb3R0bGVyIG1ldGhvZClqj3MAAFUATnRymX8AAChqfHoAAFhiAAAAc3VjY2Vzc2Z1bF9yZXF1ZXN0KCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuYWRhcHRpdmVfdGhyb3R0bGVyLkFkYXB0aXZlVGhyb3R0bGVyIG1ldGhvZClqVnIAAFUATnRymn8AAGVqQgEAAF1ym38AACgoanx6AABYNwAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEucXVlcnlfc3BsaXR0ZXIgKG1vZHVsZSlYNQAAAG1vZHVsZS1hcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLnF1ZXJ5X3NwbGl0dGVyVQBOdHKcfwAAKGp8egAAWEcAAABnZXRfc3BsaXRzKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLnF1ZXJ5X3NwbGl0dGVyKWpqcwAAVQBOdHKdfwAAZWoiAQAAXXKefwAAKChqxXoAAFgxAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X3J1bm5lciAobW9kdWxlKVgvAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9ydW5uZXJVAE50cp9/AAAoasV6AABYSQAAAFN3aXRjaGluZ0RpcmVjdFJ1bm5lciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X3J1bm5lcilq+XIAAFUATnRyoH8AAChqxXoAAFhWAAAAcnVuX3BpcGVsaW5lKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9ydW5uZXIuU3dpdGNoaW5nRGlyZWN0UnVubmVyIG1ldGhvZClqG3EAAFUATnRyoX8AAChqxXoAAFhLAAAAQnVuZGxlQmFzZWREaXJlY3RSdW5uZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9ydW5uZXIpahVxAABVAE50cqJ/AAAoasV6AABYWAAAAHJ1bl9waXBlbGluZSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfcnVubmVyLkJ1bmRsZUJhc2VkRGlyZWN0UnVubmVyIG1ldGhvZClqW3IAAFUATnRyo38AAChqxXoAAFhBAAAARGlyZWN0UnVubmVyIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X3J1bm5lcilqpXIAAFUATnRypH8AAGVqIwEAAF1ypX8AACgoasV6AABYNQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyIChtb2R1bGUpWDMAAABtb2R1bGUtYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXJVAE50cqZ/AAAoasV6AABYZQAAAFByb2Nlc3NLZXllZEVsZW1lbnRzVmlhS2V5ZWRXb3JrSXRlbXNPdmVycmlkZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIpavB3AABVAE50cqd/AAAoasV6AABYbQAAAG1hdGNoZXMoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIuUHJvY2Vzc0tleWVkRWxlbWVudHNWaWFLZXllZFdvcmtJdGVtc092ZXJyaWRlIG1ldGhvZClqtXMAAFUATnRyqH8AAChqxXoAAFh/AAAAZ2V0X3JlcGxhY2VtZW50X3RyYW5zZm9ybSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lci5Qcm9jZXNzS2V5ZWRFbGVtZW50c1ZpYUtleWVkV29ya0l0ZW1zT3ZlcnJpZGUgbWV0aG9kKWr9dwAAVQBOdHKpfwAAKGrFegAAWF0AAABQcm9jZXNzS2V5ZWRFbGVtZW50c1ZpYUtleWVkV29ya0l0ZW1zIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lcilqHnEAAFUATnRyqn8AAChqxXoAAFhkAAAAZXhwYW5kKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyLlByb2Nlc3NLZXllZEVsZW1lbnRzVmlhS2V5ZWRXb3JrSXRlbXMgbWV0aG9kKWrreAAAVQBOdHKrfwAAKGrFegAAWEcAAABQcm9jZXNzRWxlbWVudHMgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyKWpxdgAAVQBOdHKsfwAAKGrFegAAWE4AAABleHBhbmQoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIuUHJvY2Vzc0VsZW1lbnRzIG1ldGhvZClqrHQAAFUATnRyrX8AAChqxXoAAFhWAAAAbmV3X3Byb2Nlc3NfZm4oKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIuUHJvY2Vzc0VsZW1lbnRzIG1ldGhvZClqC3IAAFUATnRyrn8AAChqxXoAAFhBAAAAUHJvY2Vzc0ZuIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lcilq3nUAAFUATnRyr38AAChqxXoAAFhPAAAAc3RlcF9jb250ZXh0IChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lci5Qcm9jZXNzRm4gYXR0cmlidXRlKWpqcgAAVQBOdHKwfwAAKGrFegAAWF0AAABzZXRfcHJvY2Vzc19lbGVtZW50X2ludm9rZXIoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIuUHJvY2Vzc0ZuIG1ldGhvZClqUnIAAFUATnRysX8AAChqxXoAAFhJAAAAcHJvY2VzcygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lci5Qcm9jZXNzRm4gbWV0aG9kKWo2dAAAVQBOdHKyfwAAKGrFegAAWFAAAABTREZQcm9jZXNzRWxlbWVudEludm9rZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyKWo8dgAAVQBOdHKzfwAAKGrFegAAWFcAAABTREZQcm9jZXNzRWxlbWVudEludm9rZXIuUmVzdWx0IChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lcilqyHUAAFUATnRytH8AAChqxXoAAFhcAAAAdGVzdF9tZXRob2QoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIuU0RGUHJvY2Vzc0VsZW1lbnRJbnZva2VyIG1ldGhvZClqe3cAAFUATnRytX8AAChqxXoAAFhnAAAAaW52b2tlX3Byb2Nlc3NfZWxlbWVudCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lci5TREZQcm9jZXNzRWxlbWVudEludm9rZXIgbWV0aG9kKWozeQAAVQBOdHK2fwAAZWokAQAAXXK3fwAAKChqxXoAAFg2AAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXZhbHVhdGlvbl9jb250ZXh0IChtb2R1bGUpWDQAAABtb2R1bGUtYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXZhbHVhdGlvbl9jb250ZXh0VQBOdHK4fwAAKGrFegAAWEoAAABFdmFsdWF0aW9uQ29udGV4dCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXZhbHVhdGlvbl9jb250ZXh0KWr+dQAAVQBOdHK5fwAAKGrFegAAWFIAAABtZXRyaWNzKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dC5FdmFsdWF0aW9uQ29udGV4dCBtZXRob2Qpan1yAABVAE50crp/AAAoasV6AABYXAAAAGlzX3Jvb3RfdHJhbnNmb3JtKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dC5FdmFsdWF0aW9uQ29udGV4dCBtZXRob2Qpaj9yAABVAE50crt/AAAoasV6AABYWAAAAGhhbmRsZV9yZXN1bHQoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXZhbHVhdGlvbl9jb250ZXh0LkV2YWx1YXRpb25Db250ZXh0IG1ldGhvZClqK3MAAFUATnRyvH8AAChqxXoAAFhgAAAAZ2V0X2FnZ3JlZ2F0b3JfdmFsdWVzKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dC5FdmFsdWF0aW9uQ29udGV4dCBtZXRob2QpaklxAABVAE50cr1/AAAoasV6AABYawAAAHNjaGVkdWxlX3BlbmRpbmdfdW5ibG9ja2VkX3Rhc2tzKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dC5FdmFsdWF0aW9uQ29udGV4dCBtZXRob2QpavByAABVAE50cr5/AAAoasV6AABYYAAAAGdldF9leGVjdXRpb25fY29udGV4dCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHQuRXZhbHVhdGlvbkNvbnRleHQgbWV0aG9kKWrEdAAAVQBOdHK/fwAAKGrFegAAWFgAAABjcmVhdGVfYnVuZGxlKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dC5FdmFsdWF0aW9uQ29udGV4dCBtZXRob2Qpajt4AABVAE50csB/AAAoasV6AABYaAAAAGNyZWF0ZV9lbXB0eV9jb21taXR0ZWRfYnVuZGxlKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dC5FdmFsdWF0aW9uQ29udGV4dCBtZXRob2Qpajd2AABVAE50csF/AAAoasV6AABYXQAAAGV4dHJhY3RfYWxsX3RpbWVycygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHQuRXZhbHVhdGlvbkNvbnRleHQgbWV0aG9kKWqzeAAAVQBOdHLCfwAAKGrFegAAWFIAAABpc19kb25lKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dC5FdmFsdWF0aW9uQ29udGV4dCBtZXRob2Qpak53AABVAE50csN/AAAoasV6AABYaQAAAGdldF92YWx1ZV9vcl9ibG9ja191bnRpbF9yZWFkeSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHQuRXZhbHVhdGlvbkNvbnRleHQgbWV0aG9kKWqZcQAAVQBOdHLEfwAAKGrFegAAWEwAAABEaXJlY3RVbm1lcmdlZFN0YXRlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHQpak5zAABVAE50csV/AAAoasV6AABYSgAAAERpcmVjdFN0ZXBDb250ZXh0IChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHQpaldyAABVAE50csZ/AAAoasV6AABYWgAAAGdldF9rZXllZF9zdGF0ZSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHQuRGlyZWN0U3RlcENvbnRleHQgbWV0aG9kKWqGeQAAVQBOdHLHfwAAZWolAQAAXXLIfwAAKChqBXoAAFg4AAAAYXBhY2hlX2JlYW0udHlwZWhpbnRzLm5hdGl2ZV90eXBlX2NvbXBhdGliaWxpdHkgKG1vZHVsZSlYNgAAAG1vZHVsZS1hcGFjaGVfYmVhbS50eXBlaGludHMubmF0aXZlX3R5cGVfY29tcGF0aWJpbGl0eVUATnRyyX8AAChqBXoAAFhSAAAAY29udmVydF90b19iZWFtX3R5cGUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5uYXRpdmVfdHlwZV9jb21wYXRpYmlsaXR5KWpJeAAAVQBOdHLKfwAAKGoFegAAWFMAAABjb252ZXJ0X3RvX2JlYW1fdHlwZXMoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5uYXRpdmVfdHlwZV9jb21wYXRpYmlsaXR5KWrNdQAAVQBOdHLLfwAAZWomAQAAXXLMfwAAKChqBXoAAFgoAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50aW1ldXRpbCAobW9kdWxlKVgmAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudGltZXV0aWxVAE50cs1/AAAoagV6AABYNQAAAFRpbWVEb21haW4gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudGltZXV0aWwpajhyAABVAE50cs5/AAAoagV6AABYQAAAAFdBVEVSTUFSSyAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50aW1ldXRpbC5UaW1lRG9tYWluIGF0dHJpYnV0ZSlqInkAAFUATnRyz38AAChqBXoAAFhAAAAAUkVBTF9USU1FIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRpbWV1dGlsLlRpbWVEb21haW4gYXR0cmlidXRlKWoXeAAAVQBOdHLQfwAAKGoFegAAWEoAAABERVBFTkRFTlRfUkVBTF9USU1FIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRpbWV1dGlsLlRpbWVEb21haW4gYXR0cmlidXRlKWqrdgAAVQBOdHLRfwAAKGoFegAAWEgAAABmcm9tX3N0cmluZygpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRpbWV1dGlsLlRpbWVEb21haW4gc3RhdGljIG1ldGhvZClqb3YAAFUATnRy0n8AAChqBXoAAFhKAAAAdG9fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRpbWV1dGlsLlRpbWVEb21haW4gc3RhdGljIG1ldGhvZClqaXcAAFUATnRy038AAGVqJwEAAF1y1H8AACgoanx6AABYNAAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZGF0YXN0b3JlaW8gKG1vZHVsZSlYMgAAAG1vZHVsZS1hcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmRhdGFzdG9yZWlvVQBOdHLVfwAAKGp8egAAWEgAAABSZWFkRnJvbURhdGFzdG9yZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5kYXRhc3RvcmVpbylqTXYAAFUATnRy1n8AAChqfHoAAFhPAAAAZXhwYW5kKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZGF0YXN0b3JlaW8uUmVhZEZyb21EYXRhc3RvcmUgbWV0aG9kKWqEcgAAVQBOdHLXfwAAKGp8egAAWFUAAABkaXNwbGF5X2RhdGEoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5kYXRhc3RvcmVpby5SZWFkRnJvbURhdGFzdG9yZSBtZXRob2Qpatl4AABVAE50cth/AAAoanx6AABYVQAAAFJlYWRGcm9tRGF0YXN0b3JlLlNwbGl0UXVlcnlGbiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5kYXRhc3RvcmVpbylqXHMAAFUATnRy2X8AAChqfHoAAFhiAAAAc3RhcnRfYnVuZGxlKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZGF0YXN0b3JlaW8uUmVhZEZyb21EYXRhc3RvcmUuU3BsaXRRdWVyeUZuIG1ldGhvZClq4XIAAFUATnRy2n8AAChqfHoAAFhdAAAAcHJvY2VzcygpIChhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmRhdGFzdG9yZWlvLlJlYWRGcm9tRGF0YXN0b3JlLlNwbGl0UXVlcnlGbiBtZXRob2Qpajd4AABVAE50ctt/AAAoanx6AABYYgAAAGRpc3BsYXlfZGF0YSgpIChhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmRhdGFzdG9yZWlvLlJlYWRGcm9tRGF0YXN0b3JlLlNwbGl0UXVlcnlGbiBtZXRob2QpaoZxAABVAE50ctx/AAAoanx6AABYTwAAAFJlYWRGcm9tRGF0YXN0b3JlLlJlYWRGbiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5kYXRhc3RvcmVpbylq93IAAFUATnRy3X8AAChqfHoAAFhcAAAAc3RhcnRfYnVuZGxlKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZGF0YXN0b3JlaW8uUmVhZEZyb21EYXRhc3RvcmUuUmVhZEZuIG1ldGhvZClqI3MAAFUATnRy3n8AAChqfHoAAFhXAAAAcHJvY2VzcygpIChhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmRhdGFzdG9yZWlvLlJlYWRGcm9tRGF0YXN0b3JlLlJlYWRGbiBtZXRob2Qpau9xAABVAE50ct9/AAAoanx6AABYXAAAAGRpc3BsYXlfZGF0YSgpIChhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmRhdGFzdG9yZWlvLlJlYWRGcm9tRGF0YXN0b3JlLlJlYWRGbiBtZXRob2QpauZwAABVAE50cuB/AAAoanx6AABYcQAAAHF1ZXJ5X2xhdGVzdF9zdGF0aXN0aWNzX3RpbWVzdGFtcCgpIChhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmRhdGFzdG9yZWlvLlJlYWRGcm9tRGF0YXN0b3JlIHN0YXRpYyBtZXRob2QpamlwAABVAE50cuF/AAAoanx6AABYaAAAAGdldF9lc3RpbWF0ZWRfc2l6ZV9ieXRlcygpIChhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmRhdGFzdG9yZWlvLlJlYWRGcm9tRGF0YXN0b3JlIHN0YXRpYyBtZXRob2QpamZ5AABVAE50cuJ/AAAoanx6AABYaAAAAGdldF9lc3RpbWF0ZWRfbnVtX3NwbGl0cygpIChhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmRhdGFzdG9yZWlvLlJlYWRGcm9tRGF0YXN0b3JlIHN0YXRpYyBtZXRob2QpavR4AABVAE50cuN/AAAoanx6AABYRwAAAFdyaXRlVG9EYXRhc3RvcmUgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZGF0YXN0b3JlaW8paj51AABVAE50cuR/AAAoanx6AABYYQAAAHRvX3Vwc2VydF9tdXRhdGlvbigpIChhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmRhdGFzdG9yZWlvLldyaXRlVG9EYXRhc3RvcmUgc3RhdGljIG1ldGhvZClqXnQAAFUATnRy5X8AAChqfHoAAFhKAAAARGVsZXRlRnJvbURhdGFzdG9yZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5kYXRhc3RvcmVpbylq9XcAAFUATnRy5n8AAChqfHoAAFhkAAAAdG9fZGVsZXRlX211dGF0aW9uKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZGF0YXN0b3JlaW8uRGVsZXRlRnJvbURhdGFzdG9yZSBzdGF0aWMgbWV0aG9kKWr4cgAAVQBOdHLnfwAAZWooAQAAXXLofwAAKChqxXsAAFgiAAAAYXBhY2hlX2JlYW0uaW8udGZyZWNvcmRpbyAobW9kdWxlKVggAAAAbW9kdWxlLWFwYWNoZV9iZWFtLmlvLnRmcmVjb3JkaW9VAE50cul/AAAoasV7AABYNQAAAFJlYWRGcm9tVEZSZWNvcmQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLnRmcmVjb3JkaW8panNxAABVAE50cup/AAAoasV7AABYPAAAAGV4cGFuZCgpIChhcGFjaGVfYmVhbS5pby50ZnJlY29yZGlvLlJlYWRGcm9tVEZSZWNvcmQgbWV0aG9kKWrYcwAAVQBOdHLrfwAAKGrFewAAWDQAAABXcml0ZVRvVEZSZWNvcmQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLnRmcmVjb3JkaW8paj11AABVAE50cux/AAAoasV7AABYOwAAAGV4cGFuZCgpIChhcGFjaGVfYmVhbS5pby50ZnJlY29yZGlvLldyaXRlVG9URlJlY29yZCBtZXRob2QpaqZ4AABVAE50cu1/AABlaikBAABdcu5/AAAoaj17AABYGgAAAGFwYWNoZV9iZWFtLnRvb2xzIChtb2R1bGUpWBgAAABtb2R1bGUtYXBhY2hlX2JlYW0udG9vbHNVAE50cu9/AABhaioBAABdcvB/AAAoasV6AABYKAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUgKG1vZHVsZSlYJgAAAG1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlVQBOdHLxfwAAYWjMXXLyfwAAKChqxXoAAFgoAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudXRpbCAobW9kdWxlKVgmAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnV0aWxVAE50cvN/AAAoasV6AABYOgAAAFRyYW5zZm9ybVJlc3VsdCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudXRpbClq+XMAAFUATnRy9H8AAChqxXoAAFg2AAAAVGltZXJGaXJpbmcgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnV0aWwpanJ5AABVAE50cvV/AAAoasV6AABYOAAAAEtleWVkV29ya0l0ZW0gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnV0aWwpalpxAABVAE50cvZ/AABlakoBAABdcvd/AAAoKGqDegAAWEsAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkuaW50ZXJhY3RpdmVfcGlwZWxpbmVfZ3JhcGggKG1vZHVsZSlYSQAAAG1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkuaW50ZXJhY3RpdmVfcGlwZWxpbmVfZ3JhcGhVAE50cvh/AAAoaoN6AABYWQAAAG5pY2Vfc3RyKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkuaW50ZXJhY3RpdmVfcGlwZWxpbmVfZ3JhcGgpatZ3AABVAE50cvl/AAAoaoN6AABYXgAAAGZvcm1hdF9zYW1wbGUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5pbnRlcmFjdGl2ZV9waXBlbGluZV9ncmFwaClqvXEAAFUATnRy+n8AAChqg3oAAFhmAAAASW50ZXJhY3RpdmVQaXBlbGluZUdyYXBoIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkuaW50ZXJhY3RpdmVfcGlwZWxpbmVfZ3JhcGgpanR5AABVAE50cvt/AAAoaoN6AABYfwAAAHVwZGF0ZV9wY29sbGVjdGlvbl9zdGF0cygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkuaW50ZXJhY3RpdmVfcGlwZWxpbmVfZ3JhcGguSW50ZXJhY3RpdmVQaXBlbGluZUdyYXBoIG1ldGhvZClqVncAAFUATnRy/H8AAGVqLAEAAF1y/X8AACgoasV6AABYKQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmNsb2NrIChtb2R1bGUpWCcAAABtb2R1bGUtYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuY2xvY2tVAE50cv5/AAAoasV6AABYMQAAAENsb2NrIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jbG9jaylqHHYAAFUATnRy/38AAChqxXoAAFg2AAAAdGltZSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jbG9jay5DbG9jayBtZXRob2Qpas5wAABVAE50cgCAAAAoasV6AABYPgAAAGFkdmFuY2VfdGltZSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jbG9jay5DbG9jayBtZXRob2Qpaup1AABVAE50cgGAAAAoasV6AABYNQAAAFJlYWxDbG9jayAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuY2xvY2spaj13AABVAE50cgKAAAAoasV6AABYOgAAAHRpbWUoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuY2xvY2suUmVhbENsb2NrIG1ldGhvZClqYXgAAFUATnRyA4AAAChqxXoAAFg1AAAAVGVzdENsb2NrIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jbG9jaylqXXgAAFUATnRyBIAAAChqxXoAAFg6AAAAdGltZSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jbG9jay5UZXN0Q2xvY2sgbWV0aG9kKWqidQAAVQBOdHIFgAAAKGrFegAAWEIAAABhZHZhbmNlX3RpbWUoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuY2xvY2suVGVzdENsb2NrIG1ldGhvZClqRnYAAFUATnRyBoAAAGVqLgEAAF1yB4AAACgoavZ5AABYPwAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2FydGlmYWN0X2FwaV9wYjJfZ3JwYyAobW9kdWxlKVg9AAAAbW9kdWxlLWFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2FydGlmYWN0X2FwaV9wYjJfZ3JwY1UATnRyCIAAAChq9nkAAFhcAAAAQXJ0aWZhY3RTdGFnaW5nU2VydmljZVN0dWIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2FydGlmYWN0X2FwaV9wYjJfZ3JwYylqL3cAAFUATnRyCYAAAChq9nkAAFhgAAAAQXJ0aWZhY3RTdGFnaW5nU2VydmljZVNlcnZpY2VyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9hcnRpZmFjdF9hcGlfcGIyX2dycGMpaltzAABVAE50cgqAAAAoavZ5AABYbAAAAFB1dEFydGlmYWN0KCkgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2FydGlmYWN0X2FwaV9wYjJfZ3JwYy5BcnRpZmFjdFN0YWdpbmdTZXJ2aWNlU2VydmljZXIgbWV0aG9kKWpadAAAVQBOdHILgAAAKGr2eQAAWG8AAABDb21taXRNYW5pZmVzdCgpIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9hcnRpZmFjdF9hcGlfcGIyX2dycGMuQXJ0aWZhY3RTdGFnaW5nU2VydmljZVNlcnZpY2VyIG1ldGhvZClqy3YAAFUATnRyDIAAAChq9nkAAFhxAAAAYWRkX0FydGlmYWN0U3RhZ2luZ1NlcnZpY2VTZXJ2aWNlcl90b19zZXJ2ZXIoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2FydGlmYWN0X2FwaV9wYjJfZ3JwYylq1nMAAFUATnRyDYAAAChq9nkAAFheAAAAQXJ0aWZhY3RSZXRyaWV2YWxTZXJ2aWNlU3R1YiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fYXJ0aWZhY3RfYXBpX3BiMl9ncnBjKWqjcAAAVQBOdHIOgAAAKGr2eQAAWGIAAABBcnRpZmFjdFJldHJpZXZhbFNlcnZpY2VTZXJ2aWNlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fYXJ0aWZhY3RfYXBpX3BiMl9ncnBjKWr1dQAAVQBOdHIPgAAAKGr2eQAAWG4AAABHZXRNYW5pZmVzdCgpIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9hcnRpZmFjdF9hcGlfcGIyX2dycGMuQXJ0aWZhY3RSZXRyaWV2YWxTZXJ2aWNlU2VydmljZXIgbWV0aG9kKWo4eQAAVQBOdHIQgAAAKGr2eQAAWG4AAABHZXRBcnRpZmFjdCgpIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9hcnRpZmFjdF9hcGlfcGIyX2dycGMuQXJ0aWZhY3RSZXRyaWV2YWxTZXJ2aWNlU2VydmljZXIgbWV0aG9kKWpRdgAAVQBOdHIRgAAAKGr2eQAAWHMAAABhZGRfQXJ0aWZhY3RSZXRyaWV2YWxTZXJ2aWNlU2VydmljZXJfdG9fc2VydmVyKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9hcnRpZmFjdF9hcGlfcGIyX2dycGMpaj50AABVAE50chKAAABlai8BAABdchOAAAAoKGruegAAWCEAAABhcGFjaGVfYmVhbS51dGlscy5wbHVnaW4gKG1vZHVsZSlYHwAAAG1vZHVsZS1hcGFjaGVfYmVhbS51dGlscy5wbHVnaW5VAE50chSAAAAoau56AABYLgAAAEJlYW1QbHVnaW4gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnV0aWxzLnBsdWdpbilqM3gAAFUATnRyFYAAAChq7noAAFhHAAAAZ2V0X2FsbF9zdWJjbGFzc2VzKCkgKGFwYWNoZV9iZWFtLnV0aWxzLnBsdWdpbi5CZWFtUGx1Z2luIGNsYXNzIG1ldGhvZClqqnUAAFUATnRyFoAAAChq7noAAFhJAAAAZ2V0X2FsbF9wbHVnaW5fcGF0aHMoKSAoYXBhY2hlX2JlYW0udXRpbHMucGx1Z2luLkJlYW1QbHVnaW4gY2xhc3MgbWV0aG9kKWokdwAAVQBOdHIXgAAAZWowAQAAXXIYgAAAKChqmnoAAFgbAAAAYXBhY2hlX2JlYW0ucHZhbHVlIChtb2R1bGUpWBkAAABtb2R1bGUtYXBhY2hlX2JlYW0ucHZhbHVlVQBOdHIZgAAAKGqaegAAWCkAAABQQ29sbGVjdGlvbiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucHZhbHVlKWrjcAAAVQBOdHIagAAAKGqaegAAWDQAAAB3aW5kb3dpbmcgKGFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbiBhdHRyaWJ1dGUpag93AABVAE50chuAAAAoapp6AABYNwAAAHRvX3J1bm5lcl9hcGkoKSAoYXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uIG1ldGhvZClqqngAAFUATnRyHIAAAChqmnoAAFhAAAAAZnJvbV9ydW5uZXJfYXBpKCkgKGFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbiBzdGF0aWMgbWV0aG9kKWptcgAAVQBOdHIdgAAAKGqaegAAWCoAAABUYWdnZWRPdXRwdXQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnB2YWx1ZSlq0nQAAFUATnRyHoAAAChqmnoAAFgpAAAAQXNTaW5nbGV0b24gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnB2YWx1ZSlqEXQAAFUATnRyH4AAAChqmnoAAFg3AAAAZWxlbWVudF90eXBlIChhcGFjaGVfYmVhbS5wdmFsdWUuQXNTaW5nbGV0b24gYXR0cmlidXRlKWpidAAAVQBOdHIggAAAKGqaegAAWCQAAABBc0l0ZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnB2YWx1ZSlqDnEAAFUATnRyIYAAAChqmnoAAFgyAAAAZWxlbWVudF90eXBlIChhcGFjaGVfYmVhbS5wdmFsdWUuQXNJdGVyIGF0dHJpYnV0ZSlq5XgAAFUATnRyIoAAAChqmnoAAFgkAAAAQXNMaXN0IChjbGFzcyBpbiBhcGFjaGVfYmVhbS5wdmFsdWUpauFzAABVAE50ciOAAAAoapp6AABYJAAAAEFzRGljdCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucHZhbHVlKWpcdgAAVQBOdHIkgAAAKGqaegAAWCwAAABFbXB0eVNpZGVJbnB1dCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucHZhbHVlKWo2dQAAVQBOdHIlgAAAZWotAQAAXXImgAAAKChqfHoAAFghAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2lvIChtb2R1bGUpWB8AAABtb2R1bGUtYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2lvVQBOdHIngAAAKGp8egAAWCkAAABHY3NJTyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2lvKWpBcgAAVQBOdHIogAAAKGp8egAAWC4AAABvcGVuKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5nY3Npby5HY3NJTyBtZXRob2Qpaox3AABVAE50cimAAAAoanx6AABYMAAAAGRlbGV0ZSgpIChhcGFjaGVfYmVhbS5pby5nY3AuZ2NzaW8uR2NzSU8gbWV0aG9kKWrZcgAAVQBOdHIqgAAAKGp8egAAWDYAAABkZWxldGVfYmF0Y2goKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2lvLkdjc0lPIG1ldGhvZClqLHMAAFUATnRyK4AAAChqfHoAAFguAAAAY29weSgpIChhcGFjaGVfYmVhbS5pby5nY3AuZ2NzaW8uR2NzSU8gbWV0aG9kKWqvcQAAVQBOdHIsgAAAKGp8egAAWDQAAABjb3B5X2JhdGNoKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5nY3Npby5HY3NJTyBtZXRob2Qpai13AABVAE50ci2AAAAoanx6AABYMgAAAGNvcHl0cmVlKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5nY3Npby5HY3NJTyBtZXRob2QpasN0AABVAE50ci6AAAAoanx6AABYMAAAAHJlbmFtZSgpIChhcGFjaGVfYmVhbS5pby5nY3AuZ2NzaW8uR2NzSU8gbWV0aG9kKWomdgAAVQBOdHIvgAAAKGp8egAAWDAAAABleGlzdHMoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2lvLkdjc0lPIG1ldGhvZClqmHQAAFUATnRyMIAAAChqfHoAAFgyAAAAY2hlY2tzdW0oKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2lvLkdjc0lPIG1ldGhvZClqV3EAAFUATnRyMYAAAChqfHoAAFguAAAAc2l6ZSgpIChhcGFjaGVfYmVhbS5pby5nY3AuZ2NzaW8uR2NzSU8gbWV0aG9kKWrZdQAAVQBOdHIygAAAKGp8egAAWDEAAABrbXNfa2V5KCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5nY3Npby5HY3NJTyBtZXRob2Qpag91AABVAE50cjOAAAAoanx6AABYNgAAAGxhc3RfdXBkYXRlZCgpIChhcGFjaGVfYmVhbS5pby5nY3AuZ2NzaW8uR2NzSU8gbWV0aG9kKWq4cgAAVQBOdHI0gAAAKGp8egAAWDUAAABsaXN0X3ByZWZpeCgpIChhcGFjaGVfYmVhbS5pby5nY3AuZ2NzaW8uR2NzSU8gbWV0aG9kKWo6cgAAVQBOdHI1gAAAZWoyAQAAXXI2gAAAKChqxXsAAFgtAAAAYXBhY2hlX2JlYW0ubWV0cmljcy5tb25pdG9yaW5nX2luZm9zIChtb2R1bGUpWCsAAABtb2R1bGUtYXBhY2hlX2JlYW0ubWV0cmljcy5tb25pdG9yaW5nX2luZm9zVQBOdHI3gAAAKGrFewAAWEUAAAB0b190aW1lc3RhbXBfcHJvdG8oKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLm1ldHJpY3MubW9uaXRvcmluZ19pbmZvcylqN3MAAFUATnRyOIAAAChqxXsAAFhEAAAAdG9fdGltZXN0YW1wX3NlY3MoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLm1ldHJpY3MubW9uaXRvcmluZ19pbmZvcylqIHQAAFUATnRyOYAAAChqxXsAAFhIAAAAZXh0cmFjdF9jb3VudGVyX3ZhbHVlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5tZXRyaWNzLm1vbml0b3JpbmdfaW5mb3Mpag90AABVAE50cjqAAAAoasV7AABYRwAAAGV4dHJhY3RfZGlzdHJpYnV0aW9uKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5tZXRyaWNzLm1vbml0b3JpbmdfaW5mb3Mpaop5AABVAE50cjuAAAAoasV7AABYQAAAAGNyZWF0ZV9sYWJlbHMoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLm1ldHJpY3MubW9uaXRvcmluZ19pbmZvcylqEHcAAFUATnRyPIAAAChqxXsAAFhAAAAAaW50NjRfY291bnRlcigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0ubWV0cmljcy5tb25pdG9yaW5nX2luZm9zKWpsdwAAVQBOdHI9gAAAKGrFewAAWEUAAABpbnQ2NF9kaXN0cmlidXRpb24oKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLm1ldHJpY3MubW9uaXRvcmluZ19pbmZvcylq73UAAFUATnRyPoAAAChqxXsAAFg+AAAAaW50NjRfZ2F1Z2UoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLm1ldHJpY3MubW9uaXRvcmluZ19pbmZvcylqx3IAAFUATnRyP4AAAChqxXsAAFhJAAAAY3JlYXRlX21vbml0b3JpbmdfaW5mbygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0ubWV0cmljcy5tb25pdG9yaW5nX2luZm9zKWoOeAAAVQBOdHJAgAAAKGrFewAAWEIAAAB1c2VyX21ldHJpY191cm4oKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLm1ldHJpY3MubW9uaXRvcmluZ19pbmZvcylqKnYAAFUATnRyQYAAAChqxXsAAFg9AAAAaXNfY291bnRlcigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0ubWV0cmljcy5tb25pdG9yaW5nX2luZm9zKWrWdgAAVQBOdHJCgAAAKGrFewAAWEIAAABpc19kaXN0cmlidXRpb24oKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLm1ldHJpY3MubW9uaXRvcmluZ19pbmZvcylqDHQAAFUATnRyQ4AAAChqxXsAAFg7AAAAaXNfZ2F1Z2UoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLm1ldHJpY3MubW9uaXRvcmluZ19pbmZvcylqeHIAAFUATnRyRIAAAChqxXsAAFhKAAAAaXNfdXNlcl9tb25pdG9yaW5nX2luZm8oKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLm1ldHJpY3MubW9uaXRvcmluZ19pbmZvcylqvXgAAFUATnRyRYAAAChqxXsAAFhSAAAAZXh0cmFjdF9tZXRyaWNfcmVzdWx0X21hcF92YWx1ZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0ubWV0cmljcy5tb25pdG9yaW5nX2luZm9zKWrsdQAAVQBOdHJGgAAAKGrFewAAWEsAAABwYXJzZV9uYW1lc3BhY2VfYW5kX25hbWUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLm1ldHJpY3MubW9uaXRvcmluZ19pbmZvcylqQXUAAFUATnRyR4AAAChqxXsAAFg5AAAAdG9fa2V5KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5tZXRyaWNzLm1vbml0b3JpbmdfaW5mb3MpapN0AABVAE50ckiAAABlajMBAABdckmAAAAoasV7AABYHAAAAGFwYWNoZV9iZWFtLm1ldHJpY3MgKG1vZHVsZSlYGgAAAG1vZHVsZS1hcGFjaGVfYmVhbS5tZXRyaWNzVQBOdHJKgAAAYWo0AQAAXXJLgAAAKChqmnoAAFgsAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuY29tbW9uX3VybnMgKG1vZHVsZSlYKgAAAG1vZHVsZS1hcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5jb21tb25fdXJuc1UATnRyTIAAAChqmnoAAFhGAAAAUHJvcGVydGllc0Zyb21FbnVtVmFsdWUgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmNvbW1vbl91cm5zKWoucQAAVQBOdHJNgAAAKGqaegAAWEUAAABQcm9wZXJ0aWVzRnJvbUVudW1UeXBlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5jb21tb25fdXJucylqbnEAAFUATnRyToAAAChqmnoAAFhLAAAAUHJvcGVydGllc0Zyb21QYXlsb2FkVHlwZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuY29tbW9uX3VybnMpaud1AABVAE50ck+AAABlajYBAABdclCAAAAoapp6AABYIwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0IChtb2R1bGUpWCEAAABtb2R1bGUtYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3RVAE50clGAAABhajcBAABdclKAAAAoKGo9ewAAWD8AAABhcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHMubG9hZF90ZXN0X21ldHJpY3NfdXRpbHMgKG1vZHVsZSlYPQAAAG1vZHVsZS1hcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHMubG9hZF90ZXN0X21ldHJpY3NfdXRpbHNVAE50clOAAAAoaj17AABYUAAAAEJpZ1F1ZXJ5Q2xpZW50IChjbGFzcyBpbiBhcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHMubG9hZF90ZXN0X21ldHJpY3NfdXRpbHMpasx1AABVAE50clSAAAAoaj17AABYXwAAAG1hdGNoX2FuZF9zYXZlKCkgKGFwYWNoZV9iZWFtLnRlc3RpbmcubG9hZF90ZXN0cy5sb2FkX3Rlc3RfbWV0cmljc191dGlscy5CaWdRdWVyeUNsaWVudCBtZXRob2QpapV3AABVAE50clWAAAAoaj17AABYUAAAAE1ldHJpY3NNb25pdG9yIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHMubG9hZF90ZXN0X21ldHJpY3NfdXRpbHMpaux4AABVAE50claAAAAoaj17AABYXQAAAHNlbmRfbWV0cmljcygpIChhcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHMubG9hZF90ZXN0X21ldHJpY3NfdXRpbHMuTWV0cmljc01vbml0b3IgbWV0aG9kKWokcgAAVQBOdHJXgAAAKGo9ewAAWE0AAABNZWFzdXJlVGltZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udGVzdGluZy5sb2FkX3Rlc3RzLmxvYWRfdGVzdF9tZXRyaWNzX3V0aWxzKWopdwAAVQBOdHJYgAAAKGo9ewAAWFoAAABzdGFydF9idW5kbGUoKSAoYXBhY2hlX2JlYW0udGVzdGluZy5sb2FkX3Rlc3RzLmxvYWRfdGVzdF9tZXRyaWNzX3V0aWxzLk1lYXN1cmVUaW1lIG1ldGhvZClqT3kAAFUATnRyWYAAAChqPXsAAFhbAAAAZmluaXNoX2J1bmRsZSgpIChhcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHMubG9hZF90ZXN0X21ldHJpY3NfdXRpbHMuTWVhc3VyZVRpbWUgbWV0aG9kKWoReQAAVQBOdHJagAAAKGo9ewAAWFUAAABwcm9jZXNzKCkgKGFwYWNoZV9iZWFtLnRlc3RpbmcubG9hZF90ZXN0cy5sb2FkX3Rlc3RfbWV0cmljc191dGlscy5NZWFzdXJlVGltZSBtZXRob2Qpar9wAABVAE50cluAAAAoaj17AABYUAAAAGNvdW50X2J5dGVzKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHMubG9hZF90ZXN0X21ldHJpY3NfdXRpbHMpalJ5AABVAE50clyAAABlagsBAABdcl2AAAAoKGoFegAAWCkAAABhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9ycyAobW9kdWxlKVgnAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnR5cGVoaW50cy5kZWNvcmF0b3JzVQBOdHJegAAAKGoFegAAWDkAAABXaXRoVHlwZUhpbnRzIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9ycylqDHIAAFUATnRyX4AAAChqBXoAAFhIAAAAZ2V0X3R5cGVfaGludHMoKSAoYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnMuV2l0aFR5cGVIaW50cyBtZXRob2QpaqJ0AABVAE50cmCAAAAoagV6AABYTAAAAGRlZmF1bHRfdHlwZV9oaW50cygpIChhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9ycy5XaXRoVHlwZUhpbnRzIG1ldGhvZClqvncAAFUATnRyYYAAAChqBXoAAFhKAAAAd2l0aF9pbnB1dF90eXBlcygpIChhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9ycy5XaXRoVHlwZUhpbnRzIG1ldGhvZClqC3YAAFUATnRyYoAAAChqBXoAAFhLAAAAd2l0aF9vdXRwdXRfdHlwZXMoKSAoYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnMuV2l0aFR5cGVIaW50cyBtZXRob2Qpat9yAABVAE50cmOAAAAoagV6AABYDgAAAFR5cGVDaGVja0Vycm9ycmSAAABq5HMAAFUATnRyZYAAAChqBXoAAFg/AAAAd2l0aF9pbnB1dF90eXBlcygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnMpatR3AABVAE50cmaAAAAoagV6AABYQAAAAHdpdGhfb3V0cHV0X3R5cGVzKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9ycylq4HQAAFUATnRyZ4AAAGVqOAEAAF1yaIAAAChqsHoAAFgXAAAAYXBhY2hlX2JlYW0uaW8gKG1vZHVsZSlYFQAAAG1vZHVsZS1hcGFjaGVfYmVhbS5pb1UATnRyaYAAAGFqOQEAAF1yaoAAACgoasV7AABYJwAAAGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZSAobW9kdWxlKVglAAAAbW9kdWxlLWFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZVUATnRya4AAAChqxXsAAFg0AAAATWV0cmljTmFtZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWNiYXNlKWpSdgAAVQBOdHJsgAAAKGrFewAAWEIAAAB0b19ydW5uZXJfYXBpKCkgKGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZS5NZXRyaWNOYW1lIG1ldGhvZClq53AAAFUATnRybYAAAChqxXsAAFhLAAAAZnJvbV9ydW5uZXJfYXBpKCkgKGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZS5NZXRyaWNOYW1lIHN0YXRpYyBtZXRob2Qpail1AABVAE50cm6AAAAoasV7AABYMAAAAE1ldHJpYyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWNiYXNlKWr9dQAAVQBOdHJvgAAAKGrFewAAWDEAAABDb3VudGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpY2Jhc2UpaiFyAABVAE50cnCAAAAoasV7AABYNQAAAGluYygpIChhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpY2Jhc2UuQ291bnRlciBtZXRob2QpalJ4AABVAE50cnGAAAAoasV7AABYNQAAAGRlYygpIChhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpY2Jhc2UuQ291bnRlciBtZXRob2QpalZ5AABVAE50cnKAAAAoasV7AABYNgAAAERpc3RyaWJ1dGlvbiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWNiYXNlKWoydgAAVQBOdHJzgAAAKGrFewAAWD0AAAB1cGRhdGUoKSAoYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWNiYXNlLkRpc3RyaWJ1dGlvbiBtZXRob2Qpav5wAABVAE50cnSAAAAoasV7AABYLwAAAEdhdWdlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpY2Jhc2UpaiRxAABVAE50cnWAAAAoasV7AABYMwAAAHNldCgpIChhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpY2Jhc2UuR2F1Z2UgbWV0aG9kKWpRcwAAVQBOdHJ2gAAAZWo6AQAAXXJ3gAAAKChqg3oAAFgtAAAAYXBhY2hlX2JlYW0ucnVubmVycy5waXBlbGluZV9jb250ZXh0IChtb2R1bGUpWCsAAABtb2R1bGUtYXBhY2hlX2JlYW0ucnVubmVycy5waXBlbGluZV9jb250ZXh0VQBOdHJ4gAAAKGqDegAAWDsAAABFbnZpcm9ubWVudCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5waXBlbGluZV9jb250ZXh0KWpLeAAAVQBOdHJ5gAAAKGqDegAAWEkAAAB0b19ydW5uZXJfYXBpKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMucGlwZWxpbmVfY29udGV4dC5FbnZpcm9ubWVudCBtZXRob2Qpamd2AABVAE50cnqAAAAoaoN6AABYUgAAAGZyb21fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLnBpcGVsaW5lX2NvbnRleHQuRW52aXJvbm1lbnQgc3RhdGljIG1ldGhvZClqPnYAAFUATnRye4AAAChqg3oAAFg/AAAAUGlwZWxpbmVDb250ZXh0IChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLnBpcGVsaW5lX2NvbnRleHQpapV4AABVAE50cnyAAAAoaoN6AABYWgAAAGNvZGVyX2lkX2Zyb21fZWxlbWVudF90eXBlKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMucGlwZWxpbmVfY29udGV4dC5QaXBlbGluZUNvbnRleHQgbWV0aG9kKWqqdwAAVQBOdHJ9gAAAKGqDegAAWFYAAABmcm9tX3J1bm5lcl9hcGkoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5waXBlbGluZV9jb250ZXh0LlBpcGVsaW5lQ29udGV4dCBzdGF0aWMgbWV0aG9kKWpDcQAAVQBOdHJ+gAAAKGqDegAAWE0AAAB0b19ydW5uZXJfYXBpKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMucGlwZWxpbmVfY29udGV4dC5QaXBlbGluZUNvbnRleHQgbWV0aG9kKWqUeAAAVQBOdHJ/gAAAKGqDegAAWFYAAABkZWZhdWx0X2Vudmlyb25tZW50X2lkKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMucGlwZWxpbmVfY29udGV4dC5QaXBlbGluZUNvbnRleHQgbWV0aG9kKWpbcQAAVQBOdHKAgAAAZWo7AQAAXXKBgAAAKChqPXsAAFgqAAAAYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3BpcGVsaW5lIChtb2R1bGUpWCgAAABtb2R1bGUtYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3BpcGVsaW5lVQBOdHKCgAAAKGo9ewAAWDkAAABUZXN0UGlwZWxpbmUgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9waXBlbGluZSlqp3YAAFUATnRyg4AAAChqPXsAAFg9AAAAcnVuKCkgKGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9waXBlbGluZS5UZXN0UGlwZWxpbmUgbWV0aG9kKWpodgAAVQBOdHKEgAAAKGo9ewAAWFIAAABnZXRfZnVsbF9vcHRpb25zX2FzX2FyZ3MoKSAoYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3BpcGVsaW5lLlRlc3RQaXBlbGluZSBtZXRob2QpavNwAABVAE50coWAAAAoaj17AABYRAAAAGdldF9vcHRpb24oKSAoYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3BpcGVsaW5lLlRlc3RQaXBlbGluZSBtZXRob2QpakRxAABVAE50coaAAABlajwBAABdcoeAAAAoKGr5eQAAWCQAAABhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtaW8gKG1vZHVsZSlYIgAAAG1vZHVsZS1hcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtaW9VAE50coiAAAAoavl5AABYMQAAAERvd25sb2FkZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pbylq13EAAFUATnRyiYAAAChq+XkAAFg3AAAAc2l6ZSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbWlvLkRvd25sb2FkZXIgYXR0cmlidXRlKWricAAAVQBOdHKKgAAAKGr5eQAAWDsAAABnZXRfcmFuZ2UoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbWlvLkRvd25sb2FkZXIgbWV0aG9kKWoKeQAAVQBOdHKLgAAAKGr5eQAAWC8AAABVcGxvYWRlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbWlvKWp2dAAAVQBOdHKMgAAAKGr5eQAAWDMAAABwdXQoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbWlvLlVwbG9hZGVyIG1ldGhvZClq93AAAFUATnRyjYAAAChq+XkAAFg2AAAAZmluaXNoKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pby5VcGxvYWRlciBtZXRob2Qpan11AABVAE50co6AAAAoavl5AABYNwAAAERvd25sb2FkZXJTdHJlYW0gKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pbylq93UAAFUATnRyj4AAAChq+XkAAFhAAAAAcmVhZGludG8oKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbWlvLkRvd25sb2FkZXJTdHJlYW0gbWV0aG9kKWqSeAAAVQBOdHKQgAAAKGr5eQAAWDwAAABzZWVrKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pby5Eb3dubG9hZGVyU3RyZWFtIG1ldGhvZClqjnIAAFUATnRykYAAAChq+XkAAFg8AAAAdGVsbCgpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtaW8uRG93bmxvYWRlclN0cmVhbSBtZXRob2Qpak54AABVAE50cpKAAAAoavl5AABYQAAAAHNlZWthYmxlKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pby5Eb3dubG9hZGVyU3RyZWFtIG1ldGhvZClqRnEAAFUATnRyk4AAAChq+XkAAFhAAAAAcmVhZGFibGUoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbWlvLkRvd25sb2FkZXJTdHJlYW0gbWV0aG9kKWrdcwAAVQBOdHKUgAAAKGr5eQAAWDUAAABVcGxvYWRlclN0cmVhbSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbWlvKWoFcwAAVQBOdHKVgAAAKGr5eQAAWDoAAAB0ZWxsKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pby5VcGxvYWRlclN0cmVhbSBtZXRob2Qpaut1AABVAE50cpaAAAAoavl5AABYOwAAAHdyaXRlKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pby5VcGxvYWRlclN0cmVhbSBtZXRob2QpapJ3AABVAE50cpeAAAAoavl5AABYOwAAAGNsb3NlKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pby5VcGxvYWRlclN0cmVhbSBtZXRob2Qpak15AABVAE50cpiAAAAoavl5AABYPgAAAHdyaXRhYmxlKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pby5VcGxvYWRlclN0cmVhbSBtZXRob2QpatlxAABVAE50cpmAAAAoavl5AABYMQAAAFBpcGVTdHJlYW0gKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pbylqhHUAAFUATnRymoAAAChq+XkAAFg2AAAAcmVhZCgpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtaW8uUGlwZVN0cmVhbSBtZXRob2Qpauh3AABVAE50cpuAAAAoavl5AABYNgAAAHRlbGwoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbWlvLlBpcGVTdHJlYW0gbWV0aG9kKWp+cwAAVQBOdHKcgAAAKGr5eQAAWDYAAABzZWVrKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pby5QaXBlU3RyZWFtIG1ldGhvZClqXHkAAFUATnRynYAAAGVqPQEAAF1ynoAAACgoarB6AABYIgAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMgKG1vZHVsZSlYIAAAAG1vZHVsZS1hcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzVQBOdHKfgAAAKGqwegAAWCoAAABDb2RlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycylqAngAAFUATnRyoIAAAChqsHoAAFgxAAAAZW5jb2RlKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQ29kZXIgbWV0aG9kKWr4cwAAVQBOdHKhgAAAKGqwegAAWDEAAABkZWNvZGUoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2RlciBtZXRob2Qpaq9yAABVAE50cqKAAAAoarB6AABYOwAAAGlzX2RldGVybWluaXN0aWMoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2RlciBtZXRob2Qpavd4AABVAE50cqOAAAAoarB6AABYQQAAAGFzX2RldGVybWluaXN0aWNfY29kZXIoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2RlciBtZXRob2Qpak13AABVAE50cqSAAAAoarB6AABYOAAAAGVzdGltYXRlX3NpemUoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2RlciBtZXRob2Qpav9zAABVAE50cqWAAAAoarB6AABYMwAAAGdldF9pbXBsKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQ29kZXIgbWV0aG9kKWqbcAAAVQBOdHKmgAAAKGqwegAAWD8AAABmcm9tX3R5cGVfaGludCgpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkNvZGVyIGNsYXNzIG1ldGhvZClqrHIAAFUATnRyp4AAAChqsHoAAFg2AAAAaXNfa3ZfY29kZXIoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2RlciBtZXRob2Qpaox4AABVAE50cqiAAAAoarB6AABYNAAAAGtleV9jb2RlcigpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkNvZGVyIG1ldGhvZClqT3UAAFUATnRyqYAAAChqsHoAAFg2AAAAdmFsdWVfY29kZXIoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2RlciBtZXRob2QpahpyAABVAE50cqqAAAAoarB6AABYOgAAAGFzX2Nsb3VkX29iamVjdCgpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkNvZGVyIG1ldGhvZClqznMAAFUATnRyq4AAAChqsHoAAFg9AAAAcmVnaXN0ZXJfdXJuKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQ29kZXIgY2xhc3MgbWV0aG9kKWoBdQAAVQBOdHKsgAAAKGqwegAAWDgAAAB0b19ydW5uZXJfYXBpKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQ29kZXIgbWV0aG9kKWrAdQAAVQBOdHKtgAAAKGqwegAAWEAAAABmcm9tX3J1bm5lcl9hcGkoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2RlciBjbGFzcyBtZXRob2QpauNxAABVAE50cq6AAAAoarB6AABYQgAAAHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQ29kZXIgbWV0aG9kKWqFcwAAVQBOdHKvgAAAKGqwegAAWEkAAAByZWdpc3Rlcl9zdHJ1Y3R1cmVkX3VybigpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkNvZGVyIHN0YXRpYyBtZXRob2Qpaox2AABVAE50crCAAAAoarB6AABYMQAAAFN0clV0ZjhDb2RlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycylq9XYAAFUATnRysYAAAChqsHoAAFg4AAAAZW5jb2RlKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuU3RyVXRmOENvZGVyIG1ldGhvZClq5HgAAFUATnRysoAAAChqsHoAAFg4AAAAZGVjb2RlKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuU3RyVXRmOENvZGVyIG1ldGhvZClqanQAAFUATnRys4AAAChqsHoAAFhCAAAAaXNfZGV0ZXJtaW5pc3RpYygpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlN0clV0ZjhDb2RlciBtZXRob2QpagR0AABVAE50crSAAAAoarB6AABYLwAAAEJ5dGVzQ29kZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMpapVxAABVAE50crWAAAAoarB6AABYQAAAAGlzX2RldGVybWluaXN0aWMoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5CeXRlc0NvZGVyIG1ldGhvZClqxncAAFUATnRytoAAAChqsHoAAFg/AAAAYXNfY2xvdWRfb2JqZWN0KCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQnl0ZXNDb2RlciBtZXRob2QpatB2AABVAE50creAAAAoarB6AABYRwAAAHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQnl0ZXNDb2RlciBtZXRob2Qpai55AABVAE50criAAAAoarB6AABYMAAAAFZhckludENvZGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzKWqFdgAAVQBOdHK5gAAAKGqwegAAWEEAAABpc19kZXRlcm1pbmlzdGljKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuVmFySW50Q29kZXIgbWV0aG9kKWqacQAAVQBOdHK6gAAAKGqwegAAWEAAAABhc19jbG91ZF9vYmplY3QoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5WYXJJbnRDb2RlciBtZXRob2QpakN0AABVAE50cruAAAAoarB6AABYSAAAAHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuVmFySW50Q29kZXIgbWV0aG9kKWrRcAAAVQBOdHK8gAAAKGqwegAAWC8AAABGbG9hdENvZGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzKWredwAAVQBOdHK9gAAAKGqwegAAWEAAAABpc19kZXRlcm1pbmlzdGljKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuRmxvYXRDb2RlciBtZXRob2Qpaht5AABVAE50cr6AAAAoarB6AABYMwAAAFRpbWVzdGFtcENvZGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzKWrbcAAAVQBOdHK/gAAAKGqwegAAWEQAAABpc19kZXRlcm1pbmlzdGljKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuVGltZXN0YW1wQ29kZXIgbWV0aG9kKWqdcAAAVQBOdHLAgAAAKGqwegAAWDMAAABTaW5nbGV0b25Db2RlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycylqI3EAAFUATnRywYAAAChqsHoAAFhEAAAAaXNfZGV0ZXJtaW5pc3RpYygpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlNpbmdsZXRvbkNvZGVyIG1ldGhvZClqhXAAAFUATnRywoAAAChqsHoAAFgwAAAAUGlja2xlQ29kZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMpap15AABVAE50csOAAAAoarB6AABYRwAAAGFzX2RldGVybWluaXN0aWNfY29kZXIoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5QaWNrbGVDb2RlciBtZXRob2QparxzAABVAE50csSAAAAoarB6AABYLgAAAERpbGxDb2RlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycylqh3MAAFUATnRyxYAAAChqsHoAAFg4AAAARmFzdFByaW1pdGl2ZXNDb2RlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycylqkXcAAFUATnRyxoAAAChqsHoAAFhJAAAAaXNfZGV0ZXJtaW5pc3RpYygpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkZhc3RQcmltaXRpdmVzQ29kZXIgbWV0aG9kKWoudwAAVQBOdHLHgAAAKGqwegAAWE8AAABhc19kZXRlcm1pbmlzdGljX2NvZGVyKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuRmFzdFByaW1pdGl2ZXNDb2RlciBtZXRob2QpaixxAABVAE50csiAAAAoarB6AABYSAAAAGFzX2Nsb3VkX29iamVjdCgpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkZhc3RQcmltaXRpdmVzQ29kZXIgbWV0aG9kKWr1cQAAVQBOdHLJgAAAKGqwegAAWEQAAABpc19rdl9jb2RlcigpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkZhc3RQcmltaXRpdmVzQ29kZXIgbWV0aG9kKWpYeQAAVQBOdHLKgAAAKGqwegAAWEIAAABrZXlfY29kZXIoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5GYXN0UHJpbWl0aXZlc0NvZGVyIG1ldGhvZClq53QAAFUATnRyy4AAAChqsHoAAFhEAAAAdmFsdWVfY29kZXIoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5GYXN0UHJpbWl0aXZlc0NvZGVyIG1ldGhvZClq/nMAAFUATnRyzIAAAChqsHoAAFgvAAAAUHJvdG9Db2RlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycylqYHUAAFUATnRyzYAAAChqsHoAAFhAAAAAaXNfZGV0ZXJtaW5pc3RpYygpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlByb3RvQ29kZXIgbWV0aG9kKWrFcAAAVQBOdHLOgAAAKGqwegAAWEUAAABmcm9tX3R5cGVfaGludCgpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlByb3RvQ29kZXIgc3RhdGljIG1ldGhvZClqVHgAAFUATnRyz4AAAChqsHoAAFgvAAAAVHVwbGVDb2RlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycylqmHgAAFUATnRy0IAAAChqsHoAAFhAAAAAaXNfZGV0ZXJtaW5pc3RpYygpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlR1cGxlQ29kZXIgbWV0aG9kKWoGdwAAVQBOdHLRgAAAKGqwegAAWEYAAABhc19kZXRlcm1pbmlzdGljX2NvZGVyKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuVHVwbGVDb2RlciBtZXRob2Qpap91AABVAE50ctKAAAAoarB6AABYRQAAAGZyb21fdHlwZV9oaW50KCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuVHVwbGVDb2RlciBzdGF0aWMgbWV0aG9kKWqVeQAAVQBOdHLTgAAAKGqwegAAWD8AAABhc19jbG91ZF9vYmplY3QoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5UdXBsZUNvZGVyIG1ldGhvZClqD3gAAFUATnRy1IAAAChqsHoAAFg2AAAAY29kZXJzKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuVHVwbGVDb2RlciBtZXRob2Qpaqt4AABVAE50ctWAAAAoarB6AABYOwAAAGlzX2t2X2NvZGVyKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuVHVwbGVDb2RlciBtZXRob2QpapNxAABVAE50ctaAAAAoarB6AABYOQAAAGtleV9jb2RlcigpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlR1cGxlQ29kZXIgbWV0aG9kKWoGcwAAVQBOdHLXgAAAKGqwegAAWDsAAAB2YWx1ZV9jb2RlcigpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlR1cGxlQ29kZXIgbWV0aG9kKWrpcQAAVQBOdHLYgAAAKGqwegAAWEcAAAB0b19ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlR1cGxlQ29kZXIgbWV0aG9kKWozdQAAVQBOdHLZgAAAKGqwegAAWFAAAABmcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuVHVwbGVDb2RlciBzdGF0aWMgbWV0aG9kKWq7cAAAVQBOdHLagAAAKGqwegAAWDcAAABUdXBsZVNlcXVlbmNlQ29kZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMpaq51AABVAE50ctuAAAAoarB6AABYQwAAAHZhbHVlX2NvZGVyKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuVHVwbGVTZXF1ZW5jZUNvZGVyIG1ldGhvZClqYnAAAFUATnRy3IAAAChqsHoAAFhIAAAAaXNfZGV0ZXJtaW5pc3RpYygpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlR1cGxlU2VxdWVuY2VDb2RlciBtZXRob2QpamxwAABVAE50ct2AAAAoarB6AABYTgAAAGFzX2RldGVybWluaXN0aWNfY29kZXIoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5UdXBsZVNlcXVlbmNlQ29kZXIgbWV0aG9kKWpxcQAAVQBOdHLegAAAKGqwegAAWE0AAABmcm9tX3R5cGVfaGludCgpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlR1cGxlU2VxdWVuY2VDb2RlciBzdGF0aWMgbWV0aG9kKWpHdwAAVQBOdHLfgAAAKGqwegAAWDIAAABJdGVyYWJsZUNvZGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzKWpCcQAAVQBOdHLggAAAKGqwegAAWEMAAABpc19kZXRlcm1pbmlzdGljKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuSXRlcmFibGVDb2RlciBtZXRob2QpaiR1AABVAE50cuGAAAAoarB6AABYSQAAAGFzX2RldGVybWluaXN0aWNfY29kZXIoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5JdGVyYWJsZUNvZGVyIG1ldGhvZClqAnUAAFUATnRy4oAAAChqsHoAAFhCAAAAYXNfY2xvdWRfb2JqZWN0KCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuSXRlcmFibGVDb2RlciBtZXRob2Qpapd0AABVAE50cuOAAAAoarB6AABYPgAAAHZhbHVlX2NvZGVyKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuSXRlcmFibGVDb2RlciBtZXRob2QpaohyAABVAE50cuSAAAAoarB6AABYSAAAAGZyb21fdHlwZV9oaW50KCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuSXRlcmFibGVDb2RlciBzdGF0aWMgbWV0aG9kKWpAeAAAVQBOdHLlgAAAKGqwegAAWEoAAAB0b19ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkl0ZXJhYmxlQ29kZXIgbWV0aG9kKWrOcQAAVQBOdHLmgAAAKGqwegAAWDcAAABXaW5kb3dlZFZhbHVlQ29kZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMpardyAABVAE50cueAAAAoarB6AABYSAAAAGlzX2RldGVybWluaXN0aWMoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5XaW5kb3dlZFZhbHVlQ29kZXIgbWV0aG9kKWqicAAAVQBOdHLogAAAKGqwegAAWEcAAABhc19jbG91ZF9vYmplY3QoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5XaW5kb3dlZFZhbHVlQ29kZXIgbWV0aG9kKWpYdQAAVQBOdHLpgAAAKGqwegAAWEMAAABpc19rdl9jb2RlcigpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLldpbmRvd2VkVmFsdWVDb2RlciBtZXRob2Qpas50AABVAE50cuqAAAAoarB6AABYQQAAAGtleV9jb2RlcigpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLldpbmRvd2VkVmFsdWVDb2RlciBtZXRob2Qparl0AABVAE50cuuAAAAoarB6AABYQwAAAHZhbHVlX2NvZGVyKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuV2luZG93ZWRWYWx1ZUNvZGVyIG1ldGhvZClqtnMAAFUATnRy7IAAAChqsHoAAFhPAAAAdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5XaW5kb3dlZFZhbHVlQ29kZXIgbWV0aG9kKWphdgAAVQBOdHLtgAAAZWo+AQAAXXLugAAAKGqaegAAWCwAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5weXRob25fdXJucyAobW9kdWxlKVgqAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LnB5dGhvbl91cm5zVQBOdHLvgAAAYWpQAQAAXXLwgAAAKChqg3oAAFg7AAAAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9ydW5uZXIgKG1vZHVsZSlYOQAAAG1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX3J1bm5lclUATnRy8YAAAChqg3oAAFhPAAAASW50ZXJhY3RpdmVSdW5uZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfcnVubmVyKWracgAAVQBOdHLygAAAKGqDegAAWGEAAABzZXRfcmVuZGVyX29wdGlvbigpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX3J1bm5lci5JbnRlcmFjdGl2ZVJ1bm5lciBtZXRob2QpavpyAABVAE50cvOAAAAoaoN6AABYXQAAAHN0YXJ0X3Nlc3Npb24oKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9ydW5uZXIuSW50ZXJhY3RpdmVSdW5uZXIgbWV0aG9kKWoJdgAAVQBOdHL0gAAAKGqDegAAWFsAAABlbmRfc2Vzc2lvbigpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX3J1bm5lci5JbnRlcmFjdGl2ZVJ1bm5lciBtZXRob2QpakJ0AABVAE50cvWAAAAoaoN6AABYVwAAAGNsZWFudXAoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9ydW5uZXIuSW50ZXJhY3RpdmVSdW5uZXIgbWV0aG9kKWqEcQAAVQBOdHL2gAAAKGqDegAAWFUAAABhcHBseSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX3J1bm5lci5JbnRlcmFjdGl2ZVJ1bm5lciBtZXRob2QpagtzAABVAE50cveAAAAoaoN6AABYXAAAAHJ1bl9waXBlbGluZSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX3J1bm5lci5JbnRlcmFjdGl2ZVJ1bm5lciBtZXRob2QpanxyAABVAE50cviAAAAoaoN6AABYTAAAAFBpcGVsaW5lUmVzdWx0IChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX3J1bm5lcilqqHkAAFUATnRy+YAAAChqg3oAAFheAAAAd2FpdF91bnRpbF9maW5pc2goKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9ydW5uZXIuUGlwZWxpbmVSZXN1bHQgbWV0aG9kKWqPcgAAVQBOdHL6gAAAKGqDegAAWFAAAABnZXQoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9ydW5uZXIuUGlwZWxpbmVSZXN1bHQgbWV0aG9kKWpkcgAAVQBOdHL7gAAAKGqDegAAWFMAAABzYW1wbGUoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9ydW5uZXIuUGlwZWxpbmVSZXN1bHQgbWV0aG9kKWrGdgAAVQBOdHL8gAAAZWpAAQAAXXL9gAAAKChqsHoAAFgmAAAAYXBhY2hlX2JlYW0uaW50ZXJuYWwuZ2NwLmF1dGggKG1vZHVsZSlYJAAAAG1vZHVsZS1hcGFjaGVfYmVhbS5pbnRlcm5hbC5nY3AuYXV0aFUATnRy/oAAAChqsHoAAFg+AAAAc2V0X3J1bm5pbmdfaW5fZ2NlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5pbnRlcm5hbC5nY3AuYXV0aClqunAAAFUATnRy/4AAAChqsHoAAFgXAAAAQXV0aGVudGljYXRpb25FeGNlcHRpb25q+3UAAFUATnRyAIEAAChqsHoAAFhDAAAAZ2V0X3NlcnZpY2VfY3JlZGVudGlhbHMoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmludGVybmFsLmdjcC5hdXRoKWqYdwAAVQBOdHIBgQAAZWpBAQAAXXICgQAAKGp8egAAWCgAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxIChtb2R1bGUpWCYAAABtb2R1bGUtYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MVUATnRyA4EAAGFqQwEAAF1yBIEAAChqg3oAAFglAAAAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcm5hbCAobW9kdWxlKVgjAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJuYWxVAE50cgWBAABhakQBAABdcgaBAAAoKGr2eQAAWEAAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9wcm92aXNpb25fYXBpX3BiMl9ncnBjIChtb2R1bGUpWD4AAABtb2R1bGUtYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcHJvdmlzaW9uX2FwaV9wYjJfZ3JwY1UATnRyB4EAAChq9nkAAFhXAAAAUHJvdmlzaW9uU2VydmljZVN0dWIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3Byb3Zpc2lvbl9hcGlfcGIyX2dycGMpaoB3AABVAE50cgiBAAAoavZ5AABYWwAAAFByb3Zpc2lvblNlcnZpY2VTZXJ2aWNlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcHJvdmlzaW9uX2FwaV9wYjJfZ3JwYylqnHIAAFUATnRyCYEAAChq9nkAAFhsAAAAR2V0UHJvdmlzaW9uSW5mbygpIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9wcm92aXNpb25fYXBpX3BiMl9ncnBjLlByb3Zpc2lvblNlcnZpY2VTZXJ2aWNlciBtZXRob2Qpaq53AABVAE50cgqBAAAoavZ5AABYbAAAAGFkZF9Qcm92aXNpb25TZXJ2aWNlU2VydmljZXJfdG9fc2VydmVyKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9wcm92aXNpb25fYXBpX3BiMl9ncnBjKWozdwAAVQBOdHILgQAAZWpFAQAAXXIMgQAAKChqmnoAAFg6AAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy50ZXN0X2RhdGFmbG93X3J1bm5lciAobW9kdWxlKVg4AAAAbW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cudGVzdF9kYXRhZmxvd19ydW5uZXJVAE50cg2BAAAoapp6AABYTwAAAFRlc3REYXRhZmxvd1J1bm5lciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy50ZXN0X2RhdGFmbG93X3J1bm5lcilqh3YAAFUATnRyDoEAAChqmnoAAFhcAAAAcnVuX3BpcGVsaW5lKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cudGVzdF9kYXRhZmxvd19ydW5uZXIuVGVzdERhdGFmbG93UnVubmVyIG1ldGhvZClqbXEAAFUATnRyD4EAAChqmnoAAFhhAAAAYnVpbGRfY29uc29sZV91cmwoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy50ZXN0X2RhdGFmbG93X3J1bm5lci5UZXN0RGF0YWZsb3dSdW5uZXIgbWV0aG9kKWqgdgAAVQBOdHIQgQAAKGqaegAAWGMAAAB3YWl0X3VudGlsX2luX3N0YXRlKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cudGVzdF9kYXRhZmxvd19ydW5uZXIuVGVzdERhdGFmbG93UnVubmVyIG1ldGhvZClq9HYAAFUATnRyEYEAAGVqRgEAAF1yEoEAACgoasV7AABYLAAAAGFwYWNoZV9iZWFtLmlvLnJlc3RyaWN0aW9uX3RyYWNrZXJzIChtb2R1bGUpWCoAAABtb2R1bGUtYXBhY2hlX2JlYW0uaW8ucmVzdHJpY3Rpb25fdHJhY2tlcnNVAE50chOBAAAoasV7AABYOgAAAE9mZnNldFJhbmdlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5yZXN0cmljdGlvbl90cmFja2VycylqxXQAAFUATnRyFIEAAChqxXsAAFhAAAAAc3BsaXQoKSAoYXBhY2hlX2JlYW0uaW8ucmVzdHJpY3Rpb25fdHJhY2tlcnMuT2Zmc2V0UmFuZ2UgbWV0aG9kKWrRcQAAVQBOdHIVgQAAKGrFewAAWEYAAABuZXdfdHJhY2tlcigpIChhcGFjaGVfYmVhbS5pby5yZXN0cmljdGlvbl90cmFja2Vycy5PZmZzZXRSYW5nZSBtZXRob2QpattyAABVAE50chaBAAAoasV7AABYRwAAAE9mZnNldFJlc3RyaWN0aW9uVHJhY2tlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8ucmVzdHJpY3Rpb25fdHJhY2tlcnMpar5zAABVAE50cheBAAAoasV7AABYUgAAAGNoZWNrX2RvbmUoKSAoYXBhY2hlX2JlYW0uaW8ucmVzdHJpY3Rpb25fdHJhY2tlcnMuT2Zmc2V0UmVzdHJpY3Rpb25UcmFja2VyIG1ldGhvZClqK3EAAFUATnRyGIEAAChqxXsAAFhbAAAAY3VycmVudF9yZXN0cmljdGlvbigpIChhcGFjaGVfYmVhbS5pby5yZXN0cmljdGlvbl90cmFja2Vycy5PZmZzZXRSZXN0cmljdGlvblRyYWNrZXIgbWV0aG9kKWpVeAAAVQBOdHIZgQAAKGrFewAAWFYAAABzdGFydF9wb3NpdGlvbigpIChhcGFjaGVfYmVhbS5pby5yZXN0cmljdGlvbl90cmFja2Vycy5PZmZzZXRSZXN0cmljdGlvblRyYWNrZXIgbWV0aG9kKWoncwAAVQBOdHIagQAAKGrFewAAWFUAAABzdG9wX3Bvc2l0aW9uKCkgKGFwYWNoZV9iZWFtLmlvLnJlc3RyaWN0aW9uX3RyYWNrZXJzLk9mZnNldFJlc3RyaWN0aW9uVHJhY2tlciBtZXRob2Qpaq13AABVAE50chuBAAAoasV7AABYUQAAAHRyeV9jbGFpbSgpIChhcGFjaGVfYmVhbS5pby5yZXN0cmljdGlvbl90cmFja2Vycy5PZmZzZXRSZXN0cmljdGlvblRyYWNrZXIgbWV0aG9kKWrPeAAAVQBOdHIcgQAAKGrFewAAWFIAAABjaGVja3BvaW50KCkgKGFwYWNoZV9iZWFtLmlvLnJlc3RyaWN0aW9uX3RyYWNrZXJzLk9mZnNldFJlc3RyaWN0aW9uVHJhY2tlciBtZXRob2QpahV4AABVAE50ch2BAABlakcBAABdch6BAAAoKGrFegAAWCwAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5leGVjdXRvciAobW9kdWxlKVgqAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV4ZWN1dG9yVQBOdHIfgQAAKGrFegAAWEAAAABUcmFuc2Zvcm1FeGVjdXRvciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXhlY3V0b3Ipaht2AABVAE50ciCBAAAoasV6AABYRQAAAGNhbGwoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXhlY3V0b3IuVHJhbnNmb3JtRXhlY3V0b3IgbWV0aG9kKWpJdAAAVQBOdHIhgQAAKGrFegAAWE0AAABhdHRlbXB0X2NhbGwoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXhlY3V0b3IuVHJhbnNmb3JtRXhlY3V0b3IgbWV0aG9kKWqxdQAAVQBOdHIigQAAKGrFegAAWDcAAABFeGVjdXRvciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXhlY3V0b3IpagRzAABVAE50ciOBAAAoasV6AABYPQAAAHN0YXJ0KCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV4ZWN1dG9yLkV4ZWN1dG9yIG1ldGhvZClqsXkAAFUATnRyJIEAAChqxXoAAFhIAAAAYXdhaXRfY29tcGxldGlvbigpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5leGVjdXRvci5FeGVjdXRvciBtZXRob2QpalZzAABVAE50ciWBAAAoasV6AABYQAAAAHNodXRkb3duKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV4ZWN1dG9yLkV4ZWN1dG9yIG1ldGhvZClqLXEAAFUATnRyJoEAAGVqSAEAAF1yJ4EAACgoasV7AABYIwAAAGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljIChtb2R1bGUpWCEAAABtb2R1bGUtYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWNVAE50ciiBAAAoasV7AABYLQAAAE1ldHJpY3MgKGNsYXNzIGluIGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljKWoeeAAAVQBOdHIpgQAAKGrFewAAWEIAAABnZXRfbmFtZXNwYWNlKCkgKGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljLk1ldHJpY3Mgc3RhdGljIG1ldGhvZClqkHQAAFUATnRyKoEAAChqxXsAAFg8AAAAY291bnRlcigpIChhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYy5NZXRyaWNzIHN0YXRpYyBtZXRob2Qparl3AABVAE50ciuBAAAoasV7AABYQQAAAGRpc3RyaWJ1dGlvbigpIChhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYy5NZXRyaWNzIHN0YXRpYyBtZXRob2QpasBxAABVAE50ciyBAAAoasV7AABYOgAAAGdhdWdlKCkgKGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljLk1ldHJpY3Mgc3RhdGljIG1ldGhvZClqd3MAAFUATnRyLYEAAChqxXsAAFg/AAAATWV0cmljcy5EZWxlZ2F0aW5nQ291bnRlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWMpahB1AABVAE50ci6BAAAoasV7AABYQwAAAGluYygpIChhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYy5NZXRyaWNzLkRlbGVnYXRpbmdDb3VudGVyIG1ldGhvZClqTXUAAFUATnRyL4EAAChqxXsAAFhEAAAATWV0cmljcy5EZWxlZ2F0aW5nRGlzdHJpYnV0aW9uIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYylqFHEAAFUATnRyMIEAAChqxXsAAFhLAAAAdXBkYXRlKCkgKGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljLk1ldHJpY3MuRGVsZWdhdGluZ0Rpc3RyaWJ1dGlvbiBtZXRob2Qpaph1AABVAE50cjGBAAAoasV7AABYPQAAAE1ldHJpY3MuRGVsZWdhdGluZ0dhdWdlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYylq2HEAAFUATnRyMoEAAChqxXsAAFhBAAAAc2V0KCkgKGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljLk1ldHJpY3MuRGVsZWdhdGluZ0dhdWdlIG1ldGhvZClqhnAAAFUATnRyM4EAAChqxXsAAFgzAAAATWV0cmljc0ZpbHRlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWMpauFxAABVAE50cjSBAAAoasV7AABYOgAAAHN0ZXBzIChhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYy5NZXRyaWNzRmlsdGVyIGF0dHJpYnV0ZSlqeXgAAFUATnRyNYEAAChqxXsAAFg6AAAAbmFtZXMgKGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljLk1ldHJpY3NGaWx0ZXIgYXR0cmlidXRlKWqScAAAVQBOdHI2gQAAKGrFewAAWD8AAABuYW1lc3BhY2VzIChhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYy5NZXRyaWNzRmlsdGVyIGF0dHJpYnV0ZSlqpXkAAFUATnRyN4EAAChqxXsAAFg9AAAAd2l0aF9uYW1lKCkgKGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljLk1ldHJpY3NGaWx0ZXIgbWV0aG9kKWpidgAAVQBOdHI4gQAAKGrFewAAWD4AAAB3aXRoX25hbWVzKCkgKGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljLk1ldHJpY3NGaWx0ZXIgbWV0aG9kKWr0dwAAVQBOdHI5gQAAKGrFewAAWEIAAAB3aXRoX25hbWVzcGFjZSgpIChhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYy5NZXRyaWNzRmlsdGVyIG1ldGhvZClq6nIAAFUATnRyOoEAAChqxXsAAFhDAAAAd2l0aF9uYW1lc3BhY2VzKCkgKGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljLk1ldHJpY3NGaWx0ZXIgbWV0aG9kKWp2eAAAVQBOdHI7gQAAKGrFewAAWD0AAAB3aXRoX3N0ZXAoKSAoYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWMuTWV0cmljc0ZpbHRlciBtZXRob2QpagF4AABVAE50cjyBAAAoasV7AABYPgAAAHdpdGhfc3RlcHMoKSAoYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWMuTWV0cmljc0ZpbHRlciBtZXRob2QpatxxAABVAE50cj2BAABlakkBAABdcj6BAAAoKGr2eQAAWDoAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9qb2JfYXBpX3BiMl9ncnBjIChtb2R1bGUpWDgAAABtb2R1bGUtYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fam9iX2FwaV9wYjJfZ3JwY1UATnRyP4EAAChq9nkAAFhLAAAASm9iU2VydmljZVN0dWIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2pvYl9hcGlfcGIyX2dycGMpav14AABVAE50ckCBAAAoavZ5AABYTwAAAEpvYlNlcnZpY2VTZXJ2aWNlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fam9iX2FwaV9wYjJfZ3JwYylqbXcAAFUATnRyQYEAAChq9nkAAFhXAAAAUHJlcGFyZSgpIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9qb2JfYXBpX3BiMl9ncnBjLkpvYlNlcnZpY2VTZXJ2aWNlciBtZXRob2QpavF2AABVAE50ckKBAAAoavZ5AABYUwAAAFJ1bigpIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9qb2JfYXBpX3BiMl9ncnBjLkpvYlNlcnZpY2VTZXJ2aWNlciBtZXRob2Qpahp2AABVAE50ckOBAAAoavZ5AABYWAAAAEdldFN0YXRlKCkgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2pvYl9hcGlfcGIyX2dycGMuSm9iU2VydmljZVNlcnZpY2VyIG1ldGhvZClqMHgAAFUATnRyRIEAAChq9nkAAFhWAAAAQ2FuY2VsKCkgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2pvYl9hcGlfcGIyX2dycGMuSm9iU2VydmljZVNlcnZpY2VyIG1ldGhvZClqCHIAAFUATnRyRYEAAChq9nkAAFheAAAAR2V0U3RhdGVTdHJlYW0oKSAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fam9iX2FwaV9wYjJfZ3JwYy5Kb2JTZXJ2aWNlU2VydmljZXIgbWV0aG9kKWq8cQAAVQBOdHJGgQAAKGr2eQAAWGAAAABHZXRNZXNzYWdlU3RyZWFtKCkgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2pvYl9hcGlfcGIyX2dycGMuSm9iU2VydmljZVNlcnZpY2VyIG1ldGhvZClqzngAAFUATnRyR4EAAChq9nkAAFhgAAAAYWRkX0pvYlNlcnZpY2VTZXJ2aWNlcl90b19zZXJ2ZXIoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2pvYl9hcGlfcGIyX2dycGMpalN3AABVAE50ckiBAABlaLtdckmBAAAoau56AABYFAAAAGFwYWNoZV9iZWFtIChtb2R1bGUpWBIAAABtb2R1bGUtYXBhY2hlX2JlYW1VAE50ckqBAABhaksBAABdckuBAAAoKGruegAAWDAAAABhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2UgKG1vZHVsZSlYLgAAAG1vZHVsZS1hcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2VVAE50ckyBAAAoau56AABYPgAAAEJvdW5kTWV0aG9kIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2UpatdwAABVAE50ck2BAAAoau56AABYOAAAAENvbnN0IChjbGFzcyBpbiBhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2Upasd4AABVAE50ck6BAAAoau56AABYRgAAAHVud3JhcCgpIChhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2UuQ29uc3Qgc3RhdGljIG1ldGhvZClqsnEAAFUATnRyT4EAAChq7noAAFhKAAAAdW53cmFwX2FsbCgpIChhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2UuQ29uc3Qgc3RhdGljIG1ldGhvZClqWnkAAFUATnRyUIEAAChq7noAAFg9AAAARnJhbWVTdGF0ZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlKWrBcQAAVQBOdHJRgQAAKGruegAAWEoAAABjbG9zdXJlX3R5cGUoKSAoYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlLkZyYW1lU3RhdGUgbWV0aG9kKWoIdwAAVQBOdHJSgQAAKGruegAAWEgAAABjb25zdF90eXBlKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZS5GcmFtZVN0YXRlIG1ldGhvZClqpnAAAFUATnRyU4EAAChq7noAAFhCAAAAY29weSgpIChhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2UuRnJhbWVTdGF0ZSBtZXRob2QparN3AABVAE50clSBAAAoau56AABYSAAAAGdldF9nbG9iYWwoKSAoYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlLkZyYW1lU3RhdGUgbWV0aG9kKWp6cgAAVQBOdHJVgQAAKGruegAAWEYAAABnZXRfbmFtZSgpIChhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2UuRnJhbWVTdGF0ZSBtZXRob2QpaityAABVAE50claBAAAoau56AABYEgAAAFR5cGVJbmZlcmVuY2VFcnJvcnJXgQAAaq9wAABVAE50cliBAAAoau56AABYQgAAAGVsZW1lbnRfdHlwZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlKWooeQAAVQBOdHJZgQAAKGruegAAWD4AAABoYXNoYWJsZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlKWqzcwAAVQBOdHJagQAAKGruegAAWEcAAABpbmZlcl9yZXR1cm5fdHlwZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlKWpgeQAAVQBOdHJbgQAAKGruegAAWEwAAABpbmZlcl9yZXR1cm5fdHlwZV9mdW5jKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2UpagB2AABVAE50clyBAAAoau56AABYRgAAAGluc3RhbmNlX3RvX3R5cGUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZSlqm3UAAFUATnRyXYEAAChq7noAAFhFAAAAa2V5X3ZhbHVlX3R5cGVzKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2UpavB1AABVAE50cl6BAAAoau56AABYOwAAAHVuaW9uKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2Uparx5AABVAE50cl+BAAAoau56AABYQAAAAHVuaW9uX2xpc3QoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZSlqGXcAAFUATnRyYIEAAGVqTAEAAF1yYYEAACgoapp6AABYNgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZSAobW9kdWxlKVg0AAAAbW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZVUATnRyYoEAAChqmnoAAFhFAAAATmF0aXZlU291cmNlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UpahNxAABVAE50cmOBAAAoapp6AABYTAAAAHJlYWRlcigpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UuTmF0aXZlU291cmNlIG1ldGhvZClqbXUAAFUATnRyZIEAAChqmnoAAFhQAAAAaXNfYm91bmRlZCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UuTmF0aXZlU291cmNlIG1ldGhvZClqH3cAAFUATnRyZYEAAChqmnoAAFhLAAAATmF0aXZlU291cmNlUmVhZGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UpaklzAABVAE50cmaBAAAoapp6AABYZAAAAHJldHVybnNfd2luZG93ZWRfdmFsdWVzIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UuTmF0aXZlU291cmNlUmVhZGVyIGF0dHJpYnV0ZSlqcHEAAFUATnRyZ4EAAChqmnoAAFhYAAAAZ2V0X3Byb2dyZXNzKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZS5OYXRpdmVTb3VyY2VSZWFkZXIgbWV0aG9kKWradAAAVQBOdHJogQAAKGqaegAAWGEAAAByZXF1ZXN0X2R5bmFtaWNfc3BsaXQoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLk5hdGl2ZVNvdXJjZVJlYWRlciBtZXRob2QpanZwAABVAE50cmmBAAAoapp6AABYRwAAAFJlYWRlclByb2dyZXNzIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2Upasx0AABVAE50cmqBAAAoapp6AABYUQAAAHBvc2l0aW9uIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UuUmVhZGVyUHJvZ3Jlc3MgYXR0cmlidXRlKWqqeQAAVQBOdHJrgQAAKGqaegAAWFkAAABwZXJjZW50X2NvbXBsZXRlIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UuUmVhZGVyUHJvZ3Jlc3MgYXR0cmlidXRlKWrEcAAAVQBOdHJsgQAAKGqaegAAWFcAAAByZW1haW5pbmdfdGltZSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLlJlYWRlclByb2dyZXNzIGF0dHJpYnV0ZSlqUXgAAFUATnRybYEAAChqmnoAAFheAAAAY29uc3VtZWRfc3BsaXRfcG9pbnRzIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UuUmVhZGVyUHJvZ3Jlc3MgYXR0cmlidXRlKWp9cwAAVQBOdHJugQAAKGqaegAAWF8AAAByZW1haW5pbmdfc3BsaXRfcG9pbnRzIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UuUmVhZGVyUHJvZ3Jlc3MgYXR0cmlidXRlKWoydwAAVQBOdHJvgQAAKGqaegAAWEcAAABSZWFkZXJQb3NpdGlvbiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlKWqvdwAAVQBOdHJwgQAAKGqaegAAWEcAAABDb25jYXRQb3NpdGlvbiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlKWp6dwAAVQBOdHJxgQAAKGqaegAAWEwAAABEeW5hbWljU3BsaXRSZXF1ZXN0IChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2Upaqh0AABVAE50cnKBAAAoapp6AABYSwAAAER5bmFtaWNTcGxpdFJlc3VsdCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlKWrfdAAAVQBOdHJzgQAAKGqaegAAWFcAAABEeW5hbWljU3BsaXRSZXN1bHRXaXRoUG9zaXRpb24gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZSlqrXMAAFUATnRydIEAAChqmnoAAFhDAAAATmF0aXZlU2luayAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlKWoedQAAVQBOdHJ1gQAAKGqaegAAWEoAAAB3cml0ZXIoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLk5hdGl2ZVNpbmsgbWV0aG9kKWqGcgAAVQBOdHJ2gQAAKGqaegAAWEkAAABOYXRpdmVTaW5rV3JpdGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UpasF1AABVAE50cneBAAAoapp6AABYYAAAAHRha2VzX3dpbmRvd2VkX3ZhbHVlcyAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLk5hdGl2ZVNpbmtXcml0ZXIgYXR0cmlidXRlKWpTeAAAVQBOdHJ4gQAAKGqaegAAWE8AAABXcml0ZSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UuTmF0aXZlU2lua1dyaXRlciBtZXRob2QpahJxAABVAE50cnmBAABlak0BAABdcnqBAAAoKGrFegAAWDQAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfdXNlcnN0YXRlIChtb2R1bGUpWDIAAABtb2R1bGUtYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X3VzZXJzdGF0ZVUATnRye4EAAChqxXoAAFhNAAAARGlyZWN0VXNlclN0YXRlQ29udGV4dCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X3VzZXJzdGF0ZSlq1XUAAFUATnRyfIEAAChqxXoAAFhXAAAAZ2V0X3RpbWVyKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF91c2Vyc3RhdGUuRGlyZWN0VXNlclN0YXRlQ29udGV4dCBtZXRob2QpasF0AABVAE50cn2BAAAoasV6AABYVwAAAGdldF9zdGF0ZSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfdXNlcnN0YXRlLkRpcmVjdFVzZXJTdGF0ZUNvbnRleHQgbWV0aG9kKWrXcwAAVQBOdHJ+gQAAKGrFegAAWFQAAABjb21taXQoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X3VzZXJzdGF0ZS5EaXJlY3RVc2VyU3RhdGVDb250ZXh0IG1ldGhvZClqpXgAAFUATnRyf4EAAGVo/F1ygIEAACgoapp6AABYOgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cucHRyYW5zZm9ybV9vdmVycmlkZXMgKG1vZHVsZSlYOAAAAG1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LnB0cmFuc2Zvcm1fb3ZlcnJpZGVzVQBOdHKBgQAAKGqaegAAWFUAAABDcmVhdGVQVHJhbnNmb3JtT3ZlcnJpZGUgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cucHRyYW5zZm9ybV9vdmVycmlkZXMpamR0AABVAE50coKBAAAoapp6AABYXQAAAG1hdGNoZXMoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5wdHJhbnNmb3JtX292ZXJyaWRlcy5DcmVhdGVQVHJhbnNmb3JtT3ZlcnJpZGUgbWV0aG9kKWrocAAAVQBOdHKDgQAAKGqaegAAWG8AAABnZXRfcmVwbGFjZW1lbnRfdHJhbnNmb3JtKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cucHRyYW5zZm9ybV9vdmVycmlkZXMuQ3JlYXRlUFRyYW5zZm9ybU92ZXJyaWRlIG1ldGhvZClq03IAAFUATnRyhIEAAGVqTwEAAF1yhYEAAChq7noAAFgcAAAAYXBhY2hlX2JlYW0udmVyc2lvbiAobW9kdWxlKVgaAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnZlcnNpb25VAE50coaBAABhaj8BAABdcoeBAAAoKGrFegAAWDcAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC50cmFuc2Zvcm1fZXZhbHVhdG9yIChtb2R1bGUpWDUAAABtb2R1bGUtYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudHJhbnNmb3JtX2V2YWx1YXRvclUATnRyiIEAAChqxXoAAFhUAAAAVHJhbnNmb3JtRXZhbHVhdG9yUmVnaXN0cnkgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnRyYW5zZm9ybV9ldmFsdWF0b3Ipalx4AABVAE50comBAAAoasV6AABYYgAAAGdldF9ldmFsdWF0b3IoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudHJhbnNmb3JtX2V2YWx1YXRvci5UcmFuc2Zvcm1FdmFsdWF0b3JSZWdpc3RyeSBtZXRob2Qparp0AABVAE50coqBAAAoasV6AABYbQAAAGdldF9yb290X2J1bmRsZV9wcm92aWRlcigpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC50cmFuc2Zvcm1fZXZhbHVhdG9yLlRyYW5zZm9ybUV2YWx1YXRvclJlZ2lzdHJ5IG1ldGhvZClqvnYAAFUATnRyi4EAAChqxXoAAFhsAAAAc2hvdWxkX2V4ZWN1dGVfc2VyaWFsbHkoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudHJhbnNmb3JtX2V2YWx1YXRvci5UcmFuc2Zvcm1FdmFsdWF0b3JSZWdpc3RyeSBtZXRob2Qpal13AABVAE50coyBAAAoasV6AABYTAAAAFJvb3RCdW5kbGVQcm92aWRlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudHJhbnNmb3JtX2V2YWx1YXRvcilqEnkAAFUATnRyjYEAAChqxXoAAFhdAAAAZ2V0X3Jvb3RfYnVuZGxlcygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC50cmFuc2Zvcm1fZXZhbHVhdG9yLlJvb3RCdW5kbGVQcm92aWRlciBtZXRob2Qpakt3AABVAE50co6BAAAoasV6AABYUwAAAERlZmF1bHRSb290QnVuZGxlUHJvdmlkZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnRyYW5zZm9ybV9ldmFsdWF0b3IpaqVwAABVAE50co+BAAAoasV6AABYZAAAAGdldF9yb290X2J1bmRsZXMoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudHJhbnNmb3JtX2V2YWx1YXRvci5EZWZhdWx0Um9vdEJ1bmRsZVByb3ZpZGVyIG1ldGhvZClqiXkAAFUATnRykIEAAGVqUQEAAF1ykYEAAChqmnoAAFglAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdyAobW9kdWxlKVgjAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3dVAE50cpKBAABhajUBAABdcpOBAAAoKGqwegAAWCwAAABhcGFjaGVfYmVhbS5pbnRlcm5hbC5nY3AuanNvbl92YWx1ZSAobW9kdWxlKVgqAAAAbW9kdWxlLWFwYWNoZV9iZWFtLmludGVybmFsLmdjcC5qc29uX3ZhbHVlVQBOdHKUgQAAKGqwegAAWEwAAABnZXRfdHlwZWRfdmFsdWVfZGVzY3JpcHRvcigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW50ZXJuYWwuZ2NwLmpzb25fdmFsdWUpatR2AABVAE50cpWBAAAoarB6AABYPwAAAHRvX2pzb25fdmFsdWUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmludGVybmFsLmdjcC5qc29uX3ZhbHVlKWp1eAAAVQBOdHKWgQAAKGqwegAAWEEAAABmcm9tX2pzb25fdmFsdWUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmludGVybmFsLmdjcC5qc29uX3ZhbHVlKWrPdAAAVQBOdHKXgQAAZWpTAQAAXXKYgQAAKChqmnoAAFg2AAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19tZXRyaWNzIChtb2R1bGUpWDQAAABtb2R1bGUtYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19tZXRyaWNzVQBOdHKZgQAAKGqaegAAWEgAAABEYXRhZmxvd01ldHJpY3MgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfbWV0cmljcylq6HMAAFUATnRymoEAAChqmnoAAFhOAAAAcXVlcnkoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19tZXRyaWNzLkRhdGFmbG93TWV0cmljcyBtZXRob2Qpanx1AABVAE50cpuBAABlalQBAABdcpyBAAAoagV6AABYLQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY3JlYXRlX3NvdXJjZSAobW9kdWxlKVgrAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY3JlYXRlX3NvdXJjZVUATnRynYEAAGFqVQEAAF1ynoEAACgoau56AABYJgAAAGFwYWNoZV9iZWFtLnV0aWxzLmFubm90YXRpb25zIChtb2R1bGUpWCQAAABtb2R1bGUtYXBhY2hlX2JlYW0udXRpbHMuYW5ub3RhdGlvbnNVAE50cp+BAAAoau56AABYFgAAAEJlYW1EZXByZWNhdGlvbldhcm5pbmdyoIEAAGrKdAAAVQBOdHKhgQAAKGruegAAWDQAAABhbm5vdGF0ZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udXRpbHMuYW5ub3RhdGlvbnMpamh0AABVAE50cqKBAABlalYBAABdcqOBAAAoKGrFewAAWCcAAABhcGFjaGVfYmVhbS5pby5sb2NhbGZpbGVzeXN0ZW0gKG1vZHVsZSlYJQAAAG1vZHVsZS1hcGFjaGVfYmVhbS5pby5sb2NhbGZpbGVzeXN0ZW1VAE50cqSBAAAoasV7AABYOQAAAExvY2FsRmlsZVN5c3RlbSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtKWp9eQAAVQBOdHKlgQAAKGrFewAAWEYAAABzY2hlbWUoKSAoYXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtLkxvY2FsRmlsZVN5c3RlbSBjbGFzcyBtZXRob2QpaptxAABVAE50cqaBAAAoasV7AABYPgAAAGpvaW4oKSAoYXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtLkxvY2FsRmlsZVN5c3RlbSBtZXRob2Qpart3AABVAE50cqeBAAAoasV7AABYPwAAAHNwbGl0KCkgKGFwYWNoZV9iZWFtLmlvLmxvY2FsZmlsZXN5c3RlbS5Mb2NhbEZpbGVTeXN0ZW0gbWV0aG9kKWp8eQAAVQBOdHKogQAAKGrFewAAWEAAAABta2RpcnMoKSAoYXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtLkxvY2FsRmlsZVN5c3RlbSBtZXRob2QpakZzAABVAE50cqmBAAAoasV7AABYQgAAAGhhc19kaXJzKCkgKGFwYWNoZV9iZWFtLmlvLmxvY2FsZmlsZXN5c3RlbS5Mb2NhbEZpbGVTeXN0ZW0gbWV0aG9kKWoncgAAVQBOdHKqgQAAKGrFewAAWEAAAABjcmVhdGUoKSAoYXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtLkxvY2FsRmlsZVN5c3RlbSBtZXRob2QpagN4AABVAE50cquBAAAoasV7AABYPgAAAG9wZW4oKSAoYXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtLkxvY2FsRmlsZVN5c3RlbSBtZXRob2Qpatd2AABVAE50cqyBAAAoasV7AABYPgAAAGNvcHkoKSAoYXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtLkxvY2FsRmlsZVN5c3RlbSBtZXRob2Qpaml2AABVAE50cq2BAAAoasV7AABYQAAAAHJlbmFtZSgpIChhcGFjaGVfYmVhbS5pby5sb2NhbGZpbGVzeXN0ZW0uTG9jYWxGaWxlU3lzdGVtIG1ldGhvZClqkXkAAFUATnRyroEAAChqxXsAAFhAAAAAZXhpc3RzKCkgKGFwYWNoZV9iZWFtLmlvLmxvY2FsZmlsZXN5c3RlbS5Mb2NhbEZpbGVTeXN0ZW0gbWV0aG9kKWqdcwAAVQBOdHKvgQAAKGrFewAAWD4AAABzaXplKCkgKGFwYWNoZV9iZWFtLmlvLmxvY2FsZmlsZXN5c3RlbS5Mb2NhbEZpbGVTeXN0ZW0gbWV0aG9kKWr9cwAAVQBOdHKwgQAAKGrFewAAWEYAAABsYXN0X3VwZGF0ZWQoKSAoYXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtLkxvY2FsRmlsZVN5c3RlbSBtZXRob2QpauxwAABVAE50crGBAAAoasV7AABYQgAAAGNoZWNrc3VtKCkgKGFwYWNoZV9iZWFtLmlvLmxvY2FsZmlsZXN5c3RlbS5Mb2NhbEZpbGVTeXN0ZW0gbWV0aG9kKWq8eAAAVQBOdHKygQAAKGrFewAAWEAAAABkZWxldGUoKSAoYXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtLkxvY2FsRmlsZVN5c3RlbSBtZXRob2QpaoNwAABVAE50crOBAABlalcBAABdcrSBAAAoarB6AABYJgAAAGFwYWNoZV9iZWFtLmNvZGVycy50eXBlY29kZXJzIChtb2R1bGUpWCQAAABtb2R1bGUtYXBhY2hlX2JlYW0uY29kZXJzLnR5cGVjb2RlcnNVAE50crWBAABhalgBAABdcraBAAAoKGruegAAWCgAAABhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzIChtb2R1bGUpWCYAAABtb2R1bGUtYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50c1UATnRyt4EAAChq7noAAFg3AAAAVHlwZVZhcmlhYmxlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzKWrddAAAVQBOdHK4gQAAKGruegAAWEwAAABtYXRjaF90eXBlX3ZhcmlhYmxlcygpIChhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzLlR5cGVWYXJpYWJsZSBtZXRob2QpakN3AABVAE50crmBAAAoau56AABYSwAAAGJpbmRfdHlwZV92YXJpYWJsZXMoKSAoYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50cy5UeXBlVmFyaWFibGUgbWV0aG9kKWrFcgAAVQBOdHK6gQAAKGruegAAWDkAAABXaW5kb3dlZFZhbHVlIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50cylqg3cAAFUATnRyu4EAAGVqWQEAAF1yvIEAAChqg3oAAFgrAAAAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcm5hbC5uYW1lcyAobW9kdWxlKVgpAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJuYWwubmFtZXNVAE50cr2BAABhaloBAABdcr6BAAAoKGr2eQAAWDkAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGMgKG1vZHVsZSlYNwAAAG1vZHVsZS1hcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGNVAE50cr+BAAAoavZ5AABYTQAAAEJlYW1GbkNvbnRyb2xTdHViIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGMpaopxAABVAE50csCBAAAoavZ5AABYUQAAAEJlYW1GbkNvbnRyb2xTZXJ2aWNlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjKWoAdwAAVQBOdHLBgQAAKGr2eQAAWFkAAABDb250cm9sKCkgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYy5CZWFtRm5Db250cm9sU2VydmljZXIgbWV0aG9kKWo4eAAAVQBOdHLCgQAAKGr2eQAAWGIAAABhZGRfQmVhbUZuQ29udHJvbFNlcnZpY2VyX3RvX3NlcnZlcigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjKWoVdgAAVQBOdHLDgQAAKGr2eQAAWEoAAABCZWFtRm5EYXRhU3R1YiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjKWovcgAAVQBOdHLEgQAAKGr2eQAAWE4AAABCZWFtRm5EYXRhU2VydmljZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYylqrnMAAFUATnRyxYEAAChq9nkAAFhTAAAARGF0YSgpIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGMuQmVhbUZuRGF0YVNlcnZpY2VyIG1ldGhvZClqtHgAAFUATnRyxoEAAChq9nkAAFhfAAAAYWRkX0JlYW1GbkRhdGFTZXJ2aWNlcl90b19zZXJ2ZXIoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYylqzXkAAFUATnRyx4EAAChq9nkAAFhLAAAAQmVhbUZuU3RhdGVTdHViIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGMpajB3AABVAE50csiBAAAoavZ5AABYTwAAAEJlYW1GblN0YXRlU2VydmljZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYylq+HUAAFUATnRyyYEAAChq9nkAAFhVAAAAU3RhdGUoKSAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjLkJlYW1GblN0YXRlU2VydmljZXIgbWV0aG9kKWrRdgAAVQBOdHLKgQAAKGr2eQAAWGAAAABhZGRfQmVhbUZuU3RhdGVTZXJ2aWNlcl90b19zZXJ2ZXIoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYylqqHgAAFUATnRyy4EAAChq9nkAAFhNAAAAQmVhbUZuTG9nZ2luZ1N0dWIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYylq5ngAAFUATnRyzIEAAChq9nkAAFhRAAAAQmVhbUZuTG9nZ2luZ1NlcnZpY2VyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGMpam12AABVAE50cs2BAAAoavZ5AABYWQAAAExvZ2dpbmcoKSAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjLkJlYW1GbkxvZ2dpbmdTZXJ2aWNlciBtZXRob2QpaqB4AABVAE50cs6BAAAoavZ5AABYYgAAAGFkZF9CZWFtRm5Mb2dnaW5nU2VydmljZXJfdG9fc2VydmVyKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGMpahhxAABVAE50cs+BAAAoavZ5AABYWAAAAEJlYW1GbkV4dGVybmFsV29ya2VyUG9vbFN0dWIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYylqcHQAAFUATnRy0IEAAChq9nkAAFhcAAAAQmVhbUZuRXh0ZXJuYWxXb3JrZXJQb29sU2VydmljZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYylqO3IAAFUATnRy0YEAAChq9nkAAFhyAAAATm90aWZ5UnVubmVyQXZhaWxhYmxlKCkgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYy5CZWFtRm5FeHRlcm5hbFdvcmtlclBvb2xTZXJ2aWNlciBtZXRob2QpapZ5AABVAE50ctKBAAAoavZ5AABYbQAAAGFkZF9CZWFtRm5FeHRlcm5hbFdvcmtlclBvb2xTZXJ2aWNlcl90b19zZXJ2ZXIoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYylq73QAAFUATnRy04EAAGVqXAEAAF1y1IEAACgoagV6AABYJAAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbCAobW9kdWxlKVgiAAAAbW9kdWxlLWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbFUATnRy1YEAAChqBXoAAFgzAAAAQ29Hcm91cEJ5S2V5IChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwpatZ0AABVAE50ctaBAAAoagV6AABYOgAAAGV4cGFuZCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwuQ29Hcm91cEJ5S2V5IG1ldGhvZClqVHMAAFUATnRy14EAAChqBXoAAFguAAAAS2V5cygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsKWqMcwAAVQBOdHLYgQAAKGoFegAAWDAAAABWYWx1ZXMoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbClq6XcAAFUATnRy2YEAAChqBXoAAFgwAAAAS3ZTd2FwKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwpahxxAABVAE50ctqBAAAoagV6AABYOgAAAFJlbW92ZUR1cGxpY2F0ZXMoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbClqS3EAAFUATnRy24EAAChqBXoAAFg0AAAAQmF0Y2hFbGVtZW50cyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsKWr4dwAAVQBOdHLcgQAAKGoFegAAWDsAAABleHBhbmQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsLkJhdGNoRWxlbWVudHMgbWV0aG9kKWrycgAAVQBOdHLdgQAAKGoFegAAWDAAAABSZXNodWZmbGUgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbClqx3kAAFUATnRy3oEAAChqBXoAAFg3AAAAZXhwYW5kKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbC5SZXNodWZmbGUgbWV0aG9kKWpAcQAAVQBOdHLfgQAAKGoFegAAWEgAAAB0b19ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwuUmVzaHVmZmxlIG1ldGhvZClqvHcAAFUATnRy4IEAAChqBXoAAFhRAAAAZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwuUmVzaHVmZmxlIHN0YXRpYyBtZXRob2Qparp4AABVAE50cuGBAABlal0BAABdcuKBAAAoKGr5eQAAWCUAAABhcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNlIChtb2R1bGUpWCMAAABtb2R1bGUtYXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZVUATnRy44EAAChq+XkAAFg0AAAAQ29uY2F0U291cmNlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNlKWoBcgAAVQBOdHLkgQAAKGr5eQAAWD0AAABzb3VyY2VzIChhcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNlLkNvbmNhdFNvdXJjZSBhdHRyaWJ1dGUpajNxAABVAE50cuWBAAAoavl5AABYQgAAAGVzdGltYXRlX3NpemUoKSAoYXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZS5Db25jYXRTb3VyY2UgbWV0aG9kKWpAdwAAVQBOdHLmgQAAKGr5eQAAWDoAAABzcGxpdCgpIChhcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNlLkNvbmNhdFNvdXJjZSBtZXRob2Qpaql5AABVAE50cueBAAAoavl5AABYRgAAAGdldF9yYW5nZV90cmFja2VyKCkgKGFwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2UuQ29uY2F0U291cmNlIG1ldGhvZClqMHYAAFUATnRy6IEAAChq+XkAAFg5AAAAcmVhZCgpIChhcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNlLkNvbmNhdFNvdXJjZSBtZXRob2QpaiNyAABVAE50cumBAAAoavl5AABYSQAAAGRlZmF1bHRfb3V0cHV0X2NvZGVyKCkgKGFwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2UuQ29uY2F0U291cmNlIG1ldGhvZClqRnUAAFUATnRy6oEAAChq+XkAAFg6AAAAQ29uY2F0UmFuZ2VUcmFja2VyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNlKWppeQAAVQBOdHLrgQAAKGr5eQAAWEkAAABzdGFydF9wb3NpdGlvbigpIChhcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNlLkNvbmNhdFJhbmdlVHJhY2tlciBtZXRob2QpapNyAABVAE50cuyBAAAoavl5AABYSAAAAHN0b3BfcG9zaXRpb24oKSAoYXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZS5Db25jYXRSYW5nZVRyYWNrZXIgbWV0aG9kKWondwAAVQBOdHLtgQAAKGr5eQAAWEQAAAB0cnlfY2xhaW0oKSAoYXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZS5Db25jYXRSYW5nZVRyYWNrZXIgbWV0aG9kKWrVdAAAVQBOdHLugQAAKGr5eQAAWEQAAAB0cnlfc3BsaXQoKSAoYXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZS5Db25jYXRSYW5nZVRyYWNrZXIgbWV0aG9kKWpNcgAAVQBOdHLvgQAAKGr5eQAAWE8AAABzZXRfY3VycmVudF9wb3NpdGlvbigpIChhcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNlLkNvbmNhdFJhbmdlVHJhY2tlciBtZXRob2Qpanl5AABVAE50cvCBAAAoavl5AABYTwAAAHBvc2l0aW9uX2F0X2ZyYWN0aW9uKCkgKGFwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2UuQ29uY2F0UmFuZ2VUcmFja2VyIG1ldGhvZClq+nYAAFUATnRy8YEAAChq+XkAAFhMAAAAZnJhY3Rpb25fY29uc3VtZWQoKSAoYXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZS5Db25jYXRSYW5nZVRyYWNrZXIgbWV0aG9kKWrgcwAAVQBOdHLygQAAKGr5eQAAWEoAAABsb2NhbF90b19nbG9iYWwoKSAoYXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZS5Db25jYXRSYW5nZVRyYWNrZXIgbWV0aG9kKWqBdwAAVQBOdHLzgQAAKGr5eQAAWEoAAABnbG9iYWxfdG9fbG9jYWwoKSAoYXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZS5Db25jYXRSYW5nZVRyYWNrZXIgbWV0aG9kKWohdQAAVQBOdHL0gQAAKGr5eQAAWEwAAABzdWJfcmFuZ2VfdHJhY2tlcigpIChhcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNlLkNvbmNhdFJhbmdlVHJhY2tlciBtZXRob2Qpak5yAABVAE50cvWBAABlal4BAABdcvaBAAAoKGr5eQAAWCcAAABhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2UgKG1vZHVsZSlYJQAAAG1vZHVsZS1hcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2VVAE50cveBAAAoavl5AABYOQAAAEZpbGVCYXNlZFNvdXJjZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc291cmNlKWpTcQAAVQBOdHL4gQAAKGr5eQAAWFYAAABNSU5fTlVNQkVSX09GX0ZJTEVTX1RPX1NUQVQgKGFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNvdXJjZS5GaWxlQmFzZWRTb3VyY2UgYXR0cmlidXRlKWoteQAAVQBOdHL5gQAAKGr5eQAAWFgAAABNSU5fRlJBQ1RJT05fT0ZfRklMRVNfVE9fU1RBVCAoYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc291cmNlLkZpbGVCYXNlZFNvdXJjZSBhdHRyaWJ1dGUpasl2AABVAE50cvqBAAAoavl5AABYRgAAAGRpc3BsYXlfZGF0YSgpIChhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2UuRmlsZUJhc2VkU291cmNlIG1ldGhvZClqM3QAAFUATnRy+4EAAChq+XkAAFhDAAAAb3Blbl9maWxlKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNvdXJjZS5GaWxlQmFzZWRTb3VyY2UgbWV0aG9kKWqLcAAAVQBOdHL8gQAAKGr5eQAAWD8AAABzcGxpdCgpIChhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2UuRmlsZUJhc2VkU291cmNlIG1ldGhvZClqoHQAAFUATnRy/YEAAChq+XkAAFhHAAAAZXN0aW1hdGVfc2l6ZSgpIChhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2UuRmlsZUJhc2VkU291cmNlIG1ldGhvZClqAnEAAFUATnRy/oEAAChq+XkAAFg+AAAAcmVhZCgpIChhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2UuRmlsZUJhc2VkU291cmNlIG1ldGhvZClqk3kAAFUATnRy/4EAAChq+XkAAFhLAAAAZ2V0X3JhbmdlX3RyYWNrZXIoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc291cmNlLkZpbGVCYXNlZFNvdXJjZSBtZXRob2Qpak14AABVAE50cgCCAAAoavl5AABYRgAAAHJlYWRfcmVjb3JkcygpIChhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2UuRmlsZUJhc2VkU291cmNlIG1ldGhvZClq8XcAAFUATnRyAYIAAChq+XkAAFhFAAAAc3BsaXR0YWJsZSAoYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc291cmNlLkZpbGVCYXNlZFNvdXJjZSBhdHRyaWJ1dGUpamFxAABVAE50cgKCAABlal8BAABdcgOCAAAoKGqDegAAWCgAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmpvYi5tYW5hZ2VyIChtb2R1bGUpWCYAAABtb2R1bGUtYXBhY2hlX2JlYW0ucnVubmVycy5qb2IubWFuYWdlclUATnRyBIIAAChqg3oAAFg7AAAARG9ja2VyUlBDTWFuYWdlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5qb2IubWFuYWdlcilqwnIAAFUATnRyBYIAAGV1VRFpbnRlcnNwaGlueF9jYWNoZXIGggAAfXIHggAAKGihaKBKnFpbXGopUgAAh2ifaJ5KnFpbXGplAQAAh3VVEV92aWV3Y29kZV9tb2R1bGVzcgiCAAB9cgmCAAAoVTZhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkucGlwZWxpbmVfZ3JhcGgoWAshAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkZvciBnZW5lcmF0aW5nIEJlYW0gcGlwZWxpbmUgZ3JhcGggaW4gRE9UIHJlcHJlc2VudGF0aW9uLgoKVGhpcyBtb2R1bGUgaXMgZXhwZXJpbWVudGFsLiBObyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoiIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CmZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoKaW1wb3J0IGNvbGxlY3Rpb25zCmltcG9ydCB0aHJlYWRpbmcKCmltcG9ydCBweWRvdAoKaW1wb3J0IGFwYWNoZV9iZWFtIGFzIGJlYW0KZnJvbSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkgaW1wb3J0IGJlYW1fcnVubmVyX2FwaV9wYjIKCgpjbGFzcyBQaXBlbGluZUdyYXBoKG9iamVjdCk6CiAgIiIiQ3JlYXRlcyBhIERPVCByZXByZXNlbnRhdGlvbiBvZiB0aGUgcGlwZWxpbmUuIFRocmVhZC1zYWZlLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgcGlwZWxpbmUsCiAgICAgICAgICAgICAgIGRlZmF1bHRfdmVydGV4X2F0dHJzPU5vbmUsCiAgICAgICAgICAgICAgIGRlZmF1bHRfZWRnZV9hdHRycz1Ob25lKToKICAgICIiIkNvbnN0cnVjdG9yIG9mIFBpcGVsaW5lR3JhcGguCgogICAgRXhhbXBsZXM6CiAgICAgIGdyYXBoID0gcGlwZWxpbmVfZ3JhcGguUGlwZWxpbmVHcmFwaChwaXBlbGluZV9wcm90bykKICAgICAgZ3JhcGguZGlzcGxheV9ncmFwaCgpCgogICAgICBvcgoKICAgICAgZ3JhcGggPSBwaXBlbGluZV9ncmFwaC5QaXBlbGluZUdyYXBoKHBpcGVsaW5lKQogICAgICBncmFwaC5kaXNwbGF5X2dyYXBoKCkKCiAgICBBcmdzOgogICAgICBwaXBlbGluZTogKFBpcGVsaW5lIHByb3RvKSBvciAoUGlwZWxpbmUpIHBpcGVsaW5lIHRvIGJlIHJlbmRlcmVkLgogICAgICBkZWZhdWx0X3ZlcnRleF9hdHRyczogKERpY3Rbc3RyLCBzdHJdKSBhIGRpY3Qgb2YgZGVmYXVsdCB2ZXJ0ZXggYXR0cmlidXRlcwogICAgICBkZWZhdWx0X2VkZ2VfYXR0cnM6IChEaWN0W3N0ciwgc3RyXSkgYSBkaWN0IG9mIGRlZmF1bHQgZWRnZSBhdHRyaWJ1dGVzCiAgICAiIiIKICAgIHNlbGYuX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCiAgICBzZWxmLl9ncmFwaCA9IE5vbmUKCiAgICBpZiBpc2luc3RhbmNlKHBpcGVsaW5lLCBiZWFtX3J1bm5lcl9hcGlfcGIyLlBpcGVsaW5lKToKICAgICAgc2VsZi5fcGlwZWxpbmVfcHJvdG8gPSBwaXBlbGluZQogICAgZWxpZiBpc2luc3RhbmNlKHBpcGVsaW5lLCBiZWFtLlBpcGVsaW5lKToKICAgICAgc2VsZi5fcGlwZWxpbmVfcHJvdG8gPSBwaXBlbGluZS50b19ydW5uZXJfYXBpKCkKICAgIGVsc2U6CiAgICAgIHJhaXNlIFR5cGVFcnJvcigncGlwZWxpbmUgc2hvdWxkIGVpdGhlciBiZSBhICVzIG9yICVzLCB3aGlsZSAlcyBpcyBnaXZlbicKICAgICAgICAgICAgICAgICAgICAgICUgKGJlYW1fcnVubmVyX2FwaV9wYjIuUGlwZWxpbmUsIGJlYW0uUGlwZWxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKHBpcGVsaW5lKSkpCgogICAgIyBBIGRpY3QgZnJvbSBQQ29sbGVjdGlvbiBJRCB0byBhIGxpc3Qgb2YgaXRzIGNvbnN1bWluZyBUcmFuc2Zvcm0gSURzCiAgICBzZWxmLl9jb25zdW1lcnMgPSBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdChsaXN0KQogICAgIyBBIGRpY3QgZnJvbSBQQ29sbGVjdGlvbiBJRCB0byBpdHMgcHJvZHVjaW5nIFRyYW5zZm9ybSBJRAogICAgc2VsZi5fcHJvZHVjZXJzID0ge30KCiAgICBmb3IgdHJhbnNmb3JtX2lkLCB0cmFuc2Zvcm1fcHJvdG8gaW4gc2VsZi5fdG9wX2xldmVsX3RyYW5zZm9ybXMoKToKICAgICAgZm9yIHBjb2xsX2lkIGluIHRyYW5zZm9ybV9wcm90by5pbnB1dHMudmFsdWVzKCk6CiAgICAgICAgc2VsZi5fY29uc3VtZXJzW3Bjb2xsX2lkXS5hcHBlbmQodHJhbnNmb3JtX2lkKQogICAgICBmb3IgcGNvbGxfaWQgaW4gdHJhbnNmb3JtX3Byb3RvLm91dHB1dHMudmFsdWVzKCk6CiAgICAgICAgc2VsZi5fcHJvZHVjZXJzW3Bjb2xsX2lkXSA9IHRyYW5zZm9ybV9pZAoKICAgICMgU2V0IHRoZSBkZWZhdWx0IHZlcnRleCBjb2xvciB0byBibHVlLgogICAgZGVmYXVsdF92ZXJ0ZXhfYXR0cnMgPSBkZWZhdWx0X3ZlcnRleF9hdHRycyBvciB7fQogICAgaWYgJ2NvbG9yJyBub3QgaW4gZGVmYXVsdF92ZXJ0ZXhfYXR0cnM6CiAgICAgIGRlZmF1bHRfdmVydGV4X2F0dHJzWydjb2xvciddID0gJ2JsdWUnCiAgICBpZiAnZm9udGNvbG9yJyBub3QgaW4gZGVmYXVsdF92ZXJ0ZXhfYXR0cnM6CiAgICAgIGRlZmF1bHRfdmVydGV4X2F0dHJzWydmb250Y29sb3InXSA9ICdibHVlJwoKICAgIHZlcnRleF9kaWN0LCBlZGdlX2RpY3QgPSBzZWxmLl9nZW5lcmF0ZV9ncmFwaF9kaWN0cygpCiAgICBzZWxmLl9jb25zdHJ1Y3RfZ3JhcGgodmVydGV4X2RpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWRnZV9kaWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfdmVydGV4X2F0dHJzLAogICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfZWRnZV9hdHRycykKCiAgZGVmIGdldF9kb3Qoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fZ2V0X2dyYXBoKCkudG9fc3RyaW5nKCkKCiAgZGVmIF90b3BfbGV2ZWxfdHJhbnNmb3JtcyhzZWxmKToKICAgICIiIllpZWxkcyBhbGwgdG9wIGxldmVsIFBUcmFuc2Zvcm1zIChzdWJ0cmFuc2Zvcm1zIG9mIHRoZSByb290IFBUcmFuc2Zvcm0pLgoKICAgIFlpZWxkczogKHN0ciwgUFRyYW5zZm9ybSBwcm90bykgSUQsIHByb3RvIHBhaXIgb2YgdG9wIGxldmVsIFBUcmFuc2Zvcm1zLgogICAgIiIiCiAgICB0cmFuc2Zvcm1zID0gc2VsZi5fcGlwZWxpbmVfcHJvdG8uY29tcG9uZW50cy50cmFuc2Zvcm1zCiAgICBmb3Igcm9vdF90cmFuc2Zvcm1faWQgaW4gc2VsZi5fcGlwZWxpbmVfcHJvdG8ucm9vdF90cmFuc2Zvcm1faWRzOgogICAgICByb290X3RyYW5zZm9ybV9wcm90byA9IHRyYW5zZm9ybXNbcm9vdF90cmFuc2Zvcm1faWRdCiAgICAgIGZvciB0b3BfbGV2ZWxfdHJhbnNmb3JtX2lkIGluIHJvb3RfdHJhbnNmb3JtX3Byb3RvLnN1YnRyYW5zZm9ybXM6CiAgICAgICAgdG9wX2xldmVsX3RyYW5zZm9ybV9wcm90byA9IHRyYW5zZm9ybXNbdG9wX2xldmVsX3RyYW5zZm9ybV9pZF0KICAgICAgICB5aWVsZCB0b3BfbGV2ZWxfdHJhbnNmb3JtX2lkLCB0b3BfbGV2ZWxfdHJhbnNmb3JtX3Byb3RvCgogIGRlZiBfZ2VuZXJhdGVfZ3JhcGhfZGljdHMoc2VsZik6CiAgICAiIiJGcm9tIHBpcGVsaW5lX3Byb3RvIGFuZCBvdGhlciBpbmZvLCBnZW5lcmF0ZSB0aGUgZ3JhcGguCgogICAgUmV0dXJuczoKICAgICAgdmVydGV4X2RpY3Q6IChEaWN0W3N0ciwgRGljdFtzdHIsIHN0cl1dKSB2ZXJ0ZXggbWFwcGVkIHRvIGF0dHJpYnV0ZXMuCiAgICAgIGVkZ2VfZGljdDogKERpY3RbKHN0ciwgc3RyKSwgRGljdFtzdHIsIHN0cl1dKSB2ZXJ0ZXggcGFpciBtYXBwZWQgdG8gdGhlCiAgICAgICAgICBlZGdlJ3MgYXR0cmlidXRlLgogICAgIiIiCiAgICB0cmFuc2Zvcm1zID0gc2VsZi5fcGlwZWxpbmVfcHJvdG8uY29tcG9uZW50cy50cmFuc2Zvcm1zCgogICAgIyBBIGRpY3QgZnJvbSB2ZXJ0ZXggbmFtZSAoaS5lLiBQQ29sbGVjdGlvbiBJRCkgdG8gaXRzIGF0dHJpYnV0ZXMuCiAgICB2ZXJ0ZXhfZGljdCA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGRpY3QpCiAgICAjIEEgZGljdCBmcm9tIHZlcnRleCBuYW1lIHBhaXJzIGRlZmluaW5nIHRoZSBlZGdlIChpLmUuIGEgcGFpciBvZiBQVHJhbnNmb3JtCiAgICAjIElEcyBkZWZpbmluZyB0aGUgUENvbGxlY3Rpb24pIHRvIGl0cyBhdHRyaWJ1dGVzLgogICAgZWRnZV9kaWN0ID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QoZGljdCkKCiAgICBzZWxmLl9lZGdlX3RvX3ZlcnRleF9wYWlycyA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGxpc3QpCgogICAgZm9yIF8sIHRyYW5zZm9ybSBpbiBzZWxmLl90b3BfbGV2ZWxfdHJhbnNmb3JtcygpOgogICAgICB2ZXJ0ZXhfZGljdFt0cmFuc2Zvcm0udW5pcXVlX25hbWVdID0ge30KCiAgICAgIGZvciBwY29sbF9pZCBpbiB0cmFuc2Zvcm0ub3V0cHV0cy52YWx1ZXMoKToKICAgICAgICAjIEZvciBQQ29sbGVjdGlvbnMgd2l0aG91dCBjb25zdW1pbmcgUFRyYW5zZm9ybXMsIHdlIGFkZCBhbiBpbnZpc2libGUKICAgICAgICAjIFBUcmFuc2Zvcm0gbm9kZSBhcyB0aGUgY29uc3VtZXIuCiAgICAgICAgaWYgcGNvbGxfaWQgbm90IGluIHNlbGYuX2NvbnN1bWVyczoKICAgICAgICAgIGludmlzaWJsZV9sZWFmID0gJ2xlYWYlcycgJSAoaGFzaChwY29sbF9pZCkgJSAxMDAwMCkKICAgICAgICAgIHZlcnRleF9kaWN0W2ludmlzaWJsZV9sZWFmXSA9IHsnc3R5bGUnOiAnaW52aXMnfQogICAgICAgICAgc2VsZi5fZWRnZV90b192ZXJ0ZXhfcGFpcnNbcGNvbGxfaWRdLmFwcGVuZCgKICAgICAgICAgICAgICAodHJhbnNmb3JtLnVuaXF1ZV9uYW1lLCBpbnZpc2libGVfbGVhZikpCiAgICAgICAgICBlZGdlX2RpY3RbKHRyYW5zZm9ybS51bmlxdWVfbmFtZSwgaW52aXNpYmxlX2xlYWYpXSA9IHt9CiAgICAgICAgZWxzZToKICAgICAgICAgIGZvciBjb25zdW1lciBpbiBzZWxmLl9jb25zdW1lcnNbcGNvbGxfaWRdOgogICAgICAgICAgICBwcm9kdWNlcl9uYW1lID0gdHJhbnNmb3JtLnVuaXF1ZV9uYW1lCiAgICAgICAgICAgIGNvbnN1bWVyX25hbWUgPSB0cmFuc2Zvcm1zW2NvbnN1bWVyXS51bmlxdWVfbmFtZQogICAgICAgICAgICBzZWxmLl9lZGdlX3RvX3ZlcnRleF9wYWlyc1twY29sbF9pZF0uYXBwZW5kKAogICAgICAgICAgICAgICAgKHByb2R1Y2VyX25hbWUsIGNvbnN1bWVyX25hbWUpKQogICAgICAgICAgICBlZGdlX2RpY3RbKHByb2R1Y2VyX25hbWUsIGNvbnN1bWVyX25hbWUpXSA9IHt9CgogICAgcmV0dXJuIHZlcnRleF9kaWN0LCBlZGdlX2RpY3QKCiAgZGVmIF9nZXRfZ3JhcGgoc2VsZik6CiAgICAiIiJSZXR1cm5zIHB5ZG90LkRvdCBvYmplY3QgZm9yIHRoZSBwaXBlbGluZSBncmFwaC4KCiAgICBUaGUgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBhdm9pZCBhY2Nlc3NpbmcgdGhlIGdyYXBoIHdoaWxlIGl0IGlzCiAgICB1cGRhdGVkLiBObyBvbmUgZXhjZXB0IGZvciB0aGlzIG1ldGhvZCBzaG91bGQgYmUgYWNjZXNzaW5nIF9ncmFwaCBkaXJlY3RseS4KCiAgICBSZXR1cm5zOgogICAgICAocHlkb3QuRG90KQogICAgIiIiCiAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgIHJldHVybiBzZWxmLl9ncmFwaAoKICBkZWYgX2NvbnN0cnVjdF9ncmFwaChzZWxmLCB2ZXJ0ZXhfZGljdCwgZWRnZV9kaWN0LAogICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfdmVydGV4X2F0dHJzLCBkZWZhdWx0X2VkZ2VfYXR0cnMpOgogICAgIiIiQ29uc3RydWN0cyB0aGUgcHlkb3QuRG90IG9iamVjdCBmb3IgdGhlIHBpcGVsaW5lIGdyYXBoLgoKICAgIEFyZ3M6CiAgICAgIHZlcnRleF9kaWN0OiAoRGljdFtzdHIsIERpY3Rbc3RyLCBzdHJdXSkgbWFwcyB2ZXJ0ZXggbmFtZXMgdG8gYXR0cmlidXRlcwogICAgICBlZGdlX2RpY3Q6IChEaWN0WyhzdHIsIHN0ciksIERpY3Rbc3RyLCBzdHJdXSkgbWFwcyB2ZXJ0ZXggbmFtZSBwYWlycyB0bwogICAgICAgICAgYXR0cmlidXRlcwogICAgICBkZWZhdWx0X3ZlcnRleF9hdHRyczogKERpY3Rbc3RyLCBzdHJdKSBhIGRpY3Qgb2YgYXR0cmlidXRlcwogICAgICBkZWZhdWx0X2VkZ2VfYXR0cnM6IChEaWN0W3N0ciwgc3RyXSkgYSBkaWN0IG9mIGF0dHJpYnV0ZXMKICAgICIiIgogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICBzZWxmLl9ncmFwaCA9IHB5ZG90LkRvdCgpCgogICAgICBpZiBkZWZhdWx0X3ZlcnRleF9hdHRyczoKICAgICAgICBzZWxmLl9ncmFwaC5zZXRfbm9kZV9kZWZhdWx0cygqKmRlZmF1bHRfdmVydGV4X2F0dHJzKQogICAgICBpZiBkZWZhdWx0X2VkZ2VfYXR0cnM6CiAgICAgICAgc2VsZi5fZ3JhcGguc2V0X2VkZ2VfZGVmYXVsdHMoKipkZWZhdWx0X2VkZ2VfYXR0cnMpCgogICAgICBzZWxmLl92ZXJ0ZXhfcmVmcyA9IHt9ICAjIE1hcHMgdmVydGV4IG5hbWUgdG8gcHlkb3QuTm9kZQogICAgICBzZWxmLl9lZGdlX3JlZnMgPSB7fSAgIyBNYXBzIHZlcnRleCBuYW1lIHBhaXJzIHRvIHB5ZG90LkVkZ2UKCiAgICAgIGZvciB2ZXJ0ZXgsIHZlcnRleF9hdHRycyBpbiB2ZXJ0ZXhfZGljdC5pdGVtcygpOgogICAgICAgIHZlcnRleF9yZWYgPSBweWRvdC5Ob2RlKHZlcnRleCwgKip2ZXJ0ZXhfYXR0cnMpCiAgICAgICAgc2VsZi5fdmVydGV4X3JlZnNbdmVydGV4XSA9IHZlcnRleF9yZWYKICAgICAgICBzZWxmLl9ncmFwaC5hZGRfbm9kZSh2ZXJ0ZXhfcmVmKQoKICAgICAgZm9yIGVkZ2UsIGVkZ2VfYXR0cnMgaW4gZWRnZV9kaWN0Lml0ZW1zKCk6CiAgICAgICAgdmVydGV4X3NyYyA9IHNlbGYuX3ZlcnRleF9yZWZzW2VkZ2VbMF1dCiAgICAgICAgdmVydGV4X2RzdCA9IHNlbGYuX3ZlcnRleF9yZWZzW2VkZ2VbMV1dCgogICAgICAgIGVkZ2VfcmVmID0gcHlkb3QuRWRnZSh2ZXJ0ZXhfc3JjLCB2ZXJ0ZXhfZHN0LCAqKmVkZ2VfYXR0cnMpCiAgICAgICAgc2VsZi5fZWRnZV9yZWZzW2VkZ2VdID0gZWRnZV9yZWYKICAgICAgICBzZWxmLl9ncmFwaC5hZGRfZWRnZShlZGdlX3JlZikKCiAgZGVmIF91cGRhdGVfZ3JhcGgoc2VsZiwgdmVydGV4X2RpY3Q9Tm9uZSwgZWRnZV9kaWN0PU5vbmUpOgogICAgIiIiVXBkYXRlcyB0aGUgcHlkb3QuRG90IG9iamVjdCB3aXRoIHRoZSBnaXZlbiBhdHRyaWJ1dGUgdXBkYXRlCgogICAgQXJnczoKICAgICAgdmVydGV4X2RpY3Q6IChEaWN0W3N0ciwgRGljdFtzdHIsIHN0cl1dKSBtYXBzIHZlcnRleCBuYW1lcyB0byBhdHRyaWJ1dGVzCiAgICAgIGVkZ2VfZGljdDogVGhpcyBzaG91bGQgYmUKICAgICAgICAgIEVpdGhlciAoRGljdFtzdHIsIERpY3Rbc3RyLCBzdHJdXSkgd2hpY2ggbWFwcyBlZGdlIG5hbWVzIHRvIGF0dHJpYnV0ZXMKICAgICAgICAgIE9yIChEaWN0WyhzdHIsIHN0ciksIERpY3Rbc3RyLCBzdHJdXSkgd2hpY2ggbWFwcyB2ZXJ0ZXggcGFpcnMgdG8gZWRnZQogICAgICAgICAgYXR0cmlidXRlcwogICAgIiIiCiAgICBkZWYgc2V0X2F0dHJzKHJlZiwgYXR0cnMpOgogICAgICBmb3IgYXR0cl9uYW1lLCBhdHRyX3ZhbCBpbiBhdHRycy5pdGVtcygpOgogICAgICAgIHJlZi5zZXQoYXR0cl9uYW1lLCBhdHRyX3ZhbCkKCiAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgIGlmIHZlcnRleF9kaWN0OgogICAgICAgIGZvciB2ZXJ0ZXgsIHZlcnRleF9hdHRycyBpbiB2ZXJ0ZXhfZGljdC5pdGVtcygpOgogICAgICAgICAgc2V0X2F0dHJzKHNlbGYuX3ZlcnRleF9yZWZzW3ZlcnRleF0sIHZlcnRleF9hdHRycykKICAgICAgaWYgZWRnZV9kaWN0OgogICAgICAgIGZvciBlZGdlLCBlZGdlX2F0dHJzIGluIGVkZ2VfZGljdC5pdGVtcygpOgogICAgICAgICAgaWYgaXNpbnN0YW5jZShlZGdlLCB0dXBsZSk6CiAgICAgICAgICAgIHNldF9hdHRycyhzZWxmLl9lZGdlX3JlZnNbZWRnZV0sIGVkZ2VfYXR0cnMpCiAgICAgICAgICBlbHNlOgogICAgICAgICAgICBmb3IgdmVydGV4X3BhaXIgaW4gc2VsZi5fZWRnZV90b192ZXJ0ZXhfcGFpcnNbZWRnZV06CiAgICAgICAgICAgICAgc2V0X2F0dHJzKHNlbGYuX2VkZ2VfcmVmc1t2ZXJ0ZXhfcGFpcl0sIGVkZ2VfYXR0cnMpCn1yCoIAAChYGwAAAFBpcGVsaW5lR3JhcGguX3VwZGF0ZV9ncmFwaFgDAAAAZGVmS8VL3odYHgAAAFBpcGVsaW5lR3JhcGguX2NvbnN0cnVjdF9ncmFwaFgDAAAAZGVmS6JLxIdYGAAAAFBpcGVsaW5lR3JhcGguX2dldF9ncmFwaFgDAAAAZGVmS5ZLoYdYFgAAAFBpcGVsaW5lR3JhcGguX19pbml0X19YAwAAAGRlZksnS16HWA0AAABQaXBlbGluZUdyYXBoWAUAAABjbGFzc0skS96HWCUAAABQaXBlbGluZUdyYXBoLl91cGRhdGVfZ3JhcGguc2V0X2F0dHJzWAMAAABkZWZLz0vSh1gjAAAAUGlwZWxpbmVHcmFwaC5fZ2VuZXJhdGVfZ3JhcGhfZGljdHNYAwAAAGRlZktuS5WHWCMAAABQaXBlbGluZUdyYXBoLl90b3BfbGV2ZWxfdHJhbnNmb3Jtc1gDAAAAZGVmS2JLbYdYFQAAAFBpcGVsaW5lR3JhcGguZ2V0X2RvdFgDAAAAZGVmS19LYYd1fXILggAAKFgNAAAAUGlwZWxpbmVHcmFwaFg2AAAAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LnBpcGVsaW5lX2dyYXBocgyCAABYFQAAAFBpcGVsaW5lR3JhcGguZ2V0X2RvdGoMggAAdWp9aQAAWDYAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkucGlwZWxpbmVfZ3JhcGhyDYIAAIWBcg6CAAB9cg+CAABidHIQggAAVRhhcGFjaGVfYmVhbS50ZXN0aW5nLnV0aWwoWEYeAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIlV0aWxpdGllcyBmb3IgdGVzdGluZyBCZWFtIHBpcGVsaW5lcy4iIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgY29sbGVjdGlvbnMKaW1wb3J0IGdsb2IKaW1wb3J0IHRlbXBmaWxlCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdAoKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgcHZhbHVlCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgd2luZG93CmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlIGltcG9ydCBDcmVhdGUKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgaW1wb3J0IERvRm4KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgaW1wb3J0IE1hcApmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSBpbXBvcnQgUGFyRG8KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgaW1wb3J0IFdpbmRvd0ludG8KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0gaW1wb3J0IFBUcmFuc2Zvcm0KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwgaW1wb3J0IENvR3JvdXBCeUtleQpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzLmFubm90YXRpb25zIGltcG9ydCBleHBlcmltZW50YWwKCl9fYWxsX18gPSBbCiAgICAnYXNzZXJ0X3RoYXQnLAogICAgJ2VxdWFsX3RvJywKICAgICdpc19lbXB0eScsCiAgICAjIG9wZW5fc2hhcmRzIGlzIGludGVybmFsIGFuZCBoYXMgbm8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KICAgICdvcGVuX3NoYXJkcycsCiAgICAnVGVzdFdpbmRvd2VkVmFsdWUnLAogICAgXQoKCmNsYXNzIEJlYW1Bc3NlcnRFeGNlcHRpb24oRXhjZXB0aW9uKToKICAiIiJFeGNlcHRpb24gcmFpc2VkIGJ5IG1hdGNoZXIgY2xhc3NlcyB1c2VkIGJ5IGFzc2VydF90aGF0IHRyYW5zZm9ybS4iIiIKCiAgcGFzcwoKCiMgVXNlZCBmb3IgcmVpZnlpbmcgdGltZXN0YW1wcyBhbmQgd2luZG93cyBmb3IgYXNzZXJ0X3RoYXQgbWF0Y2hlcnMuClRlc3RXaW5kb3dlZFZhbHVlID0gY29sbGVjdGlvbnMubmFtZWR0dXBsZSgKICAgICdUZXN0V2luZG93ZWRWYWx1ZScsICd2YWx1ZSB0aW1lc3RhbXAgd2luZG93cycpCgoKZGVmIGNvbnRhaW5zX2luX2FueV9vcmRlcihpdGVyYWJsZSk6CiAgIiIiQ3JlYXRlcyBhbiBvYmplY3QgdGhhdCBtYXRjaGVzIGFub3RoZXIgaXRlcmFibGUgaWYgdGhleSBib3RoIGhhdmUgdGhlCiAgc2FtZSBjb3VudCBvZiBpdGVtcy4KCiAgQXJndW1lbnRzOgogICAgaXRlcmFibGU6IEFuIGl0ZXJhYmxlIG9mIGhhc2hhYmxlIG9iamVjdHMuCiAgIiIiCiAgY2xhc3MgSW5BbnlPcmRlcihvYmplY3QpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGl0ZXJhYmxlKToKICAgICAgc2VsZi5fY291bnRlciA9IGNvbGxlY3Rpb25zLkNvdW50ZXIoaXRlcmFibGUpCgogICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICAgIHJldHVybiBzZWxmLl9jb3VudGVyID09IGNvbGxlY3Rpb25zLkNvdW50ZXIob3RoZXIpCgogICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CiAgICAgICMgVE9ETyhCRUFNLTU5NDkpOiBOZWVkZWQgZm9yIFB5dGhvbiAyIGNvbXBhdGliaWxpdHkuCiAgICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgoKICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgICAgcmV0dXJuIGhhc2goc2VsZi5fY291bnRlcikKCiAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgIHJldHVybiAiSW5BbnlPcmRlciglcykiICUgc2VsZi5fY291bnRlcgoKICByZXR1cm4gSW5BbnlPcmRlcihpdGVyYWJsZSkKCgpkZWYgZXF1YWxfdG9fcGVyX3dpbmRvdyhleHBlY3RlZF93aW5kb3dfdG9fZWxlbWVudHMpOgogICIiIk1hdGNoZXIgdXNlZCBieSBhc3NlcnRfdGhhdCB0byBjaGVjayBvbiB2YWx1ZXMgZm9yIHNwZWNpZmljIHdpbmRvd3MuCgogIEFyZ3VtZW50czoKICAgIGV4cGVjdGVkX3dpbmRvd190b19lbGVtZW50czogQSBkaWN0aW9uYXJ5IHdoZXJlIHRoZSBrZXlzIGFyZSB0aGUgd2luZG93cwogICAgICB0byBjaGVjayBhbmQgdGhlIHZhbHVlcyBhcmUgdGhlIGVsZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIHdpbmRvdy4KICAiIiIKICBkZWYgbWF0Y2hlcihlbGVtZW50cyk6CiAgICBhY3R1YWxfZWxlbWVudHNfaW5fd2luZG93LCB3aW5kb3cgPSBlbGVtZW50cwogICAgaWYgd2luZG93IGluIGV4cGVjdGVkX3dpbmRvd190b19lbGVtZW50czoKICAgICAgZXhwZWN0ZWRfZWxlbWVudHNfaW5fd2luZG93ID0gbGlzdCgKICAgICAgICAgIGV4cGVjdGVkX3dpbmRvd190b19lbGVtZW50c1t3aW5kb3ddKQogICAgICBzb3J0ZWRfZXhwZWN0ZWQgPSBzb3J0ZWQoZXhwZWN0ZWRfZWxlbWVudHNfaW5fd2luZG93KQogICAgICBzb3J0ZWRfYWN0dWFsID0gc29ydGVkKGFjdHVhbF9lbGVtZW50c19pbl93aW5kb3cpCiAgICAgIGlmIHNvcnRlZF9leHBlY3RlZCAhPSBzb3J0ZWRfYWN0dWFsOgogICAgICAgICMgUmVzdWx0cyBmb3IgdGhlIHNhbWUgd2luZG93IGRvbid0IG5lY2Vzc2FyaWx5IGNvbWUgYWxsCiAgICAgICAgIyBhdCBvbmNlLiBIZW5jZSB0aGUgc2FtZSBhY3R1YWwgd2luZG93IG1heSBjb250YWluIG9ubHkKICAgICAgICAjIHN1YnNldHMgb2YgdGhlIGV4cGVjdGVkIGVsZW1lbnRzIGZvciB0aGUgd2luZG93LgogICAgICAgICMgRm9yIGV4YW1wbGUsIGluIHRoZSBwcmVzZW5jZSBvZiBlYXJseSB0cmlnZ2Vycy4KICAgICAgICBpZiBhbGwoZWxlbSBpbiBzb3J0ZWRfZXhwZWN0ZWQgZm9yIGVsZW0gaW4gc29ydGVkX2FjdHVhbCkgaXMgRmFsc2U6CiAgICAgICAgICByYWlzZSBCZWFtQXNzZXJ0RXhjZXB0aW9uKAogICAgICAgICAgICAgICdGYWlsZWQgYXNzZXJ0OiAlciBub3QgaW4gJXInICUgKHNvcnRlZF9hY3R1YWwsIHNvcnRlZF9leHBlY3RlZCkpCiAgcmV0dXJuIG1hdGNoZXIKCgojIE5vdGUgdGhhdCBlcXVhbF90byBjaGVja3MgaWYgZXhwZWN0ZWQgYW5kIGFjdHVhbCBhcmUgcGVybXV0YXRpb25zIG9mIGVhY2gKIyBvdGhlci4gSG93ZXZlciwgb25seSBwZXJtdXRhdGlvbnMgb2YgdGhlIHRvcCBsZXZlbCBhcmUgY2hlY2tlZC4gVGhlcmVmb3JlCiMgWzEsMl0gYW5kIFsyLDFdIGFyZSBjb25zaWRlcmVkIGVxdWFsIGFuZCBbWzEsMl1dIGFuZCBbWzIsMV1dIGFyZSBub3QuCmRlZiBlcXVhbF90byhleHBlY3RlZCk6CgogIGRlZiBfZXF1YWwoYWN0dWFsKToKICAgIGV4cGVjdGVkX2xpc3QgPSBsaXN0KGV4cGVjdGVkKQoKICAgICMgVHJ5IHRvIGNvbXBhcmUgYWN0dWFsIGFuZCBleHBlY3RlZCBieSBzb3J0aW5nLiBUaGlzIGZhaWxzIHdpdGggYQogICAgIyBUeXBlRXJyb3IgaW4gUHl0aG9uIDMgaWYgZGlmZmVyZW50IHR5cGVzIGFyZSBwcmVzZW50IGluIHRoZSBzYW1lCiAgICAjIGNvbGxlY3Rpb24uCiAgICB0cnk6CiAgICAgIHNvcnRlZF9leHBlY3RlZCA9IHNvcnRlZChleHBlY3RlZCkKICAgICAgc29ydGVkX2FjdHVhbCA9IHNvcnRlZChhY3R1YWwpCiAgICAgIGlmIHNvcnRlZF9leHBlY3RlZCAhPSBzb3J0ZWRfYWN0dWFsOgogICAgICAgIHJhaXNlIEJlYW1Bc3NlcnRFeGNlcHRpb24oCiAgICAgICAgICAgICdGYWlsZWQgYXNzZXJ0OiAlciA9PSAlcicgJSAoc29ydGVkX2V4cGVjdGVkLCBzb3J0ZWRfYWN0dWFsKSkKICAgICMgRmFsbCBiYWNrIHRvIHNsb3dlciBtZXRob2Qgd2hpY2ggd29ya3MgZm9yIGRpZmZlcmVudCB0eXBlcyBvbiBQeXRob24gMy4KICAgIGV4Y2VwdCBUeXBlRXJyb3I6CiAgICAgIGZvciBlbGVtZW50IGluIGFjdHVhbDoKICAgICAgICB0cnk6CiAgICAgICAgICBleHBlY3RlZF9saXN0LnJlbW92ZShlbGVtZW50KQogICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgcmFpc2UgQmVhbUFzc2VydEV4Y2VwdGlvbigKICAgICAgICAgICAgICAnRmFpbGVkIGFzc2VydDogJXIgPT0gJXInICUgKGV4cGVjdGVkLCBhY3R1YWwpKQogICAgICBpZiBleHBlY3RlZF9saXN0OgogICAgICAgIHJhaXNlIEJlYW1Bc3NlcnRFeGNlcHRpb24oCiAgICAgICAgICAgICdGYWlsZWQgYXNzZXJ0OiAlciA9PSAlcicgJSAoZXhwZWN0ZWQsIGFjdHVhbCkpCgogIHJldHVybiBfZXF1YWwKCgpkZWYgaXNfZW1wdHkoKToKICBkZWYgX2VtcHR5KGFjdHVhbCk6CiAgICBhY3R1YWwgPSBsaXN0KGFjdHVhbCkKICAgIGlmIGFjdHVhbDoKICAgICAgcmFpc2UgQmVhbUFzc2VydEV4Y2VwdGlvbigKICAgICAgICAgICdGYWlsZWQgYXNzZXJ0OiBbXSA9PSAlcicgJSBhY3R1YWwpCiAgcmV0dXJuIF9lbXB0eQoKCmRlZiBhc3NlcnRfdGhhdChhY3R1YWwsIG1hdGNoZXIsIGxhYmVsPSdhc3NlcnRfdGhhdCcsCiAgICAgICAgICAgICAgICByZWlmeV93aW5kb3dzPUZhbHNlLCB1c2VfZ2xvYmFsX3dpbmRvdz1UcnVlKToKICAiIiJBIFBUcmFuc2Zvcm0gdGhhdCBjaGVja3MgYSBQQ29sbGVjdGlvbiBoYXMgYW4gZXhwZWN0ZWQgdmFsdWUuCgogIE5vdGUgdGhhdCBhc3NlcnRfdGhhdCBzaG91bGQgYmUgdXNlZCBvbmx5IGZvciB0ZXN0aW5nIHBpcGVsaW5lcyBzaW5jZSB0aGUKICBjaGVjayByZWxpZXMgb24gbWF0ZXJpYWxpemluZyB0aGUgZW50aXJlIFBDb2xsZWN0aW9uIGJlaW5nIGNoZWNrZWQuCgogIEFyZ3M6CiAgICBhY3R1YWw6IEEgUENvbGxlY3Rpb24uCiAgICBtYXRjaGVyOiBBIG1hdGNoZXIgZnVuY3Rpb24gdGFraW5nIGFzIGFyZ3VtZW50IHRoZSBhY3R1YWwgdmFsdWUgb2YgYQogICAgICBtYXRlcmlhbGl6ZWQgUENvbGxlY3Rpb24uIFRoZSBtYXRjaGVyIHZhbGlkYXRlcyB0aGlzIGFjdHVhbCB2YWx1ZSBhZ2FpbnN0CiAgICAgIGV4cGVjdGF0aW9ucyBhbmQgcmFpc2VzIEJlYW1Bc3NlcnRFeGNlcHRpb24gaWYgdGhleSBhcmUgbm90IG1ldC4KICAgIGxhYmVsOiBPcHRpb25hbCBzdHJpbmcgbGFiZWwuIFRoaXMgaXMgbmVlZGVkIGluIGNhc2Ugc2V2ZXJhbCBhc3NlcnRfdGhhdAogICAgICB0cmFuc2Zvcm1zIGFyZSBpbnRyb2R1Y2VkIGluIHRoZSBzYW1lIHBpcGVsaW5lLgogICAgcmVpZnlfd2luZG93czogSWYgVHJ1ZSwgbWF0Y2hlciBpcyBwYXNzZWQgYSBsaXN0IG9mIFRlc3RXaW5kb3dlZFZhbHVlLgogICAgdXNlX2dsb2JhbF93aW5kb3c6IElmIEZhbHNlLCBtYXRjaGVyIGlzIHBhc3NlZCBhIGRpY3Rpb25hcnkgb2YKICAgICAgKGssIHYpID0gKHdpbmRvdywgZWxlbWVudHMgaW4gdGhlIHdpbmRvdykuCgogIFJldHVybnM6CiAgICBJZ25vcmVkLgogICIiIgogIGFzc2VydCBpc2luc3RhbmNlKGFjdHVhbCwgcHZhbHVlLlBDb2xsZWN0aW9uKQoKICBjbGFzcyBSZWlmeVRpbWVzdGFtcFdpbmRvdyhEb0ZuKToKICAgIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQsIHRpbWVzdGFtcD1Eb0ZuLlRpbWVzdGFtcFBhcmFtLAogICAgICAgICAgICAgICAgd2luZG93PURvRm4uV2luZG93UGFyYW0pOgogICAgICAjIFRoaXMgcmV0dXJucyBUZXN0V2luZG93ZWRWYWx1ZSBpbnN0ZWFkIG9mCiAgICAgICMgYmVhbS51dGlscy53aW5kb3dlZF92YWx1ZS5XaW5kb3dlZFZhbHVlIGJlY2F1c2UgUGFyRG8gd2lsbCBleHRyYWN0CiAgICAgICMgdGhlIHRpbWVzdGFtcCBhbmQgd2luZG93IG91dCBvZiB0aGUgbGF0dGVyLgogICAgICByZXR1cm4gW1Rlc3RXaW5kb3dlZFZhbHVlKGVsZW1lbnQsIHRpbWVzdGFtcCwgW3dpbmRvd10pXQoKICBjbGFzcyBBZGRXaW5kb3coRG9Gbik6CiAgICBkZWYgcHJvY2VzcyhzZWxmLCBlbGVtZW50LCB3aW5kb3c9RG9Gbi5XaW5kb3dQYXJhbSk6CiAgICAgIHlpZWxkIGVsZW1lbnQsIHdpbmRvdwoKICBjbGFzcyBBc3NlcnRUaGF0KFBUcmFuc2Zvcm0pOgoKICAgIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgICBpZiByZWlmeV93aW5kb3dzOgogICAgICAgIHBjb2xsID0gcGNvbGwgfCBQYXJEbyhSZWlmeVRpbWVzdGFtcFdpbmRvdygpKQoKICAgICAga2V5ZWRfc2luZ2xldG9uID0gcGNvbGwucGlwZWxpbmUgfCBDcmVhdGUoWyhOb25lLCBOb25lKV0pCgogICAgICBpZiB1c2VfZ2xvYmFsX3dpbmRvdzoKICAgICAgICBwY29sbCA9IHBjb2xsIHwgV2luZG93SW50byh3aW5kb3cuR2xvYmFsV2luZG93cygpKQoKICAgICAga2V5ZWRfYWN0dWFsID0gcGNvbGwgfCAiVG9Wb2lkS2V5IiA+PiBNYXAobGFtYmRhIHY6IChOb25lLCB2KSkKCiAgICAgIHBsYWluX2FjdHVhbCA9ICgoa2V5ZWRfc2luZ2xldG9uLCBrZXllZF9hY3R1YWwpCiAgICAgICAgICAgICAgICAgICAgICB8ICJHcm91cCIgPj4gQ29Hcm91cEJ5S2V5KCkKICAgICAgICAgICAgICAgICAgICAgIHwgIlVua2V5IiA+PiBNYXAobGFtYmRhIGtfdmFsdWVzOiBrX3ZhbHVlc1sxXVsxXSkpCgogICAgICBpZiBub3QgdXNlX2dsb2JhbF93aW5kb3c6CiAgICAgICAgcGxhaW5fYWN0dWFsID0gcGxhaW5fYWN0dWFsIHwgIkFkZFdpbmRvdyIgPj4gUGFyRG8oQWRkV2luZG93KCkpCgogICAgICBwbGFpbl9hY3R1YWwgPSBwbGFpbl9hY3R1YWwgfCAiTWF0Y2giID4+IE1hcChtYXRjaGVyKQoKICAgIGRlZiBkZWZhdWx0X2xhYmVsKHNlbGYpOgogICAgICByZXR1cm4gbGFiZWwKCiAgYWN0dWFsIHwgQXNzZXJ0VGhhdCgpICAjIHB5bGludDogZGlzYWJsZT1leHByZXNzaW9uLW5vdC1hc3NpZ25lZAoKCkBleHBlcmltZW50YWwoKQpkZWYgb3Blbl9zaGFyZHMoZ2xvYl9wYXR0ZXJuKToKICAiIiJSZXR1cm5zIGEgY29tcG9zaXRlIGZpbGUgb2YgYWxsIHNoYXJkcyBtYXRjaGluZyB0aGUgZ2l2ZW4gZ2xvYiBwYXR0ZXJuLiIiIgogIHdpdGggdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKGRlbGV0ZT1GYWxzZSkgYXMgb3V0X2ZpbGU6CiAgICBmb3Igc2hhcmQgaW4gZ2xvYi5nbG9iKGdsb2JfcGF0dGVybik6CiAgICAgIHdpdGggb3BlbihzaGFyZCwgJ3JiJykgYXMgaW5fZmlsZToKICAgICAgICBvdXRfZmlsZS53cml0ZShpbl9maWxlLnJlYWQoKSkKICAgIGNvbmNhdGVuYXRlZF9maWxlX25hbWUgPSBvdXRfZmlsZS5uYW1lCiAgcmV0dXJuIG9wZW4oY29uY2F0ZW5hdGVkX2ZpbGVfbmFtZSwgJ3JiJykKfXIRggAAKFgpAAAAY29udGFpbnNfaW5fYW55X29yZGVyLkluQW55T3JkZXIuX19pbml0X19YAwAAAGRlZktDS0WHWBMAAABlcXVhbF90b19wZXJfd2luZG93WAMAAABkZWZLVktth1gLAAAAb3Blbl9zaGFyZHNYAwAAAGRlZkvXS+CHWB0AAABhc3NlcnRfdGhhdC5Bc3NlcnRUaGF0LmV4cGFuZFgDAAAAZGVmS71L0IdYCwAAAGFzc2VydF90aGF0WAMAAABkZWZLmEvVh1gIAAAAaXNfZW1wdHlYAwAAAGRlZkuPS5aHWCAAAABjb250YWluc19pbl9hbnlfb3JkZXIuSW5BbnlPcmRlclgFAAAAY2xhc3NLQktSh1gbAAAAZXF1YWxfdG9fcGVyX3dpbmRvdy5tYXRjaGVyWAMAAABkZWZLXUtsh1gnAAAAY29udGFpbnNfaW5fYW55X29yZGVyLkluQW55T3JkZXIuX19uZV9fWAMAAABkZWZLSUtMh1gIAAAAZXF1YWxfdG9YAwAAAGRlZktyS42HWCgAAABhc3NlcnRfdGhhdC5SZWlmeVRpbWVzdGFtcFdpbmRvdy5wcm9jZXNzWAMAAABkZWZLsEu2h1gPAAAAaXNfZW1wdHkuX2VtcHR5WAMAAABkZWZLkEuVh1gkAAAAYXNzZXJ0X3RoYXQuQXNzZXJ0VGhhdC5kZWZhdWx0X2xhYmVsWAMAAABkZWZL0UvTh1gWAAAAYXNzZXJ0X3RoYXQuQXNzZXJ0VGhhdFgFAAAAY2xhc3NLu0vTh1ggAAAAYXNzZXJ0X3RoYXQuUmVpZnlUaW1lc3RhbXBXaW5kb3dYBQAAAGNsYXNzS69LtodYFQAAAGNvbnRhaW5zX2luX2FueV9vcmRlclgDAAAAZGVmSztLVIdYKQAAAGNvbnRhaW5zX2luX2FueV9vcmRlci5JbkFueU9yZGVyLl9faGFzaF9fWAMAAABkZWZLTUtPh1gnAAAAY29udGFpbnNfaW5fYW55X29yZGVyLkluQW55T3JkZXIuX19lcV9fWAMAAABkZWZLRktIh1gpAAAAY29udGFpbnNfaW5fYW55X29yZGVyLkluQW55T3JkZXIuX19yZXByX19YAwAAAGRlZktQS1KHWBMAAABCZWFtQXNzZXJ0RXhjZXB0aW9uWAUAAABjbGFzc0swSzSHWB0AAABhc3NlcnRfdGhhdC5BZGRXaW5kb3cucHJvY2Vzc1gDAAAAZGVmS7hLuodYFQAAAGFzc2VydF90aGF0LkFkZFdpbmRvd1gFAAAAY2xhc3NLt0u6h1gPAAAAZXF1YWxfdG8uX2VxdWFsWAMAAABkZWZLdEuLh3V9chKCAAAoWAsAAABvcGVuX3NoYXJkc2oSYwAAWAsAAABhc3NlcnRfdGhhdGoSYwAAWAgAAABlcXVhbF90b2oSYwAAWAgAAABpc19lbXB0eWoSYwAAdWp9aQAAWBgAAABhcGFjaGVfYmVhbS50ZXN0aW5nLnV0aWxyE4IAAIWBchSCAAB9chWCAABidFUVYXBhY2hlX2JlYW0uaW8uYXZyb2lvKFhOVAAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCiIiImBgUFRyYW5zZm9ybXNgYCBmb3IgcmVhZGluZyBmcm9tIGFuZCB3cml0aW5nIHRvIEF2cm8gZmlsZXMuCgpQcm92aWRlcyB0d28gcmVhZCBgYFBUcmFuc2Zvcm1gYHMsIGBgUmVhZEZyb21BdnJvYGAgYW5kIGBgUmVhZEFsbEZyb21BdnJvYGAsCnRoYXQgcHJvZHVjZXMgYSBgYFBDb2xsZWN0aW9uYGAgb2YgcmVjb3Jkcy4KRWFjaCByZWNvcmQgb2YgdGhpcyBgYFBDb2xsZWN0aW9uYGAgd2lsbCBjb250YWluIGEgc2luZ2xlIHJlY29yZCByZWFkIGZyb20KYW4gQXZybyBmaWxlLiBSZWNvcmRzIHRoYXQgYXJlIG9mIHNpbXBsZSB0eXBlcyB3aWxsIGJlIG1hcHBlZCBpbnRvCmNvcnJlc3BvbmRpbmcgUHl0aG9uIHR5cGVzLiBSZWNvcmRzIHRoYXQgYXJlIG9mIEF2cm8gdHlwZSAnUkVDT1JEJyB3aWxsIGJlCm1hcHBlZCB0byBQeXRob24gZGljdGlvbmFyaWVzIHRoYXQgY29tcGx5IHdpdGggdGhlIHNjaGVtYSBjb250YWluZWQgaW4gdGhlCkF2cm8gZmlsZSB0aGF0IGNvbnRhaW5zIHRob3NlIHJlY29yZHMuIEluIHRoaXMgY2FzZSwga2V5cyBvZiBlYWNoIGRpY3Rpb25hcnkKd2lsbCBjb250YWluIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkIG5hbWVzIGFuZCB3aWxsIGJlIG9mIHR5cGUgYGBzdHJpbmdgYAp3aGlsZSB0aGUgdmFsdWVzIG9mIHRoZSBkaWN0aW9uYXJ5IHdpbGwgYmUgb2YgdGhlIHR5cGUgZGVmaW5lZCBpbiB0aGUKY29ycmVzcG9uZGluZyBBdnJvIHNjaGVtYS4KCkZvciBleGFtcGxlLCBpZiBzY2hlbWEgb2YgdGhlIEF2cm8gZmlsZSBpcyB0aGUgZm9sbG93aW5nLgp7Im5hbWVzcGFjZSI6ICJleGFtcGxlLmF2cm8iLCJ0eXBlIjogInJlY29yZCIsIm5hbWUiOiAiVXNlciIsImZpZWxkcyI6Clt7Im5hbWUiOiAibmFtZSIsICJ0eXBlIjogInN0cmluZyJ9LAp7Im5hbWUiOiAiZmF2b3JpdGVfbnVtYmVyIiwgICJ0eXBlIjogWyJpbnQiLCAibnVsbCJdfSwKeyJuYW1lIjogImZhdm9yaXRlX2NvbG9yIiwgInR5cGUiOiBbInN0cmluZyIsICJudWxsIl19XX0KClRoZW4gcmVjb3JkcyBnZW5lcmF0ZWQgYnkgcmVhZCB0cmFuc2Zvcm1zIHdpbGwgYmUgZGljdGlvbmFyaWVzIG9mIHRoZQpmb2xsb3dpbmcgZm9ybS4Ke3UnbmFtZSc6IHUnQWx5c3NhJywgdSdmYXZvcml0ZV9udW1iZXInOiAyNTYsIHUnZmF2b3JpdGVfY29sb3InOiBOb25lfSkuCgpBZGRpdGlvbmFsbHksIHRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgd3JpdGUgYGBQVHJhbnNmb3JtYGAgYGBXcml0ZVRvQXZyb2BgCnRoYXQgY2FuIGJlIHVzZWQgdG8gd3JpdGUgYSBnaXZlbiBgYFBDb2xsZWN0aW9uYGAgb2YgUHl0aG9uIG9iamVjdHMgdG8gYW4KQXZybyBmaWxlLgoiIiIKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBpbwppbXBvcnQgb3MKaW1wb3J0IHpsaWIKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0CmZyb20gZnVuY3Rvb2xzIGltcG9ydCBwYXJ0aWFsCgppbXBvcnQgYXZybwpmcm9tIGF2cm8gaW1wb3J0IGlvIGFzIGF2cm9pbwpmcm9tIGF2cm8gaW1wb3J0IGRhdGFmaWxlCmZyb20gZmFzdGF2cm8ucmVhZCBpbXBvcnQgYmxvY2tfcmVhZGVyCmZyb20gZmFzdGF2cm8ud3JpdGUgaW1wb3J0IFdyaXRlcgoKaW1wb3J0IGFwYWNoZV9iZWFtIGFzIGJlYW0KZnJvbSBhcGFjaGVfYmVhbS5pbyBpbXBvcnQgZmlsZWJhc2Vkc2luawpmcm9tIGFwYWNoZV9iZWFtLmlvIGltcG9ydCBmaWxlYmFzZWRzb3VyY2UKZnJvbSBhcGFjaGVfYmVhbS5pbyBpbXBvcnQgaW9iYXNlCmZyb20gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbSBpbXBvcnQgQ29tcHJlc3Npb25UeXBlcwpmcm9tIGFwYWNoZV9iZWFtLmlvLmlvYmFzZSBpbXBvcnQgUmVhZApmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IFBUcmFuc2Zvcm0KCiMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uLCB1bmdyb3VwZWQtaW1wb3J0cwp0cnk6CiAgZnJvbSBhdnJvLnNjaGVtYSBpbXBvcnQgUGFyc2UgIyBhdnJvLXB5dGhvbjMgbGlicmFyeSBmb3IgcHl0aG9uMwpleGNlcHQgSW1wb3J0RXJyb3I6CiAgZnJvbSBhdnJvLnNjaGVtYSBpbXBvcnQgcGFyc2UgYXMgUGFyc2UgIyBhdnJvIGxpYnJhcnkgZm9yIHB5dGhvbjIKIyBweWxpbnQ6IGVuYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbiwgdW5ncm91cGVkLWltcG9ydHMKCl9fYWxsX18gPSBbJ1JlYWRGcm9tQXZybycsICdSZWFkQWxsRnJvbUF2cm8nLCAnV3JpdGVUb0F2cm8nXQoKCmNsYXNzIFJlYWRGcm9tQXZybyhQVHJhbnNmb3JtKToKICAiIiJBIDpjbGFzczpgfmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtYCBmb3IgcmVhZGluZyBhdnJvCiAgZmlsZXMuIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlX3BhdHRlcm49Tm9uZSwgbWluX2J1bmRsZV9zaXplPTAsIHZhbGlkYXRlPVRydWUsCiAgICAgICAgICAgICAgIHVzZV9mYXN0YXZybz1GYWxzZSk6CiAgICAiIiJJbml0aWFsaXplcyA6Y2xhc3M6YFJlYWRGcm9tQXZyb2AuCgogICAgVXNlcyBzb3VyY2UgOmNsYXNzOmB+YXBhY2hlX2JlYW0uaW8uX0F2cm9Tb3VyY2VgIHRvIHJlYWQgYSBzZXQgb2YgQXZybwogICAgZmlsZXMgZGVmaW5lZCBieSBhIGdpdmVuIGZpbGUgcGF0dGVybi4KCiAgICBJZiBgYC9teXBhdGgvbXlhdnJvZmlsZXMqYGAgaXMgYSBmaWxlLXBhdHRlcm4gdGhhdCBwb2ludHMgdG8gYSBzZXQgb2YgQXZybwogICAgZmlsZXMsIGEgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uYCBmb3IgdGhlIHJlY29yZHMgaW4KICAgIHRoZXNlIEF2cm8gZmlsZXMgY2FuIGJlIGNyZWF0ZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuCgogICAgLi4gdGVzdGNvZGU6OgoKICAgICAgd2l0aCBiZWFtLlBpcGVsaW5lKCkgYXMgcDoKICAgICAgICByZWNvcmRzID0gcCB8ICdSZWFkJyA+PiBiZWFtLmlvLlJlYWRGcm9tQXZybygnL215cGF0aC9teWF2cm9maWxlcyonKQoKICAgIC4uIE5PVEU6IFdlJ3JlIG5vdCBhY3R1YWxseSBpbnRlcmVzdGVkIGluIHRoaXMgZXJyb3I7IGJ1dCBpZiB3ZSBnZXQgaGVyZSwKICAgICAgIGl0IG1lYW5zIHRoYXQgdGhlIHdheSBvZiBjYWxsaW5nIHRoaXMgdHJhbnNmb3JtIGhhc24ndCBjaGFuZ2VkLgoKICAgIC4uIHRlc3RvdXRwdXQ6OgogICAgICA6aGlkZToKCiAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgICAgIC4uLgogICAgICBJT0Vycm9yOiBObyBmaWxlcyBmb3VuZCBiYXNlZCBvbiB0aGUgZmlsZSBwYXR0ZXJuCgogICAgRWFjaCByZWNvcmQgb2YgdGhpcyA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb25gIHdpbGwgY29udGFpbgogICAgYSBzaW5nbGUgcmVjb3JkIHJlYWQgZnJvbSBhIHNvdXJjZS4gUmVjb3JkcyB0aGF0IGFyZSBvZiBzaW1wbGUgdHlwZXMgd2lsbCBiZQogICAgbWFwcGVkIGludG8gY29ycmVzcG9uZGluZyBQeXRob24gdHlwZXMuIFJlY29yZHMgdGhhdCBhcmUgb2YgQXZybyB0eXBlCiAgICBgYFJFQ09SRGBgIHdpbGwgYmUgbWFwcGVkIHRvIFB5dGhvbiBkaWN0aW9uYXJpZXMgdGhhdCBjb21wbHkgd2l0aCB0aGUgc2NoZW1hCiAgICBjb250YWluZWQgaW4gdGhlIEF2cm8gZmlsZSB0aGF0IGNvbnRhaW5zIHRob3NlIHJlY29yZHMuIEluIHRoaXMgY2FzZSwga2V5cwogICAgb2YgZWFjaCBkaWN0aW9uYXJ5IHdpbGwgY29udGFpbiB0aGUgY29ycmVzcG9uZGluZyBmaWVsZCBuYW1lcyBhbmQgd2lsbCBiZSBvZgogICAgdHlwZSA6Y2xhc3M6YHN0cmAgd2hpbGUgdGhlIHZhbHVlcyBvZiB0aGUgZGljdGlvbmFyeSB3aWxsIGJlIG9mIHRoZSB0eXBlCiAgICBkZWZpbmVkIGluIHRoZSBjb3JyZXNwb25kaW5nIEF2cm8gc2NoZW1hLgoKICAgIEZvciBleGFtcGxlLCBpZiBzY2hlbWEgb2YgdGhlIEF2cm8gZmlsZSBpcyB0aGUgZm9sbG93aW5nLiA6OgoKICAgICAgewogICAgICAgICJuYW1lc3BhY2UiOiAiZXhhbXBsZS5hdnJvIiwKICAgICAgICAidHlwZSI6ICJyZWNvcmQiLAogICAgICAgICJuYW1lIjogIlVzZXIiLAogICAgICAgICJmaWVsZHMiOiBbCgogICAgICAgICAgeyJuYW1lIjogIm5hbWUiLAogICAgICAgICAgICJ0eXBlIjogInN0cmluZyJ9LAoKICAgICAgICAgIHsibmFtZSI6ICJmYXZvcml0ZV9udW1iZXIiLAogICAgICAgICAgICJ0eXBlIjogWyJpbnQiLCAibnVsbCJdfSwKCiAgICAgICAgICB7Im5hbWUiOiAiZmF2b3JpdGVfY29sb3IiLAogICAgICAgICAgICJ0eXBlIjogWyJzdHJpbmciLCAibnVsbCJdfQoKICAgICAgICBdCiAgICAgIH0KCiAgICBUaGVuIHJlY29yZHMgZ2VuZXJhdGVkIGJ5IDpjbGFzczpgfmFwYWNoZV9iZWFtLmlvLl9BdnJvU291cmNlYCB3aWxsIGJlCiAgICBkaWN0aW9uYXJpZXMgb2YgdGhlIGZvbGxvd2luZyBmb3JtLiA6OgoKICAgICAge3UnbmFtZSc6IHUnQWx5c3NhJywgdSdmYXZvcml0ZV9udW1iZXInOiAyNTYsIHUnZmF2b3JpdGVfY29sb3InOiBOb25lfSkuCgogICAgQXJnczoKICAgICAgZmlsZV9wYXR0ZXJuIChzdHIpOiB0aGUgZmlsZSBnbG9iIHRvIHJlYWQKICAgICAgbWluX2J1bmRsZV9zaXplIChpbnQpOiB0aGUgbWluaW11bSBzaXplIGluIGJ5dGVzLCB0byBiZSBjb25zaWRlcmVkIHdoZW4KICAgICAgICBzcGxpdHRpbmcgdGhlIGlucHV0IGludG8gYnVuZGxlcy4KICAgICAgdmFsaWRhdGUgKGJvb2wpOiBmbGFnIHRvIHZlcmlmeSB0aGF0IHRoZSBmaWxlcyBleGlzdCBkdXJpbmcgdGhlIHBpcGVsaW5lCiAgICAgICAgY3JlYXRpb24gdGltZS4KICAgICAgdXNlX2Zhc3RhdnJvIChib29sKTsgd2hlbiBzZXQsIHVzZSB0aGUgYGZhc3RhdnJvYCBsaWJyYXJ5IGZvciBJTywgd2hpY2gKICAgICAgICBpcyBzaWduaWZpY2FudGx5IGZhc3RlciwgYW5kIHdpbGwgbGlrZWx5IGJlY29tZSB0aGUgZGVmYXVsdAogICAgIiIiCiAgICBzdXBlcihSZWFkRnJvbUF2cm8sIHNlbGYpLl9faW5pdF9fKCkKICAgIHNlbGYuX3NvdXJjZSA9IF9jcmVhdGVfYXZyb19zb3VyY2UoCiAgICAgICAgZmlsZV9wYXR0ZXJuLAogICAgICAgIG1pbl9idW5kbGVfc2l6ZSwKICAgICAgICB2YWxpZGF0ZT12YWxpZGF0ZSwKICAgICAgICB1c2VfZmFzdGF2cm89dXNlX2Zhc3RhdnJvCiAgICApCgogIGRlZiBleHBhbmQoc2VsZiwgcHZhbHVlKToKICAgIHJldHVybiBwdmFsdWUucGlwZWxpbmUgfCBSZWFkKHNlbGYuX3NvdXJjZSkKCiAgZGVmIGRpc3BsYXlfZGF0YShzZWxmKToKICAgIHJldHVybiB7J3NvdXJjZV9kZCc6IHNlbGYuX3NvdXJjZX0KCgpjbGFzcyBSZWFkQWxsRnJvbUF2cm8oUFRyYW5zZm9ybSk6CiAgIiIiQSBgYFBUcmFuc2Zvcm1gYCBmb3IgcmVhZGluZyBgYFBDb2xsZWN0aW9uYGAgb2YgQXZybyBmaWxlcy4KCiAgIFVzZXMgc291cmNlICdfQXZyb1NvdXJjZScgdG8gcmVhZCBhIGBgUENvbGxlY3Rpb25gYCBvZiBBdnJvIGZpbGVzIG9yCiAgIGZpbGUgcGF0dGVybnMgYW5kIHByb2R1Y2UgYSBgYFBDb2xsZWN0aW9uYGAgb2YgQXZybyByZWNvcmRzLgogICIiIgoKICBERUZBVUxUX0RFU0lSRURfQlVORExFX1NJWkUgPSA2NCAqIDEwMjQgKiAxMDI0ICAjIDY0TUIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIG1pbl9idW5kbGVfc2l6ZT0wLAogICAgICAgICAgICAgICBkZXNpcmVkX2J1bmRsZV9zaXplPURFRkFVTFRfREVTSVJFRF9CVU5ETEVfU0laRSwKICAgICAgICAgICAgICAgdXNlX2Zhc3RhdnJvPUZhbHNlLAogICAgICAgICAgICAgICBsYWJlbD0nUmVhZEFsbEZpbGVzJyk6CiAgICAiIiJJbml0aWFsaXplcyBgYFJlYWRBbGxGcm9tQXZyb2BgLgoKICAgIEFyZ3M6CiAgICAgIG1pbl9idW5kbGVfc2l6ZTogdGhlIG1pbmltdW0gc2l6ZSBpbiBieXRlcywgdG8gYmUgY29uc2lkZXJlZCB3aGVuCiAgICAgICAgICAgICAgICAgICAgICAgc3BsaXR0aW5nIHRoZSBpbnB1dCBpbnRvIGJ1bmRsZXMuCiAgICAgIGRlc2lyZWRfYnVuZGxlX3NpemU6IHRoZSBkZXNpcmVkIHNpemUgaW4gYnl0ZXMsIHRvIGJlIGNvbnNpZGVyZWQgd2hlbgogICAgICAgICAgICAgICAgICAgICAgIHNwbGl0dGluZyB0aGUgaW5wdXQgaW50byBidW5kbGVzLgogICAgIiIiCiAgICBzb3VyY2VfZnJvbV9maWxlID0gcGFydGlhbCgKICAgICAgICBfY3JlYXRlX2F2cm9fc291cmNlLAogICAgICAgIG1pbl9idW5kbGVfc2l6ZT1taW5fYnVuZGxlX3NpemUsCiAgICAgICAgdXNlX2Zhc3RhdnJvPXVzZV9mYXN0YXZybwogICAgKQogICAgc2VsZi5fcmVhZF9hbGxfZmlsZXMgPSBmaWxlYmFzZWRzb3VyY2UuUmVhZEFsbEZpbGVzKAogICAgICAgIFRydWUsIENvbXByZXNzaW9uVHlwZXMuQVVUTywgZGVzaXJlZF9idW5kbGVfc2l6ZSwgbWluX2J1bmRsZV9zaXplLAogICAgICAgIHNvdXJjZV9mcm9tX2ZpbGUpCgogICAgc2VsZi5sYWJlbCA9IGxhYmVsCgogIGRlZiBleHBhbmQoc2VsZiwgcHZhbHVlKToKICAgIHJldHVybiBwdmFsdWUgfCBzZWxmLmxhYmVsID4+IHNlbGYuX3JlYWRfYWxsX2ZpbGVzCgoKY2xhc3MgX0F2cm9VdGlscyhvYmplY3QpOgoKICBAc3RhdGljbWV0aG9kCiAgZGVmIHJlYWRfbWV0YV9kYXRhX2Zyb21fZmlsZShmKToKICAgICIiIlJlYWRzIG1ldGFkYXRhIGZyb20gYSBnaXZlbiBBdnJvIGZpbGUuCgogICAgQXJnczoKICAgICAgZjogQXZybyBmaWxlIHRvIHJlYWQuCiAgICBSZXR1cm5zOgogICAgICBhIHR1cGxlIGNvbnRhaW5pbmcgdGhlIGNvZGVjLCBzY2hlbWEsIGFuZCB0aGUgc3luYyBtYXJrZXIgb2YgdGhlIEF2cm8KICAgICAgZmlsZS4KCiAgICBSYWlzZXM6CiAgICAgIFZhbHVlRXJyb3I6IGlmIHRoZSBmaWxlIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGJ5dGUgc2VxdWVuY2UgZGVmaW5lZCBpbgogICAgICAgICAgICAgICAgICB0aGUgc3BlY2lmaWNhdGlvbi4KICAgICIiIgogICAgaWYgZi50ZWxsKCkgPiAwOgogICAgICBmLnNlZWsoMCkKICAgIGRlY29kZXIgPSBhdnJvaW8uQmluYXJ5RGVjb2RlcihmKQogICAgaGVhZGVyID0gYXZyb2lvLkRhdHVtUmVhZGVyKCkucmVhZF9kYXRhKGRhdGFmaWxlLk1FVEFfU0NIRU1BLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFmaWxlLk1FVEFfU0NIRU1BLCBkZWNvZGVyKQogICAgaWYgaGVhZGVyLmdldCgnbWFnaWMnKSAhPSBkYXRhZmlsZS5NQUdJQzoKICAgICAgcmFpc2UgVmFsdWVFcnJvcignTm90IGFuIEF2cm8gZmlsZS4gRmlsZSBoZWFkZXIgc2hvdWxkIHN0YXJ0IHdpdGggJXMgYnV0JwogICAgICAgICAgICAgICAgICAgICAgICdzdGFydGVkIHdpdGggJXMgaW5zdGVhZC4nCiAgICAgICAgICAgICAgICAgICAgICAgJSAoZGF0YWZpbGUuTUFHSUMsIGhlYWRlci5nZXQoJ21hZ2ljJykpKQoKICAgIG1ldGEgPSBoZWFkZXJbJ21ldGEnXQoKICAgIGlmIGRhdGFmaWxlLkNPREVDX0tFWSBpbiBtZXRhOgogICAgICBjb2RlYyA9IG1ldGFbZGF0YWZpbGUuQ09ERUNfS0VZXQogICAgZWxzZToKICAgICAgY29kZWMgPSAnbnVsbCcKCiAgICBzY2hlbWFfc3RyaW5nID0gbWV0YVtkYXRhZmlsZS5TQ0hFTUFfS0VZXQogICAgc3luY19tYXJrZXIgPSBoZWFkZXJbJ3N5bmMnXQoKICAgIHJldHVybiBjb2RlYywgc2NoZW1hX3N0cmluZywgc3luY19tYXJrZXIKCiAgQHN0YXRpY21ldGhvZAogIGRlZiByZWFkX2Jsb2NrX2Zyb21fZmlsZShmLCBjb2RlYywgc2NoZW1hLCBleHBlY3RlZF9zeW5jX21hcmtlcik6CiAgICAiIiJSZWFkcyBhIGJsb2NrIGZyb20gYSBnaXZlbiBBdnJvIGZpbGUuCgogICAgQXJnczoKICAgICAgZjogQXZybyBmaWxlIHRvIHJlYWQuCiAgICAgIGNvZGVjOiBUaGUgY29kZWMgdG8gdXNlIGZvciBibG9jay1sZXZlbCBkZWNvbXByZXNzaW9uLgogICAgICAgIFN1cHBvcnRlZCBjb2RlY3M6ICdudWxsJywgJ2RlZmxhdGUnLCAnc25hcHB5JwogICAgICBzY2hlbWE6IEF2cm8gU2NoZW1hIGRlZmluaXRpb24gcmVwcmVzZW50ZWQgYXMgSlNPTiBzdHJpbmcuCiAgICAgIGV4cGVjdGVkX3N5bmNfbWFya2VyOiBBdnJvIHN5bmNocm9uaXphdGlvbiBtYXJrZXIuIElmIHRoZSBibG9jaydzIHN5bmMKICAgICAgICBtYXJrZXIgZG9lcyBub3QgbWF0Y2ggd2l0aCB0aGlzIHBhcmFtZXRlciB0aGVuIFZhbHVlRXJyb3IgaXMgdGhyb3duLgogICAgUmV0dXJuczoKICAgICAgQSBzaW5nbGUgX0F2cm9CbG9jay4KCiAgICBSYWlzZXM6CiAgICAgIFZhbHVlRXJyb3I6IElmIHRoZSBibG9jayBjYW5ub3QgYmUgcmVhZCBwcm9wZXJseSBiZWNhdXNlIHRoZSBmaWxlIGRvZXNuJ3QKICAgICAgICBtYXRjaCB0aGUgc3BlY2lmaWNhdGlvbi4KICAgICIiIgogICAgb2Zmc2V0ID0gZi50ZWxsKCkKICAgIGRlY29kZXIgPSBhdnJvaW8uQmluYXJ5RGVjb2RlcihmKQogICAgbnVtX3JlY29yZHMgPSBkZWNvZGVyLnJlYWRfbG9uZygpCiAgICBibG9ja19zaXplID0gZGVjb2Rlci5yZWFkX2xvbmcoKQogICAgYmxvY2tfYnl0ZXMgPSBkZWNvZGVyLnJlYWQoYmxvY2tfc2l6ZSkKICAgIHN5bmNfbWFya2VyID0gZGVjb2Rlci5yZWFkKGxlbihleHBlY3RlZF9zeW5jX21hcmtlcikpCiAgICBpZiBzeW5jX21hcmtlciAhPSBleHBlY3RlZF9zeW5jX21hcmtlcjoKICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5leHBlY3RlZCBzeW5jIG1hcmtlciAoYWN0dWFsICIlcyIgdnMgZXhwZWN0ZWQgIiVzIikuICcKICAgICAgICAgICAgICAgICAgICAgICAnTWF5YmUgdGhlIHVuZGVybHlpbmcgYXZybyBmaWxlIGlzIGNvcnJ1cHRlZD8nCiAgICAgICAgICAgICAgICAgICAgICAgJSAoc3luY19tYXJrZXIsIGV4cGVjdGVkX3N5bmNfbWFya2VyKSkKICAgIHNpemUgPSBmLnRlbGwoKSAtIG9mZnNldAogICAgcmV0dXJuIF9BdnJvQmxvY2soYmxvY2tfYnl0ZXMsIG51bV9yZWNvcmRzLCBjb2RlYywgc2NoZW1hLCBvZmZzZXQsIHNpemUpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgYWR2YW5jZV9maWxlX3Bhc3RfbmV4dF9zeW5jX21hcmtlcihmLCBzeW5jX21hcmtlcik6CiAgICBidWZfc2l6ZSA9IDEwMDAwCgogICAgZGF0YSA9IGYucmVhZChidWZfc2l6ZSkKICAgIHdoaWxlIGRhdGE6CiAgICAgIHBvcyA9IGRhdGEuZmluZChzeW5jX21hcmtlcikKICAgICAgaWYgcG9zID49IDA6CiAgICAgICAgIyBBZGp1c3RpbmcgdGhlIGN1cnJlbnQgcG9zaXRpb24gdG8gdGhlIGVuZGluZyBwb3NpdGlvbiBvZiB0aGUgc3luYwogICAgICAgICMgbWFya2VyLgogICAgICAgIGJhY2t0cmFjayA9IGxlbihkYXRhKSAtIHBvcyAtIGxlbihzeW5jX21hcmtlcikKICAgICAgICBmLnNlZWsoLTEgKiBiYWNrdHJhY2ssIG9zLlNFRUtfQ1VSKQogICAgICAgIHJldHVybiBUcnVlCiAgICAgIGVsc2U6CiAgICAgICAgaWYgZi50ZWxsKCkgPj0gbGVuKHN5bmNfbWFya2VyKToKICAgICAgICAgICMgQmFja3RyYWNraW5nIGluIGNhc2Ugd2UgcGFydGlhbGx5IHJlYWQgdGhlIHN5bmMgbWFya2VyIGR1cmluZyB0aGUKICAgICAgICAgICMgcHJldmlvdXMgcmVhZC4gV2Ugb25seSBoYXZlIHRvIGJhY2t0cmFjayBpZiB0aGVyZSBhcmUgYXQgbGVhc3QKICAgICAgICAgICMgbGVuKHN5bmNfbWFya2VyKSBieXRlcyBiZWZvcmUgY3VycmVudCBwb3NpdGlvbi4gV2Ugb25seSBoYXZlIHRvCiAgICAgICAgICAjIGJhY2t0cmFjayAobGVuKHN5bmNfbWFya2VyKSAtIDEpIGJ5dGVzLgogICAgICAgICAgZi5zZWVrKC0xICogKGxlbihzeW5jX21hcmtlcikgLSAxKSwgb3MuU0VFS19DVVIpCiAgICAgICAgZGF0YSA9IGYucmVhZChidWZfc2l6ZSkKCgpkZWYgX2NyZWF0ZV9hdnJvX3NvdXJjZShmaWxlX3BhdHRlcm49Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgbWluX2J1bmRsZV9zaXplPU5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlPUZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICB1c2VfZmFzdGF2cm89RmFsc2UpOgogIHJldHVybiBcCiAgICAgIF9GYXN0QXZyb1NvdXJjZSgKICAgICAgICAgIGZpbGVfcGF0dGVybj1maWxlX3BhdHRlcm4sCiAgICAgICAgICBtaW5fYnVuZGxlX3NpemU9bWluX2J1bmRsZV9zaXplLAogICAgICAgICAgdmFsaWRhdGU9dmFsaWRhdGUKICAgICAgKSBcCiAgICAgIGlmIHVzZV9mYXN0YXZybyBcCiAgICAgIGVsc2UgXAogICAgICBfQXZyb1NvdXJjZSgKICAgICAgICAgIGZpbGVfcGF0dGVybj1maWxlX3BhdHRlcm4sCiAgICAgICAgICBtaW5fYnVuZGxlX3NpemU9bWluX2J1bmRsZV9zaXplLAogICAgICAgICAgdmFsaWRhdGU9dmFsaWRhdGUKICAgICAgKQoKCmNsYXNzIF9BdnJvQmxvY2sob2JqZWN0KToKICAiIiJSZXByZXNlbnRzIGEgYmxvY2sgb2YgYW4gQXZybyBmaWxlLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgYmxvY2tfYnl0ZXMsIG51bV9yZWNvcmRzLCBjb2RlYywgc2NoZW1hX3N0cmluZywKICAgICAgICAgICAgICAgb2Zmc2V0LCBzaXplKToKICAgICMgRGVjb21wcmVzcyBkYXRhIGVhcmx5IG9uIChpZiBuZWVkZWQpIGFuZCB0aHVzIGRlY3JlYXNlIHRoZSBudW1iZXIgb2YKICAgICMgcGFyYWxsZWwgY29waWVzIG9mIHRoZSBkYXRhIGluIG1lbW9yeSBhdCBhbnkgZ2l2ZW4gdGltZSBkdXJpbmcgYmxvY2sKICAgICMgaXRlcmF0aW9uLgogICAgc2VsZi5fZGVjb21wcmVzc2VkX2Jsb2NrX2J5dGVzID0gc2VsZi5fZGVjb21wcmVzc19ieXRlcyhibG9ja19ieXRlcywgY29kZWMpCiAgICBzZWxmLl9udW1fcmVjb3JkcyA9IG51bV9yZWNvcmRzCiAgICBzZWxmLl9zY2hlbWEgPSBQYXJzZShzY2hlbWFfc3RyaW5nKQogICAgc2VsZi5fb2Zmc2V0ID0gb2Zmc2V0CiAgICBzZWxmLl9zaXplID0gc2l6ZQoKICBkZWYgc2l6ZShzZWxmKToKICAgIHJldHVybiBzZWxmLl9zaXplCgogIGRlZiBvZmZzZXQoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fb2Zmc2V0CgogIEBzdGF0aWNtZXRob2QKICBkZWYgX2RlY29tcHJlc3NfYnl0ZXMoZGF0YSwgY29kZWMpOgogICAgaWYgY29kZWMgPT0gYidudWxsJzoKICAgICAgcmV0dXJuIGRhdGEKICAgIGVsaWYgY29kZWMgPT0gYidkZWZsYXRlJzoKICAgICAgIyB6bGliLk1BWF9XQklUUyBpcyB0aGUgd2luZG93IHNpemUuICctJyBzaWduIGluZGljYXRlcyB0aGF0IHRoaXMgaXMKICAgICAgIyByYXcgZGF0YSAod2l0aG91dCBoZWFkZXJzKS4gU2VlIHpsaWIgYW5kIEF2cm8gZG9jdW1lbnRhdGlvbnMgZm9yIG1vcmUKICAgICAgIyBkZXRhaWxzLgogICAgICByZXR1cm4gemxpYi5kZWNvbXByZXNzKGRhdGEsIC16bGliLk1BWF9XQklUUykKICAgIGVsaWYgY29kZWMgPT0gYidzbmFwcHknOgogICAgICAjIFNuYXBweSBpcyBhbiBvcHRpb25hbCBhdnJvIGNvZGVjLgogICAgICAjIFNlZSBTbmFwcHkgYW5kIEF2cm8gZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBkZXRhaWxzLgogICAgICB0cnk6CiAgICAgICAgaW1wb3J0IHNuYXBweQogICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigncHl0aG9uLXNuYXBweSBkb2VzIG5vdCBzZWVtIHRvIGJlIGluc3RhbGxlZC4nKQoKICAgICAgIyBDb21wcmVzc2VkIGRhdGEgaW5jbHVkZXMgYSA0LWJ5dGUgQ1JDMzIgY2hlY2tzdW0gd2hpY2ggd2UgdmVyaWZ5LgogICAgICAjIFdlIHRha2UgY2FyZSB0byBhdm9pZCBleHRyYSBjb3BpZXMgb2YgZGF0YSB3aGlsZSBzbGljaW5nIGxhcmdlIG9iamVjdHMKICAgICAgIyBieSB1c2Ugb2YgYSBtZW1vcnl2aWV3LgogICAgICByZXN1bHQgPSBzbmFwcHkuZGVjb21wcmVzcyhtZW1vcnl2aWV3KGRhdGEpWzotNF0pCiAgICAgIGF2cm9pby5CaW5hcnlEZWNvZGVyKGlvLkJ5dGVzSU8oZGF0YVstNDpdKSkuY2hlY2tfY3JjMzIocmVzdWx0KQogICAgICByZXR1cm4gcmVzdWx0CiAgICBlbHNlOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdVbmtub3duIGNvZGVjOiAlcicgJSBjb2RlYykKCiAgZGVmIG51bV9yZWNvcmRzKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX251bV9yZWNvcmRzCgogIGRlZiByZWNvcmRzKHNlbGYpOgogICAgZGVjb2RlciA9IGF2cm9pby5CaW5hcnlEZWNvZGVyKAogICAgICAgIGlvLkJ5dGVzSU8oc2VsZi5fZGVjb21wcmVzc2VkX2Jsb2NrX2J5dGVzKSkKCiAgICB3cml0ZXJfc2NoZW1hID0gc2VsZi5fc2NoZW1hCiAgICByZWFkZXJfc2NoZW1hID0gc2VsZi5fc2NoZW1hCiAgICByZWFkZXIgPSBhdnJvaW8uRGF0dW1SZWFkZXIod3JpdGVyX3NjaGVtYSwgcmVhZGVyX3NjaGVtYSkKCiAgICBjdXJyZW50X3JlY29yZCA9IDAKICAgIHdoaWxlIGN1cnJlbnRfcmVjb3JkIDwgc2VsZi5fbnVtX3JlY29yZHM6CiAgICAgIHlpZWxkIHJlYWRlci5yZWFkKGRlY29kZXIpCiAgICAgIGN1cnJlbnRfcmVjb3JkICs9IDEKCgpjbGFzcyBfQXZyb1NvdXJjZShmaWxlYmFzZWRzb3VyY2UuRmlsZUJhc2VkU291cmNlKToKICAiIiJBIHNvdXJjZSBmb3IgcmVhZGluZyBBdnJvIGZpbGVzLgoKICBgYF9BdnJvU291cmNlYGAgaXMgaW1wbGVtZW50ZWQgdXNpbmcgdGhlIGZpbGUtYmFzZWQgc291cmNlIGZyYW1ld29yayBhdmFpbGFibGUKICBpbiBtb2R1bGUgJ2ZpbGViYXNlZHNvdXJjZScuIEhlbmNlIHBsZWFzZSByZWZlciB0byBtb2R1bGUgJ2ZpbGViYXNlZHNvdXJjZScKICB0byBmdWxseSB1bmRlcnN0YW5kIGhvdyB0aGlzIHNvdXJjZSBpbXBsZW1lbnRzIG9wZXJhdGlvbnMgY29tbW9uIHRvIGFsbAogIGZpbGUtYmFzZWQgc291cmNlcyBzdWNoIGFzIGZpbGUtcGF0dGVybiBleHBhbnNpb24gYW5kIHNwbGl0dGluZyBpbnRvIGJ1bmRsZXMKICBmb3IgcGFyYWxsZWwgcHJvY2Vzc2luZy4KICAiIiIKCiAgZGVmIHJlYWRfcmVjb3JkcyhzZWxmLCBmaWxlX25hbWUsIHJhbmdlX3RyYWNrZXIpOgogICAgbmV4dF9ibG9ja19zdGFydCA9IC0xCgogICAgZGVmIHNwbGl0X3BvaW50c191bmNsYWltZWQoc3RvcF9wb3NpdGlvbik6CiAgICAgIGlmIG5leHRfYmxvY2tfc3RhcnQgPj0gc3RvcF9wb3NpdGlvbjoKICAgICAgICAjIE5leHQgYmxvY2sgc3RhcnRzIGF0IG9yIGFmdGVyIHRoZSBzdWdnZXN0ZWQgc3RvcCBwb3NpdGlvbi4gSGVuY2UKICAgICAgICAjIHRoZXJlIHdpbGwgbm90IGJlIHNwbGl0IHBvaW50cyB0byBiZSBjbGFpbWVkIGZvciB0aGUgcmFuZ2UgZW5kaW5nIGF0CiAgICAgICAgIyBzdWdnZXN0ZWQgc3RvcCBwb3NpdGlvbi4KICAgICAgICByZXR1cm4gMAoKICAgICAgcmV0dXJuIGlvYmFzZS5SYW5nZVRyYWNrZXIuU1BMSVRfUE9JTlRTX1VOS05PV04KCiAgICByYW5nZV90cmFja2VyLnNldF9zcGxpdF9wb2ludHNfdW5jbGFpbWVkX2NhbGxiYWNrKHNwbGl0X3BvaW50c191bmNsYWltZWQpCgogICAgc3RhcnRfb2Zmc2V0ID0gcmFuZ2VfdHJhY2tlci5zdGFydF9wb3NpdGlvbigpCiAgICBpZiBzdGFydF9vZmZzZXQgaXMgTm9uZToKICAgICAgc3RhcnRfb2Zmc2V0ID0gMAoKICAgIHdpdGggc2VsZi5vcGVuX2ZpbGUoZmlsZV9uYW1lKSBhcyBmOgogICAgICBjb2RlYywgc2NoZW1hX3N0cmluZywgc3luY19tYXJrZXIgPSBcCiAgICAgICAgX0F2cm9VdGlscy5yZWFkX21ldGFfZGF0YV9mcm9tX2ZpbGUoZikKCiAgICAgICMgV2UgaGF2ZSB0byBzdGFydCBhdCBjdXJyZW50IHBvc2l0aW9uIGlmIHByZXZpb3VzIGJ1bmRsZSBlbmRlZCBhdCB0aGUKICAgICAgIyBlbmQgb2YgYSBzeW5jIG1hcmtlci4KICAgICAgc3RhcnRfb2Zmc2V0ID0gbWF4KDAsIHN0YXJ0X29mZnNldCAtIGxlbihzeW5jX21hcmtlcikpCiAgICAgIGYuc2VlayhzdGFydF9vZmZzZXQpCiAgICAgIF9BdnJvVXRpbHMuYWR2YW5jZV9maWxlX3Bhc3RfbmV4dF9zeW5jX21hcmtlcihmLCBzeW5jX21hcmtlcikKCiAgICAgIG5leHRfYmxvY2tfc3RhcnQgPSBmLnRlbGwoKQoKICAgICAgd2hpbGUgcmFuZ2VfdHJhY2tlci50cnlfY2xhaW0obmV4dF9ibG9ja19zdGFydCk6CiAgICAgICAgYmxvY2sgPSBfQXZyb1V0aWxzLnJlYWRfYmxvY2tfZnJvbV9maWxlKGYsIGNvZGVjLCBzY2hlbWFfc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jX21hcmtlcikKICAgICAgICBuZXh0X2Jsb2NrX3N0YXJ0ID0gYmxvY2sub2Zmc2V0KCkgKyBibG9jay5zaXplKCkKICAgICAgICBmb3IgcmVjb3JkIGluIGJsb2NrLnJlY29yZHMoKToKICAgICAgICAgIHlpZWxkIHJlY29yZAoKCmNsYXNzIF9GYXN0QXZyb1NvdXJjZShmaWxlYmFzZWRzb3VyY2UuRmlsZUJhc2VkU291cmNlKToKICAiIiJBIHNvdXJjZSBmb3IgcmVhZGluZyBBdnJvIGZpbGVzIHVzaW5nIHRoZSBgZmFzdGF2cm9gIGxpYnJhcnkuCgogIGBgX0Zhc3RBdnJvU291cmNlYGAgaXMgaW1wbGVtZW50ZWQgdXNpbmcgdGhlIGZpbGUtYmFzZWQgc291cmNlIGZyYW1ld29yawogIGF2YWlsYWJsZSBpbiBtb2R1bGUgJ2ZpbGViYXNlZHNvdXJjZScuIEhlbmNlIHBsZWFzZSByZWZlciB0byBtb2R1bGUKICAnZmlsZWJhc2Vkc291cmNlJyB0byBmdWxseSB1bmRlcnN0YW5kIGhvdyB0aGlzIHNvdXJjZSBpbXBsZW1lbnRzIG9wZXJhdGlvbnMKICBjb21tb24gdG8gYWxsIGZpbGUtYmFzZWQgc291cmNlcyBzdWNoIGFzIGZpbGUtcGF0dGVybiBleHBhbnNpb24gYW5kIHNwbGl0dGluZwogIGludG8gYnVuZGxlcyBmb3IgcGFyYWxsZWwgcHJvY2Vzc2luZy4KCiAgVE9ETzogcmVtb3ZlIGBgX0F2cm9Tb3VyY2VgYCBpbiBmYXZvciBvZiB1c2luZyBgYF9GYXN0QXZyb1NvdXJjZWBgCiAgZXZlcnl3aGVyZSBvbmNlIGl0IGhhcyBiZWVuIG1vcmUgd2lkZWx5IHRlc3RlZAogICIiIgoKICBkZWYgcmVhZF9yZWNvcmRzKHNlbGYsIGZpbGVfbmFtZSwgcmFuZ2VfdHJhY2tlcik6CiAgICBuZXh0X2Jsb2NrX3N0YXJ0ID0gLTEKCiAgICBkZWYgc3BsaXRfcG9pbnRzX3VuY2xhaW1lZChzdG9wX3Bvc2l0aW9uKToKICAgICAgaWYgbmV4dF9ibG9ja19zdGFydCA+PSBzdG9wX3Bvc2l0aW9uOgogICAgICAgICMgTmV4dCBibG9jayBzdGFydHMgYXQgb3IgYWZ0ZXIgdGhlIHN1Z2dlc3RlZCBzdG9wIHBvc2l0aW9uLiBIZW5jZQogICAgICAgICMgdGhlcmUgd2lsbCBub3QgYmUgc3BsaXQgcG9pbnRzIHRvIGJlIGNsYWltZWQgZm9yIHRoZSByYW5nZSBlbmRpbmcgYXQKICAgICAgICAjIHN1Z2dlc3RlZCBzdG9wIHBvc2l0aW9uLgogICAgICAgIHJldHVybiAwCgogICAgICByZXR1cm4gaW9iYXNlLlJhbmdlVHJhY2tlci5TUExJVF9QT0lOVFNfVU5LTk9XTgoKICAgIHJhbmdlX3RyYWNrZXIuc2V0X3NwbGl0X3BvaW50c191bmNsYWltZWRfY2FsbGJhY2soc3BsaXRfcG9pbnRzX3VuY2xhaW1lZCkKCiAgICBzdGFydF9vZmZzZXQgPSByYW5nZV90cmFja2VyLnN0YXJ0X3Bvc2l0aW9uKCkKICAgIGlmIHN0YXJ0X29mZnNldCBpcyBOb25lOgogICAgICBzdGFydF9vZmZzZXQgPSAwCgogICAgd2l0aCBzZWxmLm9wZW5fZmlsZShmaWxlX25hbWUpIGFzIGY6CiAgICAgIGJsb2NrcyA9IGJsb2NrX3JlYWRlcihmKQogICAgICBzeW5jX21hcmtlciA9IGJsb2Nrcy5faGVhZGVyWydzeW5jJ10KCiAgICAgICMgV2UgaGF2ZSB0byBzdGFydCBhdCBjdXJyZW50IHBvc2l0aW9uIGlmIHByZXZpb3VzIGJ1bmRsZSBlbmRlZCBhdCB0aGUKICAgICAgIyBlbmQgb2YgYSBzeW5jIG1hcmtlci4KICAgICAgc3RhcnRfb2Zmc2V0ID0gbWF4KDAsIHN0YXJ0X29mZnNldCAtIGxlbihzeW5jX21hcmtlcikpCiAgICAgIGYuc2VlayhzdGFydF9vZmZzZXQpCiAgICAgIF9BdnJvVXRpbHMuYWR2YW5jZV9maWxlX3Bhc3RfbmV4dF9zeW5jX21hcmtlcihmLCBzeW5jX21hcmtlcikKCiAgICAgIG5leHRfYmxvY2tfc3RhcnQgPSBmLnRlbGwoKQoKICAgICAgd2hpbGUgcmFuZ2VfdHJhY2tlci50cnlfY2xhaW0obmV4dF9ibG9ja19zdGFydCk6CiAgICAgICAgYmxvY2sgPSBuZXh0KGJsb2NrcykKICAgICAgICBuZXh0X2Jsb2NrX3N0YXJ0ID0gYmxvY2sub2Zmc2V0ICsgYmxvY2suc2l6ZQogICAgICAgIGZvciByZWNvcmQgaW4gYmxvY2s6CiAgICAgICAgICB5aWVsZCByZWNvcmQKCgpjbGFzcyBXcml0ZVRvQXZybyhiZWFtLnRyYW5zZm9ybXMuUFRyYW5zZm9ybSk6CiAgIiIiQSBgYFBUcmFuc2Zvcm1gYCBmb3Igd3JpdGluZyBhdnJvIGZpbGVzLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgZmlsZV9wYXRoX3ByZWZpeCwKICAgICAgICAgICAgICAgc2NoZW1hLAogICAgICAgICAgICAgICBjb2RlYz0nZGVmbGF0ZScsCiAgICAgICAgICAgICAgIGZpbGVfbmFtZV9zdWZmaXg9JycsCiAgICAgICAgICAgICAgIG51bV9zaGFyZHM9MCwKICAgICAgICAgICAgICAgc2hhcmRfbmFtZV90ZW1wbGF0ZT1Ob25lLAogICAgICAgICAgICAgICBtaW1lX3R5cGU9J2FwcGxpY2F0aW9uL3gtYXZybycsCiAgICAgICAgICAgICAgIHVzZV9mYXN0YXZybz1GYWxzZSk6CiAgICAiIiJJbml0aWFsaXplIGEgV3JpdGVUb0F2cm8gdHJhbnNmb3JtLgoKICAgIEFyZ3M6CiAgICAgIGZpbGVfcGF0aF9wcmVmaXg6IFRoZSBmaWxlIHBhdGggdG8gd3JpdGUgdG8uIFRoZSBmaWxlcyB3cml0dGVuIHdpbGwgYmVnaW4KICAgICAgICB3aXRoIHRoaXMgcHJlZml4LCBmb2xsb3dlZCBieSBhIHNoYXJkIGlkZW50aWZpZXIgKHNlZSBudW1fc2hhcmRzKSwgYW5kCiAgICAgICAgZW5kIGluIGEgY29tbW9uIGV4dGVuc2lvbiwgaWYgZ2l2ZW4gYnkgZmlsZV9uYW1lX3N1ZmZpeC4gSW4gbW9zdCBjYXNlcywKICAgICAgICBvbmx5IHRoaXMgYXJndW1lbnQgaXMgc3BlY2lmaWVkIGFuZCBudW1fc2hhcmRzLCBzaGFyZF9uYW1lX3RlbXBsYXRlLCBhbmQKICAgICAgICBmaWxlX25hbWVfc3VmZml4IHVzZSBkZWZhdWx0IHZhbHVlcy4KICAgICAgc2NoZW1hOiBUaGUgc2NoZW1hIHRvIHVzZSwgYXMgcmV0dXJuZWQgYnkgYXZyby5zY2hlbWEuUGFyc2UKICAgICAgY29kZWM6IFRoZSBjb2RlYyB0byB1c2UgZm9yIGJsb2NrLWxldmVsIGNvbXByZXNzaW9uLiBBbnkgc3RyaW5nIHN1cHBvcnRlZAogICAgICAgIGJ5IHRoZSBBdnJvIHNwZWNpZmljYXRpb24gaXMgYWNjZXB0ZWQgKGZvciBleGFtcGxlICdudWxsJykuCiAgICAgIGZpbGVfbmFtZV9zdWZmaXg6IFN1ZmZpeCBmb3IgdGhlIGZpbGVzIHdyaXR0ZW4uCiAgICAgIG51bV9zaGFyZHM6IFRoZSBudW1iZXIgb2YgZmlsZXMgKHNoYXJkcykgdXNlZCBmb3Igb3V0cHV0LiBJZiBub3Qgc2V0LCB0aGUKICAgICAgICBzZXJ2aWNlIHdpbGwgZGVjaWRlIG9uIHRoZSBvcHRpbWFsIG51bWJlciBvZiBzaGFyZHMuCiAgICAgICAgQ29uc3RyYWluaW5nIHRoZSBudW1iZXIgb2Ygc2hhcmRzIGlzIGxpa2VseSB0byByZWR1Y2UKICAgICAgICB0aGUgcGVyZm9ybWFuY2Ugb2YgYSBwaXBlbGluZS4gIFNldHRpbmcgdGhpcyB2YWx1ZSBpcyBub3QgcmVjb21tZW5kZWQKICAgICAgICB1bmxlc3MgeW91IHJlcXVpcmUgYSBzcGVjaWZpYyBudW1iZXIgb2Ygb3V0cHV0IGZpbGVzLgogICAgICBzaGFyZF9uYW1lX3RlbXBsYXRlOiBBIHRlbXBsYXRlIHN0cmluZyBjb250YWluaW5nIHBsYWNlaG9sZGVycyBmb3IKICAgICAgICB0aGUgc2hhcmQgbnVtYmVyIGFuZCBzaGFyZCBjb3VudC4gV2hlbiBjb25zdHJ1Y3RpbmcgYSBmaWxlbmFtZSBmb3IgYQogICAgICAgIHBhcnRpY3VsYXIgc2hhcmQgbnVtYmVyLCB0aGUgdXBwZXItY2FzZSBsZXR0ZXJzICdTJyBhbmQgJ04nIGFyZQogICAgICAgIHJlcGxhY2VkIHdpdGggdGhlIDAtcGFkZGVkIHNoYXJkIG51bWJlciBhbmQgc2hhcmQgY291bnQgcmVzcGVjdGl2ZWx5LgogICAgICAgIFRoaXMgYXJndW1lbnQgY2FuIGJlICcnIGluIHdoaWNoIGNhc2UgaXQgYmVoYXZlcyBhcyBpZiBudW1fc2hhcmRzIHdhcwogICAgICAgIHNldCB0byAxIGFuZCBvbmx5IG9uZSBmaWxlIHdpbGwgYmUgZ2VuZXJhdGVkLiBUaGUgZGVmYXVsdCBwYXR0ZXJuIHVzZWQKICAgICAgICBpcyAnLVNTU1NTLW9mLU5OTk5OJyBpZiBOb25lIGlzIHBhc3NlZCBhcyB0aGUgc2hhcmRfbmFtZV90ZW1wbGF0ZS4KICAgICAgbWltZV90eXBlOiBUaGUgTUlNRSB0eXBlIHRvIHVzZSBmb3IgdGhlIHByb2R1Y2VkIGZpbGVzLCBpZiB0aGUgZmlsZXN5c3RlbQogICAgICAgIHN1cHBvcnRzIHNwZWNpZnlpbmcgTUlNRSB0eXBlcy4KICAgICAgdXNlX2Zhc3RhdnJvOiB3aGVuIHNldCwgdXNlIHRoZSBgZmFzdGF2cm9gIGxpYnJhcnkgZm9yIElPCgogICAgUmV0dXJuczoKICAgICAgQSBXcml0ZVRvQXZybyB0cmFuc2Zvcm0gdXNhYmxlIGZvciB3cml0aW5nLgogICAgIiIiCiAgICBzZWxmLl9zaW5rID0gXAogICAgICBfY3JlYXRlX2F2cm9fc2luaygKICAgICAgICAgIGZpbGVfcGF0aF9wcmVmaXgsCiAgICAgICAgICBzY2hlbWEsCiAgICAgICAgICBjb2RlYywKICAgICAgICAgIGZpbGVfbmFtZV9zdWZmaXgsCiAgICAgICAgICBudW1fc2hhcmRzLAogICAgICAgICAgc2hhcmRfbmFtZV90ZW1wbGF0ZSwKICAgICAgICAgIG1pbWVfdHlwZSwKICAgICAgICAgIHVzZV9mYXN0YXZybwogICAgICApCgogIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgcmV0dXJuIHBjb2xsIHwgYmVhbS5pby5pb2Jhc2UuV3JpdGUoc2VsZi5fc2luaykKCiAgZGVmIGRpc3BsYXlfZGF0YShzZWxmKToKICAgIHJldHVybiB7J3NpbmtfZGQnOiBzZWxmLl9zaW5rfQoKCmRlZiBfY3JlYXRlX2F2cm9fc2luayhmaWxlX3BhdGhfcHJlZml4LAogICAgICAgICAgICAgICAgICAgICAgc2NoZW1hLAogICAgICAgICAgICAgICAgICAgICAgY29kZWMsCiAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWVfc3VmZml4LAogICAgICAgICAgICAgICAgICAgICAgbnVtX3NoYXJkcywKICAgICAgICAgICAgICAgICAgICAgIHNoYXJkX25hbWVfdGVtcGxhdGUsCiAgICAgICAgICAgICAgICAgICAgICBtaW1lX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICB1c2VfZmFzdGF2cm8pOgogIHJldHVybiBcCiAgICAgIF9GYXN0QXZyb1NpbmsoCiAgICAgICAgICBmaWxlX3BhdGhfcHJlZml4LAogICAgICAgICAgc2NoZW1hLAogICAgICAgICAgY29kZWMsCiAgICAgICAgICBmaWxlX25hbWVfc3VmZml4LAogICAgICAgICAgbnVtX3NoYXJkcywKICAgICAgICAgIHNoYXJkX25hbWVfdGVtcGxhdGUsCiAgICAgICAgICBtaW1lX3R5cGUKICAgICAgKSBcCiAgICAgIGlmIHVzZV9mYXN0YXZybyBcCiAgICAgIGVsc2UgXAogICAgICBfQXZyb1NpbmsoCiAgICAgICAgICBmaWxlX3BhdGhfcHJlZml4LAogICAgICAgICAgc2NoZW1hLAogICAgICAgICAgY29kZWMsCiAgICAgICAgICBmaWxlX25hbWVfc3VmZml4LAogICAgICAgICAgbnVtX3NoYXJkcywKICAgICAgICAgIHNoYXJkX25hbWVfdGVtcGxhdGUsCiAgICAgICAgICBtaW1lX3R5cGUKICAgICAgKQoKCmNsYXNzIF9BdnJvU2luayhmaWxlYmFzZWRzaW5rLkZpbGVCYXNlZFNpbmspOgogICIiIkEgc2luayBmb3IgYXZybyBmaWxlcy4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgIGZpbGVfcGF0aF9wcmVmaXgsCiAgICAgICAgICAgICAgIHNjaGVtYSwKICAgICAgICAgICAgICAgY29kZWMsCiAgICAgICAgICAgICAgIGZpbGVfbmFtZV9zdWZmaXgsCiAgICAgICAgICAgICAgIG51bV9zaGFyZHMsCiAgICAgICAgICAgICAgIHNoYXJkX25hbWVfdGVtcGxhdGUsCiAgICAgICAgICAgICAgIG1pbWVfdHlwZSk6CiAgICBzdXBlcihfQXZyb1NpbmssIHNlbGYpLl9faW5pdF9fKAogICAgICAgIGZpbGVfcGF0aF9wcmVmaXgsCiAgICAgICAgZmlsZV9uYW1lX3N1ZmZpeD1maWxlX25hbWVfc3VmZml4LAogICAgICAgIG51bV9zaGFyZHM9bnVtX3NoYXJkcywKICAgICAgICBzaGFyZF9uYW1lX3RlbXBsYXRlPXNoYXJkX25hbWVfdGVtcGxhdGUsCiAgICAgICAgY29kZXI9Tm9uZSwKICAgICAgICBtaW1lX3R5cGU9bWltZV90eXBlLAogICAgICAgICMgQ29tcHJlc3Npb24gaGFwcGVucyBhdCB0aGUgYmxvY2sgbGV2ZWwgdXNpbmcgdGhlIHN1cHBsaWVkIGNvZGVjLCBhbmQKICAgICAgICAjIG5vdCBhdCB0aGUgZmlsZSBsZXZlbC4KICAgICAgICBjb21wcmVzc2lvbl90eXBlPUNvbXByZXNzaW9uVHlwZXMuVU5DT01QUkVTU0VEKQogICAgc2VsZi5fc2NoZW1hID0gc2NoZW1hCiAgICBzZWxmLl9jb2RlYyA9IGNvZGVjCgogIGRlZiBvcGVuKHNlbGYsIHRlbXBfcGF0aCk6CiAgICBmaWxlX2hhbmRsZSA9IHN1cGVyKF9BdnJvU2luaywgc2VsZikub3Blbih0ZW1wX3BhdGgpCiAgICByZXR1cm4gYXZyby5kYXRhZmlsZS5EYXRhRmlsZVdyaXRlcigKICAgICAgICBmaWxlX2hhbmRsZSwgYXZyby5pby5EYXR1bVdyaXRlcigpLCBzZWxmLl9zY2hlbWEsIHNlbGYuX2NvZGVjKQoKICBkZWYgd3JpdGVfcmVjb3JkKHNlbGYsIHdyaXRlciwgdmFsdWUpOgogICAgd3JpdGVyLmFwcGVuZCh2YWx1ZSkKCiAgZGVmIGRpc3BsYXlfZGF0YShzZWxmKToKICAgIHJlcyA9IHN1cGVyKF9BdnJvU2luaywgc2VsZikuZGlzcGxheV9kYXRhKCkKICAgIHJlc1snY29kZWMnXSA9IHN0cihzZWxmLl9jb2RlYykKICAgIHJlc1snc2NoZW1hJ10gPSBzdHIoc2VsZi5fc2NoZW1hKQogICAgcmV0dXJuIHJlcwoKCmNsYXNzIF9GYXN0QXZyb1NpbmsoX0F2cm9TaW5rKToKICAiIiJBIHNpbmsgZm9yIGF2cm8gZmlsZXMgdGhhdCB1c2VzIHRoZSBgZmFzdGF2cm9gIGxpYnJhcnkiIiIKICBkZWYgb3BlbihzZWxmLCB0ZW1wX3BhdGgpOgogICAgZmlsZV9oYW5kbGUgPSBzdXBlcihfQXZyb1NpbmssIHNlbGYpLm9wZW4odGVtcF9wYXRoKQogICAgcmV0dXJuIFdyaXRlcihmaWxlX2hhbmRsZSwgc2VsZi5fc2NoZW1hLnRvX2pzb24oKSwgc2VsZi5fY29kZWMpCgogIGRlZiB3cml0ZV9yZWNvcmQoc2VsZiwgd3JpdGVyLCB2YWx1ZSk6CiAgICB3cml0ZXIud3JpdGUodmFsdWUpCgogIGRlZiBjbG9zZShzZWxmLCB3cml0ZXIpOgogICAgd3JpdGVyLmZsdXNoKCkKICAgIHN1cGVyKF9GYXN0QXZyb1NpbmssIHNlbGYpLmNsb3NlKHdyaXRlci5mbykKfXIWggAAKFgWAAAAX0F2cm9TaW5rLndyaXRlX3JlY29yZFgDAAAAZGVmTVICTVQCh1gSAAAAX0F2cm9TaW5rLl9faW5pdF9fWAMAAABkZWZNOAJNTAKHWA8AAABfQXZyb0Jsb2NrLnNpemVYAwAAAGRlZk1FAU1HAYdYCwAAAFdyaXRlVG9BdnJvWAUAAABjbGFzc03YAU0UAodYLwAAAF9BdnJvU291cmNlLnJlYWRfcmVjb3Jkcy5zcGxpdF9wb2ludHNfdW5jbGFpbWVkWAMAAABkZWZNgwFNiwGHWBoAAABfRmFzdEF2cm9TaW5rLndyaXRlX3JlY29yZFgDAAAAZGVmTWICTWQCh1gRAAAAX2NyZWF0ZV9hdnJvX3NpbmtYAwAAAGRlZk0WAk0zAodYDAAAAFJlYWRGcm9tQXZyb1gFAAAAY2xhc3NLTEuih1gUAAAAV3JpdGVUb0F2cm8uX19pbml0X19YAwAAAGRlZk3bAU0OAodYHAAAAF9BdnJvQmxvY2suX2RlY29tcHJlc3NfYnl0ZXNYAwAAAGRlZk1LAU1kAYdYCgAAAF9BdnJvVXRpbHNYBQAAAGNsYXNzS8hNIgGHWAsAAABfQXZyb1NvdXJjZVgFAAAAY2xhc3NNdgFNpAGHWDMAAABfRmFzdEF2cm9Tb3VyY2UucmVhZF9yZWNvcmRzLnNwbGl0X3BvaW50c191bmNsYWltZWRYAwAAAGRlZk22AU2+AYdYEQAAAF9BdnJvQmxvY2sub2Zmc2V0WAMAAABkZWZNSAFNSgGHWBYAAABSZWFkQWxsRnJvbUF2cm8uZXhwYW5kWAMAAABkZWZLxEvGh1gOAAAAX0F2cm9TaW5rLm9wZW5YAwAAAGRlZk1NAk1RAodYLQAAAF9BdnJvVXRpbHMuYWR2YW5jZV9maWxlX3Bhc3RfbmV4dF9zeW5jX21hcmtlclgDAAAAZGVmTQ0BTSIBh1gNAAAAX0Zhc3RBdnJvU2lua1gFAAAAY2xhc3NNXAJNaAKHWBMAAABfY3JlYXRlX2F2cm9fc291cmNlWAMAAABkZWZNJAFNNQGHWBkAAABSZWFkRnJvbUF2cm8uZGlzcGxheV9kYXRhWAMAAABkZWZLoEuih1gjAAAAX0F2cm9VdGlscy5yZWFkX21ldGFfZGF0YV9mcm9tX2ZpbGVYAwAAAGRlZkvKS+2HWBUAAABSZWFkRnJvbUF2cm8uX19pbml0X19YAwAAAGRlZktQS5yHWBIAAABXcml0ZVRvQXZyby5leHBhbmRYAwAAAGRlZk0PAk0RAodYFgAAAF9BdnJvQmxvY2subnVtX3JlY29yZHNYAwAAAGRlZk1lAU1nAYdYEgAAAF9GYXN0QXZyb1Npbmsub3BlblgDAAAAZGVmTV4CTWECh1gYAAAAUmVhZEFsbEZyb21BdnJvLl9faW5pdF9fWAMAAABkZWZLrUvDh1gSAAAAX0F2cm9CbG9jay5yZWNvcmRzWAMAAABkZWZNaAFNdAGHWAoAAABfQXZyb0Jsb2NrWAUAAABjbGFzc003AU10AYdYEwAAAF9BdnJvQmxvY2suX19pbml0X19YAwAAAGRlZk06AU1EAYdYEwAAAFJlYWRGcm9tQXZyby5leHBhbmRYAwAAAGRlZkudS5+HWBgAAABXcml0ZVRvQXZyby5kaXNwbGF5X2RhdGFYAwAAAGRlZk0SAk0UAodYEwAAAF9GYXN0QXZyb1NpbmsuY2xvc2VYAwAAAGRlZk1lAk1oAodYGAAAAF9BdnJvU291cmNlLnJlYWRfcmVjb3Jkc1gDAAAAZGVmTYABTaQBh1gcAAAAX0Zhc3RBdnJvU291cmNlLnJlYWRfcmVjb3Jkc1gDAAAAZGVmTbMBTdYBh1gJAAAAX0F2cm9TaW5rWAUAAABjbGFzc001Ak1aAodYDwAAAF9GYXN0QXZyb1NvdXJjZVgFAAAAY2xhc3NNpgFN1gGHWB8AAABfQXZyb1V0aWxzLnJlYWRfYmxvY2tfZnJvbV9maWxlWAMAAABkZWZL7k0MAYdYFgAAAF9BdnJvU2luay5kaXNwbGF5X2RhdGFYAwAAAGRlZk1VAk1aAodYDwAAAFJlYWRBbGxGcm9tQXZyb1gFAAAAY2xhc3NLpEvGh3V9cheCAAAoWAwAAABSZWFkRnJvbUF2cm9qX1gAAFgLAAAAV3JpdGVUb0F2cm9qX1gAAFgWAAAAUmVhZEFsbEZyb21BdnJvLmV4cGFuZGpfWAAAWA8AAABSZWFkQWxsRnJvbUF2cm9qX1gAAFgSAAAAV3JpdGVUb0F2cm8uZXhwYW5kal9YAABYEwAAAFJlYWRGcm9tQXZyby5leHBhbmRqX1gAAFgZAAAAUmVhZEZyb21BdnJvLmRpc3BsYXlfZGF0YWpfWAAAWBgAAABXcml0ZVRvQXZyby5kaXNwbGF5X2RhdGFqX1gAAHVqfWkAAFgVAAAAYXBhY2hlX2JlYW0uaW8uYXZyb2lvchiCAACFgXIZggAAfXIaggAAYnRVLGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LndhdGVybWFya19tYW5hZ2VyKFjZKwAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJNYW5hZ2VzIHdhdGVybWFya3Mgb2YgUENvbGxlY3Rpb25zIGFuZCBBcHBsaWVkUFRyYW5zZm9ybXMuIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IHRocmVhZGluZwpmcm9tIGJ1aWx0aW5zIGltcG9ydCBvYmplY3QKCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IHBpcGVsaW5lCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IHB2YWx1ZQpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnV0aWwgaW1wb3J0IFRpbWVyRmlyaW5nCmZyb20gYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wIGltcG9ydCBNQVhfVElNRVNUQU1QCmZyb20gYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wIGltcG9ydCBNSU5fVElNRVNUQU1QCmZyb20gYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wIGltcG9ydCBUSU1FX0dSQU5VTEFSSVRZCgoKY2xhc3MgV2F0ZXJtYXJrTWFuYWdlcihvYmplY3QpOgogICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgVHJhY2tzIGFuZCB1cGRhdGVzIHdhdGVybWFya3MgZm9yIGFsbCBBcHBsaWVkUFRyYW5zZm9ybXMuIiIiCgogIFdBVEVSTUFSS19QT1NfSU5GID0gTUFYX1RJTUVTVEFNUAogIFdBVEVSTUFSS19ORUdfSU5GID0gTUlOX1RJTUVTVEFNUAoKICBkZWYgX19pbml0X18oc2VsZiwgY2xvY2ssIHJvb3RfdHJhbnNmb3JtcywgdmFsdWVfdG9fY29uc3VtZXJzLAogICAgICAgICAgICAgICB0cmFuc2Zvcm1fa2V5ZWRfc3RhdGVzKToKICAgIHNlbGYuX2Nsb2NrID0gY2xvY2sKICAgIHNlbGYuX3Jvb3RfdHJhbnNmb3JtcyA9IHJvb3RfdHJhbnNmb3JtcwogICAgc2VsZi5fdmFsdWVfdG9fY29uc3VtZXJzID0gdmFsdWVfdG9fY29uc3VtZXJzCiAgICBzZWxmLl90cmFuc2Zvcm1fa2V5ZWRfc3RhdGVzID0gdHJhbnNmb3JtX2tleWVkX3N0YXRlcwogICAgIyBBcHBsaWVkUFRyYW5zZm9ybSAtPiBUcmFuc2Zvcm1XYXRlcm1hcmtzCiAgICBzZWxmLl90cmFuc2Zvcm1fdG9fd2F0ZXJtYXJrcyA9IHt9CgogICAgZm9yIHJvb3RfdHJhbnNmb3JtIGluIHJvb3RfdHJhbnNmb3JtczoKICAgICAgc2VsZi5fdHJhbnNmb3JtX3RvX3dhdGVybWFya3Nbcm9vdF90cmFuc2Zvcm1dID0gX1RyYW5zZm9ybVdhdGVybWFya3MoCiAgICAgICAgICBzZWxmLl9jbG9jaywgdHJhbnNmb3JtX2tleWVkX3N0YXRlc1tyb290X3RyYW5zZm9ybV0sIHJvb3RfdHJhbnNmb3JtKQoKICAgIGZvciBjb25zdW1lcnMgaW4gdmFsdWVfdG9fY29uc3VtZXJzLnZhbHVlcygpOgogICAgICBmb3IgY29uc3VtZXIgaW4gY29uc3VtZXJzOgogICAgICAgIHNlbGYuX3RyYW5zZm9ybV90b193YXRlcm1hcmtzW2NvbnN1bWVyXSA9IF9UcmFuc2Zvcm1XYXRlcm1hcmtzKAogICAgICAgICAgICBzZWxmLl9jbG9jaywgdHJhbnNmb3JtX2tleWVkX3N0YXRlc1tjb25zdW1lcl0sIGNvbnN1bWVyKQoKICAgIGZvciBjb25zdW1lcnMgaW4gdmFsdWVfdG9fY29uc3VtZXJzLnZhbHVlcygpOgogICAgICBmb3IgY29uc3VtZXIgaW4gY29uc3VtZXJzOgogICAgICAgIHNlbGYuX3VwZGF0ZV9pbnB1dF90cmFuc2Zvcm1fd2F0ZXJtYXJrcyhjb25zdW1lcikKCiAgZGVmIF91cGRhdGVfaW5wdXRfdHJhbnNmb3JtX3dhdGVybWFya3Moc2VsZiwgYXBwbGllZF9wdHJhbnNmb3JtKToKICAgIGFzc2VydCBpc2luc3RhbmNlKGFwcGxpZWRfcHRyYW5zZm9ybSwgcGlwZWxpbmUuQXBwbGllZFBUcmFuc2Zvcm0pCiAgICBpbnB1dF90cmFuc2Zvcm1fd2F0ZXJtYXJrcyA9IFtdCiAgICBmb3IgaW5wdXRfcHZhbHVlIGluIGFwcGxpZWRfcHRyYW5zZm9ybS5pbnB1dHM6CiAgICAgIGFzc2VydCBpbnB1dF9wdmFsdWUucHJvZHVjZXIgb3IgaXNpbnN0YW5jZShpbnB1dF9wdmFsdWUsIHB2YWx1ZS5QQmVnaW4pCiAgICAgIGlmIGlucHV0X3B2YWx1ZS5wcm9kdWNlcjoKICAgICAgICBpbnB1dF90cmFuc2Zvcm1fd2F0ZXJtYXJrcy5hcHBlbmQoCiAgICAgICAgICAgIHNlbGYuZ2V0X3dhdGVybWFya3MoaW5wdXRfcHZhbHVlLnByb2R1Y2VyKSkKICAgIHNlbGYuX3RyYW5zZm9ybV90b193YXRlcm1hcmtzWwogICAgICAgIGFwcGxpZWRfcHRyYW5zZm9ybV0udXBkYXRlX2lucHV0X3RyYW5zZm9ybV93YXRlcm1hcmtzKAogICAgICAgICAgICBpbnB1dF90cmFuc2Zvcm1fd2F0ZXJtYXJrcykKCiAgZGVmIGdldF93YXRlcm1hcmtzKHNlbGYsIGFwcGxpZWRfcHRyYW5zZm9ybSk6CiAgICAiIiJHZXRzIHRoZSBpbnB1dCBhbmQgb3V0cHV0IHdhdGVybWFya3MgZm9yIGFuIEFwcGxpZWRQVHJhbnNmb3JtLgoKICAgIElmIHRoZSBhcHBsaWVkX3B0cmFuc2Zvcm0gaGFzIG5vdCBwcm9jZXNzZWQgYW55IGVsZW1lbnRzLCByZXR1cm4gYQogICAgd2F0ZXJtYXJrIHdpdGggbWluaW11bSB2YWx1ZS4KCiAgICBBcmdzOgogICAgICBhcHBsaWVkX3B0cmFuc2Zvcm06IEFwcGxpZWRQVHJhbnNmb3JtIHRvIGdldCB0aGUgd2F0ZXJtYXJrcyBmb3IuCgogICAgUmV0dXJuczoKICAgICAgQSBzbmFwc2hvdCAoVHJhbnNmb3JtV2F0ZXJtYXJrcykgb2YgdGhlIGlucHV0IHdhdGVybWFyayBhbmQgb3V0cHV0CiAgICAgIHdhdGVybWFyayBmb3IgdGhlIHByb3ZpZGVkIHRyYW5zZm9ybS4KICAgICIiIgoKICAgICMgVE9ETyhhbHRheSk6IENvbXBvc2l0ZSB0cmFuc2Zvcm1zIHNob3VsZCBoYXZlIGEgY29tcG9zaXRlIHdhdGVybWFyay4gVW50aWwKICAgICMgdGhlbiB0aGV5IGFyZSByZXByZXNlbnRlZCBieSB0aGVpciBsYXN0IHRyYW5zZm9ybS4KICAgIHdoaWxlIGFwcGxpZWRfcHRyYW5zZm9ybS5wYXJ0czoKICAgICAgYXBwbGllZF9wdHJhbnNmb3JtID0gYXBwbGllZF9wdHJhbnNmb3JtLnBhcnRzWy0xXQoKICAgIHJldHVybiBzZWxmLl90cmFuc2Zvcm1fdG9fd2F0ZXJtYXJrc1thcHBsaWVkX3B0cmFuc2Zvcm1dCgogIGRlZiB1cGRhdGVfd2F0ZXJtYXJrcyhzZWxmLCBjb21wbGV0ZWRfY29tbWl0dGVkX2J1bmRsZSwgYXBwbGllZF9wdHJhbnNmb3JtLAogICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWRfdGltZXJzLCBvdXRwdXRzLCB1bnByb2Nlc3NlZF9idW5kbGVzLAogICAgICAgICAgICAgICAgICAgICAgICBrZXllZF9lYXJsaWVzdF9ob2xkcywgc2lkZV9pbnB1dHNfY29udGFpbmVyKToKICAgIGFzc2VydCBpc2luc3RhbmNlKGFwcGxpZWRfcHRyYW5zZm9ybSwgcGlwZWxpbmUuQXBwbGllZFBUcmFuc2Zvcm0pCiAgICBzZWxmLl91cGRhdGVfcGVuZGluZygKICAgICAgICBjb21wbGV0ZWRfY29tbWl0dGVkX2J1bmRsZSwgYXBwbGllZF9wdHJhbnNmb3JtLCBjb21wbGV0ZWRfdGltZXJzLAogICAgICAgIG91dHB1dHMsIHVucHJvY2Vzc2VkX2J1bmRsZXMpCiAgICB0dyA9IHNlbGYuZ2V0X3dhdGVybWFya3MoYXBwbGllZF9wdHJhbnNmb3JtKQogICAgdHcuaG9sZChrZXllZF9lYXJsaWVzdF9ob2xkcykKICAgIHJldHVybiBzZWxmLl9yZWZyZXNoX3dhdGVybWFya3MoYXBwbGllZF9wdHJhbnNmb3JtLCBzaWRlX2lucHV0c19jb250YWluZXIpCgogIGRlZiBfdXBkYXRlX3BlbmRpbmcoc2VsZiwgaW5wdXRfY29tbWl0dGVkX2J1bmRsZSwgYXBwbGllZF9wdHJhbnNmb3JtLAogICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkX3RpbWVycywgb3V0cHV0X2NvbW1pdHRlZF9idW5kbGVzLAogICAgICAgICAgICAgICAgICAgICAgdW5wcm9jZXNzZWRfYnVuZGxlcyk6CiAgICAiIiJVcGRhdGVkIGxpc3Qgb2YgcGVuZGluZyBidW5kbGVzIGZvciB0aGUgZ2l2ZW4gQXBwbGllZFBUcmFuc2Zvcm0uIiIiCgogICAgIyBVcGRhdGUgcGVuZGluZyBlbGVtZW50cy4gRmlsdGVyIG91dCBlbXB0eSBidW5kbGVzLiBUaGV5IGRvIG5vdCBpbXBhY3QKICAgICMgd2F0ZXJtYXJrcyBhbmQgc2hvdWxkIG5vdCB0cmlnZ2VyIGRvd25zdHJlYW0gZXhlY3V0aW9uLgogICAgZm9yIG91dHB1dCBpbiBvdXRwdXRfY29tbWl0dGVkX2J1bmRsZXM6CiAgICAgIGlmIG91dHB1dC5oYXNfZWxlbWVudHMoKToKICAgICAgICBpZiBvdXRwdXQucGNvbGxlY3Rpb24gaW4gc2VsZi5fdmFsdWVfdG9fY29uc3VtZXJzOgogICAgICAgICAgY29uc3VtZXJzID0gc2VsZi5fdmFsdWVfdG9fY29uc3VtZXJzW291dHB1dC5wY29sbGVjdGlvbl0KICAgICAgICAgIGZvciBjb25zdW1lciBpbiBjb25zdW1lcnM6CiAgICAgICAgICAgIGNvbnN1bWVyX3R3ID0gc2VsZi5fdHJhbnNmb3JtX3RvX3dhdGVybWFya3NbY29uc3VtZXJdCiAgICAgICAgICAgIGNvbnN1bWVyX3R3LmFkZF9wZW5kaW5nKG91dHB1dCkKCiAgICBjb21wbGV0ZWRfdHcgPSBzZWxmLl90cmFuc2Zvcm1fdG9fd2F0ZXJtYXJrc1thcHBsaWVkX3B0cmFuc2Zvcm1dCiAgICBjb21wbGV0ZWRfdHcudXBkYXRlX3RpbWVycyhjb21wbGV0ZWRfdGltZXJzKQoKICAgIGZvciB1bnByb2Nlc3NlZF9idW5kbGUgaW4gdW5wcm9jZXNzZWRfYnVuZGxlczoKICAgICAgY29tcGxldGVkX3R3LmFkZF9wZW5kaW5nKHVucHJvY2Vzc2VkX2J1bmRsZSkKCiAgICBhc3NlcnQgaW5wdXRfY29tbWl0dGVkX2J1bmRsZSBvciBhcHBsaWVkX3B0cmFuc2Zvcm0gaW4gc2VsZi5fcm9vdF90cmFuc2Zvcm1zCiAgICBpZiBpbnB1dF9jb21taXR0ZWRfYnVuZGxlIGFuZCBpbnB1dF9jb21taXR0ZWRfYnVuZGxlLmhhc19lbGVtZW50cygpOgogICAgICBjb21wbGV0ZWRfdHcucmVtb3ZlX3BlbmRpbmcoaW5wdXRfY29tbWl0dGVkX2J1bmRsZSkKCiAgZGVmIF9yZWZyZXNoX3dhdGVybWFya3Moc2VsZiwgYXBwbGllZF9wdHJhbnNmb3JtLCBzaWRlX2lucHV0c19jb250YWluZXIpOgogICAgYXNzZXJ0IGlzaW5zdGFuY2UoYXBwbGllZF9wdHJhbnNmb3JtLCBwaXBlbGluZS5BcHBsaWVkUFRyYW5zZm9ybSkKICAgIHVuYmxvY2tlZF90YXNrcyA9IFtdCiAgICB0dyA9IHNlbGYuZ2V0X3dhdGVybWFya3MoYXBwbGllZF9wdHJhbnNmb3JtKQogICAgaWYgdHcucmVmcmVzaCgpOgogICAgICBmb3IgcHZhbCBpbiBhcHBsaWVkX3B0cmFuc2Zvcm0ub3V0cHV0cy52YWx1ZXMoKToKICAgICAgICBpZiBpc2luc3RhbmNlKHB2YWwsIHB2YWx1ZS5Eb091dHB1dHNUdXBsZSk6CiAgICAgICAgICBwdmFscyA9ICh2IGZvciB2IGluIHB2YWwpCiAgICAgICAgZWxzZToKICAgICAgICAgIHB2YWxzID0gKHB2YWwsKQogICAgICAgIGZvciB2IGluIHB2YWxzOgogICAgICAgICAgaWYgdiBpbiBzZWxmLl92YWx1ZV90b19jb25zdW1lcnM6ICAjIElmIHRoZXJlIGFyZSBkb3duc3RyZWFtIGNvbnN1bWVycwogICAgICAgICAgICBjb25zdW1lcnMgPSBzZWxmLl92YWx1ZV90b19jb25zdW1lcnNbdl0KICAgICAgICAgICAgZm9yIGNvbnN1bWVyIGluIGNvbnN1bWVyczoKICAgICAgICAgICAgICB1bmJsb2NrZWRfdGFza3MuZXh0ZW5kKAogICAgICAgICAgICAgICAgICBzZWxmLl9yZWZyZXNoX3dhdGVybWFya3MoY29uc3VtZXIsIHNpZGVfaW5wdXRzX2NvbnRhaW5lcikpCiAgICAgICMgTm90aWZ5IHRoZSBzaWRlX2lucHV0c19jb250YWluZXIuCiAgICAgIHVuYmxvY2tlZF90YXNrcy5leHRlbmQoCiAgICAgICAgICBzaWRlX2lucHV0c19jb250YWluZXIKICAgICAgICAgIC51cGRhdGVfd2F0ZXJtYXJrc19mb3JfdHJhbnNmb3JtX2FuZF91bmJsb2NrX3Rhc2tzKAogICAgICAgICAgICAgIGFwcGxpZWRfcHRyYW5zZm9ybSwgdHcpKQogICAgcmV0dXJuIHVuYmxvY2tlZF90YXNrcwoKICBkZWYgZXh0cmFjdF9hbGxfdGltZXJzKHNlbGYpOgogICAgIiIiRXh0cmFjdHMgZmlyZWQgdGltZXJzIGZvciBhbGwgdHJhbnNmb3JtcwogICAgYW5kIHJlcG9ydHMgaWYgdGhlcmUgYXJlIGFueSB0aW1lcnMgc2V0LiIiIgogICAgYWxsX3RpbWVycyA9IFtdCiAgICBoYXNfcmVhbHRpbWVfdGltZXIgPSBGYWxzZQogICAgZm9yIGFwcGxpZWRfcHRyYW5zZm9ybSwgdHcgaW4gc2VsZi5fdHJhbnNmb3JtX3RvX3dhdGVybWFya3MuaXRlbXMoKToKICAgICAgZmlyZWRfdGltZXJzLCBoYWRfcmVhbHRpbWVfdGltZXIgPSB0dy5leHRyYWN0X3RyYW5zZm9ybV90aW1lcnMoKQogICAgICBpZiBmaXJlZF90aW1lcnM6CiAgICAgICAgYWxsX3RpbWVycy5hcHBlbmQoKGFwcGxpZWRfcHRyYW5zZm9ybSwgZmlyZWRfdGltZXJzKSkKICAgICAgaWYgKGhhZF9yZWFsdGltZV90aW1lcgogICAgICAgICAgYW5kIHR3Lm91dHB1dF93YXRlcm1hcmsgPCBXYXRlcm1hcmtNYW5hZ2VyLldBVEVSTUFSS19QT1NfSU5GKToKICAgICAgICBoYXNfcmVhbHRpbWVfdGltZXIgPSBUcnVlCiAgICByZXR1cm4gYWxsX3RpbWVycywgaGFzX3JlYWx0aW1lX3RpbWVyCgoKY2xhc3MgX1RyYW5zZm9ybVdhdGVybWFya3Mob2JqZWN0KToKICAiIiJUcmFja3MgaW5wdXQgYW5kIG91dHB1dCB3YXRlcm1hcmtzIGZvciBhbiBBcHBsaWVkUFRyYW5zZm9ybS4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGNsb2NrLCBrZXllZF9zdGF0ZXMsIHRyYW5zZm9ybSk6CiAgICBzZWxmLl9jbG9jayA9IGNsb2NrCiAgICBzZWxmLl9rZXllZF9zdGF0ZXMgPSBrZXllZF9zdGF0ZXMKICAgIHNlbGYuX2lucHV0X3RyYW5zZm9ybV93YXRlcm1hcmtzID0gW10KICAgIHNlbGYuX2lucHV0X3dhdGVybWFyayA9IFdhdGVybWFya01hbmFnZXIuV0FURVJNQVJLX05FR19JTkYKICAgIHNlbGYuX291dHB1dF93YXRlcm1hcmsgPSBXYXRlcm1hcmtNYW5hZ2VyLldBVEVSTUFSS19ORUdfSU5GCiAgICBzZWxmLl9rZXllZF9lYXJsaWVzdF9ob2xkcyA9IHt9CiAgICBzZWxmLl9wZW5kaW5nID0gc2V0KCkgICMgU2NoZWR1bGVkIGJ1bmRsZXMgdGFyZ2V0ZWQgZm9yIHRoaXMgdHJhbnNmb3JtLgogICAgc2VsZi5fZmlyZWRfdGltZXJzID0gc2V0KCkKICAgIHNlbGYuX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCgogICAgc2VsZi5fbGFiZWwgPSBzdHIodHJhbnNmb3JtKQoKICBkZWYgdXBkYXRlX2lucHV0X3RyYW5zZm9ybV93YXRlcm1hcmtzKHNlbGYsIGlucHV0X3RyYW5zZm9ybV93YXRlcm1hcmtzKToKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgc2VsZi5faW5wdXRfdHJhbnNmb3JtX3dhdGVybWFya3MgPSBpbnB1dF90cmFuc2Zvcm1fd2F0ZXJtYXJrcwoKICBkZWYgdXBkYXRlX3RpbWVycyhzZWxmLCBjb21wbGV0ZWRfdGltZXJzKToKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgZm9yIHRpbWVyX2ZpcmluZyBpbiBjb21wbGV0ZWRfdGltZXJzOgogICAgICAgIHNlbGYuX2ZpcmVkX3RpbWVycy5yZW1vdmUodGltZXJfZmlyaW5nKQoKICBAcHJvcGVydHkKICBkZWYgaW5wdXRfd2F0ZXJtYXJrKHNlbGYpOgogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICByZXR1cm4gc2VsZi5faW5wdXRfd2F0ZXJtYXJrCgogIEBwcm9wZXJ0eQogIGRlZiBvdXRwdXRfd2F0ZXJtYXJrKHNlbGYpOgogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICByZXR1cm4gc2VsZi5fb3V0cHV0X3dhdGVybWFyawoKICBkZWYgaG9sZChzZWxmLCBrZXllZF9lYXJsaWVzdF9ob2xkcyk6CiAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgIGZvciBrZXksIGhvbGRfdmFsdWUgaW4ga2V5ZWRfZWFybGllc3RfaG9sZHMuaXRlbXMoKToKICAgICAgICBzZWxmLl9rZXllZF9lYXJsaWVzdF9ob2xkc1trZXldID0gaG9sZF92YWx1ZQogICAgICAgIGlmIChob2xkX3ZhbHVlIGlzIE5vbmUgb3IKICAgICAgICAgICAgaG9sZF92YWx1ZSA9PSBXYXRlcm1hcmtNYW5hZ2VyLldBVEVSTUFSS19QT1NfSU5GKToKICAgICAgICAgIGRlbCBzZWxmLl9rZXllZF9lYXJsaWVzdF9ob2xkc1trZXldCgogIGRlZiBhZGRfcGVuZGluZyhzZWxmLCBwZW5kaW5nKToKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgc2VsZi5fcGVuZGluZy5hZGQocGVuZGluZykKCiAgZGVmIHJlbW92ZV9wZW5kaW5nKHNlbGYsIGNvbXBsZXRlZCk6CiAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgICMgSWdub3JlIHJlcGVhdGVkIHJlbW92ZXMuIFRoaXMgd2lsbCBoYXBwZW4gaWYgYSB0cmFuc2Zvcm0gaGFzIGEgcmVwZWF0ZWQKICAgICAgIyBpbnB1dC4KICAgICAgaWYgY29tcGxldGVkIGluIHNlbGYuX3BlbmRpbmc6CiAgICAgICAgc2VsZi5fcGVuZGluZy5yZW1vdmUoY29tcGxldGVkKQoKICBkZWYgcmVmcmVzaChzZWxmKToKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgbWluX3BlbmRpbmdfdGltZXN0YW1wID0gV2F0ZXJtYXJrTWFuYWdlci5XQVRFUk1BUktfUE9TX0lORgogICAgICBoYXNfcGVuZGluZ19lbGVtZW50cyA9IEZhbHNlCiAgICAgIGZvciBpbnB1dF9idW5kbGUgaW4gc2VsZi5fcGVuZGluZzoKICAgICAgICAjIFRPRE8oY2N5KTogd2UgY2FuIGhhdmUgdGhlIEJ1bmRsZSBjbGFzcyBrZWVwIHRyYWNrIG9mIHRoZSBtaW5pbXVtCiAgICAgICAgIyB0aW1lc3RhbXAgc28gd2UgZG9uJ3QgaGF2ZSB0byBkbyBhbiBpdGVyYXRpb24gaGVyZS4KICAgICAgICBmb3Igd3YgaW4gaW5wdXRfYnVuZGxlLmdldF9lbGVtZW50c19pdGVyYWJsZSgpOgogICAgICAgICAgaGFzX3BlbmRpbmdfZWxlbWVudHMgPSBUcnVlCiAgICAgICAgICBpZiB3di50aW1lc3RhbXAgPCBtaW5fcGVuZGluZ190aW1lc3RhbXA6CiAgICAgICAgICAgIG1pbl9wZW5kaW5nX3RpbWVzdGFtcCA9IHd2LnRpbWVzdGFtcAoKICAgICAgIyBJZiB0aGVyZSBpcyBhIHBlbmRpbmcgZWxlbWVudCB3aXRoIGEgY2VydGFpbiB0aW1lc3RhbXAsIHdlIGNhbiBhdCBtb3N0CiAgICAgICMgYWR2YW5jZSBvdXIgd2F0ZXJtYXJrIHRvIHRoZSBtYXhpbXVtIHRpbWVzdGFtcCBsZXNzIHRoYW4gdGhhdAogICAgICAjIHRpbWVzdGFtcC4KICAgICAgcGVuZGluZ19ob2xkZXIgPSBXYXRlcm1hcmtNYW5hZ2VyLldBVEVSTUFSS19QT1NfSU5GCiAgICAgIGlmIGhhc19wZW5kaW5nX2VsZW1lbnRzOgogICAgICAgIHBlbmRpbmdfaG9sZGVyID0gbWluX3BlbmRpbmdfdGltZXN0YW1wIC0gVElNRV9HUkFOVUxBUklUWQoKICAgICAgaW5wdXRfd2F0ZXJtYXJrcyA9IFsKICAgICAgICAgIHR3Lm91dHB1dF93YXRlcm1hcmsgZm9yIHR3IGluIHNlbGYuX2lucHV0X3RyYW5zZm9ybV93YXRlcm1hcmtzXQogICAgICBpbnB1dF93YXRlcm1hcmtzLmFwcGVuZChXYXRlcm1hcmtNYW5hZ2VyLldBVEVSTUFSS19QT1NfSU5GKQogICAgICBwcm9kdWNlcl93YXRlcm1hcmsgPSBtaW4oaW5wdXRfd2F0ZXJtYXJrcykKCiAgICAgIHNlbGYuX2lucHV0X3dhdGVybWFyayA9IG1heChzZWxmLl9pbnB1dF93YXRlcm1hcmssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW4ocGVuZGluZ19ob2xkZXIsIHByb2R1Y2VyX3dhdGVybWFyaykpCiAgICAgIGVhcmxpZXN0X2hvbGQgPSBXYXRlcm1hcmtNYW5hZ2VyLldBVEVSTUFSS19QT1NfSU5GCiAgICAgIGZvciBob2xkIGluIHNlbGYuX2tleWVkX2VhcmxpZXN0X2hvbGRzLnZhbHVlcygpOgogICAgICAgIGlmIGhvbGQgPCBlYXJsaWVzdF9ob2xkOgogICAgICAgICAgZWFybGllc3RfaG9sZCA9IGhvbGQKICAgICAgbmV3X291dHB1dF93YXRlcm1hcmsgPSBtaW4oc2VsZi5faW5wdXRfd2F0ZXJtYXJrLCBlYXJsaWVzdF9ob2xkKQoKICAgICAgYWR2YW5jZWQgPSBuZXdfb3V0cHV0X3dhdGVybWFyayA+IHNlbGYuX291dHB1dF93YXRlcm1hcmsKICAgICAgc2VsZi5fb3V0cHV0X3dhdGVybWFyayA9IG5ld19vdXRwdXRfd2F0ZXJtYXJrCiAgICAgIHJldHVybiBhZHZhbmNlZAoKICBAcHJvcGVydHkKICBkZWYgc3luY2hyb25pemVkX3Byb2Nlc3Npbmdfb3V0cHV0X3RpbWUoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fY2xvY2sudGltZSgpCgogIGRlZiBleHRyYWN0X3RyYW5zZm9ybV90aW1lcnMoc2VsZik6CiAgICAiIiJFeHRyYWN0cyBmaXJlZCB0aW1lcnMgYW5kIHJlcG9ydHMgb2YgYW55IHRpbWVycyBzZXQgcGVyIHRyYW5zZm9ybS4iIiIKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgZmlyZWRfdGltZXJzID0gW10KICAgICAgaGFzX3JlYWx0aW1lX3RpbWVyID0gRmFsc2UKICAgICAgZm9yIGVuY29kZWRfa2V5LCBzdGF0ZSBpbiBzZWxmLl9rZXllZF9zdGF0ZXMuaXRlbXMoKToKICAgICAgICB0aW1lcnMsIGhhZF9yZWFsdGltZV90aW1lciA9IHN0YXRlLmdldF90aW1lcnMoCiAgICAgICAgICAgIHdhdGVybWFyaz1zZWxmLl9pbnB1dF93YXRlcm1hcmssCiAgICAgICAgICAgIHByb2Nlc3NpbmdfdGltZT1zZWxmLl9jbG9jay50aW1lKCkpCiAgICAgICAgaWYgaGFkX3JlYWx0aW1lX3RpbWVyOgogICAgICAgICAgaGFzX3JlYWx0aW1lX3RpbWVyID0gVHJ1ZQogICAgICAgIGZvciBleHBpcmVkIGluIHRpbWVyczoKICAgICAgICAgIHdpbmRvdywgKG5hbWUsIHRpbWVfZG9tYWluLCB0aW1lc3RhbXApID0gZXhwaXJlZAogICAgICAgICAgZmlyZWRfdGltZXJzLmFwcGVuZCgKICAgICAgICAgICAgICBUaW1lckZpcmluZyhlbmNvZGVkX2tleSwgd2luZG93LCBuYW1lLCB0aW1lX2RvbWFpbiwgdGltZXN0YW1wKSkKICAgICAgc2VsZi5fZmlyZWRfdGltZXJzLnVwZGF0ZShmaXJlZF90aW1lcnMpCiAgICAgIHJldHVybiBmaXJlZF90aW1lcnMsIGhhc19yZWFsdGltZV90aW1lcgp9chuCAAAoWCIAAABXYXRlcm1hcmtNYW5hZ2VyLnVwZGF0ZV93YXRlcm1hcmtzWAMAAABkZWZLYEtqh1ggAAAAV2F0ZXJtYXJrTWFuYWdlci5fdXBkYXRlX3BlbmRpbmdYAwAAAGRlZktrS4OHWCMAAABXYXRlcm1hcmtNYW5hZ2VyLmV4dHJhY3RfYWxsX3RpbWVyc1gDAAAAZGVmS5tLqIdYIAAAAF9UcmFuc2Zvcm1XYXRlcm1hcmtzLmFkZF9wZW5kaW5nWAMAAABkZWZL1UvYh1gUAAAAX1RyYW5zZm9ybVdhdGVybWFya3NYBQAAAGNsYXNzS6pNGQGHWCQAAABfVHJhbnNmb3JtV2F0ZXJtYXJrcy5pbnB1dF93YXRlcm1hcmtYAwAAAGRlZkvDS8eHWBkAAABXYXRlcm1hcmtNYW5hZ2VyLl9faW5pdF9fWAMAAABkZWZLKUs+h1gkAAAAV2F0ZXJtYXJrTWFuYWdlci5fcmVmcmVzaF93YXRlcm1hcmtzWAMAAABkZWZLhEuah1gfAAAAV2F0ZXJtYXJrTWFuYWdlci5nZXRfd2F0ZXJtYXJrc1gDAAAAZGVmS0tLX4dYEAAAAFdhdGVybWFya01hbmFnZXJYBQAAAGNsYXNzSyFLqIdYIgAAAF9UcmFuc2Zvcm1XYXRlcm1hcmtzLnVwZGF0ZV90aW1lcnNYAwAAAGRlZku+S8KHWC0AAABfVHJhbnNmb3JtV2F0ZXJtYXJrcy5leHRyYWN0X3RyYW5zZm9ybV90aW1lcnNYAwAAAGRlZk0IAU0ZAYdYOAAAAF9UcmFuc2Zvcm1XYXRlcm1hcmtzLnN5bmNocm9uaXplZF9wcm9jZXNzaW5nX291dHB1dF90aW1lWAMAAABkZWZNBAFNBwGHWDMAAABXYXRlcm1hcmtNYW5hZ2VyLl91cGRhdGVfaW5wdXRfdHJhbnNmb3JtX3dhdGVybWFya3NYAwAAAGRlZks/S0qHWB0AAABfVHJhbnNmb3JtV2F0ZXJtYXJrcy5fX2luaXRfX1gDAAAAZGVmS61LuYdYIwAAAF9UcmFuc2Zvcm1XYXRlcm1hcmtzLnJlbW92ZV9wZW5kaW5nWAMAAABkZWZL2Uvfh1gcAAAAX1RyYW5zZm9ybVdhdGVybWFya3MucmVmcmVzaFgDAAAAZGVmS+BNAwGHWCUAAABfVHJhbnNmb3JtV2F0ZXJtYXJrcy5vdXRwdXRfd2F0ZXJtYXJrWAMAAABkZWZLyEvMh1gZAAAAX1RyYW5zZm9ybVdhdGVybWFya3MuaG9sZFgDAAAAZGVmS81L1IdYNgAAAF9UcmFuc2Zvcm1XYXRlcm1hcmtzLnVwZGF0ZV9pbnB1dF90cmFuc2Zvcm1fd2F0ZXJtYXJrc1gDAAAAZGVmS7pLvYd1fXIcggAAKFgfAAAAV2F0ZXJtYXJrTWFuYWdlci5nZXRfd2F0ZXJtYXJrc2q7WQAAWCIAAABXYXRlcm1hcmtNYW5hZ2VyLnVwZGF0ZV93YXRlcm1hcmtzartZAABYIwAAAFdhdGVybWFya01hbmFnZXIuZXh0cmFjdF9hbGxfdGltZXJzartZAABYEAAAAFdhdGVybWFya01hbmFnZXJqu1kAAHVqfWkAAFgsAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Qud2F0ZXJtYXJrX21hbmFnZXJyHYIAAIWBch6CAAB9ch+CAABidFUgYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMoWHtfAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkEgbGlicmFyeSBvZiBiYXNpYyBjb21iaW5lciBQVHJhbnNmb3JtIHN1YmNsYXNzZXMuIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydApmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCgppbXBvcnQgaGVhcHEKaW1wb3J0IG9wZXJhdG9yCmltcG9ydCByYW5kb20KZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0CmZyb20gYnVpbHRpbnMgaW1wb3J0IHppcApmcm9tIGZ1bmN0b29scyBpbXBvcnQgY21wX3RvX2tleQoKZnJvbSBwYXN0LmJ1aWx0aW5zIGltcG9ydCBsb25nCgpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IGNvcmUKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBjeV9jb21iaW5lcnMKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBwdHJhbnNmb3JtCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgd2luZG93CmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5IGltcG9ydCBEaXNwbGF5RGF0YUl0ZW0KZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMgaW1wb3J0IEtWCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzIGltcG9ydCBBbnkKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMgaW1wb3J0IERpY3QKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMgaW1wb3J0IEl0ZXJhYmxlCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzIGltcG9ydCBMaXN0CmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzIGltcG9ydCBUdXBsZQpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cyBpbXBvcnQgVHlwZVZhcmlhYmxlCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzIGltcG9ydCBVbmlvbgpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cyBpbXBvcnQgd2l0aF9pbnB1dF90eXBlcwpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cyBpbXBvcnQgd2l0aF9vdXRwdXRfdHlwZXMKCl9fYWxsX18gPSBbCiAgICAnQ291bnQnLAogICAgJ01lYW4nLAogICAgJ1NhbXBsZScsCiAgICAnVG9wJywKICAgICdUb0RpY3QnLAogICAgJ1RvTGlzdCcsCiAgICBdCgojIFR5cGUgdmFyaWFibGVzClQgPSBUeXBlVmFyaWFibGUoJ1QnKQpLID0gVHlwZVZhcmlhYmxlKCdLJykKViA9IFR5cGVWYXJpYWJsZSgnVicpCgoKY2xhc3MgTWVhbihvYmplY3QpOgogICIiIkNvbWJpbmVycyBmb3IgY29tcHV0aW5nIGFyaXRobWV0aWMgbWVhbnMgb2YgZWxlbWVudHMuIiIiCgogIGNsYXNzIEdsb2JhbGx5KHB0cmFuc2Zvcm0uUFRyYW5zZm9ybSk6CiAgICAiIiJjb21iaW5lcnMuTWVhbi5HbG9iYWxseSBjb21wdXRlcyB0aGUgYXJpdGhtZXRpYyBtZWFuIG9mIHRoZSBlbGVtZW50cy4iIiIKCiAgICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgICAgcmV0dXJuIHBjb2xsIHwgY29yZS5Db21iaW5lR2xvYmFsbHkoTWVhbkNvbWJpbmVGbigpKQoKICBjbGFzcyBQZXJLZXkocHRyYW5zZm9ybS5QVHJhbnNmb3JtKToKICAgICIiImNvbWJpbmVycy5NZWFuLlBlcktleSBmaW5kcyB0aGUgbWVhbnMgb2YgdGhlIHZhbHVlcyBmb3IgZWFjaCBrZXkuIiIiCgogICAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICAgIHJldHVybiBwY29sbCB8IGNvcmUuQ29tYmluZVBlcktleShNZWFuQ29tYmluZUZuKCkpCgoKIyBUT0RPKGxhb2x1KTogVGhpcyB0eXBlIHNpZ25hdHVyZSBpcyBvdmVybHkgcmVzdHJpY3RpdmUuIFRoaXMgc2hvdWxkIGJlCiMgbW9yZSBnZW5lcmFsLgpAd2l0aF9pbnB1dF90eXBlcyhVbmlvbltmbG9hdCwgaW50LCBsb25nXSkKQHdpdGhfb3V0cHV0X3R5cGVzKGZsb2F0KQpjbGFzcyBNZWFuQ29tYmluZUZuKGNvcmUuQ29tYmluZUZuKToKICAiIiJDb21iaW5lRm4gZm9yIGNvbXB1dGluZyBhbiBhcml0aG1ldGljIG1lYW4uIiIiCgogIGRlZiBjcmVhdGVfYWNjdW11bGF0b3Ioc2VsZik6CiAgICByZXR1cm4gKDAsIDApCgogIGRlZiBhZGRfaW5wdXQoc2VsZiwgc3VtX2NvdW50LCBlbGVtZW50KToKICAgIChzdW1fLCBjb3VudCkgPSBzdW1fY291bnQKICAgIHJldHVybiBzdW1fICsgZWxlbWVudCwgY291bnQgKyAxCgogIGRlZiBtZXJnZV9hY2N1bXVsYXRvcnMoc2VsZiwgYWNjdW11bGF0b3JzKToKICAgIHN1bXMsIGNvdW50cyA9IHppcCgqYWNjdW11bGF0b3JzKQogICAgcmV0dXJuIHN1bShzdW1zKSwgc3VtKGNvdW50cykKCiAgZGVmIGV4dHJhY3Rfb3V0cHV0KHNlbGYsIHN1bV9jb3VudCk6CiAgICAoc3VtXywgY291bnQpID0gc3VtX2NvdW50CiAgICBpZiBjb3VudCA9PSAwOgogICAgICByZXR1cm4gZmxvYXQoJ05hTicpCiAgICByZXR1cm4gc3VtXyAvIGZsb2F0KGNvdW50KQoKICBkZWYgZm9yX2lucHV0X3R5cGUoc2VsZiwgaW5wdXRfdHlwZSk6CiAgICBpZiBpbnB1dF90eXBlIGlzIGludDoKICAgICAgcmV0dXJuIGN5X2NvbWJpbmVycy5NZWFuSW50NjRGbigpCiAgICBlbGlmIGlucHV0X3R5cGUgaXMgZmxvYXQ6CiAgICAgIHJldHVybiBjeV9jb21iaW5lcnMuTWVhbkZsb2F0Rm4oKQogICAgcmV0dXJuIHNlbGYKCgpjbGFzcyBDb3VudChvYmplY3QpOgogICIiIkNvbWJpbmVycyBmb3IgY291bnRpbmcgZWxlbWVudHMuIiIiCgogIGNsYXNzIEdsb2JhbGx5KHB0cmFuc2Zvcm0uUFRyYW5zZm9ybSk6CiAgICAiIiJjb21iaW5lcnMuQ291bnQuR2xvYmFsbHkgY291bnRzIHRoZSB0b3RhbCBudW1iZXIgb2YgZWxlbWVudHMuIiIiCgogICAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICAgIHJldHVybiBwY29sbCB8IGNvcmUuQ29tYmluZUdsb2JhbGx5KENvdW50Q29tYmluZUZuKCkpCgogIGNsYXNzIFBlcktleShwdHJhbnNmb3JtLlBUcmFuc2Zvcm0pOgogICAgIiIiY29tYmluZXJzLkNvdW50LlBlcktleSBjb3VudHMgaG93IG1hbnkgZWxlbWVudHMgZWFjaCB1bmlxdWUga2V5IGhhcy4iIiIKCiAgICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgICAgcmV0dXJuIHBjb2xsIHwgY29yZS5Db21iaW5lUGVyS2V5KENvdW50Q29tYmluZUZuKCkpCgogIGNsYXNzIFBlckVsZW1lbnQocHRyYW5zZm9ybS5QVHJhbnNmb3JtKToKICAgICIiImNvbWJpbmVycy5Db3VudC5QZXJFbGVtZW50IGNvdW50cyBob3cgbWFueSB0aW1lcyBlYWNoIGVsZW1lbnQgb2NjdXJzLiIiIgoKICAgIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgICBwYWlyZWRfd2l0aF92b2lkX3R5cGUgPSBLVltwY29sbC5lbGVtZW50X3R5cGUsIEFueV0KICAgICAgcmV0dXJuIChwY29sbAogICAgICAgICAgICAgIHwgKCclczpQYWlyV2l0aFZvaWQnICUgc2VsZi5sYWJlbCA+PiBjb3JlLk1hcChsYW1iZGEgeDogKHgsIE5vbmUpKQogICAgICAgICAgICAgICAgIC53aXRoX291dHB1dF90eXBlcyhwYWlyZWRfd2l0aF92b2lkX3R5cGUpKQogICAgICAgICAgICAgIHwgY29yZS5Db21iaW5lUGVyS2V5KENvdW50Q29tYmluZUZuKCkpKQoKCkB3aXRoX2lucHV0X3R5cGVzKEFueSkKQHdpdGhfb3V0cHV0X3R5cGVzKGludCkKY2xhc3MgQ291bnRDb21iaW5lRm4oY29yZS5Db21iaW5lRm4pOgogICIiIkNvbWJpbmVGbiBmb3IgY29tcHV0aW5nIFBDb2xsZWN0aW9uIHNpemUuIiIiCgogIGRlZiBjcmVhdGVfYWNjdW11bGF0b3Ioc2VsZik6CiAgICByZXR1cm4gMAoKICBkZWYgYWRkX2lucHV0KHNlbGYsIGFjY3VtdWxhdG9yLCBlbGVtZW50KToKICAgIHJldHVybiBhY2N1bXVsYXRvciArIDEKCiAgZGVmIGFkZF9pbnB1dHMoc2VsZiwgYWNjdW11bGF0b3IsIGVsZW1lbnRzKToKICAgIHJldHVybiBhY2N1bXVsYXRvciArIGxlbihsaXN0KGVsZW1lbnRzKSkKCiAgZGVmIG1lcmdlX2FjY3VtdWxhdG9ycyhzZWxmLCBhY2N1bXVsYXRvcnMpOgogICAgcmV0dXJuIHN1bShhY2N1bXVsYXRvcnMpCgogIGRlZiBleHRyYWN0X291dHB1dChzZWxmLCBhY2N1bXVsYXRvcik6CiAgICByZXR1cm4gYWNjdW11bGF0b3IKCgpjbGFzcyBUb3Aob2JqZWN0KToKICAiIiJDb21iaW5lcnMgZm9yIG9idGFpbmluZyBleHRyZW1hbCBlbGVtZW50cy4iIiIKICAjIHB5bGludDogZGlzYWJsZT1uby1zZWxmLWFyZ3VtZW50CgogIGNsYXNzIE9mKHB0cmFuc2Zvcm0uUFRyYW5zZm9ybSk6CiAgICAiIiJPYnRhaW4gYSBsaXN0IG9mIHRoZSBjb21wYXJlLW1vc3QgTiBlbGVtZW50cyBpbiBhIFBDb2xsZWN0aW9uLgoKICAgIFRoaXMgdHJhbnNmb3JtIHdpbGwgcmV0cmlldmUgdGhlIG4gZ3JlYXRlc3QgZWxlbWVudHMgaW4gdGhlIFBDb2xsZWN0aW9uCiAgICB0byB3aGljaCBpdCBpcyBhcHBsaWVkLCB3aGVyZSAiZ3JlYXRlc3QiIGlzIGRldGVybWluZWQgYnkgdGhlIGNvbXBhcmF0b3IKICAgIGZ1bmN0aW9uIHN1cHBsaWVkIGFzIHRoZSBjb21wYXJlIGFyZ3VtZW50LgogICAgIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG4sIGNvbXBhcmU9Tm9uZSwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgIiIiSW5pdGlhbGl6ZXIuCgogICAgICBjb21wYXJlIHNob3VsZCBiZSBhbiBpbXBsZW1lbnRhdGlvbiBvZiAiYSA8IGIiIHRha2luZyBhdCBsZWFzdCB0d28KICAgICAgYXJndW1lbnRzIChhIGFuZCBiKS4gQWRkaXRpb25hbCBhcmd1bWVudHMgYW5kIHNpZGUgaW5wdXRzIHNwZWNpZmllZCBpbgogICAgICB0aGUgYXBwbHkgY2FsbCBiZWNvbWUgYWRkaXRpb25hbCBhcmd1bWVudHMgdG8gdGhlIGNvbXBhcmF0b3IuIERlZmF1bHRzIHRvCiAgICAgIHRoZSBuYXR1cmFsIG9yZGVyaW5nIG9mIHRoZSBlbGVtZW50cy4KICAgICAgVGhlIGFyZ3VtZW50cyAna2V5JyBhbmQgJ3JldmVyc2UnIG1heSBpbnN0ZWFkIGJlIHBhc3NlZCBhcyBrZXl3b3JkCiAgICAgIGFyZ3VtZW50cywgYW5kIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBhcyBmb3IgUHl0aG9uJ3Mgc29ydCBmdW5jdGlvbnMuCgogICAgICBBcmdzOgogICAgICAgIHBjb2xsOiBQQ29sbGVjdGlvbiB0byBwcm9jZXNzLgogICAgICAgIG46IG51bWJlciBvZiBlbGVtZW50cyB0byBleHRyYWN0IGZyb20gcGNvbGwuCiAgICAgICAgY29tcGFyZTogYXMgZGVzY3JpYmVkIGFib3ZlLgogICAgICAgICphcmdzOiBhcyBkZXNjcmliZWQgYWJvdmUuCiAgICAgICAgKiprd2FyZ3M6IGFzIGRlc2NyaWJlZCBhYm92ZS4KICAgICAgIiIiCiAgICAgIHNlbGYuX24gPSBuCiAgICAgIHNlbGYuX2NvbXBhcmUgPSBjb21wYXJlCiAgICAgIHNlbGYuX2tleSA9IGt3YXJncy5wb3AoJ2tleScsIE5vbmUpCiAgICAgIHNlbGYuX3JldmVyc2UgPSBrd2FyZ3MucG9wKCdyZXZlcnNlJywgRmFsc2UpCiAgICAgIHNlbGYuX2FyZ3MgPSBhcmdzCiAgICAgIHNlbGYuX2t3YXJncyA9IGt3YXJncwoKICAgIGRlZiBkZWZhdWx0X2xhYmVsKHNlbGYpOgogICAgICByZXR1cm4gJ1RvcCglZCknICUgc2VsZi5fbgoKICAgIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgICBjb21wYXJlID0gc2VsZi5fY29tcGFyZQogICAgICBpZiAobm90IHNlbGYuX2FyZ3MgYW5kIG5vdCBzZWxmLl9rd2FyZ3MgYW5kCiAgICAgICAgICBub3Qgc2VsZi5fa2V5IGFuZCBwY29sbC53aW5kb3dpbmcuaXNfZGVmYXVsdCgpKToKICAgICAgICBpZiBzZWxmLl9yZXZlcnNlOgogICAgICAgICAgaWYgY29tcGFyZSBpcyBOb25lIG9yIGNvbXBhcmUgaXMgb3BlcmF0b3IubHQ6CiAgICAgICAgICAgIGNvbXBhcmUgPSBvcGVyYXRvci5ndAogICAgICAgICAgZWxzZToKICAgICAgICAgICAgb3JpZ2luYWxfY29tcGFyZSA9IGNvbXBhcmUKICAgICAgICAgICAgY29tcGFyZSA9IGxhbWJkYSBhLCBiOiBvcmlnaW5hbF9jb21wYXJlKGIsIGEpCiAgICAgICAgIyBUaGlzIGlzIGEgbW9yZSBlZmZpY2llbnQgZ2xvYmFsIGFsZ29yaXRobS4KICAgICAgICB0b3BfcGVyX2J1bmRsZSA9IHBjb2xsIHwgY29yZS5QYXJEbyhfVG9wUGVyQnVuZGxlKHNlbGYuX24sIGNvbXBhcmUpKQogICAgICAgICMgSWYgcGNvbGwgaXMgZW1wdHksIHdlIGNhbid0IGd1ZXJlbnRlZSB0aGF0IHRvcF9wZXJfYnVuZGxlCiAgICAgICAgIyB3b24ndCBiZSBlbXB0eSwgc28gaW5qZWN0IGF0IGxlYXN0IG9uZSBlbXB0eSBhY2N1bXVsYXRvcgogICAgICAgICMgc28gdGhhdCBkb3duc3RyZWFtIGlzIGd1ZXJlbnRlZWQgdG8gcHJvZHVjZSBub24tZW1wdHkgb3V0cHV0LgogICAgICAgIGVtcHR5X2J1bmRsZSA9IHBjb2xsLnBpcGVsaW5lIHwgY29yZS5DcmVhdGUoWyhOb25lLCBbXSldKQogICAgICAgIHJldHVybiAoCiAgICAgICAgICAgICh0b3BfcGVyX2J1bmRsZSwgZW1wdHlfYnVuZGxlKSB8IGNvcmUuRmxhdHRlbigpCiAgICAgICAgICAgIHwgY29yZS5Hcm91cEJ5S2V5KCkKICAgICAgICAgICAgfCBjb3JlLlBhckRvKF9NZXJnZVRvcFBlckJ1bmRsZShzZWxmLl9uLCBjb21wYXJlKSkpCiAgICAgIGVsc2U6CiAgICAgICAgcmV0dXJuIHBjb2xsIHwgY29yZS5Db21iaW5lR2xvYmFsbHkoCiAgICAgICAgICAgIFRvcENvbWJpbmVGbihzZWxmLl9uLCBjb21wYXJlLCBzZWxmLl9rZXksIHNlbGYuX3JldmVyc2UpLAogICAgICAgICAgICAqc2VsZi5fYXJncywgKipzZWxmLl9rd2FyZ3MpCgogIGNsYXNzIFBlcktleShwdHJhbnNmb3JtLlBUcmFuc2Zvcm0pOgogICAgIiIiSWRlbnRpZmllcyB0aGUgY29tcGFyZS1tb3N0IE4gZWxlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGVhY2gga2V5LgoKICAgIFRoaXMgdHJhbnNmb3JtIHdpbGwgcHJvZHVjZSBhIFBDb2xsZWN0aW9uIG1hcHBpbmcgdW5pcXVlIGtleXMgaW4gdGhlIGlucHV0CiAgICBQQ29sbGVjdGlvbiB0byB0aGUgbiBncmVhdGVzdCBlbGVtZW50cyB3aXRoIHdoaWNoIHRoZXkgYXJlIGFzc29jaWF0ZWQsIHdoZXJlCiAgICAiZ3JlYXRlc3QiIGlzIGRldGVybWluZWQgYnkgdGhlIGNvbXBhcmF0b3IgZnVuY3Rpb24gc3VwcGxpZWQgYXMgdGhlIGNvbXBhcmUKICAgIGFyZ3VtZW50IGluIHRoZSBpbml0aWFsaXplci4KICAgICIiIgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG4sIGNvbXBhcmU9Tm9uZSwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgIiIiSW5pdGlhbGl6ZXIuCgogICAgICBjb21wYXJlIHNob3VsZCBiZSBhbiBpbXBsZW1lbnRhdGlvbiBvZiAiYSA8IGIiIHRha2luZyBhdCBsZWFzdCB0d28KICAgICAgYXJndW1lbnRzIChhIGFuZCBiKS4gQWRkaXRpb25hbCBhcmd1bWVudHMgYW5kIHNpZGUgaW5wdXRzIHNwZWNpZmllZCBpbgogICAgICB0aGUgYXBwbHkgY2FsbCBiZWNvbWUgYWRkaXRpb25hbCBhcmd1bWVudHMgdG8gdGhlIGNvbXBhcmF0b3IuICBEZWZhdWx0cyB0bwogICAgICB0aGUgbmF0dXJhbCBvcmRlcmluZyBvZiB0aGUgZWxlbWVudHMuCgogICAgICBUaGUgYXJndW1lbnRzICdrZXknIGFuZCAncmV2ZXJzZScgbWF5IGluc3RlYWQgYmUgcGFzc2VkIGFzIGtleXdvcmQKICAgICAgYXJndW1lbnRzLCBhbmQgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIGFzIGZvciBQeXRob24ncyBzb3J0IGZ1bmN0aW9ucy4KCiAgICAgIEFyZ3M6CiAgICAgICAgbjogbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGV4dHJhY3QgZnJvbSBpbnB1dC4KICAgICAgICBjb21wYXJlOiBhcyBkZXNjcmliZWQgYWJvdmUuCiAgICAgICAgKmFyZ3M6IGFzIGRlc2NyaWJlZCBhYm92ZS4KICAgICAgICAqKmt3YXJnczogYXMgZGVzY3JpYmVkIGFib3ZlLgogICAgICAiIiIKICAgICAgc2VsZi5fbiA9IG4KICAgICAgc2VsZi5fY29tcGFyZSA9IGNvbXBhcmUKICAgICAgc2VsZi5fa2V5ID0ga3dhcmdzLnBvcCgna2V5JywgTm9uZSkKICAgICAgc2VsZi5fcmV2ZXJzZSA9IGt3YXJncy5wb3AoJ3JldmVyc2UnLCBGYWxzZSkKICAgICAgc2VsZi5fYXJncyA9IGFyZ3MKICAgICAgc2VsZi5fa3dhcmdzID0ga3dhcmdzCgogICAgZGVmIGRlZmF1bHRfbGFiZWwoc2VsZik6CiAgICAgIHJldHVybiAnVG9wUGVyS2V5KCVkKScgJSBzZWxmLl9uCgogICAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICAgICIiIkV4cGFuZHMgdGhlIHRyYW5zZm9ybS4KCiAgICAgIFJhaXNlcyBUeXBlQ2hlY2tFcnJvcjogSWYgdGhlIG91dHB1dCB0eXBlIG9mIHRoZSBpbnB1dCBQQ29sbGVjdGlvbiBpcyBub3QKICAgICAgY29tcGF0aWJsZSB3aXRoIEtWW0EsIEJdLgoKICAgICAgQXJnczoKICAgICAgICBwY29sbDogUENvbGxlY3Rpb24gdG8gcHJvY2VzcwoKICAgICAgUmV0dXJuczoKICAgICAgICB0aGUgUENvbGxlY3Rpb24gY29udGFpbmluZyB0aGUgcmVzdWx0LgogICAgICAiIiIKICAgICAgcmV0dXJuIHBjb2xsIHwgY29yZS5Db21iaW5lUGVyS2V5KAogICAgICAgICAgVG9wQ29tYmluZUZuKHNlbGYuX24sIHNlbGYuX2NvbXBhcmUsIHNlbGYuX2tleSwgc2VsZi5fcmV2ZXJzZSksCiAgICAgICAgICAqc2VsZi5fYXJncywgKipzZWxmLl9rd2FyZ3MpCgogIEBzdGF0aWNtZXRob2QKICBAcHRyYW5zZm9ybS5wdHJhbnNmb3JtX2ZuCiAgZGVmIExhcmdlc3QocGNvbGwsIG4pOgogICAgIiIiT2J0YWluIGEgbGlzdCBvZiB0aGUgZ3JlYXRlc3QgTiBlbGVtZW50cyBpbiBhIFBDb2xsZWN0aW9uLiIiIgogICAgcmV0dXJuIHBjb2xsIHwgVG9wLk9mKG4pCgogIEBzdGF0aWNtZXRob2QKICBAcHRyYW5zZm9ybS5wdHJhbnNmb3JtX2ZuCiAgZGVmIFNtYWxsZXN0KHBjb2xsLCBuKToKICAgICIiIk9idGFpbiBhIGxpc3Qgb2YgdGhlIGxlYXN0IE4gZWxlbWVudHMgaW4gYSBQQ29sbGVjdGlvbi4iIiIKICAgIHJldHVybiBwY29sbCB8IFRvcC5PZihuLCByZXZlcnNlPVRydWUpCgogIEBzdGF0aWNtZXRob2QKICBAcHRyYW5zZm9ybS5wdHJhbnNmb3JtX2ZuCiAgZGVmIExhcmdlc3RQZXJLZXkocGNvbGwsIG4pOgogICAgIiIiSWRlbnRpZmllcyB0aGUgTiBncmVhdGVzdCBlbGVtZW50cyBhc3NvY2lhdGVkIHdpdGggZWFjaCBrZXkuIiIiCiAgICByZXR1cm4gcGNvbGwgfCBUb3AuUGVyS2V5KG4pCgogIEBzdGF0aWNtZXRob2QKICBAcHRyYW5zZm9ybS5wdHJhbnNmb3JtX2ZuCiAgZGVmIFNtYWxsZXN0UGVyS2V5KHBjb2xsLCBuLCByZXZlcnNlPVRydWUpOgogICAgIiIiSWRlbnRpZmllcyB0aGUgTiBsZWFzdCBlbGVtZW50cyBhc3NvY2lhdGVkIHdpdGggZWFjaCBrZXkuIiIiCiAgICByZXR1cm4gcGNvbGwgfCBUb3AuUGVyS2V5KG4sIHJldmVyc2U9VHJ1ZSkKCgpjbGFzcyBfQ29tcGFyYWJsZVZhbHVlKG9iamVjdCk6CgogIF9fc2xvdHNfXyA9ICgndmFsdWUnLCAnbGVzc190aGFuJykKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlLCBsZXNzX3RoYW4pOgogICAgc2VsZi52YWx1ZSA9IHZhbHVlCiAgICBzZWxmLmxlc3NfdGhhbiA9IGxlc3NfdGhhbgoKICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiBzZWxmLmxlc3NfdGhhbihzZWxmLnZhbHVlLCBvdGhlci52YWx1ZSkKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICJfQ29tcGFyYWJsZVZhbHVlWyVzXSIgJSBzZWxmLnZhbHVlCgoKQHdpdGhfaW5wdXRfdHlwZXMoVCkKQHdpdGhfb3V0cHV0X3R5cGVzKEtWW05vbmUsIExpc3RbVF1dKQpjbGFzcyBfVG9wUGVyQnVuZGxlKGNvcmUuRG9Gbik6CiAgZGVmIF9faW5pdF9fKHNlbGYsIG4sIGxlc3NfdGhhbik6CiAgICBzZWxmLl9uID0gbgogICAgc2VsZi5fbGVzc190aGFuID0gTm9uZSBpZiBsZXNzX3RoYW4gaXMgb3BlcmF0b3IubGUgZWxzZSBsZXNzX3RoYW4KCiAgZGVmIHN0YXJ0X2J1bmRsZShzZWxmKToKICAgIHNlbGYuX2hlYXAgPSBbXQoKICBkZWYgcHJvY2VzcyhzZWxmLCBlbGVtZW50KToKICAgIGlmIHNlbGYuX2xlc3NfdGhhbiBpcyBub3QgTm9uZToKICAgICAgZWxlbWVudCA9IF9Db21wYXJhYmxlVmFsdWUoZWxlbWVudCwgc2VsZi5fbGVzc190aGFuKQogICAgaWYgbGVuKHNlbGYuX2hlYXApIDwgc2VsZi5fbjoKICAgICAgaGVhcHEuaGVhcHB1c2goc2VsZi5faGVhcCwgZWxlbWVudCkKICAgIGVsc2U6CiAgICAgIGhlYXBxLmhlYXBwdXNocG9wKHNlbGYuX2hlYXAsIGVsZW1lbnQpCgogIGRlZiBmaW5pc2hfYnVuZGxlKHNlbGYpOgogICAgIyBUaG91Z2ggc29ydGluZyBoZXJlIHJlc3VsdHMgaW4gbW9yZSB0b3RhbCB3b3JrLCB0aGlzIGFsbG93cyB1cyB0bwogICAgIyBza2lwIG1vc3QgZWxlbWVudHMgaW4gdGhlIHJlZHVjZXIuCiAgICAjIEVzc2VudGlhbGx5LCBnaXZlbiBzIG1hcCBidW5kbGVzLCB3ZSBhcmUgdHJhZGluZyBhYm91dCBPKHNuKSBjb21wYXJlcyBpbgogICAgIyB0aGUgKHNpbmdsZSkgcmVkdWNlciBmb3IgTyhzbiBsb2cgbikgY29tcGFyZXMgYWNyb3NzIGFsbCBtYXBwZXJzLgogICAgc2VsZi5faGVhcC5zb3J0KCkKCiAgICAjIFVud3JhcCB0byBhdm9pZCBzZXJpYWxpemF0aW9uIHZpYSBwaWNrbGUuCiAgICBpZiBzZWxmLl9sZXNzX3RoYW46CiAgICAgIHlpZWxkIHdpbmRvdy5HbG9iYWxXaW5kb3dzLndpbmRvd2VkX3ZhbHVlKAogICAgICAgICAgKE5vbmUsIFt3cmFwcGVyLnZhbHVlIGZvciB3cmFwcGVyIGluIHNlbGYuX2hlYXBdKSkKICAgIGVsc2U6CiAgICAgIHlpZWxkIHdpbmRvdy5HbG9iYWxXaW5kb3dzLndpbmRvd2VkX3ZhbHVlKAogICAgICAgICAgKE5vbmUsIHNlbGYuX2hlYXApKQoKCkB3aXRoX2lucHV0X3R5cGVzKEtWW05vbmUsIEl0ZXJhYmxlW0xpc3RbVF1dXSkKQHdpdGhfb3V0cHV0X3R5cGVzKExpc3RbVF0pCmNsYXNzIF9NZXJnZVRvcFBlckJ1bmRsZShjb3JlLkRvRm4pOgogIGRlZiBfX2luaXRfXyhzZWxmLCBuLCBsZXNzX3RoYW4pOgogICAgc2VsZi5fbiA9IG4KICAgIHNlbGYuX2xlc3NfdGhhbiA9IE5vbmUgaWYgbGVzc190aGFuIGlzIG9wZXJhdG9yLmxlIGVsc2UgbGVzc190aGFuCgogIGRlZiBwcm9jZXNzKHNlbGYsIGtleV9hbmRfYnVuZGxlcyk6CiAgICBfLCBidW5kbGVzID0ga2V5X2FuZF9idW5kbGVzCiAgICBoZWFwID0gW10KICAgIGZvciBidW5kbGUgaW4gYnVuZGxlczoKICAgICAgaWYgbm90IGhlYXA6CiAgICAgICAgaWYgc2VsZi5fbGVzc190aGFuOgogICAgICAgICAgaGVhcCA9IFsKICAgICAgICAgICAgICBfQ29tcGFyYWJsZVZhbHVlKGVsZW1lbnQsIHNlbGYuX2xlc3NfdGhhbikgZm9yIGVsZW1lbnQgaW4gYnVuZGxlXQogICAgICAgIGVsc2U6CiAgICAgICAgICBoZWFwID0gYnVuZGxlCiAgICAgICAgY29udGludWUKICAgICAgZm9yIGVsZW1lbnQgaW4gcmV2ZXJzZWQoYnVuZGxlKToKICAgICAgICBpZiBzZWxmLl9sZXNzX3RoYW4gaXMgbm90IE5vbmU6CiAgICAgICAgICBlbGVtZW50ID0gX0NvbXBhcmFibGVWYWx1ZShlbGVtZW50LCBzZWxmLl9sZXNzX3RoYW4pCiAgICAgICAgaWYgbGVuKGhlYXApIDwgc2VsZi5fbjoKICAgICAgICAgIGhlYXBxLmhlYXBwdXNoKGhlYXAsIGVsZW1lbnQpCiAgICAgICAgZWxpZiBlbGVtZW50IDw9IGhlYXBbMF06CiAgICAgICAgICAjIEJlY2F1c2UgX1RvcFBlckJ1bmRsZSByZXR1cm5zIHNvcnRlZCBsaXN0cywgYWxsIG90aGVyIGVsZW1lbnRzCiAgICAgICAgICAjIHdpbGwgYWxzbyBiZSBzbWFsbGVyLgogICAgICAgICAgYnJlYWsKICAgICAgICBlbHNlOgogICAgICAgICAgaGVhcHEuaGVhcHB1c2hwb3AoaGVhcCwgZWxlbWVudCkKCiAgICBoZWFwLnNvcnQoKQogICAgaWYgc2VsZi5fbGVzc190aGFuOgogICAgICB5aWVsZCBbd3JhcHBlci52YWx1ZSBmb3Igd3JhcHBlciBpbiByZXZlcnNlZChoZWFwKV0KICAgIGVsc2U6CiAgICAgIHlpZWxkIGhlYXBbOjotMV0KCgpAd2l0aF9pbnB1dF90eXBlcyhUKQpAd2l0aF9vdXRwdXRfdHlwZXMoTGlzdFtUXSkKY2xhc3MgVG9wQ29tYmluZUZuKGNvcmUuQ29tYmluZUZuKToKICAiIiJDb21iaW5lRm4gZG9pbmcgdGhlIGNvbWJpbmluZyBmb3IgYWxsIG9mIHRoZSBUb3AgdHJhbnNmb3Jtcy4KCiAgVGhpcyBDb21iaW5lRm4gdXNlcyBhIGtleSBvciBjb21wYXJpc29uIG9wZXJhdG9yIHRvIHJhbmsgdGhlIGVsZW1lbnRzLgoKICBBcmdzOgogICAgY29tcGFyZTogKG9wdGlvbmFsKSBhbiBpbXBsZW1lbnRhdGlvbiBvZiAiYSA8IGIiIHRha2luZyBhdCBsZWFzdCB0d28KICAgICAgICBhcmd1bWVudHMgKGEgYW5kIGIpLiBBZGRpdGlvbmFsIGFyZ3VtZW50cyBhbmQgc2lkZSBpbnB1dHMgc3BlY2lmaWVkCiAgICAgICAgaW4gdGhlIGFwcGx5IGNhbGwgYmVjb21lIGFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHRoZSBjb21wYXJhdG9yLgogICAga2V5OiAob3B0aW9uYWwpIGEgbWFwcGluZyBvZiBlbGVtZW50cyB0byBhIGNvbXBhcmFibGUga2V5LCBzaW1pbGFyIHRvCiAgICAgICAgdGhlIGtleSBhcmd1bWVudCBvZiBQeXRob24ncyBzb3J0aW5nIG1ldGhvZHMuCiAgICByZXZlcnNlOiAob3B0aW9uYWwpIHdoZXRoZXIgdG8gb3JkZXIgdGhpbmdzIHNtYWxsZXN0IHRvIGxhcmdlc3QsIHJhdGhlcgogICAgICAgIHRoYW4gbGFyZ2VzdCB0byBzbWFsbGVzdAogICIiIgoKICBfTUlOX0JVRkZFUl9PVkVSU0laRSA9IDEwMAogIF9NQVhfQlVGRkVSX09WRVJTSVpFID0gMTAwMAoKICAjIFRPRE8ocm9iZXJ0d2IpOiBBbGxvdyB0YWtpbmcgYSBrZXkgcmF0aGVyIHRoYW4gYSBjb21wYXJlLgogIGRlZiBfX2luaXRfXyhzZWxmLCBuLCBjb21wYXJlPU5vbmUsIGtleT1Ob25lLCByZXZlcnNlPUZhbHNlKToKICAgIHNlbGYuX24gPSBuCiAgICBzZWxmLl9idWZmZXJfc2l6ZSA9IG1heCgKICAgICAgICBtaW4oMiAqIG4sIG4gKyBUb3BDb21iaW5lRm4uX01BWF9CVUZGRVJfT1ZFUlNJWkUpLAogICAgICAgIG4gKyBUb3BDb21iaW5lRm4uX01JTl9CVUZGRVJfT1ZFUlNJWkUpCgogICAgaWYgY29tcGFyZSBpcyBvcGVyYXRvci5sdDoKICAgICAgY29tcGFyZSA9IE5vbmUKICAgIGVsaWYgY29tcGFyZSBpcyBvcGVyYXRvci5ndDoKICAgICAgY29tcGFyZSA9IE5vbmUKICAgICAgcmV2ZXJzZSA9IG5vdCByZXZlcnNlCgogICAgaWYgY29tcGFyZToKICAgICAgc2VsZi5fY29tcGFyZSA9ICgKICAgICAgICAgIChsYW1iZGEgYSwgYiwgKmFyZ3MsICoqa3dhcmdzOiBub3QgY29tcGFyZShhLCBiLCAqYXJncywgKiprd2FyZ3MpKQogICAgICAgICAgaWYgcmV2ZXJzZQogICAgICAgICAgZWxzZSBjb21wYXJlKQogICAgZWxzZToKICAgICAgc2VsZi5fY29tcGFyZSA9IG9wZXJhdG9yLmd0IGlmIHJldmVyc2UgZWxzZSBvcGVyYXRvci5sdAoKICAgIHNlbGYuX2tleV9mbiA9IGtleQogICAgc2VsZi5fcmV2ZXJzZSA9IHJldmVyc2UKCiAgZGVmIF9zb3J0X2J1ZmZlcihzZWxmLCBidWZmZXIsIGx0KToKICAgIGlmIGx0IGluIChvcGVyYXRvci5ndCwgb3BlcmF0b3IubHQpOgogICAgICBidWZmZXIuc29ydChrZXk9c2VsZi5fa2V5X2ZuLCByZXZlcnNlPXNlbGYuX3JldmVyc2UpCiAgICBlbGlmIHNlbGYuX2tleV9mbjoKICAgICAgYnVmZmVyLnNvcnQoa2V5PWNtcF90b19rZXkoCiAgICAgICAgICAobGFtYmRhIGEsIGI6IChub3QgbHQoc2VsZi5fa2V5X2ZuKGEpLCBzZWxmLl9rZXlfZm4oYikpKQogICAgICAgICAgIC0gKG5vdCBsdChzZWxmLl9rZXlfZm4oYiksIHNlbGYuX2tleV9mbihhKSkpKSkpCiAgICBlbHNlOgogICAgICBidWZmZXIuc29ydChrZXk9Y21wX3RvX2tleShsYW1iZGEgYSwgYjogKG5vdCBsdChhLCBiKSkgLSAobm90IGx0KGIsIGEpKSkpCgogIGRlZiBkaXNwbGF5X2RhdGEoc2VsZik6CiAgICByZXR1cm4geyduJzogc2VsZi5fbiwKICAgICAgICAgICAgJ2NvbXBhcmUnOiBEaXNwbGF5RGF0YUl0ZW0oc2VsZi5fY29tcGFyZS5fX25hbWVfXwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKHNlbGYuX2NvbXBhcmUsICdfX25hbWVfXycpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugc2VsZi5fY29tcGFyZS5fX2NsYXNzX18uX19uYW1lX18pCiAgICAgICAgICAgICAgICAgICAgICAgLmRyb3BfaWZfbm9uZSgpfQoKICAjIFRoZSBhY2N1bXVsYXRvciB0eXBlIGlzIGEgdHVwbGUgKHRocmVzaG9sZCwgYnVmZmVyKSwgd2hlcmUgdGhyZXNob2xkCiAgIyBpcyB0aGUgc21hbGxlc3QgZWxlbWVudCBba2V5XSB0aGF0IGNvdWxkIHBvc3NpYmx5IGJlIGluIHRoZSB0b3AgbiBiYXNlZAogICMgb24gdGhlIGVsZW1lbnRzIG9ic2VydmVkIHNvIGZhciwgYW5kIGJ1ZmZlciBpcyBhIChwZXJpb2RpY2FsbHkgc29ydGVkKQogICMgbGlzdCBvZiBjYW5kaWRhdGVzIG9mIGJvdW5kZWQgc2l6ZS4KCiAgZGVmIGNyZWF0ZV9hY2N1bXVsYXRvcihzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgcmV0dXJuIE5vbmUsIFtdCgogIGRlZiBhZGRfaW5wdXQoc2VsZiwgYWNjdW11bGF0b3IsIGVsZW1lbnQsICphcmdzLCAqKmt3YXJncyk6CiAgICBpZiBhcmdzIG9yIGt3YXJnczoKICAgICAgbHQgPSBsYW1iZGEgYSwgYjogc2VsZi5fY29tcGFyZShhLCBiLCAqYXJncywgKiprd2FyZ3MpCiAgICBlbHNlOgogICAgICBsdCA9IHNlbGYuX2NvbXBhcmUKCiAgICB0aHJlc2hvbGQsIGJ1ZmZlciA9IGFjY3VtdWxhdG9yCiAgICBlbGVtZW50X2tleSA9IHNlbGYuX2tleV9mbihlbGVtZW50KSBpZiBzZWxmLl9rZXlfZm4gZWxzZSBlbGVtZW50CgogICAgaWYgbGVuKGJ1ZmZlcikgPCBzZWxmLl9uOgogICAgICBpZiBub3QgYnVmZmVyOgogICAgICAgIHJldHVybiBlbGVtZW50X2tleSwgW2VsZW1lbnRdCiAgICAgIGJ1ZmZlci5hcHBlbmQoZWxlbWVudCkKICAgICAgaWYgbHQoZWxlbWVudF9rZXksIHRocmVzaG9sZCk6ICAjIGVsZW1lbnRfa2V5IDwgdGhyZXNob2xkCiAgICAgICAgcmV0dXJuIGVsZW1lbnRfa2V5LCBidWZmZXIKICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yICAjIHdpdGggbXV0YXRlZCBidWZmZXIKICAgIGVsaWYgbHQodGhyZXNob2xkLCBlbGVtZW50X2tleSk6ICAjIHRocmVzaG9sZCA8IGVsZW1lbnRfa2V5CiAgICAgIGJ1ZmZlci5hcHBlbmQoZWxlbWVudCkKICAgICAgaWYgbGVuKGJ1ZmZlcikgPCBzZWxmLl9idWZmZXJfc2l6ZToKICAgICAgICByZXR1cm4gYWNjdW11bGF0b3IKICAgICAgc2VsZi5fc29ydF9idWZmZXIoYnVmZmVyLCBsdCkKICAgICAgbWluX2VsZW1lbnQgPSBidWZmZXJbLXNlbGYuX25dCiAgICAgIHRocmVzaG9sZCA9IHNlbGYuX2tleV9mbihtaW5fZWxlbWVudCkgaWYgc2VsZi5fa2V5X2ZuIGVsc2UgbWluX2VsZW1lbnQKICAgICAgcmV0dXJuIHRocmVzaG9sZCwgYnVmZmVyWy1zZWxmLl9uOl0KICAgIHJldHVybiBhY2N1bXVsYXRvcgoKICBkZWYgbWVyZ2VfYWNjdW11bGF0b3JzKHNlbGYsIGFjY3VtdWxhdG9ycywgKmFyZ3MsICoqa3dhcmdzKToKICAgIGFjY3VtdWxhdG9ycyA9IGxpc3QoYWNjdW11bGF0b3JzKQogICAgaWYgYXJncyBvciBrd2FyZ3M6CiAgICAgIGFkZF9pbnB1dCA9IGxhbWJkYSBhY2N1bXVsYXRvciwgZWxlbWVudDogc2VsZi5hZGRfaW5wdXQoCiAgICAgICAgICBhY2N1bXVsYXRvciwgZWxlbWVudCwgKmFyZ3MsICoqa3dhcmdzKQogICAgZWxzZToKICAgICAgYWRkX2lucHV0ID0gc2VsZi5hZGRfaW5wdXQKCiAgICB0b3RhbF9hY2N1bXVsYXRvciA9IE5vbmUKICAgIGZvciBhY2N1bXVsYXRvciBpbiBhY2N1bXVsYXRvcnM6CiAgICAgIGlmIHRvdGFsX2FjY3VtdWxhdG9yIGlzIE5vbmU6CiAgICAgICAgdG90YWxfYWNjdW11bGF0b3IgPSBhY2N1bXVsYXRvcgogICAgICBlbHNlOgogICAgICAgIGZvciBlbGVtZW50IGluIGFjY3VtdWxhdG9yWzFdOgogICAgICAgICAgdG90YWxfYWNjdW11bGF0b3IgPSBhZGRfaW5wdXQodG90YWxfYWNjdW11bGF0b3IsIGVsZW1lbnQpCiAgICByZXR1cm4gdG90YWxfYWNjdW11bGF0b3IKCiAgZGVmIGV4dHJhY3Rfb3V0cHV0KHNlbGYsIGFjY3VtdWxhdG9yLCAqYXJncywgKiprd2FyZ3MpOgogICAgaWYgYXJncyBvciBrd2FyZ3M6CiAgICAgIGx0ID0gbGFtYmRhIGEsIGI6IHNlbGYuX2NvbXBhcmUoYSwgYiwgKmFyZ3MsICoqa3dhcmdzKQogICAgZWxzZToKICAgICAgbHQgPSBzZWxmLl9jb21wYXJlCgogICAgXywgYnVmZmVyID0gYWNjdW11bGF0b3IKICAgIHNlbGYuX3NvcnRfYnVmZmVyKGJ1ZmZlciwgbHQpCiAgICByZXR1cm4gYnVmZmVyWzotc2VsZi5fbi0xOi0xXSAgIyB0YWlsLCByZXZlcnNlZAoKCmNsYXNzIExhcmdlc3QoVG9wQ29tYmluZUZuKToKICBkZWYgZGVmYXVsdF9sYWJlbChzZWxmKToKICAgIHJldHVybiAnTGFyZ2VzdCglcyknICUgc2VsZi5fbgoKCmNsYXNzIFNtYWxsZXN0KFRvcENvbWJpbmVGbik6CgogIGRlZiBfX2luaXRfXyhzZWxmLCBuKToKICAgIHN1cGVyKFNtYWxsZXN0LCBzZWxmKS5fX2luaXRfXyhuLCByZXZlcnNlPVRydWUpCgogIGRlZiBkZWZhdWx0X2xhYmVsKHNlbGYpOgogICAgcmV0dXJuICdTbWFsbGVzdCglcyknICUgc2VsZi5fbgoKCmNsYXNzIFNhbXBsZShvYmplY3QpOgogICIiIkNvbWJpbmVycyBmb3Igc2FtcGxpbmcgbiBlbGVtZW50cyB3aXRob3V0IHJlcGxhY2VtZW50LiIiIgogICMgcHlsaW50OiBkaXNhYmxlPW5vLXNlbGYtYXJndW1lbnQKCiAgY2xhc3MgRml4ZWRTaXplR2xvYmFsbHkocHRyYW5zZm9ybS5QVHJhbnNmb3JtKToKICAgICIiIlNhbXBsZSBuIGVsZW1lbnRzIGZyb20gdGhlIGlucHV0IFBDb2xsZWN0aW9uIHdpdGhvdXQgcmVwbGFjZW1lbnQuIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG4pOgogICAgICBzZWxmLl9uID0gbgoKICAgIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgICByZXR1cm4gcGNvbGwgfCBjb3JlLkNvbWJpbmVHbG9iYWxseShTYW1wbGVDb21iaW5lRm4oc2VsZi5fbikpCgogICAgZGVmIGRpc3BsYXlfZGF0YShzZWxmKToKICAgICAgcmV0dXJuIHsnbic6IHNlbGYuX259CgogICAgZGVmIGRlZmF1bHRfbGFiZWwoc2VsZik6CiAgICAgIHJldHVybiAnRml4ZWRTaXplR2xvYmFsbHkoJWQpJyAlIHNlbGYuX24KCiAgY2xhc3MgRml4ZWRTaXplUGVyS2V5KHB0cmFuc2Zvcm0uUFRyYW5zZm9ybSk6CiAgICAiIiJTYW1wbGUgbiBlbGVtZW50cyBhc3NvY2lhdGVkIHdpdGggZWFjaCBrZXkgd2l0aG91dCByZXBsYWNlbWVudC4iIiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgbik6CiAgICAgIHNlbGYuX24gPSBuCgogICAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICAgIHJldHVybiBwY29sbCB8IGNvcmUuQ29tYmluZVBlcktleShTYW1wbGVDb21iaW5lRm4oc2VsZi5fbikpCgogICAgZGVmIGRpc3BsYXlfZGF0YShzZWxmKToKICAgICAgcmV0dXJuIHsnbic6IHNlbGYuX259CgogICAgZGVmIGRlZmF1bHRfbGFiZWwoc2VsZik6CiAgICAgIHJldHVybiAnRml4ZWRTaXplUGVyS2V5KCVkKScgJSBzZWxmLl9uCgoKQHdpdGhfaW5wdXRfdHlwZXMoVCkKQHdpdGhfb3V0cHV0X3R5cGVzKExpc3RbVF0pCmNsYXNzIFNhbXBsZUNvbWJpbmVGbihjb3JlLkNvbWJpbmVGbik6CiAgIiIiQ29tYmluZUZuIGZvciBhbGwgU2FtcGxlIHRyYW5zZm9ybXMuIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBuKToKICAgIHN1cGVyKFNhbXBsZUNvbWJpbmVGbiwgc2VsZikuX19pbml0X18oKQogICAgIyBNb3N0IG9mIHRoaXMgY29tYmluZXIncyB3b3JrIGlzIGRvbmUgYnkgYSBUb3BDb21iaW5lRm4uIFdlIGNvdWxkIGp1c3QKICAgICMgc3ViY2xhc3MgVG9wQ29tYmluZUZuIHRvIG1ha2UgdGhpcyBjbGFzcywgYnV0IHNpbmNlIHNhbXBsaW5nIGlzIG5vdAogICAgIyByZWFsbHkgYSBraW5kIG9mIFRvcCBvcGVyYXRpb24sIHdlIHVzZSBhIFRvcENvbWJpbmVGbiBpbnN0YW5jZSBhcyBhCiAgICAjIGhlbHBlciBpbnN0ZWFkLgogICAgc2VsZi5fdG9wX2NvbWJpbmVyID0gVG9wQ29tYmluZUZuKG4pCgogIGRlZiBjcmVhdGVfYWNjdW11bGF0b3Ioc2VsZik6CiAgICByZXR1cm4gc2VsZi5fdG9wX2NvbWJpbmVyLmNyZWF0ZV9hY2N1bXVsYXRvcigpCgogIGRlZiBhZGRfaW5wdXQoc2VsZiwgaGVhcCwgZWxlbWVudCk6CiAgICAjIEJlZm9yZSBwYXNzaW5nIGVsZW1lbnRzIHRvIHRoZSBUb3AgY29tYmluZXIsIHdlIHBhaXIgdGhlbSB3aXRoIHJhbmRvbQogICAgIyBudW1iZXJzLiBUaGUgZWxlbWVudHMgd2l0aCB0aGUgbiBsYXJnZXN0IHJhbmRvbSBudW1iZXIgImtleXMiIHdpbGwgYmUKICAgICMgc2VsZWN0ZWQgZm9yIHRoZSBvdXRwdXQuCiAgICByZXR1cm4gc2VsZi5fdG9wX2NvbWJpbmVyLmFkZF9pbnB1dChoZWFwLCAocmFuZG9tLnJhbmRvbSgpLCBlbGVtZW50KSkKCiAgZGVmIG1lcmdlX2FjY3VtdWxhdG9ycyhzZWxmLCBoZWFwcyk6CiAgICByZXR1cm4gc2VsZi5fdG9wX2NvbWJpbmVyLm1lcmdlX2FjY3VtdWxhdG9ycyhoZWFwcykKCiAgZGVmIGV4dHJhY3Rfb3V0cHV0KHNlbGYsIGhlYXApOgogICAgIyBIZXJlIHdlIHN0cmlwIG9mZiB0aGUgcmFuZG9tIG51bWJlciBrZXlzIHdlIGFkZGVkIGluIGFkZF9pbnB1dC4KICAgIHJldHVybiBbZSBmb3IgXywgZSBpbiBzZWxmLl90b3BfY29tYmluZXIuZXh0cmFjdF9vdXRwdXQoaGVhcCldCgoKY2xhc3MgX1R1cGxlQ29tYmluZUZuQmFzZShjb3JlLkNvbWJpbmVGbik6CgogIGRlZiBfX2luaXRfXyhzZWxmLCAqY29tYmluZXJzKToKICAgIHNlbGYuX2NvbWJpbmVycyA9IFtjb3JlLkNvbWJpbmVGbi5tYXliZV9mcm9tX2NhbGxhYmxlKGMpIGZvciBjIGluIGNvbWJpbmVyc10KICAgIHNlbGYuX25hbWVkX2NvbWJpbmVycyA9IGNvbWJpbmVycwoKICBkZWYgZGlzcGxheV9kYXRhKHNlbGYpOgogICAgY29tYmluZXJzID0gW2MuX19uYW1lX18gaWYgaGFzYXR0cihjLCAnX19uYW1lX18nKSBlbHNlIGMuX19jbGFzc19fLl9fbmFtZV9fCiAgICAgICAgICAgICAgICAgZm9yIGMgaW4gc2VsZi5fbmFtZWRfY29tYmluZXJzXQogICAgcmV0dXJuIHsnY29tYmluZXJzJzogc3RyKGNvbWJpbmVycyl9CgogIGRlZiBjcmVhdGVfYWNjdW11bGF0b3Ioc2VsZik6CiAgICByZXR1cm4gW2MuY3JlYXRlX2FjY3VtdWxhdG9yKCkgZm9yIGMgaW4gc2VsZi5fY29tYmluZXJzXQoKICBkZWYgbWVyZ2VfYWNjdW11bGF0b3JzKHNlbGYsIGFjY3VtdWxhdG9ycyk6CiAgICByZXR1cm4gW2MubWVyZ2VfYWNjdW11bGF0b3JzKGEpCiAgICAgICAgICAgIGZvciBjLCBhIGluIHppcChzZWxmLl9jb21iaW5lcnMsIHppcCgqYWNjdW11bGF0b3JzKSldCgogIGRlZiBleHRyYWN0X291dHB1dChzZWxmLCBhY2N1bXVsYXRvcik6CiAgICByZXR1cm4gdHVwbGUoW2MuZXh0cmFjdF9vdXRwdXQoYSkKICAgICAgICAgICAgICAgICAgZm9yIGMsIGEgaW4gemlwKHNlbGYuX2NvbWJpbmVycywgYWNjdW11bGF0b3IpXSkKCgpjbGFzcyBUdXBsZUNvbWJpbmVGbihfVHVwbGVDb21iaW5lRm5CYXNlKToKICAiIiJBIGNvbWJpbmVyIGZvciBjb21iaW5pbmcgdHVwbGVzIHZpYSBhIHR1cGxlIG9mIGNvbWJpbmVycy4KCiAgVGFrZXMgYXMgaW5wdXQgYSB0dXBsZSBvZiBOIENvbWJpbmVGbnMgYW5kIGNvbWJpbmVzIE4tdHVwbGVzIGJ5CiAgY29tYmluaW5nIHRoZSBrLXRoIGVsZW1lbnQgb2YgZWFjaCB0dXBsZSB3aXRoIHRoZSBrLXRoIENvbWJpbmVGbiwKICBvdXRwdXR0aW5nIGEgbmV3IE4tdHVwbGUgb2YgY29tYmluZWQgdmFsdWVzLgogICIiIgoKICBkZWYgYWRkX2lucHV0KHNlbGYsIGFjY3VtdWxhdG9yLCBlbGVtZW50KToKICAgIHJldHVybiBbYy5hZGRfaW5wdXQoYSwgZSkKICAgICAgICAgICAgZm9yIGMsIGEsIGUgaW4gemlwKHNlbGYuX2NvbWJpbmVycywgYWNjdW11bGF0b3IsIGVsZW1lbnQpXQoKICBkZWYgd2l0aF9jb21tb25faW5wdXQoc2VsZik6CiAgICByZXR1cm4gU2luZ2xlSW5wdXRUdXBsZUNvbWJpbmVGbigqc2VsZi5fY29tYmluZXJzKQoKCmNsYXNzIFNpbmdsZUlucHV0VHVwbGVDb21iaW5lRm4oX1R1cGxlQ29tYmluZUZuQmFzZSk6CiAgIiIiQSBjb21iaW5lciBmb3IgY29tYmluaW5nIGEgc2luZ2xlIHZhbHVlIHZpYSBhIHR1cGxlIG9mIGNvbWJpbmVycy4KCiAgVGFrZXMgYXMgaW5wdXQgYSB0dXBsZSBvZiBOIENvbWJpbmVGbnMgYW5kIGNvbWJpbmVzIGVsZW1lbnRzIGJ5CiAgYXBwbHlpbmcgZWFjaCBDb21iaW5lRm4gdG8gZWFjaCBpbnB1dCwgcHJvZHVjaW5nIGFuIE4tdHVwbGUgb2YKICB0aGUgb3V0cHV0cyBjb3JyZXNwb25kaW5nIHRvIGVhY2ggb2YgdGhlIE4gQ29tYmluZUZuJ3Mgb3V0cHV0cy4KICAiIiIKCiAgZGVmIGFkZF9pbnB1dChzZWxmLCBhY2N1bXVsYXRvciwgZWxlbWVudCk6CiAgICByZXR1cm4gW2MuYWRkX2lucHV0KGEsIGVsZW1lbnQpCiAgICAgICAgICAgIGZvciBjLCBhIGluIHppcChzZWxmLl9jb21iaW5lcnMsIGFjY3VtdWxhdG9yKV0KCgpjbGFzcyBUb0xpc3QocHRyYW5zZm9ybS5QVHJhbnNmb3JtKToKICAiIiJBIGdsb2JhbCBDb21iaW5lRm4gdGhhdCBjb25kZW5zZXMgYSBQQ29sbGVjdGlvbiBpbnRvIGEgc2luZ2xlIGxpc3QuIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBsYWJlbD0nVG9MaXN0Jyk6ICAjIHB5bGludDogZGlzYWJsZT11c2VsZXNzLXN1cGVyLWRlbGVnYXRpb24KICAgIHN1cGVyKFRvTGlzdCwgc2VsZikuX19pbml0X18obGFiZWwpCgogIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgcmV0dXJuIHBjb2xsIHwgc2VsZi5sYWJlbCA+PiBjb3JlLkNvbWJpbmVHbG9iYWxseShUb0xpc3RDb21iaW5lRm4oKSkKCgpAd2l0aF9pbnB1dF90eXBlcyhUKQpAd2l0aF9vdXRwdXRfdHlwZXMoTGlzdFtUXSkKY2xhc3MgVG9MaXN0Q29tYmluZUZuKGNvcmUuQ29tYmluZUZuKToKICAiIiJDb21iaW5lRm4gZm9yIHRvX2xpc3QuIiIiCgogIGRlZiBjcmVhdGVfYWNjdW11bGF0b3Ioc2VsZik6CiAgICByZXR1cm4gW10KCiAgZGVmIGFkZF9pbnB1dChzZWxmLCBhY2N1bXVsYXRvciwgZWxlbWVudCk6CiAgICBhY2N1bXVsYXRvci5hcHBlbmQoZWxlbWVudCkKICAgIHJldHVybiBhY2N1bXVsYXRvcgoKICBkZWYgbWVyZ2VfYWNjdW11bGF0b3JzKHNlbGYsIGFjY3VtdWxhdG9ycyk6CiAgICByZXR1cm4gc3VtKGFjY3VtdWxhdG9ycywgW10pCgogIGRlZiBleHRyYWN0X291dHB1dChzZWxmLCBhY2N1bXVsYXRvcik6CiAgICByZXR1cm4gYWNjdW11bGF0b3IKCgpjbGFzcyBUb0RpY3QocHRyYW5zZm9ybS5QVHJhbnNmb3JtKToKICAiIiJBIGdsb2JhbCBDb21iaW5lRm4gdGhhdCBjb25kZW5zZXMgYSBQQ29sbGVjdGlvbiBpbnRvIGEgc2luZ2xlIGRpY3QuCgogIFBDb2xsZWN0aW9ucyBzaG91bGQgY29uc2lzdCBvZiAyLXR1cGxlcywgbm90aW9uYWxseSAoa2V5LCB2YWx1ZSkgcGFpcnMuCiAgSWYgbXVsdGlwbGUgdmFsdWVzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHNhbWUga2V5LCBvbmx5IG9uZSBvZiB0aGUgdmFsdWVzCiAgd2lsbCBiZSBwcmVzZW50IGluIHRoZSByZXN1bHRpbmcgZGljdC4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGxhYmVsPSdUb0RpY3QnKTogICMgcHlsaW50OiBkaXNhYmxlPXVzZWxlc3Mtc3VwZXItZGVsZWdhdGlvbgogICAgc3VwZXIoVG9EaWN0LCBzZWxmKS5fX2luaXRfXyhsYWJlbCkKCiAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICByZXR1cm4gcGNvbGwgfCBzZWxmLmxhYmVsID4+IGNvcmUuQ29tYmluZUdsb2JhbGx5KFRvRGljdENvbWJpbmVGbigpKQoKCkB3aXRoX2lucHV0X3R5cGVzKFR1cGxlW0ssIFZdKQpAd2l0aF9vdXRwdXRfdHlwZXMoRGljdFtLLCBWXSkKY2xhc3MgVG9EaWN0Q29tYmluZUZuKGNvcmUuQ29tYmluZUZuKToKICAiIiJDb21iaW5lRm4gZm9yIHRvX2RpY3QuIiIiCgogIGRlZiBjcmVhdGVfYWNjdW11bGF0b3Ioc2VsZik6CiAgICByZXR1cm4gZGljdCgpCgogIGRlZiBhZGRfaW5wdXQoc2VsZiwgYWNjdW11bGF0b3IsIGVsZW1lbnQpOgogICAga2V5LCB2YWx1ZSA9IGVsZW1lbnQKICAgIGFjY3VtdWxhdG9yW2tleV0gPSB2YWx1ZQogICAgcmV0dXJuIGFjY3VtdWxhdG9yCgogIGRlZiBtZXJnZV9hY2N1bXVsYXRvcnMoc2VsZiwgYWNjdW11bGF0b3JzKToKICAgIHJlc3VsdCA9IGRpY3QoKQogICAgZm9yIGEgaW4gYWNjdW11bGF0b3JzOgogICAgICByZXN1bHQudXBkYXRlKGEpCiAgICByZXR1cm4gcmVzdWx0CgogIGRlZiBleHRyYWN0X291dHB1dChzZWxmLCBhY2N1bXVsYXRvcik6CiAgICByZXR1cm4gYWNjdW11bGF0b3IKCgpjbGFzcyBfQ3VycmllZEZuKGNvcmUuQ29tYmluZUZuKToKICAiIiJXcmFwcGVkIENvbWJpbmVGbiB3aXRoIGV4dHJhIGFyZ3VtZW50cy4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGZuLCBhcmdzLCBrd2FyZ3MpOgogICAgc2VsZi5mbiA9IGZuCiAgICBzZWxmLmFyZ3MgPSBhcmdzCiAgICBzZWxmLmt3YXJncyA9IGt3YXJncwoKICBkZWYgY3JlYXRlX2FjY3VtdWxhdG9yKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuZm4uY3JlYXRlX2FjY3VtdWxhdG9yKCpzZWxmLmFyZ3MsICoqc2VsZi5rd2FyZ3MpCgogIGRlZiBhZGRfaW5wdXQoc2VsZiwgYWNjdW11bGF0b3IsIGVsZW1lbnQpOgogICAgcmV0dXJuIHNlbGYuZm4uYWRkX2lucHV0KGFjY3VtdWxhdG9yLCBlbGVtZW50LCAqc2VsZi5hcmdzLCAqKnNlbGYua3dhcmdzKQoKICBkZWYgbWVyZ2VfYWNjdW11bGF0b3JzKHNlbGYsIGFjY3VtdWxhdG9ycyk6CiAgICByZXR1cm4gc2VsZi5mbi5tZXJnZV9hY2N1bXVsYXRvcnMoYWNjdW11bGF0b3JzLCAqc2VsZi5hcmdzLCAqKnNlbGYua3dhcmdzKQoKICBkZWYgZXh0cmFjdF9vdXRwdXQoc2VsZiwgYWNjdW11bGF0b3IpOgogICAgcmV0dXJuIHNlbGYuZm4uZXh0cmFjdF9vdXRwdXQoYWNjdW11bGF0b3IsICpzZWxmLmFyZ3MsICoqc2VsZi5rd2FyZ3MpCgogIGRlZiBhcHBseShzZWxmLCBlbGVtZW50cyk6CiAgICByZXR1cm4gc2VsZi5mbi5hcHBseShlbGVtZW50cywgKnNlbGYuYXJncywgKipzZWxmLmt3YXJncykKCgpkZWYgY3VycnlfY29tYmluZV9mbihmbiwgYXJncywga3dhcmdzKToKICBpZiBub3QgYXJncyBhbmQgbm90IGt3YXJnczoKICAgIHJldHVybiBmbgogIGVsc2U6CiAgICByZXR1cm4gX0N1cnJpZWRGbihmbiwgYXJncywga3dhcmdzKQoKCmNsYXNzIFBoYXNlZENvbWJpbmVGbkV4ZWN1dG9yKG9iamVjdCk6CiAgIiIiRXhlY3V0b3IgZm9yIHBoYXNlcyBvZiBjb21iaW5lIG9wZXJhdGlvbnMuIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBwaGFzZSwgZm4sIGFyZ3MsIGt3YXJncyk6CgogICAgc2VsZi5jb21iaW5lX2ZuID0gY3VycnlfY29tYmluZV9mbihmbiwgYXJncywga3dhcmdzKQoKICAgIGlmIHBoYXNlID09ICdhbGwnOgogICAgICBzZWxmLmFwcGx5ID0gc2VsZi5mdWxsX2NvbWJpbmUKICAgIGVsaWYgcGhhc2UgPT0gJ2FkZCc6CiAgICAgIHNlbGYuYXBwbHkgPSBzZWxmLmFkZF9vbmx5CiAgICBlbGlmIHBoYXNlID09ICdtZXJnZSc6CiAgICAgIHNlbGYuYXBwbHkgPSBzZWxmLm1lcmdlX29ubHkKICAgIGVsaWYgcGhhc2UgPT0gJ2V4dHJhY3QnOgogICAgICBzZWxmLmFwcGx5ID0gc2VsZi5leHRyYWN0X29ubHkKICAgIGVsc2U6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1VuZXhwZWN0ZWQgcGhhc2U6ICVzJyAlIHBoYXNlKQoKICBkZWYgZnVsbF9jb21iaW5lKHNlbGYsIGVsZW1lbnRzKTogICMgcHlsaW50OiBkaXNhYmxlPWludmFsaWQtbmFtZQogICAgcmV0dXJuIHNlbGYuY29tYmluZV9mbi5hcHBseShlbGVtZW50cykKCiAgZGVmIGFkZF9vbmx5KHNlbGYsIGVsZW1lbnRzKTogICMgcHlsaW50OiBkaXNhYmxlPWludmFsaWQtbmFtZQogICAgcmV0dXJuIHNlbGYuY29tYmluZV9mbi5hZGRfaW5wdXRzKAogICAgICAgIHNlbGYuY29tYmluZV9mbi5jcmVhdGVfYWNjdW11bGF0b3IoKSwgZWxlbWVudHMpCgogIGRlZiBtZXJnZV9vbmx5KHNlbGYsIGFjY3VtdWxhdG9ycyk6ICAjIHB5bGludDogZGlzYWJsZT1pbnZhbGlkLW5hbWUKICAgIHJldHVybiBzZWxmLmNvbWJpbmVfZm4ubWVyZ2VfYWNjdW11bGF0b3JzKGFjY3VtdWxhdG9ycykKCiAgZGVmIGV4dHJhY3Rfb25seShzZWxmLCBhY2N1bXVsYXRvcik6ICAjIHB5bGludDogZGlzYWJsZT1pbnZhbGlkLW5hbWUKICAgIHJldHVybiBzZWxmLmNvbWJpbmVfZm4uZXh0cmFjdF9vdXRwdXQoYWNjdW11bGF0b3IpCn1yIIIAAChYGAAAAFNhbXBsZS5GaXhlZFNpemVHbG9iYWxseVgFAAAAY2xhc3NNDQJNGwKHWCIAAABfVHVwbGVDb21iaW5lRm5CYXNlLmV4dHJhY3Rfb3V0cHV0WAMAAABkZWZNXAJNXwKHWBgAAABUdXBsZUNvbWJpbmVGbi5hZGRfaW5wdXRYAwAAAGRlZk1pAk1sAodYFgAAAF9Ub3BQZXJCdW5kbGUuX19pbml0X19YAwAAAGRlZk08AU0/AYdYHgAAAFRvRGljdENvbWJpbmVGbi5leHRyYWN0X291dHB1dFgDAAAAZGVmTb0CTb8Ch1gRAAAAU21hbGxlc3QuX19pbml0X19YAwAAAGRlZk0CAk0EAodYDwAAAFRvTGlzdENvbWJpbmVGblgFAAAAY2xhc3NNiAJNmQKHWBQAAABfQ3VycmllZEZuLmFkZF9pbnB1dFgDAAAAZGVmTcwCTc4Ch1gZAAAAU2luZ2xlSW5wdXRUdXBsZUNvbWJpbmVGblgFAAAAY2xhc3NNcQJNfAKHWAwAAABUb3BDb21iaW5lRm5YBQAAAGNsYXNzTYABTfkBh1gkAAAAU2FtcGxlLkZpeGVkU2l6ZVBlcktleS5kZWZhdWx0X2xhYmVsWAMAAABkZWZNKAJNKgKHWBkAAABDb3VudENvbWJpbmVGbi5hZGRfaW5wdXRzWAMAAABkZWZLlEuWh1gfAAAAU2FtcGxlLkZpeGVkU2l6ZVBlcktleS5fX2luaXRfX1gDAAAAZGVmTR8CTSECh1gZAAAAX0NvbXBhcmFibGVWYWx1ZS5fX3JlcHJfX1gDAAAAZGVmTTUBTTcBh1gMAAAAVG9wLlNtYWxsZXN0WAMAAABkZWZNFwFNHAGHWB0AAABDb3VudENvbWJpbmVGbi5leHRyYWN0X291dHB1dFgDAAAAZGVmS5pLnIdYFAAAAE1lYW4uR2xvYmFsbHkuZXhwYW5kWAMAAABkZWZLRUtHh1gPAAAAVG9MaXN0Ll9faW5pdF9fWAMAAABkZWZNgQJNgwKHWAYAAABTYW1wbGVYBQAAAGNsYXNzTQkCTSoCh1gZAAAAVG9MaXN0Q29tYmluZUZuLmFkZF9pbnB1dFgDAAAAZGVmTZACTZMCh1gdAAAAX0N1cnJpZWRGbi5tZXJnZV9hY2N1bXVsYXRvcnNYAwAAAGRlZk3PAk3RAodYDQAAAFRvcC5PZi5leHBhbmRYAwAAAGRlZkvFS92HWCEAAABDb3VudENvbWJpbmVGbi5tZXJnZV9hY2N1bXVsYXRvcnNYAwAAAGRlZkuXS5mHWCAAAABfVHVwbGVDb21iaW5lRm5CYXNlLmRpc3BsYXlfZGF0YVgDAAAAZGVmTVACTVQCh1gcAAAATWVhbkNvbWJpbmVGbi5mb3JfaW5wdXRfdHlwZVgDAAAAZGVmS2dLbYdYIgAAAFRvRGljdENvbWJpbmVGbi5jcmVhdGVfYWNjdW11bGF0b3JYAwAAAGRlZk2vAk2xAodYDQAAAFRvRGljdC5leHBhbmRYAwAAAGRlZk2mAk2oAodYFAAAAFRvcC5PZi5kZWZhdWx0X2xhYmVsWAMAAABkZWZLwkvEh1gjAAAAU2luZ2xlSW5wdXRUdXBsZUNvbWJpbmVGbi5hZGRfaW5wdXRYAwAAAGRlZk15Ak18AodYBAAAAE1lYW5YBQAAAGNsYXNzSz9LTYdYFwAAAF9Db21wYXJhYmxlVmFsdWUuX19sdF9fWAMAAABkZWZNMgFNNAGHWAoAAABfQ3VycmllZEZuWAUAAABjbGFzc03BAk3XAodYEgAAAE1lYW4uUGVyS2V5LmV4cGFuZFgDAAAAZGVmS0tLTYdYEAAAAENvdW50LlBlckVsZW1lbnRYBQAAAGNsYXNzS35Lh4dYHAAAAF9UdXBsZUNvbWJpbmVGbkJhc2UuX19pbml0X19YAwAAAGRlZk1MAk1PAodYEAAAAF9DdXJyaWVkRm4uYXBwbHlYAwAAAGRlZk3VAk3XAodYEwAAAFRvcC5QZXJLZXkuX19pbml0X19YAwAAAGRlZkvmS/2HWBMAAABDb3VudC5QZXJLZXkuZXhwYW5kWAMAAABkZWZLe0t9h1gPAAAAVG9EaWN0Ll9faW5pdF9fWAMAAABkZWZNowJNpQKHWBUAAABDb3VudC5HbG9iYWxseS5leHBhbmRYAwAAAGRlZkt1S3eHWBkAAABUb3BDb21iaW5lRm4uZGlzcGxheV9kYXRhWAMAAABkZWZNtgFNvAGHWBsAAABUb3BDb21iaW5lRm4uZXh0cmFjdF9vdXRwdXRYAwAAAGRlZk3wAU35AYdYGwAAAF9NZXJnZVRvcFBlckJ1bmRsZS5fX2luaXRfX1gDAAAAZGVmTV4BTWEBh1gZAAAAVG9wQ29tYmluZUZuLl9zb3J0X2J1ZmZlclgDAAAAZGVmTawBTbUBh1gdAAAAU2FtcGxlLkZpeGVkU2l6ZVBlcktleS5leHBhbmRYAwAAAGRlZk0iAk0kAodYEAAAAGN1cnJ5X2NvbWJpbmVfZm5YAwAAAGRlZk3ZAk3eAodYJgAAAFNhbXBsZS5GaXhlZFNpemVHbG9iYWxseS5kZWZhdWx0X2xhYmVsWAMAAABkZWZNGQJNGwKHWCAAAABQaGFzZWRDb21iaW5lRm5FeGVjdXRvci5fX2luaXRfX1gDAAAAZGVmTeMCTfECh1gGAAAAVG9wLk9mWAUAAABjbGFzc0uiS92HWBYAAABUb3BDb21iaW5lRm4uYWRkX2lucHV0WAMAAABkZWZNxQFN3gGHWAcAAABMYXJnZXN0WAUAAABjbGFzc037AU3+AYdYIgAAAFBoYXNlZENvbWJpbmVGbkV4ZWN1dG9yLm1lcmdlX29ubHlYAwAAAGRlZk35Ak37AodYDwAAAFNhbXBsZUNvbWJpbmVGblgFAAAAY2xhc3NNLAJNSAKHWA0AAABfVG9wUGVyQnVuZGxlWAUAAABjbGFzc005AU1ZAYdYJgAAAF9UdXBsZUNvbWJpbmVGbkJhc2UuY3JlYXRlX2FjY3VtdWxhdG9yWAMAAABkZWZNVQJNVwKHWCIAAABTYW1wbGVDb21iaW5lRm4ubWVyZ2VfYWNjdW11bGF0b3JzWAMAAABkZWZNQgJNRAKHWA4AAABUdXBsZUNvbWJpbmVGblgFAAAAY2xhc3NNYQJNbwKHWAsAAABNZWFuLlBlcktleVgFAAAAY2xhc3NLSEtNh1gjAAAAU2FtcGxlLkZpeGVkU2l6ZVBlcktleS5kaXNwbGF5X2RhdGFYAwAAAGRlZk0lAk0nAodYHgAAAFNhbXBsZUNvbWJpbmVGbi5leHRyYWN0X291dHB1dFgDAAAAZGVmTUUCTUgCh1gNAAAATWVhbi5HbG9iYWxseVgFAAAAY2xhc3NLQktHh1gfAAAAU2FtcGxlLkZpeGVkU2l6ZUdsb2JhbGx5LmV4cGFuZFgDAAAAZGVmTRMCTRUCh1ggAAAATWVhbkNvbWJpbmVGbi5tZXJnZV9hY2N1bXVsYXRvcnNYAwAAAGRlZktdS2CHWAoAAABUb3AuUGVyS2V5WAUAAABjbGFzc0veTRABh1gNAAAAVG9MaXN0LmV4cGFuZFgDAAAAZGVmTYQCTYYCh1gPAAAAVG9EaWN0Q29tYmluZUZuWAUAAABjbGFzc02qAk2/AodYGwAAAF9Ub3BQZXJCdW5kbGUuZmluaXNoX2J1bmRsZVgDAAAAZGVmTUsBTVkBh1geAAAAVG9MaXN0Q29tYmluZUZuLmV4dHJhY3Rfb3V0cHV0WAMAAABkZWZNlwJNmQKHWBYAAABTYW1wbGUuRml4ZWRTaXplUGVyS2V5WAUAAABjbGFzc00cAk0qAodYCwAAAFRvcC5MYXJnZXN0WAMAAABkZWZNEQFNFgGHWCIAAABUb0xpc3RDb21iaW5lRm4uY3JlYXRlX2FjY3VtdWxhdG9yWAMAAABkZWZNjQJNjwKHWBkAAABfQ3VycmllZEZuLmV4dHJhY3Rfb3V0cHV0WAMAAABkZWZN0gJN1AKHWCQAAABQaGFzZWRDb21iaW5lRm5FeGVjdXRvci5mdWxsX2NvbWJpbmVYAwAAAGRlZk3yAk30AodYIAAAAE1lYW5Db21iaW5lRm4uY3JlYXRlX2FjY3VtdWxhdG9yWAMAAABkZWZLVktYh1ghAAAAU2FtcGxlLkZpeGVkU2l6ZUdsb2JhbGx5Ll9faW5pdF9fWAMAAABkZWZNEAJNEgKHWBkAAABUb0RpY3RDb21iaW5lRm4uYWRkX2lucHV0WAMAAABkZWZNsgJNtgKHWCIAAABUb0RpY3RDb21iaW5lRm4ubWVyZ2VfYWNjdW11bGF0b3JzWAMAAABkZWZNtwJNvAKHWA0AAABNZWFuQ29tYmluZUZuWAUAAABjbGFzc0tRS22HWBgAAABTYW1wbGVDb21iaW5lRm4uX19pbml0X19YAwAAAGRlZk0xAk04AodYGAAAAENvdW50Q29tYmluZUZuLmFkZF9pbnB1dFgDAAAAZGVmS5FLk4dYIgAAAFNhbXBsZUNvbWJpbmVGbi5jcmVhdGVfYWNjdW11bGF0b3JYAwAAAGRlZk05Ak07AodYCAAAAFNtYWxsZXN0WAUAAABjbGFzc00AAk0HAodYEQAAAFRvcC5QZXJLZXkuZXhwYW5kWAMAAABkZWZNAQFNEAGHWCEAAABDb3VudENvbWJpbmVGbi5jcmVhdGVfYWNjdW11bGF0b3JYAwAAAGRlZkuOS5CHWAwAAABDb3VudC5QZXJLZXlYBQAAAGNsYXNzS3hLfYdYDgAAAENvdW50Q29tYmluZUZuWAUAAABjbGFzc0uJS5yHWAYAAABUb0RpY3RYBQAAAGNsYXNzTZsCTagCh1gTAAAAX0N1cnJpZWRGbi5fX2luaXRfX1gDAAAAZGVmTcQCTcgCh1gTAAAAX1R1cGxlQ29tYmluZUZuQmFzZVgFAAAAY2xhc3NNSgJNXwKHWBEAAABUb3AuTGFyZ2VzdFBlcktleVgDAAAAZGVmTR0BTSIBh1gfAAAAVG9wQ29tYmluZUZuLmNyZWF0ZV9hY2N1bXVsYXRvclgDAAAAZGVmTcIBTcQBh1gaAAAAX1RvcFBlckJ1bmRsZS5zdGFydF9idW5kbGVYAwAAAGRlZk1AAU1CAYdYEAAAAF9Db21wYXJhYmxlVmFsdWVYBQAAAGNsYXNzTSoBTTcBh1gVAAAAX1RvcFBlckJ1bmRsZS5wcm9jZXNzWAMAAABkZWZNQwFNSgGHWBoAAABfTWVyZ2VUb3BQZXJCdW5kbGUucHJvY2Vzc1gDAAAAZGVmTWIBTX4Bh1gmAAAAX1R1cGxlQ29tYmluZUZuQmFzZS5tZXJnZV9hY2N1bXVsYXRvcnNYAwAAAGRlZk1YAk1bAodYGQAAAF9Db21wYXJhYmxlVmFsdWUuX19pbml0X19YAwAAAGRlZk0uAU0xAYdYHQAAAF9DdXJyaWVkRm4uY3JlYXRlX2FjY3VtdWxhdG9yWAMAAABkZWZNyQJNywKHWBgAAABUb3AuUGVyS2V5LmRlZmF1bHRfbGFiZWxYAwAAAGRlZkv+TQABh1gXAAAAUGhhc2VkQ29tYmluZUZuRXhlY3V0b3JYBQAAAGNsYXNzTeACTf4Ch1gSAAAAX01lcmdlVG9wUGVyQnVuZGxlWAUAAABjbGFzc01bAU1+AYdYFQAAAFRvcENvbWJpbmVGbi5fX2luaXRfX1gDAAAAZGVmTZUBTasBh1gPAAAAVG9wLk9mLl9faW5pdF9fWAMAAABkZWZLqkvBh1gZAAAAU2FtcGxlQ29tYmluZUZuLmFkZF9pbnB1dFgDAAAAZGVmTTwCTUECh1giAAAAVG9MaXN0Q29tYmluZUZuLm1lcmdlX2FjY3VtdWxhdG9yc1gDAAAAZGVmTZQCTZYCh1gOAAAAQ291bnQuR2xvYmFsbHlYBQAAAGNsYXNzS3JLd4dYJAAAAFBoYXNlZENvbWJpbmVGbkV4ZWN1dG9yLmV4dHJhY3Rfb25seVgDAAAAZGVmTfwCTf4Ch1ggAAAAVHVwbGVDb21iaW5lRm4ud2l0aF9jb21tb25faW5wdXRYAwAAAGRlZk1tAk1vAodYFwAAAENvdW50LlBlckVsZW1lbnQuZXhwYW5kWAMAAABkZWZLgUuHh1gFAAAAQ291bnRYBQAAAGNsYXNzS29Lh4dYFQAAAExhcmdlc3QuZGVmYXVsdF9sYWJlbFgDAAAAZGVmTfwBTf4Bh1gWAAAAU21hbGxlc3QuZGVmYXVsdF9sYWJlbFgDAAAAZGVmTQUCTQcCh1gcAAAATWVhbkNvbWJpbmVGbi5leHRyYWN0X291dHB1dFgDAAAAZGVmS2FLZodYAwAAAFRvcFgFAAAAY2xhc3NLnk0oAYdYHwAAAFRvcENvbWJpbmVGbi5tZXJnZV9hY2N1bXVsYXRvcnNYAwAAAGRlZk3fAU3vAYdYIAAAAFBoYXNlZENvbWJpbmVGbkV4ZWN1dG9yLmFkZF9vbmx5WAMAAABkZWZN9QJN+AKHWAYAAABUb0xpc3RYBQAAAGNsYXNzTX4CTYYCh1gXAAAATWVhbkNvbWJpbmVGbi5hZGRfaW5wdXRYAwAAAGRlZktZS1yHWBIAAABUb3AuU21hbGxlc3RQZXJLZXlYAwAAAGRlZk0jAU0oAYdYJQAAAFNhbXBsZS5GaXhlZFNpemVHbG9iYWxseS5kaXNwbGF5X2RhdGFYAwAAAGRlZk0WAk0YAod1fXIhggAAKFgYAAAAU2FtcGxlLkZpeGVkU2l6ZUdsb2JhbGx5al5jAABYEgAAAE1lYW4uUGVyS2V5LmV4cGFuZGpeYwAAWBEAAABUb3AuUGVyS2V5LmV4cGFuZGpeYwAAWBAAAABDb3VudC5QZXJFbGVtZW50al5jAABYEwAAAENvdW50LlBlcktleS5leHBhbmRqXmMAAFgWAAAAU2FtcGxlLkZpeGVkU2l6ZVBlcktleWpeYwAAWBUAAABDb3VudC5HbG9iYWxseS5leHBhbmRqXmMAAFgYAAAAVG9wLlBlcktleS5kZWZhdWx0X2xhYmVsal5jAABYCgAAAFRvcC5QZXJLZXlqXmMAAFgdAAAAU2FtcGxlLkZpeGVkU2l6ZVBlcktleS5leHBhbmRqXmMAAFgkAAAAU2FtcGxlLkZpeGVkU2l6ZVBlcktleS5kZWZhdWx0X2xhYmVsal5jAABYFwAAAENvdW50LlBlckVsZW1lbnQuZXhwYW5kal5jAABYHwAAAFNhbXBsZS5GaXhlZFNpemVHbG9iYWxseS5leHBhbmRqXmMAAFgNAAAAVG9wLk9mLmV4cGFuZGpeYwAAWAYAAABUb3AuT2ZqXmMAAFgGAAAAVG9EaWN0al5jAABYDgAAAENvdW50Lkdsb2JhbGx5al5jAABYJgAAAFNhbXBsZS5GaXhlZFNpemVHbG9iYWxseS5kZWZhdWx0X2xhYmVsal5jAABYBQAAAENvdW50al5jAABYFAAAAE1lYW4uR2xvYmFsbHkuZXhwYW5kal5jAABYCwAAAE1lYW4uUGVyS2V5al5jAABYIwAAAFNhbXBsZS5GaXhlZFNpemVQZXJLZXkuZGlzcGxheV9kYXRhal5jAABYBgAAAFNhbXBsZWpeYwAAWAMAAABUb3BqXmMAAFgMAAAAQ291bnQuUGVyS2V5al5jAABYDQAAAE1lYW4uR2xvYmFsbHlqXmMAAFgNAAAAVG9EaWN0LmV4cGFuZGpeYwAAWAYAAABUb0xpc3RqXmMAAFgUAAAAVG9wLk9mLmRlZmF1bHRfbGFiZWxqXmMAAFgEAAAATWVhbmpeYwAAWA0AAABUb0xpc3QuZXhwYW5kal5jAABYJQAAAFNhbXBsZS5GaXhlZFNpemVHbG9iYWxseS5kaXNwbGF5X2RhdGFqXmMAAHVqfWkAAFggAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnNyIoIAAIWBciOCAAB9ciSCAABidFU/YXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LnBpcGVsaW5lX2dyYXBoX3JlbmRlcmVyKFiVDQAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJGb3IgcmVuZGVyaW5nIHBpcGVsaW5lIGdyYXBoIGluIEhUTUwtY29tcGF0aWJsZSBmb3JtYXQuCgpUaGlzIG1vZHVsZSBpcyBleHBlcmltZW50YWwuIE5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCgppbXBvcnQgYWJjCmltcG9ydCBvcwppbXBvcnQgc3VicHJvY2VzcwoKZnJvbSBmdXR1cmUudXRpbHMgaW1wb3J0IHdpdGhfbWV0YWNsYXNzCgpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzLnBsdWdpbiBpbXBvcnQgQmVhbVBsdWdpbgoKCmNsYXNzIFBpcGVsaW5lR3JhcGhSZW5kZXJlcih3aXRoX21ldGFjbGFzcyhhYmMuQUJDTWV0YSwgQmVhbVBsdWdpbikpOgogICIiIkFic3RyYWN0IGNsYXNzIGZvciByZW5kZXJlcnMsIHdobyBkZWNpZGUgaG93IHBpcGVsaW5lIGdyYXBocyBhcmUgcmVuZGVyZWQuCiAgIiIiCgogIEBjbGFzc21ldGhvZAogIEBhYmMuYWJzdHJhY3RtZXRob2QKICBkZWYgb3B0aW9uKGNscyk6CiAgICAiIiJUaGUgY29ycmVzcG9uZGluZyByZW5kZXJpbmcgb3B0aW9uIGZvciB0aGUgcmVuZGVyZXIuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgQGFiYy5hYnN0cmFjdG1ldGhvZAogIGRlZiByZW5kZXJfcGlwZWxpbmVfZ3JhcGgoc2VsZiwgcGlwZWxpbmVfZ3JhcGgpOgogICAgIiIiUmVuZGVycyB0aGUgcGlwZWxpbmUgZ3JhcGggaW4gSFRNTC1jb21wYXRpYmxlIGZvcm1hdC4KCiAgICBBcmdzOgogICAgICBwaXBlbGluZV9ncmFwaDogKHBpcGVsaW5lX2dyYXBoLlBpcGVsaW5lR3JhcGgpIHRoZSBncmFwaCB0byBiZSByZW5kZXJlcmQuCgogICAgUmV0dXJuczoKICAgICAgdW5pY29kZSwgc3RyIG9yIGJ5dGVzIHRoYXQgY2FuIGJlIGV4cHJlc3NlZCBhcyBIVE1MLgogICAgIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgoKY2xhc3MgTXV0ZVJlbmRlcmVyKFBpcGVsaW5lR3JhcGhSZW5kZXJlcik6CiAgIiIiVXNlIHRoaXMgcmVuZGVyZXIgdG8gbXV0ZSB0aGUgcGlwZWxpbmUgZGlzcGxheS4KICAiIiIKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIG9wdGlvbihjbHMpOgogICAgcmV0dXJuICdtdXRlJwoKICBkZWYgcmVuZGVyX3BpcGVsaW5lX2dyYXBoKHNlbGYsIHBpcGVsaW5lX2dyYXBoKToKICAgIHJldHVybiAnJwoKCmNsYXNzIFRleHRSZW5kZXJlcihQaXBlbGluZUdyYXBoUmVuZGVyZXIpOgogICIiIlRoaXMgcmVuZGVyZXIgc2ltcGx5IHJldHVybnMgdGhlIGRvdCByZXByZXNlbnRhdGlvbiBpbiB0ZXh0IGZvcm1hdC4KICAiIiIKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIG9wdGlvbihjbHMpOgogICAgcmV0dXJuICd0ZXh0JwoKICBkZWYgcmVuZGVyX3BpcGVsaW5lX2dyYXBoKHNlbGYsIHBpcGVsaW5lX2dyYXBoKToKICAgIHJldHVybiBwaXBlbGluZV9ncmFwaC5nZXRfZG90KCkKCgpjbGFzcyBQeWRvdFJlbmRlcmVyKFBpcGVsaW5lR3JhcGhSZW5kZXJlcik6CiAgIiIiVGhpcyByZW5kZXJlciByZW5kZXJzIHRoZSBncmFwaCB1c2luZyBweWRvdC4KCiAgSXQgZGVwZW5kcyBvbgogICAgMS4gVGhlIHNvZnR3YXJlIEdyYXBodml6OiBodHRwczovL3d3dy5ncmFwaHZpei5vcmcvCiAgICAyLiBUaGUgcHl0aG9uIG1vZHVsZSBweWRvdDogaHR0cHM6Ly9weXBpLm9yZy9wcm9qZWN0L3B5ZG90LwogICIiIgoKICBAY2xhc3NtZXRob2QKICBkZWYgb3B0aW9uKGNscyk6CiAgICByZXR1cm4gJ2dyYXBoJwoKICBkZWYgcmVuZGVyX3BpcGVsaW5lX2dyYXBoKHNlbGYsIHBpcGVsaW5lX2dyYXBoKToKICAgIHJldHVybiBwaXBlbGluZV9ncmFwaC5fZ2V0X2dyYXBoKCkuY3JlYXRlX3N2ZygpICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCgoKZGVmIGdldF9yZW5kZXJlcihvcHRpb249Tm9uZSk6CiAgIiIiR2V0IGFuIGluc3RhbmNlIG9mIFBpcGVsaW5lR3JhcGhSZW5kZXJlciBnaXZlbiByZW5kZXJpbmcgb3B0aW9uLgoKICBBcmdzOgogICAgb3B0aW9uOiAoc3RyKSB0aGUgcmVuZGVyaW5nIG9wdGlvbi4KCiAgUmV0dXJuczoKICAgIChQaXBlbGluZUdyYXBoUmVuZGVyZXIpCiAgIiIiCiAgaWYgb3B0aW9uIGlzIE5vbmU6CiAgICBpZiBvcy5uYW1lID09ICdudCc6CiAgICAgIGV4aXN0cyA9IHN1YnByb2Nlc3MuY2FsbChbJ3doZXJlJywgJ2RvdC5leGUnXSkgPT0gMAogICAgZWxzZToKICAgICAgZXhpc3RzID0gc3VicHJvY2Vzcy5jYWxsKFsnd2hpY2gnLCAnZG90J10pID09IDAKCiAgICBpZiBleGlzdHM6CiAgICAgIG9wdGlvbiA9ICdncmFwaCcKICAgIGVsc2U6CiAgICAgIG9wdGlvbiA9ICd0ZXh0JwoKICByZW5kZXJlciA9IFtyIGZvciByIGluIFBpcGVsaW5lR3JhcGhSZW5kZXJlci5nZXRfYWxsX3N1YmNsYXNzZXMoKQogICAgICAgICAgICAgIGlmIG9wdGlvbiA9PSByLm9wdGlvbigpXQogIGlmIGxlbihyZW5kZXJlcikgPT0gMDoKICAgIHJhaXNlIFZhbHVlRXJyb3IoKQogIGVsaWYgbGVuKHJlbmRlcmVyKSA9PSAxOgogICAgcmV0dXJuIHJlbmRlcmVyWzBdKCkKICBlbHNlOgogICAgcmFpc2UgVmFsdWVFcnJvcignRm91bmQgbW9yZSB0aGFuIG9uZSByZW5kZXJlciBmb3Igb3B0aW9uOiAlcycsCiAgICAgICAgICAgICAgICAgICAgIG9wdGlvbikKfXIlggAAKFgrAAAAUGlwZWxpbmVHcmFwaFJlbmRlcmVyLnJlbmRlcl9waXBlbGluZV9ncmFwaFgDAAAAZGVmSy9LOodYHAAAAFBpcGVsaW5lR3JhcGhSZW5kZXJlci5vcHRpb25YAwAAAGRlZksoSy6HWAwAAABUZXh0UmVuZGVyZXJYBQAAAGNsYXNzS0hLUodYIgAAAE11dGVSZW5kZXJlci5yZW5kZXJfcGlwZWxpbmVfZ3JhcGhYAwAAAGRlZktES0aHWCMAAABQeWRvdFJlbmRlcmVyLnJlbmRlcl9waXBlbGluZV9ncmFwaFgDAAAAZGVmS2BLYodYEwAAAE11dGVSZW5kZXJlci5vcHRpb25YAwAAAGRlZktAS0OHWBUAAABQaXBlbGluZUdyYXBoUmVuZGVyZXJYBQAAAGNsYXNzSyRLOodYFAAAAFB5ZG90UmVuZGVyZXIub3B0aW9uWAMAAABkZWZLXEtfh1gMAAAATXV0ZVJlbmRlcmVyWAUAAABjbGFzc0s8S0aHWCIAAABUZXh0UmVuZGVyZXIucmVuZGVyX3BpcGVsaW5lX2dyYXBoWAMAAABkZWZLUEtSh1gNAAAAUHlkb3RSZW5kZXJlclgFAAAAY2xhc3NLVEtih1gMAAAAZ2V0X3JlbmRlcmVyWAMAAABkZWZLZEuBh1gTAAAAVGV4dFJlbmRlcmVyLm9wdGlvblgDAAAAZGVmS0xLT4d1fXImggAAKFgrAAAAUGlwZWxpbmVHcmFwaFJlbmRlcmVyLnJlbmRlcl9waXBlbGluZV9ncmFwaFg/AAAAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LnBpcGVsaW5lX2dyYXBoX3JlbmRlcmVycieCAABYHAAAAFBpcGVsaW5lR3JhcGhSZW5kZXJlci5vcHRpb25qJ4IAAFgiAAAAVGV4dFJlbmRlcmVyLnJlbmRlcl9waXBlbGluZV9ncmFwaGonggAAWCIAAABNdXRlUmVuZGVyZXIucmVuZGVyX3BpcGVsaW5lX2dyYXBoaieCAABYIwAAAFB5ZG90UmVuZGVyZXIucmVuZGVyX3BpcGVsaW5lX2dyYXBoaieCAABYEwAAAE11dGVSZW5kZXJlci5vcHRpb25qJ4IAAFgVAAAAUGlwZWxpbmVHcmFwaFJlbmRlcmVyaieCAABYFAAAAFB5ZG90UmVuZGVyZXIub3B0aW9uaieCAABYDAAAAE11dGVSZW5kZXJlcmonggAAWAwAAABUZXh0UmVuZGVyZXJqJ4IAAFgNAAAAUHlkb3RSZW5kZXJlcmonggAAWAwAAABnZXRfcmVuZGVyZXJqJ4IAAFgTAAAAVGV4dFJlbmRlcmVyLm9wdGlvbmonggAAdWp9aQAAWD8AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkucGlwZWxpbmVfZ3JhcGhfcmVuZGVyZXJyKIIAAIWBcimCAAB9ciqCAABidHIrggAAVRphcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtcyhYtCkAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiRmlsZVN5c3RlbXMgaW50ZXJmYWNlIGNsYXNzIGZvciBhY2Nlc3NpbmcgdGhlIGNvcnJlY3QgZmlsZXN5c3RlbSIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCByZQpmcm9tIGJ1aWx0aW5zIGltcG9ydCBvYmplY3QKCmZyb20gcGFzdC5idWlsdGlucyBpbXBvcnQgdW5pY29kZQoKZnJvbSBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtIGltcG9ydCBCZWFtSU9FcnJvcgpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0gaW1wb3J0IENvbXByZXNzaW9uVHlwZXMKZnJvbSBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtIGltcG9ydCBGaWxlU3lzdGVtCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlciBpbXBvcnQgUnVudGltZVZhbHVlUHJvdmlkZXIKCiMgQWxsIGZpbGVzeXN0ZW0gaW1wbGVtZW50cyBzaG91bGQgYmUgYWRkZWQgaGVyZSBhcwojIGJlc3QgZWZmb3J0IGltcG9ydHMuIFdlIGRvbid0IHdhbnQgdG8gZm9yY2UgbG9hZGluZwojIGEgbW9kdWxlIGlmIHRoZSB1c2VyIGRvZXNuJ3Qgc3VwcGx5IHRoZSBjb3JyZWN0CiMgcGFja2FnZXMgdGhhdCB0aGVzZSBmaWxlc3lzdGVtcyByZWx5IG9uLgojCiMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1wb3NpdGlvbiwgdW51c2VkLWltcG9ydAp0cnk6CiAgZnJvbSBhcGFjaGVfYmVhbS5pby5oYWRvb3BmaWxlc3lzdGVtIGltcG9ydCBIYWRvb3BGaWxlU3lzdGVtCmV4Y2VwdCBJbXBvcnRFcnJvcjoKICBwYXNzCgp0cnk6CiAgZnJvbSBhcGFjaGVfYmVhbS5pby5sb2NhbGZpbGVzeXN0ZW0gaW1wb3J0IExvY2FsRmlsZVN5c3RlbQpleGNlcHQgSW1wb3J0RXJyb3I6CiAgcGFzcwoKdHJ5OgogIGZyb20gYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW0gaW1wb3J0IEdDU0ZpbGVTeXN0ZW0KZXhjZXB0IEltcG9ydEVycm9yOgogIHBhc3MKCgojIHB5bGludDogZW5hYmxlPXdyb25nLWltcG9ydC1wb3NpdGlvbiwgdW51c2VkLWltcG9ydAoKX19hbGxfXyA9IFsnRmlsZVN5c3RlbXMnXQoKCmNsYXNzIEZpbGVTeXN0ZW1zKG9iamVjdCk6CiAgIiIiQSBjbGFzcyB0aGF0IGRlZmluZXMgdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBwZXJmb3JtZWQgb24gYSBmaWxlc3lzdGVtLgogIEFsbCBtZXRob2RzIGFyZSBzdGF0aWMgYW5kIGFjY2VzcyB0aGUgdW5kZXJseWluZyByZWdpc3RlcmVkIGZpbGVzeXN0ZW1zLgogICIiIgogIFVSSV9TQ0hFTUFfUEFUVEVSTiA9IHJlLmNvbXBpbGUoJyg/UDxzY2hlbWU+W2EtekEtWl1bLWEtekEtWjAtOSsuXSopOi8vLionKQoKICBfcGlwZWxpbmVfb3B0aW9ucyA9IE5vbmUKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIHNldF9vcHRpb25zKGNscywgcGlwZWxpbmVfb3B0aW9ucyk6CiAgICAiIiJTZXQgZmlsZXN5c3RlbSBvcHRpb25zLgoKICAgIEFyZ3M6CiAgICAgIHBpcGVsaW5lX29wdGlvbnM6IEluc3RhbmNlIG9mIGBgUGlwZWxpbmVPcHRpb25zYGAuCiAgICAiIiIKICAgIGNscy5fcGlwZWxpbmVfb3B0aW9ucyA9IHBpcGVsaW5lX29wdGlvbnMKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBnZXRfc2NoZW1lKHBhdGgpOgogICAgbWF0Y2hfcmVzdWx0ID0gRmlsZVN5c3RlbXMuVVJJX1NDSEVNQV9QQVRURVJOLm1hdGNoKHBhdGguc3RyaXAoKSkKICAgIGlmIG1hdGNoX3Jlc3VsdCBpcyBOb25lOgogICAgICByZXR1cm4gTm9uZQogICAgcmV0dXJuIG1hdGNoX3Jlc3VsdC5ncm91cGRpY3QoKVsnc2NoZW1lJ10KCiAgQHN0YXRpY21ldGhvZAogIGRlZiBnZXRfZmlsZXN5c3RlbShwYXRoKToKICAgICIiIkdldCB0aGUgY29ycmVjdCBmaWxlc3lzdGVtIGZvciB0aGUgc3BlY2lmaWVkIHBhdGgKICAgICIiIgogICAgdHJ5OgogICAgICBwYXRoX3NjaGVtZSA9IEZpbGVTeXN0ZW1zLmdldF9zY2hlbWUocGF0aCkKICAgICAgc3lzdGVtcyA9IFtmcyBmb3IgZnMgaW4gRmlsZVN5c3RlbS5nZXRfYWxsX3N1YmNsYXNzZXMoKQogICAgICAgICAgICAgICAgIGlmIGZzLnNjaGVtZSgpID09IHBhdGhfc2NoZW1lXQogICAgICBpZiBsZW4oc3lzdGVtcykgPT0gMDoKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdVbmFibGUgdG8gZ2V0IHRoZSBGaWxlc3lzdGVtIGZvciBwYXRoICVzJyAlIHBhdGgpCiAgICAgIGVsaWYgbGVuKHN5c3RlbXMpID09IDE6CiAgICAgICAgIyBQaXBlbGluZSBvcHRpb25zIGNvdWxkIGNvbWUgZWl0aGVyIGZyb20gdGhlIFBpcGVsaW5lIGl0c2VsZiAodXNpbmcKICAgICAgICAjIGRpcmVjdCBydW5uZXIpLCBvciB2aWEgUnVudGltZVZhbHVlUHJvdmlkZXIgKG90aGVyIHJ1bm5lcnMpLgogICAgICAgIG9wdGlvbnMgPSAoRmlsZVN5c3RlbXMuX3BpcGVsaW5lX29wdGlvbnMgb3IKICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVWYWx1ZVByb3ZpZGVyLnJ1bnRpbWVfb3B0aW9ucykKICAgICAgICByZXR1cm4gc3lzdGVtc1swXShwaXBlbGluZV9vcHRpb25zPW9wdGlvbnMpCiAgICAgIGVsc2U6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignRm91bmQgbW9yZSB0aGFuIG9uZSBmaWxlc3lzdGVtIGZvciBwYXRoICVzJyAlIHBhdGgpCiAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgcmFpc2UKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgcmFpc2UgQmVhbUlPRXJyb3IoJ1VuYWJsZSB0byBnZXQgdGhlIEZpbGVzeXN0ZW0nLCB7cGF0aDogZX0pCgogIEBzdGF0aWNtZXRob2QKICBkZWYgam9pbihiYXNlcGF0aCwgKnBhdGhzKToKICAgICIiIkpvaW4gdHdvIG9yIG1vcmUgcGF0aG5hbWUgY29tcG9uZW50cyBmb3IgdGhlIGZpbGVzeXN0ZW0KCiAgICBBcmdzOgogICAgICBiYXNlcGF0aDogc3RyaW5nIHBhdGggb2YgdGhlIGZpcnN0IGNvbXBvbmVudCBvZiB0aGUgcGF0aAogICAgICBwYXRoczogcGF0aCBjb21wb25lbnRzIHRvIGJlIGFkZGVkCgogICAgUmV0dXJuczogZnVsbCBwYXRoIGFmdGVyIGNvbWJpbmluZyBhbGwgdGhlIHBhc3NlZCBjb21wb25lbnRzCiAgICAiIiIKICAgIGZpbGVzeXN0ZW0gPSBGaWxlU3lzdGVtcy5nZXRfZmlsZXN5c3RlbShiYXNlcGF0aCkKICAgIHJldHVybiBmaWxlc3lzdGVtLmpvaW4oYmFzZXBhdGgsICpwYXRocykKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBzcGxpdChwYXRoKToKICAgICIiIlNwbGl0cyB0aGUgZ2l2ZW4gcGF0aCBpbnRvIHR3byBwYXJ0cy4KCiAgICBTcGxpdHMgdGhlIHBhdGggaW50byBhIHBhaXIgKGhlYWQsIHRhaWwpIHN1Y2ggdGhhdCB0YWlsIGNvbnRhaW5zIHRoZSBsYXN0CiAgICBjb21wb25lbnQgb2YgdGhlIHBhdGggYW5kIGhlYWQgY29udGFpbnMgZXZlcnl0aGluZyB1cCB0byB0aGF0LgoKICAgIEZvciBmaWxlLXN5c3RlbXMgb3RoZXIgdGhhbiB0aGUgbG9jYWwgZmlsZS1zeXN0ZW0sIGhlYWQgc2hvdWxkIGluY2x1ZGUgdGhlCiAgICBwcmVmaXguCgogICAgQXJnczoKICAgICAgcGF0aDogcGF0aCBhcyBhIHN0cmluZwogICAgUmV0dXJuczoKICAgICAgYSBwYWlyIG9mIHBhdGggY29tcG9uZW50cyBhcyBzdHJpbmdzLgogICAgIiIiCiAgICBmaWxlc3lzdGVtID0gRmlsZVN5c3RlbXMuZ2V0X2ZpbGVzeXN0ZW0ocGF0aCkKICAgIHJldHVybiBmaWxlc3lzdGVtLnNwbGl0KHBhdGgpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgbWtkaXJzKHBhdGgpOgogICAgIiIiUmVjdXJzaXZlbHkgY3JlYXRlIGRpcmVjdG9yaWVzIGZvciB0aGUgcHJvdmlkZWQgcGF0aC4KCiAgICBBcmdzOgogICAgICBwYXRoOiBzdHJpbmcgcGF0aCBvZiB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSB0aGF0IHNob3VsZCBiZSBjcmVhdGVkCgogICAgUmFpc2VzOgogICAgICBJT0Vycm9yIGlmIGxlYWYgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzLgogICAgIiIiCiAgICBmaWxlc3lzdGVtID0gRmlsZVN5c3RlbXMuZ2V0X2ZpbGVzeXN0ZW0ocGF0aCkKICAgIHJldHVybiBmaWxlc3lzdGVtLm1rZGlycyhwYXRoKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIG1hdGNoKHBhdHRlcm5zLCBsaW1pdHM9Tm9uZSk6CiAgICAiIiJGaW5kIGFsbCBtYXRjaGluZyBwYXRocyB0byB0aGUgcGF0dGVybnMgcHJvdmlkZWQuCgogICAgUGF0dGVybiBtYXRjaGluZyBpcyBkb25lIHVzaW5nIGVhY2ggZmlsZXN5c3RlbSdzIGBgbWF0Y2hgYCBtZXRob2QgKGUuZy4KICAgIDptZXRoOmAuZmlsZXN5c3RlbS5GaWxlU3lzdGVtLm1hdGNoYCkuCgogICAgLi4gbm90ZTo6CiAgICAgIC0gRGVwZW5kaW5nIG9uIHRoZSA6Y2xhc3M6YC5GaWxlU3lzdGVtYCBpbXBsZW1lbnRhdGlvbiwgZmlsZSBsaXN0aW5ncwogICAgICAgICh0aGUgYGAuRmlsZVN5c3RlbS5fbGlzdGBgIG1ldGhvZCkgbWF5IG5vdCBiZSByZWN1cnNpdmUuCiAgICAgIC0gSWYgdGhlIGZpbGUgbGlzdGluZyBpcyBub3QgcmVjdXJzaXZlLCBhIHBhdHRlcm4gbGlrZQogICAgICAgIGBgc2NoZW1lOi8vcGF0aC8qL2Zvb2BgIHdpbGwgbm90IGJlIGFibGUgdG8gbWFjaCBhbnkgZmlsZXMuCgogICAgU2VlIEFsc286CiAgICAgIDptZXRoOmAuZmlsZXN5c3RlbS5GaWxlU3lzdGVtLm1hdGNoYAoKICAgIFBhdHRlcm4gc3ludGF4OgogICAgICBUaGUgcGF0dGVybiBzeW50YXggaXMgYmFzZWQgb24gdGhlIGZubWF0Y2hfIHN5bnRheCwgd2l0aCB0aGUgZm9sbG93aW5nCiAgICAgIGRpZmZlcmVuY2VzOgoKICAgICAgLSAgIGBgKmBgIElzIGVxdWl2YWxlbnQgdG8gYGBbXi9cXF0qYGAgcmF0aGVyIHRoYW4gYGAuKmBgLgogICAgICAtICAgYGAqKmBgIElzIGVxdWl2YWxlbnQgdG8gYGAuKmBgLgoKICAgIC4uIF9gZm5tYXRjaGA6IGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbm1hdGNoLmh0bWwKCiAgICBBcmdzOgogICAgICBwYXR0ZXJuczogbGlzdCBvZiBzdHJpbmcgZm9yIHRoZSBmaWxlIHBhdGggcGF0dGVybiB0byBtYXRjaCBhZ2FpbnN0CiAgICAgIGxpbWl0czogbGlzdCBvZiBtYXhpbXVtIG51bWJlciBvZiByZXNwb25zZXMgdGhhdCBuZWVkIHRvIGJlIGZldGNoZWQKCiAgICBSZXR1cm5zOiBsaXN0IG9mIGBgTWF0Y2hSZXN1bHRgYCBvYmplY3RzLgoKICAgIFJhaXNlczoKICAgICAgYGBCZWFtSU9FcnJvcmBgIGlmIGFueSBvZiB0aGUgcGF0dGVybiBtYXRjaCBvcGVyYXRpb25zIGZhaWwKICAgICIiIgogICAgaWYgbGVuKHBhdHRlcm5zKSA9PSAwOgogICAgICByZXR1cm4gW10KICAgIGZpbGVzeXN0ZW0gPSBGaWxlU3lzdGVtcy5nZXRfZmlsZXN5c3RlbShwYXR0ZXJuc1swXSkKICAgIHJldHVybiBmaWxlc3lzdGVtLm1hdGNoKHBhdHRlcm5zLCBsaW1pdHMpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgY3JlYXRlKHBhdGgsIG1pbWVfdHlwZT0nYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywKICAgICAgICAgICAgIGNvbXByZXNzaW9uX3R5cGU9Q29tcHJlc3Npb25UeXBlcy5BVVRPKToKICAgICIiIlJldHVybnMgYSB3cml0ZSBjaGFubmVsIGZvciB0aGUgZ2l2ZW4gZmlsZSBwYXRoLgoKICAgIEFyZ3M6CiAgICAgIHBhdGg6IHN0cmluZyBwYXRoIG9mIHRoZSBmaWxlIG9iamVjdCB0byBiZSB3cml0dGVuIHRvIHRoZSBzeXN0ZW0KICAgICAgbWltZV90eXBlOiBNSU1FIHR5cGUgdG8gc3BlY2lmeSB0aGUgdHlwZSBvZiBjb250ZW50IGluIHRoZSBmaWxlIG9iamVjdAogICAgICBjb21wcmVzc2lvbl90eXBlOiBUeXBlIG9mIGNvbXByZXNzaW9uIHRvIGJlIHVzZWQgZm9yIHRoaXMgb2JqZWN0LiBTZWUKICAgICAgICBgYENvbXByZXNzaW9uVHlwZXNgYCBmb3IgcG9zc2libGUgdmFsdWVzLgoKICAgIFJldHVybnM6IGZpbGUgaGFuZGxlIHdpdGggYSBgYGNsb3NlYGAgZnVuY3Rpb24gZm9yIHRoZSB1c2VyIHRvIHVzZS4KICAgICIiIgogICAgZmlsZXN5c3RlbSA9IEZpbGVTeXN0ZW1zLmdldF9maWxlc3lzdGVtKHBhdGgpCiAgICByZXR1cm4gZmlsZXN5c3RlbS5jcmVhdGUocGF0aCwgbWltZV90eXBlLCBjb21wcmVzc2lvbl90eXBlKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIG9wZW4ocGF0aCwgbWltZV90eXBlPSdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICAgICAgIGNvbXByZXNzaW9uX3R5cGU9Q29tcHJlc3Npb25UeXBlcy5BVVRPKToKICAgICIiIlJldHVybnMgYSByZWFkIGNoYW5uZWwgZm9yIHRoZSBnaXZlbiBmaWxlIHBhdGguCgogICAgQXJnczoKICAgICAgcGF0aDogc3RyaW5nIHBhdGggb2YgdGhlIGZpbGUgb2JqZWN0IHRvIGJlIHdyaXR0ZW4gdG8gdGhlIHN5c3RlbQogICAgICBtaW1lX3R5cGU6IE1JTUUgdHlwZSB0byBzcGVjaWZ5IHRoZSB0eXBlIG9mIGNvbnRlbnQgaW4gdGhlIGZpbGUgb2JqZWN0CiAgICAgIGNvbXByZXNzaW9uX3R5cGU6IFR5cGUgb2YgY29tcHJlc3Npb24gdG8gYmUgdXNlZCBmb3IgdGhpcyBvYmplY3QuIFNlZQogICAgICAgIGBgQ29tcHJlc3Npb25UeXBlc2BgIGZvciBwb3NzaWJsZSB2YWx1ZXMuCgogICAgUmV0dXJuczogZmlsZSBoYW5kbGUgd2l0aCBhIGBgY2xvc2VgYCBmdW5jdGlvbiBmb3IgdGhlIHVzZXIgdG8gdXNlLgogICAgIiIiCiAgICBmaWxlc3lzdGVtID0gRmlsZVN5c3RlbXMuZ2V0X2ZpbGVzeXN0ZW0ocGF0aCkKICAgIHJldHVybiBmaWxlc3lzdGVtLm9wZW4ocGF0aCwgbWltZV90eXBlLCBjb21wcmVzc2lvbl90eXBlKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGNvcHkoc291cmNlX2ZpbGVfbmFtZXMsIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXMpOgogICAgIiIiUmVjdXJzaXZlbHkgY29weSB0aGUgZmlsZSBsaXN0IGZyb20gdGhlIHNvdXJjZSB0byB0aGUgZGVzdGluYXRpb24KCiAgICBBcmdzOgogICAgICBzb3VyY2VfZmlsZV9uYW1lczogbGlzdCBvZiBzb3VyY2UgZmlsZSBvYmplY3RzIHRoYXQgbmVlZHMgdG8gYmUgY29waWVkCiAgICAgIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXM6IGxpc3Qgb2YgZGVzdGluYXRpb24gb2YgdGhlIG5ldyBvYmplY3QKCiAgICBSYWlzZXM6CiAgICAgIGBgQmVhbUlPRXJyb3JgYCBpZiBhbnkgb2YgdGhlIGNvcHkgb3BlcmF0aW9ucyBmYWlsCiAgICAiIiIKICAgIGlmIGxlbihzb3VyY2VfZmlsZV9uYW1lcykgPT0gMDoKICAgICAgcmV0dXJuCiAgICBmaWxlc3lzdGVtID0gRmlsZVN5c3RlbXMuZ2V0X2ZpbGVzeXN0ZW0oc291cmNlX2ZpbGVfbmFtZXNbMF0pCiAgICByZXR1cm4gZmlsZXN5c3RlbS5jb3B5KHNvdXJjZV9maWxlX25hbWVzLCBkZXN0aW5hdGlvbl9maWxlX25hbWVzKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIHJlbmFtZShzb3VyY2VfZmlsZV9uYW1lcywgZGVzdGluYXRpb25fZmlsZV9uYW1lcyk6CiAgICAiIiJSZW5hbWUgdGhlIGZpbGVzIGF0IHRoZSBzb3VyY2UgbGlzdCB0byB0aGUgZGVzdGluYXRpb24gbGlzdC4KICAgIFNvdXJjZSBhbmQgZGVzdGluYXRpb24gbGlzdHMgc2hvdWxkIGJlIG9mIHRoZSBzYW1lIHNpemUuCgogICAgQXJnczoKICAgICAgc291cmNlX2ZpbGVfbmFtZXM6IExpc3Qgb2YgZmlsZSBwYXRocyB0aGF0IG5lZWQgdG8gYmUgbW92ZWQKICAgICAgZGVzdGluYXRpb25fZmlsZV9uYW1lczogTGlzdCBvZiBkZXN0aW5hdGlvbl9maWxlX25hbWVzIGZvciB0aGUgZmlsZXMKCiAgICBSYWlzZXM6CiAgICAgIGBgQmVhbUlPRXJyb3JgYCBpZiBhbnkgb2YgdGhlIHJlbmFtZSBvcGVyYXRpb25zIGZhaWwKICAgICIiIgogICAgaWYgbGVuKHNvdXJjZV9maWxlX25hbWVzKSA9PSAwOgogICAgICByZXR1cm4KICAgIGZpbGVzeXN0ZW0gPSBGaWxlU3lzdGVtcy5nZXRfZmlsZXN5c3RlbShzb3VyY2VfZmlsZV9uYW1lc1swXSkKICAgIHJldHVybiBmaWxlc3lzdGVtLnJlbmFtZShzb3VyY2VfZmlsZV9uYW1lcywgZGVzdGluYXRpb25fZmlsZV9uYW1lcykKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBleGlzdHMocGF0aCk6CiAgICAiIiJDaGVjayBpZiB0aGUgcHJvdmlkZWQgcGF0aCBleGlzdHMgb24gdGhlIEZpbGVTeXN0ZW0uCgogICAgQXJnczoKICAgICAgcGF0aDogc3RyaW5nIHBhdGggdGhhdCBuZWVkcyB0byBiZSBjaGVja2VkLgoKICAgIFJldHVybnM6IGJvb2xlYW4gZmxhZyBpbmRpY2F0aW5nIGlmIHBhdGggZXhpc3RzCiAgICAiIiIKICAgIGZpbGVzeXN0ZW0gPSBGaWxlU3lzdGVtcy5nZXRfZmlsZXN5c3RlbShwYXRoKQogICAgcmV0dXJuIGZpbGVzeXN0ZW0uZXhpc3RzKHBhdGgpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgbGFzdF91cGRhdGVkKHBhdGgpOgogICAgIiIiR2V0IFVOSVggRXBvY2ggdGltZSBpbiBzZWNvbmRzIG9uIHRoZSBGaWxlU3lzdGVtLgoKICAgIEFyZ3M6CiAgICAgIHBhdGg6IHN0cmluZyBwYXRoIG9mIGZpbGUuCgogICAgUmV0dXJuczogZmxvYXQgVU5JWCBFcG9jaCB0aW1lCgogICAgUmFpc2VzOgogICAgICBgYEJlYW1JT0Vycm9yYGAgaWYgcGF0aCBkb2Vzbid0IGV4aXN0LgogICAgIiIiCiAgICBmaWxlc3lzdGVtID0gRmlsZVN5c3RlbXMuZ2V0X2ZpbGVzeXN0ZW0ocGF0aCkKICAgIHJldHVybiBmaWxlc3lzdGVtLmxhc3RfdXBkYXRlZChwYXRoKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGNoZWNrc3VtKHBhdGgpOgogICAgIiIiRmV0Y2ggY2hlY2tzdW0gbWV0YWRhdGEgb2YgYSBmaWxlIG9uIHRoZQogICAgOmNsYXNzOmB+YXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5GaWxlU3lzdGVtYC4KCiAgICBUaGlzIG9wZXJhdGlvbiByZXR1cm5zIGNoZWNrc3VtIG1ldGFkYXRhIGFzIHN0b3JlZCBpbiB0aGUgdW5kZXJseWluZwogICAgRmlsZVN5c3RlbS4gSXQgc2hvdWxkIG5vdCByZWFkIGFueSBmaWxlIGRhdGEuIENoZWNrc3VtIHR5cGUgYW5kIGZvcm1hdCBhcmUKICAgIEZpbGVTeXN0ZW0gZGVwZW5kZW50IGFuZCBhcmUgbm90IGNvbXBhdGlibGUgYmV0d2VlbiBGaWxlU3lzdGVtcy4KCiAgICBBcmdzOgogICAgICBwYXRoOiBzdHJpbmcgcGF0aCBvZiBhIGZpbGUuCgogICAgUmV0dXJuczogc3RyaW5nIGNvbnRhaW5pbmcgY2hlY2tzdW0KCiAgICBSYWlzZXM6CiAgICAgIGBgQmVhbUlPRXJyb3JgYCBpZiBwYXRoIGlzbid0IGEgZmlsZSBvciBkb2Vzbid0IGV4aXN0LgogICAgIiIiCiAgICBmaWxlc3lzdGVtID0gRmlsZVN5c3RlbXMuZ2V0X2ZpbGVzeXN0ZW0ocGF0aCkKICAgIHJldHVybiBmaWxlc3lzdGVtLmNoZWNrc3VtKHBhdGgpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZGVsZXRlKHBhdGhzKToKICAgICIiIkRlbGV0ZXMgZmlsZXMgb3IgZGlyZWN0b3JpZXMgYXQgdGhlIHByb3ZpZGVkIHBhdGhzLgogICAgRGlyZWN0b3JpZXMgd2lsbCBiZSBkZWxldGVkIHJlY3Vyc2l2ZWx5LgoKICAgIEFyZ3M6CiAgICAgIHBhdGhzOiBsaXN0IG9mIHBhdGhzIHRoYXQgZ2l2ZSB0aGUgZmlsZSBvYmplY3RzIHRvIGJlIGRlbGV0ZWQKCiAgICBSYWlzZXM6CiAgICAgIGBgQmVhbUlPRXJyb3JgYCBpZiBhbnkgb2YgdGhlIGRlbGV0ZSBvcGVyYXRpb25zIGZhaWwKICAgICIiIgogICAgaWYgaXNpbnN0YW5jZShwYXRocywgKHN0ciwgdW5pY29kZSkpOgogICAgICByYWlzZSBCZWFtSU9FcnJvcignRGVsZXRlIHBhc3NlZCBzdHJpbmcgYXJndW1lbnQgaW5zdGVhZCBvZiBsaXN0OiAlcycgJQogICAgICAgICAgICAgICAgICAgICAgICBwYXRocykKICAgIGlmIGxlbihwYXRocykgPT0gMDoKICAgICAgcmV0dXJuCiAgICBmaWxlc3lzdGVtID0gRmlsZVN5c3RlbXMuZ2V0X2ZpbGVzeXN0ZW0ocGF0aHNbMF0pCiAgICByZXR1cm4gZmlsZXN5c3RlbS5kZWxldGUocGF0aHMpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZ2V0X2NodW5rX3NpemUocGF0aCk6CiAgICAiIiJHZXQgdGhlIGNvcnJlY3QgY2h1bmsgc2l6ZSBmb3IgdGhlIEZpbGVTeXN0ZW0uCgogICAgQXJnczoKICAgICAgcGF0aDogc3RyaW5nIHBhdGggdGhhdCBuZWVkcyB0byBiZSBjaGVja2VkLgoKICAgIFJldHVybnM6IGludGVnZXIgc2l6ZSBmb3IgcGFyYWxsZWxpemF0aW9uIGluIHRoZSBGUyBvcGVyYXRpb25zLgogICAgIiIiCiAgICBmaWxlc3lzdGVtID0gRmlsZVN5c3RlbXMuZ2V0X2ZpbGVzeXN0ZW0ocGF0aCkKICAgIHJldHVybiBmaWxlc3lzdGVtLkNIVU5LX1NJWkUKfXIsggAAKFgXAAAARmlsZVN5c3RlbXMuc2V0X29wdGlvbnNYAwAAAGRlZktDS0uHWBIAAABGaWxlU3lzdGVtcy5leGlzdHNYAwAAAGRlZkv+TQkBh1gSAAAARmlsZVN5c3RlbXMucmVuYW1lWAMAAABkZWZL7Uv9h1gSAAAARmlsZVN5c3RlbXMuZGVsZXRlWAMAAABkZWZNLQFNPwGHWBIAAABGaWxlU3lzdGVtcy5jcmVhdGVYAwAAAGRlZku9S8yHWBEAAABGaWxlU3lzdGVtcy5zcGxpdFgDAAAAZGVmS3dLiIdYGAAAAEZpbGVTeXN0ZW1zLmxhc3RfdXBkYXRlZFgDAAAAZGVmTQoBTRgBh1gQAAAARmlsZVN5c3RlbXMuam9pblgDAAAAZGVmS2pLdodYEQAAAEZpbGVTeXN0ZW1zLm1hdGNoWAMAAABkZWZLlku8h1gSAAAARmlsZVN5c3RlbXMubWtkaXJzWAMAAABkZWZLiUuVh1gaAAAARmlsZVN5c3RlbXMuZ2V0X2ZpbGVzeXN0ZW1YAwAAAGRlZktTS2mHWAsAAABGaWxlU3lzdGVtc1gFAAAAY2xhc3NLO01LAYdYEAAAAEZpbGVTeXN0ZW1zLm9wZW5YAwAAAGRlZkvNS9yHWBQAAABGaWxlU3lzdGVtcy5jaGVja3N1bVgDAAAAZGVmTRkBTSwBh1gWAAAARmlsZVN5c3RlbXMuZ2V0X3NjaGVtZVgDAAAAZGVmS0xLUodYEAAAAEZpbGVTeXN0ZW1zLmNvcHlYAwAAAGRlZkvdS+yHWBoAAABGaWxlU3lzdGVtcy5nZXRfY2h1bmtfc2l6ZVgDAAAAZGVmTUABTUsBh3V9ci2CAAAoWBcAAABGaWxlU3lzdGVtcy5zZXRfb3B0aW9uc2rHWAAAWBIAAABGaWxlU3lzdGVtcy5leGlzdHNqx1gAAFgSAAAARmlsZVN5c3RlbXMucmVuYW1lasdYAABYEgAAAEZpbGVTeXN0ZW1zLmRlbGV0ZWrHWAAAWBIAAABGaWxlU3lzdGVtcy5jcmVhdGVqx1gAAFgRAAAARmlsZVN5c3RlbXMuc3BsaXRqx1gAAFgYAAAARmlsZVN5c3RlbXMubGFzdF91cGRhdGVkasdYAABYGgAAAEZpbGVTeXN0ZW1zLmdldF9maWxlc3lzdGVtasdYAABYEQAAAEZpbGVTeXN0ZW1zLm1hdGNoasdYAABYEgAAAEZpbGVTeXN0ZW1zLm1rZGlyc2rHWAAAWBAAAABGaWxlU3lzdGVtcy5qb2luasdYAABYCwAAAEZpbGVTeXN0ZW1zasdYAABYEAAAAEZpbGVTeXN0ZW1zLm9wZW5qx1gAAFgUAAAARmlsZVN5c3RlbXMuY2hlY2tzdW1qx1gAAFgWAAAARmlsZVN5c3RlbXMuZ2V0X3NjaGVtZWrHWAAAWBAAAABGaWxlU3lzdGVtcy5jb3B5asdYAABYGgAAAEZpbGVTeXN0ZW1zLmdldF9jaHVua19zaXplasdYAAB1an1pAABYGgAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zci6CAACFgXIvggAAfXIwggAAYnRVIWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuc2lkZWlucHV0c3IxggAAKFhlCwAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJJbnRlcm5hbCBzaWRlIGlucHV0IHRyYW5zZm9ybXMgYW5kIGltcGxlbWVudGF0aW9ucy4KCkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCkltcG9ydGFudDogdGhpcyBtb2R1bGUgaXMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsIGFuZCBzaG91bGQgbm90IGJlIHVzZWQKZGlyZWN0bHkgYnkgcGlwZWxpbmUgd3JpdGVycy4gSW5zdGVhZCwgdXNlcnMgc2hvdWxkIHVzZSB0aGUgaGVscGVyIG1ldGhvZHMKQXNTaW5nbGV0b24sIEFzSXRlciwgQXNMaXN0IGFuZCBBc0RpY3QgaW4gYXBhY2hlX2JlYW0ucHZhbHVlLgoiIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0Cgpmcm9tIGJ1aWx0aW5zIGltcG9ydCBvYmplY3QKCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgd2luZG93CgoKIyBUb3AtbGV2ZWwgZnVuY3Rpb24gc28gd2UgY2FuIGlkZW50aWZ5IGl0IGxhdGVyLgpkZWYgX2dsb2JhbF93aW5kb3dfbWFwcGluZ19mbih3LCBnbG9iYWxfd2luZG93PXdpbmRvdy5HbG9iYWxXaW5kb3coKSk6CiAgcmV0dXJuIGdsb2JhbF93aW5kb3cKCgpkZWYgZGVmYXVsdF93aW5kb3dfbWFwcGluZ19mbih0YXJnZXRfd2luZG93X2ZuKToKICBpZiB0YXJnZXRfd2luZG93X2ZuID09IHdpbmRvdy5HbG9iYWxXaW5kb3dzKCk6CiAgICByZXR1cm4gX2dsb2JhbF93aW5kb3dfbWFwcGluZ19mbgoKICBkZWYgbWFwX3ZpYV9lbmQoc291cmNlX3dpbmRvdyk6CiAgICByZXR1cm4gbGlzdCh0YXJnZXRfd2luZG93X2ZuLmFzc2lnbigKICAgICAgICB3aW5kb3cuV2luZG93Rm4uQXNzaWduQ29udGV4dChzb3VyY2Vfd2luZG93Lm1heF90aW1lc3RhbXAoKSkpKVstMV0KCiAgcmV0dXJuIG1hcF92aWFfZW5kCgoKY2xhc3MgU2lkZUlucHV0TWFwKG9iamVjdCk6CiAgIiIiUmVwcmVzZW50cyBhIG1hcHBpbmcgb2Ygd2luZG93cyB0byBzaWRlIGlucHV0IHZhbHVlcy4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHZpZXdfY2xhc3MsIHZpZXdfb3B0aW9ucywgaXRlcmFibGUpOgogICAgc2VsZi5fd2luZG93X21hcHBpbmdfZm4gPSB2aWV3X29wdGlvbnMuZ2V0KAogICAgICAgICd3aW5kb3dfbWFwcGluZ19mbicsIF9nbG9iYWxfd2luZG93X21hcHBpbmdfZm4pCiAgICBzZWxmLl92aWV3X2NsYXNzID0gdmlld19jbGFzcwogICAgc2VsZi5fdmlld19vcHRpb25zID0gdmlld19vcHRpb25zCiAgICBzZWxmLl9pdGVyYWJsZSA9IGl0ZXJhYmxlCiAgICBzZWxmLl9jYWNoZSA9IHt9CgogIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCB3aW5kb3cpOgogICAgaWYgd2luZG93IG5vdCBpbiBzZWxmLl9jYWNoZToKICAgICAgdGFyZ2V0X3dpbmRvdyA9IHNlbGYuX3dpbmRvd19tYXBwaW5nX2ZuKHdpbmRvdykKICAgICAgc2VsZi5fY2FjaGVbd2luZG93XSA9IHNlbGYuX3ZpZXdfY2xhc3MuX2Zyb21fcnVudGltZV9pdGVyYWJsZSgKICAgICAgICAgIF9GaWx0ZXJpbmdJdGVyYWJsZShzZWxmLl9pdGVyYWJsZSwgdGFyZ2V0X3dpbmRvdyksIHNlbGYuX3ZpZXdfb3B0aW9ucykKICAgIHJldHVybiBzZWxmLl9jYWNoZVt3aW5kb3ddCgogIGRlZiBpc19nbG9iYWxseV93aW5kb3dlZChzZWxmKToKICAgIHJldHVybiBzZWxmLl93aW5kb3dfbWFwcGluZ19mbiA9PSBfZ2xvYmFsX3dpbmRvd19tYXBwaW5nX2ZuCgoKY2xhc3MgX0ZpbHRlcmluZ0l0ZXJhYmxlKG9iamVjdCk6CiAgIiIiQW4gaXRlcmFibGUgY29udGFpbmluZyBvbmx5IHRob3NlIHZhbHVlcyBpbiB0aGUgZ2l2ZW4gd2luZG93LgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgaXRlcmFibGUsIHRhcmdldF93aW5kb3cpOgogICAgc2VsZi5faXRlcmFibGUgPSBpdGVyYWJsZQogICAgc2VsZi5fdGFyZ2V0X3dpbmRvdyA9IHRhcmdldF93aW5kb3cKCiAgZGVmIF9faXRlcl9fKHNlbGYpOgogICAgZm9yIHd2IGluIHNlbGYuX2l0ZXJhYmxlOgogICAgICBpZiBzZWxmLl90YXJnZXRfd2luZG93IGluIHd2LndpbmRvd3M6CiAgICAgICAgeWllbGQgd3YudmFsdWUKCiAgZGVmIF9fcmVkdWNlX18oc2VsZik6CiAgICAjIFBpY2tsZSBzZWxmIGFzIGFuIGFscmVhZHkgZmlsdGVyZWQgbGlzdC4KICAgIHJldHVybiBsaXN0LCAobGlzdChzZWxmKSwpCn1yMoIAAChYEgAAAF9GaWx0ZXJpbmdJdGVyYWJsZVgFAAAAY2xhc3NLSEtYh1ghAAAAU2lkZUlucHV0TWFwLmlzX2dsb2JhbGx5X3dpbmRvd2VkWAMAAABkZWZLREtGh1gYAAAAU2lkZUlucHV0TWFwLl9fZ2V0aXRlbV9fWAMAAABkZWZLPUtDh1gZAAAAX2dsb2JhbF93aW5kb3dfbWFwcGluZ19mblgDAAAAZGVmSyNLJYdYGQAAAGRlZmF1bHRfd2luZG93X21hcHBpbmdfZm5YAwAAAGRlZksnSzCHWBsAAABfRmlsdGVyaW5nSXRlcmFibGUuX19pbml0X19YAwAAAGRlZktMS0+HWAwAAABTaWRlSW5wdXRNYXBYBQAAAGNsYXNzSzJLRodYJQAAAGRlZmF1bHRfd2luZG93X21hcHBpbmdfZm4ubWFwX3ZpYV9lbmRYAwAAAGRlZksrSy6HWB0AAABfRmlsdGVyaW5nSXRlcmFibGUuX19yZWR1Y2VfX1gDAAAAZGVmS1VLWIdYGwAAAF9GaWx0ZXJpbmdJdGVyYWJsZS5fX2l0ZXJfX1gDAAAAZGVmS1BLVIdYFQAAAFNpZGVJbnB1dE1hcC5fX2luaXRfX1gDAAAAZGVmSzVLPId1fXIzggAAKFgZAAAAZGVmYXVsdF93aW5kb3dfbWFwcGluZ19mbmraYwAAWCEAAABTaWRlSW5wdXRNYXAuaXNfZ2xvYmFsbHlfd2luZG93ZWRq2mMAAFgMAAAAU2lkZUlucHV0TWFwatpjAAB1an1pAABYIQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuc2lkZWlucHV0c3I0ggAAhYFyNYIAAH1yNoIAAGJ0cjeCAABVLmFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZmFrZV9kYXRhc3RvcmUoWB4OAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkZha2UgZGF0YXN0b3JlIHVzZWQgZm9yIHVuaXQgdGVzdGluZy4KCkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IHV1aWQKZnJvbSBidWlsdGlucyBpbXBvcnQgcmFuZ2UKCiMgUHJvdGVjdCBhZ2FpbnN0IGVudmlyb25tZW50cyB3aGVyZSBkYXRhc3RvcmUgbGlicmFyeSBpcyBub3QgYXZhaWxhYmxlLgojIHB5bGludDogZGlzYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbgp0cnk6CiAgZnJvbSBnb29nbGUuY2xvdWQucHJvdG8uZGF0YXN0b3JlLnYxIGltcG9ydCBkYXRhc3RvcmVfcGIyCiAgZnJvbSBnb29nbGUuY2xvdWQucHJvdG8uZGF0YXN0b3JlLnYxIGltcG9ydCBxdWVyeV9wYjIKZXhjZXB0IEltcG9ydEVycm9yOgogIHBhc3MKIyBweWxpbnQ6IGVuYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbgoKCmRlZiBjcmVhdGVfcnVuX3F1ZXJ5KGVudGl0aWVzLCBiYXRjaF9zaXplKToKICAiIiJBIGZha2UgZGF0YXN0b3JlIHJ1bl9xdWVyeSBtZXRob2QgdGhhdCByZXR1cm5zIGVudGl0aWVzIGluIGJhdGNoZXMuCgogIE5vdGU6IHRoZSBvdXRlciBtZXRob2QgaXMgbmVlZGVkIHRvIG1ha2UgdGhlIGBlbnRpdGllc2AgYW5kIGBiYXRjaF9zaXplYAogIGF2YWlsYWJsZSBpbiB0aGUgc2NvcGUgb2YgZmFrZV9ydW5fcXVlcnkgbWV0aG9kLgoKICBBcmdzOgogICAgZW50aXRpZXM6IGxpc3Qgb2YgZW50aXRpZXMgc3VwcG9zZWQgdG8gYmUgY29udGFpbmVkIGluIHRoZSBkYXRhc3RvcmUuCiAgICBiYXRjaF9zaXplOiB0aGUgbnVtYmVyIG9mIGVudGl0aWVzIHRoYXQgcnVuX3F1ZXJ5IG1ldGhvZCByZXR1cm5zIGluIG9uZQogICAgICAgICAgICAgICAgcmVxdWVzdC4KICAiIiIKICBkZWYgcnVuX3F1ZXJ5KHJlcSk6CiAgICBzdGFydCA9IGludChyZXEucXVlcnkuc3RhcnRfY3Vyc29yKSBpZiByZXEucXVlcnkuc3RhcnRfY3Vyc29yIGVsc2UgMAogICAgIyBpZiBxdWVyeSBsaW1pdCBpcyBsZXNzIHRoYW4gYmF0Y2hfc2l6ZSwgdGhlbiBvbmx5IHJldHVybiB0aGF0IG11Y2guCiAgICBjb3VudCA9IG1pbihiYXRjaF9zaXplLCByZXEucXVlcnkubGltaXQudmFsdWUpCiAgICAjIGNhbm5vdCBnbyBtb3JlIHRoYW4gdGhlIG51bWJlciBvZiBlbnRpdGllcyBjb250YWluZWQgaW4gZGF0YXN0b3JlLgogICAgZW5kID0gbWluKGxlbihlbnRpdGllcyksIHN0YXJ0ICsgY291bnQpCiAgICBmaW5pc2ggPSBGYWxzZQogICAgIyBGaW5pc2ggcmVhZGluZyB3aGVuIHRoZXJlIGFyZSBubyBtb3JlIGVudGl0aWVzIHRvIHJldHVybiwKICAgICMgb3IgcmVxdWVzdCBxdWVyeSBsaW1pdCBoYXMgYmVlbiBzYXRpc2ZpZWQuCiAgICBpZiBlbmQgPT0gbGVuKGVudGl0aWVzKSBvciBjb3VudCA9PSByZXEucXVlcnkubGltaXQudmFsdWU6CiAgICAgIGZpbmlzaCA9IFRydWUKICAgIHJldHVybiBjcmVhdGVfcmVzcG9uc2UoZW50aXRpZXNbc3RhcnQ6ZW5kXSwgc3RyKGVuZCksIGZpbmlzaCkKICByZXR1cm4gcnVuX3F1ZXJ5CgoKZGVmIGNyZWF0ZV9jb21taXQobXV0YXRpb25zKToKICAiIiJBIGZha2UgRGF0YXN0b3JlIGNvbW1pdCBtZXRob2QgdGhhdCB3cml0ZXMgdGhlIG11dGF0aW9ucyB0byBhIGxpc3QuCgogIEFyZ3M6CiAgICBtdXRhdGlvbnM6IEEgbGlzdCB0byB3cml0ZSBtdXRhdGlvbnMgdG8uCgogIFJldHVybnM6CiAgICBBIGZha2UgRGF0YXN0b3JlIGNvbW1pdCBtZXRob2QKICAiIiIKCiAgZGVmIGNvbW1pdChyZXEpOgogICAgZm9yIG11dGF0aW9uIGluIHJlcS5tdXRhdGlvbnM6CiAgICAgIG11dGF0aW9ucy5hcHBlbmQobXV0YXRpb24pCgogIHJldHVybiBjb21taXQKCgpkZWYgY3JlYXRlX3Jlc3BvbnNlKGVudGl0aWVzLCBlbmRfY3Vyc29yLCBmaW5pc2gpOgogICIiIkNyZWF0ZXMgYSBxdWVyeSByZXNwb25zZSBmb3IgYSBnaXZlbiBiYXRjaCBvZiBzY2F0dGVyIGVudGl0aWVzLiIiIgogIHJlc3AgPSBkYXRhc3RvcmVfcGIyLlJ1blF1ZXJ5UmVzcG9uc2UoKQogIGlmIGZpbmlzaDoKICAgIHJlc3AuYmF0Y2gubW9yZV9yZXN1bHRzID0gcXVlcnlfcGIyLlF1ZXJ5UmVzdWx0QmF0Y2guTk9fTU9SRV9SRVNVTFRTCiAgZWxzZToKICAgIHJlc3AuYmF0Y2gubW9yZV9yZXN1bHRzID0gcXVlcnlfcGIyLlF1ZXJ5UmVzdWx0QmF0Y2guTk9UX0ZJTklTSEVECgogIHJlc3AuYmF0Y2guZW5kX2N1cnNvciA9IGVuZF9jdXJzb3IKICBmb3IgZW50aXR5X3Jlc3VsdCBpbiBlbnRpdGllczoKICAgIHJlc3AuYmF0Y2guZW50aXR5X3Jlc3VsdHMuYWRkKCkuQ29weUZyb20oZW50aXR5X3Jlc3VsdCkKCiAgcmV0dXJuIHJlc3AKCgpkZWYgY3JlYXRlX2VudGl0aWVzKGNvdW50LCBpZF9vcl9uYW1lPUZhbHNlKToKICAiIiJDcmVhdGVzIGEgbGlzdCBvZiBlbnRpdGllcyB3aXRoIHJhbmRvbSBrZXlzLiIiIgogIGVudGl0aWVzID0gW10KCiAgZm9yIF8gaW4gcmFuZ2UoY291bnQpOgogICAgZW50aXR5X3Jlc3VsdCA9IHF1ZXJ5X3BiMi5FbnRpdHlSZXN1bHQoKQogICAgaWYgaWRfb3JfbmFtZToKICAgICAgZW50aXR5X3Jlc3VsdC5lbnRpdHkua2V5LnBhdGguYWRkKCkuaWQgPSAoCiAgICAgICAgICB1dWlkLnV1aWQ0KCkuaW50ICYgKCgxIDw8IDYzKSAtIDEpKQogICAgZWxzZToKICAgICAgZW50aXR5X3Jlc3VsdC5lbnRpdHkua2V5LnBhdGguYWRkKCkubmFtZSA9IHN0cih1dWlkLnV1aWQ0KCkpCiAgICBlbnRpdGllcy5hcHBlbmQoZW50aXR5X3Jlc3VsdCkKCiAgcmV0dXJuIGVudGl0aWVzCn1yOIIAAChYEAAAAGNyZWF0ZV9ydW5fcXVlcnlYAwAAAGRlZksmSz6HWBoAAABjcmVhdGVfcnVuX3F1ZXJ5LnJ1bl9xdWVyeVgDAAAAZGVmSzFLPYdYDwAAAGNyZWF0ZV9lbnRpdGllc1gDAAAAZGVmS2BLbodYDwAAAGNyZWF0ZV9yZXNwb25zZVgDAAAAZGVmS1FLXodYFAAAAGNyZWF0ZV9jb21taXQuY29tbWl0WAMAAABkZWZLSktNh1gNAAAAY3JlYXRlX2NvbW1pdFgDAAAAZGVmS0BLT4d1fXI5ggAAKFgPAAAAY3JlYXRlX2VudGl0aWVzauVYAABYEAAAAGNyZWF0ZV9ydW5fcXVlcnlq5VgAAFgNAAAAY3JlYXRlX2NvbW1pdGrlWAAAWA8AAABjcmVhdGVfcmVzcG9uc2Vq5VgAAHVqfWkAAFguAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5mYWtlX2RhdGFzdG9yZXI6ggAAhYFyO4IAAH1yPIIAAGJ0VS1hcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmNhY2hlX21hbmFnZXIoWPEbAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CmZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoKaW1wb3J0IGNvbGxlY3Rpb25zCmltcG9ydCBkYXRldGltZQppbXBvcnQgb3MKaW1wb3J0IHRlbXBmaWxlCmltcG9ydCB1cmxsaWIKCmltcG9ydCBhcGFjaGVfYmVhbSBhcyBiZWFtCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IGNvZGVycwpmcm9tIGFwYWNoZV9iZWFtLmlvIGltcG9ydCBmaWxlc3lzdGVtcwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IGNvbWJpbmVycwoKdHJ5OiAgICAgICAgICAgICAgICAgICAgIyBQeXRob24gMwogIHVucXVvdGVfdG9fYnl0ZXMgPSB1cmxsaWIucGFyc2UudW5xdW90ZV90b19ieXRlcwogIHF1b3RlID0gdXJsbGliLnBhcnNlLnF1b3RlCmV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjogICMgUHl0aG9uIDIKICAjIHB5bGludDogZGlzYWJsZT1kZXByZWNhdGVkLXVybGxpYi1mdW5jdGlvbgogIHVucXVvdGVfdG9fYnl0ZXMgPSB1cmxsaWIudW5xdW90ZQogIHF1b3RlID0gdXJsbGliLnF1b3RlCgoKY2xhc3MgQ2FjaGVNYW5hZ2VyKG9iamVjdCk6CiAgIiIiQWJzdHJhY3QgY2xhc3MgZm9yIGNhY2hpbmcgUENvbGxlY3Rpb25zLgoKICBBIFBDb2xsZWN0aW9uIGNhY2hlIGlzIGlkZW50aWZpZWQgYnkgbGFiZWxzLCB3aGljaCBjb25zaXN0IG9mIGEgcHJlZml4IChlaXRoZXIKICAnZnVsbCcgb3IgJ3NhbXBsZScpIGFuZCBhIGNhY2hlX2xhYmVsIHdoaWNoIGlzIGEgaGFzaCBvZiB0aGUgUENvbGxlY3Rpb24KICBkZXJpdmF0aW9uLgogICIiIgoKICBkZWYgZXhpc3RzKHNlbGYsICpsYWJlbHMpOgogICAgIiIiUmV0dXJucyBpZiB0aGUgUENvbGxlY3Rpb24gY2FjaGUgZXhpc3RzLiIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgaXNfbGF0ZXN0X3ZlcnNpb24oc2VsZiwgdmVyc2lvbiwgKmxhYmVscyk6CiAgICAiIiJSZXR1cm5zIGlmIHRoZSBnaXZlbiB2ZXJzaW9uIG51bWJlciBpcyB0aGUgbGF0ZXN0LiIiIgogICAgcmV0dXJuIHZlcnNpb24gPT0gc2VsZi5fbGF0ZXN0X3ZlcnNpb24oKmxhYmVscykKCiAgZGVmIF9sYXRlc3RfdmVyc2lvbihzZWxmLCAqbGFiZWxzKToKICAgICIiIlJldHVybnMgdGhlIGxhdGVzdCB2ZXJzaW9uIG51bWJlciBvZiB0aGUgUENvbGxlY3Rpb24gY2FjaGUuIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiByZWFkKHNlbGYsICpsYWJlbHMpOgogICAgIiIiUmV0dXJuIHRoZSBQQ29sbGVjdGlvbiBhcyBhIGxpc3QgYXMgd2VsbCBhcyB0aGUgdmVyc2lvbiBudW1iZXIuCgogICAgUmV0dXJuczoKICAgICAgKExpc3RbUENvbGxlY3Rpb25dKQogICAgICAoaW50KSB0aGUgdmVyc2lvbiBudW1iZXIKCiAgICBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSB2ZXJzaW9uIG51bWJlcnMgZnJvbSByZWFkKCkgYW5kX2xhdGVzdF92ZXJzaW9uKCkKICAgIGFyZSBkaWZmZXJlbnQuIFRoaXMgdXN1YWxseSBtZWFucyB0aGF0IHRoZSBjYWNoZSdzIGJlZW4gZXZpY3RlZCAodGh1cwogICAgdW5hdmFpbGFibGUgPT4gcmVhZCgpIHJldHVybnMgdmVyc2lvbiA9IC0xKSwgYnV0IGl0IGhhZCByZWFjaGVkIHZlcnNpb24gbgogICAgYmVmb3JlIGV2aWN0aW9uLgogICAgIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiBzb3VyY2Uoc2VsZiwgKmxhYmVscyk6CiAgICAiIiJSZXR1cm5zIGEgYmVhbS5pby5Tb3VyY2UgdGhhdCByZWFkcyB0aGUgUENvbGxlY3Rpb24gY2FjaGUuIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiBzaW5rKHNlbGYsICpsYWJlbHMpOgogICAgIiIiUmV0dXJucyBhIGJlYW0uaW8uU2luayB0aGF0IHdyaXRlcyB0aGUgUENvbGxlY3Rpb24gY2FjaGUuIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiBjbGVhbnVwKHNlbGYpOgogICAgIiIiQ2xlYW5zIHVwIGFsbCB0aGUgUENvbGxlY3Rpb24gY2FjaGVzLiIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKCmNsYXNzIEZpbGVCYXNlZENhY2hlTWFuYWdlcihDYWNoZU1hbmFnZXIpOgogICIiIk1hcHMgUENvbGxlY3Rpb25zIHRvIGxvY2FsIHRlbXAgZmlsZXMgZm9yIG1hdGVyaWFsaXphdGlvbi4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGNhY2hlX2Rpcj1Ob25lKToKICAgIGlmIGNhY2hlX2RpcjoKICAgICAgc2VsZi5fY2FjaGVfZGlyID0gZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMuam9pbigKICAgICAgICAgIGNhY2hlX2RpciwKICAgICAgICAgIGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpLnN0cmZ0aW1lKCJjYWNoZS0leS0lbS0lZC0lSF8lTV8lUyIpKQogICAgZWxzZToKICAgICAgc2VsZi5fY2FjaGVfZGlyID0gdGVtcGZpbGUubWtkdGVtcCgKICAgICAgICAgIHByZWZpeD0naW50ZXJhY3RpdmUtdGVtcC0nLCBkaXI9b3MuZW52aXJvbi5nZXQoJ1RFU1RfVE1QRElSJywgTm9uZSkpCiAgICBzZWxmLl92ZXJzaW9ucyA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGxhbWJkYTogc2VsZi5fQ2FjaGVWZXJzaW9uKCkpCgogIGRlZiBleGlzdHMoc2VsZiwgKmxhYmVscyk6CiAgICByZXR1cm4gYm9vbChzZWxmLl9tYXRjaCgqbGFiZWxzKSkKCiAgZGVmIF9sYXRlc3RfdmVyc2lvbihzZWxmLCAqbGFiZWxzKToKICAgIHRpbWVzdGFtcCA9IDAKICAgIGZvciBwYXRoIGluIHNlbGYuX21hdGNoKCpsYWJlbHMpOgogICAgICB0aW1lc3RhbXAgPSBtYXgodGltZXN0YW1wLCBmaWxlc3lzdGVtcy5GaWxlU3lzdGVtcy5sYXN0X3VwZGF0ZWQocGF0aCkpCiAgICByZXN1bHQgPSBzZWxmLl92ZXJzaW9uc1siLSIuam9pbihsYWJlbHMpXS5nZXRfdmVyc2lvbih0aW1lc3RhbXApCiAgICByZXR1cm4gcmVzdWx0CgogIGRlZiByZWFkKHNlbGYsICpsYWJlbHMpOgogICAgaWYgbm90IHNlbGYuZXhpc3RzKCpsYWJlbHMpOgogICAgICByZXR1cm4gW10sIC0xCgogICAgZGVmIF9yZWFkX2hlbHBlcigpOgogICAgICBjb2RlciA9IFNhZmVGYXN0UHJpbWl0aXZlc0NvZGVyKCkKICAgICAgZm9yIHBhdGggaW4gc2VsZi5fbWF0Y2goKmxhYmVscyk6CiAgICAgICAgZm9yIGxpbmUgaW4gZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMub3BlbihwYXRoKToKICAgICAgICAgIHlpZWxkIGNvZGVyLmRlY29kZShsaW5lLnN0cmlwKCkpCiAgICByZXN1bHQsIHZlcnNpb24gPSBsaXN0KF9yZWFkX2hlbHBlcigpKSwgc2VsZi5fbGF0ZXN0X3ZlcnNpb24oKmxhYmVscykKICAgIHJldHVybiByZXN1bHQsIHZlcnNpb24KCiAgZGVmIHNvdXJjZShzZWxmLCAqbGFiZWxzKToKICAgIHJldHVybiBiZWFtLmlvLlJlYWRGcm9tVGV4dChzZWxmLl9nbG9iX3BhdGgoKmxhYmVscyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZXI9U2FmZUZhc3RQcmltaXRpdmVzQ29kZXIoKSkuX3NvdXJjZQoKICBkZWYgc2luayhzZWxmLCAqbGFiZWxzKToKICAgIHJldHVybiBiZWFtLmlvLldyaXRlVG9UZXh0KHNlbGYuX3BhdGgoKmxhYmVscyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2Rlcj1TYWZlRmFzdFByaW1pdGl2ZXNDb2RlcigpKS5fc2luawoKICBkZWYgY2xlYW51cChzZWxmKToKICAgIGlmIGZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zLmV4aXN0cyhzZWxmLl9jYWNoZV9kaXIpOgogICAgICBmaWxlc3lzdGVtcy5GaWxlU3lzdGVtcy5kZWxldGUoW3NlbGYuX2NhY2hlX2Rpcl0pCgogIGRlZiBfZ2xvYl9wYXRoKHNlbGYsICpsYWJlbHMpOgogICAgcmV0dXJuIHNlbGYuX3BhdGgoKmxhYmVscykgKyAnLSotb2YtKicKCiAgZGVmIF9wYXRoKHNlbGYsICpsYWJlbHMpOgogICAgcmV0dXJuIGZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zLmpvaW4oc2VsZi5fY2FjaGVfZGlyLCAqbGFiZWxzKQoKICBkZWYgX21hdGNoKHNlbGYsICpsYWJlbHMpOgogICAgbWF0Y2ggPSBmaWxlc3lzdGVtcy5GaWxlU3lzdGVtcy5tYXRjaChbc2VsZi5fZ2xvYl9wYXRoKCpsYWJlbHMpXSkKICAgIGFzc2VydCBsZW4obWF0Y2gpID09IDEKICAgIHJldHVybiBbbWV0YWRhdGEucGF0aCBmb3IgbWV0YWRhdGEgaW4gbWF0Y2hbMF0ubWV0YWRhdGFfbGlzdF0KCiAgY2xhc3MgX0NhY2hlVmVyc2lvbihvYmplY3QpOgogICAgIiIiVGhpcyBjbGFzcyBrZWVwcyB0cmFjayBvZiB0aGUgdGltZXN0YW1wIGFuZCB0aGUgY29ycmVzcG9uZGluZyB2ZXJzaW9uLiIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgc2VsZi5jdXJyZW50X3ZlcnNpb24gPSAtMQogICAgICBzZWxmLmN1cnJlbnRfdGltZXN0YW1wID0gMAoKICAgIGRlZiBnZXRfdmVyc2lvbihzZWxmLCB0aW1lc3RhbXApOgogICAgICAiIiJVcGRhdGVzIHZlcnNpb24gaWYgbmVjZXNzYXJ5IGFuZCByZXR1cm5zIHRoZSB2ZXJzaW9uIG51bWJlci4KCiAgICAgIEFyZ3M6CiAgICAgICAgdGltZXN0YW1wOiAoaW50KSB1bml4IHRpbWVzdGFtcCB3aGVuIHRoZSBjYWNoZSBpcyB1cGRhdGVkLiBUaGlzIHZhbHVlIGlzCiAgICAgICAgICAgIHplcm8gaWYgdGhlIGNhY2hlIGhhcyBiZWVuIGV2aWN0ZWQgb3IgZG9lc24ndCBleGlzdC4KICAgICAgIiIiCiAgICAgICMgRG8gbm90IHVwZGF0ZSB0aW1lc3RhbXAgaWYgdGhlIGNhY2hlJ3MgYmVlbiBldmljdGVkLgogICAgICBpZiB0aW1lc3RhbXAgIT0gMCBhbmQgdGltZXN0YW1wICE9IHNlbGYuY3VycmVudF90aW1lc3RhbXA6CiAgICAgICAgYXNzZXJ0IHRpbWVzdGFtcCA+IHNlbGYuY3VycmVudF90aW1lc3RhbXAKICAgICAgICBzZWxmLmN1cnJlbnRfdmVyc2lvbiA9IHNlbGYuY3VycmVudF92ZXJzaW9uICsgMQogICAgICAgIHNlbGYuY3VycmVudF90aW1lc3RhbXAgPSB0aW1lc3RhbXAKICAgICAgcmV0dXJuIHNlbGYuY3VycmVudF92ZXJzaW9uCgoKY2xhc3MgUmVhZENhY2hlKGJlYW0uUFRyYW5zZm9ybSk6CiAgIiIiQSBQVHJhbnNmb3JtIHRoYXQgcmVhZHMgdGhlIFBDb2xsZWN0aW9ucyBmcm9tIHRoZSBjYWNoZS4iIiIKICBkZWYgX19pbml0X18oc2VsZiwgY2FjaGVfbWFuYWdlciwgbGFiZWwpOgogICAgc2VsZi5fY2FjaGVfbWFuYWdlciA9IGNhY2hlX21hbmFnZXIKICAgIHNlbGYuX2xhYmVsID0gbGFiZWwKCiAgZGVmIGV4cGFuZChzZWxmLCBwYmVnaW4pOgogICAgIyBweWxpbnQ6IGRpc2FibGU9ZXhwcmVzc2lvbi1ub3QtYXNzaWduZWQKICAgIHJldHVybiBwYmVnaW4gfCAnUmVhZCcgPj4gYmVhbS5pby5SZWFkKAogICAgICAgIHNlbGYuX2NhY2hlX21hbmFnZXIuc291cmNlKCdmdWxsJywgc2VsZi5fbGFiZWwpKQoKCmNsYXNzIFdyaXRlQ2FjaGUoYmVhbS5QVHJhbnNmb3JtKToKICAiIiJBIFBUcmFuc2Zvcm0gdGhhdCB3cml0ZXMgdGhlIFBDb2xsZWN0aW9ucyB0byB0aGUgY2FjaGUuIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIGNhY2hlX21hbmFnZXIsIGxhYmVsLCBzYW1wbGU9RmFsc2UsIHNhbXBsZV9zaXplPTApOgogICAgc2VsZi5fY2FjaGVfbWFuYWdlciA9IGNhY2hlX21hbmFnZXIKICAgIHNlbGYuX2xhYmVsID0gbGFiZWwKICAgIHNlbGYuX3NhbXBsZSA9IHNhbXBsZQogICAgc2VsZi5fc2FtcGxlX3NpemUgPSBzYW1wbGVfc2l6ZQoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgIHByZWZpeCA9ICdzYW1wbGUnIGlmIHNlbGYuX3NhbXBsZSBlbHNlICdmdWxsJwogICAgaWYgc2VsZi5fc2FtcGxlOgogICAgICBwY29sbCB8PSAnU2FtcGxlJyA+PiAoCiAgICAgICAgICBjb21iaW5lcnMuU2FtcGxlLkZpeGVkU2l6ZUdsb2JhbGx5KHNlbGYuX3NhbXBsZV9zaXplKQogICAgICAgICAgfCBiZWFtLkZsYXRNYXAobGFtYmRhIHNhbXBsZTogc2FtcGxlKSkKICAgICMgcHlsaW50OiBkaXNhYmxlPWV4cHJlc3Npb24tbm90LWFzc2lnbmVkCiAgICByZXR1cm4gcGNvbGwgfCAnV3JpdGUnID4+IGJlYW0uaW8uV3JpdGUoCiAgICAgICAgc2VsZi5fY2FjaGVfbWFuYWdlci5zaW5rKHByZWZpeCwgc2VsZi5fbGFiZWwpKQoKCmNsYXNzIFNhZmVGYXN0UHJpbWl0aXZlc0NvZGVyKGNvZGVycy5Db2Rlcik6CiAgIiIiVGhpcyBjbGFzcyBhZGQgYW4gcXVvdGUvdW5xdW90ZSBzdGVwIHRvIGVzY2FwZSBzcGVjaWFsIGNoYXJhY3RlcnMuIiIiCiAgIyBweWxpbnQ6IGRpc2FibGU9ZGVwcmVjYXRlZC11cmxsaWItZnVuY3Rpb24KCiAgZGVmIGVuY29kZShzZWxmLCB2YWx1ZSk6CiAgICByZXR1cm4gcXVvdGUoY29kZXJzLmNvZGVycy5GYXN0UHJpbWl0aXZlc0NvZGVyKCkuZW5jb2RlKHZhbHVlKSkuZW5jb2RlKAogICAgICAgICd1dGYtOCcpCgogIGRlZiBkZWNvZGUoc2VsZiwgdmFsdWUpOgogICAgcmV0dXJuIGNvZGVycy5jb2RlcnMuRmFzdFByaW1pdGl2ZXNDb2RlcigpLmRlY29kZSh1bnF1b3RlX3RvX2J5dGVzKHZhbHVlKSkKfXI9ggAAKFgVAAAARmlsZUJhc2VkQ2FjaGVNYW5hZ2VyWAUAAABjbGFzc0tZS6eHWCAAAABGaWxlQmFzZWRDYWNoZU1hbmFnZXIuX2dsb2JfcGF0aFgDAAAAZGVmS4hLiodYHgAAAFNhZmVGYXN0UHJpbWl0aXZlc0NvZGVyLmVuY29kZVgDAAAAZGVmS8xLz4dYHgAAAEZpbGVCYXNlZENhY2hlTWFuYWdlci5fX2luaXRfX1gDAAAAZGVmS1xLZYdYEgAAAFJlYWRDYWNoZS5fX2luaXRfX1gDAAAAZGVmS6tLrodYJwAAAEZpbGVCYXNlZENhY2hlTWFuYWdlci5yZWFkLl9yZWFkX2hlbHBlclgDAAAAZGVmS3RLeYdYEQAAAENhY2hlTWFuYWdlci5yZWFkWAMAAABkZWZLPktLh1gQAAAAUmVhZENhY2hlLmV4cGFuZFgDAAAAZGVmS69Ls4dYLwAAAEZpbGVCYXNlZENhY2hlTWFuYWdlci5fQ2FjaGVWZXJzaW9uLmdldF92ZXJzaW9uWAMAAABkZWZLmkunh1gTAAAAQ2FjaGVNYW5hZ2VyLnNvdXJjZVgDAAAAZGVmS0xLT4dYFAAAAENhY2hlTWFuYWdlci5jbGVhbnVwWAMAAABkZWZLVEtXh1gaAAAARmlsZUJhc2VkQ2FjaGVNYW5hZ2VyLnJlYWRYAwAAAGRlZktwS3uHWBEAAABXcml0ZUNhY2hlLmV4cGFuZFgDAAAAZGVmS71LxodYEQAAAENhY2hlTWFuYWdlci5zaW5rWAMAAABkZWZLUEtTh1gsAAAARmlsZUJhc2VkQ2FjaGVNYW5hZ2VyLl9DYWNoZVZlcnNpb24uX19pbml0X19YAwAAAGRlZkuWS5mHWBMAAABDYWNoZU1hbmFnZXIuZXhpc3RzWAMAAABkZWZLMks1h1gcAAAAQ2FjaGVNYW5hZ2VyLl9sYXRlc3RfdmVyc2lvblgDAAAAZGVmSzpLPYdYCgAAAFdyaXRlQ2FjaGVYBQAAAGNsYXNzS7VLxodYHQAAAEZpbGVCYXNlZENhY2hlTWFuYWdlci5jbGVhbnVwWAMAAABkZWZLhEuHh1gaAAAARmlsZUJhc2VkQ2FjaGVNYW5hZ2VyLnNpbmtYAwAAAGRlZkuAS4OHWBwAAABGaWxlQmFzZWRDYWNoZU1hbmFnZXIuZXhpc3RzWAMAAABkZWZLZktoh1geAAAAQ2FjaGVNYW5hZ2VyLmlzX2xhdGVzdF92ZXJzaW9uWAMAAABkZWZLNks5h1gbAAAARmlsZUJhc2VkQ2FjaGVNYW5hZ2VyLl9wYXRoWAMAAABkZWZLi0uNh1glAAAARmlsZUJhc2VkQ2FjaGVNYW5hZ2VyLl9sYXRlc3RfdmVyc2lvblgDAAAAZGVmS2lLb4dYHAAAAEZpbGVCYXNlZENhY2hlTWFuYWdlci5zb3VyY2VYAwAAAGRlZkt8S3+HWCMAAABGaWxlQmFzZWRDYWNoZU1hbmFnZXIuX0NhY2hlVmVyc2lvblgFAAAAY2xhc3NLk0unh1gXAAAAU2FmZUZhc3RQcmltaXRpdmVzQ29kZXJYBQAAAGNsYXNzS8hL0odYHgAAAFNhZmVGYXN0UHJpbWl0aXZlc0NvZGVyLmRlY29kZVgDAAAAZGVmS9BL0odYDAAAAENhY2hlTWFuYWdlclgFAAAAY2xhc3NLKktXh1gJAAAAUmVhZENhY2hlWAUAAABjbGFzc0upS7OHWBwAAABGaWxlQmFzZWRDYWNoZU1hbmFnZXIuX21hdGNoWAMAAABkZWZLjkuSh1gTAAAAV3JpdGVDYWNoZS5fX2luaXRfX1gDAAAAZGVmS7dLvId1fXI+ggAAKFgQAAAAUmVhZENhY2hlLmV4cGFuZFgtAAAAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoZV9tYW5hZ2Vycj+CAABYHgAAAFNhZmVGYXN0UHJpbWl0aXZlc0NvZGVyLmRlY29kZWo/ggAAWBUAAABGaWxlQmFzZWRDYWNoZU1hbmFnZXJqP4IAAFgRAAAAV3JpdGVDYWNoZS5leHBhbmRqP4IAAFgdAAAARmlsZUJhc2VkQ2FjaGVNYW5hZ2VyLmNsZWFudXBqP4IAAFgeAAAAU2FmZUZhc3RQcmltaXRpdmVzQ29kZXIuZW5jb2Rlaj+CAABYCQAAAFJlYWRDYWNoZWo/ggAAWBMAAABDYWNoZU1hbmFnZXIuc291cmNlaj+CAABYDAAAAENhY2hlTWFuYWdlcmo/ggAAWBQAAABDYWNoZU1hbmFnZXIuY2xlYW51cGo/ggAAWBoAAABGaWxlQmFzZWRDYWNoZU1hbmFnZXIucmVhZGo/ggAAWBoAAABGaWxlQmFzZWRDYWNoZU1hbmFnZXIuc2lua2o/ggAAWBwAAABGaWxlQmFzZWRDYWNoZU1hbmFnZXIuZXhpc3Rzaj+CAABYHgAAAENhY2hlTWFuYWdlci5pc19sYXRlc3RfdmVyc2lvbmo/ggAAWBEAAABDYWNoZU1hbmFnZXIuc2lua2o/ggAAWAoAAABXcml0ZUNhY2hlaj+CAABYEQAAAENhY2hlTWFuYWdlci5yZWFkaj+CAABYHAAAAEZpbGVCYXNlZENhY2hlTWFuYWdlci5zb3VyY2VqP4IAAFgTAAAAQ2FjaGVNYW5hZ2VyLmV4aXN0c2o/ggAAWBcAAABTYWZlRmFzdFByaW1pdGl2ZXNDb2Rlcmo/ggAAdWp9aQAAWC0AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmNhY2hlX21hbmFnZXJyQIIAAIWBckGCAAB9ckKCAABidHJDggAAVRhhcGFjaGVfYmVhbS51dGlscy5wbHVnaW5yRIIAAChYfAYAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiQSBCZWFtUGx1Z2luIGJhc2UgY2xhc3MuCgpGb3IgZXhwZXJpbWVudGFsIHVzYWdlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdAoKCmNsYXNzIEJlYW1QbHVnaW4ob2JqZWN0KToKICAiIiJQbHVnaW4gYmFzZSBjbGFzcyB0byBiZSBleHRlbmRlZCBieSBkZXBlbmRlbnQgdXNlcnMgc3VjaCBhcyBGaWxlU3lzdGVtLgogIEFueSBpbnN0YW50aWF0ZWQgc3ViY2xhc3Mgd2lsbCBiZSBpbXBvcnRlZCBhdCB3b3JrZXIgc3RhcnR1cCB0aW1lLiIiIgoKICBAY2xhc3NtZXRob2QKICBkZWYgZ2V0X2FsbF9zdWJjbGFzc2VzKGNscyk6CiAgICAiIiJHZXQgYWxsIHRoZSBzdWJjbGFzc2VzIG9mIHRoZSBCZWFtUGx1Z2luIGNsYXNzLiIiIgogICAgYWxsX3N1YmNsYXNzZXMgPSBbXQogICAgZm9yIHN1YmNsYXNzIGluIGNscy5fX3N1YmNsYXNzZXNfXygpOgogICAgICBhbGxfc3ViY2xhc3Nlcy5hcHBlbmQoc3ViY2xhc3MpCiAgICAgIGFsbF9zdWJjbGFzc2VzLmV4dGVuZChzdWJjbGFzcy5nZXRfYWxsX3N1YmNsYXNzZXMoKSkKICAgIHJldHVybiBhbGxfc3ViY2xhc3NlcwoKICBAY2xhc3NtZXRob2QKICBkZWYgZ2V0X2FsbF9wbHVnaW5fcGF0aHMoY2xzKToKICAgICIiIkdldCBmdWxsIGltcG9ydCBwYXRocyBvZiB0aGUgQmVhbVBsdWdpbiBzdWJjbGFzcy4iIiIKICAgIGRlZiBmdWxsbmFtZShvKToKICAgICAgcmV0dXJuIG8uX19tb2R1bGVfXyArICIuIiArIG8uX19uYW1lX18KICAgIHJldHVybiBbZnVsbG5hbWUobykgZm9yIG8gaW4gY2xzLmdldF9hbGxfc3ViY2xhc3NlcygpXQp9ckWCAAAoWB8AAABCZWFtUGx1Z2luLmdldF9hbGxfcGx1Z2luX3BhdGhzWAMAAABkZWZLKUsvh1gKAAAAQmVhbVBsdWdpblgFAAAAY2xhc3NLHEsvh1gdAAAAQmVhbVBsdWdpbi5nZXRfYWxsX3N1YmNsYXNzZXNYAwAAAGRlZksgSyiHWCgAAABCZWFtUGx1Z2luLmdldF9hbGxfcGx1Z2luX3BhdGhzLmZ1bGxuYW1lWAMAAABkZWZLLEsuh3V9ckaCAAAoWB8AAABCZWFtUGx1Z2luLmdldF9hbGxfcGx1Z2luX3BhdGhzajlmAABYCgAAAEJlYW1QbHVnaW5qOWYAAFgdAAAAQmVhbVBsdWdpbi5nZXRfYWxsX3N1YmNsYXNzZXNqOWYAAHVqfWkAAFgYAAAAYXBhY2hlX2JlYW0udXRpbHMucGx1Z2luckeCAACFgXJIggAAfXJJggAAYnRySoIAAFUpYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuYnVuZGxlX2ZhY3RvcnkoWM4aAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkEgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgVW5jb21taXR0ZWRCdW5kbGVzLiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdAoKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgcHZhbHVlCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycyBpbXBvcnQgY29tbW9uCmZyb20gYXBhY2hlX2JlYW0udXRpbHMud2luZG93ZWRfdmFsdWUgaW1wb3J0IFdpbmRvd2VkVmFsdWUKCgpjbGFzcyBCdW5kbGVGYWN0b3J5KG9iamVjdCk6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBCdW5kbGVGYWN0b3J5IGNyZWF0ZXMgb3V0cHV0IGJ1bmRsZXMgdG8gYmUgdXNlZCBieSB0cmFuc2Zvcm0gZXZhbHVhdG9ycy4KCiAgQXJnczoKICAgIHN0YWNrZWQ6IHdoZXRoZXIgb3Igbm90IHRvIHN0YWNrIHRoZSBXaW5kb3dlZFZhbHVlcyB3aXRoaW4gdGhlIGJ1bmRsZQogICAgICBpbiBjYXNlIGNvbnNlY3V0aXZlIG9uZXMgc2hhcmUgdGhlIHNhbWUgdGltZXN0YW1wIGFuZCB3aW5kb3dzLgogICAgICBEaXJlY3RSdW5uZXJPcHRpb25zLmRpcmVjdF9ydW5uZXJfdXNlX3N0YWNrZWRfYnVuZGxlIGNvbnRyb2xzIHRoaXMgb3B0aW9uLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgc3RhY2tlZCk6CiAgICBzZWxmLl9zdGFja2VkID0gc3RhY2tlZAoKICBkZWYgY3JlYXRlX2J1bmRsZShzZWxmLCBvdXRwdXRfcGNvbGxlY3Rpb24pOgogICAgcmV0dXJuIF9CdW5kbGUob3V0cHV0X3Bjb2xsZWN0aW9uLCBzZWxmLl9zdGFja2VkKQoKICBkZWYgY3JlYXRlX2VtcHR5X2NvbW1pdHRlZF9idW5kbGUoc2VsZiwgb3V0cHV0X3Bjb2xsZWN0aW9uKToKICAgIGJ1bmRsZSA9IHNlbGYuY3JlYXRlX2J1bmRsZShvdXRwdXRfcGNvbGxlY3Rpb24pCiAgICBidW5kbGUuY29tbWl0KE5vbmUpCiAgICByZXR1cm4gYnVuZGxlCgoKIyBhIGJ1bmRsZSByZXByZXNlbnRzIGEgdW5pdCBvZiB3b3JrIHRoYXQgd2lsbCBiZSBwcm9jZXNzZWQgYnkgYSB0cmFuc2Zvcm0uCmNsYXNzIF9CdW5kbGUoY29tbW9uLlJlY2VpdmVyKToKICAiIiJQYXJ0IG9mIGEgUENvbGxlY3Rpb24gd2l0aCBvdXRwdXQgZWxlbWVudHMuCgogIFBhcnQgb2YgYSBQQ29sbGVjdGlvbi4gRWxlbWVudHMgYXJlIG91dHB1dCB0byBhIGJ1bmRsZSwgd2hpY2ggd2lsbCBjYXVzZSB0aGVtCiAgdG8gYmUgZXhlY3V0ZWQgYnkgUFRyYW5zZm9ybSB0aGF0IGNvbnN1bWUgdGhlIFBDb2xsZWN0aW9uIHRoaXMgYnVuZGxlIGlzIGEKICBwYXJ0IG9mIGF0IGEgbGF0ZXIgcG9pbnQuIEl0IHN0YXJ0cyBhcyBhbiB1bmNvbW1pdHRlZCBidW5kbGUgYW5kIGNhbiBoYXZlCiAgZWxlbWVudHMgYWRkZWQgdG8gaXQuIEl0IG5lZWRzIHRvIGJlIGNvbW1pdHRlZCB0byBtYWtlIGl0IGltbXV0YWJsZSBiZWZvcmUKICBwYXNzaW5nIGl0IHRvIGEgZG93bnN0cmVhbSBwdHJhbnNmb3JtLgoKICBUaGUgc3RvcmVkIGVsZW1lbnRzIGFyZSBXaW5kb3dlZFZhbHVlcywgd2hpY2ggY29udGFpbnMgdGltZXN0YW1wIGFuZCB3aW5kb3dzCiAgaW5mb3JtYXRpb24uCgogIEJ1bmRsZSBpbnRlcm5hbGx5IG9wdGltaXplcyBzdG9yYWdlIGJ5IHN0YWNraW5nIGVsZW1lbnRzIHdpdGggdGhlIHNhbWUKICB0aW1lc3RhbXAgYW5kIHdpbmRvd3MgaW50byBTdGFja2VkV2luZG93ZWRWYWx1ZXMsIGFuZCB0aGVuIHJldHVybnMgYW4gaXRlcmFibGUKICB0byByZXN0b3JlIFdpbmRvd2VkVmFsdWVzIHVwb24gZ2V0X2VsZW1lbnRzKCkgY2FsbC4KCiAgV2hlbiB0aGlzIG9wdGltaXphdGlvbiBpcyBub3QgZGVzaXJlZCwgaXQgY2FuIGJlIGF2b2lkZWQgYnkgYW4gb3B0aW9uIHdoZW4KICBjcmVhdGluZyBidW5kbGVzLCBsaWtlOjo6CgogICAgYiA9IEJ1bmRsZShzdGFja2VkPUZhbHNlKQogICIiIgoKICBjbGFzcyBfU3RhY2tlZFdpbmRvd2VkVmFsdWVzKG9iamVjdCk6CiAgICAiIiJBIHN0YWNrIG9mIFdpbmRvd2VkVmFsdWVzIHdpdGggdGhlIHNhbWUgdGltZXN0YW1wIGFuZCB3aW5kb3dzLgoKICAgIEl0IG11c3QgYmUgaW5pdGlhbGl6ZWQgZnJvbSBhIHNpbmdsZSBXaW5kb3dlZFZhbHVlLgoKICAgIEV4YW1wbGU6OjoKCiAgICAgIHMgPSBTdGFja2VkV2luZG93ZWRWYWx1ZXMod2luZG93ZWRfdmFsdWUpCiAgICAgIGlmIChhbm90aGVyX3dpbmRvd2VkX3ZhbHVlLnRpbWVzdGFtcCA9PSBzLnRpbWVzdGFtcCBhbmQKICAgICAgICAgIGFub3RoZXJfd2luZG93ZWRfdmFsdWUud2luZG93cyA9PSBzLndpbmRvd3MpOgogICAgICAgIHMuYWRkX3ZhbHVlKGFub3RoZXJfd2luZG93ZWRfdmFsdWUudmFsdWUpCiAgICAgIHdpbmRvd2VkX3ZhbHVlcyA9IFt3diBmb3Igd3YgaW4gcy53aW5kb3dlZF92YWx1ZXMoKV0KICAgICAgIyBub3cgd2luZG93ZWRfdmFsdWVzIGVxdWFscyB0byBbd2luZG93ZWRfdmFsdWUsIGFub3RoZXJfd2luZG93ZWRfdmFsdWVdCiAgICAiIiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgaW5pdGlhbF93aW5kb3dlZF92YWx1ZSk6CiAgICAgIHNlbGYuX2luaXRpYWxfd2luZG93ZWRfdmFsdWUgPSBpbml0aWFsX3dpbmRvd2VkX3ZhbHVlCiAgICAgIHNlbGYuX2FwcGVuZGVkX3ZhbHVlcyA9IFtdCgogICAgQHByb3BlcnR5CiAgICBkZWYgdGltZXN0YW1wKHNlbGYpOgogICAgICByZXR1cm4gc2VsZi5faW5pdGlhbF93aW5kb3dlZF92YWx1ZS50aW1lc3RhbXAKCiAgICBAcHJvcGVydHkKICAgIGRlZiB3aW5kb3dzKHNlbGYpOgogICAgICByZXR1cm4gc2VsZi5faW5pdGlhbF93aW5kb3dlZF92YWx1ZS53aW5kb3dzCgogICAgZGVmIGFkZF92YWx1ZShzZWxmLCB2YWx1ZSk6CiAgICAgIHNlbGYuX2FwcGVuZGVkX3ZhbHVlcy5hcHBlbmQodmFsdWUpCgogICAgZGVmIHdpbmRvd2VkX3ZhbHVlcyhzZWxmKToKICAgICAgIyB5aWVsZCBmaXJzdCB3aW5kb3dlZF92YWx1ZSBhcyBpcywgdGhlbiBpdGVyYXRlIHRocm91Z2gKICAgICAgIyBfYXBwZW5kZWRfdmFsdWVzIHRvIHlpZWxkIFdpbmRvd2VkVmFsdWUgb24gdGhlIGZseS4KICAgICAgeWllbGQgc2VsZi5faW5pdGlhbF93aW5kb3dlZF92YWx1ZQogICAgICBmb3IgdiBpbiBzZWxmLl9hcHBlbmRlZF92YWx1ZXM6CiAgICAgICAgeWllbGQgV2luZG93ZWRWYWx1ZSh2LCBzZWxmLl9pbml0aWFsX3dpbmRvd2VkX3ZhbHVlLnRpbWVzdGFtcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2luaXRpYWxfd2luZG93ZWRfdmFsdWUud2luZG93cykKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHBjb2xsZWN0aW9uLCBzdGFja2VkPVRydWUpOgogICAgYXNzZXJ0IGlzaW5zdGFuY2UocGNvbGxlY3Rpb24sIChwdmFsdWUuUEJlZ2luLCBwdmFsdWUuUENvbGxlY3Rpb24pKQogICAgc2VsZi5fcGNvbGxlY3Rpb24gPSBwY29sbGVjdGlvbgogICAgc2VsZi5fZWxlbWVudHMgPSBbXQogICAgc2VsZi5fc3RhY2tlZCA9IHN0YWNrZWQKICAgIHNlbGYuX2NvbW1pdHRlZCA9IEZhbHNlCiAgICBzZWxmLl90YWcgPSBOb25lICAjIG9wdGlvbmFsIHRhZyBpbmZvcm1hdGlvbiBmb3IgdGhpcyBidW5kbGUKCiAgZGVmIGdldF9lbGVtZW50c19pdGVyYWJsZShzZWxmLCBtYWtlX2NvcHk9RmFsc2UpOgogICAgIiIiUmV0dXJucyBpdGVyYWJsZSBlbGVtZW50cy4KCiAgICBBcmdzOgogICAgICBtYWtlX2NvcHk6IHdoZXRoZXIgdG8gZm9yY2UgcmV0dXJuaW5nIGNvcHkgb3IgeWllbGRlZCBpdGVyYWJsZS4KCiAgICBSZXR1cm5zOgogICAgICB1bnN0YWNrZWQgZWxlbWVudHMsCiAgICAgIGluIHRoZSBmb3JtIG9mIGl0ZXJhYmxlIGlmIGNvbW1pdHRlZCBhbmQgbWFrZV9jb3B5IGlzIG5vdCBUcnVlLAogICAgICBvciBhcyBhIGxpc3Qgb2YgY29waWVkIFdpbmRvd2VkVmFsdWVzLgogICAgIiIiCiAgICBpZiBub3Qgc2VsZi5fc3RhY2tlZDoKICAgICAgaWYgc2VsZi5fY29tbWl0dGVkIGFuZCBub3QgbWFrZV9jb3B5OgogICAgICAgIHJldHVybiBzZWxmLl9lbGVtZW50cwogICAgICByZXR1cm4gbGlzdChzZWxmLl9lbGVtZW50cykKCiAgICBkZWYgaXRlcmFibGVfc3RhY2tlZF9vcl9lbGVtZW50cyhlbGVtZW50cyk6CiAgICAgIGZvciBlIGluIGVsZW1lbnRzOgogICAgICAgIGlmIGlzaW5zdGFuY2UoZSwgX0J1bmRsZS5fU3RhY2tlZFdpbmRvd2VkVmFsdWVzKToKICAgICAgICAgIGZvciB3IGluIGUud2luZG93ZWRfdmFsdWVzKCk6CiAgICAgICAgICAgIHlpZWxkIHcKICAgICAgICBlbHNlOgogICAgICAgICAgeWllbGQgZQoKICAgIGlmIHNlbGYuX2NvbW1pdHRlZCBhbmQgbm90IG1ha2VfY29weToKICAgICAgcmV0dXJuIGl0ZXJhYmxlX3N0YWNrZWRfb3JfZWxlbWVudHMoc2VsZi5fZWxlbWVudHMpCiAgICAjIHJldHVybnMgYSBjb3B5LgogICAgcmV0dXJuIFtlIGZvciBlIGluIGl0ZXJhYmxlX3N0YWNrZWRfb3JfZWxlbWVudHMoc2VsZi5fZWxlbWVudHMpXQoKICBkZWYgaGFzX2VsZW1lbnRzKHNlbGYpOgogICAgcmV0dXJuIGxlbihzZWxmLl9lbGVtZW50cykgPiAwCgogIEBwcm9wZXJ0eQogIGRlZiB0YWcoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fdGFnCgogIEB0YWcuc2V0dGVyCiAgZGVmIHRhZyhzZWxmLCB2YWx1ZSk6CiAgICBhc3NlcnQgbm90IHNlbGYuX3RhZwogICAgc2VsZi5fdGFnID0gdmFsdWUKCiAgQHByb3BlcnR5CiAgZGVmIHBjb2xsZWN0aW9uKHNlbGYpOgogICAgIiIiUENvbGxlY3Rpb24gdGhhdCB0aGUgZWxlbWVudHMgb2YgdGhpcyBVbmNvbW1pdHRlZEJ1bmRsZSBiZWxvbmcgdG8uIiIiCiAgICByZXR1cm4gc2VsZi5fcGNvbGxlY3Rpb24KCiAgZGVmIGFkZChzZWxmLCBlbGVtZW50KToKICAgICIiIk91dHB1dHMgYW4gZWxlbWVudCB0byB0aGlzIGJ1bmRsZS4KCiAgICBBcmdzOgogICAgICBlbGVtZW50OiBXaW5kb3dlZFZhbHVlCiAgICAiIiIKICAgIGFzc2VydCBub3Qgc2VsZi5fY29tbWl0dGVkCiAgICBpZiBub3Qgc2VsZi5fc3RhY2tlZDoKICAgICAgc2VsZi5fZWxlbWVudHMuYXBwZW5kKGVsZW1lbnQpCiAgICAgIHJldHVybgogICAgaWYgKHNlbGYuX2VsZW1lbnRzIGFuZAogICAgICAgIChpc2luc3RhbmNlKHNlbGYuX2VsZW1lbnRzWy0xXSwgKFdpbmRvd2VkVmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0J1bmRsZS5fU3RhY2tlZFdpbmRvd2VkVmFsdWVzKSkpIGFuZAogICAgICAgIHNlbGYuX2VsZW1lbnRzWy0xXS50aW1lc3RhbXAgPT0gZWxlbWVudC50aW1lc3RhbXAgYW5kCiAgICAgICAgc2VsZi5fZWxlbWVudHNbLTFdLndpbmRvd3MgPT0gZWxlbWVudC53aW5kb3dzKToKICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLl9lbGVtZW50c1stMV0sIFdpbmRvd2VkVmFsdWUpOgogICAgICAgIHNlbGYuX2VsZW1lbnRzWy0xXSA9IF9CdW5kbGUuX1N0YWNrZWRXaW5kb3dlZFZhbHVlcyhzZWxmLl9lbGVtZW50c1stMV0pCiAgICAgIHNlbGYuX2VsZW1lbnRzWy0xXS5hZGRfdmFsdWUoZWxlbWVudC52YWx1ZSkKICAgIGVsc2U6CiAgICAgIHNlbGYuX2VsZW1lbnRzLmFwcGVuZChlbGVtZW50KQoKICBkZWYgb3V0cHV0KHNlbGYsIGVsZW1lbnQpOgogICAgc2VsZi5hZGQoZWxlbWVudCkKCiAgZGVmIHJlY2VpdmUoc2VsZiwgZWxlbWVudCk6CiAgICBzZWxmLmFkZChlbGVtZW50KQoKICBkZWYgY29tbWl0KHNlbGYsIHN5bmNocm9uaXplZF9wcm9jZXNzaW5nX3RpbWUpOgogICAgIiIiQ29tbWl0cyB0aGlzIGJ1bmRsZS4KCiAgICBVbmNvbW1pdHRlZCBidW5kbGUgd2lsbCBiZWNvbWUgY29tbWl0dGVkIChpbW11dGFibGUpIGFmdGVyIHRoaXMgY2FsbC4KCiAgICBBcmdzOgogICAgICBzeW5jaHJvbml6ZWRfcHJvY2Vzc2luZ190aW1lOiB0aGUgc3luY2hyb25pemVkIHByb2Nlc3NpbmcgdGltZSBhdCB3aGljaAogICAgICB0aGlzIGJ1bmRsZSB3YXMgY29tbWl0dGVkCiAgICAiIiIKICAgIGFzc2VydCBub3Qgc2VsZi5fY29tbWl0dGVkCiAgICBzZWxmLl9jb21taXR0ZWQgPSBUcnVlCiAgICBzZWxmLl9lbGVtZW50cyA9IHR1cGxlKHNlbGYuX2VsZW1lbnRzKQogICAgc2VsZi5fc3luY2hyb25pemVkX3Byb2Nlc3NpbmdfdGltZSA9IHN5bmNocm9uaXplZF9wcm9jZXNzaW5nX3RpbWUKfXJLggAAKFgnAAAAX0J1bmRsZS5fU3RhY2tlZFdpbmRvd2VkVmFsdWVzLl9faW5pdF9fWAMAAABkZWZLWktdh1geAAAAX0J1bmRsZS5fU3RhY2tlZFdpbmRvd2VkVmFsdWVzWAUAAABjbGFzc0tLS3CHWA0AAABCdW5kbGVGYWN0b3J5WAUAAABjbGFzc0sdSzKHWCgAAABfQnVuZGxlLl9TdGFja2VkV2luZG93ZWRWYWx1ZXMudGltZXN0YW1wWAMAAABkZWZLXkthh1gmAAAAX0J1bmRsZS5fU3RhY2tlZFdpbmRvd2VkVmFsdWVzLndpbmRvd3NYAwAAAGRlZktiS2WHWDoAAABfQnVuZGxlLmdldF9lbGVtZW50c19pdGVyYWJsZS5pdGVyYWJsZV9zdGFja2VkX29yX2VsZW1lbnRzWAMAAABkZWZLiUuQh1grAAAAQnVuZGxlRmFjdG9yeS5jcmVhdGVfZW1wdHlfY29tbWl0dGVkX2J1bmRsZVgDAAAAZGVmSy5LModYBwAAAF9CdW5kbGVYBQAAAGNsYXNzSzVLz4dYFAAAAF9CdW5kbGUuaGFzX2VsZW1lbnRzWAMAAABkZWZLlkuYh1gLAAAAX0J1bmRsZS50YWdYAwAAAGRlZkudS6GHWAsAAABfQnVuZGxlLmFkZFgDAAAAZGVmS6dLu4dYEwAAAF9CdW5kbGUucGNvbGxlY3Rpb25YAwAAAGRlZkuiS6aHWBAAAABfQnVuZGxlLl9faW5pdF9fWAMAAABkZWZLcUt4h1gbAAAAQnVuZGxlRmFjdG9yeS5jcmVhdGVfYnVuZGxlWAMAAABkZWZLK0sth1gWAAAAQnVuZGxlRmFjdG9yeS5fX2luaXRfX1gDAAAAZGVmSyhLKodYDgAAAF9CdW5kbGUuY29tbWl0WAMAAABkZWZLwkvPh1gOAAAAX0J1bmRsZS5vdXRwdXRYAwAAAGRlZku8S76HWA8AAABfQnVuZGxlLnJlY2VpdmVYAwAAAGRlZku/S8GHWC4AAABfQnVuZGxlLl9TdGFja2VkV2luZG93ZWRWYWx1ZXMud2luZG93ZWRfdmFsdWVzWAMAAABkZWZLaUtwh1gdAAAAX0J1bmRsZS5nZXRfZWxlbWVudHNfaXRlcmFibGVYAwAAAGRlZkt5S5WHWCgAAABfQnVuZGxlLl9TdGFja2VkV2luZG93ZWRWYWx1ZXMuYWRkX3ZhbHVlWAMAAABkZWZLZktoh3V9ckyCAAAoWCsAAABCdW5kbGVGYWN0b3J5LmNyZWF0ZV9lbXB0eV9jb21taXR0ZWRfYnVuZGxlWCkAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5idW5kbGVfZmFjdG9yeXJNggAAWBsAAABCdW5kbGVGYWN0b3J5LmNyZWF0ZV9idW5kbGVqTYIAAFgNAAAAQnVuZGxlRmFjdG9yeWpNggAAdWp9aQAAWCkAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5idW5kbGVfZmFjdG9yeXJOggAAhYFyT4IAAH1yUIIAAGJ0clGCAABVHmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheXJSggAAKFg2LQAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiIKOmNsYXNzOmBEaXNwbGF5RGF0YWAsIGl0cyBjbGFzc2VzLCBpbnRlcmZhY2VzIGFuZCBtZXRob2RzLgoKVGhlIGNsYXNzZXMgaW4gdGhpcyBtb2R1bGUgYWxsb3cgdXNlcnMgYW5kIHRyYW5zZm9ybSBkZXZlbG9wZXJzIHRvIGRlZmluZQpzdGF0aWMgZGlzcGxheSBkYXRhIHRvIGJlIGRpc3BsYXllZCB3aGVuIGEgcGlwZWxpbmUgcnVucy4KOmNsYXNzOmB+YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm1gIHMsCjpjbGFzczpgfmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Eb0ZuYCBzCmFuZCBvdGhlciBwaXBlbGluZSBjb21wb25lbnRzIGFyZSBzdWJjbGFzc2VzIG9mIHRoZSA6Y2xhc3M6YEhhc0Rpc3BsYXlEYXRhYAptaXhpbi4gVG8gYWRkIHN0YXRpYyBkaXNwbGF5IGRhdGEgdG8gYSBjb21wb25lbnQsIHlvdSBjYW4gb3ZlcnJpZGUgdGhlCjptZXRoOmBIYXNEaXNwbGF5RGF0YS5kaXNwbGF5X2RhdGEoKWAgbWV0aG9kLgoKQXZhaWxhYmxlIGNsYXNzZXM6CgoqIDpjbGFzczpgSGFzRGlzcGxheURhdGFgIC0gQ29tcG9uZW50cyB0aGF0IGluaGVyaXQgZnJvbSB0aGlzIGNsYXNzIGNhbiBoYXZlCiAgc3RhdGljIGRpc3BsYXkgZGF0YSBzaG93biBpbiB0aGUgVUkuCiogOmNsYXNzOmBEaXNwbGF5RGF0YUl0ZW1gIC0gVGhpcyBjbGFzcyByZXByZXNlbnRzIHN0YXRpYyBkaXNwbGF5IGRhdGEKICBlbGVtZW50cy4KKiA6Y2xhc3M6YERpc3BsYXlEYXRhYCAtIEludGVybmFsIGNsYXNzIHRoYXQgaXMgdXNlZCB0byBjcmVhdGUgZGlzcGxheSBkYXRhCiAgYW5kIGNvbW11bmljYXRlIGl0IHRvIHRoZSBBUEkuCiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBjYWxlbmRhcgppbXBvcnQgaW5zcGVjdAppbXBvcnQganNvbgpmcm9tIGJ1aWx0aW5zIGltcG9ydCBvYmplY3QKZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKZnJvbSBkYXRldGltZSBpbXBvcnQgdGltZWRlbHRhCgpmcm9tIHBhc3QuYnVpbHRpbnMgaW1wb3J0IHVuaWNvZGUKCl9fYWxsX18gPSBbJ0hhc0Rpc3BsYXlEYXRhJywgJ0Rpc3BsYXlEYXRhSXRlbScsICdEaXNwbGF5RGF0YSddCgoKY2xhc3MgSGFzRGlzcGxheURhdGEob2JqZWN0KToKICAiIiIgQmFzaWMgbWl4aW4gZm9yIGVsZW1lbnRzIHRoYXQgY29udGFpbiBkaXNwbGF5IGRhdGEuCgogIEl0IGltcGxlbWVudHMgb25seSB0aGUgZGlzcGxheV9kYXRhIG1ldGhvZCBhbmQgYSBfbmFtZXNwYWNlIG1ldGhvZC4KICAiIiIKCiAgZGVmIGRpc3BsYXlfZGF0YShzZWxmKToKICAgICIiIiBSZXR1cm5zIHRoZSBkaXNwbGF5IGRhdGEgYXNzb2NpYXRlZCB0byBhIHBpcGVsaW5lIGNvbXBvbmVudC4KCiAgICBJdCBzaG91bGQgYmUgcmVpbXBsZW1lbnRlZCBpbiBwaXBlbGluZSBjb21wb25lbnRzIHRoYXQgd2lzaCB0byBoYXZlCiAgICBzdGF0aWMgZGlzcGxheSBkYXRhLgoKICAgIFJldHVybnM6CiAgICAgIERpY3Rbc3RyLCBBbnldOiBBIGRpY3Rpb25hcnkgY29udGFpbmluZyBgYGtleTp2YWx1ZWBgIHBhaXJzLgogICAgICBUaGUgdmFsdWUgbWlnaHQgYmUgYW4gaW50ZWdlciwgZmxvYXQgb3Igc3RyaW5nIHZhbHVlOyBhCiAgICAgIDpjbGFzczpgRGlzcGxheURhdGFJdGVtYCBmb3IgdmFsdWVzIHRoYXQgaGF2ZSBtb3JlIGRhdGEKICAgICAgKGUuZy4gc2hvcnQgdmFsdWUsIGxhYmVsLCB1cmwpOyBvciBhIDpjbGFzczpgSGFzRGlzcGxheURhdGFgIGluc3RhbmNlCiAgICAgIHRoYXQgaGFzIG1vcmUgZGlzcGxheSBkYXRhIHRoYXQgc2hvdWxkIGJlIHBpY2tlZCB1cC4gRm9yIGV4YW1wbGU6OgoKICAgICAgICB7CiAgICAgICAgICAna2V5MSc6ICdzdHJpbmdfdmFsdWUnLAogICAgICAgICAgJ2tleTInOiAxMjM0LAogICAgICAgICAgJ2tleTMnOiAzLjE0MTU5MjY1LAogICAgICAgICAgJ2tleTQnOiBEaXNwbGF5RGF0YUl0ZW0oJ2FwYWNoZS5vcmcnLCB1cmw9J2h0dHA6Ly9hcGFjaGUub3JnJyksCiAgICAgICAgICAna2V5NSc6IHN1YkNvbXBvbmVudAogICAgICAgIH0KICAgICIiIgogICAgcmV0dXJuIHt9CgogIGRlZiBfbmFtZXNwYWNlKHNlbGYpOgogICAgcmV0dXJuICd7fS57fScuZm9ybWF0KHNlbGYuX19tb2R1bGVfXywgc2VsZi5fX2NsYXNzX18uX19uYW1lX18pCgoKY2xhc3MgRGlzcGxheURhdGEob2JqZWN0KToKICAiIiIgU3RhdGljIGRpc3BsYXkgZGF0YSBhc3NvY2lhdGVkIHdpdGggYSBwaXBlbGluZSBjb21wb25lbnQuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lc3BhY2UsIGRpc3BsYXlfZGF0YV9kaWN0KToKICAgIHNlbGYubmFtZXNwYWNlID0gbmFtZXNwYWNlCiAgICBzZWxmLml0ZW1zID0gW10KICAgIHNlbGYuX3BvcHVsYXRlX2l0ZW1zKGRpc3BsYXlfZGF0YV9kaWN0KQoKICBkZWYgX3BvcHVsYXRlX2l0ZW1zKHNlbGYsIGRpc3BsYXlfZGF0YV9kaWN0KToKICAgICIiIiBQb3B1bGF0ZXMgdGhlIGxpc3Qgb2YgZGlzcGxheSBkYXRhIGl0ZW1zLgogICAgIiIiCiAgICBmb3Iga2V5LCBlbGVtZW50IGluIGRpc3BsYXlfZGF0YV9kaWN0Lml0ZW1zKCk6CiAgICAgIGlmIGlzaW5zdGFuY2UoZWxlbWVudCwgSGFzRGlzcGxheURhdGEpOgogICAgICAgIHN1YmNvbXBvbmVudF9kaXNwbGF5X2RhdGEgPSBEaXNwbGF5RGF0YShlbGVtZW50Ll9uYW1lc3BhY2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5kaXNwbGF5X2RhdGEoKSkKICAgICAgICBzZWxmLml0ZW1zICs9IHN1YmNvbXBvbmVudF9kaXNwbGF5X2RhdGEuaXRlbXMKICAgICAgICBjb250aW51ZQoKICAgICAgaWYgaXNpbnN0YW5jZShlbGVtZW50LCBEaXNwbGF5RGF0YUl0ZW0pOgogICAgICAgIGlmIGVsZW1lbnQuc2hvdWxkX2Ryb3AoKToKICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgZWxlbWVudC5rZXkgPSBrZXkKICAgICAgICBlbGVtZW50Lm5hbWVzcGFjZSA9IHNlbGYubmFtZXNwYWNlCiAgICAgICAgc2VsZi5pdGVtcy5hcHBlbmQoZWxlbWVudCkKICAgICAgICBjb250aW51ZQoKICAgICAgIyBJZiBpdCdzIG5vdCBhIEhhc0Rpc3BsYXlEYXRhIGVsZW1lbnQsCiAgICAgICMgbm9yIGEgZGljdGlvbmFyeSwgdGhlbiBpdCdzIGEgc2ltcGxlIHZhbHVlCiAgICAgIHNlbGYuaXRlbXMuYXBwZW5kKAogICAgICAgICAgRGlzcGxheURhdGFJdGVtKGVsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlPXNlbGYubmFtZXNwYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgIGtleT1rZXkpKQoKICBAY2xhc3NtZXRob2QKICBkZWYgY3JlYXRlX2Zyb21fb3B0aW9ucyhjbHMsIHBpcGVsaW5lX29wdGlvbnMpOgogICAgIiIiIENyZWF0ZXMgOmNsYXNzOmBEaXNwbGF5RGF0YWAgZnJvbSBhCiAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuUGlwZWxpbmVPcHRpb25zYCBpbnN0YW5jZS4KCiAgICBXaGVuIGNyZWF0aW5nIDpjbGFzczpgRGlzcGxheURhdGFgLCB0aGlzIG1ldGhvZCB3aWxsIGNvbnZlcnQgdGhlIHZhbHVlIG9mCiAgICBhbnkgaXRlbSBvZiBhIG5vbi1zdXBwb3J0ZWQgdHlwZSB0byBpdHMgc3RyaW5nIHJlcHJlc2VudGF0aW9uLgogICAgVGhlIG5vcm1hbCA6bWV0aDpgLmNyZWF0ZV9mcm9tKClgIG1ldGhvZCByZWplY3RzIHRob3NlIGl0ZW1zLgoKICAgIFJldHVybnM6CiAgICAgIERpc3BsYXlEYXRhOiBBIDpjbGFzczpgRGlzcGxheURhdGFgIGluc3RhbmNlIHdpdGggcG9wdWxhdGVkIGl0ZW1zLgoKICAgIFJhaXNlczoKICAgICAgfmV4Y2VwdGlvbnMuVmFsdWVFcnJvcjogSWYgdGhlICoqaGFzX2Rpc3BsYXlfZGF0YSoqIGFyZ3VtZW50IGlzCiAgICAgICAgbm90IGFuIGluc3RhbmNlIG9mIDpjbGFzczpgSGFzRGlzcGxheURhdGFgLgogICAgIiIiCiAgICBmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgUGlwZWxpbmVPcHRpb25zCiAgICBpZiBub3QgaXNpbnN0YW5jZShwaXBlbGluZV9vcHRpb25zLCBQaXBlbGluZU9wdGlvbnMpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgJ0VsZW1lbnQgb2YgY2xhc3Mge30ue30gZG9lcyBub3Qgc3ViY2xhc3MgUGlwZWxpbmVPcHRpb25zJwogICAgICAgICAgLmZvcm1hdChwaXBlbGluZV9vcHRpb25zLl9fbW9kdWxlX18sCiAgICAgICAgICAgICAgICAgIHBpcGVsaW5lX29wdGlvbnMuX19jbGFzc19fLl9fbmFtZV9fKSkKCiAgICBpdGVtcyA9IHtrOiAodiBpZiBEaXNwbGF5RGF0YUl0ZW0uX2dldF92YWx1ZV90eXBlKHYpIGlzIG5vdCBOb25lCiAgICAgICAgICAgICAgICAgZWxzZSBzdHIodikpCiAgICAgICAgICAgICBmb3IgaywgdiBpbiBwaXBlbGluZV9vcHRpb25zLmRpc3BsYXlfZGF0YSgpLml0ZW1zKCl9CiAgICByZXR1cm4gY2xzKHBpcGVsaW5lX29wdGlvbnMuX25hbWVzcGFjZSgpLCBpdGVtcykKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIGNyZWF0ZV9mcm9tKGNscywgaGFzX2Rpc3BsYXlfZGF0YSk6CiAgICAiIiIgQ3JlYXRlcyA6Y2xhc3M6YERpc3BsYXlEYXRhYCBmcm9tIGEgOmNsYXNzOmBIYXNEaXNwbGF5RGF0YWAgaW5zdGFuY2UuCgogICAgUmV0dXJuczoKICAgICAgRGlzcGxheURhdGE6IEEgOmNsYXNzOmBEaXNwbGF5RGF0YWAgaW5zdGFuY2Ugd2l0aCBwb3B1bGF0ZWQgaXRlbXMuCgogICAgUmFpc2VzOgogICAgICB+ZXhjZXB0aW9ucy5WYWx1ZUVycm9yOiBJZiB0aGUgKipoYXNfZGlzcGxheV9kYXRhKiogYXJndW1lbnQgaXMKICAgICAgICBub3QgYW4gaW5zdGFuY2Ugb2YgOmNsYXNzOmBIYXNEaXNwbGF5RGF0YWAuCiAgICAiIiIKICAgIGlmIG5vdCBpc2luc3RhbmNlKGhhc19kaXNwbGF5X2RhdGEsIEhhc0Rpc3BsYXlEYXRhKToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignRWxlbWVudCBvZiBjbGFzcyB7fS57fSBkb2VzIG5vdCBzdWJjbGFzcyBIYXNEaXNwbGF5RGF0YScKICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KGhhc19kaXNwbGF5X2RhdGEuX19tb2R1bGVfXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc19kaXNwbGF5X2RhdGEuX19jbGFzc19fLl9fbmFtZV9fKSkKICAgIHJldHVybiBjbHMoaGFzX2Rpc3BsYXlfZGF0YS5fbmFtZXNwYWNlKCksIGhhc19kaXNwbGF5X2RhdGEuZGlzcGxheV9kYXRhKCkpCgoKY2xhc3MgRGlzcGxheURhdGFJdGVtKG9iamVjdCk6CiAgIiIiIEEgRGlzcGxheURhdGFJdGVtIHJlcHJlc2VudHMgYSB1bml0IG9mIHN0YXRpYyBkaXNwbGF5IGRhdGEuCgogIEVhY2ggaXRlbSBpcyBpZGVudGlmaWVkIGJ5IGEga2V5IGFuZCB0aGUgbmFtZXNwYWNlIG9mIHRoZSBjb21wb25lbnQgdGhlCiAgZGlzcGxheSBpdGVtIGJlbG9uZ3MgdG8uCiAgIiIiCiAgdHlwZURpY3QgPSB7c3RyOidTVFJJTkcnLAogICAgICAgICAgICAgIHVuaWNvZGU6J1NUUklORycsCiAgICAgICAgICAgICAgaW50OidJTlRFR0VSJywKICAgICAgICAgICAgICBmbG9hdDonRkxPQVQnLAogICAgICAgICAgICAgIGJvb2w6ICdCT09MRUFOJywKICAgICAgICAgICAgICB0aW1lZGVsdGE6J0RVUkFUSU9OJywKICAgICAgICAgICAgICBkYXRldGltZTonVElNRVNUQU1QJ30KCiAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlLCB1cmw9Tm9uZSwgbGFiZWw9Tm9uZSwKICAgICAgICAgICAgICAgbmFtZXNwYWNlPU5vbmUsIGtleT1Ob25lLCBzaG9ydFZhbHVlPU5vbmUpOgogICAgc2VsZi5uYW1lc3BhY2UgPSBuYW1lc3BhY2UKICAgIHNlbGYua2V5ID0ga2V5CiAgICBzZWxmLnR5cGUgPSBzZWxmLl9nZXRfdmFsdWVfdHlwZSh2YWx1ZSkKICAgIHNlbGYuc2hvcnRWYWx1ZSA9IChzaG9ydFZhbHVlIGlmIHNob3J0VmFsdWUgaXMgbm90IE5vbmUgZWxzZQogICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2dldF9zaG9ydF92YWx1ZSh2YWx1ZSwgc2VsZi50eXBlKSkKICAgIHNlbGYudmFsdWUgPSB2YWx1ZQogICAgc2VsZi51cmwgPSB1cmwKICAgIHNlbGYubGFiZWwgPSBsYWJlbAogICAgc2VsZi5fZHJvcF9pZl9ub25lID0gRmFsc2UKICAgIHNlbGYuX2Ryb3BfaWZfZGVmYXVsdCA9IEZhbHNlCgogIGRlZiBkcm9wX2lmX25vbmUoc2VsZik6CiAgICAiIiIgVGhlIGl0ZW0gc2hvdWxkIGJlIGRyb3BwZWQgaWYgaXRzIHZhbHVlIGlzIE5vbmUuCgogICAgUmV0dXJuczoKICAgICAgUmV0dXJucyBzZWxmLgogICAgIiIiCiAgICBzZWxmLl9kcm9wX2lmX25vbmUgPSBUcnVlCiAgICByZXR1cm4gc2VsZgoKICBkZWYgZHJvcF9pZl9kZWZhdWx0KHNlbGYsIGRlZmF1bHQpOgogICAgIiIiIFRoZSBpdGVtIHNob3VsZCBiZSBkcm9wcGVkIGlmIGl0cyB2YWx1ZSBpcyBlcXVhbCB0byBpdHMgZGVmYXVsdC4KCiAgICBSZXR1cm5zOgogICAgICBSZXR1cm5zIHNlbGYuCiAgICAiIiIKICAgIHNlbGYuX2RlZmF1bHQgPSBkZWZhdWx0CiAgICBzZWxmLl9kcm9wX2lmX2RlZmF1bHQgPSBUcnVlCiAgICByZXR1cm4gc2VsZgoKICBkZWYgc2hvdWxkX2Ryb3Aoc2VsZik6CiAgICAiIiIgUmV0dXJuIFRydWUgaWYgdGhlIGl0ZW0gc2hvdWxkIGJlIGRyb3BwZWQsIG9yIEZhbHNlIGlmIGl0IHNob3VsZCBub3QKICAgIGJlIGRyb3BwZWQuIFRoaXMgZGVwZW5kcyBvbiB0aGUgZHJvcF9pZl9ub25lLCBhbmQgZHJvcF9pZl9kZWZhdWx0IGNhbGxzLgoKICAgIFJldHVybnM6CiAgICAgIFRydWUgb3IgRmFsc2U7IGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBpdGVtIHNob3VsZCBiZSBkcm9wcGVkIG9yIGtlcHQuCiAgICAiIiIKICAgIGlmIHNlbGYuX2Ryb3BfaWZfbm9uZSBhbmQgc2VsZi52YWx1ZSBpcyBOb25lOgogICAgICByZXR1cm4gVHJ1ZQogICAgaWYgc2VsZi5fZHJvcF9pZl9kZWZhdWx0IGFuZCBzZWxmLnZhbHVlID09IHNlbGYuX2RlZmF1bHQ6CiAgICAgIHJldHVybiBUcnVlCiAgICByZXR1cm4gRmFsc2UKCiAgZGVmIGlzX3ZhbGlkKHNlbGYpOgogICAgIiIiIENoZWNrcyB0aGF0IGFsbCB0aGUgbmVjZXNzYXJ5IGZpZWxkcyBvZiB0aGUgOmNsYXNzOmBEaXNwbGF5RGF0YUl0ZW1gCiAgICBhcmUgZmlsbGVkIGluLiBJdCBjaGVja3MgdGhhdCBuZWl0aGVyIGtleSwgbmFtZXNwYWNlLCB2YWx1ZSBvciB0eXBlIGFyZQogICAgOmRhdGE6YE5vbmVgLgoKICAgIFJhaXNlczoKICAgICAgfmV4Y2VwdGlvbnMuVmFsdWVFcnJvcjogSWYgdGhlIGl0ZW0gZG9lcyBub3QgaGF2ZSBhIGtleSwgbmFtZXNwYWNlLAogICAgICAgIHZhbHVlIG9yIHR5cGUuCiAgICAiIiIKICAgIGlmIHNlbGYua2V5IGlzIE5vbmU6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgRGlzcGxheURhdGFJdGVtLiBLZXkgbXVzdCBub3QgYmUgTm9uZScpCiAgICBpZiBzZWxmLm5hbWVzcGFjZSBpcyBOb25lOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIERpc3BsYXlEYXRhSXRlbS4gTmFtZXNwYWNlIG11c3Qgbm90IGJlIE5vbmUnKQogICAgaWYgc2VsZi52YWx1ZSBpcyBOb25lOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIERpc3BsYXlEYXRhSXRlbS4gVmFsdWUgbXVzdCBub3QgYmUgTm9uZScpCiAgICBpZiBzZWxmLnR5cGUgaXMgTm9uZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICdJbnZhbGlkIERpc3BsYXlEYXRhSXRlbS4gVmFsdWUge30gaXMgb2YgYW4gdW5zdXBwb3J0ZWQgdHlwZS4nCiAgICAgICAgICAuZm9ybWF0KHNlbGYudmFsdWUpKQoKICBkZWYgX2dldF9kaWN0KHNlbGYpOgogICAgcmVzID0geydrZXknOiBzZWxmLmtleSwKICAgICAgICAgICAnbmFtZXNwYWNlJzogc2VsZi5uYW1lc3BhY2UsCiAgICAgICAgICAgJ3R5cGUnOiBzZWxmLnR5cGUgaWYgc2VsZi50eXBlICE9ICdDTEFTUycgZWxzZSAnU1RSSU5HJ30KICAgICMgVE9ETzogUHl0aG9uIENsYXNzIHR5cGVzIHNob3VsZCBub3QgYmUgc3BlY2lhbC1jYXNlZCBvbmNlCiAgICAjIHRoZSBGbiBBUEkgaXMgaW4uCiAgICBpZiBzZWxmLnVybCBpcyBub3QgTm9uZToKICAgICAgcmVzWyd1cmwnXSA9IHNlbGYudXJsCiAgICBpZiBzZWxmLnNob3J0VmFsdWUgaXMgbm90IE5vbmU6CiAgICAgIHJlc1snc2hvcnRWYWx1ZSddID0gc2VsZi5zaG9ydFZhbHVlCiAgICBpZiBzZWxmLmxhYmVsIGlzIG5vdCBOb25lOgogICAgICByZXNbJ2xhYmVsJ10gPSBzZWxmLmxhYmVsCiAgICByZXNbJ3ZhbHVlJ10gPSBzZWxmLl9mb3JtYXRfdmFsdWUoc2VsZi52YWx1ZSwgc2VsZi50eXBlKQogICAgcmV0dXJuIHJlcwoKICBkZWYgZ2V0X2RpY3Qoc2VsZik6CiAgICAiIiIgUmV0dXJucyB0aGUgaW50ZXJuYWwtQVBJIGRpY3Rpb25hcnkgcmVwcmVzZW50aW5nIHRoZQogICAgOmNsYXNzOmBEaXNwbGF5RGF0YUl0ZW1gLgoKICAgIFJldHVybnM6CiAgICAgIERpY3Rbc3RyLCBBbnldOiBBIGRpY3Rpb25hcnkuIFRoZSBpbnRlcm5hbC1BUEkgZGljdGlvbmFyeSByZXByZXNlbnRpbmcKICAgICAgdGhlIDpjbGFzczpgRGlzcGxheURhdGFJdGVtYC4KCiAgICBSYWlzZXM6CiAgICAgIH5leGNlcHRpb25zLlZhbHVlRXJyb3I6IGlmIHRoZSBpdGVtIGlzIG5vdCB2YWxpZC4KICAgICIiIgogICAgc2VsZi5pc192YWxpZCgpCiAgICByZXR1cm4gc2VsZi5fZ2V0X2RpY3QoKQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJ0Rpc3BsYXlEYXRhSXRlbSh7fSknLmZvcm1hdChqc29uLmR1bXBzKHNlbGYuX2dldF9kaWN0KCkpKQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIHNlbGYuX19jbGFzc19fKToKICAgICAgcmV0dXJuIHNlbGYuX2dldF9kaWN0KCkgPT0gb3RoZXIuX2dldF9kaWN0KCkKICAgIHJldHVybiBGYWxzZQoKICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKICAgICMgVE9ETyhCRUFNLTU5NDkpOiBOZWVkZWQgZm9yIFB5dGhvbiAyIGNvbXBhdGliaWxpdHkuCiAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKCiAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgcmV0dXJuIGhhc2godHVwbGUoc29ydGVkKHNlbGYuX2dldF9kaWN0KCkuaXRlbXMoKSkpKQoKICBAY2xhc3NtZXRob2QKICBkZWYgX2Zvcm1hdF92YWx1ZShjbHMsIHZhbHVlLCB0eXBlXyk6CiAgICAiIiIgUmV0dXJucyB0aGUgQVBJIHJlcHJlc2VudGF0aW9uIG9mIGEgdmFsdWUgZ2l2ZW4gaXRzIHR5cGUuCgogICAgQXJnczoKICAgICAgdmFsdWU6IFRoZSB2YWx1ZSBvZiB0aGUgaXRlbSB0aGF0IG5lZWRzIHRvIGJlIHNob3J0ZW5lZC4KICAgICAgdHlwZV8oc3RyaW5nKTogVGhlIHR5cGUgb2YgdGhlIHZhbHVlLgoKICAgIFJldHVybnM6CiAgICAgIEEgZm9ybWF0dGVkIHZhbHVlIGluIHRoZSBmb3JtIG9mIGEgZmxvYXQsIGludCwgb3Igc3RyaW5nLgogICAgIiIiCiAgICByZXMgPSB2YWx1ZQogICAgaWYgdHlwZV8gPT0gJ0NMQVNTJzoKICAgICAgcmVzID0gJ3t9Lnt9Jy5mb3JtYXQodmFsdWUuX19tb2R1bGVfXywgdmFsdWUuX19uYW1lX18pCiAgICBlbGlmIHR5cGVfID09ICdEVVJBVElPTic6CiAgICAgIHJlcyA9IHZhbHVlLnRvdGFsX3NlY29uZHMoKSoxMDAwCiAgICBlbGlmIHR5cGVfID09ICdUSU1FU1RBTVAnOgogICAgICByZXMgPSBjYWxlbmRhci50aW1lZ20odmFsdWUudGltZXR1cGxlKCkpKjEwMDAgKyB2YWx1ZS5taWNyb3NlY29uZC8vMTAwMAogICAgcmV0dXJuIHJlcwoKICBAY2xhc3NtZXRob2QKICBkZWYgX2dldF9zaG9ydF92YWx1ZShjbHMsIHZhbHVlLCB0eXBlXyk6CiAgICAiIiIgQ2FsY3VsYXRlcyB0aGUgc2hvcnQgdmFsdWUgZm9yIGFuIGl0ZW0uCgogICAgQXJnczoKICAgICAgdmFsdWU6IFRoZSB2YWx1ZSBvZiB0aGUgaXRlbSB0aGF0IG5lZWRzIHRvIGJlIHNob3J0ZW5lZC4KICAgICAgdHlwZV8oc3RyaW5nKTogVGhlIHR5cGUgb2YgdGhlIHZhbHVlLgoKICAgIFJldHVybnM6CiAgICAgIFRoZSB1bnF1YWxpZmllZCBuYW1lIG9mIGEgY2xhc3MgaWYgdHlwZV8gaXMgJ0NMQVNTJy4gTm9uZSBvdGhlcndpc2UuCiAgICAiIiIKICAgIGlmIHR5cGVfID09ICdDTEFTUyc6CiAgICAgIHJldHVybiB2YWx1ZS5fX25hbWVfXwogICAgcmV0dXJuIE5vbmUKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIF9nZXRfdmFsdWVfdHlwZShjbHMsIHZhbHVlKToKICAgICIiIiBJbmZlcnMgdGhlIHR5cGUgb2YgYSBnaXZlbiB2YWx1ZS4KCiAgICBBcmdzOgogICAgICB2YWx1ZTogVGhlIHZhbHVlIHdob3NlIHR5cGUgbmVlZHMgdG8gYmUgaW5mZXJyZWQuIEZvciAnRFVSQVRJT04nIGFuZAogICAgICAgICdUSU1FU1RBTVAnLCB0aGUgY29ycmVzcG9uZGluZyBQeXRob24gdHlwZSBpcyBkYXRldGltZS50aW1lZGVsdGEgYW5kCiAgICAgICAgZGF0ZXRpbWUuZGF0ZXRpbWUgcmVzcGVjdGl2ZWx5LiBGb3IgUHl0aG9uIGNsYXNzZXMsIHRoZSBBUEkgdHlwZSBpcwogICAgICAgIGp1c3QgJ1NUUklORycgYXQgdGhlIG1vbWVudC4KCiAgICBSZXR1cm5zOgogICAgICBPbmUgb2YgJ1NUUklORycsICdJTlRFR0VSJywgJ0ZMT0FUJywgJ0NMQVNTJywgJ0RVUkFUSU9OJywgb3IKICAgICAgJ1RJTUVTVEFNUCcsIGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiB0aGUgdmFsdWUuCiAgICAiIiIKICAgICNUT0RPOiBGaXggQXJnczogZG9jdW1lbnRhdGlvbiBvbmNlIHRoZSBQeXRob24gY2xhc3NlcyBoYW5kbGluZyBoYXMgY2hhbmdlZAogICAgdHlwZV8gPSBjbHMudHlwZURpY3QuZ2V0KHR5cGUodmFsdWUpKQogICAgaWYgdHlwZV8gaXMgTm9uZToKICAgICAgdHlwZV8gPSAnQ0xBU1MnIGlmIGluc3BlY3QuaXNjbGFzcyh2YWx1ZSkgZWxzZSBOb25lCiAgICBpZiB0eXBlXyBpcyBOb25lIGFuZCB2YWx1ZSBpcyBOb25lOgogICAgICB0eXBlXyA9ICdTVFJJTkcnCiAgICByZXR1cm4gdHlwZV8KfXJTggAAKFgWAAAARGlzcGxheURhdGFJdGVtLl9fZXFfX1gDAAAAZGVmTRUBTRkBh1gfAAAARGlzcGxheURhdGEuY3JlYXRlX2Zyb21fb3B0aW9uc1gDAAAAZGVmS3hLk4dYGwAAAEhhc0Rpc3BsYXlEYXRhLmRpc3BsYXlfZGF0YVgDAAAAZGVmSztLUYdYGQAAAEhhc0Rpc3BsYXlEYXRhLl9uYW1lc3BhY2VYAwAAAGRlZktSS1SHWBwAAABEaXNwbGF5RGF0YUl0ZW0uZHJvcF9pZl9ub25lWAMAAABkZWZLwUvJh1gYAAAARGlzcGxheURhdGFJdGVtLl9faGFzaF9fWAMAAABkZWZNHgFNIAGHWBgAAABEaXNwbGF5RGF0YUl0ZW0uZ2V0X2RpY3RYAwAAAGRlZk0EAU0RAYdYFwAAAERpc3BsYXlEYXRhLmNyZWF0ZV9mcm9tWAMAAABkZWZLlEukh1gYAAAARGlzcGxheURhdGFJdGVtLmlzX3ZhbGlkWAMAAABkZWZL4Uv0h1gdAAAARGlzcGxheURhdGFJdGVtLl9mb3JtYXRfdmFsdWVYAwAAAGRlZk0hAU00AYdYGwAAAERpc3BsYXlEYXRhLl9wb3B1bGF0ZV9pdGVtc1gDAAAAZGVmS19Ld4dYIAAAAERpc3BsYXlEYXRhSXRlbS5fZ2V0X3Nob3J0X3ZhbHVlWAMAAABkZWZNNQFNQwGHWBgAAABEaXNwbGF5RGF0YUl0ZW0uX19pbml0X19YAwAAAGRlZku0S8CHWBkAAABEaXNwbGF5RGF0YUl0ZW0uX2dldF9kaWN0WAMAAABkZWZL9U0DAYdYHwAAAERpc3BsYXlEYXRhSXRlbS5fZ2V0X3ZhbHVlX3R5cGVYAwAAAGRlZk1EAU1ZAYdYGwAAAERpc3BsYXlEYXRhSXRlbS5zaG91bGRfZHJvcFgDAAAAZGVmS9RL4IdYCwAAAERpc3BsYXlEYXRhWAUAAABjbGFzc0tWS6SHWBYAAABEaXNwbGF5RGF0YUl0ZW0uX19uZV9fWAMAAABkZWZNGgFNHQGHWA4AAABIYXNEaXNwbGF5RGF0YVgFAAAAY2xhc3NLNUtUh1gUAAAARGlzcGxheURhdGEuX19pbml0X19YAwAAAGRlZktaS16HWB8AAABEaXNwbGF5RGF0YUl0ZW0uZHJvcF9pZl9kZWZhdWx0WAMAAABkZWZLykvTh1gPAAAARGlzcGxheURhdGFJdGVtWAUAAABjbGFzc0umTVkBh1gYAAAARGlzcGxheURhdGFJdGVtLl9fcmVwcl9fWAMAAABkZWZNEgFNFAGHdX1yVIIAAChYDgAAAEhhc0Rpc3BsYXlEYXRhajZZAABYHAAAAERpc3BsYXlEYXRhSXRlbS5kcm9wX2lmX25vbmVqNlkAAFgfAAAARGlzcGxheURhdGEuY3JlYXRlX2Zyb21fb3B0aW9uc2o2WQAAWBgAAABEaXNwbGF5RGF0YUl0ZW0uZ2V0X2RpY3RqNlkAAFgbAAAASGFzRGlzcGxheURhdGEuZGlzcGxheV9kYXRhajZZAABYFwAAAERpc3BsYXlEYXRhLmNyZWF0ZV9mcm9tajZZAABYGAAAAERpc3BsYXlEYXRhSXRlbS5pc192YWxpZGo2WQAAWBsAAABEaXNwbGF5RGF0YUl0ZW0uc2hvdWxkX2Ryb3BqNlkAAFgPAAAARGlzcGxheURhdGFJdGVtajZZAABYCwAAAERpc3BsYXlEYXRhajZZAABYHwAAAERpc3BsYXlEYXRhSXRlbS5kcm9wX2lmX2RlZmF1bHRqNlkAAHVqfWkAAFgeAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5clWCAACFgXJWggAAfXJXggAAYnRyWIIAAFUbYXBhY2hlX2JlYW0udXRpbHMucHJvY2Vzc2VzclmCAAAoWCsHAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkNyb3NzLXBsYXRmb3JtIHV0aWxpdGllcyBmb3IgY3JlYXRpbmcgc3VicHJvY2Vzc2VzLgoKRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoiIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgcGxhdGZvcm0KaW1wb3J0IHN1YnByb2Nlc3MKCiMgT24gV2luZG93cywgd2UgbmVlZCB0byB1c2Ugc2hlbGw9VHJ1ZSB3aGVuIGNyZWF0aW5nIHN1YnByb2Nlc3NlcyBmb3IgYmluYXJ5CiMgcGF0aHMgdG8gYmUgcmVzb2x2ZWQgY29ycmVjdGx5Lgpmb3JjZV9zaGVsbCA9IHBsYXRmb3JtLnN5c3RlbSgpID09ICdXaW5kb3dzJwoKIyBXZSBtaW1pYyB0aGUgaW50ZXJmYWNlIG9mIHRoZSBzdGFuZGFyZCBQeXRob24gc3VicHJvY2VzcyBtb2R1bGUuClBJUEUgPSBzdWJwcm9jZXNzLlBJUEUKU1RET1VUID0gc3VicHJvY2Vzcy5TVERPVVQKQ2FsbGVkUHJvY2Vzc0Vycm9yID0gc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IKCgpkZWYgY2FsbCgqYXJncywgKiprd2FyZ3MpOgogIGlmIGZvcmNlX3NoZWxsOgogICAga3dhcmdzWydzaGVsbCddID0gVHJ1ZQogIHJldHVybiBzdWJwcm9jZXNzLmNhbGwoKmFyZ3MsICoqa3dhcmdzKQoKCmRlZiBjaGVja19jYWxsKCphcmdzLCAqKmt3YXJncyk6CiAgaWYgZm9yY2Vfc2hlbGw6CiAgICBrd2FyZ3NbJ3NoZWxsJ10gPSBUcnVlCiAgcmV0dXJuIHN1YnByb2Nlc3MuY2hlY2tfY2FsbCgqYXJncywgKiprd2FyZ3MpCgoKZGVmIGNoZWNrX291dHB1dCgqYXJncywgKiprd2FyZ3MpOgogIGlmIGZvcmNlX3NoZWxsOgogICAga3dhcmdzWydzaGVsbCddID0gVHJ1ZQogIHJldHVybiBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgqYXJncywgKiprd2FyZ3MpCgoKZGVmIFBvcGVuKCphcmdzLCAqKmt3YXJncyk6ICAjIHB5bGludDogZGlzYWJsZT1pbnZhbGlkLW5hbWUKICBpZiBmb3JjZV9zaGVsbDoKICAgIGt3YXJnc1snc2hlbGwnXSA9IFRydWUKICByZXR1cm4gc3VicHJvY2Vzcy5Qb3BlbigqYXJncywgKiprd2FyZ3MpCn1yWoIAAChYBAAAAGNhbGxYAwAAAGRlZksmSyqHWAUAAABQb3BlblgDAAAAZGVmSzhLPIdYDAAAAGNoZWNrX291dHB1dFgDAAAAZGVmSzJLNodYCgAAAGNoZWNrX2NhbGxYAwAAAGRlZkssSzCHdX1yW4IAAChYBAAAAGNhbGxqGGEAAFgFAAAAUG9wZW5qGGEAAFgMAAAAY2hlY2tfb3V0cHV0ahhhAABYCgAAAGNoZWNrX2NhbGxqGGEAAHVqfWkAAFgbAAAAYXBhY2hlX2JlYW0udXRpbHMucHJvY2Vzc2VzclyCAACFgXJdggAAfXJeggAAYnRyX4IAAFUsYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X2lvX3JlYWRfcGlwZWxpbmUoWGAKAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkEgRGF0YWZsb3cgam9iIHRoYXQgY291bnRzIHRoZSBudW1iZXIgb2Ygcm93cyBpbiBhIEJRIHRhYmxlLgoKICAgQ2FuIGJlIGNvbmZpZ3VyZWQgdG8gc2ltdWxhdGUgc2xvdyByZWFkaW5nIGZvciBhIGdpdmVuIG51bWJlciBvZiByb3dzLgoiIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgYXJncGFyc2UKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHJhbmRvbQppbXBvcnQgdGltZQoKaW1wb3J0IGFwYWNoZV9iZWFtIGFzIGJlYW0KZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IFBpcGVsaW5lT3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9waXBlbGluZSBpbXBvcnQgVGVzdFBpcGVsaW5lCmZyb20gYXBhY2hlX2JlYW0udGVzdGluZy51dGlsIGltcG9ydCBhc3NlcnRfdGhhdApmcm9tIGFwYWNoZV9iZWFtLnRlc3RpbmcudXRpbCBpbXBvcnQgZXF1YWxfdG8KCgpjbGFzcyBSb3dUb1N0cmluZ1dpdGhTbG93RG93bihiZWFtLkRvRm4pOgoKICBkZWYgcHJvY2VzcyhzZWxmLCBlbGVtZW50LCBudW1fc2xvdz0wLCAqYXJncywgKiprd2FyZ3MpOgoKICAgIGlmIG51bV9zbG93ID09IDA6CiAgICAgIHlpZWxkIFsncm93J10KICAgIGVsc2U6CiAgICAgIHJhbmQgPSByYW5kb20ucmFuZG9tKCkgKiAxMDAKICAgICAgaWYgcmFuZCA8IG51bV9zbG93OgogICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKICAgICAgICB5aWVsZCBbJ3Nsb3dfcm93J10KICAgICAgZWxzZToKICAgICAgICB5aWVsZCBbJ3JvdyddCgoKZGVmIHJ1bihhcmd2PU5vbmUpOgogIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWlucHV0X3RhYmxlJywgcmVxdWlyZWQ9VHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0lucHV0IHRhYmxlIHRvIHByb2Nlc3MuJykKICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW51bV9yZWNvcmRzJywgcmVxdWlyZWQ9VHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1RoZSBleHBlY3RlZCBudW1iZXIgb2YgcmVjb3JkcycsIHR5cGU9aW50KQogIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tbnVtX3Nsb3cnLCBkZWZhdWx0PTAsCiAgICAgICAgICAgICAgICAgICAgICBoZWxwPSgnUGVyY2VudGFnZSBvZiByb3dzIHRoYXQgd2lsbCBiZSBzbG93LiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVzdCBiZSBpbiB0aGUgcmFuZ2UgWzAsIDEwMCknKSkKICBrbm93bl9hcmdzLCBwaXBlbGluZV9hcmdzID0gcGFyc2VyLnBhcnNlX2tub3duX2FyZ3MoYXJndikKCiAgcCA9IFRlc3RQaXBlbGluZShvcHRpb25zPVBpcGVsaW5lT3B0aW9ucyhwaXBlbGluZV9hcmdzKSkKCiAgIyBweWxpbnQ6IGRpc2FibGU9ZXhwcmVzc2lvbi1ub3QtYXNzaWduZWQKICBjb3VudCA9IChwIHwgJ3JlYWQnID4+IGJlYW0uaW8uUmVhZChiZWFtLmlvLkJpZ1F1ZXJ5U291cmNlKAogICAgICBrbm93bl9hcmdzLmlucHV0X3RhYmxlKSkKICAgICAgICAgICB8ICdyb3cgdG8gc3RyaW5nJyA+PiBiZWFtLlBhckRvKFJvd1RvU3RyaW5nV2l0aFNsb3dEb3duKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fc2xvdz1rbm93bl9hcmdzLm51bV9zbG93KQogICAgICAgICAgIHwgJ2NvdW50JyA+PiBiZWFtLmNvbWJpbmVycy5Db3VudC5HbG9iYWxseSgpKQoKICBhc3NlcnRfdGhhdChjb3VudCwgZXF1YWxfdG8oW2tub3duX2FyZ3MubnVtX3JlY29yZHNdKSkKCiAgcC5ydW4oKQoKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgbG9nZ2luZy5nZXRMb2dnZXIoKS5zZXRMZXZlbChsb2dnaW5nLklORk8pCiAgcnVuKCkKfXJgggAAKFgXAAAAUm93VG9TdHJpbmdXaXRoU2xvd0Rvd25YBQAAAGNsYXNzSyVLModYAwAAAHJ1blgDAAAAZGVmSzRLS4dYHwAAAFJvd1RvU3RyaW5nV2l0aFNsb3dEb3duLnByb2Nlc3NYAwAAAGRlZksnSzKHdX1yYYIAAChYFwAAAFJvd1RvU3RyaW5nV2l0aFNsb3dEb3duau9jAABYAwAAAHJ1bmrvYwAAWB8AAABSb3dUb1N0cmluZ1dpdGhTbG93RG93bi5wcm9jZXNzau9jAAB1an1pAABYLAAAAGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV9pb19yZWFkX3BpcGVsaW5lcmKCAACFgXJjggAAfXJkggAAYnRVHGFwYWNoZV9iZWFtLmludGVybmFsLnBpY2tsZXIoWIckAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIlBpY2tsZXIgZm9yIHZhbHVlcywgZnVuY3Rpb25zLCBhbmQgY2xhc3Nlcy4KCkZvciBpbnRlcm5hbCB1c2Ugb25seS4gTm8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KClBpY2tsZXMgY3JlYXRlZCBieSB0aGUgcGlja2xpbmcgbGlicmFyeSBjb250YWluIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLCBzbwp3ZSBiYXNlNjQtZW5jb2RlIHRoZSByZXN1bHRzIHNvIHRoYXQgd2UgY2FuIHB1dCB0aGVtIGluIGEgSlNPTiBvYmplY3RzLgpUaGUgcGlja2xlciBpcyB1c2VkIHRvIGVtYmVkIEZsYXRNYXAgY2FsbGFibGUgb2JqZWN0cyBpbnRvIHRoZSB3b3JrZmxvdyBKU09OCmRlc2NyaXB0aW9uLgoKVGhlIHBpY2tsZXIgbW9kdWxlIHNob3VsZCBiZSB1c2VkIHRvIHBpY2tsZSBmdW5jdGlvbnMgYW5kIG1vZHVsZXM7IGZvciB2YWx1ZXMsCnRoZSBjb2RlcnMuKlBpY2tsZUNvZGVyIGNsYXNzZXMgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZC4KIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGJhc2U2NAppbXBvcnQgbG9nZ2luZwppbXBvcnQgc3lzCmltcG9ydCB0cmFjZWJhY2sKaW1wb3J0IHR5cGVzCmltcG9ydCB6bGliCgppbXBvcnQgZGlsbAoKIyBEaWxsIDAuMjguMCByZW5hbWVkIGRpbGwuZGlsbCB0byBkaWxsLl9kaWxsOgojIGh0dHBzOi8vZ2l0aHViLmNvbS91cWZvdW5kYXRpb24vZGlsbC9jb21taXQvZjA5NzJlY2M3YTQxZDBiOGFjYWRhNjA0MmQ1NTcwNjhjYWM2OWJhYQojIFRPRE86IFJlbW92ZSB0aGlzIG9uY2UgQmVhbSBkZXBlbmRzIG9uIGRpbGwgPj0gMC4yLjgKaWYgbm90IGdldGF0dHIoZGlsbCwgJ2RpbGwnLCBOb25lKToKICBkaWxsLmRpbGwgPSBkaWxsLl9kaWxsCiAgc3lzLm1vZHVsZXNbJ2RpbGwuZGlsbCddID0gZGlsbC5fZGlsbAoKIyBUT0RPOiBSZW1vdmUgb25jZSBEYXRhZmxvdyBoYXMgY29udGFpbmVycyB3aXRoIGEgcHJlaW5zdGFsbGVkIGRpbGwgPj0gMC4yLjgKaWYgbm90IGdldGF0dHIoZGlsbCwgJ19kaWxsJywgTm9uZSk6CiAgZGlsbC5fZGlsbCA9IGRpbGwuZGlsbAogIHN5cy5tb2R1bGVzWydkaWxsLl9kaWxsJ10gPSBkaWxsLmRpbGwKCgpkZWYgX2lzX25lc3RlZF9jbGFzcyhjbHMpOgogICIiIlJldHVybnMgdHJ1ZSBpZiBhcmd1bWVudCBpcyBhIGNsYXNzIG9iamVjdCB0aGF0IGFwcGVhcnMgdG8gYmUgbmVzdGVkLiIiIgogIHJldHVybiAoaXNpbnN0YW5jZShjbHMsIHR5cGUpCiAgICAgICAgICBhbmQgY2xzLl9fbW9kdWxlX18gIT0gJ2J1aWx0aW5zJyAgICAgIyBQeXRob24gMwogICAgICAgICAgYW5kIGNscy5fX21vZHVsZV9fICE9ICdfX2J1aWx0aW5fXycgICMgUHl0aG9uIDIKICAgICAgICAgIGFuZCBjbHMuX19uYW1lX18gbm90IGluIHN5cy5tb2R1bGVzW2Nscy5fX21vZHVsZV9fXS5fX2RpY3RfXykKCgpkZWYgX2ZpbmRfY29udGFpbmluZ19jbGFzcyhuZXN0ZWRfY2xhc3MpOgogICIiIkZpbmRzIGNvbnRhaW5pbmcgY2xhc3Mgb2YgYSBuZXN0ZWQgY2xhc3MgcGFzc2VkIGFzIGFyZ3VtZW50LiIiIgoKICBzZWVuID0gc2V0KCkKCiAgZGVmIF9maW5kX2NvbnRhaW5pbmdfY2xhc3NfaW5uZXIob3V0ZXIpOgogICAgaWYgb3V0ZXIgaW4gc2VlbjoKICAgICAgcmV0dXJuIE5vbmUKICAgIHNlZW4uYWRkKG91dGVyKQogICAgZm9yIGssIHYgaW4gb3V0ZXIuX19kaWN0X18uaXRlbXMoKToKICAgICAgaWYgdiBpcyBuZXN0ZWRfY2xhc3M6CiAgICAgICAgcmV0dXJuIG91dGVyLCBrCiAgICAgIGVsaWYgaXNpbnN0YW5jZSh2LCB0eXBlKSBhbmQgaGFzYXR0cih2LCAnX19kaWN0X18nKToKICAgICAgICByZXMgPSBfZmluZF9jb250YWluaW5nX2NsYXNzX2lubmVyKHYpCiAgICAgICAgaWYgcmVzOiByZXR1cm4gcmVzCgogIHJldHVybiBfZmluZF9jb250YWluaW5nX2NsYXNzX2lubmVyKHN5cy5tb2R1bGVzW25lc3RlZF9jbGFzcy5fX21vZHVsZV9fXSkKCgpkZWYgX25lc3RlZF90eXBlX3dyYXBwZXIoZnVuKToKICAiIiJBIHdyYXBwZXIgZm9yIHRoZSBzdGFuZGFyZCBwaWNrbGVyIGhhbmRsZXIgZm9yIGNsYXNzIG9iamVjdHMuCgogIEFyZ3M6CiAgICBmdW46IE9yaWdpbmFsIHBpY2tsZXIgaGFuZGxlciBmb3IgdHlwZSBvYmplY3RzLgoKICBSZXR1cm5zOgogICAgQSB3cmFwcGVyIGZvciB0eXBlIG9iamVjdHMgdGhhdCBoYW5kbGVzIG5lc3RlZCBjbGFzc2VzLgoKICBUaGUgd3JhcHBlciBkZXRlY3RzIGlmIGFuIG9iamVjdCBiZWluZyBwaWNrbGVkIGlzIGEgbmVzdGVkIGNsYXNzIG9iamVjdC4KICBGb3IgbmVzdGVkIGNsYXNzIG9iamVjdCBvbmx5IGl0IHdpbGwgc2F2ZSB0aGUgY29udGFpbmluZyBjbGFzcyBvYmplY3Qgc28KICB0aGUgbmVzdGVkIHN0cnVjdHVyZSBpcyByZWNyZWF0ZWQgZHVyaW5nIHVucGlja2xlLgogICIiIgoKICBkZWYgd3JhcHBlcihwaWNrbGVyLCBvYmopOgogICAgIyBXaGVuIHRoZSBuZXN0ZWQgY2xhc3MgaXMgZGVmaW5lZCBpbiB0aGUgX19tYWluX18gbW9kdWxlIHdlIGRvIG5vdCBoYXZlIHRvCiAgICAjIGRvIGFueXRoaW5nIHNwZWNpYWwgYmVjYXVzZSB0aGUgcGlja2xlciBpdHNlbGYgd2lsbCBzYXZlIHRoZSBjb25zdGl0dWVudAogICAgIyBwYXJ0cyBvZiB0aGUgdHlwZSAoaS5lLiwgbmFtZSwgYmFzZSBjbGFzc2VzLCBkaWN0aW9uYXJ5KSBhbmQgdGhlbgogICAgIyByZWNyZWF0ZSBpdCBkdXJpbmcgdW5waWNrbGluZy4KICAgIGlmIF9pc19uZXN0ZWRfY2xhc3Mob2JqKSBhbmQgb2JqLl9fbW9kdWxlX18gIT0gJ19fbWFpbl9fJzoKICAgICAgY29udGFpbmluZ19jbGFzc19hbmRfbmFtZSA9IF9maW5kX2NvbnRhaW5pbmdfY2xhc3Mob2JqKQogICAgICBpZiBjb250YWluaW5nX2NsYXNzX2FuZF9uYW1lIGlzIG5vdCBOb25lOgogICAgICAgIHJldHVybiBwaWNrbGVyLnNhdmVfcmVkdWNlKAogICAgICAgICAgICBnZXRhdHRyLCBjb250YWluaW5nX2NsYXNzX2FuZF9uYW1lLCBvYmo9b2JqKQogICAgdHJ5OgogICAgICByZXR1cm4gZnVuKHBpY2tsZXIsIG9iaikKICAgIGV4Y2VwdCBkaWxsLmRpbGwuUGlja2xpbmdFcnJvcjoKICAgICAgIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcwogICAgICByZXR1cm4gcGlja2xlci5zYXZlX3JlZHVjZSgKICAgICAgICAgIGRpbGwuZGlsbC5fY3JlYXRlX3R5cGUsCiAgICAgICAgICAodHlwZShvYmopLCBvYmouX19uYW1lX18sIG9iai5fX2Jhc2VzX18sCiAgICAgICAgICAgZGlsbC5kaWxsLl9kaWN0X2Zyb21fZGljdHByb3h5KG9iai5fX2RpY3RfXykpLAogICAgICAgICAgb2JqPW9iaikKICAgICAgIyBweWxpbnQ6IGVuYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCgogIHJldHVybiB3cmFwcGVyCgoKIyBNb25rZXkgcGF0Y2ggdGhlIHN0YW5kYXJkIHBpY2tsZXIgZGlzcGF0Y2ggdGFibGUgZW50cnkgZm9yIHR5cGUgb2JqZWN0cy4KIyBEaWxsLCBmb3IgY2VydGFpbiB0eXBlcywgZGVmZXJzIHRvIHRoZSBzdGFuZGFyZCBwaWNrbGVyIChpbmNsdWRpbmcgdHlwZQojIG9iamVjdHMpLiBXZSB3cmFwIHRoZSBzdGFuZGFyZCBoYW5kbGVyIHVzaW5nIHR5cGVfd3JhcHBlcigpIGJlY2F1c2UKIyBmb3IgbmVzdGVkIGNsYXNzIHdlIHdhbnQgdG8gcGlja2xlIHRoZSBhY3R1YWwgZW5jbG9zaW5nIGNsYXNzIG9iamVjdCBzbyB3ZQojIGNhbiByZWNyZWF0ZSBpdCBkdXJpbmcgdW5waWNrbGluZy4KIyBUT0RPKHNpbHZpdWMpOiBNYWtlIHN1cmUgd2Ugc3VibWl0IHRoZSBmaXggdXBzdHJlYW0gdG8gR2l0SHViIGRpbGwgcHJvamVjdC4KZGlsbC5kaWxsLlBpY2tsZXIuZGlzcGF0Y2hbdHlwZV0gPSBfbmVzdGVkX3R5cGVfd3JhcHBlcigKICAgIGRpbGwuZGlsbC5QaWNrbGVyLmRpc3BhdGNoW3R5cGVdKQoKCiMgRGlsbCBwaWNrbGVzIGdlbmVyYXRvcnMgb2JqZWN0cyB3aXRob3V0IGNvbXBsYWludCwgYnV0IHVucGlja2xpbmcgcHJvZHVjZXMKIyBUeXBlRXJyb3I6IG9iamVjdC5fX25ld19fKGdlbmVyYXRvcikgaXMgbm90IHNhZmUsIHVzZSBnZW5lcmF0b3IuX19uZXdfXygpCiMgb24gc29tZSB2ZXJzaW9ucyBvZiBQeXRob24uCmRlZiBfcmVqZWN0X2dlbmVyYXRvcnModW51c2VkX3BpY2tsZXIsIHVudXNlZF9vYmopOgogIHJhaXNlIFR5cGVFcnJvcigiY2FuJ3QgKHNhZmVseSkgcGlja2xlIGdlbmVyYXRvciBvYmplY3RzIikKCgpkaWxsLmRpbGwuUGlja2xlci5kaXNwYXRjaFt0eXBlcy5HZW5lcmF0b3JUeXBlXSA9IF9yZWplY3RfZ2VuZXJhdG9ycwoKCiMgVGhpcyBpZiBndWFyZHMgYWdhaW5zdCBkaWxsIG5vdCBiZWluZyBmdWxsIGluaXRpYWxpemVkIHdoZW4gZ2VuZXJhdGluZyBkb2NzLgppZiAnc2F2ZV9tb2R1bGUnIGluIGRpcihkaWxsLmRpbGwpOgoKICAjIEFsd2F5cyBwaWNrbGUgbm9uLW1haW4gbW9kdWxlcyBieSBuYW1lLgogIG9sZF9zYXZlX21vZHVsZSA9IGRpbGwuZGlsbC5zYXZlX21vZHVsZQoKICBAZGlsbC5kaWxsLnJlZ2lzdGVyKGRpbGwuZGlsbC5Nb2R1bGVUeXBlKQogIGRlZiBzYXZlX21vZHVsZShwaWNrbGVyLCBvYmopOgogICAgaWYgZGlsbC5kaWxsLmlzX2RpbGwocGlja2xlcikgYW5kIG9iaiBpcyBwaWNrbGVyLl9tYWluOgogICAgICByZXR1cm4gb2xkX3NhdmVfbW9kdWxlKHBpY2tsZXIsIG9iaikKICAgIGVsc2U6CiAgICAgIGRpbGwuZGlsbC5sb2cuaW5mbygnTTI6ICVzJyAlIG9iaikKICAgICAgIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcwogICAgICBwaWNrbGVyLnNhdmVfcmVkdWNlKGRpbGwuZGlsbC5faW1wb3J0X21vZHVsZSwgKG9iai5fX25hbWVfXywpLCBvYmo9b2JqKQogICAgICAjIHB5bGludDogZW5hYmxlPXByb3RlY3RlZC1hY2Nlc3MKICAgICAgZGlsbC5kaWxsLmxvZy5pbmZvKCcjIE0yJykKCiAgIyBQaWNrbGUgbW9kdWxlIGRpY3Rpb25hcmllcyAoY29tbW9ubHkgZm91bmQgaW4gbGFtYmRhJ3MgZ2xvYmFscykKICAjIGJ5IHJlZmVyZW5jaW5nIHRoZWlyIG1vZHVsZS4KICBvbGRfc2F2ZV9tb2R1bGVfZGljdCA9IGRpbGwuZGlsbC5zYXZlX21vZHVsZV9kaWN0CiAga25vd25fbW9kdWxlX2RpY3RzID0ge30KCiAgQGRpbGwuZGlsbC5yZWdpc3RlcihkaWN0KQogIGRlZiBuZXdfc2F2ZV9tb2R1bGVfZGljdChwaWNrbGVyLCBvYmopOgogICAgb2JqX2lkID0gaWQob2JqKQogICAgaWYgbm90IGtub3duX21vZHVsZV9kaWN0cyBvciAnX19maWxlX18nIGluIG9iaiBvciAnX19wYWNrYWdlX18nIGluIG9iajoKICAgICAgaWYgb2JqX2lkIG5vdCBpbiBrbm93bl9tb2R1bGVfZGljdHM6CiAgICAgICAgZm9yIG0gaW4gc3lzLm1vZHVsZXMudmFsdWVzKCk6CiAgICAgICAgICB0cnk6CiAgICAgICAgICAgIGlmIChtCiAgICAgICAgICAgICAgICBhbmQgbS5fX25hbWVfXyAhPSAnX19tYWluX18nCiAgICAgICAgICAgICAgICBhbmQgaXNpbnN0YW5jZShtLCBkaWxsLmRpbGwuTW9kdWxlVHlwZSkpOgogICAgICAgICAgICAgIGQgPSBtLl9fZGljdF9fCiAgICAgICAgICAgICAga25vd25fbW9kdWxlX2RpY3RzW2lkKGQpXSA9IG0sIGQKICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICAgICAgICAgIyBTa2lwIG1vZHVsZXMgdGhhdCBkbyBub3QgaGF2ZSB0aGUgX19uYW1lX18gYXR0cmlidXRlLgogICAgICAgICAgICBwYXNzCiAgICBpZiBvYmpfaWQgaW4ga25vd25fbW9kdWxlX2RpY3RzIGFuZCBkaWxsLmRpbGwuaXNfZGlsbChwaWNrbGVyKToKICAgICAgbSA9IGtub3duX21vZHVsZV9kaWN0c1tvYmpfaWRdWzBdCiAgICAgIHRyeToKICAgICAgICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCiAgICAgICAgZGlsbC5kaWxsLl9pbXBvcnRfbW9kdWxlKG0uX19uYW1lX18pCiAgICAgICAgcmV0dXJuIHBpY2tsZXIuc2F2ZV9yZWR1Y2UoCiAgICAgICAgICAgIGdldGF0dHIsIChrbm93bl9tb2R1bGVfZGljdHNbb2JqX2lkXVswXSwgJ19fZGljdF9fJyksIG9iaj1vYmopCiAgICAgIGV4Y2VwdCAoSW1wb3J0RXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKICAgICAgICByZXR1cm4gb2xkX3NhdmVfbW9kdWxlX2RpY3QocGlja2xlciwgb2JqKQogICAgZWxzZToKICAgICAgcmV0dXJuIG9sZF9zYXZlX21vZHVsZV9kaWN0KHBpY2tsZXIsIG9iaikKICBkaWxsLmRpbGwuc2F2ZV9tb2R1bGVfZGljdCA9IG5ld19zYXZlX21vZHVsZV9kaWN0CgogIGRlZiBfbmVzdF9kaWxsX2xvZ2dpbmcoKToKICAgICIiIlByZWZpeCBhbGwgZGlsbCBsb2dnaW5nIHdpdGggaXRzIGRlcHRoIGluIHRoZSBjYWxsc3RhY2suCgogICAgVXNlZnVsIGZvciBkZWJ1Z2dpbmcgcGlja2xpbmcgb2YgZGVlcGx5IG5lc3RlZCBzdHJ1Y3R1cmVzLgogICAgIiIiCiAgICBvbGRfbG9nX2luZm8gPSBkaWxsLmRpbGwubG9nLmluZm8KCiAgICBkZWYgbmV3X2xvZ19pbmZvKG1zZywgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgb2xkX2xvZ19pbmZvKAogICAgICAgICAgKCcxIDIgMyA0IDUgNiA3IDggOSAwICcgKiAxMClbOmxlbih0cmFjZWJhY2suZXh0cmFjdF9zdGFjaygpKV0gKyBtc2csCiAgICAgICAgICAqYXJncywgKiprd2FyZ3MpCiAgICBkaWxsLmRpbGwubG9nLmluZm8gPSBuZXdfbG9nX2luZm8KCgojIFR1cm4gb2ZmIHZlcmJvc2UgbG9nZ2luZyBmcm9tIHRoZSBkaWxsIHBpY2tsZXIuCmxvZ2dpbmcuZ2V0TG9nZ2VyKCdkaWxsJykuc2V0TGV2ZWwobG9nZ2luZy5XQVJOKQoKCiMgVE9ETyhjY3kpOiBDdXJyZW50bHksIHRoZXJlIGFyZSBzdGlsbCBpbnN0YW5jZXMgb2YgcGlja2xlci5kdW1wcygpIGFuZAojIHBpY2tsZXIubG9hZHMoKSBiZWluZyB1c2VkIGZvciBkYXRhLCB3aGljaCByZXN1bHRzIGluIGFuIHVubmVjZXNzYXJ5IGJhc2U2NAojIGVuY29kaW5nLiAgVGhpcyBzaG91bGQgYmUgY2xlYW5lZCB1cC4KZGVmIGR1bXBzKG8sIGVuYWJsZV90cmFjZT1UcnVlKToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuIiIiCgogIHRyeToKICAgIHMgPSBkaWxsLmR1bXBzKG8pCiAgZXhjZXB0IEV4Y2VwdGlvbjogICAgICAjIHB5bGludDogZGlzYWJsZT1icm9hZC1leGNlcHQKICAgIGlmIGVuYWJsZV90cmFjZToKICAgICAgZGlsbC5kaWxsLl90cmFjZShUcnVlKSAgIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcwogICAgICBzID0gZGlsbC5kdW1wcyhvKQogICAgZWxzZToKICAgICAgcmFpc2UKICBmaW5hbGx5OgogICAgZGlsbC5kaWxsLl90cmFjZShGYWxzZSkgICMgcHlsaW50OiBkaXNhYmxlPXByb3RlY3RlZC1hY2Nlc3MKCiAgIyBDb21wcmVzcyBhcyBjb21wYWN0bHkgYXMgcG9zc2libGUgdG8gZGVjcmVhc2UgcGVhayBtZW1vcnkgdXNhZ2UgKG9mIG11bHRpcGxlCiAgIyBpbi1tZW1vcnkgY29waWVzKSBhbmQgZnJlZSB1cCBzb21lIHBvc3NpYmx5IGxhcmdlIGFuZCBuby1sb25nZXItbmVlZGVkCiAgIyBtZW1vcnkuCiAgYyA9IHpsaWIuY29tcHJlc3MocywgOSkKICBkZWwgcwoKICByZXR1cm4gYmFzZTY0LmI2NGVuY29kZShjKQoKCmRlZiBsb2FkcyhlbmNvZGVkLCBlbmFibGVfdHJhY2U9VHJ1ZSk6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLiIiIgoKICBjID0gYmFzZTY0LmI2NGRlY29kZShlbmNvZGVkKQoKICBzID0gemxpYi5kZWNvbXByZXNzKGMpCiAgZGVsIGMgICMgRnJlZSB1cCBzb21lIHBvc3NpYmx5IGxhcmdlIGFuZCBuby1sb25nZXItbmVlZGVkIG1lbW9yeS4KCiAgdHJ5OgogICAgcmV0dXJuIGRpbGwubG9hZHMocykKICBleGNlcHQgRXhjZXB0aW9uOiAgICAgICAgICAjIHB5bGludDogZGlzYWJsZT1icm9hZC1leGNlcHQKICAgIGlmIGVuYWJsZV90cmFjZToKICAgICAgZGlsbC5kaWxsLl90cmFjZShUcnVlKSAgICMgcHlsaW50OiBkaXNhYmxlPXByb3RlY3RlZC1hY2Nlc3MKICAgICAgcmV0dXJuIGRpbGwubG9hZHMocykKICAgIGVsc2U6CiAgICAgIHJhaXNlCiAgZmluYWxseToKICAgIGRpbGwuZGlsbC5fdHJhY2UoRmFsc2UpICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCgoKZGVmIGR1bXBfc2Vzc2lvbihmaWxlX3BhdGgpOgogICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgUGlja2xlIHRoZSBjdXJyZW50IHB5dGhvbiBzZXNzaW9uIHRvIGJlIHVzZWQgaW4gdGhlIHdvcmtlci4KCiAgTm90ZTogRHVlIHRvIHRoZSBpbmNvbnNpc3RlbmN5IGluIHRoZSBmaXJzdCBkdW1wIG9mIGRpbGwgZHVtcF9zZXNzaW9uIHdlCiAgY3JlYXRlIGFuZCBsb2FkIHRoZSBkdW1wIHR3aWNlIHRvIGhhdmUgY29uc2lzdGVudCByZXN1bHRzIGluIHRoZSB3b3JrZXIgYW5kCiAgdGhlIHJ1bm5pbmcgc2Vzc2lvbi4gQ2hlY2s6IGh0dHBzOi8vZ2l0aHViLmNvbS91cWZvdW5kYXRpb24vZGlsbC9pc3N1ZXMvMTk1CiAgIiIiCiAgZGlsbC5kdW1wX3Nlc3Npb24oZmlsZV9wYXRoKQogIGRpbGwubG9hZF9zZXNzaW9uKGZpbGVfcGF0aCkKICByZXR1cm4gZGlsbC5kdW1wX3Nlc3Npb24oZmlsZV9wYXRoKQoKCmRlZiBsb2FkX3Nlc3Npb24oZmlsZV9wYXRoKToKICByZXR1cm4gZGlsbC5sb2FkX3Nlc3Npb24oZmlsZV9wYXRoKQp9cmWCAAAoWB8AAABfbmVzdF9kaWxsX2xvZ2dpbmcubmV3X2xvZ19pbmZvWAMAAABkZWZLxUvJh1gUAAAAX25lc3RlZF90eXBlX3dyYXBwZXJYAwAAAGRlZktSS3aHWDMAAABfZmluZF9jb250YWluaW5nX2NsYXNzLl9maW5kX2NvbnRhaW5pbmdfY2xhc3NfaW5uZXJYAwAAAGRlZktES06HWAsAAABzYXZlX21vZHVsZVgDAAAAZGVmS5JLnIdYBQAAAGR1bXBzWAMAAABkZWZL00voh1gFAAAAbG9hZHNYAwAAAGRlZkvqS/yHWBIAAABfbmVzdF9kaWxsX2xvZ2dpbmdYAwAAAGRlZku+S8qHWBYAAABfZmluZF9jb250YWluaW5nX2NsYXNzWAMAAABkZWZLP0tQh1gMAAAAbG9hZF9zZXNzaW9uWAMAAABkZWZNDAFNDgGHWAwAAABkdW1wX3Nlc3Npb25YAwAAAGRlZkv+TQoBh1gUAAAAbmV3X3NhdmVfbW9kdWxlX2RpY3RYAwAAAGRlZkuiS7yHWBwAAABfbmVzdGVkX3R5cGVfd3JhcHBlci53cmFwcGVyWAMAAABkZWZLYEtzh1gSAAAAX3JlamVjdF9nZW5lcmF0b3JzWAMAAABkZWZLhUuHh1gQAAAAX2lzX25lc3RlZF9jbGFzc1gDAAAAZGVmSzdLPYd1fXJmggAAKFgLAAAAc2F2ZV9tb2R1bGVYHAAAAGFwYWNoZV9iZWFtLmludGVybmFsLnBpY2tsZXJyZ4IAAFgFAAAAZHVtcHNqZ4IAAFgFAAAAbG9hZHNqZ4IAAFgMAAAAbG9hZF9zZXNzaW9uameCAABYDAAAAGR1bXBfc2Vzc2lvbmpnggAAWBQAAABuZXdfc2F2ZV9tb2R1bGVfZGljdGpnggAAdWp9aQAAWBwAAABhcGFjaGVfYmVhbS5pbnRlcm5hbC5waWNrbGVycmiCAACFgXJpggAAfXJqggAAYnRya4IAAFUzYXBhY2hlX2JlYW0uaW8uZmxpbmsuZmxpbmtfc3RyZWFtaW5nX2ltcHVsc2Vfc291cmNlKFiUCgAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiIKQSBQVHJhbnNmb3JtIHRoYXQgcHJvdmlkZXMgYW4gdW5ib3VuZGVkLCBzdHJlYW1pbmcgc291cmNlIG9mIGVtcHR5IGJ5dGUgYXJyYXlzLgoKVGhpcyBjYW4gb25seSBiZSB1c2VkIHdpdGggdGhlIGZsaW5rIHJ1bm5lci4KIiIiCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQganNvbgoKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgUFRyYW5zZm9ybQpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBXaW5kb3dpbmcKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgcHZhbHVlCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cgaW1wb3J0IEdsb2JhbFdpbmRvd3MKCgpjbGFzcyBGbGlua1N0cmVhbWluZ0ltcHVsc2VTb3VyY2UoUFRyYW5zZm9ybSk6CiAgVVJOID0gImZsaW5rOnRyYW5zZm9ybTpzdHJlYW1pbmdfaW1wdWxzZTp2MSIKCiAgY29uZmlnID0ge30KCiAgZGVmIGV4cGFuZChzZWxmLCBwYmVnaW4pOgogICAgYXNzZXJ0IGlzaW5zdGFuY2UocGJlZ2luLCBwdmFsdWUuUEJlZ2luKSwgKAogICAgICAgICdJbnB1dCB0byB0cmFuc2Zvcm0gbXVzdCBiZSBhIFBCZWdpbiBidXQgZm91bmQgJXMnICUgcGJlZ2luKQogICAgcmV0dXJuIHB2YWx1ZS5QQ29sbGVjdGlvbihwYmVnaW4ucGlwZWxpbmUpCgogIGRlZiBnZXRfd2luZG93aW5nKHNlbGYsIGlucHV0cyk6CiAgICByZXR1cm4gV2luZG93aW5nKEdsb2JhbFdpbmRvd3MoKSkKCiAgZGVmIGluZmVyX291dHB1dF90eXBlKHNlbGYsIHVudXNlZF9pbnB1dF90eXBlKToKICAgIHJldHVybiBieXRlcwoKICBkZWYgdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoc2VsZiwgY29udGV4dCk6CiAgICBhc3NlcnQgaXNpbnN0YW5jZShzZWxmLCBGbGlua1N0cmVhbWluZ0ltcHVsc2VTb3VyY2UpLCBcCiAgICAgICJleHBlY3RlZCBpbnN0YW5jZSBvZiBTdHJlYW1pbmdJbXB1bHNlU291cmNlLCBidXQgZ290ICVzIiAlIHNlbGYuX19jbGFzc19fCiAgICByZXR1cm4gKHNlbGYuVVJOLCBqc29uLmR1bXBzKHNlbGYuY29uZmlnKSkKCiAgZGVmIHNldF9pbnRlcnZhbF9tcyhzZWxmLCBpbnRlcnZhbF9tcyk6CiAgICAiIiJTZXRzIHRoZSBpbnRlcnZhbCAoaW4gbWlsbGlzZWNvbmRzKSBiZXR3ZWVuIG1lc3NhZ2VzIGluIHRoZSBzdHJlYW0uCiAgICAiIiIKICAgIHNlbGYuY29uZmlnWyJpbnRlcnZhbF9tcyJdID0gaW50ZXJ2YWxfbXMKICAgIHJldHVybiBzZWxmCgogIGRlZiBzZXRfbWVzc2FnZV9jb3VudChzZWxmLCBtZXNzYWdlX2NvdW50KToKICAgICIiIklmIG5vbi16ZXJvLCB0aGUgc3RyZWFtIHdpbGwgcHJvZHVjZSBvbmx5IHRoaXMgbWFueSB0b3RhbCBtZXNzYWdlcy4KICAgIE90aGVyd2lzZSBwcm9kdWNlcyBhbiB1bmJvdW5kZWQgbnVtYmVyIG9mIG1lc3NhZ2VzLgogICAgIiIiCiAgICBzZWxmLmNvbmZpZ1sibWVzc2FnZV9jb3VudCJdID0gbWVzc2FnZV9jb3VudAogICAgcmV0dXJuIHNlbGYKCiAgIyBweWxpbnQ6IGRpc2FibGU9bm8tc2VsZi1hcmd1bWVudAogIEBQVHJhbnNmb3JtLnJlZ2lzdGVyX3VybigiZmxpbms6dHJhbnNmb3JtOnN0cmVhbWluZ19pbXB1bHNlOnYxIiwgTm9uZSkKICBkZWYgZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcihzcGVjX3BhcmFtZXRlciwgX3VudXNlZF9jb250ZXh0KToKICAgIGNvbmZpZyA9IGpzb24ubG9hZHMoc3BlY19wYXJhbWV0ZXIpCiAgICBpbnN0YW5jZSA9IEZsaW5rU3RyZWFtaW5nSW1wdWxzZVNvdXJjZSgpCiAgICBpZiAiaW50ZXJ2YWxfbXMiIGluIGNvbmZpZzoKICAgICAgaW5zdGFuY2Uuc2V0X2ludGVydmFsX21zKGNvbmZpZ1siaW50ZXJ2YWxfbXMiXSkKICAgIGlmICJtZXNzYWdlX2NvdW50IiBpbiBjb25maWc6CiAgICAgIGluc3RhbmNlLnNldF9tZXNzYWdlX2NvdW50KGNvbmZpZ1sibWVzc2FnZV9jb3VudCJdKQoKICAgIHJldHVybiBpbnN0YW5jZQp9cmyCAAAoWC0AAABGbGlua1N0cmVhbWluZ0ltcHVsc2VTb3VyY2Uuc2V0X21lc3NhZ2VfY291bnRYAwAAAGRlZks8S0KHWCsAAABGbGlua1N0cmVhbWluZ0ltcHVsc2VTb3VyY2Uuc2V0X2ludGVydmFsX21zWAMAAABkZWZLNks7h1gpAAAARmxpbmtTdHJlYW1pbmdJbXB1bHNlU291cmNlLmdldF93aW5kb3dpbmdYAwAAAGRlZksrSy2HWDUAAABGbGlua1N0cmVhbWluZ0ltcHVsc2VTb3VyY2UuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlclgDAAAAZGVmS0RLTodYMwAAAEZsaW5rU3RyZWFtaW5nSW1wdWxzZVNvdXJjZS50b19ydW5uZXJfYXBpX3BhcmFtZXRlclgDAAAAZGVmSzFLNYdYGwAAAEZsaW5rU3RyZWFtaW5nSW1wdWxzZVNvdXJjZVgFAAAAY2xhc3NLIUtOh1gtAAAARmxpbmtTdHJlYW1pbmdJbXB1bHNlU291cmNlLmluZmVyX291dHB1dF90eXBlWAMAAABkZWZLLkswh1giAAAARmxpbmtTdHJlYW1pbmdJbXB1bHNlU291cmNlLmV4cGFuZFgDAAAAZGVmSyZLKod1fXJtggAAKFgtAAAARmxpbmtTdHJlYW1pbmdJbXB1bHNlU291cmNlLnNldF9tZXNzYWdlX2NvdW50ap1ZAABYKwAAAEZsaW5rU3RyZWFtaW5nSW1wdWxzZVNvdXJjZS5zZXRfaW50ZXJ2YWxfbXNqnVkAAFgpAAAARmxpbmtTdHJlYW1pbmdJbXB1bHNlU291cmNlLmdldF93aW5kb3dpbmdqnVkAAFg1AAAARmxpbmtTdHJlYW1pbmdJbXB1bHNlU291cmNlLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXJqnVkAAFgzAAAARmxpbmtTdHJlYW1pbmdJbXB1bHNlU291cmNlLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyap1ZAABYGwAAAEZsaW5rU3RyZWFtaW5nSW1wdWxzZVNvdXJjZWqdWQAAWC0AAABGbGlua1N0cmVhbWluZ0ltcHVsc2VTb3VyY2UuaW5mZXJfb3V0cHV0X3R5cGVqnVkAAFgiAAAARmxpbmtTdHJlYW1pbmdJbXB1bHNlU291cmNlLmV4cGFuZGqdWQAAdWp9aQAAWDMAAABhcGFjaGVfYmVhbS5pby5mbGluay5mbGlua19zdHJlYW1pbmdfaW1wdWxzZV9zb3VyY2VyboIAAIWBcm+CAAB9cnCCAABidFURYXBhY2hlX2JlYW0uZXJyb3IoWCEGAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIlB5dGhvbiBEYXRhZmxvdyBlcnJvciBjbGFzc2VzLiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCgpjbGFzcyBCZWFtRXJyb3IoRXhjZXB0aW9uKToKICAiIiJCYXNlIGNsYXNzIGZvciBhbGwgQmVhbSBlcnJvcnMuIiIiCgoKY2xhc3MgUGlwZWxpbmVFcnJvcihCZWFtRXJyb3IpOgogICIiIkFuIGVycm9yIGluIHRoZSBwaXBlbGluZSBvYmplY3QgKGUuZy4gYSBQVmFsdWUgbm90IGxpbmtlZCB0byBpdCkuIiIiCgoKY2xhc3MgUFZhbHVlRXJyb3IoQmVhbUVycm9yKToKICAiIiJBbiBlcnJvciByZWxhdGVkIHRvIGEgUFZhbHVlIG9iamVjdCAoZS5nLiB2YWx1ZSBpcyBub3QgY29tcHV0ZWQpLiIiIgoKCmNsYXNzIFJ1bm5lckVycm9yKEJlYW1FcnJvcik6CiAgIiIiQW4gZXJyb3IgcmVsYXRlZCB0byBhIFJ1bm5lciBvYmplY3QgKGUuZy4gY2Fubm90IGZpbmQgYSBydW5uZXIgdG8gcnVuKS4iIiIKCgpjbGFzcyBSdW50aW1lVmFsdWVQcm92aWRlckVycm9yKFJ1bnRpbWVFcnJvcik6CiAgIiIiQW4gZXJyb3IgcmVsYXRlZCB0byBhIFZhbHVlUHJvdmlkZXIgb2JqZWN0IHJhaXNlZCBkdXJpbmcgcnVudGltZS4iIiIKCgpjbGFzcyBTaWRlSW5wdXRFcnJvcihCZWFtRXJyb3IpOgogICIiIkFuIGVycm9yIHJlbGF0ZWQgdG8gYSBzaWRlIGlucHV0IHRvIGEgcGFyYWxsZWwgRG8gb3BlcmF0aW9uLiIiIgoKCmNsYXNzIFRyYW5zZm9ybUVycm9yKEJlYW1FcnJvcik6CiAgIiIiQW4gZXJyb3IgcmVsYXRlZCB0byBhIFBUcmFuc2Zvcm0gb2JqZWN0LiIiIgp9cnGCAAAoWA0AAABQaXBlbGluZUVycm9yWAUAAABjbGFzc0sbSx2HWBkAAABSdW50aW1lVmFsdWVQcm92aWRlckVycm9yWAUAAABjbGFzc0snSymHWAsAAABSdW5uZXJFcnJvclgFAAAAY2xhc3NLI0slh1gOAAAAU2lkZUlucHV0RXJyb3JYBQAAAGNsYXNzSytLLYdYDgAAAFRyYW5zZm9ybUVycm9yWAUAAABjbGFzc0svSzGHWAsAAABQVmFsdWVFcnJvclgFAAAAY2xhc3NLH0shh1gJAAAAQmVhbUVycm9yWAUAAABjbGFzc0sXSxmHdX1ycoIAAChYDQAAAFBpcGVsaW5lRXJyb3Jyc4IAAFgRAAAAYXBhY2hlX2JlYW0uZXJyb3JydIIAAFgZAAAAUnVudGltZVZhbHVlUHJvdmlkZXJFcnJvcnJ1ggAAanSCAABYCwAAAFJ1bm5lckVycm9ycnaCAABqdIIAAFgOAAAAU2lkZUlucHV0RXJyb3Jyd4IAAGp0ggAAWA4AAABUcmFuc2Zvcm1FcnJvcnJ4ggAAanSCAABYCwAAAFBWYWx1ZUVycm9ycnmCAABqdIIAAFgJAAAAQmVhbUVycm9ycnqCAABqdIIAAHVqfWkAAFgRAAAAYXBhY2hlX2JlYW0uZXJyb3Jye4IAAIWBcnyCAAB9cn2CAABidHJ+ggAAVQtfX2J1aWx0aW5fX3J/ggAAiVUdYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3dygIIAAChYdkUAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiV2luZG93aW5nIGNvbmNlcHRzLgoKQSBXaW5kb3dJbnRvIHRyYW5zZm9ybSBsb2dpY2FsbHkgZGl2aWRlcyB1cCBvciBncm91cHMgdGhlIGVsZW1lbnRzIG9mIGEKUENvbGxlY3Rpb24gaW50byBmaW5pdGUgd2luZG93cyBhY2NvcmRpbmcgdG8gYSB3aW5kb3dpbmcgZnVuY3Rpb24gKGRlcml2ZWQgZnJvbQpXaW5kb3dGbikuCgpUaGUgb3V0cHV0IG9mIFdpbmRvd0ludG8gY29udGFpbnMgdGhlIHNhbWUgZWxlbWVudHMgYXMgaW5wdXQsIGJ1dCB0aGV5IGhhdmUgYmVlbgpsb2dpY2FsbHkgYXNzaWduZWQgdG8gd2luZG93cy4gVGhlIG5leHQgR3JvdXBCeUtleShzKSB0cmFuc2Zvcm1zLCBpbmNsdWRpbmcgb25lCndpdGhpbiBhIGNvbXBvc2l0ZSB0cmFuc2Zvcm0sIHdpbGwgZ3JvdXAgYnkgdGhlIGNvbWJpbmF0aW9uIG9mIGtleXMgYW5kIHdpbmRvd3MuCgpXaW5kb3dpbmcgYSBQQ29sbGVjdGlvbiBhbGxvd3MgY2h1bmtzIG9mIGl0IHRvIGJlIHByb2Nlc3NlZCBpbmRpdmlkdWFsbHksIGJlZm9yZQp0aGUgZW50aXJlIFBDb2xsZWN0aW9uIGlzIGF2YWlsYWJsZS4gIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgZm9yClBDb2xsZWN0aW9uKHMpIHdpdGggdW5ib3VuZGVkIHNpemUsIHNpbmNlIHRoZSBmdWxsIFBDb2xsZWN0aW9uIGlzIG5ldmVyCmF2YWlsYWJsZSBhdCBvbmNlLCBzaW5jZSBtb3JlIGRhdGEgaXMgY29udGludWFsbHkgYXJyaXZpbmcuIEZvciBQQ29sbGVjdGlvbihzKQp3aXRoIGEgYm91bmRlZCBzaXplIChha2EuIGNvbnZlbnRpb25hbCBiYXRjaCBtb2RlKSwgYnkgZGVmYXVsdCwgYWxsIGRhdGEgaXMKaW1wbGljaXRseSBpbiBhIHNpbmdsZSB3aW5kb3cgKHNlZSBHbG9iYWxXaW5kb3dzKSwgdW5sZXNzIFdpbmRvd0ludG8gaXMKYXBwbGllZC4KCkZvciBleGFtcGxlLCBhIHNpbXBsZSBmb3JtIG9mIHdpbmRvd2luZyBkaXZpZGVzIHVwIHRoZSBkYXRhIGludG8gZml4ZWQtd2lkdGgKdGltZSBpbnRlcnZhbHMsIHVzaW5nIEZpeGVkV2luZG93cy4KClNlY29uZHMgYXJlIHVzZWQgYXMgdGhlIHRpbWUgdW5pdCBmb3IgdGhlIGJ1aWx0LWluIHdpbmRvd2luZyBwcmltaXRpdmVzIGhlcmUuCkludGVnZXIgb3IgZmxvYXRpbmcgcG9pbnQgc2Vjb25kcyBjYW4gYmUgcGFzc2VkIHRvIHRoZXNlIHByaW1pdGl2ZXMuCgpJbnRlcm5hbGx5LCBzZWNvbmRzLCB3aXRoIG1pY3Jvc2Vjb25kIGdyYW51bGFyaXR5LCBhcmUgc3RvcmVkIGFzCnRpbWV1dGlsLlRpbWVzdGFtcCBhbmQgdGltZXV0aWwuRHVyYXRpb24gb2JqZWN0cy4gVGhpcyBpcyBkb25lIHRvIGF2b2lkCnByZWNpc2lvbiBlcnJvcnMgdGhhdCB3b3VsZCBvY2N1ciB3aXRoIGZsb2F0aW5nIHBvaW50IHJlcHJlc2VudGF0aW9ucy4KCkN1c3RvbSB3aW5kb3dpbmcgZnVuY3Rpb24gY2xhc3NlcyBjYW4gYmUgY3JlYXRlZCwgYnkgc3ViY2xhc3NpbmcgZnJvbQpXaW5kb3dGbi4KIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGFiYwpmcm9tIGJ1aWx0aW5zIGltcG9ydCBvYmplY3QKZnJvbSBidWlsdGlucyBpbXBvcnQgcmFuZ2UKZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHRvdGFsX29yZGVyaW5nCgpmcm9tIGZ1dHVyZS51dGlscyBpbXBvcnQgd2l0aF9tZXRhY2xhc3MKZnJvbSBnb29nbGUucHJvdG9idWYgaW1wb3J0IGR1cmF0aW9uX3BiMgpmcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgdGltZXN0YW1wX3BiMgoKZnJvbSBhcGFjaGVfYmVhbS5jb2RlcnMgaW1wb3J0IGNvZGVycwpmcm9tIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5IGltcG9ydCBjb21tb25fdXJucwpmcm9tIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5IGltcG9ydCBweXRob25fdXJucwpmcm9tIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaSBpbXBvcnQgYmVhbV9ydW5uZXJfYXBpX3BiMgpmcm9tIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaSBpbXBvcnQgc3RhbmRhcmRfd2luZG93X2Zuc19wYjIKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCB0aW1ldXRpbApmcm9tIGFwYWNoZV9iZWFtLnV0aWxzIGltcG9ydCBwcm90b191dGlscwpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzIGltcG9ydCB1cm5zCmZyb20gYXBhY2hlX2JlYW0udXRpbHMgaW1wb3J0IHdpbmRvd2VkX3ZhbHVlCmZyb20gYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wIGltcG9ydCBNSU5fVElNRVNUQU1QCmZyb20gYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wIGltcG9ydCBEdXJhdGlvbgpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzLnRpbWVzdGFtcCBpbXBvcnQgVGltZXN0YW1wCmZyb20gYXBhY2hlX2JlYW0udXRpbHMud2luZG93ZWRfdmFsdWUgaW1wb3J0IFdpbmRvd2VkVmFsdWUKCl9fYWxsX18gPSBbCiAgICAnVGltZXN0YW1wQ29tYmluZXInLAogICAgJ1dpbmRvd0ZuJywKICAgICdCb3VuZGVkV2luZG93JywKICAgICdJbnRlcnZhbFdpbmRvdycsCiAgICAnVGltZXN0YW1wZWRWYWx1ZScsCiAgICAnR2xvYmFsV2luZG93JywKICAgICdOb25NZXJnaW5nV2luZG93Rm4nLAogICAgJ0dsb2JhbFdpbmRvd3MnLAogICAgJ0ZpeGVkV2luZG93cycsCiAgICAnU2xpZGluZ1dpbmRvd3MnLAogICAgJ1Nlc3Npb25zJywKICAgIF0KCgojIFRPRE8oY2N5KTogcmV2aXNpdCBuYW1pbmcgYW5kIHNlbWFudGljcyBvbmNlIEphdmEgQXBhY2hlIEJlYW0gZmluYWxpemVzIHRoZWlyCiMgYmVoYXZpb3IuCmNsYXNzIFRpbWVzdGFtcENvbWJpbmVyKG9iamVjdCk6CiAgIiIiRGV0ZXJtaW5lcyBob3cgb3V0cHV0IHRpbWVzdGFtcHMgb2YgZ3JvdXBpbmcgb3BlcmF0aW9ucyBhcmUgYXNzaWduZWQuIiIiCgogIE9VVFBVVF9BVF9FT1cgPSBiZWFtX3J1bm5lcl9hcGlfcGIyLk91dHB1dFRpbWUuRU5EX09GX1dJTkRPVwogIE9VVFBVVF9BVF9FQVJMSUVTVCA9IGJlYW1fcnVubmVyX2FwaV9wYjIuT3V0cHV0VGltZS5FQVJMSUVTVF9JTl9QQU5FCiAgT1VUUFVUX0FUX0xBVEVTVCA9IGJlYW1fcnVubmVyX2FwaV9wYjIuT3V0cHV0VGltZS5MQVRFU1RfSU5fUEFORQogICMgVE9ETyhyb2JlcnR3Yik6IEFkZCB0aGlzIHRvIHRoZSBydW5uZXIgQVBJIG9yIHJlbW92ZSBpdC4KICBPVVRQVVRfQVRfRUFSTElFU1RfVFJBTlNGT1JNRUQgPSAnT1VUUFVUX0FUX0VBUkxJRVNUX1RSQU5TRk9STUVEJwoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGdldF9pbXBsKHRpbWVzdGFtcF9jb21iaW5lciwgd2luZG93X2ZuKToKICAgIGlmIHRpbWVzdGFtcF9jb21iaW5lciA9PSBUaW1lc3RhbXBDb21iaW5lci5PVVRQVVRfQVRfRU9XOgogICAgICByZXR1cm4gdGltZXV0aWwuT3V0cHV0QXRFbmRPZldpbmRvd0ltcGwoKQogICAgZWxpZiB0aW1lc3RhbXBfY29tYmluZXIgPT0gVGltZXN0YW1wQ29tYmluZXIuT1VUUFVUX0FUX0VBUkxJRVNUOgogICAgICByZXR1cm4gdGltZXV0aWwuT3V0cHV0QXRFYXJsaWVzdElucHV0VGltZXN0YW1wSW1wbCgpCiAgICBlbGlmIHRpbWVzdGFtcF9jb21iaW5lciA9PSBUaW1lc3RhbXBDb21iaW5lci5PVVRQVVRfQVRfTEFURVNUOgogICAgICByZXR1cm4gdGltZXV0aWwuT3V0cHV0QXRMYXRlc3RJbnB1dFRpbWVzdGFtcEltcGwoKQogICAgZWxpZiB0aW1lc3RhbXBfY29tYmluZXIgPT0gVGltZXN0YW1wQ29tYmluZXIuT1VUUFVUX0FUX0VBUkxJRVNUX1RSQU5TRk9STUVEOgogICAgICByZXR1cm4gdGltZXV0aWwuT3V0cHV0QXRFYXJsaWVzdFRyYW5zZm9ybWVkSW5wdXRUaW1lc3RhbXBJbXBsKHdpbmRvd19mbikKICAgIGVsc2U6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgVGltZXN0YW1wQ29tYmluZXI6ICVzLicgJSB0aW1lc3RhbXBfY29tYmluZXIpCgoKY2xhc3MgV2luZG93Rm4od2l0aF9tZXRhY2xhc3MoYWJjLkFCQ01ldGEsIHVybnMuUnVubmVyQXBpRm4pKToKICAiIiJBbiBhYnN0cmFjdCB3aW5kb3dpbmcgZnVuY3Rpb24gZGVmaW5pbmcgYSBiYXNpYyBhc3NpZ24gYW5kIG1lcmdlLiIiIgoKICBjbGFzcyBBc3NpZ25Db250ZXh0KG9iamVjdCk6CiAgICAiIiJDb250ZXh0IHBhc3NlZCB0byBXaW5kb3dGbi5hc3NpZ24oKS4iIiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgdGltZXN0YW1wLCBlbGVtZW50PU5vbmUsIHdpbmRvdz1Ob25lKToKICAgICAgc2VsZi50aW1lc3RhbXAgPSBUaW1lc3RhbXAub2YodGltZXN0YW1wKQogICAgICBzZWxmLmVsZW1lbnQgPSBlbGVtZW50CiAgICAgIHNlbGYud2luZG93ID0gd2luZG93CgogIEBhYmMuYWJzdHJhY3RtZXRob2QKICBkZWYgYXNzaWduKHNlbGYsIGFzc2lnbl9jb250ZXh0KToKICAgICIiIkFzc29jaWF0ZXMgd2luZG93cyB0byBhbiBlbGVtZW50LgoKICAgIEFyZ3VtZW50czoKICAgICAgYXNzaWduX2NvbnRleHQ6IEluc3RhbmNlIG9mIEFzc2lnbkNvbnRleHQuCgogICAgUmV0dXJuczoKICAgICAgQW4gaXRlcmFibGUgb2YgQm91bmRlZFdpbmRvdy4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBjbGFzcyBNZXJnZUNvbnRleHQob2JqZWN0KToKICAgICIiIkNvbnRleHQgcGFzc2VkIHRvIFdpbmRvd0ZuLm1lcmdlKCkgdG8gcGVyZm9ybSBtZXJnaW5nLCBpZiBhbnkuIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHdpbmRvd3MpOgogICAgICBzZWxmLndpbmRvd3MgPSBsaXN0KHdpbmRvd3MpCgogICAgZGVmIG1lcmdlKHNlbGYsIHRvX2JlX21lcmdlZCwgbWVyZ2VfcmVzdWx0KToKICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgZGVmIG1lcmdlKHNlbGYsIG1lcmdlX2NvbnRleHQpOgogICAgIiIiUmV0dXJucyBhIHdpbmRvdyB0aGF0IGlzIHRoZSByZXN1bHQgb2YgbWVyZ2luZyBhIHNldCBvZiB3aW5kb3dzLiIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgaXNfbWVyZ2luZyhzZWxmKToKICAgICIiIlJldHVybnMgd2hldGhlciB0aGlzIFdpbmRvd0ZuIG1lcmdlcyB3aW5kb3dzLiIiIgogICAgcmV0dXJuIFRydWUKCiAgQGFiYy5hYnN0cmFjdG1ldGhvZAogIGRlZiBnZXRfd2luZG93X2NvZGVyKHNlbGYpOgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgZ2V0X3RyYW5zZm9ybWVkX291dHB1dF90aW1lKHNlbGYsIHdpbmRvdywgaW5wdXRfdGltZXN0YW1wKTogICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1hcmd1bWVudAogICAgIiIiR2l2ZW4gaW5wdXQgdGltZSBhbmQgb3V0cHV0IHdpbmRvdywgcmV0dXJucyBvdXRwdXQgdGltZSBmb3Igd2luZG93LgoKICAgIElmIFRpbWVzdGFtcENvbWJpbmVyLk9VVFBVVF9BVF9FQVJMSUVTVF9UUkFOU0ZPUk1FRCBpcyB1c2VkIGluIHRoZQogICAgV2luZG93aW5nLCB0aGUgb3V0cHV0IHRpbWVzdGFtcCBmb3IgdGhlIGdpdmVuIHdpbmRvdyB3aWxsIGJlIHRoZSBlYXJsaWVzdAogICAgb2YgdGhlIHRpbWVzdGFtcHMgcmV0dXJuZWQgYnkgZ2V0X3RyYW5zZm9ybWVkX291dHB1dF90aW1lKCkgZm9yIGVsZW1lbnRzCiAgICBvZiB0aGUgd2luZG93LgoKICAgIEFyZ3VtZW50czoKICAgICAgd2luZG93OiBPdXRwdXQgd2luZG93IG9mIGVsZW1lbnQuCiAgICAgIGlucHV0X3RpbWVzdGFtcDogSW5wdXQgdGltZXN0YW1wIG9mIGVsZW1lbnQgYXMgYSB0aW1ldXRpbC5UaW1lc3RhbXAKICAgICAgICBvYmplY3QuCgogICAgUmV0dXJuczoKICAgICAgVHJhbnNmb3JtZWQgdGltZXN0YW1wLgogICAgIiIiCiAgICAjIEJ5IGRlZmF1bHQsIGp1c3QgcmV0dXJuIHRoZSBpbnB1dCB0aW1lc3RhbXAuCiAgICByZXR1cm4gaW5wdXRfdGltZXN0YW1wCgogIHVybnMuUnVubmVyQXBpRm4ucmVnaXN0ZXJfcGlja2xlX3VybihweXRob25fdXJucy5QSUNLTEVEX1dJTkRPV0ZOKQoKCmNsYXNzIEJvdW5kZWRXaW5kb3cob2JqZWN0KToKICAiIiJBIHdpbmRvdyBmb3IgdGltZXN0YW1wcyBpbiByYW5nZSAoLWluZmluaXR5LCBlbmQpLgoKICBBdHRyaWJ1dGVzOgogICAgZW5kOiBFbmQgb2Ygd2luZG93LgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgZW5kKToKICAgIHNlbGYuZW5kID0gVGltZXN0YW1wLm9mKGVuZCkKCiAgZGVmIG1heF90aW1lc3RhbXAoc2VsZik6CiAgICByZXR1cm4gc2VsZi5lbmQucHJlZGVjZXNzb3IoKQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CiAgICAjICBPcmRlciBmaXJzdCBieSBlbmRwb2ludCwgdGhlbiBhcmJpdHJhcmlseQogICAgcmV0dXJuIHNlbGYuZW5kICE9IG90aGVyLmVuZCBvciBoYXNoKHNlbGYpICE9IGhhc2gob3RoZXIpCgogIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgogICAgaWYgc2VsZi5lbmQgIT0gb3RoZXIuZW5kOgogICAgICByZXR1cm4gc2VsZi5lbmQgPCBvdGhlci5lbmQKICAgIHJldHVybiBoYXNoKHNlbGYpIDwgaGFzaChvdGhlcikKCiAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6CiAgICBpZiBzZWxmLmVuZCAhPSBvdGhlci5lbmQ6CiAgICAgIHJldHVybiBzZWxmLmVuZCA8PSBvdGhlci5lbmQKICAgIHJldHVybiBoYXNoKHNlbGYpIDw9IGhhc2gob3RoZXIpCgogIGRlZiBfX2d0X18oc2VsZiwgb3RoZXIpOgogICAgaWYgc2VsZi5lbmQgIT0gb3RoZXIuZW5kOgogICAgICByZXR1cm4gc2VsZi5lbmQgPiBvdGhlci5lbmQKICAgIHJldHVybiBoYXNoKHNlbGYpID4gaGFzaChvdGhlcikKCiAgZGVmIF9fZ2VfXyhzZWxmLCBvdGhlcik6CiAgICBpZiBzZWxmLmVuZCAhPSBvdGhlci5lbmQ6CiAgICAgIHJldHVybiBzZWxmLmVuZCA+PSBvdGhlci5lbmQKICAgIHJldHVybiBoYXNoKHNlbGYpID49IGhhc2gob3RoZXIpCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICdbPywgJXMpJyAlIGZsb2F0KHNlbGYuZW5kKQoKCkB0b3RhbF9vcmRlcmluZwpjbGFzcyBJbnRlcnZhbFdpbmRvdyh3aW5kb3dlZF92YWx1ZS5fSW50ZXJ2YWxXaW5kb3dCYXNlLCBCb3VuZGVkV2luZG93KToKICAiIiJBIHdpbmRvdyBmb3IgdGltZXN0YW1wcyBpbiByYW5nZSBbc3RhcnQsIGVuZCkuCgogIEF0dHJpYnV0ZXM6CiAgICBzdGFydDogU3RhcnQgb2Ygd2luZG93IGFzIHNlY29uZHMgc2luY2UgVW5peCBlcG9jaC4KICAgIGVuZDogRW5kIG9mIHdpbmRvdyBhcyBzZWNvbmRzIHNpbmNlIFVuaXggZXBvY2guCiAgIiIiCiAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CiAgICBpZiBzZWxmLmVuZCAhPSBvdGhlci5lbmQ6CiAgICAgIHJldHVybiBzZWxmLmVuZCA8IG90aGVyLmVuZAogICAgcmV0dXJuIGhhc2goc2VsZikgPCBoYXNoKG90aGVyKQoKICBkZWYgaW50ZXJzZWN0cyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gb3RoZXIuc3RhcnQgPCBzZWxmLmVuZCBvciBzZWxmLnN0YXJ0IDwgb3RoZXIuZW5kCgogIGRlZiB1bmlvbihzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gSW50ZXJ2YWxXaW5kb3coCiAgICAgICAgbWluKHNlbGYuc3RhcnQsIG90aGVyLnN0YXJ0KSwgbWF4KHNlbGYuZW5kLCBvdGhlci5lbmQpKQoKCkB0b3RhbF9vcmRlcmluZwpjbGFzcyBUaW1lc3RhbXBlZFZhbHVlKG9iamVjdCk6CiAgIiIiQSB0aW1lc3RhbXBlZCB2YWx1ZSBoYXZpbmcgYSB2YWx1ZSBhbmQgYSB0aW1lc3RhbXAuCgogIEF0dHJpYnV0ZXM6CiAgICB2YWx1ZTogVGhlIHVuZGVybHlpbmcgdmFsdWUuCiAgICB0aW1lc3RhbXA6IFRpbWVzdGFtcCBhc3NvY2lhdGVkIHdpdGggdGhlIHZhbHVlIGFzIHNlY29uZHMgc2luY2UgVW5peCBlcG9jaC4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlLCB0aW1lc3RhbXApOgogICAgc2VsZi52YWx1ZSA9IHZhbHVlCiAgICBzZWxmLnRpbWVzdGFtcCA9IFRpbWVzdGFtcC5vZih0aW1lc3RhbXApCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuICh0eXBlKHNlbGYpID09IHR5cGUob3RoZXIpCiAgICAgICAgICAgIGFuZCBzZWxmLnZhbHVlID09IG90aGVyLnZhbHVlCiAgICAgICAgICAgIGFuZCBzZWxmLnRpbWVzdGFtcCA9PSBvdGhlci50aW1lc3RhbXApCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKChzZWxmLnZhbHVlLCBzZWxmLnRpbWVzdGFtcCkpCgogIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuIG5vdCBzZWxmID09IG90aGVyCgogIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgogICAgaWYgdHlwZShzZWxmKSAhPSB0eXBlKG90aGVyKToKICAgICAgcmV0dXJuIHR5cGUoc2VsZikuX19uYW1lX18gPCB0eXBlKG90aGVyKS5fX25hbWVfXwogICAgaWYgc2VsZi52YWx1ZSAhPSBvdGhlci52YWx1ZToKICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPCBvdGhlci52YWx1ZQogICAgcmV0dXJuIHNlbGYudGltZXN0YW1wIDwgb3RoZXIudGltZXN0YW1wCgoKY2xhc3MgR2xvYmFsV2luZG93KEJvdW5kZWRXaW5kb3cpOgogICIiIlRoZSBkZWZhdWx0IHdpbmRvdyBpbnRvIHdoaWNoIGFsbCBkYXRhIGlzIHBsYWNlZCAodmlhIEdsb2JhbFdpbmRvd3MpLiIiIgogIF9pbnN0YW5jZSA9IE5vbmUKCiAgZGVmIF9fbmV3X18oY2xzKToKICAgIGlmIGNscy5faW5zdGFuY2UgaXMgTm9uZToKICAgICAgY2xzLl9pbnN0YW5jZSA9IHN1cGVyKEdsb2JhbFdpbmRvdywgY2xzKS5fX25ld19fKGNscykKICAgIHJldHVybiBjbHMuX2luc3RhbmNlCgogIGRlZiBfX2luaXRfXyhzZWxmKToKICAgIHN1cGVyKEdsb2JhbFdpbmRvdywgc2VsZikuX19pbml0X18oR2xvYmFsV2luZG93Ll9nZXRUaW1lc3RhbXBGcm9tUHJvdG8oKSkKICAgIHNlbGYuc3RhcnQgPSBNSU5fVElNRVNUQU1QCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnR2xvYmFsV2luZG93JwoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaCh0eXBlKHNlbGYpKQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgICMgR2xvYmFsIHdpbmRvd3MgYXJlIGFsd2F5cyBhbmQgb25seSBlcXVhbCB0byBlYWNoIG90aGVyLgogICAgcmV0dXJuIHNlbGYgaXMgb3RoZXIgb3IgdHlwZShzZWxmKSBpcyB0eXBlKG90aGVyKQoKICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgoKICBAc3RhdGljbWV0aG9kCiAgZGVmIF9nZXRUaW1lc3RhbXBGcm9tUHJvdG8oKToKICAgIHRzX21pbGxpcyA9IGludCgKICAgICAgICBjb21tb25fdXJucy5jb25zdGFudHMuR0xPQkFMX1dJTkRPV19NQVhfVElNRVNUQU1QX01JTExJUy5jb25zdGFudCkKICAgIHJldHVybiBUaW1lc3RhbXAobWljcm9zPXRzX21pbGxpcyoxMDAwKQoKCmNsYXNzIE5vbk1lcmdpbmdXaW5kb3dGbihXaW5kb3dGbik6CgogIGRlZiBpc19tZXJnaW5nKHNlbGYpOgogICAgcmV0dXJuIEZhbHNlCgogIGRlZiBtZXJnZShzZWxmLCBtZXJnZV9jb250ZXh0KToKICAgIHBhc3MgICMgTm8gbWVyZ2luZy4KCgpjbGFzcyBHbG9iYWxXaW5kb3dzKE5vbk1lcmdpbmdXaW5kb3dGbik6CiAgIiIiQSB3aW5kb3dpbmcgZnVuY3Rpb24gdGhhdCBhc3NpZ25zIGV2ZXJ5dGhpbmcgdG8gb25lIGdsb2JhbCB3aW5kb3cuIiIiCgogIEBjbGFzc21ldGhvZAogIGRlZiB3aW5kb3dlZF92YWx1ZShjbHMsIHZhbHVlLCB0aW1lc3RhbXA9TUlOX1RJTUVTVEFNUCk6CiAgICByZXR1cm4gV2luZG93ZWRWYWx1ZSh2YWx1ZSwgdGltZXN0YW1wLCAoR2xvYmFsV2luZG93KCksKSkKCiAgZGVmIGFzc2lnbihzZWxmLCBhc3NpZ25fY29udGV4dCk6CiAgICByZXR1cm4gW0dsb2JhbFdpbmRvdygpXQoKICBkZWYgZ2V0X3dpbmRvd19jb2RlcihzZWxmKToKICAgIHJldHVybiBjb2RlcnMuR2xvYmFsV2luZG93Q29kZXIoKQoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaCh0eXBlKHNlbGYpKQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgICMgR2xvYmFsIHdpbmRvd2ZuIGlzIGFsd2F5cyBhbmQgb25seSBlcXVhbCB0byBlYWNoIG90aGVyLgogICAgcmV0dXJuIHNlbGYgaXMgb3RoZXIgb3IgdHlwZShzZWxmKSBpcyB0eXBlKG90aGVyKQoKICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgoKICBkZWYgdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoc2VsZiwgY29udGV4dCk6CiAgICByZXR1cm4gY29tbW9uX3VybnMuZ2xvYmFsX3dpbmRvd3MudXJuLCBOb25lCgogIEB1cm5zLlJ1bm5lckFwaUZuLnJlZ2lzdGVyX3Vybihjb21tb25fdXJucy5nbG9iYWxfd2luZG93cy51cm4sIE5vbmUpCiAgZGVmIGZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXIodW51c2VkX2ZuX3BhcmFtZXRlciwgdW51c2VkX2NvbnRleHQpOgogICAgcmV0dXJuIEdsb2JhbFdpbmRvd3MoKQoKCmNsYXNzIEZpeGVkV2luZG93cyhOb25NZXJnaW5nV2luZG93Rm4pOgogICIiIkEgd2luZG93aW5nIGZ1bmN0aW9uIHRoYXQgYXNzaWducyBlYWNoIGVsZW1lbnQgdG8gb25lIHRpbWUgaW50ZXJ2YWwuCgogIFRoZSBhdHRyaWJ1dGVzIHNpemUgYW5kIG9mZnNldCBkZXRlcm1pbmUgaW4gd2hhdCB0aW1lIGludGVydmFsIGEgdGltZXN0YW1wCiAgd2lsbCBiZSBzbG90dGVkLiBUaGUgdGltZSBpbnRlcnZhbHMgaGF2ZSB0aGUgZm9sbG93aW5nIGZvcm11bGE6CiAgW04gKiBzaXplICsgb2Zmc2V0LCAoTiArIDEpICogc2l6ZSArIG9mZnNldCkKCiAgQXR0cmlidXRlczoKICAgIHNpemU6IFNpemUgb2YgdGhlIHdpbmRvdyBhcyBzZWNvbmRzLgogICAgb2Zmc2V0OiBPZmZzZXQgb2YgdGhpcyB3aW5kb3cgYXMgc2Vjb25kcyBzaW5jZSBVbml4IGVwb2NoLiBXaW5kb3dzIHN0YXJ0IGF0CiAgICAgIHQ9TiAqIHNpemUgKyBvZmZzZXQgd2hlcmUgdD0wIGlzIHRoZSBlcG9jaC4gVGhlIG9mZnNldCBtdXN0IGJlIGEgdmFsdWUKICAgICAgaW4gcmFuZ2UgWzAsIHNpemUpLiBJZiBpdCBpcyBub3QgaXQgd2lsbCBiZSBub3JtYWxpemVkIHRvIHRoaXMgcmFuZ2UuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBzaXplLCBvZmZzZXQ9MCk6CiAgICBpZiBzaXplIDw9IDA6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1RoZSBzaXplIHBhcmFtZXRlciBtdXN0IGJlIHN0cmljdGx5IHBvc2l0aXZlLicpCiAgICBzZWxmLnNpemUgPSBEdXJhdGlvbi5vZihzaXplKQogICAgc2VsZi5vZmZzZXQgPSBUaW1lc3RhbXAub2Yob2Zmc2V0KSAlIHNlbGYuc2l6ZQoKICBkZWYgYXNzaWduKHNlbGYsIGNvbnRleHQpOgogICAgdGltZXN0YW1wID0gY29udGV4dC50aW1lc3RhbXAKICAgIHN0YXJ0ID0gdGltZXN0YW1wIC0gKHRpbWVzdGFtcCAtIHNlbGYub2Zmc2V0KSAlIHNlbGYuc2l6ZQogICAgcmV0dXJuIFtJbnRlcnZhbFdpbmRvdyhzdGFydCwgc3RhcnQgKyBzZWxmLnNpemUpXQoKICBkZWYgZ2V0X3dpbmRvd19jb2RlcihzZWxmKToKICAgIHJldHVybiBjb2RlcnMuSW50ZXJ2YWxXaW5kb3dDb2RlcigpCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgaWYgdHlwZShzZWxmKSA9PSB0eXBlKG90aGVyKSA9PSBGaXhlZFdpbmRvd3M6CiAgICAgIHJldHVybiBzZWxmLnNpemUgPT0gb3RoZXIuc2l6ZSBhbmQgc2VsZi5vZmZzZXQgPT0gb3RoZXIub2Zmc2V0CgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKChzZWxmLnNpemUsIHNlbGYub2Zmc2V0KSkKCiAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKCiAgZGVmIHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHNlbGYsIGNvbnRleHQpOgogICAgcmV0dXJuIChjb21tb25fdXJucy5maXhlZF93aW5kb3dzLnVybiwKICAgICAgICAgICAgc3RhbmRhcmRfd2luZG93X2Zuc19wYjIuRml4ZWRXaW5kb3dzUGF5bG9hZCgKICAgICAgICAgICAgICAgIHNpemU9cHJvdG9fdXRpbHMuZnJvbV9taWNyb3MoCiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25fcGIyLkR1cmF0aW9uLCBzZWxmLnNpemUubWljcm9zKSwKICAgICAgICAgICAgICAgIG9mZnNldD1wcm90b191dGlscy5mcm9tX21pY3JvcygKICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXBfcGIyLlRpbWVzdGFtcCwgc2VsZi5vZmZzZXQubWljcm9zKSkpCgogIEB1cm5zLlJ1bm5lckFwaUZuLnJlZ2lzdGVyX3VybigKICAgICAgY29tbW9uX3VybnMuZml4ZWRfd2luZG93cy51cm4sCiAgICAgIHN0YW5kYXJkX3dpbmRvd19mbnNfcGIyLkZpeGVkV2luZG93c1BheWxvYWQpCiAgZGVmIGZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXIoZm5fcGFyYW1ldGVyLCB1bnVzZWRfY29udGV4dCk6CiAgICByZXR1cm4gRml4ZWRXaW5kb3dzKAogICAgICAgIHNpemU9RHVyYXRpb24obWljcm9zPWZuX3BhcmFtZXRlci5zaXplLlRvTWljcm9zZWNvbmRzKCkpLAogICAgICAgIG9mZnNldD1UaW1lc3RhbXAobWljcm9zPWZuX3BhcmFtZXRlci5vZmZzZXQuVG9NaWNyb3NlY29uZHMoKSkpCgoKY2xhc3MgU2xpZGluZ1dpbmRvd3MoTm9uTWVyZ2luZ1dpbmRvd0ZuKToKICAiIiJBIHdpbmRvd2luZyBmdW5jdGlvbiB0aGF0IGFzc2lnbnMgZWFjaCBlbGVtZW50IHRvIGEgc2V0IG9mIHNsaWRpbmcgd2luZG93cy4KCiAgVGhlIGF0dHJpYnV0ZXMgc2l6ZSBhbmQgb2Zmc2V0IGRldGVybWluZSBpbiB3aGF0IHRpbWUgaW50ZXJ2YWwgYSB0aW1lc3RhbXAKICB3aWxsIGJlIHNsb3R0ZWQuIFRoZSB0aW1lIGludGVydmFscyBoYXZlIHRoZSBmb2xsb3dpbmcgZm9ybXVsYToKICBbTiAqIHBlcmlvZCArIG9mZnNldCwgTiAqIHBlcmlvZCArIG9mZnNldCArIHNpemUpCgogIEF0dHJpYnV0ZXM6CiAgICBzaXplOiBTaXplIG9mIHRoZSB3aW5kb3cgYXMgc2Vjb25kcy4KICAgIHBlcmlvZDogUGVyaW9kIG9mIHRoZSB3aW5kb3dzIGFzIHNlY29uZHMuCiAgICBvZmZzZXQ6IE9mZnNldCBvZiB0aGlzIHdpbmRvdyBhcyBzZWNvbmRzIHNpbmNlIFVuaXggZXBvY2guIFdpbmRvd3Mgc3RhcnQgYXQKICAgICAgdD1OICogcGVyaW9kICsgb2Zmc2V0IHdoZXJlIHQ9MCBpcyB0aGUgZXBvY2guIFRoZSBvZmZzZXQgbXVzdCBiZSBhIHZhbHVlCiAgICAgIGluIHJhbmdlIFswLCBwZXJpb2QpLiBJZiBpdCBpcyBub3QgaXQgd2lsbCBiZSBub3JtYWxpemVkIHRvIHRoaXMgcmFuZ2UuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBzaXplLCBwZXJpb2QsIG9mZnNldD0wKToKICAgIGlmIHNpemUgPD0gMDoKICAgICAgcmFpc2UgVmFsdWVFcnJvcignVGhlIHNpemUgcGFyYW1ldGVyIG11c3QgYmUgc3RyaWN0bHkgcG9zaXRpdmUuJykKICAgIHNlbGYuc2l6ZSA9IER1cmF0aW9uLm9mKHNpemUpCiAgICBzZWxmLnBlcmlvZCA9IER1cmF0aW9uLm9mKHBlcmlvZCkKICAgIHNlbGYub2Zmc2V0ID0gVGltZXN0YW1wLm9mKG9mZnNldCkgJSBwZXJpb2QKCiAgZGVmIGFzc2lnbihzZWxmLCBjb250ZXh0KToKICAgIHRpbWVzdGFtcCA9IGNvbnRleHQudGltZXN0YW1wCiAgICBzdGFydCA9IHRpbWVzdGFtcCAtICgodGltZXN0YW1wIC0gc2VsZi5vZmZzZXQpICUgc2VsZi5wZXJpb2QpCiAgICByZXR1cm4gWwogICAgICAgIEludGVydmFsV2luZG93KFRpbWVzdGFtcChtaWNyb3M9cyksIFRpbWVzdGFtcChtaWNyb3M9cykgKyBzZWxmLnNpemUpCiAgICAgICAgZm9yIHMgaW4gcmFuZ2Uoc3RhcnQubWljcm9zLCB0aW1lc3RhbXAubWljcm9zIC0gc2VsZi5zaXplLm1pY3JvcywKICAgICAgICAgICAgICAgICAgICAgICAtc2VsZi5wZXJpb2QubWljcm9zKV0KCiAgZGVmIGdldF93aW5kb3dfY29kZXIoc2VsZik6CiAgICByZXR1cm4gY29kZXJzLkludGVydmFsV2luZG93Q29kZXIoKQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIGlmIHR5cGUoc2VsZikgPT0gdHlwZShvdGhlcikgPT0gU2xpZGluZ1dpbmRvd3M6CiAgICAgIHJldHVybiAoc2VsZi5zaXplID09IG90aGVyLnNpemUKICAgICAgICAgICAgICBhbmQgc2VsZi5vZmZzZXQgPT0gb3RoZXIub2Zmc2V0CiAgICAgICAgICAgICAgYW5kIHNlbGYucGVyaW9kID09IG90aGVyLnBlcmlvZCkKCiAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKCiAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgcmV0dXJuIGhhc2goKHNlbGYub2Zmc2V0LCBzZWxmLnBlcmlvZCkpCgogIGRlZiB0b19ydW5uZXJfYXBpX3BhcmFtZXRlcihzZWxmLCBjb250ZXh0KToKICAgIHJldHVybiAoY29tbW9uX3VybnMuc2xpZGluZ193aW5kb3dzLnVybiwKICAgICAgICAgICAgc3RhbmRhcmRfd2luZG93X2Zuc19wYjIuU2xpZGluZ1dpbmRvd3NQYXlsb2FkKAogICAgICAgICAgICAgICAgc2l6ZT1wcm90b191dGlscy5mcm9tX21pY3JvcygKICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbl9wYjIuRHVyYXRpb24sIHNlbGYuc2l6ZS5taWNyb3MpLAogICAgICAgICAgICAgICAgb2Zmc2V0PXByb3RvX3V0aWxzLmZyb21fbWljcm9zKAogICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcF9wYjIuVGltZXN0YW1wLCBzZWxmLm9mZnNldC5taWNyb3MpLAogICAgICAgICAgICAgICAgcGVyaW9kPXByb3RvX3V0aWxzLmZyb21fbWljcm9zKAogICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uX3BiMi5EdXJhdGlvbiwgc2VsZi5wZXJpb2QubWljcm9zKSkpCgogIEB1cm5zLlJ1bm5lckFwaUZuLnJlZ2lzdGVyX3VybigKICAgICAgY29tbW9uX3VybnMuc2xpZGluZ193aW5kb3dzLnVybiwKICAgICAgc3RhbmRhcmRfd2luZG93X2Zuc19wYjIuU2xpZGluZ1dpbmRvd3NQYXlsb2FkKQogIGRlZiBmcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyKGZuX3BhcmFtZXRlciwgdW51c2VkX2NvbnRleHQpOgogICAgcmV0dXJuIFNsaWRpbmdXaW5kb3dzKAogICAgICAgIHNpemU9RHVyYXRpb24obWljcm9zPWZuX3BhcmFtZXRlci5zaXplLlRvTWljcm9zZWNvbmRzKCkpLAogICAgICAgIG9mZnNldD1UaW1lc3RhbXAobWljcm9zPWZuX3BhcmFtZXRlci5vZmZzZXQuVG9NaWNyb3NlY29uZHMoKSksCiAgICAgICAgcGVyaW9kPUR1cmF0aW9uKG1pY3Jvcz1mbl9wYXJhbWV0ZXIucGVyaW9kLlRvTWljcm9zZWNvbmRzKCkpKQoKCmNsYXNzIFNlc3Npb25zKFdpbmRvd0ZuKToKICAiIiJBIHdpbmRvd2luZyBmdW5jdGlvbiB0aGF0IGdyb3VwcyBlbGVtZW50cyBpbnRvIHNlc3Npb25zLgoKICBBIHNlc3Npb24gaXMgZGVmaW5lZCBhcyBhIHNlcmllcyBvZiBjb25zZWN1dGl2ZSBldmVudHMKICBzZXBhcmF0ZWQgYnkgYSBzcGVjaWZpZWQgZ2FwIHNpemUuCgogIEF0dHJpYnV0ZXM6CiAgICBnYXBfc2l6ZTogU2l6ZSBvZiB0aGUgZ2FwIGJldHdlZW4gd2luZG93cyBhcyBmbG9hdGluZy1wb2ludCBzZWNvbmRzLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgZ2FwX3NpemUpOgogICAgaWYgZ2FwX3NpemUgPD0gMDoKICAgICAgcmFpc2UgVmFsdWVFcnJvcignVGhlIHNpemUgcGFyYW1ldGVyIG11c3QgYmUgc3RyaWN0bHkgcG9zaXRpdmUuJykKICAgIHNlbGYuZ2FwX3NpemUgPSBEdXJhdGlvbi5vZihnYXBfc2l6ZSkKCiAgZGVmIGFzc2lnbihzZWxmLCBjb250ZXh0KToKICAgIHRpbWVzdGFtcCA9IGNvbnRleHQudGltZXN0YW1wCiAgICByZXR1cm4gW0ludGVydmFsV2luZG93KHRpbWVzdGFtcCwgdGltZXN0YW1wICsgc2VsZi5nYXBfc2l6ZSldCgogIGRlZiBnZXRfd2luZG93X2NvZGVyKHNlbGYpOgogICAgcmV0dXJuIGNvZGVycy5JbnRlcnZhbFdpbmRvd0NvZGVyKCkKCiAgZGVmIG1lcmdlKHNlbGYsIG1lcmdlX2NvbnRleHQpOgogICAgdG9fbWVyZ2UgPSBbXQogICAgZW5kID0gTUlOX1RJTUVTVEFNUAogICAgZm9yIHcgaW4gc29ydGVkKG1lcmdlX2NvbnRleHQud2luZG93cywga2V5PWxhbWJkYSB3OiB3LnN0YXJ0KToKICAgICAgaWYgdG9fbWVyZ2U6CiAgICAgICAgaWYgZW5kID4gdy5zdGFydDoKICAgICAgICAgIHRvX21lcmdlLmFwcGVuZCh3KQogICAgICAgICAgaWYgdy5lbmQgPiBlbmQ6CiAgICAgICAgICAgIGVuZCA9IHcuZW5kCiAgICAgICAgZWxzZToKICAgICAgICAgIGlmIGxlbih0b19tZXJnZSkgPiAxOgogICAgICAgICAgICBtZXJnZV9jb250ZXh0Lm1lcmdlKHRvX21lcmdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVydmFsV2luZG93KHRvX21lcmdlWzBdLnN0YXJ0LCBlbmQpKQogICAgICAgICAgdG9fbWVyZ2UgPSBbd10KICAgICAgICAgIGVuZCA9IHcuZW5kCiAgICAgIGVsc2U6CiAgICAgICAgdG9fbWVyZ2UgPSBbd10KICAgICAgICBlbmQgPSB3LmVuZAogICAgaWYgbGVuKHRvX21lcmdlKSA+IDE6CiAgICAgIG1lcmdlX2NvbnRleHQubWVyZ2UodG9fbWVyZ2UsIEludGVydmFsV2luZG93KHRvX21lcmdlWzBdLnN0YXJ0LCBlbmQpKQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIGlmIHR5cGUoc2VsZikgPT0gdHlwZShvdGhlcikgPT0gU2Vzc2lvbnM6CiAgICAgIHJldHVybiBzZWxmLmdhcF9zaXplID09IG90aGVyLmdhcF9zaXplCgogIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuIG5vdCBzZWxmID09IG90aGVyCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKHNlbGYuZ2FwX3NpemUpCgogIGRlZiB0b19ydW5uZXJfYXBpX3BhcmFtZXRlcihzZWxmLCBjb250ZXh0KToKICAgIHJldHVybiAoY29tbW9uX3VybnMuc2Vzc2lvbl93aW5kb3dzLnVybiwKICAgICAgICAgICAgc3RhbmRhcmRfd2luZG93X2Zuc19wYjIuU2Vzc2lvbnNQYXlsb2FkKAogICAgICAgICAgICAgICAgZ2FwX3NpemU9cHJvdG9fdXRpbHMuZnJvbV9taWNyb3MoCiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25fcGIyLkR1cmF0aW9uLCBzZWxmLmdhcF9zaXplLm1pY3JvcykpKQoKICBAdXJucy5SdW5uZXJBcGlGbi5yZWdpc3Rlcl91cm4oCiAgICAgIGNvbW1vbl91cm5zLnNlc3Npb25fd2luZG93cy51cm4sCiAgICAgIHN0YW5kYXJkX3dpbmRvd19mbnNfcGIyLlNlc3Npb25zUGF5bG9hZCkKICBkZWYgZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcihmbl9wYXJhbWV0ZXIsIHVudXNlZF9jb250ZXh0KToKICAgIHJldHVybiBTZXNzaW9ucygKICAgICAgICBnYXBfc2l6ZT1EdXJhdGlvbihtaWNyb3M9Zm5fcGFyYW1ldGVyLmdhcF9zaXplLlRvTWljcm9zZWNvbmRzKCkpKQp9coGCAAAoWAgAAABXaW5kb3dGblgFAAAAY2xhc3NLc0u0h1gYAAAATm9uTWVyZ2luZ1dpbmRvd0ZuLm1lcmdlWAMAAABkZWZNQAFNQgGHWBUAAABGaXhlZFdpbmRvd3MuX19oYXNoX19YAwAAAGRlZk2DAU2FAYdYHgAAAFdpbmRvd0ZuLk1lcmdlQ29udGV4dC5fX2luaXRfX1gDAAAAZGVmS41Lj4dYIgAAAFNlc3Npb25zLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXJYAwAAAGRlZk0WAk0cAodYGgAAAFRpbWVzdGFtcENvbWJpbmVyLmdldF9pbXBsWAMAAABkZWZLZUtxh1gTAAAAR2xvYmFsV2luZG93Ll9fZXFfX1gDAAAAZGVmTS0BTTABh1gTAAAAV2luZG93Rm4uaXNfbWVyZ2luZ1gDAAAAZGVmS5hLm4dYFAAAAEJvdW5kZWRXaW5kb3cuX19uZV9fWAMAAABkZWZLxkvJh1gVAAAAU2xpZGluZ1dpbmRvd3MuX19uZV9fWAMAAABkZWZNwQFNwwGHWBsAAABCb3VuZGVkV2luZG93Lm1heF90aW1lc3RhbXBYAwAAAGRlZkvAS8KHWBUAAABTbGlkaW5nV2luZG93cy5fX2VxX19YAwAAAGRlZk27AU3AAYdYFAAAAEJvdW5kZWRXaW5kb3cuX19lcV9fWAMAAABkZWZLw0vFh1gdAAAATm9uTWVyZ2luZ1dpbmRvd0ZuLmlzX21lcmdpbmdYAwAAAGRlZk09AU0/AYdYFwAAAFRpbWVzdGFtcGVkVmFsdWUuX19uZV9fWAMAAABkZWZNDwFNEQGHWCYAAABTbGlkaW5nV2luZG93cy50b19ydW5uZXJfYXBpX3BhcmFtZXRlclgDAAAAZGVmTccBTdABh1gnAAAAR2xvYmFsV2luZG93cy5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyWAMAAABkZWZNXgFNYQGHWBQAAABCb3VuZGVkV2luZG93Ll9fZ3RfX1gDAAAAZGVmS9RL2IdYDQAAAEdsb2JhbFdpbmRvd3NYBQAAAGNsYXNzTUQBTWEBh1gSAAAATm9uTWVyZ2luZ1dpbmRvd0ZuWAUAAABjbGFzc007AU1CAYdYGQAAAFRpbWVzdGFtcGVkVmFsdWUuX19pbml0X19YAwAAAGRlZk0DAU0GAYdYFQAAAEdsb2JhbFdpbmRvdy5fX2hhc2hfX1gDAAAAZGVmTSoBTSwBh1gTAAAARml4ZWRXaW5kb3dzLmFzc2lnblgDAAAAZGVmTXcBTXsBh1gcAAAAR2xvYmFsV2luZG93cy53aW5kb3dlZF92YWx1ZVgDAAAAZGVmTUcBTUoBh1gPAAAAU2Vzc2lvbnMuX19lcV9fWAMAAABkZWZNBgJNCQKHWCQAAABXaW5kb3dGbi5nZXRfdHJhbnNmb3JtZWRfb3V0cHV0X3RpbWVYAwAAAGRlZkugS7KHWA0AAABCb3VuZGVkV2luZG93WAUAAABjbGFzc0u2S+OHWA4AAABTbGlkaW5nV2luZG93c1gFAAAAY2xhc3NNmgFN2QGHWAwAAABHbG9iYWxXaW5kb3dYBQAAAGNsYXNzTRoBTTkBh1gUAAAAR2xvYmFsV2luZG93Ll9fbmV3X19YAwAAAGRlZk0eAU0iAYdYGQAAAFdpbmRvd0ZuLmdldF93aW5kb3dfY29kZXJYAwAAAGRlZkucS5+HWBcAAABUaW1lc3RhbXBlZFZhbHVlLl9fZXFfX1gDAAAAZGVmTQcBTQsBh1gPAAAAU2Vzc2lvbnMuX19uZV9fWAMAAABkZWZNCgJNDAKHWBYAAABCb3VuZGVkV2luZG93Ll9fcmVwcl9fWAMAAABkZWZL4Uvjh1gkAAAARml4ZWRXaW5kb3dzLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyWAMAAABkZWZNiQFNkAGHWA8AAABTZXNzaW9ucy5hc3NpZ25YAwAAAGRlZk3qAU3tAYdYEQAAAFRpbWVzdGFtcENvbWJpbmVyWAUAAABjbGFzc0tcS3GHWCUAAABHbG9iYWxXaW5kb3dzLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyWAMAAABkZWZNWwFNXQGHWBMAAABGaXhlZFdpbmRvd3MuX19uZV9fWAMAAABkZWZNhgFNiAGHWBYAAABHbG9iYWxXaW5kb3dzLl9faGFzaF9fWAMAAABkZWZNUQFNUwGHWBMAAABHbG9iYWxXaW5kb3cuX19uZV9fWAMAAABkZWZNMQFNMwGHWA4AAABXaW5kb3dGbi5tZXJnZVgDAAAAZGVmS5NLl4dYHgAAAEdsb2JhbFdpbmRvd3MuZ2V0X3dpbmRvd19jb2RlclgDAAAAZGVmTU4BTVABh1gPAAAAV2luZG93Rm4uYXNzaWduWAMAAABkZWZLfkuJh1gWAAAAQm91bmRlZFdpbmRvdy5fX2hhc2hfX1gDAAAAZGVmS95L4IdYFgAAAFdpbmRvd0ZuLkFzc2lnbkNvbnRleHRYBQAAAGNsYXNzS3ZLfYdYGQAAAFNlc3Npb25zLmdldF93aW5kb3dfY29kZXJYAwAAAGRlZk3uAU3wAYdYFQAAAEdsb2JhbFdpbmRvdy5fX3JlcHJfX1gDAAAAZGVmTScBTSkBh1gVAAAARml4ZWRXaW5kb3dzLl9faW5pdF9fWAMAAABkZWZNcQFNdgGHWCYAAABGaXhlZFdpbmRvd3MuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlclgDAAAAZGVmTZEBTZgBh1gUAAAAQm91bmRlZFdpbmRvdy5fX2x0X19YAwAAAGRlZkvKS86HWBQAAABHbG9iYWxXaW5kb3dzLmFzc2lnblgDAAAAZGVmTUsBTU0Bh1gZAAAASW50ZXJ2YWxXaW5kb3cuaW50ZXJzZWN0c1gDAAAAZGVmS/JL9IdYDgAAAEludGVydmFsV2luZG93WAUAAABjbGFzc0vlS/iHWBsAAABXaW5kb3dGbi5NZXJnZUNvbnRleHQubWVyZ2VYAwAAAGRlZkuQS5KHWBcAAABTbGlkaW5nV2luZG93cy5fX2luaXRfX1gDAAAAZGVmTakBTa8Bh1gWAAAAQm91bmRlZFdpbmRvdy5fX2luaXRfX1gDAAAAZGVmS71Lv4dYEQAAAFNlc3Npb25zLl9faGFzaF9fWAMAAABkZWZNDQJNDwKHWBcAAABUaW1lc3RhbXBlZFZhbHVlLl9fbHRfX1gDAAAAZGVmTRIBTRgBh1goAAAAU2xpZGluZ1dpbmRvd3MuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlclgDAAAAZGVmTdEBTdkBh1gdAAAARml4ZWRXaW5kb3dzLmdldF93aW5kb3dfY29kZXJYAwAAAGRlZk18AU1+AYdYDgAAAFNlc3Npb25zLm1lcmdlWAMAAABkZWZN8QFNBQKHWBMAAABGaXhlZFdpbmRvd3MuX19lcV9fWAMAAABkZWZNfwFNggGHWBQAAABHbG9iYWxXaW5kb3dzLl9fZXFfX1gDAAAAZGVmTVQBTVcBh1gVAAAAV2luZG93Rm4uTWVyZ2VDb250ZXh0WAUAAABjbGFzc0uKS5KHWBEAAABTZXNzaW9ucy5fX2luaXRfX1gDAAAAZGVmTeUBTekBh1ggAAAAU2Vzc2lvbnMudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJYAwAAAGRlZk0QAk0VAodYGQAAAFRpbWVzdGFtcGVkVmFsdWUuX19oYXNoX19YAwAAAGRlZk0MAU0OAYdYEAAAAFRpbWVzdGFtcGVkVmFsdWVYBQAAAGNsYXNzS/pNGAGHWBUAAABHbG9iYWxXaW5kb3cuX19pbml0X19YAwAAAGRlZk0jAU0mAYdYFQAAAFNsaWRpbmdXaW5kb3dzLmFzc2lnblgDAAAAZGVmTbABTbcBh1gMAAAARml4ZWRXaW5kb3dzWAUAAABjbGFzc01jAU2YAYdYFAAAAEJvdW5kZWRXaW5kb3cuX19nZV9fWAMAAABkZWZL2Uvdh1gUAAAASW50ZXJ2YWxXaW5kb3cudW5pb25YAwAAAGRlZkv1S/iHWCMAAABHbG9iYWxXaW5kb3cuX2dldFRpbWVzdGFtcEZyb21Qcm90b1gDAAAAZGVmTTQBTTkBh1gXAAAAU2xpZGluZ1dpbmRvd3MuX19oYXNoX19YAwAAAGRlZk3EAU3GAYdYCAAAAFNlc3Npb25zWAUAAABjbGFzc03bAU0cAodYHwAAAFdpbmRvd0ZuLkFzc2lnbkNvbnRleHQuX19pbml0X19YAwAAAGRlZkt5S32HWBUAAABJbnRlcnZhbFdpbmRvdy5fX2x0X19YAwAAAGRlZkvtS/GHWB8AAABTbGlkaW5nV2luZG93cy5nZXRfd2luZG93X2NvZGVyWAMAAABkZWZNuAFNugGHWBQAAABCb3VuZGVkV2luZG93Ll9fbGVfX1gDAAAAZGVmS89L04dYFAAAAEdsb2JhbFdpbmRvd3MuX19uZV9fWAMAAABkZWZNWAFNWgGHdX1ygoIAAChYCAAAAFdpbmRvd0ZualJkAABYGAAAAE5vbk1lcmdpbmdXaW5kb3dGbi5tZXJnZWpSZAAAWB0AAABOb25NZXJnaW5nV2luZG93Rm4uaXNfbWVyZ2luZ2pSZAAAWCIAAABTZXNzaW9ucy5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyalJkAABYGgAAAFRpbWVzdGFtcENvbWJpbmVyLmdldF9pbXBsalJkAABYEwAAAFdpbmRvd0ZuLmlzX21lcmdpbmdqUmQAAFgIAAAAU2Vzc2lvbnNqUmQAAFgbAAAAQm91bmRlZFdpbmRvdy5tYXhfdGltZXN0YW1walJkAABYJgAAAFNsaWRpbmdXaW5kb3dzLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyalJkAABYHQAAAEZpeGVkV2luZG93cy5nZXRfd2luZG93X2NvZGVyalJkAABYJAAAAEZpeGVkV2luZG93cy50b19ydW5uZXJfYXBpX3BhcmFtZXRlcmpSZAAAWA0AAABHbG9iYWxXaW5kb3dzalJkAABYEwAAAEZpeGVkV2luZG93cy5hc3NpZ25qUmQAAFgnAAAAR2xvYmFsV2luZG93cy5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyalJkAABYHAAAAEdsb2JhbFdpbmRvd3Mud2luZG93ZWRfdmFsdWVqUmQAAFgNAAAAQm91bmRlZFdpbmRvd2pSZAAAWA4AAABTbGlkaW5nV2luZG93c2pSZAAAWAwAAABHbG9iYWxXaW5kb3dqUmQAAFgZAAAAV2luZG93Rm4uZ2V0X3dpbmRvd19jb2RlcmpSZAAAWA8AAABTZXNzaW9ucy5hc3NpZ25qUmQAAFgRAAAAVGltZXN0YW1wQ29tYmluZXJqUmQAAFgOAAAAV2luZG93Rm4ubWVyZ2VqUmQAAFgeAAAAR2xvYmFsV2luZG93cy5nZXRfd2luZG93X2NvZGVyalJkAABYFgAAAFdpbmRvd0ZuLkFzc2lnbkNvbnRleHRqUmQAAFgZAAAAU2Vzc2lvbnMuZ2V0X3dpbmRvd19jb2RlcmpSZAAAWBIAAABOb25NZXJnaW5nV2luZG93Rm5qUmQAAFgmAAAARml4ZWRXaW5kb3dzLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXJqUmQAAFgUAAAAR2xvYmFsV2luZG93cy5hc3NpZ25qUmQAAFgZAAAASW50ZXJ2YWxXaW5kb3cuaW50ZXJzZWN0c2pSZAAAWBsAAABXaW5kb3dGbi5NZXJnZUNvbnRleHQubWVyZ2VqUmQAAFglAAAAR2xvYmFsV2luZG93cy50b19ydW5uZXJfYXBpX3BhcmFtZXRlcmpSZAAAWAwAAABGaXhlZFdpbmRvd3NqUmQAAFgoAAAAU2xpZGluZ1dpbmRvd3MuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcmpSZAAAWCQAAABXaW5kb3dGbi5nZXRfdHJhbnNmb3JtZWRfb3V0cHV0X3RpbWVqUmQAAFgOAAAASW50ZXJ2YWxXaW5kb3dqUmQAAFgOAAAAU2Vzc2lvbnMubWVyZ2VqUmQAAFggAAAAU2Vzc2lvbnMudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJqUmQAAFgQAAAAVGltZXN0YW1wZWRWYWx1ZWpSZAAAWBUAAABTbGlkaW5nV2luZG93cy5hc3NpZ25qUmQAAFgUAAAASW50ZXJ2YWxXaW5kb3cudW5pb25qUmQAAFgPAAAAV2luZG93Rm4uYXNzaWdualJkAABYFQAAAFdpbmRvd0ZuLk1lcmdlQ29udGV4dGpSZAAAWB8AAABTbGlkaW5nV2luZG93cy5nZXRfd2luZG93X2NvZGVyalJkAAB1an1pAABYHQAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93coOCAACFgXKEggAAfXKFggAAYnRyhoIAAFUfYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVjaGVja3KHggAAKFhQJgAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJSdW50aW1lIHR5cGUgY2hlY2tpbmcgc3VwcG9ydC4KCkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGNvbGxlY3Rpb25zCmltcG9ydCBpbnNwZWN0CmltcG9ydCB0eXBlcwoKZnJvbSBmdXR1cmUudXRpbHMgaW1wb3J0IHJhaXNlX3dpdGhfdHJhY2ViYWNrCmZyb20gcGFzdC5idWlsdGlucyBpbXBvcnQgdW5pY29kZQoKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgcGlwZWxpbmUKZnJvbSBhcGFjaGVfYmVhbS5wdmFsdWUgaW1wb3J0IFRhZ2dlZE91dHB1dApmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IGNvcmUKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgaW1wb3J0IERvRm4KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdyBpbXBvcnQgV2luZG93ZWRWYWx1ZQpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5kZWNvcmF0b3JzIGltcG9ydCBHZW5lcmF0b3JXcmFwcGVyCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnMgaW1wb3J0IFR5cGVDaGVja0Vycm9yCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnMgaW1wb3J0IF9jaGVja19pbnN0YW5jZV90eXBlCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnMgaW1wb3J0IGdldGNhbGxhcmdzX2ZvcmhpbnRzCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50cyBpbXBvcnQgQ29tcG9zaXRlVHlwZUhpbnRFcnJvcgpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHMgaW1wb3J0IFNpbXBsZVR5cGVIaW50RXJyb3IKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzIGltcG9ydCBjaGVja19jb25zdHJhaW50CgoKY2xhc3MgQWJzdHJhY3REb0ZuV3JhcHBlcihEb0ZuKToKICAiIiJBbiBhYnN0cmFjdCBjbGFzcyB0byBjcmVhdGUgd3JhcHBlciBhcm91bmQgRG9GbiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgZG9mbik6CiAgICBzdXBlcihBYnN0cmFjdERvRm5XcmFwcGVyLCBzZWxmKS5fX2luaXRfXygpCiAgICBzZWxmLmRvZm4gPSBkb2ZuCgogIGRlZiBfaW5zcGVjdF9zdGFydF9idW5kbGUoc2VsZik6CiAgICByZXR1cm4gc2VsZi5kb2ZuLmdldF9mdW5jdGlvbl9hcmd1bWVudHMoJ3N0YXJ0X2J1bmRsZScpCgogIGRlZiBfaW5zcGVjdF9wcm9jZXNzKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuZG9mbi5nZXRfZnVuY3Rpb25fYXJndW1lbnRzKCdwcm9jZXNzJykKCiAgZGVmIF9pbnNwZWN0X2ZpbmlzaF9idW5kbGUoc2VsZik6CiAgICByZXR1cm4gc2VsZi5kb2ZuLmdldF9mdW5jdGlvbl9hcmd1bWVudHMoJ2ZpbmlzaF9idW5kbGUnKQoKICBkZWYgd3JhcHBlcihzZWxmLCBtZXRob2QsIGFyZ3MsIGt3YXJncyk6CiAgICByZXR1cm4gbWV0aG9kKCphcmdzLCAqKmt3YXJncykKCiAgZGVmIHN0YXJ0X2J1bmRsZShzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgcmV0dXJuIHNlbGYud3JhcHBlcihzZWxmLmRvZm4uc3RhcnRfYnVuZGxlLCBhcmdzLCBrd2FyZ3MpCgogIGRlZiBwcm9jZXNzKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICByZXR1cm4gc2VsZi53cmFwcGVyKHNlbGYuZG9mbi5wcm9jZXNzLCBhcmdzLCBrd2FyZ3MpCgogIGRlZiBmaW5pc2hfYnVuZGxlKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICByZXR1cm4gc2VsZi53cmFwcGVyKHNlbGYuZG9mbi5maW5pc2hfYnVuZGxlLCBhcmdzLCBrd2FyZ3MpCgogIGRlZiBpc19wcm9jZXNzX2JvdW5kZWQoc2VsZik6CiAgICByZXR1cm4gc2VsZi5kb2ZuLmlzX3Byb2Nlc3NfYm91bmRlZCgpCgoKY2xhc3MgT3V0cHV0Q2hlY2tXcmFwcGVyRG9GbihBYnN0cmFjdERvRm5XcmFwcGVyKToKICAiIiJBIERvRm4gdGhhdCB2ZXJpZmllcyBhZ2FpbnN0IGNvbW1vbiBlcnJvcnMgaW4gdGhlIG91dHB1dCB0eXBlLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgZG9mbiwgZnVsbF9sYWJlbCk6CiAgICBzdXBlcihPdXRwdXRDaGVja1dyYXBwZXJEb0ZuLCBzZWxmKS5fX2luaXRfXyhkb2ZuKQogICAgc2VsZi5mdWxsX2xhYmVsID0gZnVsbF9sYWJlbAoKICBkZWYgd3JhcHBlcihzZWxmLCBtZXRob2QsIGFyZ3MsIGt3YXJncyk6CiAgICB0cnk6CiAgICAgIHJlc3VsdCA9IG1ldGhvZCgqYXJncywgKiprd2FyZ3MpCiAgICBleGNlcHQgVHlwZUNoZWNrRXJyb3IgYXMgZToKICAgICAgZXJyb3JfbXNnID0gKCdSdW50aW1lIHR5cGUgdmlvbGF0aW9uIGRldGVjdGVkIHdpdGhpbiBQYXJEbyglcyk6ICcKICAgICAgICAgICAgICAgICAgICclcycgJSAoc2VsZi5mdWxsX2xhYmVsLCBlKSkKICAgICAgcmFpc2Vfd2l0aF90cmFjZWJhY2soVHlwZUNoZWNrRXJyb3IoZXJyb3JfbXNnKSkKICAgIGVsc2U6CiAgICAgIHJldHVybiBzZWxmLl9jaGVja190eXBlKHJlc3VsdCkKCiAgZGVmIF9jaGVja190eXBlKHNlbGYsIG91dHB1dCk6CiAgICBpZiBvdXRwdXQgaXMgTm9uZToKICAgICAgcmV0dXJuIG91dHB1dAogICAgZWxpZiBpc2luc3RhbmNlKG91dHB1dCwgKGRpY3QsIGJ5dGVzLCBzdHIsIHVuaWNvZGUpKToKICAgICAgb2JqZWN0X3R5cGUgPSB0eXBlKG91dHB1dCkuX19uYW1lX18KICAgICAgcmFpc2UgVHlwZUNoZWNrRXJyb3IoJ1JldHVybmluZyBhICVzIGZyb20gYSBQYXJEbyBvciBGbGF0TWFwIGlzICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rpc2NvdXJhZ2VkLiBQbGVhc2UgdXNlIGxpc3QoIiVzIikgaWYgeW91IHJlYWxseSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICd3YW50IHRoaXMgYmVoYXZpb3IuJyAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChvYmplY3RfdHlwZSwgb3V0cHV0KSkKICAgIGVsaWYgbm90IGlzaW5zdGFuY2Uob3V0cHV0LCBjb2xsZWN0aW9ucy5JdGVyYWJsZSk6CiAgICAgIHJhaXNlIFR5cGVDaGVja0Vycm9yKCdGbGF0TWFwIGFuZCBQYXJEbyBtdXN0IHJldHVybiBhbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdpdGVyYWJsZS4gJXMgd2FzIHJldHVybmVkIGluc3RlYWQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAlIHR5cGUob3V0cHV0KSkKICAgIHJldHVybiBvdXRwdXQKCgpjbGFzcyBUeXBlQ2hlY2tXcmFwcGVyRG9GbihBYnN0cmFjdERvRm5XcmFwcGVyKToKICAiIiJBIHdyYXBwZXIgYXJvdW5kIGEgRG9GbiB3aGljaCBwZXJmb3JtcyB0eXBlLWNoZWNraW5nIG9mIGlucHV0IGFuZCBvdXRwdXQuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBkb2ZuLCB0eXBlX2hpbnRzLCBsYWJlbD1Ob25lKToKICAgIHN1cGVyKFR5cGVDaGVja1dyYXBwZXJEb0ZuLCBzZWxmKS5fX2luaXRfXyhkb2ZuKQogICAgc2VsZi5fcHJvY2Vzc19mbiA9IHNlbGYuZG9mbi5fcHJvY2Vzc19hcmdzcGVjX2ZuKCkKICAgIGlmIHR5cGVfaGludHMuaW5wdXRfdHlwZXM6CiAgICAgIGlucHV0X2FyZ3MsIGlucHV0X2t3YXJncyA9IHR5cGVfaGludHMuaW5wdXRfdHlwZXMKICAgICAgc2VsZi5faW5wdXRfaGludHMgPSBnZXRjYWxsYXJnc19mb3JoaW50cygKICAgICAgICAgIHNlbGYuX3Byb2Nlc3NfZm4sICppbnB1dF9hcmdzLCAqKmlucHV0X2t3YXJncykKICAgIGVsc2U6CiAgICAgIHNlbGYuX2lucHV0X2hpbnRzID0gTm9uZQogICAgIyBUT0RPKHJvYmVydHdiKTogTXVsdGktb3V0cHV0LgogICAgc2VsZi5fb3V0cHV0X3R5cGVfaGludCA9IHR5cGVfaGludHMuc2ltcGxlX291dHB1dF90eXBlKGxhYmVsKQoKICBkZWYgd3JhcHBlcihzZWxmLCBtZXRob2QsIGFyZ3MsIGt3YXJncyk6CiAgICByZXN1bHQgPSBtZXRob2QoKmFyZ3MsICoqa3dhcmdzKQogICAgcmV0dXJuIHNlbGYuX3R5cGVfY2hlY2tfcmVzdWx0KHJlc3VsdCkKCiAgZGVmIHByb2Nlc3Moc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgIGlmIHNlbGYuX2lucHV0X2hpbnRzOgogICAgICBhY3R1YWxfaW5wdXRzID0gaW5zcGVjdC5nZXRjYWxsYXJncyhzZWxmLl9wcm9jZXNzX2ZuLCAqYXJncywgKiprd2FyZ3MpCiAgICAgIGZvciB2YXIsIGhpbnQgaW4gc2VsZi5faW5wdXRfaGludHMuaXRlbXMoKToKICAgICAgICBpZiBoaW50IGlzIGFjdHVhbF9pbnB1dHNbdmFyXToKICAgICAgICAgICMgc2VsZiBwYXJhbWV0ZXIKICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgX2NoZWNrX2luc3RhbmNlX3R5cGUoaGludCwgYWN0dWFsX2lucHV0c1t2YXJdLCB2YXIsIFRydWUpCiAgICByZXR1cm4gc2VsZi5fdHlwZV9jaGVja19yZXN1bHQoc2VsZi5kb2ZuLnByb2Nlc3MoKmFyZ3MsICoqa3dhcmdzKSkKCiAgZGVmIF90eXBlX2NoZWNrX3Jlc3VsdChzZWxmLCB0cmFuc2Zvcm1fcmVzdWx0cyk6CiAgICBpZiBzZWxmLl9vdXRwdXRfdHlwZV9oaW50IGlzIE5vbmUgb3IgdHJhbnNmb3JtX3Jlc3VsdHMgaXMgTm9uZToKICAgICAgcmV0dXJuIHRyYW5zZm9ybV9yZXN1bHRzCgogICAgZGVmIHR5cGVfY2hlY2tfb3V0cHV0KG8pOgogICAgICAjIFRPRE8ocm9iZXJ0d2IpOiBNdWx0aS1vdXRwdXQuCiAgICAgIHggPSBvLnZhbHVlIGlmIGlzaW5zdGFuY2UobywgKFRhZ2dlZE91dHB1dCwgV2luZG93ZWRWYWx1ZSkpIGVsc2UgbwogICAgICBzZWxmLl90eXBlX2NoZWNrKHNlbGYuX291dHB1dF90eXBlX2hpbnQsIHgsIGlzX2lucHV0PUZhbHNlKQoKICAgICMgSWYgdGhlIHJldHVybiB0eXBlIGlzIGEgZ2VuZXJhdG9yLCB0aGVuIHdlIHdpbGwgbmVlZCB0byBpbnRlcmxlYXZlIG91cgogICAgIyB0eXBlLWNoZWNraW5nIHdpdGggaXRzIG5vcm1hbCBpdGVyYXRpb24gc28gd2UgZG9uJ3QgZGVwbGV0ZSB0aGUKICAgICMgZ2VuZXJhdG9yIGluaXRpYWxseSBqdXN0IGJ5IHR5cGUtY2hlY2tpbmcgaXRzIHlpZWxkZWQgY29udGVudHMuCiAgICBpZiBpc2luc3RhbmNlKHRyYW5zZm9ybV9yZXN1bHRzLCB0eXBlcy5HZW5lcmF0b3JUeXBlKToKICAgICAgcmV0dXJuIEdlbmVyYXRvcldyYXBwZXIodHJhbnNmb3JtX3Jlc3VsdHMsIHR5cGVfY2hlY2tfb3V0cHV0KQogICAgZm9yIG8gaW4gdHJhbnNmb3JtX3Jlc3VsdHM6CiAgICAgIHR5cGVfY2hlY2tfb3V0cHV0KG8pCiAgICByZXR1cm4gdHJhbnNmb3JtX3Jlc3VsdHMKCiAgZGVmIF90eXBlX2NoZWNrKHNlbGYsIHR5cGVfY29uc3RyYWludCwgZGF0dW0sIGlzX2lucHV0KToKICAgICIiIlR5cGVjaGVjayBhIFBUcmFuc2Zvcm0gcmVsYXRlZCBkYXR1bSBhY2NvcmRpbmcgdG8gYSB0eXBlIGNvbnN0cmFpbnQuCgogICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIG9wdGlvbmFsbHkgdHlwZS1jaGVjayBlaXRoZXIgYW4gaW5wdXQgb3IgYW4gb3V0cHV0CiAgICB0byBhIFBUcmFuc2Zvcm0uCgogICAgQXJnczoKICAgICAgICB0eXBlX2NvbnN0cmFpbnQ6IEFuIGluc3RhbmNlIG9mIGEgdHlwZWhpbnRzLlR5cGVDb250cmFpbnQsIG9uZSBvZiB0aGUKICAgICAgICAgIHdoaXRlLWxpc3RlZCBidWlsdGluIFB5dGhvbiB0eXBlcywgb3IgYSBjdXN0b20gdXNlciBjbGFzcy4KICAgICAgICBkYXR1bTogQW4gaW5zdGFuY2Ugb2YgYSBQeXRob24gb2JqZWN0LgogICAgICAgIGlzX2lucHV0OiBUcnVlIGlmICdkYXR1bScgaXMgYW4gaW5wdXQgdG8gYSBQVHJhbnNmb3JtJ3MgRG9Gbi4gRmFsc2UKICAgICAgICAgIG90aGVyd2lzZS4KCiAgICBSYWlzZXM6CiAgICAgIFR5cGVFcnJvcjogSWYgJ2RhdHVtJyBmYWlscyB0byB0eXBlLWNoZWNrIGFjY29yZGluZyB0byAndHlwZV9jb25zdHJhaW50Jy4KICAgICIiIgogICAgZGF0dW1fdHlwZSA9ICdpbnB1dCcgaWYgaXNfaW5wdXQgZWxzZSAnb3V0cHV0JwoKICAgIHRyeToKICAgICAgY2hlY2tfY29uc3RyYWludCh0eXBlX2NvbnN0cmFpbnQsIGRhdHVtKQogICAgZXhjZXB0IENvbXBvc2l0ZVR5cGVIaW50RXJyb3IgYXMgZToKICAgICAgcmFpc2Vfd2l0aF90cmFjZWJhY2soVHlwZUNoZWNrRXJyb3IoZS5hcmdzWzBdKSkKICAgIGV4Y2VwdCBTaW1wbGVUeXBlSGludEVycm9yOgogICAgICBlcnJvcl9tc2cgPSAoIkFjY29yZGluZyB0byB0eXBlLWhpbnQgZXhwZWN0ZWQgJXMgc2hvdWxkIGJlIG9mIHR5cGUgJXMuICIKICAgICAgICAgICAgICAgICAgICJJbnN0ZWFkLCByZWNlaXZlZCAnJXMnLCBhbiBpbnN0YW5jZSBvZiB0eXBlICVzLiIKICAgICAgICAgICAgICAgICAgICUgKGRhdHVtX3R5cGUsIHR5cGVfY29uc3RyYWludCwgZGF0dW0sIHR5cGUoZGF0dW0pKSkKICAgICAgcmFpc2Vfd2l0aF90cmFjZWJhY2soVHlwZUNoZWNrRXJyb3IoZXJyb3JfbXNnKSkKCgpjbGFzcyBUeXBlQ2hlY2tDb21iaW5lRm4oY29yZS5Db21iaW5lRm4pOgogICIiIkEgd3JhcHBlciBhcm91bmQgYSBDb21iaW5lRm4gcGVyZm9ybWluZyB0eXBlLWNoZWNraW5nIG9mIGlucHV0IGFuZCBvdXRwdXQuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBjb21iaW5lZm4sIHR5cGVfaGludHMsIGxhYmVsPU5vbmUpOgogICAgc2VsZi5fY29tYmluZWZuID0gY29tYmluZWZuCiAgICBzZWxmLl9pbnB1dF90eXBlX2hpbnQgPSB0eXBlX2hpbnRzLmlucHV0X3R5cGVzCiAgICBzZWxmLl9vdXRwdXRfdHlwZV9oaW50ID0gdHlwZV9oaW50cy5zaW1wbGVfb3V0cHV0X3R5cGUobGFiZWwpCiAgICBzZWxmLl9sYWJlbCA9IGxhYmVsCgogIGRlZiBjcmVhdGVfYWNjdW11bGF0b3Ioc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgIHJldHVybiBzZWxmLl9jb21iaW5lZm4uY3JlYXRlX2FjY3VtdWxhdG9yKCphcmdzLCAqKmt3YXJncykKCiAgZGVmIGFkZF9pbnB1dChzZWxmLCBhY2N1bXVsYXRvciwgZWxlbWVudCwgKmFyZ3MsICoqa3dhcmdzKToKICAgIGlmIHNlbGYuX2lucHV0X3R5cGVfaGludDoKICAgICAgdHJ5OgogICAgICAgIF9jaGVja19pbnN0YW5jZV90eXBlKAogICAgICAgICAgICBzZWxmLl9pbnB1dF90eXBlX2hpbnRbMF1bMF0udHVwbGVfdHlwZXNbMV0sIGVsZW1lbnQsICdlbGVtZW50JywKICAgICAgICAgICAgVHJ1ZSkKICAgICAgZXhjZXB0IFR5cGVDaGVja0Vycm9yIGFzIGU6CiAgICAgICAgZXJyb3JfbXNnID0gKCdSdW50aW1lIHR5cGUgdmlvbGF0aW9uIGRldGVjdGVkIHdpdGhpbiAlczogJwogICAgICAgICAgICAgICAgICAgICAnJXMnICUgKHNlbGYuX2xhYmVsLCBlKSkKICAgICAgICByYWlzZV93aXRoX3RyYWNlYmFjayhUeXBlQ2hlY2tFcnJvcihlcnJvcl9tc2cpKQogICAgcmV0dXJuIHNlbGYuX2NvbWJpbmVmbi5hZGRfaW5wdXQoYWNjdW11bGF0b3IsIGVsZW1lbnQsICphcmdzLCAqKmt3YXJncykKCiAgZGVmIG1lcmdlX2FjY3VtdWxhdG9ycyhzZWxmLCBhY2N1bXVsYXRvcnMsICphcmdzLCAqKmt3YXJncyk6CiAgICByZXR1cm4gc2VsZi5fY29tYmluZWZuLm1lcmdlX2FjY3VtdWxhdG9ycyhhY2N1bXVsYXRvcnMsICphcmdzLCAqKmt3YXJncykKCiAgZGVmIGV4dHJhY3Rfb3V0cHV0KHNlbGYsIGFjY3VtdWxhdG9yLCAqYXJncywgKiprd2FyZ3MpOgogICAgcmVzdWx0ID0gc2VsZi5fY29tYmluZWZuLmV4dHJhY3Rfb3V0cHV0KGFjY3VtdWxhdG9yLCAqYXJncywgKiprd2FyZ3MpCiAgICBpZiBzZWxmLl9vdXRwdXRfdHlwZV9oaW50OgogICAgICB0cnk6CiAgICAgICAgX2NoZWNrX2luc3RhbmNlX3R5cGUoCiAgICAgICAgICAgIHNlbGYuX291dHB1dF90eXBlX2hpbnQudHVwbGVfdHlwZXNbMV0sIHJlc3VsdCwgTm9uZSwgVHJ1ZSkKICAgICAgZXhjZXB0IFR5cGVDaGVja0Vycm9yIGFzIGU6CiAgICAgICAgZXJyb3JfbXNnID0gKCdSdW50aW1lIHR5cGUgdmlvbGF0aW9uIGRldGVjdGVkIHdpdGhpbiAlczogJwogICAgICAgICAgICAgICAgICAgICAnJXMnICUgKHNlbGYuX2xhYmVsLCBlKSkKICAgICAgICByYWlzZV93aXRoX3RyYWNlYmFjayhUeXBlQ2hlY2tFcnJvcihlcnJvcl9tc2cpKQogICAgcmV0dXJuIHJlc3VsdAoKCmNsYXNzIFR5cGVDaGVja1Zpc2l0b3IocGlwZWxpbmUuUGlwZWxpbmVWaXNpdG9yKToKCiAgX2luX2NvbWJpbmUgPSBGYWxzZQoKICBkZWYgZW50ZXJfY29tcG9zaXRlX3RyYW5zZm9ybShzZWxmLCBhcHBsaWVkX3RyYW5zZm9ybSk6CiAgICBpZiBpc2luc3RhbmNlKGFwcGxpZWRfdHJhbnNmb3JtLnRyYW5zZm9ybSwgY29yZS5Db21iaW5lUGVyS2V5KToKICAgICAgc2VsZi5faW5fY29tYmluZSA9IFRydWUKICAgICAgc2VsZi5fd3JhcHBlZF9mbiA9IGFwcGxpZWRfdHJhbnNmb3JtLnRyYW5zZm9ybS5mbiA9IFR5cGVDaGVja0NvbWJpbmVGbigKICAgICAgICAgIGFwcGxpZWRfdHJhbnNmb3JtLnRyYW5zZm9ybS5mbiwKICAgICAgICAgIGFwcGxpZWRfdHJhbnNmb3JtLnRyYW5zZm9ybS5nZXRfdHlwZV9oaW50cygpLAogICAgICAgICAgYXBwbGllZF90cmFuc2Zvcm0uZnVsbF9sYWJlbCkKCiAgZGVmIGxlYXZlX2NvbXBvc2l0ZV90cmFuc2Zvcm0oc2VsZiwgYXBwbGllZF90cmFuc2Zvcm0pOgogICAgaWYgaXNpbnN0YW5jZShhcHBsaWVkX3RyYW5zZm9ybS50cmFuc2Zvcm0sIGNvcmUuQ29tYmluZVBlcktleSk6CiAgICAgIHNlbGYuX2luX2NvbWJpbmUgPSBGYWxzZQoKICBkZWYgdmlzaXRfdHJhbnNmb3JtKHNlbGYsIGFwcGxpZWRfdHJhbnNmb3JtKToKICAgIHRyYW5zZm9ybSA9IGFwcGxpZWRfdHJhbnNmb3JtLnRyYW5zZm9ybQogICAgaWYgaXNpbnN0YW5jZSh0cmFuc2Zvcm0sIGNvcmUuUGFyRG8pOgogICAgICBpZiBzZWxmLl9pbl9jb21iaW5lOgogICAgICAgIGlmIGlzaW5zdGFuY2UodHJhbnNmb3JtLmZuLCBjb3JlLkNvbWJpbmVWYWx1ZXNEb0ZuKToKICAgICAgICAgIHRyYW5zZm9ybS5mbi5jb21iaW5lZm4gPSBzZWxmLl93cmFwcGVkX2ZuCiAgICAgIGVsc2U6CiAgICAgICAgdHJhbnNmb3JtLmZuID0gdHJhbnNmb3JtLmRvZm4gPSBPdXRwdXRDaGVja1dyYXBwZXJEb0ZuKAogICAgICAgICAgICBUeXBlQ2hlY2tXcmFwcGVyRG9GbigKICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5mbiwKICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5nZXRfdHlwZV9oaW50cygpLAogICAgICAgICAgICAgICAgYXBwbGllZF90cmFuc2Zvcm0uZnVsbF9sYWJlbCksCiAgICAgICAgICAgIGFwcGxpZWRfdHJhbnNmb3JtLmZ1bGxfbGFiZWwpCn1yiIIAAChYEgAAAFR5cGVDaGVja0NvbWJpbmVGblgFAAAAY2xhc3NLvEvjh1gbAAAAQWJzdHJhY3REb0ZuV3JhcHBlci53cmFwcGVyWAMAAABkZWZLPktAh1gqAAAAQWJzdHJhY3REb0ZuV3JhcHBlci5faW5zcGVjdF9maW5pc2hfYnVuZGxlWAMAAABkZWZLO0s9h1gcAAAAVHlwZUNoZWNrV3JhcHBlckRvRm4ud3JhcHBlclgDAAAAZGVmS39LgodYKgAAAFR5cGVDaGVja1Zpc2l0b3IubGVhdmVfY29tcG9zaXRlX3RyYW5zZm9ybVgDAAAAZGVmS/FL9IdYIQAAAFR5cGVDaGVja0NvbWJpbmVGbi5leHRyYWN0X291dHB1dFgDAAAAZGVmS9hL44dYJQAAAFR5cGVDaGVja0NvbWJpbmVGbi5tZXJnZV9hY2N1bXVsYXRvcnNYAwAAAGRlZkvVS9eHWCEAAABBYnN0cmFjdERvRm5XcmFwcGVyLmZpbmlzaF9idW5kbGVYAwAAAGRlZktHS0mHWBQAAABUeXBlQ2hlY2tXcmFwcGVyRG9GblgFAAAAY2xhc3NLb0u6h1giAAAAT3V0cHV0Q2hlY2tXcmFwcGVyRG9Gbi5fY2hlY2tfdHlwZVgDAAAAZGVmS19LbYdYHwAAAE91dHB1dENoZWNrV3JhcHBlckRvRm4uX19pbml0X19YAwAAAGRlZktRS1SHWBMAAABBYnN0cmFjdERvRm5XcmFwcGVyWAUAAABjbGFzc0suS0yHWDkAAABUeXBlQ2hlY2tXcmFwcGVyRG9Gbi5fdHlwZV9jaGVja19yZXN1bHQudHlwZV9jaGVja19vdXRwdXRYAwAAAGRlZkuRS5WHWCcAAABUeXBlQ2hlY2tXcmFwcGVyRG9Gbi5fdHlwZV9jaGVja19yZXN1bHRYAwAAAGRlZkuNS56HWBwAAABUeXBlQ2hlY2tXcmFwcGVyRG9Gbi5wcm9jZXNzWAMAAABkZWZLg0uMh1gQAAAAVHlwZUNoZWNrVmlzaXRvclgFAAAAY2xhc3NL5U0CAYdYKQAAAEFic3RyYWN0RG9GbldyYXBwZXIuX2luc3BlY3Rfc3RhcnRfYnVuZGxlWAMAAABkZWZLNUs3h1gmAAAAQWJzdHJhY3REb0ZuV3JhcHBlci5pc19wcm9jZXNzX2JvdW5kZWRYAwAAAGRlZktKS0yHWBYAAABPdXRwdXRDaGVja1dyYXBwZXJEb0ZuWAUAAABjbGFzc0tOS22HWCAAAABUeXBlQ2hlY2tXcmFwcGVyRG9Gbi5fdHlwZV9jaGVja1gDAAAAZGVmS59LuodYHAAAAEFic3RyYWN0RG9GbldyYXBwZXIuX19pbml0X19YAwAAAGRlZksxSzSHWB0AAABUeXBlQ2hlY2tXcmFwcGVyRG9Gbi5fX2luaXRfX1gDAAAAZGVmS3NLfodYIAAAAEFic3RyYWN0RG9GbldyYXBwZXIuc3RhcnRfYnVuZGxlWAMAAABkZWZLQUtDh1glAAAAVHlwZUNoZWNrQ29tYmluZUZuLmNyZWF0ZV9hY2N1bXVsYXRvclgDAAAAZGVmS8ZLyIdYHgAAAE91dHB1dENoZWNrV3JhcHBlckRvRm4ud3JhcHBlclgDAAAAZGVmS1VLXodYGwAAAEFic3RyYWN0RG9GbldyYXBwZXIucHJvY2Vzc1gDAAAAZGVmS0RLRodYHAAAAFR5cGVDaGVja0NvbWJpbmVGbi5hZGRfaW5wdXRYAwAAAGRlZkvJS9SHWBsAAABUeXBlQ2hlY2tDb21iaW5lRm4uX19pbml0X19YAwAAAGRlZkvAS8WHWCAAAABUeXBlQ2hlY2tWaXNpdG9yLnZpc2l0X3RyYW5zZm9ybVgDAAAAZGVmS/VNAgGHWCQAAABBYnN0cmFjdERvRm5XcmFwcGVyLl9pbnNwZWN0X3Byb2Nlc3NYAwAAAGRlZks4SzqHWCoAAABUeXBlQ2hlY2tWaXNpdG9yLmVudGVyX2NvbXBvc2l0ZV90cmFuc2Zvcm1YAwAAAGRlZkvpS/CHdX1yiYIAAChYEgAAAFR5cGVDaGVja0NvbWJpbmVGbmpnZAAAWBQAAABUeXBlQ2hlY2tXcmFwcGVyRG9GbmpnZAAAWBMAAABBYnN0cmFjdERvRm5XcmFwcGVyamdkAABYGwAAAEFic3RyYWN0RG9GbldyYXBwZXIud3JhcHBlcmpnZAAAWBwAAABUeXBlQ2hlY2tXcmFwcGVyRG9Gbi53cmFwcGVyamdkAABYKgAAAFR5cGVDaGVja1Zpc2l0b3IubGVhdmVfY29tcG9zaXRlX3RyYW5zZm9ybWpnZAAAWCAAAABBYnN0cmFjdERvRm5XcmFwcGVyLnN0YXJ0X2J1bmRsZWpnZAAAWCEAAABUeXBlQ2hlY2tDb21iaW5lRm4uZXh0cmFjdF9vdXRwdXRqZ2QAAFgcAAAAVHlwZUNoZWNrV3JhcHBlckRvRm4ucHJvY2Vzc2pnZAAAWCAAAABUeXBlQ2hlY2tWaXNpdG9yLnZpc2l0X3RyYW5zZm9ybWpnZAAAWBAAAABUeXBlQ2hlY2tWaXNpdG9yamdkAABYKgAAAFR5cGVDaGVja1Zpc2l0b3IuZW50ZXJfY29tcG9zaXRlX3RyYW5zZm9ybWpnZAAAWBsAAABBYnN0cmFjdERvRm5XcmFwcGVyLnByb2Nlc3NqZ2QAAFghAAAAQWJzdHJhY3REb0ZuV3JhcHBlci5maW5pc2hfYnVuZGxlamdkAABYHgAAAE91dHB1dENoZWNrV3JhcHBlckRvRm4ud3JhcHBlcmpnZAAAWCYAAABBYnN0cmFjdERvRm5XcmFwcGVyLmlzX3Byb2Nlc3NfYm91bmRlZGpnZAAAWBYAAABPdXRwdXRDaGVja1dyYXBwZXJEb0ZuamdkAABYJQAAAFR5cGVDaGVja0NvbWJpbmVGbi5jcmVhdGVfYWNjdW11bGF0b3JqZ2QAAFgcAAAAVHlwZUNoZWNrQ29tYmluZUZuLmFkZF9pbnB1dGpnZAAAWCUAAABUeXBlQ2hlY2tDb21iaW5lRm4ubWVyZ2VfYWNjdW11bGF0b3JzamdkAAB1an1pAABYHwAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2tyioIAAIWBcouCAAB9coyCAABidHKNggAAVR1hcGFjaGVfYmVhbS51dGlscy5hbm5vdGF0aW9uc3KOggAAKFiQFgAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJEZXByZWNhdGVkIGFuZCBleHBlcmltZW50YWwgYW5ub3RhdGlvbnMuCgpFeHBlcmltZW50YWw6IFNpZ25pZmllcyB0aGF0IGEgcHVibGljIEFQSSAocHVibGljIGNsYXNzLCBtZXRob2Qgb3IgZmllbGQpIGlzCnN1YmplY3QgdG8gaW5jb21wYXRpYmxlIGNoYW5nZXMsIG9yIGV2ZW4gcmVtb3ZhbCwgaW4gYSBmdXR1cmUgcmVsZWFzZS4gTm90ZSB0aGF0CnRoZSBwcmVzZW5jZSBvZiB0aGlzIGFubm90YXRpb24gaW1wbGllcyBub3RoaW5nIGFib3V0IHRoZSBxdWFsaXR5IG9yIHBlcmZvcm1hbmNlCm9mIHRoZSBBUEkgaW4gcXVlc3Rpb24sIG9ubHkgdGhlIGZhY3QgdGhhdCB0aGUgQVBJIG9yIGJlaGF2aW9yIG1heSBjaGFuZ2UgaW4gYW55CndheS4KCkRlcHJlY2F0ZWQ6IFNpZ25pZmllcyB0aGF0IHVzZXJzIGFyZSBkaXNjb3VyYWdlZCBmcm9tIHVzaW5nIGEgcHVibGljIEFQSQp0eXBpY2FsbHkgYmVjYXVzZSBhIGJldHRlciBhbHRlcm5hdGl2ZSBleGlzdHMsIGFuZCB0aGUgY3VycmVudCBmb3JtIG1pZ2h0IGJlCnJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi4KClVzYWdlOgpGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgpBbm5vdGF0aW9ucyBjb21lIGluIHR3byBmbGF2b3JzOiBkZXByZWNhdGVkIGFuZCBleHBlcmltZW50YWwKClRoZSAnZGVwcmVjYXRlZCcgYW5ub3RhdGlvbiByZXF1aXJlcyBhICdzaW5jZSIgcGFyYW1ldGVyIHRvIHNwZWNpZnkKd2hhdCB2ZXJzaW9uIGRlcHJlY2F0ZWQgaXQuCkJvdGggJ2RlcHJlY2F0ZWQnIGFuZCAnZXhwZXJpbWVudGFsJyBhbm5vdGF0aW9ucyBjYW4gc3BlY2lmeSB0aGUKY3VycmVudCByZWNvbW1lbmRlZCB2ZXJzaW9uIHRvIHVzZSBieSBtZWFucyBvZiBhICdjdXJyZW50JyBwYXJhbWV0ZXIuCgpUaGUgZm9sbG93aW5nIGV4YW1wbGUgaWxsdXN0cmF0ZXMgaG93IHRvIGFubm90YXRlIGNvZXhpc3RpbmcgdmVyc2lvbnMgb2YgdGhlCnNhbWUgZnVuY3Rpb24gJ211bHRpcGx5Jy46OgoKICBkZWYgbXVsdGlwbHkoYXJnMSwgYXJnMik6CiAgICBwcmludChhcmcxLCAnKicsIGFyZzIsICc9JywgZW5kPScgJykKICAgIHJldHVybiBhcmcxKmFyZzIKCiMgVGhpcyBhbm5vdGF0aW9uIG1hcmtzICdvbGRfbXVsdGlwbHknIGFzIGRlcHJlY2F0ZWQgc2luY2UgJ3YuMScgYW5kIHN1Z2dlc3RzCiMgdXNpbmcgJ211bHRpcGx5JyBpbnN0ZWFkLjo6CgogIEBkZXByZWNhdGVkKHNpbmNlPSd2LjEnLCBjdXJyZW50PSdtdWx0aXBseScpCiAgZGVmIG9sZF9tdWx0aXBseShhcmcxLCBhcmcyKToKICAgIHJlc3VsdCA9IDAKICAgIGZvciBpIGluIHhyYW5nZShhcmcxKToKICAgICAgICByZXN1bHQgKz0gYXJnMgogICAgcHJpbnQoYXJnMSwgJyonLCBhcmcyLCAnKHRoZSBvbGQgd2F5KT0nLCBlbmQ9JyAnKQogICAgcmV0dXJuIHJlc3VsdAoKIyBUaGlzIGFubm90YXRpb24gbWFya3MgJ2V4cF9tdWx0aXBseScgYXMgZXhwZXJpbWVudGFsIGFuZCBzdWdnZXN0cwojIHVzaW5nICdtdWx0aXBseScgaW5zdGVhZC46OgoKICBAZXhwZXJpbWVudGFsKHNpbmNlPSd2LjEnLCBjdXJyZW50PSdtdWx0aXBseScpCiAgZGVmIGV4cF9tdWx0aXBseShhcmcxLCBhcmcyKToKICAgIHByaW50KGFyZzEsICcqJywgYXJnMiwgJyh0aGUgZXhwZXJpbWVudGFsIHdheSk9JywgZW5kPScgJykKICAgIHJldHVybiAoYXJnMSphcmcyKSooYXJnMS9hcmcyKSooYXJnMi9hcmcxKQoKIyBJZiBhIGN1c3RvbSBtZXNzYWdlIGlzIG5lZWRlZCwgb24gYm90aCBhbm5vdGF0aW9ucyB0eXBlcyB0aGUKIyBhcmcgY3VzdG9tX21lc3NhZ2UgY2FuIGJlIHVzZWQuOjoKCiAgQGV4cGVyaW1lbnRhbChzaW5jZT0ndi4xJywgY3VycmVudD0nbXVsdGlwbHknCiAgICAgICAgICAgICAgICBjdXN0b21fbWVzc2FnZT0nRXhwZXJpbWVudGFsIHNpbmNlICVzaW5jZSUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2UgdXNlICVjdXJyZW50JSBpbnN0ZWQuJykKICBkZWYgZXhwX211bHRpcGx5KGFyZzEsIGFyZzIpOgogICAgcHJpbnQoYXJnMSwgJyonLCBhcmcyLCAnKHRoZSBleHBlcmltZW50YWwgd2F5KT0nLCBlbmQ9JyAnKQogICAgcmV0dXJuIChhcmcxKmFyZzIpKihhcmcxL2FyZzIpKihhcmcyL2FyZzEpCgojIFNldCBhIHdhcm5pbmcgZmlsdGVyIHRvIGNvbnRyb2wgaG93IG9mdGVuIHdhcm5pbmdzIGFyZSBwcm9kdWNlZC46OgoKICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImFsd2F5cyIpCiAgcHJpbnQobXVsdGlwbHkoNSwgNikpCiAgcHJpbnQob2xkX211bHRpcGx5KDUsNikpCiAgcHJpbnQoZXhwX211bHRpcGx5KDUsNikpCiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCB3YXJuaW5ncwpmcm9tIGZ1bmN0b29scyBpbXBvcnQgcGFydGlhbApmcm9tIGZ1bmN0b29scyBpbXBvcnQgd3JhcHMKCgpjbGFzcyBCZWFtRGVwcmVjYXRpb25XYXJuaW5nKERlcHJlY2F0aW9uV2FybmluZyk6CiAgIiIiQmVhbS1zcGVjaWZpYyBkZXByZWNhdGlvbiB3YXJuaW5ncy4iIiIKCgojIERvbid0IGlnbm9yZSBCZWFtRGVwcmVjYXRpb25XYXJuaW5ncy4Kd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdvbmNlJywgQmVhbURlcHJlY2F0aW9uV2FybmluZykKCgpkZWYgYW5ub3RhdGUobGFiZWwsIHNpbmNlLCBjdXJyZW50LCBleHRyYV9tZXNzYWdlLCBjdXN0b21fbWVzc2FnZT1Ob25lKToKICAiIiJEZWNvcmF0ZXMgYW4gQVBJIHdpdGggYSBkZXByZWNhdGVkIG9yIGV4cGVyaW1lbnRhbCBhbm5vdGF0aW9uLgoKICBBcmdzOgogICAgbGFiZWw6IHRoZSBraW5kIG9mIGFubm90YXRpb24gKCdkZXByZWNhdGVkJyBvciAnZXhwZXJpbWVudGFsJykuCiAgICBzaW5jZTogdGhlIHZlcnNpb24gdGhhdCBjYXVzZXMgdGhlIGFubm90YXRpb24uCiAgICBjdXJyZW50OiB0aGUgc3VnZ2VzdGVkIHJlcGxhY2VtZW50IGZ1bmN0aW9uLgogICAgZXh0cmFfbWVzc2FnZTogYW4gb3B0aW9uYWwgYWRkaXRpb25hbCBtZXNzYWdlLgogICAgY3VzdG9tX21lc3NhZ2U6IGlmIHRoZSBkZWZhdWx0IG1lc3NhZ2UgZG9lcyBub3Qgc3VmZmljZSwgdGhlIG1lc3NhZ2UKICAgICAgY2FuIGJlIGNoYW5nZWQgdXNpbmcgdGhpcyBhcmd1bWVudC4gQSBzdHJpbmcKICAgICAgd2hpdCByZXBsYWNlbWVudCB0b2tlbnMuCiAgICAgIEEgcmVwbGVjZW1lbnQgc3RyaW5nIGlzIHdlcmUgdGhlIHByZXZpdXMgYXJncyB3aWxsCiAgICAgIGJlIGxvY2F0ZWQgb24gdGhlIGN1c3RvbSBtZXNzYWdlLgogICAgICBUaGUgZm9sbG93aW5nIHJlcGxhY2VtZW50IHN0cmluZ3MgY2FuIGJlIHVzZWQ6CiAgICAgICVuYW1lJSAtPiBBUEkuX19uYW1lX18KICAgICAgJXNpbmNlJSAtPiBzaW5jZSAoTWFuZGF0b3J5IGZvciB0aGUgZGVjYXByZXRlZCBhbm5vdGF0aW9uKQogICAgICAlY3VycmVudCUgLT4gY3VycmVudAogICAgICAlZXh0cmElIC0+IGV4dHJhX21lc3NhZ2UKCiAgUmV0dXJuczoKICAgIFRoZSBkZWNvcmF0b3IgZm9yIHRoZSBBUEkuCiAgIiIiCiAgZGVmIF9hbm5vdGF0ZShmbmMpOgogICAgQHdyYXBzKGZuYykKICAgIGRlZiBpbm5lcigqYXJncywgKiprd2FyZ3MpOgogICAgICBpZiBsYWJlbCA9PSAnZGVwcmVjYXRlZCc6CiAgICAgICAgd2FybmluZ190eXBlID0gQmVhbURlcHJlY2F0aW9uV2FybmluZwogICAgICBlbHNlOgogICAgICAgIHdhcm5pbmdfdHlwZSA9IEZ1dHVyZVdhcm5pbmcKICAgICAgaWYgY3VzdG9tX21lc3NhZ2UgaXMgTm9uZToKICAgICAgICBtZXNzYWdlID0gJyVzIGlzICVzJyAlIChmbmMuX19uYW1lX18sIGxhYmVsKQogICAgICAgIGlmIGxhYmVsID09ICdkZXByZWNhdGVkJzoKICAgICAgICAgIG1lc3NhZ2UgKz0gJyBzaW5jZSAlcycgJSBzaW5jZQogICAgICAgIG1lc3NhZ2UgKz0gJy4gVXNlICVzIGluc3RlYWQuJyAlIGN1cnJlbnQgaWYgY3VycmVudCBlbHNlICcuJwogICAgICAgIGlmIGV4dHJhX21lc3NhZ2U6CiAgICAgICAgICBtZXNzYWdlICs9ICcgJyArIGV4dHJhX21lc3NhZ2UKICAgICAgZWxzZToKICAgICAgICBpZiBsYWJlbCA9PSAnZGVwcmVjYXRlZCcgYW5kICclc2luY2UlJyBub3QgaW4gY3VzdG9tX21lc3NhZ2U6CiAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIlJlcGxhY2VtZW50IHN0cmluZyAlc2luY2UlIG5vdCBmb3VuZCBvbiBcCiAgICAgICAgICBjdXN0b20gbWVzc2FnZSIpCiAgICAgICAgZW1wdHlBcmcgPSBsYW1iZGEgeDogJycgaWYgeCBpcyBOb25lIGVsc2UgeAogICAgICAgIG1lc3NhZ2UgPSBjdXN0b21fbWVzc2FnZVwKICAgICAgICAucmVwbGFjZSgnJW5hbWUlJywgZm5jLl9fbmFtZV9fKVwKICAgICAgICAucmVwbGFjZSgnJXNpbmNlJScsIGVtcHR5QXJnKHNpbmNlKSlcCiAgICAgICAgLnJlcGxhY2UoJyVjdXJyZW50JScsIGVtcHR5QXJnKGN1cnJlbnQpKVwKICAgICAgICAucmVwbGFjZSgnJWV4dHJhJScsIGVtcHR5QXJnKGV4dHJhX21lc3NhZ2UpKQogICAgICB3YXJuaW5ncy53YXJuKG1lc3NhZ2UsIHdhcm5pbmdfdHlwZSwgc3RhY2tsZXZlbD0yKQogICAgICByZXR1cm4gZm5jKCphcmdzLCAqKmt3YXJncykKICAgIHJldHVybiBpbm5lcgogIHJldHVybiBfYW5ub3RhdGUKCgojIFVzZSBwYXJ0aWFsIGFwcGxpY2F0aW9uIHRvIGN1c3RvbWl6ZSBlYWNoIGFubm90YXRpb24uCiMgJ2N1cnJlbnQnIHdpbGwgYmUgb3B0aW9uYWwgaW4gYm90aCBkZXByZWNhdGVkIGFuZCBleHBlcmltZW50YWwKIyB3aGlsZSAnc2luY2UnIHdpbGwgYmUgbWFuZGF0b3J5IGZvciBkZXByZWNhdGVkLgpkZXByZWNhdGVkID0gcGFydGlhbChhbm5vdGF0ZSwgbGFiZWw9J2RlcHJlY2F0ZWQnLAogICAgICAgICAgICAgICAgICAgICBjdXJyZW50PU5vbmUsIGV4dHJhX21lc3NhZ2U9Tm9uZSkKZXhwZXJpbWVudGFsID0gcGFydGlhbChhbm5vdGF0ZSwgbGFiZWw9J2V4cGVyaW1lbnRhbCcsCiAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudD1Ob25lLCBzaW5jZT1Ob25lLCBleHRyYV9tZXNzYWdlPU5vbmUpCn1yj4IAAChYFgAAAEJlYW1EZXByZWNhdGlvbldhcm5pbmdYBQAAAGNsYXNzS1tLXYdYGAAAAGFubm90YXRlLl9hbm5vdGF0ZS5pbm5lclgDAAAAZGVmS3pLk4dYCAAAAGFubm90YXRlWAMAAABkZWZLY0uVh1gSAAAAYW5ub3RhdGUuX2Fubm90YXRlWAMAAABkZWZLeUuUh3V9cpCCAAAoaqCBAABqvGoAAFgIAAAAYW5ub3RhdGVqvGoAAHVqfWkAAFgdAAAAYXBhY2hlX2JlYW0udXRpbHMuYW5ub3RhdGlvbnNykYIAAIWBcpKCAAB9cpOCAABidHKUggAAVSlhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfbWV0cmljcyhYHxMAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiCkRpcmVjdFJ1bm5lciBpbXBsZW1lbnRhdGlvbiBvZiBNZXRyaWNSZXN1bHRzLiBJdCBpcyBpbiBjaGFyZ2Ugbm90IG9ubHkgb2YKcmVzcG9uZGluZyB0byBxdWVyaWVzIG9mIGN1cnJlbnQgbWV0cmljcywgYnV0IGFsc28gb2Yga2VlcGluZyB0aGUgY29tbW9uCnN0YXRlIGNvbnNpc3RlbnQuCiIiIgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IHRocmVhZGluZwpmcm9tIGJ1aWx0aW5zIGltcG9ydCBvYmplY3QKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKCmZyb20gYXBhY2hlX2JlYW0ubWV0cmljcy5jZWxscyBpbXBvcnQgQ291bnRlckFnZ3JlZ2F0b3IKZnJvbSBhcGFjaGVfYmVhbS5tZXRyaWNzLmNlbGxzIGltcG9ydCBEaXN0cmlidXRpb25BZ2dyZWdhdG9yCmZyb20gYXBhY2hlX2JlYW0ubWV0cmljcy5jZWxscyBpbXBvcnQgR2F1Z2VBZ2dyZWdhdG9yCmZyb20gYXBhY2hlX2JlYW0ubWV0cmljcy5leGVjdXRpb24gaW1wb3J0IE1ldHJpY0tleQpmcm9tIGFwYWNoZV9iZWFtLm1ldHJpY3MuZXhlY3V0aW9uIGltcG9ydCBNZXRyaWNSZXN1bHQKZnJvbSBhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYyBpbXBvcnQgTWV0cmljUmVzdWx0cwoKCmNsYXNzIERpcmVjdE1ldHJpY3MoTWV0cmljUmVzdWx0cyk6CiAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgc2VsZi5fY291bnRlcnMgPSBkZWZhdWx0ZGljdCgKICAgICAgICBsYW1iZGE6IERpcmVjdE1ldHJpYyhDb3VudGVyQWdncmVnYXRvcigpKSkKICAgIHNlbGYuX2Rpc3RyaWJ1dGlvbnMgPSBkZWZhdWx0ZGljdCgKICAgICAgICBsYW1iZGE6IERpcmVjdE1ldHJpYyhEaXN0cmlidXRpb25BZ2dyZWdhdG9yKCkpKQogICAgc2VsZi5fZ2F1Z2VzID0gZGVmYXVsdGRpY3QoCiAgICAgICAgbGFtYmRhOiBEaXJlY3RNZXRyaWMoR2F1Z2VBZ2dyZWdhdG9yKCkpKQoKICBkZWYgX2FwcGx5X29wZXJhdGlvbihzZWxmLCBidW5kbGUsIHVwZGF0ZXMsIG9wKToKICAgIGZvciBrLCB2IGluIHVwZGF0ZXMuY291bnRlcnMuaXRlbXMoKToKICAgICAgb3Aoc2VsZi5fY291bnRlcnNba10sIGJ1bmRsZSwgdikKCiAgICBmb3IgaywgdiBpbiB1cGRhdGVzLmRpc3RyaWJ1dGlvbnMuaXRlbXMoKToKICAgICAgb3Aoc2VsZi5fZGlzdHJpYnV0aW9uc1trXSwgYnVuZGxlLCB2KQoKICAgIGZvciBrLCB2IGluIHVwZGF0ZXMuZ2F1Z2VzLml0ZW1zKCk6CiAgICAgIG9wKHNlbGYuX2dhdWdlc1trXSwgYnVuZGxlLCB2KQoKICBkZWYgY29tbWl0X2xvZ2ljYWwoc2VsZiwgYnVuZGxlLCB1cGRhdGVzKToKICAgIG9wID0gbGFtYmRhIG9iaiwgYnVuZGxlLCB1cGRhdGU6IG9iai5jb21taXRfbG9naWNhbChidW5kbGUsIHVwZGF0ZSkKICAgIHNlbGYuX2FwcGx5X29wZXJhdGlvbihidW5kbGUsIHVwZGF0ZXMsIG9wKQoKICBkZWYgY29tbWl0X3BoeXNpY2FsKHNlbGYsIGJ1bmRsZSwgdXBkYXRlcyk6CiAgICBvcCA9IGxhbWJkYSBvYmosIGJ1bmRsZSwgdXBkYXRlOiBvYmouY29tbWl0X3BoeXNpY2FsKGJ1bmRsZSwgdXBkYXRlKQogICAgc2VsZi5fYXBwbHlfb3BlcmF0aW9uKGJ1bmRsZSwgdXBkYXRlcywgb3ApCgogIGRlZiB1cGRhdGVfcGh5c2ljYWwoc2VsZiwgYnVuZGxlLCB1cGRhdGVzKToKICAgIG9wID0gbGFtYmRhIG9iaiwgYnVuZGxlLCB1cGRhdGU6IG9iai51cGRhdGVfcGh5c2ljYWwoYnVuZGxlLCB1cGRhdGUpCiAgICBzZWxmLl9hcHBseV9vcGVyYXRpb24oYnVuZGxlLCB1cGRhdGVzLCBvcCkKCiAgZGVmIHF1ZXJ5KHNlbGYsIGZpbHRlcj1Ob25lKToKICAgIGNvdW50ZXJzID0gW01ldHJpY1Jlc3VsdChNZXRyaWNLZXkoay5zdGVwLCBrLm1ldHJpYyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi5leHRyYWN0X2NvbW1pdHRlZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYuZXh0cmFjdF9sYXRlc3RfYXR0ZW1wdGVkKCkpCiAgICAgICAgICAgICAgICBmb3IgaywgdiBpbiBzZWxmLl9jb3VudGVycy5pdGVtcygpCiAgICAgICAgICAgICAgICBpZiBzZWxmLm1hdGNoZXMoZmlsdGVyLCBrKV0KICAgIGRpc3RyaWJ1dGlvbnMgPSBbTWV0cmljUmVzdWx0KE1ldHJpY0tleShrLnN0ZXAsIGsubWV0cmljKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYuZXh0cmFjdF9jb21taXR0ZWQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYuZXh0cmFjdF9sYXRlc3RfYXR0ZW1wdGVkKCkpCiAgICAgICAgICAgICAgICAgICAgIGZvciBrLCB2IGluIHNlbGYuX2Rpc3RyaWJ1dGlvbnMuaXRlbXMoKQogICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLm1hdGNoZXMoZmlsdGVyLCBrKV0KICAgIGdhdWdlcyA9IFtNZXRyaWNSZXN1bHQoTWV0cmljS2V5KGsuc3RlcCwgay5tZXRyaWMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2LmV4dHJhY3RfY29tbWl0dGVkKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHYuZXh0cmFjdF9sYXRlc3RfYXR0ZW1wdGVkKCkpCiAgICAgICAgICAgICAgZm9yIGssIHYgaW4gc2VsZi5fZ2F1Z2VzLml0ZW1zKCkKICAgICAgICAgICAgICBpZiBzZWxmLm1hdGNoZXMoZmlsdGVyLCBrKV0KCiAgICByZXR1cm4ge3NlbGYuQ09VTlRFUlM6IGNvdW50ZXJzLAogICAgICAgICAgICBzZWxmLkRJU1RSSUJVVElPTlM6IGRpc3RyaWJ1dGlvbnMsCiAgICAgICAgICAgIHNlbGYuR0FVR0VTOiBnYXVnZXN9CgoKY2xhc3MgRGlyZWN0TWV0cmljKG9iamVjdCk6CiAgIiIiIEtlZXBzIGEgY29uc2lzdGVudCBzdGF0ZSBmb3IgYSBzaW5nbGUgbWV0cmljLgoKICBJdCBrZWVwcyB0cmFjayBvZiB0aGUgbWV0cmljJ3MgcGh5c2ljYWwgYW5kIGxvZ2ljYWwgdXBkYXRlcy4KICBJdCdzIHRocmVhZCBzYWZlLgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBhZ2dyZWdhdG9yKToKICAgIHNlbGYuYWdncmVnYXRvciA9IGFnZ3JlZ2F0b3IKICAgIHNlbGYuX2F0dGVtcHRlZF9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQogICAgc2VsZi5maW5pc2hlZF9hdHRlbXB0ZWQgPSBhZ2dyZWdhdG9yLmlkZW50aXR5X2VsZW1lbnQoKQogICAgc2VsZi5pbmZsaWdodF9hdHRlbXB0ZWQgPSB7fQogICAgc2VsZi5fY29tbWl0dGVkX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCiAgICBzZWxmLmZpbmlzaGVkX2NvbW1pdHRlZCA9IGFnZ3JlZ2F0b3IuaWRlbnRpdHlfZWxlbWVudCgpCgogIGRlZiBjb21taXRfbG9naWNhbChzZWxmLCBidW5kbGUsIHVwZGF0ZSk6CiAgICB3aXRoIHNlbGYuX2NvbW1pdHRlZF9sb2NrOgogICAgICBzZWxmLmZpbmlzaGVkX2NvbW1pdHRlZCA9IHNlbGYuYWdncmVnYXRvci5jb21iaW5lKHVwZGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbmlzaGVkX2NvbW1pdHRlZCkKCiAgZGVmIGNvbW1pdF9waHlzaWNhbChzZWxmLCBidW5kbGUsIHVwZGF0ZSk6CiAgICB3aXRoIHNlbGYuX2F0dGVtcHRlZF9sb2NrOgogICAgICBzZWxmLmluZmxpZ2h0X2F0dGVtcHRlZFtidW5kbGVdID0gdXBkYXRlCiAgICAgIHNlbGYuZmluaXNoZWRfYXR0ZW1wdGVkID0gc2VsZi5hZ2dyZWdhdG9yLmNvbWJpbmUodXBkYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmluaXNoZWRfYXR0ZW1wdGVkKQogICAgICBkZWwgc2VsZi5pbmZsaWdodF9hdHRlbXB0ZWRbYnVuZGxlXQoKICBkZWYgdXBkYXRlX3BoeXNpY2FsKHNlbGYsIGJ1bmRsZSwgdXBkYXRlKToKICAgIHNlbGYuaW5mbGlnaHRfYXR0ZW1wdGVkW2J1bmRsZV0gPSB1cGRhdGUKCiAgZGVmIGV4dHJhY3RfY29tbWl0dGVkKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuYWdncmVnYXRvci5yZXN1bHQoc2VsZi5maW5pc2hlZF9jb21taXR0ZWQpCgogIGRlZiBleHRyYWN0X2xhdGVzdF9hdHRlbXB0ZWQoc2VsZik6CiAgICByZXMgPSBzZWxmLmZpbmlzaGVkX2F0dGVtcHRlZAogICAgZm9yIF8sIHUgaW4gc2VsZi5pbmZsaWdodF9hdHRlbXB0ZWQuaXRlbXMoKToKICAgICAgcmVzID0gc2VsZi5hZ2dyZWdhdG9yLmNvbWJpbmUocmVzLCB1KQoKICAgIHJldHVybiBzZWxmLmFnZ3JlZ2F0b3IucmVzdWx0KHJlcykKfXKVggAAKFgMAAAARGlyZWN0TWV0cmljWAUAAABjbGFzc0taS4CHWBsAAABEaXJlY3RNZXRyaWMuY29tbWl0X2xvZ2ljYWxYAwAAAGRlZktoS2yHWB0AAABEaXJlY3RNZXRyaWNzLmNvbW1pdF9waHlzaWNhbFgDAAAAZGVmSzxLP4dYHQAAAERpcmVjdE1ldHJpY3MudXBkYXRlX3BoeXNpY2FsWAMAAABkZWZLQEtDh1geAAAARGlyZWN0TWV0cmljLmV4dHJhY3RfY29tbWl0dGVkWAMAAABkZWZLd0t5h1gWAAAARGlyZWN0TWV0cmljcy5fX2luaXRfX1gDAAAAZGVmSyZLLYdYDQAAAERpcmVjdE1ldHJpY3NYBQAAAGNsYXNzSyVLWIdYFQAAAERpcmVjdE1ldHJpYy5fX2luaXRfX1gDAAAAZGVmS2BLZ4dYHAAAAERpcmVjdE1ldHJpY3MuY29tbWl0X2xvZ2ljYWxYAwAAAGRlZks4SzuHWCUAAABEaXJlY3RNZXRyaWMuZXh0cmFjdF9sYXRlc3RfYXR0ZW1wdGVkWAMAAABkZWZLekuAh1gcAAAARGlyZWN0TWV0cmljLnVwZGF0ZV9waHlzaWNhbFgDAAAAZGVmS3RLdodYHgAAAERpcmVjdE1ldHJpY3MuX2FwcGx5X29wZXJhdGlvblgDAAAAZGVmSy5LN4dYHAAAAERpcmVjdE1ldHJpYy5jb21taXRfcGh5c2ljYWxYAwAAAGRlZkttS3OHWBMAAABEaXJlY3RNZXRyaWNzLnF1ZXJ5WAMAAABkZWZLREtYh3V9cpaCAAAoWAwAAABEaXJlY3RNZXRyaWNqBloAAFgbAAAARGlyZWN0TWV0cmljLmNvbW1pdF9sb2dpY2FsagZaAABYHQAAAERpcmVjdE1ldHJpY3MuY29tbWl0X3BoeXNpY2FsagZaAABYHQAAAERpcmVjdE1ldHJpY3MudXBkYXRlX3BoeXNpY2FsagZaAABYHgAAAERpcmVjdE1ldHJpYy5leHRyYWN0X2NvbW1pdHRlZGoGWgAAWA0AAABEaXJlY3RNZXRyaWNzagZaAABYHAAAAERpcmVjdE1ldHJpY3MuY29tbWl0X2xvZ2ljYWxqBloAAFglAAAARGlyZWN0TWV0cmljLmV4dHJhY3RfbGF0ZXN0X2F0dGVtcHRlZGoGWgAAWBwAAABEaXJlY3RNZXRyaWMudXBkYXRlX3BoeXNpY2FsagZaAABYHAAAAERpcmVjdE1ldHJpYy5jb21taXRfcGh5c2ljYWxqBloAAFgTAAAARGlyZWN0TWV0cmljcy5xdWVyeWoGWgAAdWp9aQAAWCkAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfbWV0cmljc3KXggAAhYFymIIAAH1ymYIAAGJ0VR1hcGFjaGVfYmVhbS5jb2RlcnMub2JzZXJ2YWJsZShYugUAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKCiIiIk9ic2VydmFibGUgYmFzZSBjbGFzcyBmb3IgaXRlcmFibGVzLgoKRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoiIiIKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdAoKCmNsYXNzIE9ic2VydmFibGVNaXhpbihvYmplY3QpOgogICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgQW4gb2JzZXJ2YWJsZSBpdGVyYWJsZS4KCiAgU3ViY2xhc3NlcyBuZWVkIHRvIGNhbGwgc2VsZi5ub3RpZnlfb2JzZXJ2ZXJzIHdpdGggYW55IG9iamVjdCB5aWVsZGVkLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZik6CiAgICBzZWxmLm9ic2VydmVycyA9IFtdCgogIGRlZiByZWdpc3Rlcl9vYnNlcnZlcihzZWxmLCBjYWxsYmFjayk6CiAgICBzZWxmLm9ic2VydmVycy5hcHBlbmQoY2FsbGJhY2spCgogIGRlZiBub3RpZnlfb2JzZXJ2ZXJzKHNlbGYsIHZhbHVlLCAqKmt3YXJncyk6CiAgICAjIHNlbGYub2JzZXJ2ZXJzIGlzIGFsbW9zdCBhbHdheXMgZW1wdHkKICAgIGlmIHNlbGYub2JzZXJ2ZXJzOgogICAgICBmb3IgbyBpbiBzZWxmLm9ic2VydmVyczoKICAgICAgICBvKHZhbHVlLCAqKmt3YXJncykKfXKaggAAKFgPAAAAT2JzZXJ2YWJsZU1peGluWAUAAABjbGFzc0scSy+HWCEAAABPYnNlcnZhYmxlTWl4aW4ucmVnaXN0ZXJfb2JzZXJ2ZXJYAwAAAGRlZksnSymHWBgAAABPYnNlcnZhYmxlTWl4aW4uX19pbml0X19YAwAAAGRlZkskSyaHWCAAAABPYnNlcnZhYmxlTWl4aW4ubm90aWZ5X29ic2VydmVyc1gDAAAAZGVmSypLL4d1fXKbggAAKFgPAAAAT2JzZXJ2YWJsZU1peGluWB0AAABhcGFjaGVfYmVhbS5jb2RlcnMub2JzZXJ2YWJsZXKcggAAWCEAAABPYnNlcnZhYmxlTWl4aW4ucmVnaXN0ZXJfb2JzZXJ2ZXJqnIIAAFggAAAAT2JzZXJ2YWJsZU1peGluLm5vdGlmeV9vYnNlcnZlcnNqnIIAAHVqfWkAAFgdAAAAYXBhY2hlX2JlYW0uY29kZXJzLm9ic2VydmFibGVynYIAAIWBcp6CAAB9cp+CAABidHKgggAAVRVhcGFjaGVfYmVhbS5pby5pb2Jhc2UoWHe+AAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIlNvdXJjZXMgYW5kIHNpbmtzLgoKQSBTb3VyY2UgbWFuYWdlcyByZWNvcmQtb3JpZW50ZWQgZGF0YSBpbnB1dCBmcm9tIGEgcGFydGljdWxhciBraW5kIG9mIHNvdXJjZQooZS5nLiBhIHNldCBvZiBmaWxlcywgYSBkYXRhYmFzZSB0YWJsZSwgZXRjLikuIFRoZSByZWFkZXIoKSBtZXRob2Qgb2YgYSBzb3VyY2UKcmV0dXJucyBhIHJlYWRlciBvYmplY3Qgc3VwcG9ydGluZyB0aGUgaXRlcmF0b3IgcHJvdG9jb2w7IGl0ZXJhdGlvbiB5aWVsZHMKcmF3IHJlY29yZHMgb2YgdW5wcm9jZXNzZWQsIHNlcmlhbGl6ZWQgZGF0YS4KCgpBIFNpbmsgbWFuYWdlcyByZWNvcmQtb3JpZW50ZWQgZGF0YSBvdXRwdXQgdG8gYSBwYXJ0aWN1bGFyIGtpbmQgb2Ygc2luawooZS5nLiBhIHNldCBvZiBmaWxlcywgYSBkYXRhYmFzZSB0YWJsZSwgZXRjLikuIFRoZSB3cml0ZXIoKSBtZXRob2Qgb2YgYSBzaW5rCnJldHVybnMgYSB3cml0ZXIgb2JqZWN0IHN1cHBvcnRpbmcgd3JpdGluZyByZWNvcmRzIG9mIHNlcmlhbGl6ZWQgZGF0YSB0bwp0aGUgc2luay4KIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IG1hdGgKaW1wb3J0IHJhbmRvbQppbXBvcnQgdXVpZApmcm9tIGJ1aWx0aW5zIGltcG9ydCBvYmplY3QKZnJvbSBidWlsdGlucyBpbXBvcnQgcmFuZ2UKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZQoKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgY29kZXJzCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IHB2YWx1ZQpmcm9tIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5IGltcG9ydCBjb21tb25fdXJucwpmcm9tIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5IGltcG9ydCBweXRob25fdXJucwpmcm9tIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaSBpbXBvcnQgYmVhbV9ydW5uZXJfYXBpX3BiMgpmcm9tIGFwYWNoZV9iZWFtLnB2YWx1ZSBpbXBvcnQgQXNJdGVyCmZyb20gYXBhY2hlX2JlYW0ucHZhbHVlIGltcG9ydCBBc1NpbmdsZXRvbgpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IGNvcmUKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBwdHJhbnNmb3JtCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgd2luZG93CmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5IGltcG9ydCBEaXNwbGF5RGF0YUl0ZW0KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXkgaW1wb3J0IEhhc0Rpc3BsYXlEYXRhCmZyb20gYXBhY2hlX2JlYW0udXRpbHMgaW1wb3J0IHRpbWVzdGFtcApmcm9tIGFwYWNoZV9iZWFtLnV0aWxzIGltcG9ydCB1cm5zCmZyb20gYXBhY2hlX2JlYW0udXRpbHMud2luZG93ZWRfdmFsdWUgaW1wb3J0IFdpbmRvd2VkVmFsdWUKCl9fYWxsX18gPSBbJ0JvdW5kZWRTb3VyY2UnLCAnUmFuZ2VUcmFja2VyJywgJ1JlYWQnLCAnUmVzdHJpY3Rpb25UcmFja2VyJywKICAgICAgICAgICAnU2luaycsICdXcml0ZScsICdXcml0ZXInXQoKCiMgRW5jYXBzdWxhdGVzIGluZm9ybWF0aW9uIGFib3V0IGEgYnVuZGxlIG9mIGEgc291cmNlIGdlbmVyYXRlZCB3aGVuIG1ldGhvZAojIEJvdW5kZWRTb3VyY2Uuc3BsaXQoKSBpcyBpbnZva2VkLgojIFRoaXMgaXMgYSBuYW1lZCA0LXR1cGxlIHRoYXQgaGFzIGZvbGxvd2luZyBmaWVsZHMuCiMgKiB3ZWlnaHQgLSBhIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHNpemUgb2YgdGhlIGJ1bmRsZS4gVGhpcyB2YWx1ZSB3aWxsCiMgICAgICAgICAgICBiZSB1c2VkIHRvIGNvbXBhcmUgdGhlIHJlbGF0aXZlIHNpemVzIG9mIGJ1bmRsZXMgZ2VuZXJhdGVkIGJ5IHRoZQojICAgICAgICAgICAgY3VycmVudCBzb3VyY2UuCiMgICAgICAgICAgICBUaGUgd2VpZ2h0IHJldHVybmVkIGhlcmUgY291bGQgYmUgc3BlY2lmaWVkIHVzaW5nIGEgdW5pdCBvZiB5b3VyCiMgICAgICAgICAgICBjaG9pY2UgKGZvciBleGFtcGxlLCBidW5kbGVzIG9mIHNpemVzIDEwME1CLCAyMDBNQiwgYW5kIDcwME1CIG1heQojICAgICAgICAgICAgc3BlY2lmeSB3ZWlnaHRzIDEwMCwgMjAwLCA3MDAgb3IgMSwgMiwgNykgYnV0IGFsbCBidW5kbGVzIG9mIGEKIyAgICAgICAgICAgIHNvdXJjZSBzaG91bGQgc3BlY2lmeSB0aGUgd2VpZ2h0IHVzaW5nIHRoZSBzYW1lIHVuaXQuCiMgKiBzb3VyY2UgLSBhIEJvdW5kZWRTb3VyY2Ugb2JqZWN0IGZvciB0aGUgIGJ1bmRsZS4KIyAqIHN0YXJ0X3Bvc2l0aW9uIC0gc3RhcnRpbmcgcG9zaXRpb24gb2YgdGhlIGJ1bmRsZQojICogc3RvcF9wb3NpdGlvbiAtIGVuZGluZyBwb3NpdGlvbiBvZiB0aGUgYnVuZGxlLgojCiMgVHlwZSBmb3Igc3RhcnQgYW5kIHN0b3AgcG9zaXRpb25zIGFyZSBzcGVjaWZpYyB0byB0aGUgYm91bmRlZCBzb3VyY2UgYW5kIG11c3QKIyBiZSBjb25zaXN0ZW50IHRocm91Z2hvdXQuClNvdXJjZUJ1bmRsZSA9IG5hbWVkdHVwbGUoCiAgICAnU291cmNlQnVuZGxlJywKICAgICd3ZWlnaHQgc291cmNlIHN0YXJ0X3Bvc2l0aW9uIHN0b3BfcG9zaXRpb24nKQoKCmNsYXNzIFNvdXJjZUJhc2UoSGFzRGlzcGxheURhdGEsIHVybnMuUnVubmVyQXBpRm4pOgogICIiIkJhc2UgY2xhc3MgZm9yIGFsbCBzb3VyY2VzIHRoYXQgY2FuIGJlIHBhc3NlZCB0byBiZWFtLmlvLlJlYWQoLi4uKS4KICAiIiIKICB1cm5zLlJ1bm5lckFwaUZuLnJlZ2lzdGVyX3BpY2tsZV91cm4ocHl0aG9uX3VybnMuUElDS0xFRF9TT1VSQ0UpCgoKY2xhc3MgQm91bmRlZFNvdXJjZShTb3VyY2VCYXNlKToKICAiIiJBIHNvdXJjZSB0aGF0IHJlYWRzIGEgZmluaXRlIGFtb3VudCBvZiBpbnB1dCByZWNvcmRzLgoKICBUaGlzIGNsYXNzIGRlZmluZXMgZm9sbG93aW5nIG9wZXJhdGlvbnMgd2hpY2ggY2FuIGJlIHVzZWQgdG8gcmVhZCB0aGUgc291cmNlCiAgZWZmaWNpZW50bHkuCgogICogU2l6ZSBlc3RpbWF0aW9uIC0gbWV0aG9kIGBgZXN0aW1hdGVfc2l6ZSgpYGAgbWF5IHJldHVybiBhbiBhY2N1cmF0ZQogICAgZXN0aW1hdGlvbiBpbiBieXRlcyBmb3IgdGhlIHNpemUgb2YgdGhlIHNvdXJjZS4KICAqIFNwbGl0dGluZyBpbnRvIGJ1bmRsZXMgb2YgYSBnaXZlbiBzaXplIC0gbWV0aG9kIGBgc3BsaXQoKWBgIGNhbiBiZSB1c2VkIHRvCiAgICBzcGxpdCB0aGUgc291cmNlIGludG8gYSBzZXQgb2Ygc3ViLXNvdXJjZXMgKGJ1bmRsZXMpIGJhc2VkIG9uIGEgZGVzaXJlZAogICAgYnVuZGxlIHNpemUuCiAgKiBHZXR0aW5nIGEgUmFuZ2VUcmFja2VyIC0gbWV0aG9kIGBgZ2V0X3JhbmdlX3RyYWNrZXIoKWBgIHNob3VsZCByZXR1cm4gYQogICAgYGBSYW5nZVRyYWNrZXJgYCBvYmplY3QgZm9yIGEgZ2l2ZW4gcG9zaXRpb24gcmFuZ2UgZm9yIHRoZSBwb3NpdGlvbiB0eXBlCiAgICBvZiB0aGUgcmVjb3JkcyByZXR1cm5lZCBieSB0aGUgc291cmNlLgogICogUmVhZGluZyB0aGUgZGF0YSAtIG1ldGhvZCBgYHJlYWQoKWBgIGNhbiBiZSB1c2VkIHRvIHJlYWQgZGF0YSBmcm9tIHRoZQogICAgc291cmNlIHdoaWxlIHJlc3BlY3RpbmcgdGhlIGJvdW5kYXJpZXMgZGVmaW5lZCBieSBhIGdpdmVuCiAgICBgYFJhbmdlVHJhY2tlcmBgLgoKICBBIHJ1bm5lciB3aWxsIHBlcmZvcm0gcmVhZGluZyB0aGUgc291cmNlIGluIHR3byBzdGVwcy4KCiAgKDEpIE1ldGhvZCBgYGdldF9yYW5nZV90cmFja2VyKClgYCB3aWxsIGJlIGludm9rZWQgd2l0aCBzdGFydCBhbmQgZW5kCiAgICAgIHBvc2l0aW9ucyB0byBvYnRhaW4gYSBgYFJhbmdlVHJhY2tlcmBgIGZvciB0aGUgcmFuZ2Ugb2YgcG9zaXRpb25zIHRoZQogICAgICBydW5uZXIgaW50ZW5kcyB0byByZWFkLiBTb3VyY2UgbXVzdCBkZWZpbmUgYSBkZWZhdWx0IGluaXRpYWwgc3RhcnQgYW5kIGVuZAogICAgICBwb3NpdGlvbiByYW5nZS4gVGhlc2UgcG9zaXRpb25zIG11c3QgYmUgdXNlZCBpZiB0aGUgc3RhcnQgYW5kL29yIGVuZAogICAgICBwb3NpdGlvbnMgcGFzc2VkIHRvIHRoZSBtZXRob2QgYGBnZXRfcmFuZ2VfdHJhY2tlcigpYGAgYXJlIGBgTm9uZWBgCiAgKDIpIE1ldGhvZCByZWFkKCkgd2lsbCBiZSBpbnZva2VkIHdpdGggdGhlIGBgUmFuZ2VUcmFja2VyYGAgb2J0YWluZWQgaW4gdGhlCiAgICAgIHByZXZpb3VzIHN0ZXAuCgogICoqTXV0YWJpbGl0eSoqCgogIEEgYGBCb3VuZGVkU291cmNlYGAgb2JqZWN0IHNob3VsZCBub3QgYmUgbXV0YXRlZCB3aGlsZQogIGl0cyBtZXRob2RzIChmb3IgZXhhbXBsZSwgYGByZWFkKClgYCkgYXJlIGJlaW5nIGludm9rZWQgYnkgYSBydW5uZXIuIFJ1bm5lcgogIGltcGxlbWVudGF0aW9ucyBtYXkgaW52b2tlIG1ldGhvZHMgb2YgYGBCb3VuZGVkU291cmNlYGAgb2JqZWN0cyB0aHJvdWdoCiAgbXVsdGktdGhyZWFkZWQgYW5kL29yIHJlZW50cmFudCBleGVjdXRpb24gbW9kZXMuCiAgIiIiCgogIGRlZiBlc3RpbWF0ZV9zaXplKHNlbGYpOgogICAgIiIiRXN0aW1hdGVzIHRoZSBzaXplIG9mIHNvdXJjZSBpbiBieXRlcy4KCiAgICBBbiBlc3RpbWF0ZSBvZiB0aGUgdG90YWwgc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBkYXRhIHRoYXQgd291bGQgYmUgcmVhZAogICAgZnJvbSB0aGlzIHNvdXJjZS4gVGhpcyBlc3RpbWF0ZSBpcyBpbiB0ZXJtcyBvZiBleHRlcm5hbCBzdG9yYWdlIHNpemUsCiAgICBiZWZvcmUgcGVyZm9ybWluZyBkZWNvbXByZXNzaW9uIG9yIG90aGVyIHByb2Nlc3NpbmcuCgogICAgUmV0dXJuczoKICAgICAgZXN0aW1hdGVkIHNpemUgb2YgdGhlIHNvdXJjZSBpZiB0aGUgc2l6ZSBjYW4gYmUgZGV0ZXJtaW5lZCwgYGBOb25lYGAKICAgICAgb3RoZXJ3aXNlLgogICAgIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiBzcGxpdChzZWxmLCBkZXNpcmVkX2J1bmRsZV9zaXplLCBzdGFydF9wb3NpdGlvbj1Ob25lLCBzdG9wX3Bvc2l0aW9uPU5vbmUpOgogICAgIiIiU3BsaXRzIHRoZSBzb3VyY2UgaW50byBhIHNldCBvZiBidW5kbGVzLgoKICAgIEJ1bmRsZXMgc2hvdWxkIGJlIGFwcHJveGltYXRlbHkgb2Ygc2l6ZSBgYGRlc2lyZWRfYnVuZGxlX3NpemVgYCBieXRlcy4KCiAgICBBcmdzOgogICAgICBkZXNpcmVkX2J1bmRsZV9zaXplOiB0aGUgZGVzaXJlZCBzaXplIChpbiBieXRlcykgb2YgdGhlIGJ1bmRsZXMgcmV0dXJuZWQuCiAgICAgIHN0YXJ0X3Bvc2l0aW9uOiBpZiBzcGVjaWZpZWQgdGhlIGdpdmVuIHBvc2l0aW9uIG11c3QgYmUgdXNlZCBhcyB0aGUKICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBidW5kbGUuCiAgICAgIHN0b3BfcG9zaXRpb246IGlmIHNwZWNpZmllZCB0aGUgZ2l2ZW4gcG9zaXRpb24gbXVzdCBiZSB1c2VkIGFzIHRoZSBlbmRpbmcKICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gb2YgdGhlIGxhc3QgYnVuZGxlLgogICAgUmV0dXJuczoKICAgICAgYW4gaXRlcmF0b3Igb2Ygb2JqZWN0cyBvZiB0eXBlICdTb3VyY2VCdW5kbGUnIHRoYXQgZ2l2ZXMgaW5mb3JtYXRpb24gYWJvdXQKICAgICAgdGhlIGdlbmVyYXRlZCBidW5kbGVzLgogICAgIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiBnZXRfcmFuZ2VfdHJhY2tlcihzZWxmLCBzdGFydF9wb3NpdGlvbiwgc3RvcF9wb3NpdGlvbik6CiAgICAiIiJSZXR1cm5zIGEgUmFuZ2VUcmFja2VyIGZvciBhIGdpdmVuIHBvc2l0aW9uIHJhbmdlLgoKICAgIEZyYW1ld29yayBtYXkgaW52b2tlIGBgcmVhZCgpYGAgbWV0aG9kIHdpdGggdGhlIFJhbmdlVHJhY2tlciBvYmplY3QgcmV0dXJuZWQKICAgIGhlcmUgdG8gcmVhZCBkYXRhIGZyb20gdGhlIHNvdXJjZS4KCiAgICBBcmdzOgogICAgICBzdGFydF9wb3NpdGlvbjogc3RhcnRpbmcgcG9zaXRpb24gb2YgdGhlIHJhbmdlLiBJZiAnTm9uZScgZGVmYXVsdCBzdGFydAogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gb2YgdGhlIHNvdXJjZSBtdXN0IGJlIHVzZWQuCiAgICAgIHN0b3BfcG9zaXRpb246ICBlbmRpbmcgcG9zaXRpb24gb2YgdGhlIHJhbmdlLiBJZiAnTm9uZScgZGVmYXVsdCBzdG9wCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiBvZiB0aGUgc291cmNlIG11c3QgYmUgdXNlZC4KICAgIFJldHVybnM6CiAgICAgIGEgYGBSYW5nZVRyYWNrZXJgYCBmb3IgdGhlIGdpdmVuIHBvc2l0aW9uIHJhbmdlLgogICAgIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiByZWFkKHNlbGYsIHJhbmdlX3RyYWNrZXIpOgogICAgIiIiUmV0dXJucyBhbiBpdGVyYXRvciB0aGF0IHJlYWRzIGRhdGEgZnJvbSB0aGUgc291cmNlLgoKICAgIFRoZSByZXR1cm5lZCBzZXQgb2YgZGF0YSBtdXN0IHJlc3BlY3QgdGhlIGJvdW5kYXJpZXMgZGVmaW5lZCBieSB0aGUgZ2l2ZW4KICAgIGBgUmFuZ2VUcmFja2VyYGAgb2JqZWN0LiBGb3IgZXhhbXBsZToKCiAgICAgICogUmV0dXJuZWQgc2V0IG9mIGRhdGEgbXVzdCBiZSBmb3IgdGhlIHJhbmdlCiAgICAgICAgYGBbcmFuZ2VfdHJhY2tlci5zdGFydF9wb3NpdGlvbiwgcmFuZ2VfdHJhY2tlci5zdG9wX3Bvc2l0aW9uKWBgLiBOb3RlCiAgICAgICAgdGhhdCBhIHNvdXJjZSBtYXkgZGVjaWRlIHRvIHJldHVybiByZWNvcmRzIHRoYXQgc3RhcnQgYWZ0ZXIKICAgICAgICBgYHJhbmdlX3RyYWNrZXIuc3RvcF9wb3NpdGlvbmBgLiBTZWUgZG9jdW1lbnRhdGlvbiBpbiBjbGFzcwogICAgICAgIGBgUmFuZ2VUcmFja2VyYGAgZm9yIG1vcmUgZGV0YWlscy4gQWxzbywgbm90ZSB0aGF0IGZyYW1ld29yayBtaWdodAogICAgICAgIGludm9rZSBgYHJhbmdlX3RyYWNrZXIudHJ5X3NwbGl0KClgYCB0byBwZXJmb3JtIGR5bmFtaWMgc3BsaXQKICAgICAgICBvcGVyYXRpb25zLiByYW5nZV90cmFja2VyLnN0b3BfcG9zaXRpb24gbWF5IGJlIHVwZGF0ZWQKICAgICAgICBkeW5hbWljYWxseSBkdWUgdG8gc3VjY2Vzc2Z1bCBkeW5hbWljIHNwbGl0IG9wZXJhdGlvbnMuCiAgICAgICogTWV0aG9kIGBgcmFuZ2VfdHJhY2tlci50cnlfc3BsaXQoKWBgIG11c3QgYmUgaW52b2tlZCBmb3IgZXZlcnkgcmVjb3JkCiAgICAgICAgdGhhdCBzdGFydHMgYXQgYSBzcGxpdCBwb2ludC4KICAgICAgKiBNZXRob2QgYGByYW5nZV90cmFja2VyLnJlY29yZF9jdXJyZW50X3Bvc2l0aW9uKClgYCBtYXkgYmUgaW52b2tlZCBmb3IKICAgICAgICByZWNvcmRzIHRoYXQgZG8gbm90IHN0YXJ0IGF0IHNwbGl0IHBvaW50cy4KCiAgICBBcmdzOgogICAgICByYW5nZV90cmFja2VyOiBhIGBgUmFuZ2VUcmFja2VyYGAgd2hvc2UgYm91bmRhcmllcyBtdXN0IGJlIHJlc3BlY3RlZAogICAgICAgICAgICAgICAgICAgICB3aGVuIHJlYWRpbmcgZGF0YSBmcm9tIHRoZSBzb3VyY2UuIEEgcnVubmVyIHRoYXQgcmVhZHMgdGhpcwogICAgICAgICAgICAgICAgICAgICBzb3VyY2UgbXVzcyBwYXNzIGEgYGBSYW5nZVRyYWNrZXJgYCBvYmplY3QgdGhhdCBpcyBub3QKICAgICAgICAgICAgICAgICAgICAgYGBOb25lYGAuCiAgICBSZXR1cm5zOgogICAgICBhbiBpdGVyYXRvciBvZiBkYXRhIHJlYWQgYnkgdGhlIHNvdXJjZS4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgZGVmYXVsdF9vdXRwdXRfY29kZXIoc2VsZik6CiAgICAiIiJDb2RlciB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciB0aGUgcmVjb3JkcyByZXR1cm5lZCBieSB0aGUgc291cmNlLgoKICAgIFNob3VsZCBiZSBvdmVycmlkZGVuIGJ5IHNvdXJjZXMgdGhhdCBwcm9kdWNlIG9iamVjdHMgdGhhdCBjYW4gYmUgZW5jb2RlZAogICAgbW9yZSBlZmZpY2llbnRseSB0aGFuIHBpY2tsaW5nLgogICAgIiIiCiAgICByZXR1cm4gY29kZXJzLnJlZ2lzdHJ5LmdldF9jb2RlcihvYmplY3QpCgogIGRlZiBpc19ib3VuZGVkKHNlbGYpOgogICAgcmV0dXJuIFRydWUKCgpjbGFzcyBSYW5nZVRyYWNrZXIob2JqZWN0KToKICAiIiJBIHRocmVhZCBzYWZlIG9iamVjdCB1c2VkIGJ5IERhdGFmbG93IHNvdXJjZSBmcmFtZXdvcmsuCgogIEEgRGF0YWZsb3cgc291cmNlIGlzIGRlZmluZWQgdXNpbmcgYSAnJ0JvdW5kZWRTb3VyY2UnJyBhbmQgYSAnJ1JhbmdlVHJhY2tlcicnCiAgcGFpci4gQSAnJ1JhbmdlVHJhY2tlcicnIGlzIHVzZWQgYnkgRGF0YWZsb3cgc291cmNlIGZyYW1ld29yayB0byBwZXJmb3JtCiAgZHluYW1pYyB3b3JrIHJlYmFsYW5jaW5nIG9mIHBvc2l0aW9uLWJhc2VkIHNvdXJjZXMuCgogICoqUG9zaXRpb24tYmFzZWQgc291cmNlcyoqCgogIEEgcG9zaXRpb24tYmFzZWQgc291cmNlIGlzIG9uZSB3aGVyZSB0aGUgc291cmNlIGNhbiBiZSBkZXNjcmliZWQgYnkgYSByYW5nZQogIG9mIHBvc2l0aW9ucyBvZiBhbiBvcmRlcmVkIHR5cGUgYW5kIHRoZSByZWNvcmRzIHJldHVybmVkIGJ5IHRoZSByZWFkZXIgY2FuIGJlCiAgZGVzY3JpYmVkIGJ5IHBvc2l0aW9ucyBvZiB0aGUgc2FtZSB0eXBlLgoKICBJbiBjYXNlIGEgcmVjb3JkIG9jY3VwaWVzIGEgcmFuZ2Ugb2YgcG9zaXRpb25zIGluIHRoZSBzb3VyY2UsIHRoZSBtb3N0CiAgaW1wb3J0YW50IHRoaW5nIGFib3V0IHRoZSByZWNvcmQgaXMgdGhlIHBvc2l0aW9uIHdoZXJlIGl0IHN0YXJ0cy4KCiAgRGVmaW5pbmcgdGhlIHNlbWFudGljcyBvZiBwb3NpdGlvbnMgZm9yIGEgc291cmNlIGlzIGVudGlyZWx5IHVwIHRvIHRoZSBzb3VyY2UKICBjbGFzcywgaG93ZXZlciB0aGUgY2hvc2VuIGRlZmluaXRpb25zIGhhdmUgdG8gb2JleSBjZXJ0YWluIHByb3BlcnRpZXMgaW4gb3JkZXIKICB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIGNvcnJlY3RseSBzcGxpdCB0aGUgc291cmNlIGludG8gcGFydHMsIGluY2x1ZGluZwogIGR5bmFtaWMgc3BsaXR0aW5nLiBUd28gbWFpbiBhc3BlY3RzIG5lZWQgdG8gYmUgZGVmaW5lZDoKCiAgMS4gSG93IHRvIGFzc2lnbiBzdGFydGluZyBwb3NpdGlvbnMgdG8gcmVjb3Jkcy4KICAyLiBXaGljaCByZWNvcmRzIHNob3VsZCBiZSByZWFkIGJ5IGEgc291cmNlIHdpdGggYSByYW5nZSAnW0EsIEIpJy4KCiAgTW9yZW92ZXIsIHJlYWRpbmcgYSByYW5nZSBtdXN0IGJlICplZmZpY2llbnQqLCBpLmUuLCB0aGUgcGVyZm9ybWFuY2Ugb2YKICByZWFkaW5nIGEgcmFuZ2Ugc2hvdWxkIG5vdCBzaWduaWZpY2FudGx5IGRlcGVuZCBvbiB0aGUgbG9jYXRpb24gb2YgdGhlIHJhbmdlLgogIEZvciBleGFtcGxlLCByZWFkaW5nIHRoZSByYW5nZSBbQSwgQikgc2hvdWxkIG5vdCByZXF1aXJlIHJlYWRpbmcgYWxsIGRhdGEKICBiZWZvcmUgJ0EnLgoKICBUaGUgc2VjdGlvbnMgYmVsb3cgZXhwbGFpbiBleGFjdGx5IHdoYXQgcHJvcGVydGllcyB0aGVzZSBkZWZpbml0aW9ucyBtdXN0CiAgc2F0aXNmeSwgYW5kIGhvdyB0byB1c2UgYSBgYFJhbmdlVHJhY2tlcmBgIHdpdGggYSBwcm9wZXJseSBkZWZpbmVkIHNvdXJjZS4KCiAgKipQcm9wZXJ0aWVzIG9mIHBvc2l0aW9uLWJhc2VkIHNvdXJjZXMqKgoKICBUaGUgbWFpbiByZXF1aXJlbWVudCBmb3IgcG9zaXRpb24tYmFzZWQgc291cmNlcyBpcyAqYXNzb2NpYXRpdml0eSo6IHJlYWRpbmcKICByZWNvcmRzIGZyb20gJ1tBLCBCKScgYW5kIHJlY29yZHMgZnJvbSAnW0IsIEMpJyBzaG91bGQgZ2l2ZSB0aGUgc2FtZQogIHJlY29yZHMgYXMgcmVhZGluZyBmcm9tICdbQSwgQyknLCB3aGVyZSAnQSA8PSBCIDw9IEMnLiBUaGlzIHByb3BlcnR5CiAgZW5zdXJlcyB0aGF0IG5vIG1hdHRlciBob3cgYSByYW5nZSBvZiBwb3NpdGlvbnMgaXMgc3BsaXQgaW50byBhcmJpdHJhcmlseSBtYW55CiAgc3ViLXJhbmdlcywgdGhlIHRvdGFsIHNldCBvZiByZWNvcmRzIGRlc2NyaWJlZCBieSB0aGVtIHN0YXlzIHRoZSBzYW1lLgoKICBUaGUgb3RoZXIgaW1wb3J0YW50IHByb3BlcnR5IGlzIGhvdyB0aGUgc291cmNlJ3MgcmFuZ2UgcmVsYXRlcyB0byBwb3NpdGlvbnMgb2YKICByZWNvcmRzIGluIHRoZSBzb3VyY2UuIEluIG1hbnkgc291cmNlcyBlYWNoIHJlY29yZCBjYW4gYmUgaWRlbnRpZmllZCBieSBhCiAgdW5pcXVlIHN0YXJ0aW5nIHBvc2l0aW9uLiBJbiB0aGlzIGNhc2U6CgogICogQWxsIHJlY29yZHMgcmV0dXJuZWQgYnkgYSBzb3VyY2UgJ1tBLCBCKScgbXVzdCBoYXZlIHN0YXJ0aW5nIHBvc2l0aW9ucyBpbgogICAgdGhpcyByYW5nZS4KICAqIEFsbCBidXQgdGhlIGxhc3QgcmVjb3JkIHNob3VsZCBlbmQgd2l0aGluIHRoaXMgcmFuZ2UuIFRoZSBsYXN0IHJlY29yZCBtYXkgb3IKICAgIG1heSBub3QgZXh0ZW5kIHBhc3QgdGhlIGVuZCBvZiB0aGUgcmFuZ2UuCiAgKiBSZWNvcmRzIHNob3VsZCBub3Qgb3ZlcmxhcC4KCiAgU3VjaCBzb3VyY2VzIHNob3VsZCBkZWZpbmUgInJlYWQgJ1tBLCBCKSciIGFzICJyZWFkIGZyb20gdGhlIGZpcnN0IHJlY29yZAogIHN0YXJ0aW5nIGF0IG9yIGFmdGVyICdBJywgdXAgdG8gYnV0IG5vdCBpbmNsdWRpbmcgdGhlIGZpcnN0IHJlY29yZCBzdGFydGluZwogIGF0IG9yIGFmdGVyICdCJyIuCgogIFNvbWUgZXhhbXBsZXMgb2Ygc3VjaCBzb3VyY2VzIGluY2x1ZGUgcmVhZGluZyBsaW5lcyBvciBDU1YgZnJvbSBhIHRleHQgZmlsZSwKICByZWFkaW5nIGtleXMgYW5kIHZhbHVlcyBmcm9tIGEgQmlnVGFibGUsIGV0Yy4KCiAgVGhlIGNvbmNlcHQgb2YgKnNwbGl0IHBvaW50cyogYWxsb3dzIHRvIGV4dGVuZCB0aGUgZGVmaW5pdGlvbnMgZm9yIGRlYWxpbmcKICB3aXRoIHNvdXJjZXMgd2hlcmUgc29tZSByZWNvcmRzIGNhbm5vdCBiZSBpZGVudGlmaWVkIGJ5IGEgdW5pcXVlIHN0YXJ0aW5nCiAgcG9zaXRpb24uCgogIEluIGFsbCBjYXNlcywgYWxsIHJlY29yZHMgcmV0dXJuZWQgYnkgYSBzb3VyY2UgJ1tBLCBCKScgbXVzdCAqc3RhcnQqIGF0IG9yCiAgYWZ0ZXIgJ0EnLgoKICAqKlNwbGl0IHBvaW50cyoqCgogIFNvbWUgc291cmNlcyBtYXkgaGF2ZSByZWNvcmRzIHRoYXQgYXJlIG5vdCBkaXJlY3RseSBhZGRyZXNzYWJsZS4gRm9yIGV4YW1wbGUsCiAgaW1hZ2luZSBhIGZpbGUgZm9ybWF0IGNvbnNpc3Rpbmcgb2YgYSBzZXF1ZW5jZSBvZiBjb21wcmVzc2VkIGJsb2Nrcy4gRWFjaAogIGJsb2NrIGNhbiBiZSBhc3NpZ25lZCBhbiBvZmZzZXQsIGJ1dCByZWNvcmRzIHdpdGhpbiB0aGUgYmxvY2sgY2Fubm90IGJlCiAgZGlyZWN0bHkgYWRkcmVzc2VkIHdpdGhvdXQgZGVjb21wcmVzc2luZyB0aGUgYmxvY2suIExldCB1cyByZWZlciB0byB0aGlzCiAgaHlwb3RoZXRpY2FsIGZvcm1hdCBhcyA8aT5DQkYgKENvbXByZXNzZWQgQmxvY2tzIEZvcm1hdCk8L2k+LgoKICBNYW55IHN1Y2ggZm9ybWF0cyBjYW4gc3RpbGwgc2F0aXNmeSB0aGUgYXNzb2NpYXRpdml0eSBwcm9wZXJ0eS4gRm9yIGV4YW1wbGUsCiAgaW4gQ0JGLCByZWFkaW5nICdbQSwgQiknIGNhbiBtZWFuICJyZWFkIGFsbCB0aGUgcmVjb3JkcyBpbiBhbGwgYmxvY2tzIHdob3NlCiAgc3RhcnRpbmcgb2Zmc2V0IGlzIGluICdbQSwgQiknIi4KCiAgVG8gc3VwcG9ydCBzdWNoIGNvbXBsZXggZm9ybWF0cywgd2UgaW50cm9kdWNlIHRoZSBub3Rpb24gb2YgKnNwbGl0IHBvaW50cyouIFdlCiAgc2F5IHRoYXQgYSByZWNvcmQgaXMgYSBzcGxpdCBwb2ludCBpZiB0aGVyZSBleGlzdHMgYSBwb3NpdGlvbiAnQScgc3VjaCB0aGF0CiAgdGhlIHJlY29yZCBpcyB0aGUgZmlyc3Qgb25lIHRvIGJlIHJldHVybmVkIHdoZW4gcmVhZGluZyB0aGUgcmFuZ2UKICAnW0EsIGluZmluaXR5KScuIEluIENCRiwgdGhlIG9ubHkgc3BsaXQgcG9pbnRzIHdvdWxkIGJlIHRoZSBmaXJzdCByZWNvcmRzCiAgaW4gZWFjaCBibG9jay4KCiAgU3BsaXQgcG9pbnRzIGFsbG93IHVzIHRvIGRlZmluZSB0aGUgbWVhbmluZyBvZiBhIHJlY29yZCdzIHBvc2l0aW9uIGFuZCBhCiAgc291cmNlJ3MgcmFuZ2UgaW4gYWxsIGNhc2VzOgoKICAqIEZvciBhIHJlY29yZCB0aGF0IGlzIGF0IGEgc3BsaXQgcG9pbnQsIGl0cyBwb3NpdGlvbiBpcyBkZWZpbmVkIHRvIGJlIHRoZQogICAgbGFyZ2VzdCAnQScgc3VjaCB0aGF0IHJlYWRpbmcgYSBzb3VyY2Ugd2l0aCB0aGUgcmFuZ2UgJ1tBLCBpbmZpbml0eSknCiAgICByZXR1cm5zIHRoaXMgcmVjb3JkLgogICogUG9zaXRpb25zIG9mIG90aGVyIHJlY29yZHMgYXJlIG9ubHkgcmVxdWlyZWQgdG8gYmUgbm9uLWRlY3JlYXNpbmcuCiAgKiBSZWFkaW5nIHRoZSBzb3VyY2UgJ1tBLCBCKScgbXVzdCByZXR1cm4gcmVjb3JkcyBzdGFydGluZyBmcm9tIHRoZSBmaXJzdAogICAgc3BsaXQgcG9pbnQgYXQgb3IgYWZ0ZXIgJ0EnLCB1cCB0byBidXQgbm90IGluY2x1ZGluZyB0aGUgZmlyc3Qgc3BsaXQgcG9pbnQKICAgIGF0IG9yIGFmdGVyICdCJy4gSW4gcGFydGljdWxhciwgdGhpcyBtZWFucyB0aGF0IHRoZSBmaXJzdCByZWNvcmQgcmV0dXJuZWQKICAgIGJ5IGEgc291cmNlIE1VU1QgYWx3YXlzIGJlIGEgc3BsaXQgcG9pbnQuCiAgKiBQb3NpdGlvbnMgb2Ygc3BsaXQgcG9pbnRzIG11c3QgYmUgdW5pcXVlLgoKICBBcyBhIHJlc3VsdCwgZm9yIGFueSBkZWNvbXBvc2l0aW9uIG9mIHRoZSBmdWxsIHJhbmdlIG9mIHRoZSBzb3VyY2UgaW50bwogIHBvc2l0aW9uIHJhbmdlcywgdGhlIHRvdGFsIHNldCBvZiByZWNvcmRzIHdpbGwgYmUgdGhlIGZ1bGwgc2V0IG9mIHJlY29yZHMgaW4KICB0aGUgc291cmNlLCBhbmQgZWFjaCByZWNvcmQgd2lsbCBiZSByZWFkIGV4YWN0bHkgb25jZS4KCiAgKipDb25zdW1lZCBwb3NpdGlvbnMqKgoKICBBcyB0aGUgc291cmNlIGlzIGJlaW5nIHJlYWQsIGFuZCByZWNvcmRzIHJlYWQgZnJvbSBpdCBhcmUgYmVpbmcgcGFzc2VkIHRvIHRoZQogIGRvd25zdHJlYW0gdHJhbnNmb3JtcyBpbiB0aGUgcGlwZWxpbmUsIHdlIHNheSB0aGF0IHBvc2l0aW9ucyBpbiB0aGUgc291cmNlIGFyZQogIGJlaW5nICpjb25zdW1lZCouIFdoZW4gYSByZWFkZXIgaGFzIHJlYWQgYSByZWNvcmQgKG9yIHByb21pc2VkIHRvIGEgY2FsbGVyCiAgdGhhdCBhIHJlY29yZCB3aWxsIGJlIHJldHVybmVkKSwgcG9zaXRpb25zIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlIHJlY29yZCdzCiAgc3RhcnQgcG9zaXRpb24gYXJlIGNvbnNpZGVyZWQgKmNvbnN1bWVkKi4KCiAgRHluYW1pYyBzcGxpdHRpbmcgY2FuIGhhcHBlbiBvbmx5IGF0ICp1bmNvbnN1bWVkKiBwb3NpdGlvbnMuIElmIHRoZSByZWFkZXIKICBqdXN0IHJldHVybmVkIGEgcmVjb3JkIGF0IG9mZnNldCA0MiBpbiBhIGZpbGUsIGR5bmFtaWMgc3BsaXR0aW5nIGNhbiBoYXBwZW4KICBvbmx5IGF0IG9mZnNldCA0MyBvciBiZXlvbmQsIGFzIG90aGVyd2lzZSB0aGF0IHJlY29yZCBjb3VsZCBiZSByZWFkIHR3aWNlIChieQogIHRoZSBjdXJyZW50IHJlYWRlciBhbmQgYnkgYSByZWFkZXIgb2YgdGhlIHRhc2sgc3RhcnRpbmcgYXQgNDMpLgogICIiIgoKICBTUExJVF9QT0lOVFNfVU5LTk9XTiA9IG9iamVjdCgpCgogIGRlZiBzdGFydF9wb3NpdGlvbihzZWxmKToKICAgICIiIlJldHVybnMgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIHRoZSBjdXJyZW50IHJhbmdlLCBpbmNsdXNpdmUuIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKHR5cGUoc2VsZikpCgogIGRlZiBzdG9wX3Bvc2l0aW9uKHNlbGYpOgogICAgIiIiUmV0dXJucyB0aGUgZW5kaW5nIHBvc2l0aW9uIG9mIHRoZSBjdXJyZW50IHJhbmdlLCBleGNsdXNpdmUuIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKHR5cGUoc2VsZikpCgogIGRlZiB0cnlfY2xhaW0oc2VsZiwgcG9zaXRpb24pOiAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWFyZ3VtZW50CiAgICAiIiJBdG9taWNhbGx5IGRldGVybWluZXMgaWYgYSByZWNvcmQgYXQgYSBzcGxpdCBwb2ludCBpcyB3aXRoaW4gdGhlIHJhbmdlLgoKICAgIFRoaXMgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQgKippZiBhbmQgb25seSBpZioqIHRoZSByZWNvcmQgaXMgYXQgYSBzcGxpdAogICAgcG9pbnQuIFRoaXMgbWV0aG9kIG1heSBtb2RpZnkgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBgYFJhbmdlVHJhY2tlcmBgIGJ5CiAgICB1cGRhdGluZyB0aGUgbGFzdC1jb25zdW1lZCBwb3NpdGlvbiB0byBgYHBvc2l0aW9uYGAuCgogICAgKiogVGhyZWFkIHNhZmV0eSAqKgoKICAgIE1ldGhvZHMgb2YgdGhlIGNsYXNzIGBgUmFuZ2VUcmFja2VyYGAgaW5jbHVkaW5nIHRoaXMgbWV0aG9kIG1heSBnZXQgaW52b2tlZAogICAgYnkgZGlmZmVyZW50IHRocmVhZHMsIGhlbmNlIG11c3QgYmUgbWFkZSB0aHJlYWQtc2FmZSwgZS5nLiBieSB1c2luZyBhIHNpbmdsZQogICAgbG9jayBvYmplY3QuCgogICAgQXJnczoKICAgICAgcG9zaXRpb246IHN0YXJ0aW5nIHBvc2l0aW9uIG9mIGEgcmVjb3JkIGJlaW5nIHJlYWQgYnkgYSBzb3VyY2UuCgogICAgUmV0dXJuczoKICAgICAgYGBUcnVlYGAsIGlmIHRoZSBnaXZlbiBwb3NpdGlvbiBmYWxscyB3aXRoaW4gdGhlIGN1cnJlbnQgcmFuZ2UsIHJldHVybnMKICAgICAgYGBGYWxzZWBgIG90aGVyd2lzZS4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgc2V0X2N1cnJlbnRfcG9zaXRpb24oc2VsZiwgcG9zaXRpb24pOgogICAgIiIiVXBkYXRlcyB0aGUgbGFzdC1jb25zdW1lZCBwb3NpdGlvbiB0byB0aGUgZ2l2ZW4gcG9zaXRpb24uCgogICAgQSBzb3VyY2UgbWF5IGludm9rZSB0aGlzIG1ldGhvZCBmb3IgcmVjb3JkcyB0aGF0IGRvIG5vdCBzdGFydCBhdCBzcGxpdAogICAgcG9pbnRzLiBUaGlzIG1heSBtb2RpZnkgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBgYFJhbmdlVHJhY2tlcmBgLiBJZiB0aGUKICAgIHJlY29yZCBzdGFydHMgYXQgYSBzcGxpdCBwb2ludCwgbWV0aG9kIGBgdHJ5X2NsYWltKClgYCAqKm11c3QqKiBiZSBpbnZva2VkCiAgICBpbnN0ZWFkIG9mIHRoaXMgbWV0aG9kLgoKICAgIEFyZ3M6CiAgICAgIHBvc2l0aW9uOiBzdGFydGluZyBwb3NpdGlvbiBvZiBhIHJlY29yZCBiZWluZyByZWFkIGJ5IGEgc291cmNlLgogICAgIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiBwb3NpdGlvbl9hdF9mcmFjdGlvbihzZWxmLCBmcmFjdGlvbik6CiAgICAiIiJSZXR1cm5zIHRoZSBwb3NpdGlvbiBhdCB0aGUgZ2l2ZW4gZnJhY3Rpb24uCgogICAgR2l2ZW4gYSBmcmFjdGlvbiB3aXRoaW4gdGhlIHJhbmdlIFswLjAsIDEuMCkgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gdGhlCiAgICBwb3NpdGlvbiBhdCB0aGUgZ2l2ZW4gZnJhY3Rpb24gY29tcGFyZWQgdG8gdGhlIHBvc2l0aW9uIHJhbmdlCiAgICBbc2VsZi5zdGFydF9wb3NpdGlvbiwgc2VsZi5zdG9wX3Bvc2l0aW9uKS4KCiAgICAqKiBUaHJlYWQgc2FmZXR5ICoqCgogICAgTWV0aG9kcyBvZiB0aGUgY2xhc3MgYGBSYW5nZVRyYWNrZXJgYCBpbmNsdWRpbmcgdGhpcyBtZXRob2QgbWF5IGdldCBpbnZva2VkCiAgICBieSBkaWZmZXJlbnQgdGhyZWFkcywgaGVuY2UgbXVzdCBiZSBtYWRlIHRocmVhZC1zYWZlLCBlLmcuIGJ5IHVzaW5nIGEgc2luZ2xlCiAgICBsb2NrIG9iamVjdC4KCiAgICBBcmdzOgogICAgICBmcmFjdGlvbjogYSBmbG9hdCB2YWx1ZSB3aXRoaW4gdGhlIHJhbmdlIFswLjAsIDEuMCkuCiAgICBSZXR1cm5zOgogICAgICBhIHBvc2l0aW9uIHdpdGhpbiB0aGUgcmFuZ2UgW3NlbGYuc3RhcnRfcG9zaXRpb24sIHNlbGYuc3RvcF9wb3NpdGlvbikuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIHRyeV9zcGxpdChzZWxmLCBwb3NpdGlvbik6CiAgICAiIiJBdG9taWNhbGx5IHNwbGl0cyB0aGUgY3VycmVudCByYW5nZS4KCiAgICBEZXRlcm1pbmVzIGEgcG9zaXRpb24gdG8gc3BsaXQgdGhlIGN1cnJlbnQgcmFuZ2UsIHNwbGl0X3Bvc2l0aW9uLCBiYXNlZCBvbgogICAgdGhlIGdpdmVuIHBvc2l0aW9uLiBJbiBtb3N0IGNhc2VzIHNwbGl0X3Bvc2l0aW9uIGFuZCBwb3NpdGlvbiB3aWxsIGJlIHRoZQogICAgc2FtZS4KCiAgICBTcGxpdHMgdGhlIGN1cnJlbnQgcmFuZ2UgJ1tzZWxmLnN0YXJ0X3Bvc2l0aW9uLCBzZWxmLnN0b3BfcG9zaXRpb24pJwogICAgaW50byBhICJwcmltYXJ5IiBwYXJ0ICdbc2VsZi5zdGFydF9wb3NpdGlvbiwgc3BsaXRfcG9zaXRpb24pJyBhbmQgYQogICAgInJlc2lkdWFsIiBwYXJ0ICdbc3BsaXRfcG9zaXRpb24sIHNlbGYuc3RvcF9wb3NpdGlvbiknLCBhc3N1bWluZyB0aGUKICAgIGN1cnJlbnQgbGFzdC1jb25zdW1lZCBwb3NpdGlvbiBpcyB3aXRoaW4KICAgICdbc2VsZi5zdGFydF9wb3NpdGlvbiwgc3BsaXRfcG9zaXRpb24pJyAoaS5lLiwgc3BsaXRfcG9zaXRpb24gaGFzIG5vdCBiZWVuCiAgICBjb25zdW1lZCB5ZXQpLgoKICAgIElmIHN1Y2Nlc3NmdWwsIHVwZGF0ZXMgdGhlIGN1cnJlbnQgcmFuZ2UgdG8gYmUgdGhlIHByaW1hcnkgYW5kIHJldHVybnMgYQogICAgdHVwbGUgKHNwbGl0X3Bvc2l0aW9uLCBzcGxpdF9mcmFjdGlvbikuIHNwbGl0X2ZyYWN0aW9uIHNob3VsZCBiZSB0aGUKICAgIGZyYWN0aW9uIG9mIHNpemUgb2YgcmFuZ2UgJ1tzZWxmLnN0YXJ0X3Bvc2l0aW9uLCBzcGxpdF9wb3NpdGlvbiknIGNvbXBhcmVkCiAgICB0byB0aGUgb3JpZ2luYWwgKGJlZm9yZSBzcGxpdCkgcmFuZ2UKICAgICdbc2VsZi5zdGFydF9wb3NpdGlvbiwgc2VsZi5zdG9wX3Bvc2l0aW9uKScuCgogICAgSWYgdGhlIHNwbGl0X3Bvc2l0aW9uIGhhcyBhbHJlYWR5IGJlZW4gY29uc3VtZWQsIHJldHVybnMgYGBOb25lYGAuCgogICAgKiogVGhyZWFkIHNhZmV0eSAqKgoKICAgIE1ldGhvZHMgb2YgdGhlIGNsYXNzIGBgUmFuZ2VUcmFja2VyYGAgaW5jbHVkaW5nIHRoaXMgbWV0aG9kIG1heSBnZXQgaW52b2tlZAogICAgYnkgZGlmZmVyZW50IHRocmVhZHMsIGhlbmNlIG11c3QgYmUgbWFkZSB0aHJlYWQtc2FmZSwgZS5nLiBieSB1c2luZyBhIHNpbmdsZQogICAgbG9jayBvYmplY3QuCgogICAgQXJnczoKICAgICAgcG9zaXRpb246IHN1Z2dlc3RlZCBwb3NpdGlvbiB3aGVyZSB0aGUgY3VycmVudCByYW5nZSBzaG91bGQgdHJ5IHRvCiAgICAgICAgICAgICAgICBiZSBzcGxpdCBhdC4KICAgIFJldHVybnM6CiAgICAgIGEgdHVwbGUgY29udGFpbmluZyB0aGUgc3BsaXQgcG9zaXRpb24gYW5kIHNwbGl0IGZyYWN0aW9uIGlmIHNwbGl0IGlzCiAgICAgIHN1Y2Nlc3NmdWwuIFJldHVybnMgYGBOb25lYGAgb3RoZXJ3aXNlLgogICAgIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiBmcmFjdGlvbl9jb25zdW1lZChzZWxmKToKICAgICIiIlJldHVybnMgdGhlIGFwcHJveGltYXRlIGZyYWN0aW9uIG9mIGNvbnN1bWVkIHBvc2l0aW9ucyBpbiB0aGUgc291cmNlLgoKICAgICoqIFRocmVhZCBzYWZldHkgKioKCiAgICBNZXRob2RzIG9mIHRoZSBjbGFzcyBgYFJhbmdlVHJhY2tlcmBgIGluY2x1ZGluZyB0aGlzIG1ldGhvZCBtYXkgZ2V0IGludm9rZWQKICAgIGJ5IGRpZmZlcmVudCB0aHJlYWRzLCBoZW5jZSBtdXN0IGJlIG1hZGUgdGhyZWFkLXNhZmUsIGUuZy4gYnkgdXNpbmcgYSBzaW5nbGUKICAgIGxvY2sgb2JqZWN0LgoKICAgIFJldHVybnM6CiAgICAgIHRoZSBhcHByb3hpbWF0ZSBmcmFjdGlvbiBvZiBwb3NpdGlvbnMgdGhhdCBoYXZlIGJlZW4gY29uc3VtZWQgYnkKICAgICAgc3VjY2Vzc2Z1bCAndHJ5X3NwbGl0KCknIGFuZCAgJ3JlcG9ydF9jdXJyZW50X3Bvc2l0aW9uKCknICBjYWxscywgb3IKICAgICAgMC4wIGlmIG5vIHN1Y2ggY2FsbHMgaGF2ZSBoYXBwZW5lZC4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgc3BsaXRfcG9pbnRzKHNlbGYpOgogICAgIiIiR2l2ZXMgdGhlIG51bWJlciBvZiBzcGxpdCBwb2ludHMgY29uc3VtZWQgYW5kIHJlbWFpbmluZy4KCiAgICBGb3IgYSBgYFJhbmdlVHJhY2tlcmBgIHVzZWQgYnkgYSBgYEJvdW5kZWRTb3VyY2VgYCAod2l0aGluIGEKICAgIGBgQm91bmRlZFNvdXJjZS5yZWFkKClgYCBpbnZvY2F0aW9uKSB0aGlzIG1ldGhvZCBwcm9kdWNlcyBhIDItdHVwbGUgdGhhdAogICAgZ2l2ZXMgdGhlIG51bWJlciBvZiBzcGxpdCBwb2ludHMgY29uc3VtZWQgYnkgdGhlIGBgQm91bmRlZFNvdXJjZWBgIGFuZCB0aGUKICAgIG51bWJlciBvZiBzcGxpdCBwb2ludHMgcmVtYWluaW5nIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgdGhlIGBgUmFuZ2VUcmFja2VyYGAKICAgIHRoYXQgaGFzIG5vdCBiZWVuIGNvbnN1bWVkIGJ5IHRoZSBgYEJvdW5kZWRTb3VyY2VgYC4KCiAgICBNb3JlIHNwZWNpZmljYWxseSwgZ2l2ZW4gdGhhdCB0aGUgcG9zaXRpb24gb2YgdGhlIGN1cnJlbnQgcmVjb3JkIGJlaW5nIHJlYWQKICAgIGJ5IGBgQm91bmRlZFNvdXJjZWBgIGlzIGN1cnJlbnRfcG9zaXRpb24gdGhpcyBtZXRob2QgcHJvZHVjZXMgYSB0dXBsZSB0aGF0CiAgICBjb25zaXN0cyBvZgogICAgKDEpIG51bWJlciBvZiBzcGxpdCBwb2ludHMgaW4gdGhlIHJhbmdlIFtzZWxmLnN0YXJ0X3Bvc2l0aW9uKCksCiAgICBjdXJyZW50X3Bvc2l0aW9uKSB3aXRob3V0IGluY2x1ZGluZyB0aGUgc3BsaXQgcG9pbnQgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcKICAgIGNvbnN1bWVkLiBUaGlzIHJlcHJlc2VudHMgdGhlIHRvdGFsIGFtb3VudCBvZiBwYXJhbGxlbGlzbSBpbiB0aGUgY29uc3VtZWQKICAgIHBhcnQgb2YgdGhlIHNvdXJjZS4KICAgICgyKSBudW1iZXIgb2Ygc3BsaXQgcG9pbnRzIHdpdGhpbiB0aGUgcmFuZ2UKICAgIFtjdXJyZW50X3Bvc2l0aW9uLCBzZWxmLnN0b3BfcG9zaXRpb24oKSkgaW5jbHVkaW5nIHRoZSBzcGxpdCBwb2ludCB0aGF0IGlzCiAgICBjdXJyZW50bHkgYmVpbmcgY29uc3VtZWQuIFRoaXMgcmVwcmVzZW50cyB0aGUgdG90YWwgYW1vdW50IG9mIHBhcmFsbGVsaXNtIGluCiAgICB0aGUgdW5jb25zdW1lZCBwYXJ0IG9mIHRoZSBzb3VyY2UuCgogICAgTWV0aG9kcyBvZiB0aGUgY2xhc3MgYGBSYW5nZVRyYWNrZXJgYCBpbmNsdWRpbmcgdGhpcyBtZXRob2QgbWF5IGdldCBpbnZva2VkCiAgICBieSBkaWZmZXJlbnQgdGhyZWFkcywgaGVuY2UgbXVzdCBiZSBtYWRlIHRocmVhZC1zYWZlLCBlLmcuIGJ5IHVzaW5nIGEgc2luZ2xlCiAgICBsb2NrIG9iamVjdC4KCiAgICAqKiBHZW5lcmFsIGluZm9ybWF0aW9uIGFib3V0IGNvbnN1bWVkIGFuZCByZW1haW5pbmcgbnVtYmVyIG9mIHNwbGl0CiAgICAgICBwb2ludHMgcmV0dXJuZWQgYnkgdGhpcyBtZXRob2QuICoqCgogICAgICAqIEJlZm9yZSBhIHNvdXJjZSByZWFkIChgYEJvdW5kZWRTb3VyY2UucmVhZCgpYGAgaW52b2NhdGlvbikgY2xhaW1zIHRoZQogICAgICAgIGZpcnN0IHNwbGl0IHBvaW50LCBudW1iZXIgb2YgY29uc3VtZWQgc3BsaXQgcG9pbnRzIGlzIDAuIFRoaXMgY29uZGl0aW9uCiAgICAgICAgaG9sZHMgaW5kZXBlbmRlbnQgb2Ygd2hldGhlciB0aGUgaW5wdXQgaXMgInNwbGl0dGFibGUiLiBBIHNwbGl0dGFibGUKICAgICAgICBzb3VyY2UgaXMgYSBzb3VyY2UgdGhhdCBoYXMgbW9yZSB0aGFuIG9uZSBzcGxpdCBwb2ludC4KICAgICAgKiBBbnkgc291cmNlIHJlYWQgdGhhdCBoYXMgb25seSBjbGFpbWVkIG9uZSBzcGxpdCBwb2ludCBoYXMgMCBjb25zdW1lZAogICAgICAgIHNwbGl0IHBvaW50cyBzaW5jZSB0aGUgZmlyc3Qgc3BsaXQgcG9pbnQgaXMgdGhlIGN1cnJlbnQgc3BsaXQgcG9pbnQgYW5kCiAgICAgICAgaXMgc3RpbGwgYmVpbmcgcHJvY2Vzc2VkLiBUaGlzIGNvbmRpdGlvbiBob2xkcyBpbmRlcGVuZGVudCBvZiB3aGV0aGVyCiAgICAgICAgdGhlIGlucHV0IGlzIHNwbGl0dGFibGUuCiAgICAgICogRm9yIGFuIGVtcHR5IHNvdXJjZSByZWFkIHdoaWNoIG5ldmVyIGludm9rZXMKICAgICAgICBgYFJhbmdlVHJhY2tlci50cnlfY2xhaW0oKWBgLCB0aGUgY29uc3VtZWQgbnVtYmVyIG9mIHNwbGl0IHBvaW50cyBpcyAwLgogICAgICAgIFRoaXMgY29uZGl0aW9uIGhvbGRzIGluZGVwZW5kZW50IG9mIHdoZXRoZXIgdGhlIGlucHV0IGlzIHNwbGl0dGFibGUuCiAgICAgICogRm9yIGEgc291cmNlIHJlYWQgd2hpY2ggaGFzIGludm9rZWQgYGBSYW5nZVRyYWNrZXIudHJ5X2NsYWltKClgYCBuCiAgICAgICAgdGltZXMsIHRoZSBjb25zdW1lZCBudW1iZXIgb2Ygc3BsaXQgcG9pbnRzIGlzICBuIC0xLgogICAgICAqIElmIGEgYGBCb3VuZGVkU291cmNlYGAgc2V0cyBhIGNhbGxiYWNrIHRocm91Z2ggZnVuY3Rpb24KICAgICAgICBgYHNldF9zcGxpdF9wb2ludHNfdW5jbGFpbWVkX2NhbGxiYWNrKClgYCwgYGBSYW5nZVRyYWNrZXJgYCBjYW4gdXNlIHRoYXQKICAgICAgICBjYWxsYmFjayB3aGVuIGRldGVybWluaW5nIHJlbWFpbmluZyBudW1iZXIgb2Ygc3BsaXQgcG9pbnRzLgogICAgICAqIFJlbWFpbmluZyBzcGxpdCBwb2ludHMgc2hvdWxkIGluY2x1ZGUgdGhlIHNwbGl0IHBvaW50IHRoYXQgaXMgY3VycmVudGx5CiAgICAgICAgYmVpbmcgY29uc3VtZWQgYnkgdGhlIHNvdXJjZSByZWFkLiBIZW5jZSBpZiB0aGUgYWJvdmUgY2FsbGJhY2sgcmV0dXJucwogICAgICAgIGFuIGludGVnZXIgdmFsdWUgbiwgcmVtYWluaW5nIG51bWJlciBvZiBzcGxpdCBwb2ludHMgc2hvdWxkIGJlIChuICsgMSkuCiAgICAgICogQWZ0ZXIgbGFzdCBzcGxpdCBwb2ludCBpcyBjbGFpbWVkIHJlbWFpbmluZyBzcGxpdCBwb2ludHMgYmVjb21lcyAxLAogICAgICAgIGJlY2F1c2UgdGhpcyB1bmZpbmlzaGVkIHJlYWQgaXRzZWxmIHJlcHJlc2VudHMgYW4gIHVuZmluaXNoZWQgc3BsaXQKICAgICAgICBwb2ludC4KICAgICAgKiBBZnRlciBhbGwgcmVjb3JkcyBvZiB0aGUgc291cmNlIGhhcyBiZWVuIGNvbnN1bWVkLCByZW1haW5pbmcgbnVtYmVyIG9mCiAgICAgICAgc3BsaXQgcG9pbnRzIGJlY29tZXMgMCBhbmQgY29uc3VtZWQgbnVtYmVyIG9mIHNwbGl0IHBvaW50cyBiZWNvbWVzIGVxdWFsCiAgICAgICAgdG8gdGhlIHRvdGFsIG51bWJlciBvZiBzcGxpdCBwb2ludHMgd2l0aGluIHRoZSByYW5nZSBiZWluZyByZWFkIGJ5IHRoZQogICAgICAgIHNvdXJjZS4gVGhpcyBtZXRob2QgZG9lcyBub3QgYWRkcmVzcyB0aGlzIGNvbmRpdGlvbiBhbmQgd2lsbCBjb250aW51ZSB0bwogICAgICAgIHJlcG9ydCBudW1iZXIgb2YgY29uc3VtZWQgc3BsaXQgcG9pbnRzIGFzCiAgICAgICAgKCJ0b3RhbCBudW1iZXIgb2Ygc3BsaXQgcG9pbnRzIiAtIDEpIGFuZCBudW1iZXIgb2YgcmVtYWluaW5nIHNwbGl0CiAgICAgICAgcG9pbnRzIGFzIDEuIEEgcnVubmVyIHRoYXQgcGVyZm9ybXMgdGhlIHJlYWRpbmcgb2YgdGhlIHNvdXJjZSBjYW4KICAgICAgICBkZXRlY3Qgd2hlbiBhbGwgcmVjb3JkcyBoYXZlIGJlZW4gY29uc3VtZWQgYW5kIGFkanVzdCByZW1haW5pbmcgYW5kCiAgICAgICAgY29uc3VtZWQgbnVtYmVyIG9mIHNwbGl0IHBvaW50cyBhY2NvcmRpbmdseS4KCiAgICAqKiBFeGFtcGxlcyAqKgoKICAgICgxKSBBICJwZXJmZWN0bHkgc3BsaXR0YWJsZSIgaW5wdXQgd2hpY2ggY2FuIGJlIHJlYWQgaW4gcGFyYWxsZWwgZG93biB0byB0aGUKICAgICAgICBpbmRpdmlkdWFsIHJlY29yZHMuCgogICAgICAgIENvbnNpZGVyIGEgcGVyZmVjdGx5IHNwbGl0dGFibGUgaW5wdXQgdGhhdCBjb25zaXN0cyBvZiA1MCBzcGxpdCBwb2ludHMuCgogICAgICAqIEJlZm9yZSBhIHNvdXJjZSByZWFkIChgYEJvdW5kZWRTb3VyY2UucmVhZCgpYGAgaW52b2NhdGlvbikgY2xhaW1zIHRoZQogICAgICAgIGZpcnN0IHNwbGl0IHBvaW50LCBudW1iZXIgb2YgY29uc3VtZWQgc3BsaXQgcG9pbnRzIGlzIDAgbnVtYmVyIG9mCiAgICAgICAgcmVtYWluaW5nIHNwbGl0IHBvaW50cyBpcyA1MC4KICAgICAgKiBBZnRlciBjbGFpbWluZyBmaXJzdCBzcGxpdCBwb2ludCwgY29uc3VtZWQgbnVtYmVyIG9mIHNwbGl0IHBvaW50cyBpcyAwCiAgICAgICAgYW5kIHJlbWFpbmluZyBudW1iZXIgb2Ygc3BsaXQgaXMgNTAuCiAgICAgICogQWZ0ZXIgY2xhaW1pbmcgc3BsaXQgcG9pbnQgIzMwLCBjb25zdW1lZCBudW1iZXIgb2Ygc3BsaXQgcG9pbnRzIGlzIDI5CiAgICAgICAgYW5kIHJlbWFpbmluZyBudW1iZXIgb2Ygc3BsaXQgcG9pbnRzIGlzIDIxLgogICAgICAqIEFmdGVyIGNsYWltaW5nIGFsbCA1MCBzcGxpdCBwb2ludHMsIGNvbnN1bWVkIG51bWJlciBvZiBzcGxpdCBwb2ludHMgaXMKICAgICAgICA0OSBhbmQgcmVtYWluaW5nIG51bWJlciBvZiBzcGxpdCBwb2ludHMgaXMgMS4KCiAgICAoMikgYSAiYmxvY2stY29tcHJlc3NlZCIgZmlsZSBmb3JtYXQgc3VjaCBhcyBgYGF2cm9pb2BgLCBpbiB3aGljaCBhIGJsb2NrIG9mCiAgICAgICAgcmVjb3JkcyBoYXMgdG8gYmUgcmVhZCBhcyBhIHdob2xlLCBidXQgZGlmZmVyZW50IGJsb2NrcyBjYW4gYmUgcmVhZCBpbgogICAgICAgIHBhcmFsbGVsLgoKICAgICAgICBDb25zaWRlciBhIGJsb2NrIGNvbXByZXNzZWQgaW5wdXQgdGhhdCBjb25zaXN0cyBvZiA1IGJsb2Nrcy4KCiAgICAgICogQmVmb3JlIGEgc291cmNlIHJlYWQgKGBgQm91bmRlZFNvdXJjZS5yZWFkKClgYCBpbnZvY2F0aW9uKSBjbGFpbXMgdGhlCiAgICAgICAgZmlyc3Qgc3BsaXQgcG9pbnQgKGZpcnN0IGJsb2NrKSwgbnVtYmVyIG9mIGNvbnN1bWVkIHNwbGl0IHBvaW50cyBpcyAwCiAgICAgICAgbnVtYmVyIG9mIHJlbWFpbmluZyBzcGxpdCBwb2ludHMgaXMgNS4KICAgICAgKiBBZnRlciBjbGFpbWluZyBmaXJzdCBzcGxpdCBwb2ludCwgY29uc3VtZWQgbnVtYmVyIG9mIHNwbGl0IHBvaW50cyBpcyAwCiAgICAgICAgYW5kIHJlbWFpbmluZyBudW1iZXIgb2Ygc3BsaXQgaXMgNS4KICAgICAgKiBBZnRlciBjbGFpbWluZyBzcGxpdCBwb2ludCAjMywgY29uc3VtZWQgbnVtYmVyIG9mIHNwbGl0IHBvaW50cyBpcyAyCiAgICAgICAgYW5kIHJlbWFpbmluZyBudW1iZXIgb2Ygc3BsaXQgcG9pbnRzIGlzIDMuCiAgICAgICogQWZ0ZXIgY2xhaW1pbmcgYWxsIDUgc3BsaXQgcG9pbnRzLCBjb25zdW1lZCBudW1iZXIgb2Ygc3BsaXQgcG9pbnRzIGlzCiAgICAgICAgNCBhbmQgcmVtYWluaW5nIG51bWJlciBvZiBzcGxpdCBwb2ludHMgaXMgMS4KCiAgICAoMykgYW4gInVuc3BsaXR0YWJsZSIgaW5wdXQgc3VjaCBhcyBhIGN1cnNvciBpbiBhIGRhdGFiYXNlIG9yIGEgZ3ppcAogICAgICAgIGNvbXByZXNzZWQgZmlsZS4KCiAgICAgICAgU3VjaCBhbiBpbnB1dCBpcyBjb25zaWRlcmVkIHRvIGhhdmUgb25seSBhIHNpbmdsZSBzcGxpdCBwb2ludC4gTnVtYmVyIG9mCiAgICAgICAgY29uc3VtZWQgc3BsaXQgcG9pbnRzIGlzIGFsd2F5cyAwIGFuZCBudW1iZXIgb2YgcmVtYWluaW5nIHNwbGl0IHBvaW50cwogICAgICAgIGlzIGFsd2F5cyAxLgoKICAgIEJ5IGRlZmF1bHQgYGBSYW5nZVRyYWNrZXJgIHJldHVybnMgYGBSYW5nZVRyYWNrZXIuU1BMSVRfUE9JTlRTX1VOS05PV05gYCBmb3IKICAgIGJvdGggY29uc3VtZWQgYW5kIHJlbWFpbmluZyBudW1iZXIgb2Ygc3BsaXQgcG9pbnRzLCB3aGljaCBpbmRpY2F0ZXMgdGhhdCB0aGUKICAgIG51bWJlciBvZiBzcGxpdCBwb2ludHMgY29uc3VtZWQgYW5kIHJlbWFpbmluZyBpcyB1bmtub3duLgoKICAgIFJldHVybnM6CiAgICAgIEEgcGFpciB0aGF0IGdpdmVzIGNvbnN1bWVkIGFuZCByZW1haW5pbmcgbnVtYmVyIG9mIHNwbGl0IHBvaW50cy4gQ29uc3VtZWQKICAgICAgbnVtYmVyIG9mIHNwbGl0IHBvaW50cyBzaG91bGQgYmUgYW4gaW50ZWdlciBsYXJnZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvCiAgICAgIG9yIGBgUmFuZ2VUcmFja2VyLlNQTElUX1BPSU5UU19VTktOT1dOYGAuIFJlbWFpbmluZyBudW1iZXIgb2Ygc3BsaXQgcG9pbnRzCiAgICAgIHNob3VsZCBiZSBhbiBpbnRlZ2VyIGxhcmdlciB0aGFuIHplcm8gb3IKICAgICAgYGBSYW5nZVRyYWNrZXIuU1BMSVRfUE9JTlRTX1VOS05PV05gYC4KICAgICIiIgogICAgcmV0dXJuIChSYW5nZVRyYWNrZXIuU1BMSVRfUE9JTlRTX1VOS05PV04sCiAgICAgICAgICAgIFJhbmdlVHJhY2tlci5TUExJVF9QT0lOVFNfVU5LTk9XTikKCiAgZGVmIHNldF9zcGxpdF9wb2ludHNfdW5jbGFpbWVkX2NhbGxiYWNrKHNlbGYsIGNhbGxiYWNrKToKICAgICIiIlNldHMgYSBjYWxsYmFjayBmb3IgZGV0ZXJtaW5pbmcgdGhlIHVuY2xhaW1lZCBudW1iZXIgb2Ygc3BsaXQgcG9pbnRzLgoKICAgIEJ5IGludm9raW5nIHRoaXMgZnVuY3Rpb24sIGEgYGBCb3VuZGVkU291cmNlYGAgY2FuIHNldCBhIGNhbGxiYWNrIGZ1bmN0aW9uCiAgICB0aGF0IG1heSBnZXQgaW52b2tlZCBieSB0aGUgYGBSYW5nZVRyYWNrZXJgYCB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZgogICAgdW5jbGFpbWVkIHNwbGl0IHBvaW50cy4gQSBzcGxpdCBwb2ludCBpcyB1bmNsYWltZWQgaWYKICAgIGBgUmFuZ2VUcmFja2VyLnRyeV9jbGFpbSgpYGAgbWV0aG9kIGhhcyBub3QgYmVlbiBzdWNjZXNzZnVsbHkgaW52b2tlZCBmb3IKICAgIHRoYXQgcGFydGljdWxhciBzcGxpdCBwb2ludC4gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGFjY2VwdHMgYSBzaW5nbGUKICAgIHBhcmFtZXRlciwgYSBzdG9wIHBvc2l0aW9uIGZvciB0aGUgQm91bmRlZFNvdXJjZSAoc3RvcF9wb3NpdGlvbikuIElmIHRoZQogICAgcmVjb3JkIGN1cnJlbnRseSBiZWluZyBjb25zdW1lZCBieSB0aGUgYGBCb3VuZGVkU291cmNlYGAgaXMgYXQgcG9zaXRpb24KICAgIGN1cnJlbnRfcG9zaXRpb24sIGNhbGxiYWNrIHNob3VsZCByZXR1cm4gdGhlIG51bWJlciBvZiBzcGxpdCBwb2ludHMgd2l0aGluCiAgICB0aGUgcmFuZ2UgKGN1cnJlbnRfcG9zaXRpb24sIHN0b3BfcG9zaXRpb24pLiBOb3RlIHRoYXQsIHRoaXMgc2hvdWxkIG5vdAogICAgaW5jbHVkZSB0aGUgc3BsaXQgcG9pbnQgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgY29uc3VtZWQgYnkgdGhlIHNvdXJjZS4KCiAgICBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3NlcyBiZWZvcmUgYmVpbmcgdXNlZC4KCiAgICBBcmdzOgogICAgICBjYWxsYmFjazogYSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgc2luZ2xlIHBhcmFtZXRlciwgYSBzdG9wIHBvc2l0aW9uLAogICAgICAgICAgICAgICAgYW5kIHJldHVybnMgdW5jbGFpbWVkIG51bWJlciBvZiBzcGxpdCBwb2ludHMgZm9yIHRoZSBzb3VyY2UgcmVhZAogICAgICAgICAgICAgICAgb3BlcmF0aW9uIHRoYXQgaXMgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLiBWYWx1ZSByZXR1cm5lZCBmcm9tCiAgICAgICAgICAgICAgICBjYWxsYmFjayBzaG91bGQgYmUgZWl0aGVyIGFuIGludGVnZXIgbGFyZ2VyIHRoYW4gb3IgZXF1YWwgdG8KICAgICAgICAgICAgICAgIHplcm8gb3IgYGBSYW5nZVRyYWNrZXIuU1BMSVRfUE9JTlRTX1VOS05PV05gYC4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKCmNsYXNzIFNpbmsoSGFzRGlzcGxheURhdGEpOgogICIiIlRoaXMgY2xhc3MgaXMgZGVwcmVjYXRlZCwgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgQSByZXNvdXJjZSB0aGF0IGNhbiBiZSB3cml0dGVuIHRvIHVzaW5nIHRoZSBgYGJlYW0uaW8uV3JpdGVgYCB0cmFuc2Zvcm0uCgogIEhlcmUgYGBiZWFtYGAgc3RhbmRzIGZvciBBcGFjaGUgQmVhbSBQeXRob24gY29kZSBpbXBvcnRlZCBpbiBmb2xsb3dpbmcgbWFubmVyLgogIGBgaW1wb3J0IGFwYWNoZV9iZWFtIGFzIGJlYW1gYC4KCiAgQSBwYXJhbGxlbCB3cml0ZSB0byBhbiBgYGlvYmFzZS5TaW5rYGAgY29uc2lzdHMgb2YgdGhyZWUgcGhhc2VzOgoKICAxLiBBIHNlcXVlbnRpYWwgKmluaXRpYWxpemF0aW9uKiBwaGFzZSAoZS5nLiwgY3JlYXRpbmcgYSB0ZW1wb3Jhcnkgb3V0cHV0CiAgICAgZGlyZWN0b3J5LCBldGMuKQogIDIuIEEgcGFyYWxsZWwgd3JpdGUgcGhhc2Ugd2hlcmUgd29ya2VycyB3cml0ZSAqYnVuZGxlcyogb2YgcmVjb3JkcwogIDMuIEEgc2VxdWVudGlhbCAqZmluYWxpemF0aW9uKiBwaGFzZSAoZS5nLiwgY29tbWl0dGluZyB0aGUgd3JpdGVzLCBtZXJnaW5nCiAgICAgb3V0cHV0IGZpbGVzLCBldGMuKQoKICBJbXBsZW1lbnRpbmcgYSBuZXcgc2luayByZXF1aXJlcyBleHRlbmRpbmcgdHdvIGNsYXNzZXMuCgogIDEuIGlvYmFzZS5TaW5rCgogIGBgaW9iYXNlLlNpbmtgYCBpcyBhbiBpbW11dGFibGUgbG9naWNhbCBkZXNjcmlwdGlvbiBvZiB0aGUgbG9jYXRpb24vcmVzb3VyY2UKICB0byB3cml0ZSB0by4gRGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIHNpbmssIGl0IG1heSBjb250YWluIGZpZWxkcyBzdWNoIGFzIHRoZQogIHBhdGggdG8gYW4gb3V0cHV0IGRpcmVjdG9yeSBvbiBhIGZpbGVzeXN0ZW0sIGEgZGF0YWJhc2UgdGFibGUgbmFtZSwKICBldGMuIGBgaW9iYXNlLlNpbmtgYCBwcm92aWRlcyBtZXRob2RzIGZvciBwZXJmb3JtaW5nIGEgd3JpdGUgb3BlcmF0aW9uIHRvIHRoZQogIHNpbmsgZGVzY3JpYmVkIGJ5IGl0LiBUbyB0aGlzIGVuZCwgaW1wbGVtZW50b3JzIG9mIGFuIGV4dGVuc2lvbiBvZgogIGBgaW9iYXNlLlNpbmtgYCBtdXN0IGltcGxlbWVudCB0aHJlZSBtZXRob2RzOgogIGBgaW5pdGlhbGl6ZV93cml0ZSgpYGAsIGBgb3Blbl93cml0ZXIoKWBgLCBhbmQgYGBmaW5hbGl6ZV93cml0ZSgpYGAuCgogIDIuIGlvYmFzZS5Xcml0ZXIKCiAgYGBpb2Jhc2UuV3JpdGVyYGAgaXMgdXNlZCB0byB3cml0ZSBhIHNpbmdsZSBidW5kbGUgb2YgcmVjb3Jkcy4gQW4KICBgYGlvYmFzZS5Xcml0ZXJgYCBkZWZpbmVzIHR3byBtZXRob2RzOiBgYHdyaXRlKClgYCB3aGljaCB3cml0ZXMgYQogIHNpbmdsZSByZWNvcmQgZnJvbSB0aGUgYnVuZGxlIGFuZCBgYGNsb3NlKClgYCB3aGljaCBpcyBjYWxsZWQgb25jZQogIGF0IHRoZSBlbmQgb2Ygd3JpdGluZyBhIGJ1bmRsZS4KCiAgU2VlIGFsc28gYGBhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzaW5rLkZpbGVCYXNlZFNpbmtgYCB3aGljaCBwcm92aWRlcyBhCiAgc2ltcGxlciBBUEkgZm9yIHdyaXRpbmcgc2lua3MgdGhhdCBwcm9kdWNlIGZpbGVzLgoKICAqKkV4ZWN1dGlvbiBvZiB0aGUgV3JpdGUgdHJhbnNmb3JtKioKCiAgYGBpbml0aWFsaXplX3dyaXRlKClgYCwgYGBwcmVfZmluYWxpemUoKWBgLCBhbmQgYGBmaW5hbGl6ZV93cml0ZSgpYGAgYXJlCiAgY29uY2VwdHVhbGx5IGNhbGxlZCBvbmNlLiBIb3dldmVyLCBpbXBsZW1lbnRvcnMgbXVzdAogIGVuc3VyZSB0aGF0IHRoZXNlIG1ldGhvZHMgYXJlICppZGVtcG90ZW50KiwgYXMgdGhleSBtYXkgYmUgY2FsbGVkIG11bHRpcGxlCiAgdGltZXMgb24gZGlmZmVyZW50IG1hY2hpbmVzIGluIHRoZSBjYXNlIG9mIGZhaWx1cmUvcmV0cnkuIEEgbWV0aG9kIG1heSBiZQogIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBjb25jdXJyZW50bHksIGluIHdoaWNoIGNhc2UgaXQncyBva2F5IHRvIGhhdmUgYQogIHRyYW5zaWVudCBmYWlsdXJlIChzdWNoIGFzIGR1ZSB0byBhIHJhY2UgY29uZGl0aW9uKS4gVGhpcyBmYWlsdXJlIHNob3VsZCBub3QKICBwcmV2ZW50IHN1YnNlcXVlbnQgcmV0cmllcyBmcm9tIHN1Y2NlZWRpbmcuCgogIGBgaW5pdGlhbGl6ZV93cml0ZSgpYGAgc2hvdWxkIHBlcmZvcm0gYW55IGluaXRpYWxpemF0aW9uIHRoYXQgbmVlZHMgdG8gYmUgZG9uZQogIHByaW9yIHRvIHdyaXRpbmcgdG8gdGhlIHNpbmsuIGBgaW5pdGlhbGl6ZV93cml0ZSgpYGAgbWF5IHJldHVybiBhIHJlc3VsdAogIChsZXQncyBjYWxsIHRoaXMgYGBpbml0X3Jlc3VsdGBgKSB0aGF0IGNvbnRhaW5zIGFueSBwYXJhbWV0ZXJzIGl0IHdhbnRzIHRvCiAgcGFzcyBvbiB0byBpdHMgd3JpdGVycyBhYm91dCB0aGUgc2luay4gRm9yIGV4YW1wbGUsIGEgc2luayB0aGF0IHdyaXRlcyB0byBhCiAgZmlsZSBzeXN0ZW0gbWF5IHJldHVybiBhbiBgYGluaXRfcmVzdWx0YGAgdGhhdCBjb250YWlucyBhIGR5bmFtaWNhbGx5CiAgZ2VuZXJhdGVkIHVuaXF1ZSBkaXJlY3RvcnkgdG8gd2hpY2ggZGF0YSBzaG91bGQgYmUgd3JpdHRlbi4KCiAgVG8gcGVyZm9ybSB3cml0aW5nIG9mIGEgYnVuZGxlIG9mIGVsZW1lbnRzLCBEYXRhZmxvdyBleGVjdXRpb24gZW5naW5lIHdpbGwKICBjcmVhdGUgYW4gYGBpb2Jhc2UuV3JpdGVyYGAgdXNpbmcgdGhlIGltcGxlbWVudGF0aW9uIG9mCiAgYGBpb2Jhc2UuU2luay5vcGVuX3dyaXRlcigpYGAuIFdoZW4gaW52b2tpbmcgYGBvcGVuX3dyaXRlcigpYGAgZXhlY3V0aW9uCiAgZW5naW5lIHdpbGwgcHJvdmlkZSB0aGUgYGBpbml0X3Jlc3VsdGBgIHJldHVybmVkIGJ5IGBgaW5pdGlhbGl6ZV93cml0ZSgpYGAKICBpbnZvY2F0aW9uIGFzIHdlbGwgYXMgYSAqYnVuZGxlIGlkKiAobGV0J3MgY2FsbCB0aGlzIGBgYnVuZGxlX2lkYGApIHRoYXQgaXMKICB1bmlxdWUgZm9yIGVhY2ggaW52b2NhdGlvbiBvZiBgYG9wZW5fd3JpdGVyKClgYC4KCiAgRXhlY3V0aW9uIGVuZ2luZSB3aWxsIHRoZW4gaW52b2tlIGBgaW9iYXNlLldyaXRlci53cml0ZSgpYGAgaW1wbGVtZW50YXRpb24gZm9yCiAgZWFjaCBlbGVtZW50IHRoYXQgaGFzIHRvIGJlIHdyaXR0ZW4uIE9uY2UgYWxsIGVsZW1lbnRzIG9mIGEgYnVuZGxlIGFyZQogIHdyaXR0ZW4sIGV4ZWN1dGlvbiBlbmdpbmUgd2lsbCBpbnZva2UgYGBpb2Jhc2UuV3JpdGVyLmNsb3NlKClgYCBpbXBsZW1lbnRhdGlvbgogIHdoaWNoIHNob3VsZCByZXR1cm4gYSByZXN1bHQgKGxldCdzIGNhbGwgdGhpcyBgYHdyaXRlX3Jlc3VsdGBgKSB0aGF0IGNvbnRhaW5zCiAgaW5mb3JtYXRpb24gdGhhdCBlbmNvZGVzIHRoZSByZXN1bHQgb2YgdGhlIHdyaXRlIGFuZCwgaW4gbW9zdCBjYXNlcywgc29tZQogIGVuY29kaW5nIG9mIHRoZSB1bmlxdWUgYnVuZGxlIGlkLiBGb3IgZXhhbXBsZSwgaWYgZWFjaCBidW5kbGUgaXMgd3JpdHRlbiB0byBhCiAgdW5pcXVlIHRlbXBvcmFyeSBmaWxlLCBgYGNsb3NlKClgYCBtZXRob2QgbWF5IHJldHVybiBhbiBvYmplY3QgdGhhdCBjb250YWlucwogIHRoZSB0ZW1wb3JhcnkgZmlsZSBuYW1lLiBBZnRlciB3cml0aW5nIG9mIGFsbCBidW5kbGVzIGlzIGNvbXBsZXRlLCBleGVjdXRpb24KICBlbmdpbmUgd2lsbCBpbnZva2UgYGBwcmVfZmluYWxpemUoKWBgIGFuZCB0aGVuIGBgZmluYWxpemVfd3JpdGUoKWBgCiAgaW1wbGVtZW50YXRpb24uCgogIFRoZSBleGVjdXRpb24gb2YgYSB3cml0ZSB0cmFuc2Zvcm0gY2FuIGJlIGlsbHVzdHJhdGVkIHVzaW5nIGZvbGxvd2luZyBwc2V1ZG8KICBjb2RlIChhc3N1bWUgdGhhdCB0aGUgb3V0ZXIgZm9yIGxvb3AgaGFwcGVucyBpbiBwYXJhbGxlbCBhY3Jvc3MgbWFueQogIG1hY2hpbmVzKTo6CgogICAgaW5pdF9yZXN1bHQgPSBzaW5rLmluaXRpYWxpemVfd3JpdGUoKQogICAgd3JpdGVfcmVzdWx0cyA9IFtdCiAgICBmb3IgYnVuZGxlIGluIHBhcnRpdGlvbihwY29sbCk6CiAgICAgIHdyaXRlciA9IHNpbmsub3Blbl93cml0ZXIoaW5pdF9yZXN1bHQsIGdlbmVyYXRlX2J1bmRsZV9pZCgpKQogICAgICBmb3IgZWxlbSBpbiBidW5kbGU6CiAgICAgICAgd3JpdGVyLndyaXRlKGVsZW0pCiAgICAgIHdyaXRlX3Jlc3VsdHMuYXBwZW5kKHdyaXRlci5jbG9zZSgpKQogICAgcHJlX2ZpbmFsaXplX3Jlc3VsdCA9IHNpbmsucHJlX2ZpbmFsaXplKGluaXRfcmVzdWx0LCB3cml0ZV9yZXN1bHRzKQogICAgc2luay5maW5hbGl6ZV93cml0ZShpbml0X3Jlc3VsdCwgd3JpdGVfcmVzdWx0cywgcHJlX2ZpbmFsaXplX3Jlc3VsdCkKCgogICoqaW5pdF9yZXN1bHQqKgoKICBNZXRob2RzIG9mICdpb2Jhc2UuU2luaycgc2hvdWxkIGFncmVlIG9uIHRoZSAnaW5pdF9yZXN1bHQnIHR5cGUgdGhhdCB3aWxsIGJlCiAgcmV0dXJuZWQgd2hlbiBpbml0aWFsaXppbmcgdGhlIHNpbmsuIFRoaXMgdHlwZSBjYW4gYmUgYSBjbGllbnQtZGVmaW5lZCBvYmplY3QKICBvciBhbiBleGlzdGluZyB0eXBlLiBUaGUgcmV0dXJuZWQgdHlwZSBtdXN0IGJlIHBpY2tsYWJsZSB1c2luZyBEYXRhZmxvdyBjb2RlcgogIGBgY29kZXJzLlBpY2tsZUNvZGVyYGAuIFJldHVybmluZyBhbiBpbml0X3Jlc3VsdCBpcyBvcHRpb25hbC4KCiAgKipidW5kbGVfaWQqKgoKICBJbiBvcmRlciB0byBlbnN1cmUgZmF1bHQtdG9sZXJhbmNlLCBhIGJ1bmRsZSBtYXkgYmUgZXhlY3V0ZWQgbXVsdGlwbGUgdGltZXMKICAoZS5nLiwgaW4gdGhlIGV2ZW50IG9mIGZhaWx1cmUvcmV0cnkgb3IgZm9yIHJlZHVuZGFuY3kpLiBIb3dldmVyLCBleGFjdGx5IG9uZQogIG9mIHRoZXNlIGV4ZWN1dGlvbnMgd2lsbCBoYXZlIGl0cyByZXN1bHQgcGFzc2VkIHRvIHRoZQogIGBgaW9iYXNlLlNpbmsuZmluYWxpemVfd3JpdGUoKWBgIG1ldGhvZC4gRWFjaCBjYWxsIHRvCiAgYGBpb2Jhc2UuU2luay5vcGVuX3dyaXRlcigpYGAgaXMgcGFzc2VkIGEgdW5pcXVlIGJ1bmRsZSBpZCB3aGVuIGl0IGlzIGNhbGxlZAogIGJ5IHRoZSBgYFdyaXRlSW1wbGBgIHRyYW5zZm9ybSwgc28gZXZlbiByZWR1bmRhbnQgb3IgcmV0cmllZCBidW5kbGVzIHdpbGwgaGF2ZQogIGEgdW5pcXVlIHdheSBvZiBpZGVudGlmeWluZyB0aGVpciBvdXRwdXQuCgogIFRoZSBidW5kbGUgaWQgc2hvdWxkIGJlIHVzZWQgdG8gZ3VhcmFudGVlIHRoYXQgYSBidW5kbGUncyBvdXRwdXQgaXMgdW5pcXVlLgogIFRoaXMgdW5pcXVlbmVzcyBndWFyYW50ZWUgaXMgaW1wb3J0YW50OyBpZiBhIGJ1bmRsZSBpcyB0byBiZSBvdXRwdXQgdG8gYSBmaWxlLAogIGZvciBleGFtcGxlLCB0aGUgbmFtZSBvZiB0aGUgZmlsZSBtdXN0IGJlIHVuaXF1ZSB0byBhdm9pZCBjb25mbGljdHMgd2l0aCBvdGhlcgogIHdyaXRlcnMuIFRoZSBidW5kbGUgaWQgc2hvdWxkIGJlIGVuY29kZWQgaW4gdGhlIHdyaXRlciByZXN1bHQgcmV0dXJuZWQgYnkgdGhlCiAgd3JpdGVyIGFuZCBzdWJzZXF1ZW50bHkgdXNlZCBieSB0aGUgYGBmaW5hbGl6ZV93cml0ZSgpYGAgbWV0aG9kIHRvIGlkZW50aWZ5CiAgdGhlIHJlc3VsdHMgb2Ygc3VjY2Vzc2Z1bCB3cml0ZXMuCgogIEZvciBleGFtcGxlLCBjb25zaWRlciB0aGUgc2NlbmFyaW8gd2hlcmUgYSBXcml0ZXIgd3JpdGVzIGZpbGVzIGNvbnRhaW5pbmcKICBzZXJpYWxpemVkIHJlY29yZHMgYW5kIHRoZSBgYGZpbmFsaXplX3dyaXRlKClgYCBpcyB0byBtZXJnZSBvciByZW5hbWUgdGhlc2UKICBvdXRwdXQgZmlsZXMuIEluIHRoaXMgY2FzZSwgYSB3cml0ZXIgbWF5IHVzZSBpdHMgdW5pcXVlIGlkIHRvIG5hbWUgaXRzIG91dHB1dAogIGZpbGUgKHRvIGF2b2lkIGNvbmZsaWN0cykgYW5kIHJldHVybiB0aGUgbmFtZSBvZiB0aGUgZmlsZSBpdCB3cm90ZSBhcyBpdHMKICB3cml0ZXIgcmVzdWx0LiBUaGUgYGBmaW5hbGl6ZV93cml0ZSgpYGAgd2lsbCB0aGVuIHJlY2VpdmUgYW4gYGBJdGVyYWJsZWBgIG9mCiAgb3V0cHV0IGZpbGUgbmFtZXMgdGhhdCBpdCBjYW4gdGhlbiBtZXJnZSBvciByZW5hbWUgdXNpbmcgc29tZSBidW5kbGUgbmFtaW5nCiAgc2NoZW1lLgoKICAqKndyaXRlX3Jlc3VsdCoqCgogIGBgaW9iYXNlLldyaXRlci5jbG9zZSgpYGAgYW5kIGBgZmluYWxpemVfd3JpdGUoKWBgIGltcGxlbWVudGF0aW9ucyBtdXN0IGFncmVlCiAgb24gdHlwZSBvZiB0aGUgYGB3cml0ZV9yZXN1bHRgYCBvYmplY3QgcmV0dXJuZWQgd2hlbiBpbnZva2luZwogIGBgaW9iYXNlLldyaXRlci5jbG9zZSgpYGAuIFRoaXMgdHlwZSBjYW4gYmUgYSBjbGllbnQtZGVmaW5lZCBvYmplY3Qgb3IKICBhbiBleGlzdGluZyB0eXBlLiBUaGUgcmV0dXJuZWQgdHlwZSBtdXN0IGJlIHBpY2tsYWJsZSB1c2luZyBEYXRhZmxvdyBjb2RlcgogIGBgY29kZXJzLlBpY2tsZUNvZGVyYGAuIFJldHVybmluZyBhIGBgd3JpdGVfcmVzdWx0YGAgd2hlbgogIGBgaW9iYXNlLldyaXRlci5jbG9zZSgpYGAgaXMgaW52b2tlZCBpcyBvcHRpb25hbCBidXQgaWYgdW5pcXVlCiAgYGB3cml0ZV9yZXN1bHRgYCBvYmplY3RzIGFyZSBub3QgcmV0dXJuZWQsIHNpbmsgc2hvdWxkLCBndWFyYW50ZWUgaWRlbXBvdGVuY3kKICB3aGVuIHNhbWUgYnVuZGxlIGlzIHdyaXR0ZW4gbXVsdGlwbGUgdGltZXMgZHVlIHRvIGZhaWx1cmUvcmV0cnkgb3IgcmVkdW5kYW5jeS4KCgogICoqTW9yZSBpbmZvcm1hdGlvbioqCgogIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGNyZWF0aW5nIG5ldyBzaW5rcyBwbGVhc2UgcmVmZXIgdG8gdGhlIG9mZmljaWFsCiAgZG9jdW1lbnRhdGlvbiBhdAogIGBgaHR0cHM6Ly9iZWFtLmFwYWNoZS5vcmcvZG9jdW1lbnRhdGlvbi9zZGtzL3B5dGhvbi1jdXN0b20taW8jY3JlYXRpbmctc2lua3NgYAogICIiIgoKICBkZWYgaW5pdGlhbGl6ZV93cml0ZShzZWxmKToKICAgICIiIkluaXRpYWxpemVzIHRoZSBzaW5rIGJlZm9yZSB3cml0aW5nIGJlZ2lucy4KCiAgICBJbnZva2VkIGJlZm9yZSBhbnkgZGF0YSBpcyB3cml0dGVuIHRvIHRoZSBzaW5rLgoKCiAgICBQbGVhc2Ugc2VlIGRvY3VtZW50YXRpb24gaW4gYGBpb2Jhc2UuU2lua2BgIGZvciBhbiBleGFtcGxlLgoKICAgIFJldHVybnM6CiAgICAgIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGFueSBzaW5rIHNwZWNpZmljIHN0YXRlIGdlbmVyYXRlZCBieQogICAgICBpbml0aWFsaXphdGlvbi4gVGhpcyBvYmplY3Qgd2lsbCBiZSBwYXNzZWQgdG8gb3Blbl93cml0ZXIoKSBhbmQKICAgICAgZmluYWxpemVfd3JpdGUoKSBtZXRob2RzLgogICAgIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiBvcGVuX3dyaXRlcihzZWxmLCBpbml0X3Jlc3VsdCwgdWlkKToKICAgICIiIk9wZW5zIGEgd3JpdGVyIGZvciB3cml0aW5nIGEgYnVuZGxlIG9mIGVsZW1lbnRzIHRvIHRoZSBzaW5rLgoKICAgIEFyZ3M6CiAgICAgIGluaXRfcmVzdWx0OiB0aGUgcmVzdWx0IG9mIGluaXRpYWxpemVfd3JpdGUoKSBpbnZvY2F0aW9uLgogICAgICB1aWQ6IGEgdW5pcXVlIGlkZW50aWZpZXIgZ2VuZXJhdGVkIGJ5IHRoZSBzeXN0ZW0uCiAgICBSZXR1cm5zOgogICAgICBhbiBgYGlvYmFzZS5Xcml0ZXJgYCB0aGF0IGNhbiBiZSB1c2VkIHRvIHdyaXRlIGEgYnVuZGxlIG9mIHJlY29yZHMgdG8gdGhlCiAgICAgIGN1cnJlbnQgc2luay4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgcHJlX2ZpbmFsaXplKHNlbGYsIGluaXRfcmVzdWx0LCB3cml0ZXJfcmVzdWx0cyk6CiAgICAiIiJQcmUtZmluYWxpemF0aW9uIHN0YWdlIGZvciBzaW5rLgoKICAgIENhbGxlZCBhZnRlciBhbGwgYnVuZGxlIHdyaXRlcyBhcmUgY29tcGxldGUgYW5kIGJlZm9yZSBmaW5hbGl6ZV93cml0ZS4KICAgIFVzZWQgdG8gc2V0dXAgYW5kIHZlcmlmeSBmaWxlc3lzdGVtIGFuZCBzaW5rIHN0YXRlcy4KCiAgICBBcmdzOgogICAgICBpbml0X3Jlc3VsdDogdGhlIHJlc3VsdCBvZiBgYGluaXRpYWxpemVfd3JpdGUoKWBgIGludm9jYXRpb24uCiAgICAgIHdyaXRlcl9yZXN1bHRzOiBhbiBpdGVyYWJsZSBjb250YWluaW5nIHJlc3VsdHMgb2YgYGBXcml0ZXIuY2xvc2UoKWBgCiAgICAgICAgaW52b2NhdGlvbnMuIFRoaXMgd2lsbCBvbmx5IGNvbnRhaW4gcmVzdWx0cyBvZiBzdWNjZXNzZnVsIHdyaXRlcywgYW5kCiAgICAgICAgd2lsbCBvbmx5IGNvbnRhaW4gdGhlIHJlc3VsdCBvZiBhIHNpbmdsZSBzdWNjZXNzZnVsIHdyaXRlIGZvciBhIGdpdmVuCiAgICAgICAgYnVuZGxlLgoKICAgIFJldHVybnM6CiAgICAgIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGFueSBzaW5rIHNwZWNpZmljIHN0YXRlIGdlbmVyYXRlZC4KICAgICAgVGhpcyBvYmplY3Qgd2lsbCBiZSBwYXNzZWQgdG8gZmluYWxpemVfd3JpdGUoKS4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgZmluYWxpemVfd3JpdGUoc2VsZiwgaW5pdF9yZXN1bHQsIHdyaXRlcl9yZXN1bHRzLAogICAgICAgICAgICAgICAgICAgICBwcmVfZmluYWxpemVfcmVzdWx0KToKICAgICIiIkZpbmFsaXplcyB0aGUgc2luayBhZnRlciBhbGwgZGF0YSBpcyB3cml0dGVuIHRvIGl0LgoKICAgIEdpdmVuIHRoZSByZXN1bHQgb2YgaW5pdGlhbGl6YXRpb24gYW5kIGFuIGl0ZXJhYmxlIG9mIHJlc3VsdHMgZnJvbSBidW5kbGUKICAgIHdyaXRlcywgcGVyZm9ybXMgZmluYWxpemF0aW9uIGFmdGVyIHdyaXRpbmcgYW5kIGNsb3NlcyB0aGUgc2luay4gQ2FsbGVkCiAgICBhZnRlciBhbGwgYnVuZGxlIHdyaXRlcyBhcmUgY29tcGxldGUuCgogICAgVGhlIGJ1bmRsZSB3cml0ZSByZXN1bHRzIHRoYXQgYXJlIHBhc3NlZCB0byBmaW5hbGl6ZSBhcmUgdGhvc2UgcmV0dXJuZWQgYnkKICAgIGJ1bmRsZXMgdGhhdCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LiBBbHRob3VnaCBidW5kbGVzIG1heSBoYXZlIGJlZW4gcnVuCiAgICBtdWx0aXBsZSB0aW1lcyAoZm9yIGZhdWx0LXRvbGVyYW5jZSksIG9ubHkgb25lIHdyaXRlciByZXN1bHQgd2lsbCBiZSBwYXNzZWQKICAgIHRvIGZpbmFsaXplIGZvciBlYWNoIGJ1bmRsZS4gQW4gaW1wbGVtZW50YXRpb24gb2YgZmluYWxpemUgc2hvdWxkIHBlcmZvcm0KICAgIGNsZWFuIHVwIG9mIGFueSBmYWlsZWQgYW5kIHN1Y2Nlc3NmdWxseSByZXRyaWVkIGJ1bmRsZXMuICBOb3RlIHRoYXQgdGhlc2UKICAgIGZhaWxlZCBidW5kbGVzIHdpbGwgbm90IGhhdmUgdGhlaXIgd3JpdGVyIHJlc3VsdCBwYXNzZWQgdG8gZmluYWxpemUsIHNvCiAgICBmaW5hbGl6ZSBzaG91bGQgYmUgY2FwYWJsZSBvZiBsb2NhdGluZyBhbnkgdGVtcG9yYXJ5L3BhcnRpYWwgb3V0cHV0IHdyaXR0ZW4KICAgIGJ5IGZhaWxlZCBidW5kbGVzLgoKICAgIElmIGFsbCByZXRyaWVzIG9mIGEgYnVuZGxlIGZhaWxzLCB0aGUgd2hvbGUgcGlwZWxpbmUgd2lsbCBmYWlsICp3aXRob3V0KgogICAgZmluYWxpemVfd3JpdGUoKSBiZWluZyBpbnZva2VkLgoKICAgIEEgYmVzdCBwcmFjdGljZSBpcyB0byBtYWtlIGZpbmFsaXplIGF0b21pYy4gSWYgdGhpcyBpcyBpbXBvc3NpYmxlIGdpdmVuIHRoZQogICAgc2VtYW50aWNzIG9mIHRoZSBzaW5rLCBmaW5hbGl6ZSBzaG91bGQgYmUgaWRlbXBvdGVudCwgYXMgaXQgbWF5IGJlIGNhbGxlZAogICAgbXVsdGlwbGUgdGltZXMgaW4gdGhlIGNhc2Ugb2YgZmFpbHVyZS9yZXRyeSBvciBmb3IgcmVkdW5kYW5jeS4KCiAgICBOb3RlIHRoYXQgdGhlIGl0ZXJhdGlvbiBvcmRlciBvZiB0aGUgd3JpdGVyIHJlc3VsdHMgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUKICAgIGNvbnNpc3RlbnQgaWYgZmluYWxpemUgaXMgY2FsbGVkIG11bHRpcGxlIHRpbWVzLgoKICAgIEFyZ3M6CiAgICAgIGluaXRfcmVzdWx0OiB0aGUgcmVzdWx0IG9mIGBgaW5pdGlhbGl6ZV93cml0ZSgpYGAgaW52b2NhdGlvbi4KICAgICAgd3JpdGVyX3Jlc3VsdHM6IGFuIGl0ZXJhYmxlIGNvbnRhaW5pbmcgcmVzdWx0cyBvZiBgYFdyaXRlci5jbG9zZSgpYGAKICAgICAgICBpbnZvY2F0aW9ucy4gVGhpcyB3aWxsIG9ubHkgY29udGFpbiByZXN1bHRzIG9mIHN1Y2Nlc3NmdWwgd3JpdGVzLCBhbmQKICAgICAgICB3aWxsIG9ubHkgY29udGFpbiB0aGUgcmVzdWx0IG9mIGEgc2luZ2xlIHN1Y2Nlc3NmdWwgd3JpdGUgZm9yIGEgZ2l2ZW4KICAgICAgICBidW5kbGUuCiAgICAgIHByZV9maW5hbGl6ZV9yZXN1bHQ6IHRoZSByZXN1bHQgb2YgYGBwcmVfZmluYWxpemUoKWBgIGludm9jYXRpb24uCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCgpjbGFzcyBXcml0ZXIob2JqZWN0KToKICAiIiJUaGlzIGNsYXNzIGlzIGRlcHJlY2F0ZWQsIG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIFdyaXRlcyBhIGJ1bmRsZSBvZiBlbGVtZW50cyBmcm9tIGEgYGBQQ29sbGVjdGlvbmBgIHRvIGEgc2luay4KCiAgQSBXcml0ZXIgIGBgaW9iYXNlLldyaXRlci53cml0ZSgpYGAgd3JpdGVzIGFuZCBlbGVtZW50cyB0byB0aGUgc2luayB3aGlsZQogIGBgaW9iYXNlLldyaXRlci5jbG9zZSgpYGAgaXMgY2FsbGVkIGFmdGVyIGFsbCBlbGVtZW50cyBpbiB0aGUgYnVuZGxlIGhhdmUgYmVlbgogIHdyaXR0ZW4uCgogIFNlZSBgYGlvYmFzZS5TaW5rYGAgZm9yIG1vcmUgZGV0YWlsZWQgZG9jdW1lbnRhdGlvbiBhYm91dCB0aGUgcHJvY2VzcyBvZgogIHdyaXRpbmcgdG8gYSBzaW5rLgogICIiIgoKICBkZWYgd3JpdGUoc2VsZiwgdmFsdWUpOgogICAgIiIiV3JpdGVzIGEgdmFsdWUgdG8gdGhlIHNpbmsgdXNpbmcgdGhlIGN1cnJlbnQgd3JpdGVyLiIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgY2xvc2Uoc2VsZik6CiAgICAiIiJDbG9zZXMgdGhlIGN1cnJlbnQgd3JpdGVyLgoKICAgIFBsZWFzZSBzZWUgZG9jdW1lbnRhdGlvbiBpbiBgYGlvYmFzZS5TaW5rYGAgZm9yIGFuIGV4YW1wbGUuCgogICAgUmV0dXJuczoKICAgICAgQW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgd3JpdGVzIHRoYXQgd2VyZSBwZXJmb3JtZWQgYnkgdGhlIGN1cnJlbnQKICAgICAgd3JpdGVyLgogICAgIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgoKY2xhc3MgUmVhZChwdHJhbnNmb3JtLlBUcmFuc2Zvcm0pOgogICIiIkEgdHJhbnNmb3JtIHRoYXQgcmVhZHMgYSBQQ29sbGVjdGlvbi4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHNvdXJjZSk6CiAgICAiIiJJbml0aWFsaXplcyBhIFJlYWQgdHJhbnNmb3JtLgoKICAgIEFyZ3M6CiAgICAgIHNvdXJjZTogRGF0YSBzb3VyY2UgdG8gcmVhZCBmcm9tLgogICAgIiIiCiAgICBzdXBlcihSZWFkLCBzZWxmKS5fX2luaXRfXygpCiAgICBzZWxmLnNvdXJjZSA9IHNvdXJjZQoKICBkZWYgZXhwYW5kKHNlbGYsIHBiZWdpbik6CiAgICBmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgRGVidWdPcHRpb25zCiAgICBmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IHV0aWwKCiAgICBhc3NlcnQgaXNpbnN0YW5jZShwYmVnaW4sIHB2YWx1ZS5QQmVnaW4pCiAgICBzZWxmLnBpcGVsaW5lID0gcGJlZ2luLnBpcGVsaW5lCgogICAgZGVidWdfb3B0aW9ucyA9IHNlbGYucGlwZWxpbmUuX29wdGlvbnMudmlld19hcyhEZWJ1Z09wdGlvbnMpCiAgICBpZiBkZWJ1Z19vcHRpb25zLmV4cGVyaW1lbnRzIGFuZCAnYmVhbV9mbl9hcGknIGluIGRlYnVnX29wdGlvbnMuZXhwZXJpbWVudHM6CiAgICAgIHNvdXJjZSA9IHNlbGYuc291cmNlCgogICAgICBkZWYgc3BsaXRfc291cmNlKHVudXNlZF9pbXB1bHNlKToKICAgICAgICB0b3RhbF9zaXplID0gc291cmNlLmVzdGltYXRlX3NpemUoKQogICAgICAgIGlmIHRvdGFsX3NpemU6CiAgICAgICAgICAjIDFNQiA9IDEgc2hhcmQsIDFHQiA9IDMyIHNoYXJkcywgMVRCID0gMTAwMCBzaGFyZHMsIDFQQiA9IDMyayBzaGFyZHMKICAgICAgICAgIGNodW5rX3NpemUgPSBtYXgoMSA8PCAyMCwgMTAwMCAqIGludChtYXRoLnNxcnQodG90YWxfc2l6ZSkpKQogICAgICAgIGVsc2U6CiAgICAgICAgICBjaHVua19zaXplID0gNjQgPDwgMjAgICMgNjRtYgogICAgICAgIHJldHVybiBzb3VyY2Uuc3BsaXQoY2h1bmtfc2l6ZSkKCiAgICAgIHJldHVybiAoCiAgICAgICAgICBwYmVnaW4KICAgICAgICAgIHwgY29yZS5JbXB1bHNlKCkKICAgICAgICAgIHwgJ1NwbGl0JyA+PiBjb3JlLkZsYXRNYXAoc3BsaXRfc291cmNlKQogICAgICAgICAgfCB1dGlsLlJlc2h1ZmZsZSgpCiAgICAgICAgICB8ICdSZWFkU3BsaXRzJyA+PiBjb3JlLkZsYXRNYXAobGFtYmRhIHNwbGl0OiBzcGxpdC5zb3VyY2UucmVhZCgKICAgICAgICAgICAgICBzcGxpdC5zb3VyY2UuZ2V0X3JhbmdlX3RyYWNrZXIoCiAgICAgICAgICAgICAgICAgIHNwbGl0LnN0YXJ0X3Bvc2l0aW9uLCBzcGxpdC5zdG9wX3Bvc2l0aW9uKSkpKQogICAgZWxzZToKICAgICAgIyBUcmVhdCBSZWFkIGl0c2VsZiBhcyBhIHByaW1pdGl2ZS4KICAgICAgcmV0dXJuIHB2YWx1ZS5QQ29sbGVjdGlvbihzZWxmLnBpcGVsaW5lKQoKICBkZWYgZ2V0X3dpbmRvd2luZyhzZWxmLCB1bnVzZWRfaW5wdXRzKToKICAgIHJldHVybiBjb3JlLldpbmRvd2luZyh3aW5kb3cuR2xvYmFsV2luZG93cygpKQoKICBkZWYgX2luZmVyX291dHB1dF9jb2RlcihzZWxmLCBpbnB1dF90eXBlPU5vbmUsIGlucHV0X2NvZGVyPU5vbmUpOgogICAgaWYgaXNpbnN0YW5jZShzZWxmLnNvdXJjZSwgQm91bmRlZFNvdXJjZSk6CiAgICAgIHJldHVybiBzZWxmLnNvdXJjZS5kZWZhdWx0X291dHB1dF9jb2RlcigpCiAgICBlbHNlOgogICAgICByZXR1cm4gc2VsZi5zb3VyY2UuY29kZXIKCiAgZGVmIGRpc3BsYXlfZGF0YShzZWxmKToKICAgIHJldHVybiB7J3NvdXJjZSc6IERpc3BsYXlEYXRhSXRlbShzZWxmLnNvdXJjZS5fX2NsYXNzX18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9J1JlYWQgU291cmNlJyksCiAgICAgICAgICAgICdzb3VyY2VfZGQnOiBzZWxmLnNvdXJjZX0KCiAgZGVmIHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHNlbGYsIGNvbnRleHQpOgogICAgcmV0dXJuIChjb21tb25fdXJucy5kZXByZWNhdGVkX3ByaW1pdGl2ZXMuUkVBRC51cm4sCiAgICAgICAgICAgIGJlYW1fcnVubmVyX2FwaV9wYjIuUmVhZFBheWxvYWQoCiAgICAgICAgICAgICAgICBzb3VyY2U9c2VsZi5zb3VyY2UudG9fcnVubmVyX2FwaShjb250ZXh0KSwKICAgICAgICAgICAgICAgIGlzX2JvdW5kZWQ9YmVhbV9ydW5uZXJfYXBpX3BiMi5Jc0JvdW5kZWQuQk9VTkRFRAogICAgICAgICAgICAgICAgaWYgc2VsZi5zb3VyY2UuaXNfYm91bmRlZCgpCiAgICAgICAgICAgICAgICBlbHNlIGJlYW1fcnVubmVyX2FwaV9wYjIuSXNCb3VuZGVkLlVOQk9VTkRFRCkpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcihwYXJhbWV0ZXIsIGNvbnRleHQpOgogICAgcmV0dXJuIFJlYWQoU291cmNlQmFzZS5mcm9tX3J1bm5lcl9hcGkocGFyYW1ldGVyLnNvdXJjZSwgY29udGV4dCkpCgoKcHRyYW5zZm9ybS5QVHJhbnNmb3JtLnJlZ2lzdGVyX3VybigKICAgIGNvbW1vbl91cm5zLmRlcHJlY2F0ZWRfcHJpbWl0aXZlcy5SRUFELnVybiwKICAgIGJlYW1fcnVubmVyX2FwaV9wYjIuUmVhZFBheWxvYWQsCiAgICBSZWFkLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXIpCgoKY2xhc3MgV3JpdGUocHRyYW5zZm9ybS5QVHJhbnNmb3JtKToKICAiIiJBIGBgUFRyYW5zZm9ybWBgIHRoYXQgd3JpdGVzIHRvIGEgc2luay4KCiAgQSBzaW5rIHNob3VsZCBpbmhlcml0IGBgaW9iYXNlLlNpbmtgYC4gU3VjaCBpbXBsZW1lbnRhdGlvbnMgYXJlCiAgaGFuZGxlZCB1c2luZyBhIGNvbXBvc2l0ZSB0cmFuc2Zvcm0gdGhhdCBjb25zaXN0cyBvZiB0aHJlZSBgYFBhckRvYGBzIC0KICAoMSkgYSBgYFBhckRvYGAgcGVyZm9ybWluZyBhIGdsb2JhbCBpbml0aWFsaXphdGlvbiAoMikgYSBgYFBhckRvYGAgcGVyZm9ybWluZwogIGEgcGFyYWxsZWwgd3JpdGUgYW5kICgzKSBhIGBgUGFyRG9gYCBwZXJmb3JtaW5nIGEgZ2xvYmFsIGZpbmFsaXphdGlvbi4gSW4gdGhlCiAgY2FzZSBvZiBhbiBlbXB0eSBgYFBDb2xsZWN0aW9uYGAsIG9ubHkgdGhlIGdsb2JhbCBpbml0aWFsaXphdGlvbiBhbmQKICBmaW5hbGl6YXRpb24gd2lsbCBiZSBwZXJmb3JtZWQuIEN1cnJlbnRseSBvbmx5IGJhdGNoIHdvcmtmbG93cyBzdXBwb3J0IGN1c3RvbQogIHNpbmtzLgoKICBFeGFtcGxlIHVzYWdlOjoKCiAgICAgIHBjb2xsZWN0aW9uIHwgYmVhbS5pby5Xcml0ZShNeVNpbmsoKSkKCiAgVGhpcyByZXR1cm5zIGEgYGBwdmFsdWUuUFZhbHVlYGAgb2JqZWN0IHRoYXQgcmVwcmVzZW50cyB0aGUgZW5kIG9mIHRoZQogIFBpcGVsaW5lLgoKICBUaGUgc2luayBhcmd1bWVudCBtYXkgYWxzbyBiZSBhIGZ1bGwgUFRyYW5zZm9ybSwgaW4gd2hpY2ggY2FzZSBpdCB3aWxsIGJlCiAgYXBwbGllZCBkaXJlY3RseS4gIFRoaXMgYWxsb3dzIGNvbXBvc2l0ZSBzaW5rLWxpa2UgdHJhbnNmb3JtcyAoZS5nLiBhIHNpbmsKICB3aXRoIHNvbWUgcHJlLXByb2Nlc3NpbmcgRG9GbnMpIHRvIGJlIHVzZWQgdGhlIHNhbWUgYXMgYWxsIG90aGVyIHNpbmtzLgoKICBUaGlzIHRyYW5zZm9ybSBhbHNvIHN1cHBvcnRzIHNpbmtzIHRoYXQgaW5oZXJpdCBgYGlvYmFzZS5OYXRpdmVTaW5rYGAuIFRoZXNlCiAgYXJlIHNpbmtzIHRoYXQgYXJlIGltcGxlbWVudGVkIG5hdGl2ZWx5IGJ5IHRoZSBEYXRhZmxvdyBzZXJ2aWNlIGFuZCBoZW5jZQogIHNob3VsZCBub3QgYmUgdXBkYXRlZCBieSB1c2Vycy4gVGhlc2Ugc2lua3MgYXJlIHByb2Nlc3NlZCB1c2luZyBhIERhdGFmbG93CiAgbmF0aXZlIHdyaXRlIHRyYW5zZm9ybS4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHNpbmspOgogICAgIiIiSW5pdGlhbGl6ZXMgYSBXcml0ZSB0cmFuc2Zvcm0uCgogICAgQXJnczoKICAgICAgc2luazogRGF0YSBzaW5rIHRvIHdyaXRlIHRvLgogICAgIiIiCiAgICBzdXBlcihXcml0ZSwgc2VsZikuX19pbml0X18oKQogICAgc2VsZi5zaW5rID0gc2luawoKICBkZWYgZGlzcGxheV9kYXRhKHNlbGYpOgogICAgcmV0dXJuIHsnc2luayc6IHNlbGYuc2luay5fX2NsYXNzX18sCiAgICAgICAgICAgICdzaW5rX2RkJzogc2VsZi5zaW5rfQoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgIGZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8gaW1wb3J0IGlvYmFzZSBhcyBkYXRhZmxvd19pbwogICAgaWYgaXNpbnN0YW5jZShzZWxmLnNpbmssIGRhdGFmbG93X2lvLk5hdGl2ZVNpbmspOgogICAgICAjIEEgbmF0aXZlIHNpbmsKICAgICAgcmV0dXJuIHBjb2xsIHwgJ05hdGl2ZVdyaXRlJyA+PiBkYXRhZmxvd19pby5fTmF0aXZlV3JpdGUoc2VsZi5zaW5rKQogICAgZWxpZiBpc2luc3RhbmNlKHNlbGYuc2luaywgU2luayk6CiAgICAgICMgQSBjdXN0b20gc2luawogICAgICByZXR1cm4gcGNvbGwgfCBXcml0ZUltcGwoc2VsZi5zaW5rKQogICAgZWxpZiBpc2luc3RhbmNlKHNlbGYuc2luaywgcHRyYW5zZm9ybS5QVHJhbnNmb3JtKToKICAgICAgIyBUaGlzIGFsbG93cyAiY29tcG9zaXRlIiBzaW5rcyB0byBiZSB1c2VkIGxpa2Ugbm9uLWNvbXBvc2l0ZSBvbmVzLgogICAgICByZXR1cm4gcGNvbGwgfCBzZWxmLnNpbmsKICAgIGVsc2U6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0Egc2luayBtdXN0IGluaGVyaXQgaW9iYXNlLlNpbmssIGlvYmFzZS5OYXRpdmVTaW5rLCAnCiAgICAgICAgICAgICAgICAgICAgICAgJ29yIGJlIGEgUFRyYW5zZm9ybS4gUmVjZWl2ZWQgOiAlcicgJSBzZWxmLnNpbmspCgoKY2xhc3MgV3JpdGVJbXBsKHB0cmFuc2Zvcm0uUFRyYW5zZm9ybSk6CiAgIiIiSW1wbGVtZW50cyB0aGUgd3JpdGluZyBvZiBjdXN0b20gc2lua3MuIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBzaW5rKToKICAgIHN1cGVyKFdyaXRlSW1wbCwgc2VsZikuX19pbml0X18oKQogICAgc2VsZi5zaW5rID0gc2luawoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgIGRvX29uY2UgPSBwY29sbC5waXBlbGluZSB8ICdEb09uY2UnID4+IGNvcmUuQ3JlYXRlKFtOb25lXSkKICAgIGluaXRfcmVzdWx0X2NvbGwgPSBkb19vbmNlIHwgJ0luaXRpYWxpemVXcml0ZScgPj4gY29yZS5NYXAoCiAgICAgICAgbGFtYmRhIF8sIHNpbms6IHNpbmsuaW5pdGlhbGl6ZV93cml0ZSgpLCBzZWxmLnNpbmspCiAgICBpZiBnZXRhdHRyKHNlbGYuc2luaywgJ251bV9zaGFyZHMnLCAwKToKICAgICAgbWluX3NoYXJkcyA9IHNlbGYuc2luay5udW1fc2hhcmRzCiAgICAgIGlmIG1pbl9zaGFyZHMgPT0gMToKICAgICAgICBrZXllZF9wY29sbCA9IHBjb2xsIHwgY29yZS5NYXAobGFtYmRhIHg6IChOb25lLCB4KSkKICAgICAgZWxzZToKICAgICAgICBrZXllZF9wY29sbCA9IHBjb2xsIHwgY29yZS5QYXJEbyhfUm91bmRSb2JpbktleUZuKG1pbl9zaGFyZHMpKQogICAgICB3cml0ZV9yZXN1bHRfY29sbCA9IChrZXllZF9wY29sbAogICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNvcmUuV2luZG93SW50byh3aW5kb3cuR2xvYmFsV2luZG93cygpKQogICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNvcmUuR3JvdXBCeUtleSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgJ1dyaXRlQnVuZGxlcycgPj4gY29yZS5QYXJEbygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Xcml0ZUtleWVkQnVuZGxlRG9GbihzZWxmLnNpbmspLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNTaW5nbGV0b24oaW5pdF9yZXN1bHRfY29sbCkpKQogICAgZWxzZToKICAgICAgbWluX3NoYXJkcyA9IDEKICAgICAgd3JpdGVfcmVzdWx0X2NvbGwgPSAocGNvbGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAnV3JpdGVCdW5kbGVzJyA+PgogICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlLlBhckRvKF9Xcml0ZUJ1bmRsZURvRm4oc2VsZi5zaW5rKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc1NpbmdsZXRvbihpbml0X3Jlc3VsdF9jb2xsKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAnUGFpcicgPj4gY29yZS5NYXAobGFtYmRhIHg6IChOb25lLCB4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjb3JlLldpbmRvd0ludG8od2luZG93Lkdsb2JhbFdpbmRvd3MoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjb3JlLkdyb3VwQnlLZXkoKQogICAgICAgICAgICAgICAgICAgICAgICAgICB8ICdFeHRyYWN0JyA+PiBjb3JlLkZsYXRNYXAobGFtYmRhIHg6IHhbMV0pKQogICAgIyBQcmVGaW5hbGl6ZSBzaG91bGQgcnVuIGJlZm9yZSBGaW5hbGl6ZVdyaXRlLCBhbmQgdGhlIHR3byBzaG91bGQgbm90IGJlCiAgICAjIGZ1c2VkLgogICAgcHJlX2ZpbmFsaXplX2NvbGwgPSBkb19vbmNlIHwgJ1ByZUZpbmFsaXplJyA+PiBjb3JlLkZsYXRNYXAoCiAgICAgICAgX3ByZV9maW5hbGl6ZSwKICAgICAgICBzZWxmLnNpbmssCiAgICAgICAgQXNTaW5nbGV0b24oaW5pdF9yZXN1bHRfY29sbCksCiAgICAgICAgQXNJdGVyKHdyaXRlX3Jlc3VsdF9jb2xsKSkKICAgIHJldHVybiBkb19vbmNlIHwgJ0ZpbmFsaXplV3JpdGUnID4+IGNvcmUuRmxhdE1hcCgKICAgICAgICBfZmluYWxpemVfd3JpdGUsCiAgICAgICAgc2VsZi5zaW5rLAogICAgICAgIEFzU2luZ2xldG9uKGluaXRfcmVzdWx0X2NvbGwpLAogICAgICAgIEFzSXRlcih3cml0ZV9yZXN1bHRfY29sbCksCiAgICAgICAgbWluX3NoYXJkcywKICAgICAgICBBc1NpbmdsZXRvbihwcmVfZmluYWxpemVfY29sbCkpCgoKY2xhc3MgX1dyaXRlQnVuZGxlRG9Gbihjb3JlLkRvRm4pOgogICIiIkEgRG9GbiBmb3Igd3JpdGluZyBlbGVtZW50cyB0byBhbiBpb2Jhc2UuV3JpdGVyLgogIE9wZW5zIGEgd3JpdGVyIGF0IHRoZSBmaXJzdCBlbGVtZW50IGFuZCBjbG9zZXMgdGhlIHdyaXRlciBhdCBmaW5pc2hfYnVuZGxlKCkuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBzaW5rKToKICAgIHNlbGYud3JpdGVyID0gTm9uZQogICAgc2VsZi5zaW5rID0gc2luawoKICBkZWYgZGlzcGxheV9kYXRhKHNlbGYpOgogICAgcmV0dXJuIHsnc2lua19kZCc6IHNlbGYuc2lua30KCiAgZGVmIHByb2Nlc3Moc2VsZiwgZWxlbWVudCwgaW5pdF9yZXN1bHQpOgogICAgaWYgc2VsZi53cml0ZXIgaXMgTm9uZToKICAgICAgIyBXZSBpZ25vcmUgVVVJRCBjb2xsaXNpb25zIGhlcmUgc2luY2UgdGhleSBhcmUgZXh0cmVtZWx5IHJhcmUuCiAgICAgIHNlbGYud3JpdGVyID0gc2VsZi5zaW5rLm9wZW5fd3JpdGVyKGluaXRfcmVzdWx0LCBzdHIodXVpZC51dWlkNCgpKSkKICAgIHNlbGYud3JpdGVyLndyaXRlKGVsZW1lbnQpCgogIGRlZiBmaW5pc2hfYnVuZGxlKHNlbGYpOgogICAgaWYgc2VsZi53cml0ZXIgaXMgbm90IE5vbmU6CiAgICAgIHlpZWxkIFdpbmRvd2VkVmFsdWUoc2VsZi53cml0ZXIuY2xvc2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuR2xvYmFsV2luZG93KCkubWF4X3RpbWVzdGFtcCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFt3aW5kb3cuR2xvYmFsV2luZG93KCldKQoKCmNsYXNzIF9Xcml0ZUtleWVkQnVuZGxlRG9Gbihjb3JlLkRvRm4pOgoKICBkZWYgX19pbml0X18oc2VsZiwgc2luayk6CiAgICBzZWxmLnNpbmsgPSBzaW5rCgogIGRlZiBkaXNwbGF5X2RhdGEoc2VsZik6CiAgICByZXR1cm4geydzaW5rX2RkJzogc2VsZi5zaW5rfQoKICBkZWYgcHJvY2VzcyhzZWxmLCBlbGVtZW50LCBpbml0X3Jlc3VsdCk6CiAgICBidW5kbGUgPSBlbGVtZW50CiAgICB3cml0ZXIgPSBzZWxmLnNpbmsub3Blbl93cml0ZXIoaW5pdF9yZXN1bHQsIHN0cih1dWlkLnV1aWQ0KCkpKQogICAgZm9yIGUgaW4gYnVuZGxlWzFdOiAgIyB2YWx1ZXMKICAgICAgd3JpdGVyLndyaXRlKGUpCiAgICByZXR1cm4gW3dpbmRvdy5UaW1lc3RhbXBlZFZhbHVlKHdyaXRlci5jbG9zZSgpLCB0aW1lc3RhbXAuTUFYX1RJTUVTVEFNUCldCgoKZGVmIF9wcmVfZmluYWxpemUodW51c2VkX2VsZW1lbnQsIHNpbmssIGluaXRfcmVzdWx0LCB3cml0ZV9yZXN1bHRzKToKICByZXR1cm4gc2luay5wcmVfZmluYWxpemUoaW5pdF9yZXN1bHQsIHdyaXRlX3Jlc3VsdHMpCgoKZGVmIF9maW5hbGl6ZV93cml0ZSh1bnVzZWRfZWxlbWVudCwgc2luaywgaW5pdF9yZXN1bHQsIHdyaXRlX3Jlc3VsdHMsCiAgICAgICAgICAgICAgICAgICAgbWluX3NoYXJkcywgcHJlX2ZpbmFsaXplX3Jlc3VsdHMpOgogIHdyaXRlX3Jlc3VsdHMgPSBsaXN0KHdyaXRlX3Jlc3VsdHMpCiAgZXh0cmFfc2hhcmRzID0gW10KICBpZiBsZW4od3JpdGVfcmVzdWx0cykgPCBtaW5fc2hhcmRzOgogICAgbG9nZ2luZy5kZWJ1ZygKICAgICAgICAnQ3JlYXRpbmcgJXMgZW1wdHkgc2hhcmQocykuJywgbWluX3NoYXJkcyAtIGxlbih3cml0ZV9yZXN1bHRzKSkKICAgIGZvciBfIGluIHJhbmdlKG1pbl9zaGFyZHMgLSBsZW4od3JpdGVfcmVzdWx0cykpOgogICAgICB3cml0ZXIgPSBzaW5rLm9wZW5fd3JpdGVyKGluaXRfcmVzdWx0LCBzdHIodXVpZC51dWlkNCgpKSkKICAgICAgZXh0cmFfc2hhcmRzLmFwcGVuZCh3cml0ZXIuY2xvc2UoKSkKICBvdXRwdXRzID0gc2luay5maW5hbGl6ZV93cml0ZShpbml0X3Jlc3VsdCwgd3JpdGVfcmVzdWx0cyArIGV4dHJhX3NoYXJkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVfZmluYWxpemVfcmVzdWx0cykKICBpZiBvdXRwdXRzOgogICAgcmV0dXJuICgKICAgICAgICB3aW5kb3cuVGltZXN0YW1wZWRWYWx1ZSh2LCB0aW1lc3RhbXAuTUFYX1RJTUVTVEFNUCkgZm9yIHYgaW4gb3V0cHV0cykKCgpjbGFzcyBfUm91bmRSb2JpbktleUZuKGNvcmUuRG9Gbik6CgogIGRlZiBfX2luaXRfXyhzZWxmLCBjb3VudCk6CiAgICBzZWxmLmNvdW50ID0gY291bnQKCiAgZGVmIHN0YXJ0X2J1bmRsZShzZWxmKToKICAgIHNlbGYuY291bnRlciA9IHJhbmRvbS5yYW5kaW50KDAsIHNlbGYuY291bnQgLSAxKQoKICBkZWYgcHJvY2VzcyhzZWxmLCBlbGVtZW50KToKICAgIHNlbGYuY291bnRlciArPSAxCiAgICBpZiBzZWxmLmNvdW50ZXIgPj0gc2VsZi5jb3VudDoKICAgICAgc2VsZi5jb3VudGVyIC09IHNlbGYuY291bnQKICAgIHlpZWxkIHNlbGYuY291bnRlciwgZWxlbWVudAoKCmNsYXNzIFJlc3RyaWN0aW9uVHJhY2tlcihvYmplY3QpOgogICIiIk1hbmFnZXMgY29uY3VycmVudCBhY2Nlc3MgdG8gYSByZXN0cmljdGlvbi4KCiAgRXhwZXJpbWVudGFsOyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBLZWVwcyB0cmFjayBvZiB0aGUgcmVzdHJpY3Rpb25zIGNsYWltZWQgcGFydCBmb3IgYSBTcGxpdHRhYmxlIERvRm4uCgogIFNlZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGZvciBtb3JlIGRldGFpbHMuCiAgKiBodHRwczovL3MuYXBhY2hlLm9yZy9zcGxpdHRhYmxlLWRvLWZuCiAgKiBodHRwczovL3MuYXBhY2hlLm9yZy9zcGxpdHRhYmxlLWRvLWZuLXB5dGhvbi1zZGsKICAiIiIKCiAgZGVmIGN1cnJlbnRfcmVzdHJpY3Rpb24oc2VsZik6CiAgICAiIiJSZXR1cm5zIHRoZSBjdXJyZW50IHJlc3RyaWN0aW9uLgoKICAgIFJldHVybnMgYSByZXN0cmljdGlvbiBhY2N1cmF0ZWx5IGRlc2NyaWJpbmcgdGhlIGZ1bGwgcmFuZ2Ugb2Ygd29yayB0aGUKICAgIGN1cnJlbnQgYGBEb0ZuLnByb2Nlc3MoKWBgIGNhbGwgd2lsbCBkbywgaW5jbHVkaW5nIGFscmVhZHkgY29tcGxldGVkIHdvcmsuCgogICAgVGhlIGN1cnJlbnQgcmVzdHJpY3Rpb24gcmV0dXJuZWQgYnkgbWV0aG9kIG1heSBiZSB1cGRhdGVkIGR5bmFtaWNhbGx5IGR1ZQogICAgdG8gZHVlIHRvIGNvbmN1cnJlbnQgaW52b2NhdGlvbiBvZiBvdGhlciBtZXRob2RzIG9mIHRoZQogICAgYGBSZXN0cmljdGlvblRyYWNrZXJgYCwgRm9yIGV4YW1wbGUsIGBgY2hlY2twb2ludCgpYGAuCgogICAgKiogVGhyZWFkIHNhZmV0eSAqKgoKICAgIE1ldGhvZHMgb2YgdGhlIGNsYXNzIGBgUmVzdHJpY3Rpb25UcmFja2VyYGAgaW5jbHVkaW5nIHRoaXMgbWV0aG9kIG1heSBnZXQKICAgIGludm9rZWQgYnkgZGlmZmVyZW50IHRocmVhZHMsIGhlbmNlIG11c3QgYmUgbWFkZSB0aHJlYWQtc2FmZSwgZS5nLiBieSB1c2luZwogICAgYSBzaW5nbGUgbG9jayBvYmplY3QuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIGNoZWNrcG9pbnQoc2VsZik6CiAgICAiIiJQZXJmb3JtcyBhIGNoZWNrcG9pbnQgb2YgdGhlIGN1cnJlbnQgcmVzdHJpY3Rpb24uCgogICAgU2lnbmFscyB0aGF0IHRoZSBjdXJyZW50IGBgRG9Gbi5wcm9jZXNzKClgYCBjYWxsIHNob3VsZCB0ZXJtaW5hdGUgYXMgc29vbiBhcwogICAgcG9zc2libGUuIEFmdGVyIHRoaXMgbWV0aG9kIHJldHVybnMsIHRoZSB0cmFja2VyIE1VU1QgcmVmdXNlIGFsbCBmdXR1cmUKICAgIGNsYWltIGNhbGxzLCBhbmQgYGBSZXN0cmljdGlvblRyYWNrZXIuY2hlY2tfZG9uZSgpYGAgTVVTVCBzdWNjZWVkLgoKICAgIFRoaXMgaW52b2NhdGlvbiBtb2RpZmllcyB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgYGBjdXJyZW50X3Jlc3RyaWN0aW9uKClgYAogICAgaW52b2NhdGlvbiBhbmQgcmV0dXJucyBhIHJlc3RyaWN0aW9uIHJlcHJlc2VudGluZyB0aGUgcmVzdCBvZiB0aGUgd29yay4gVGhlCiAgICBvbGQgdmFsdWUgb2YgYGBjdXJyZW50X3Jlc3RyaWN0aW9uKClgYCBpcyBlcXVpdmFsZW50IHRvIHRoZSBuZXcgdmFsdWUgb2YKICAgIGBgY3VycmVudF9yZXN0cmljdGlvbigpYGAgYW5kIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhpcyBtZXRob2QgaW52b2NhdGlvbgogICAgY29tYmluZWQuCgogICAgKiogVGhyZWFkIHNhZmV0eSAqKgoKICAgIE1ldGhvZHMgb2YgdGhlIGNsYXNzIGBgUmVzdHJpY3Rpb25UcmFja2VyYGAgaW5jbHVkaW5nIHRoaXMgbWV0aG9kIG1heSBnZXQKICAgIGludm9rZWQgYnkgZGlmZmVyZW50IHRocmVhZHMsIGhlbmNlIG11c3QgYmUgbWFkZSB0aHJlYWQtc2FmZSwgZS5nLiBieSB1c2luZwogICAgYSBzaW5nbGUgbG9jayBvYmplY3QuCiAgICAiIiIKCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiBjaGVja19kb25lKHNlbGYpOgogICAgIiIiQ2hlY2tzIHdoZXRoZXIgdGhlIHJlc3RyaWN0aW9uIGhhcyBiZWVuIGZ1bGx5IHByb2Nlc3NlZC4KCiAgICBDYWxsZWQgYnkgdGhlIHJ1bm5lciBhZnRlciBpdGVyYXRvciByZXR1cm5lZCBieSBgYERvRm4ucHJvY2VzcygpYGAgaGFzIGJlZW4KICAgIGZ1bGx5IHJlYWQuCgogICAgVGhpcyBtZXRob2QgbXVzdCByYWlzZSBhIGBWYWx1ZUVycm9yYCBpZiB0aGVyZSBpcyBzdGlsbCBhbnkgdW5jbGFpbWVkIHdvcmsKICAgIHJlbWFpbmluZyBpbiB0aGUgcmVzdHJpY3Rpb24gd2hlbiB0aGlzIG1ldGhvZCBpcyBpbnZva2VkLiBFeGNlcHRpb24gcmFpc2VkCiAgICBtdXN0IGhhdmUgYW4gaW5mb3JtYXRpdmUgZXJyb3IgbWVzc2FnZS4KCiAgICAqKiBUaHJlYWQgc2FmZXR5ICoqCgogICAgTWV0aG9kcyBvZiB0aGUgY2xhc3MgYGBSZXN0cmljdGlvblRyYWNrZXJgYCBpbmNsdWRpbmcgdGhpcyBtZXRob2QgbWF5IGdldAogICAgaW52b2tlZCBieSBkaWZmZXJlbnQgdGhyZWFkcywgaGVuY2UgbXVzdCBiZSBtYWRlIHRocmVhZC1zYWZlLCBlLmcuIGJ5IHVzaW5nCiAgICBhIHNpbmdsZSBsb2NrIG9iamVjdC4KCiAgICBSZXR1cm5zOiBgYFRydWVgYCBpZiBjdXJyZW50IHJlc3RyaWN0aW9uIGhhcyBiZWVuIGZ1bGx5IHByb2Nlc3NlZC4KICAgIFJhaXNlczoKICAgICAgfmV4Y2VwdGlvbnMuVmFsdWVFcnJvcjogaWYgdGhlcmUgaXMgc3RpbGwgYW55IHVuY2xhaW1lZCB3b3JrIHJlbWFpbmluZy4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgp9cqGCAAAoWBEAAABSZWFkLmRpc3BsYXlfZGF0YVgDAAAAZGVmTXgDTXwDh1gWAAAAUmFuZ2VUcmFja2VyLnRyeV9zcGxpdFgDAAAAZGVmTYYBTaoBh1gEAAAAUmVhZFgFAAAAY2xhc3NNQwNNiAOHWBAAAABfV3JpdGVCdW5kbGVEb0ZuWAUAAABjbGFzc036A00RBIdYGAAAAEJvdW5kZWRTb3VyY2UuaXNfYm91bmRlZFgDAAAAZGVmS9BL0odYHQAAAFJlc3RyaWN0aW9uVHJhY2tlci5jaGVja3BvaW50WAMAAABkZWZNZQRNegSHWBoAAABSYW5nZVRyYWNrZXIuc3RvcF9wb3NpdGlvblgDAAAAZGVmTUsBTU4Bh1gPAAAAX2ZpbmFsaXplX3dyaXRlWAMAAABkZWZNJwRNNgSHWBAAAABXcml0ZUltcGwuZXhwYW5kWAMAAABkZWZN0ANN+AOHWBMAAABTaW5rLmZpbmFsaXplX3dyaXRlWAMAAABkZWZNAANNJAOHWB4AAABfV3JpdGVCdW5kbGVEb0ZuLmZpbmlzaF9idW5kbGVYAwAAAGRlZk0MBE0RBIdYCwAAAFJlYWQuZXhwYW5kWAMAAABkZWZNTwNNbgOHWB4AAABSZWFkLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXJYAwAAAGRlZk2FA02IA4dYGAAAAF9Xcml0ZUJ1bmRsZURvRm4ucHJvY2Vzc1gDAAAAZGVmTQYETQsEh1giAAAAQm91bmRlZFNvdXJjZS5kZWZhdWx0X291dHB1dF9jb2RlclgDAAAAZGVmS8hLz4dYFQAAAFNpbmsuaW5pdGlhbGl6ZV93cml0ZVgDAAAAZGVmTdICTeACh1geAAAAX1dyaXRlS2V5ZWRCdW5kbGVEb0ZuLl9faW5pdF9fWAMAAABkZWZNFQRNFwSHWDAAAABSYW5nZVRyYWNrZXIuc2V0X3NwbGl0X3BvaW50c191bmNsYWltZWRfY2FsbGJhY2tYAwAAAGRlZk0tAk1FAodYDQAAAFJlYWQuX19pbml0X19YAwAAAGRlZk1GA01OA4dYCgAAAFNvdXJjZUJhc2VYBQAAAGNsYXNzS1NLV4dYEgAAAFdyaXRlLmRpc3BsYXlfZGF0YVgDAAAAZGVmTbUDTbgDh1gGAAAAV3JpdGVyWAUAAABjbGFzc00mA01BA4dYEgAAAEJvdW5kZWRTb3VyY2UucmVhZFgDAAAAZGVmS6tLx4dYBAAAAFNpbmtYBQAAAGNsYXNzTUcCTSQDh1gQAAAAX1JvdW5kUm9iaW5LZXlGblgFAAAAY2xhc3NNOARNRQSHWBIAAABXcml0ZUltcGwuX19pbml0X19YAwAAAGRlZk3MA03PA4dYHQAAAF9Xcml0ZUtleWVkQnVuZGxlRG9Gbi5wcm9jZXNzWAMAAABkZWZNGwRNIQSHWBIAAABSZXN0cmljdGlvblRyYWNrZXJYBQAAAGNsYXNzTUcETZAEh1gSAAAAUmVhZC5nZXRfd2luZG93aW5nWAMAAABkZWZNbwNNcQOHWBUAAABfV3JpdGVLZXllZEJ1bmRsZURvRm5YBQAAAGNsYXNzTRMETSEEh1gNAAAAX3ByZV9maW5hbGl6ZVgDAAAAZGVmTSMETSUEh1gMAAAAV3JpdGVyLmNsb3NlWAMAAABkZWZNNwNNQQOHWBgAAABSZWFkLmV4cGFuZC5zcGxpdF9zb3VyY2VYAwAAAGRlZk1aA01iA4dYHQAAAF9Sb3VuZFJvYmluS2V5Rm4uc3RhcnRfYnVuZGxlWAMAAABkZWZNPQRNPwSHWBgAAABSZWFkLl9pbmZlcl9vdXRwdXRfY29kZXJYAwAAAGRlZk1yA013A4dYGwAAAEJvdW5kZWRTb3VyY2UuZXN0aW1hdGVfc2l6ZVgDAAAAZGVmS31LiYdYHwAAAEJvdW5kZWRTb3VyY2UuZ2V0X3JhbmdlX3RyYWNrZXJYAwAAAGRlZkubS6qHWB0AAABfV3JpdGVCdW5kbGVEb0ZuLmRpc3BsYXlfZGF0YVgDAAAAZGVmTQMETQUEh1gTAAAAQm91bmRlZFNvdXJjZS5zcGxpdFgDAAAAZGVmS4pLmodYEAAAAFNpbmsub3Blbl93cml0ZXJYAwAAAGRlZk3hAk3sAodYJgAAAFJlc3RyaWN0aW9uVHJhY2tlci5jdXJyZW50X3Jlc3RyaWN0aW9uWAMAAABkZWZNUwRNZASHWBkAAABSYW5nZVRyYWNrZXIuc3BsaXRfcG9pbnRzWAMAAABkZWZNuwFNLAKHWBgAAABfUm91bmRSb2JpbktleUZuLnByb2Nlc3NYAwAAAGRlZk1ABE1FBIdYHgAAAFJhbmdlVHJhY2tlci5mcmFjdGlvbl9jb25zdW1lZFgDAAAAZGVmTasBTboBh1gdAAAAUmVzdHJpY3Rpb25UcmFja2VyLmNoZWNrX2RvbmVYAwAAAGRlZk17BE2QBIdYDAAAAFJhbmdlVHJhY2tlclgFAAAAY2xhc3NL1E1FAodYIQAAAFJhbmdlVHJhY2tlci5zZXRfY3VycmVudF9wb3NpdGlvblgDAAAAZGVmTWUBTXEBh1gZAAAAX1JvdW5kUm9iaW5LZXlGbi5fX2luaXRfX1gDAAAAZGVmTToETTwEh1gZAAAAX1dyaXRlQnVuZGxlRG9Gbi5fX2luaXRfX1gDAAAAZGVmTf8DTQIEh1gNAAAAQm91bmRlZFNvdXJjZVgFAAAAY2xhc3NLWUvSh1gMAAAAV3JpdGUuZXhwYW5kWAMAAABkZWZNuQNNxwOHWAkAAABXcml0ZUltcGxYBQAAAGNsYXNzTckDTfgDh1gMAAAAV3JpdGVyLndyaXRlWAMAAABkZWZNMwNNNgOHWBEAAABTaW5rLnByZV9maW5hbGl6ZVgDAAAAZGVmTe0CTf8Ch1gFAAAAV3JpdGVYBQAAAGNsYXNzTZADTccDh1gWAAAAUmFuZ2VUcmFja2VyLnRyeV9jbGFpbVgDAAAAZGVmTU8BTWQBh1ghAAAAUmFuZ2VUcmFja2VyLnBvc2l0aW9uX2F0X2ZyYWN0aW9uWAMAAABkZWZNcgFNhQGHWBwAAABSZWFkLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyWAMAAABkZWZNfQNNhAOHWBsAAABSYW5nZVRyYWNrZXIuc3RhcnRfcG9zaXRpb25YAwAAAGRlZk1HAU1KAYdYIgAAAF9Xcml0ZUtleWVkQnVuZGxlRG9Gbi5kaXNwbGF5X2RhdGFYAwAAAGRlZk0YBE0aBIdYDgAAAFdyaXRlLl9faW5pdF9fWAMAAABkZWZNrANNtAOHdX1yooIAAChYEQAAAFJlYWQuZGlzcGxheV9kYXRhapFkAABYFgAAAFJhbmdlVHJhY2tlci50cnlfc3BsaXRqkWQAAFgEAAAAUmVhZGqRZAAAWBgAAABCb3VuZGVkU291cmNlLmlzX2JvdW5kZWRqkWQAAFgdAAAAUmVzdHJpY3Rpb25UcmFja2VyLmNoZWNrcG9pbnRqkWQAAFgaAAAAUmFuZ2VUcmFja2VyLnN0b3BfcG9zaXRpb25qkWQAAFgTAAAAU2luay5maW5hbGl6ZV93cml0ZWqRZAAAWAsAAABSZWFkLmV4cGFuZGqRZAAAWCIAAABCb3VuZGVkU291cmNlLmRlZmF1bHRfb3V0cHV0X2NvZGVyapFkAABYFQAAAFNpbmsuaW5pdGlhbGl6ZV93cml0ZWqRZAAAWB4AAABSYW5nZVRyYWNrZXIuZnJhY3Rpb25fY29uc3VtZWRqkWQAAFgwAAAAUmFuZ2VUcmFja2VyLnNldF9zcGxpdF9wb2ludHNfdW5jbGFpbWVkX2NhbGxiYWNrapFkAABYEQAAAFNpbmsucHJlX2ZpbmFsaXplapFkAABYEgAAAFdyaXRlLmRpc3BsYXlfZGF0YWqRZAAAWAYAAABXcml0ZXJqkWQAAFgSAAAAQm91bmRlZFNvdXJjZS5yZWFkapFkAABYBAAAAFNpbmtqkWQAAFgSAAAAUmVzdHJpY3Rpb25UcmFja2VyapFkAABYEgAAAFJlYWQuZ2V0X3dpbmRvd2luZ2qRZAAAWBsAAABSYW5nZVRyYWNrZXIuc3RhcnRfcG9zaXRpb25qkWQAAFgMAAAAV3JpdGVyLmNsb3NlapFkAABYHgAAAFJlYWQuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcmqRZAAAWBsAAABCb3VuZGVkU291cmNlLmVzdGltYXRlX3NpemVqkWQAAFgfAAAAQm91bmRlZFNvdXJjZS5nZXRfcmFuZ2VfdHJhY2tlcmqRZAAAWBMAAABCb3VuZGVkU291cmNlLnNwbGl0apFkAABYEAAAAFNpbmsub3Blbl93cml0ZXJqkWQAAFgmAAAAUmVzdHJpY3Rpb25UcmFja2VyLmN1cnJlbnRfcmVzdHJpY3Rpb25qkWQAAFgZAAAAUmFuZ2VUcmFja2VyLnNwbGl0X3BvaW50c2qRZAAAWB0AAABSZXN0cmljdGlvblRyYWNrZXIuY2hlY2tfZG9uZWqRZAAAWAwAAABSYW5nZVRyYWNrZXJqkWQAAFghAAAAUmFuZ2VUcmFja2VyLnNldF9jdXJyZW50X3Bvc2l0aW9uapFkAABYDQAAAEJvdW5kZWRTb3VyY2VqkWQAAFgMAAAAV3JpdGVyLndyaXRlapFkAABYBQAAAFdyaXRlapFkAABYFgAAAFJhbmdlVHJhY2tlci50cnlfY2xhaW1qkWQAAFghAAAAUmFuZ2VUcmFja2VyLnBvc2l0aW9uX2F0X2ZyYWN0aW9uapFkAABYDAAAAFdyaXRlLmV4cGFuZGqRZAAAWBwAAABSZWFkLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyapFkAAB1an1pAABYFQAAAGFwYWNoZV9iZWFtLmlvLmlvYmFzZXKjggAAhYFypIIAAH1ypYIAAGJ0VTJhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmFkYXB0aXZlX3Rocm90dGxlcihYzQ4AACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIyBVdGlsaXR5IGZ1bmN0aW9ucyAmIGNsYXNzZXMgdGhhdCBhcmUgX25vdF8gc3BlY2lmaWMgdG8gdGhlIGRhdGFzdG9yZSBjbGllbnQuCiMKIyBGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydApmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCgppbXBvcnQgcmFuZG9tCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdAoKZnJvbSBhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxIGltcG9ydCB1dGlsCgoKY2xhc3MgQWRhcHRpdmVUaHJvdHRsZXIob2JqZWN0KToKICAiIiJJbXBsZW1lbnRzIGFkYXB0aXZlIHRocm90dGxpbmcuCgogIFNlZQogIGh0dHBzOi8vbGFuZGluZy5nb29nbGUuY29tL3NyZS9ib29rL2NoYXB0ZXJzL2hhbmRsaW5nLW92ZXJsb2FkLmh0bWwjY2xpZW50LXNpZGUtdGhyb3R0bGluZy1hN3NZVWcKICBmb3IgYSBmdWxsIGRpc2N1c3Npb24gb2YgdGhlIHVzZSBjYXNlIGFuZCBhbGdvcml0aG0gYXBwbGllZC4KICAiIiIKCiAgIyBUaGUgdGFyZ2V0IG1pbmltdW0gbnVtYmVyIG9mIHJlcXVlc3RzIHBlciBzYW1wbGVQZXJpb2RNcywgZXZlbiBpZiBubwogICMgcmVxdWVzdHMgc3VjY2VlZC4gTXVzdCBiZSBncmVhdGVyIHRoYW4gMCwgZWxzZSB3ZSBjb3VsZCB0aHJvdHRsZSB0byB6ZXJvLgogICMgQmVjYXVzZSBldmVyeSBkZWNpc2lvbiBpcyBwcm9iYWJpbGlzdGljLCB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCB0aGUKICAjIHJlcXVlc3QgcmF0ZSBpbiBhbnkgZ2l2ZW4gaW50ZXJ2YWwgd2lsbCBub3QgYmUgemVyby4gKFRoaXMgaXMgdGhlICsxIGZyb20KICAjIHRoZSBmb3JtdWxhIGluCiAgIyBodHRwczovL2xhbmRpbmcuZ29vZ2xlLmNvbS9zcmUvYm9vay9jaGFwdGVycy9oYW5kbGluZy1vdmVybG9hZC5odG1sICkKICBNSU5fUkVRVUVTVFMgPSAxCgogIGRlZiBfX2luaXRfXyhzZWxmLCB3aW5kb3dfbXMsIGJ1Y2tldF9tcywgb3ZlcmxvYWRfcmF0aW8pOgogICAgIiIiSW5pdGlhbGl6ZXMgQWRhcHRpdmVUaHJvdHRsZXIuCgogICAgICBBcmdzOgogICAgICAgIHdpbmRvd19tczogaW50LCBsZW5ndGggb2YgaGlzdG9yeSB0byBjb25zaWRlciwgaW4gbXMsIHRvIHNldAogICAgICAgICAgICAgICAgICAgdGhyb3R0bGluZy4KICAgICAgICBidWNrZXRfbXM6IGludCwgZ3JhbnVsYXJpdHkgb2YgdGltZSBidWNrZXRzIHRoYXQgd2Ugc3RvcmUgZGF0YSBpbiwgaW4KICAgICAgICAgICAgICAgICAgIG1zLgogICAgICAgIG92ZXJsb2FkX3JhdGlvOiBmbG9hdCwgdGhlIHRhcmdldCByYXRpbyBiZXR3ZWVuIHJlcXVlc3RzIHNlbnQgYW5kCiAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NmdWwgcmVxdWVzdHMuIFRoaXMgaXMgIksiIGluIHRoZSBmb3JtdWxhIGluCiAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBzOi8vbGFuZGluZy5nb29nbGUuY29tL3NyZS9ib29rL2NoYXB0ZXJzL2hhbmRsaW5nLW92ZXJsb2FkLmh0bWwuCiAgICAiIiIKICAgIHNlbGYuX2FsbF9yZXF1ZXN0cyA9IHV0aWwuTW92aW5nU3VtKHdpbmRvd19tcywgYnVja2V0X21zKQogICAgc2VsZi5fc3VjY2Vzc2Z1bF9yZXF1ZXN0cyA9IHV0aWwuTW92aW5nU3VtKHdpbmRvd19tcywgYnVja2V0X21zKQogICAgc2VsZi5fb3ZlcmxvYWRfcmF0aW8gPSBmbG9hdChvdmVybG9hZF9yYXRpbykKICAgIHNlbGYuX3JhbmRvbSA9IHJhbmRvbS5SYW5kb20oKQoKICBkZWYgX3Rocm90dGxpbmdfcHJvYmFiaWxpdHkoc2VsZiwgbm93KToKICAgIGlmIG5vdCBzZWxmLl9hbGxfcmVxdWVzdHMuaGFzX2RhdGEobm93KToKICAgICAgcmV0dXJuIDAKICAgIGFsbF9yZXF1ZXN0cyA9IHNlbGYuX2FsbF9yZXF1ZXN0cy5zdW0obm93KQogICAgc3VjY2Vzc2Z1bF9yZXF1ZXN0cyA9IHNlbGYuX3N1Y2Nlc3NmdWxfcmVxdWVzdHMuc3VtKG5vdykKICAgIHJldHVybiBtYXgoCiAgICAgICAgMCwgKGFsbF9yZXF1ZXN0cyAtIHNlbGYuX292ZXJsb2FkX3JhdGlvICogc3VjY2Vzc2Z1bF9yZXF1ZXN0cykKICAgICAgICAvIChhbGxfcmVxdWVzdHMgKyBBZGFwdGl2ZVRocm90dGxlci5NSU5fUkVRVUVTVFMpKQoKICBkZWYgdGhyb3R0bGVfcmVxdWVzdChzZWxmLCBub3cpOgogICAgIiIiRGV0ZXJtaW5lcyB3aGV0aGVyIG9uZSBSUEMgYXR0ZW1wdCBzaG91bGQgYmUgdGhyb3R0bGVkLgoKICAgIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBvbmNlIGVhY2ggdGltZSB0aGUgY2FsbGVyIGludGVuZHMgdG8gc2VuZCBhbiBSUEM7IGlmCiAgICBpdCByZXR1cm5zIHRydWUsIGRyb3Agb3IgZGVsYXkgdGhhdCByZXF1ZXN0IChjYWxsaW5nIHRoaXMgZnVuY3Rpb24gYWdhaW4KICAgIGFmdGVyIHRoZSBkZWxheSkuCgogICAgQXJnczoKICAgICAgbm93OiBpbnQsIHRpbWUgaW4gbXMgc2luY2UgdGhlIGVwb2NoCiAgICBSZXR1cm5zOgogICAgICBib29sLCBUcnVlIGlmIHRoZSBjYWxsZXIgc2hvdWxkIHRocm90dGxlIG9yIGRlbGF5IHRoZSByZXF1ZXN0LgogICAgIiIiCiAgICB0aHJvdHRsaW5nX3Byb2JhYmlsaXR5ID0gc2VsZi5fdGhyb3R0bGluZ19wcm9iYWJpbGl0eShub3cpCiAgICBzZWxmLl9hbGxfcmVxdWVzdHMuYWRkKG5vdywgMSkKICAgIHJldHVybiBzZWxmLl9yYW5kb20udW5pZm9ybSgwLCAxKSA8IHRocm90dGxpbmdfcHJvYmFiaWxpdHkKCiAgZGVmIHN1Y2Nlc3NmdWxfcmVxdWVzdChzZWxmLCBub3cpOgogICAgIiIiTm90aWZpZXMgdGhlIHRocm90dGxlciBvZiBhIHN1Y2Nlc3NmdWwgcmVxdWVzdC4KCiAgICBNdXN0IGJlIGNhbGxlZCBvbmNlIGZvciBlYWNoIHJlcXVlc3QgKGZvciB3aGljaCB0aHJvdHRsZV9yZXF1ZXN0IHdhcwogICAgcHJldmlvdXNseSBjYWxsZWQpIHRoYXQgc3VjY2VlZGVkLgoKICAgIEFyZ3M6CiAgICAgIG5vdzogaW50LCB0aW1lIGluIG1zIHNpbmNlIHRoZSBlcG9jaAogICAgIiIiCiAgICBzZWxmLl9zdWNjZXNzZnVsX3JlcXVlc3RzLmFkZChub3csIDEpCn1ypoIAAChYJAAAAEFkYXB0aXZlVGhyb3R0bGVyLnN1Y2Nlc3NmdWxfcmVxdWVzdFgDAAAAZGVmS1lLY4dYKQAAAEFkYXB0aXZlVGhyb3R0bGVyLl90aHJvdHRsaW5nX3Byb2JhYmlsaXR5WAMAAABkZWZLQEtIh1gaAAAAQWRhcHRpdmVUaHJvdHRsZXIuX19pbml0X19YAwAAAGRlZksvSz+HWCIAAABBZGFwdGl2ZVRocm90dGxlci50aHJvdHRsZV9yZXF1ZXN0WAMAAABkZWZLSUtYh1gRAAAAQWRhcHRpdmVUaHJvdHRsZXJYBQAAAGNsYXNzSx9LY4d1fXKnggAAKFgkAAAAQWRhcHRpdmVUaHJvdHRsZXIuc3VjY2Vzc2Z1bF9yZXF1ZXN0aqZkAABYIgAAAEFkYXB0aXZlVGhyb3R0bGVyLnRocm90dGxlX3JlcXVlc3RqpmQAAFgRAAAAQWRhcHRpdmVUaHJvdHRsZXJqpmQAAHVqfWkAAFgyAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5hZGFwdGl2ZV90aHJvdHRsZXJyqIIAAIWBcqmCAAB9cqqCAABidFUZYXBhY2hlX2JlYW0uaW50ZXJuYWwudXRpbChY2BQAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiVXRpbGl0eSBmdW5jdGlvbnMgdXNlZCB0aHJvdWdob3V0IHRoZSBwYWNrYWdlLgoKRm9yIGludGVybmFsIHVzZSBvbmx5LiBObyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoiIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgbG9nZ2luZwppbXBvcnQgdGhyZWFkaW5nCmltcG9ydCB3ZWFrcmVmCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdApmcm9tIG11bHRpcHJvY2Vzc2luZy5wb29sIGltcG9ydCBUaHJlYWRQb29sCgoKY2xhc3MgQXJndW1lbnRQbGFjZWhvbGRlcihvYmplY3QpOgogICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgQSBwbGFjZSBob2xkZXIgb2JqZWN0IHJlcGxhY2luZyBQVmFsdWVzIGluIGFyZ3VtZW50IGxpc3RzLgoKICBBIEZuIG9iamVjdCBjYW4gdGFrZSBhbnkgbnVtYmVyIG9mICJzaWRlIGlucHV0cyIsIHdoaWNoIGFyZSBQVmFsdWVzIHRoYXQgd2lsbAogIGJlIGV2YWx1YXRlZCBkdXJpbmcgcGlwZWxpbmUgZXhlY3V0aW9uIGFuZCB3aWxsIGJlIHByb3ZpZGVkIHRvIHRoZSBmdW5jdGlvbgogIGF0IHRoZSBtb21lbnQgb2YgaXRzIGV4ZWN1dGlvbiBhcyBwb3NpdGlvbmFsIG9yIGtleXdvcmQgYXJndW1lbnRzLgoKICBUaGlzIGlzIHVzZWQgb25seSBpbnRlcm5hbGx5IGFuZCBzaG91bGQgbmV2ZXIgYmUgdXNlZCBieSB1c2VyIGNvZGUuIEEgY3VzdG9tCiAgRm4gb2JqZWN0IGJ5IHRoZSB0aW1lIGl0IGV4ZWN1dGVzIHdpbGwgaGF2ZSBzdWNoIHZhbHVlcyByZXBsYWNlZCB3aXRoIHJlYWwKICBjb21wdXRlZCB2YWx1ZXMuCiAgIiIiCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgIiIiVGVzdHMgZm9yIGVxdWFsaXR5IG9mIHR3byBwbGFjZWhvbGRlciBvYmplY3RzLgoKICAgIEFyZ3M6CiAgICAgIG90aGVyOiBBbm90aGVyIHBsYWNlaG9sZGVyIG9iamVjdCB0byBjb21wYXJlIHRvLgoKICAgIFRoaXMgbWV0aG9kIGlzIHVzZWQgb25seSBmb3IgdGVzdCBjb2RlLiBBbGwgcGxhY2Vob2xkZXIgb2JqZWN0cyBhcmUKICAgIGVxdWFsIHRvIGVhY2ggb3RoZXIuCiAgICAiIiIKICAgIHJldHVybiBpc2luc3RhbmNlKG90aGVyLCBBcmd1bWVudFBsYWNlaG9sZGVyKQoKICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKICAgICMgVE9ETyhCRUFNLTU5NDkpOiBOZWVkZWQgZm9yIFB5dGhvbiAyIGNvbXBhdGliaWxpdHkuCiAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKCiAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgcmV0dXJuIGhhc2godHlwZShzZWxmKSkKCgpkZWYgcmVtb3ZlX29iamVjdHNfZnJvbV9hcmdzKGFyZ3MsIGt3YXJncywgcHZhbHVlX2NsYXNzZXMpOgogICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgUmVwbGFjZXMgYWxsIG9iamVjdHMgb2YgYSBnaXZlbiB0eXBlIGluIGFyZ3Mva3dhcmdzIHdpdGggYSBwbGFjZWhvbGRlci4KCiAgQXJnczoKICAgIGFyZ3M6IEEgbGlzdCBvZiBwb3NpdGlvbmFsIGFyZ3VtZW50cy4KICAgIGt3YXJnczogQSBkaWN0aW9uYXJ5IG9mIGtleXdvcmQgYXJndW1lbnRzLgogICAgcHZhbHVlX2NsYXNzZXM6IEEgdHVwbGUgb2YgY2xhc3Mgb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIHR5cGVzIG9mIHRoZQogICAgICBhcmd1bWVudHMgdGhhdCBtdXN0IGJlIHJlcGxhY2VkIHdpdGggYSBwbGFjZWhvbGRlciB2YWx1ZSAoaW5zdGFuY2Ugb2YKICAgICAgQXJndW1lbnRQbGFjZWhvbGRlcikKCiAgUmV0dXJuczoKICAgIEEgMy10dXBsZSBjb250YWluaW5nIGEgbW9kaWZpZWQgbGlzdCBvZiBwb3NpdGlvbmFsIGFyZ3VtZW50cywgYSBtb2RpZmllZAogICAgZGljdGlvbmFyeSBvZiBrZXl3b3JkIGFyZ3VtZW50cywgYW5kIGEgbGlzdCBvZiBhbGwgb2JqZWN0cyByZXBsYWNlZCB3aXRoCiAgICBhIHBsYWNlaG9sZGVyIHZhbHVlLgogICIiIgogIHB2YWxzID0gW10KCiAgZGVmIHN3YXBwZXIodmFsdWUpOgogICAgcHZhbHMuYXBwZW5kKHZhbHVlKQogICAgcmV0dXJuIEFyZ3VtZW50UGxhY2Vob2xkZXIoKQogIG5ld19hcmdzID0gW3N3YXBwZXIodikgaWYgaXNpbnN0YW5jZSh2LCBwdmFsdWVfY2xhc3NlcykgZWxzZSB2IGZvciB2IGluIGFyZ3NdCiAgIyBNYWtlIHN1cmUgdGhlIG9yZGVyIGluIHdoaWNoIHdlIHByb2Nlc3MgdGhlIGRpY3Rpb25hcnkga2V5cyBpcyBwcmVkaWN0YWJsZQogICMgYnkgc29ydGluZyB0aGUgZW50cmllcyBmaXJzdC4gVGhpcyB3aWxsIGJlIGltcG9ydGFudCB3aGVuIHB1dHRpbmcgYmFjawogICMgUFZhbHVlcy4KICBuZXdfa3dhcmdzID0gZGljdCgoaywgc3dhcHBlcih2KSkgaWYgaXNpbnN0YW5jZSh2LCBwdmFsdWVfY2xhc3NlcykgZWxzZSAoaywgdikKICAgICAgICAgICAgICAgICAgICBmb3IgaywgdiBpbiBzb3J0ZWQoa3dhcmdzLml0ZW1zKCkpKQogIHJldHVybiAobmV3X2FyZ3MsIG5ld19rd2FyZ3MsIHB2YWxzKQoKCmRlZiBpbnNlcnRfdmFsdWVzX2luX2FyZ3MoYXJncywga3dhcmdzLCB2YWx1ZXMpOgogICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgUmVwbGFjZXMgYWxsIHBsYWNlaG9sZGVycyBpbiBhcmdzL2t3YXJncyB3aXRoIGFjdHVhbCB2YWx1ZXMuCgogIEFyZ3M6CiAgICBhcmdzOiBBIGxpc3Qgb2YgcG9zaXRpb25hbCBhcmd1bWVudHMuCiAgICBrd2FyZ3M6IEEgZGljdGlvbmFyeSBvZiBrZXl3b3JkIGFyZ3VtZW50cy4KICAgIHZhbHVlczogQSBsaXN0IG9mIHZhbHVlcyB0aGF0IHdpbGwgYmUgdXNlZCB0byByZXBsYWNlIHBsYWNlaG9sZGVyIHZhbHVlcy4KCiAgUmV0dXJuczoKICAgIEEgMi10dXBsZSBjb250YWluaW5nIGEgbW9kaWZpZWQgbGlzdCBvZiBwb3NpdGlvbmFsIGFyZ3VtZW50cywgYW5kIGEKICAgIG1vZGlmaWVkIGRpY3Rpb25hcnkgb2Yga2V5d29yZCBhcmd1bWVudHMuCiAgIiIiCiAgIyBVc2UgYSBsb2NhbCBpdGVyYXRvciBzbyB0aGF0IHdlIGRvbid0IG1vZGlmeSB2YWx1ZXMuCiAgdl9pdGVyID0gaXRlcih2YWx1ZXMpCiAgbmV3X2FyZ3MgPSBbCiAgICAgIG5leHQodl9pdGVyKSBpZiBpc2luc3RhbmNlKGFyZywgQXJndW1lbnRQbGFjZWhvbGRlcikgZWxzZSBhcmcKICAgICAgZm9yIGFyZyBpbiBhcmdzXQogIG5ld19rd2FyZ3MgPSBkaWN0KAogICAgICAoaywgbmV4dCh2X2l0ZXIpKSBpZiBpc2luc3RhbmNlKHYsIEFyZ3VtZW50UGxhY2Vob2xkZXIpIGVsc2UgKGssIHYpCiAgICAgIGZvciBrLCB2IGluIHNvcnRlZChrd2FyZ3MuaXRlbXMoKSkpCiAgcmV0dXJuIChuZXdfYXJncywgbmV3X2t3YXJncykKCgpkZWYgcnVuX3VzaW5nX3RocmVhZHBvb2woZm5fdG9fZXhlY3V0ZSwgaW5wdXRzLCBwb29sX3NpemUpOgogICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgUnVucyB0aGUgZ2l2ZW4gZnVuY3Rpb24gb24gZ2l2ZW4gaW5wdXRzIHVzaW5nIGEgdGhyZWFkIHBvb2wuCgogIEFyZ3M6CiAgICBmbl90b19leGVjdXRlOiBGdW5jdGlvbiB0byBleGVjdXRlCiAgICBpbnB1dHM6IElucHV0cyBvbiB3aGljaCBnaXZlbiBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGluIHBhcmFsbGVsLgogICAgcG9vbF9zaXplOiBTaXplIG9mIHRocmVhZCBwb29sLgogIFJldHVybnM6CiAgICBSZXN1bHRzIHJldHJpZXZlZCBhZnRlciBleGVjdXRpbmcgdGhlIGdpdmVuIGZ1bmN0aW9uIG9uIGdpdmVuIGlucHV0cy4KICAiIiIKCiAgIyBUaHJlYWRQb29sIGNyYXNoZXMgaW4gb2xkIHZlcnNpb25zIG9mIFB5dGhvbiAoPCAyLjcuNSkgaWYgY3JlYXRlZAogICMgZnJvbSBhIGNoaWxkIHRocmVhZC4gKGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxMDAxNSkKICBpZiBub3QgaGFzYXR0cih0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKSwgJ19jaGlsZHJlbicpOgogICAgdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkuX2NoaWxkcmVuID0gd2Vha3JlZi5XZWFrS2V5RGljdGlvbmFyeSgpCiAgcG9vbCA9IFRocmVhZFBvb2wobWluKHBvb2xfc2l6ZSwgbGVuKGlucHV0cykpKQogIHRyeToKICAgICMgV2UgcmVjb3JkIGFuZCByZXNldCBsb2dnaW5nIGxldmVsIGhlcmUgc2luY2UgJ2FwaXRvb2xzJyBsaWJyYXJ5IEJlYW0KICAgICMgZGVwZW5kcyBvbiB1cGRhdGVzIHRoZSBsb2dnaW5nIGxldmVsIHdoZW4gdXNlZCB3aXRoIGEgdGhyZWFkcG9vbCAtCiAgICAjIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvYXBpdG9vbHMvaXNzdWVzLzE0MQogICAgIyBUT0RPOiBSZW1vdmUgdGhpcyBvbmNlIGFib3ZlIGlzc3VlIGluICdhcGl0b29scycgaXMgZml4ZWQuCiAgICBvbGRfbGV2ZWwgPSBsb2dnaW5nLmdldExvZ2dlcigpLmxldmVsCiAgICByZXR1cm4gcG9vbC5tYXAoZm5fdG9fZXhlY3V0ZSwgaW5wdXRzKQogIGZpbmFsbHk6CiAgICBwb29sLnRlcm1pbmF0ZSgpCiAgICBsb2dnaW5nLmdldExvZ2dlcigpLnNldExldmVsKG9sZF9sZXZlbCkKfXKrggAAKFgYAAAAcmVtb3ZlX29iamVjdHNfZnJvbV9hcmdzWAMAAABkZWZLQUteh1gaAAAAQXJndW1lbnRQbGFjZWhvbGRlci5fX25lX19YAwAAAGRlZks5SzyHWCAAAAByZW1vdmVfb2JqZWN0c19mcm9tX2FyZ3Muc3dhcHBlclgDAAAAZGVmS1RLV4dYFQAAAGluc2VydF92YWx1ZXNfaW5fYXJnc1gDAAAAZGVmS2BLd4dYEwAAAEFyZ3VtZW50UGxhY2Vob2xkZXJYBQAAAGNsYXNzSyBLP4dYGgAAAEFyZ3VtZW50UGxhY2Vob2xkZXIuX19lcV9fWAMAAABkZWZLLks4h1gcAAAAQXJndW1lbnRQbGFjZWhvbGRlci5fX2hhc2hfX1gDAAAAZGVmSz1LP4dYFAAAAHJ1bl91c2luZ190aHJlYWRwb29sWAMAAABkZWZLeUuVh3V9cqyCAAAoWBUAAABpbnNlcnRfdmFsdWVzX2luX2FyZ3NYGQAAAGFwYWNoZV9iZWFtLmludGVybmFsLnV0aWxyrYIAAFgYAAAAcmVtb3ZlX29iamVjdHNfZnJvbV9hcmdzaq2CAABYEwAAAEFyZ3VtZW50UGxhY2Vob2xkZXJqrYIAAFgUAAAAcnVuX3VzaW5nX3RocmVhZHBvb2xqrYIAAHVqfWkAAFgZAAAAYXBhY2hlX2JlYW0uaW50ZXJuYWwudXRpbHKuggAAhYFyr4IAAH1ysIIAAGJ0crGCAABVFmFwYWNoZV9iZWFtLnV0aWxzLnVybnNysoIAAChY6Q8AACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBhYmMKaW1wb3J0IGluc3BlY3QKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0Cgpmcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgbWVzc2FnZQpmcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgd3JhcHBlcnNfcGIyCgpmcm9tIGFwYWNoZV9iZWFtLmludGVybmFsIGltcG9ydCBwaWNrbGVyCmZyb20gYXBhY2hlX2JlYW0udXRpbHMgaW1wb3J0IHByb3RvX3V0aWxzCgoKY2xhc3MgUnVubmVyQXBpRm4ob2JqZWN0KToKICAiIiJBYnN0cmFjdCBiYXNlIGNsYXNzIHRoYXQgcHJvdmlkZXMgdXJuIHJlZ2lzdHJhdGlvbiB1dGlsaXRpZXMuCgogIEEgY2xhc3MgdGhhdCBpbmhlcml0cyBmcm9tIHRoaXMgY2xhc3Mgd2lsbCBnZXQgYSByZWdpc3RyYXRpb24tYmFzZWQKICBmcm9tX3J1bm5lcl9hcGkgYW5kIHRvX3J1bm5lcl9hcGkgbWV0aG9kIHRoYXQgY29udmVydCB0byBhbmQgZnJvbQogIGJlYW1fcnVubmVyX2FwaV9wYjIuU2RrRnVuY3Rpb25TcGVjLgoKICBBZGRpdGlvbmFsbHksIHJlZ2lzdGVyX3BpY2tsZV91cm4gY2FuIGJlIGNhbGxlZCBmcm9tIHRoZSBib2R5IG9mIGEgY2xhc3MKICB0byByZWdpc3RlciBzZXJpYWxpemF0aW9uIHZpYSBwaWNrbGluZy4KICAiIiIKCiAgIyBUT0RPKEJFQU0tMjY4NSk6IElzc3VlIHdpdGggZGlsbCArIGxvY2FsIGNsYXNzZXMgKyBhYmMgbWV0YWNsYXNzCiAgIyBfX21ldGFjbGFzc19fID0gYWJjLkFCQ01ldGEKCiAgX2tub3duX3VybnMgPSB7fQoKICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgZGVmIHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHNlbGYsIHVudXNlZF9jb250ZXh0KToKICAgICIiIlJldHVybnMgdGhlIHVybiBhbmQgcGF5bG9hZCBmb3IgdGhpcyBGbi4KCiAgICBUaGUgcmV0dXJuZWQgdXJuKHMpIHNob3VsZCBiZSByZWdpc3RlcmVkIHdpdGggYHJlZ2lzdGVyX3VybmAuCiAgICAiIiIKICAgIHBhc3MKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIHJlZ2lzdGVyX3VybihjbHMsIHVybiwgcGFyYW1ldGVyX3R5cGUsIGZuPU5vbmUpOgogICAgIiIiUmVnaXN0ZXJzIGEgdXJuIHdpdGggYSBjb25zdHJ1Y3Rvci4KCiAgICBGb3IgZXhhbXBsZSwgaWYgJ2JlYW06Zm46Zm9vJyBoYWQgcGFyYW1ldGVyIHR5cGUgRm9vUGF5bG9hZCwgb25lIGNvdWxkCiAgICB3cml0ZSBgUnVubmVyQXBpRm4ucmVnaXN0ZXJfdXJuKCdiZWFuOmZuOmZvbycsIEZvb1BheWxvYWQsIGZvb19mcm9tX3Byb3RvKWAKICAgIHdoZXJlIGZvb19mcm9tX3Byb3RvIHRvb2sgYXMgYXJndW1lbnRzIGEgRm9vUGF5bG9hZCBhbmQgYSBQaXBlbGluZUNvbnRleHQuCiAgICBUaGlzIGZ1bmN0aW9uIGNhbiBhbHNvIGJlIHVzZWQgYXMgYSBkZWNvcmF0b3IgcmF0aGVyIHRoYW4gcGFzc2luZyB0aGUKICAgIGNhbGxhYmxlIGluIGFzIHRoZSBmaW5hbCBwYXJhbWV0ZXIuCgogICAgQSBjb3JyZXNwb25kaW5nIHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyIG1ldGhvZCB3b3VsZCBiZSBleHBlY3RlZCB0aGF0CiAgICByZXR1cm5zIHRoZSB0dXBsZSAoJ2JlYW06Zm46Zm9vJywgRm9vUGF5bG9hZCkKICAgICIiIgogICAgZGVmIHJlZ2lzdGVyKGZuKToKICAgICAgY2xzLl9rbm93bl91cm5zW3Vybl0gPSBwYXJhbWV0ZXJfdHlwZSwgZm4KICAgICAgcmV0dXJuIHN0YXRpY21ldGhvZChmbikKICAgIGlmIGZuOgogICAgICAjIFVzZWQgYXMgYSBzdGF0ZW1lbnQuCiAgICAgIHJlZ2lzdGVyKGZuKQogICAgZWxzZToKICAgICAgIyBVc2VkIGFzIGEgZGVjb3JhdG9yLgogICAgICByZXR1cm4gcmVnaXN0ZXIKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIHJlZ2lzdGVyX3BpY2tsZV91cm4oY2xzLCBwaWNrbGVfdXJuKToKICAgICIiIlJlZ2lzdGVycyBhbmQgaW1wbGVtZW50cyB0aGUgZ2l2ZW4gdXJuIHZpYSBwaWNrbGluZy4KICAgICIiIgogICAgaW5zcGVjdC5jdXJyZW50ZnJhbWUoKS5mX2JhY2suZl9sb2NhbHNbJ3RvX3J1bm5lcl9hcGlfcGFyYW1ldGVyJ10gPSAoCiAgICAgICAgbGFtYmRhIHNlbGYsIGNvbnRleHQ6ICgKICAgICAgICAgICAgcGlja2xlX3Vybiwgd3JhcHBlcnNfcGIyLkJ5dGVzVmFsdWUodmFsdWU9cGlja2xlci5kdW1wcyhzZWxmKSkpKQogICAgY2xzLnJlZ2lzdGVyX3VybigKICAgICAgICBwaWNrbGVfdXJuLAogICAgICAgIHdyYXBwZXJzX3BiMi5CeXRlc1ZhbHVlLAogICAgICAgIGxhbWJkYSBwcm90bywgdW51c2VkX2NvbnRleHQ6IHBpY2tsZXIubG9hZHMocHJvdG8udmFsdWUpKQoKICBkZWYgdG9fcnVubmVyX2FwaShzZWxmLCBjb250ZXh0KToKICAgICIiIlJldHVybnMgYW4gU2RrRnVuY3Rpb25TcGVjIGVuY29kaW5nIHRoaXMgRm4uCgogICAgUHJlZmVyIG92ZXJyaWRpbmcgc2VsZi50b19ydW5uZXJfYXBpX3BhcmFtZXRlci4KICAgICIiIgogICAgZnJvbSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkgaW1wb3J0IGJlYW1fcnVubmVyX2FwaV9wYjIKICAgIHVybiwgdHlwZWRfcGFyYW0gPSBzZWxmLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKGNvbnRleHQpCiAgICByZXR1cm4gYmVhbV9ydW5uZXJfYXBpX3BiMi5TZGtGdW5jdGlvblNwZWMoCiAgICAgICAgZW52aXJvbm1lbnRfaWQ9Y29udGV4dC5kZWZhdWx0X2Vudmlyb25tZW50X2lkKCksCiAgICAgICAgc3BlYz1iZWFtX3J1bm5lcl9hcGlfcGIyLkZ1bmN0aW9uU3BlYygKICAgICAgICAgICAgdXJuPXVybiwKICAgICAgICAgICAgcGF5bG9hZD10eXBlZF9wYXJhbS5TZXJpYWxpemVUb1N0cmluZygpCiAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZWRfcGFyYW0sIG1lc3NhZ2UuTWVzc2FnZSkKICAgICAgICAgICAgZWxzZSB0eXBlZF9wYXJhbSkpCgogIEBjbGFzc21ldGhvZAogIGRlZiBmcm9tX3J1bm5lcl9hcGkoY2xzLCBmbl9wcm90bywgY29udGV4dCk6CiAgICAiIiJDb252ZXJ0cyBmcm9tIGFuIFNka0Z1bmN0aW9uU3BlYyB0byBhIEZuIG9iamVjdC4KCiAgICBQcmVmZXIgcmVnaXN0ZXJpbmcgYSB1cm4gd2l0aCBpdHMgcGFyYW1ldGVyIHR5cGUgYW5kIGNvbnN0cnVjdG9yLgogICAgIiIiCiAgICBwYXJhbWV0ZXJfdHlwZSwgY29uc3RydWN0b3IgPSBjbHMuX2tub3duX3VybnNbZm5fcHJvdG8uc3BlYy51cm5dCiAgICByZXR1cm4gY29uc3RydWN0b3IoCiAgICAgICAgcHJvdG9fdXRpbHMucGFyc2VfQnl0ZXMoZm5fcHJvdG8uc3BlYy5wYXlsb2FkLCBwYXJhbWV0ZXJfdHlwZSksCiAgICAgICAgY29udGV4dCkKfXKzggAAKFgbAAAAUnVubmVyQXBpRm4uZnJvbV9ydW5uZXJfYXBpWAMAAABkZWZLa0t1h1gfAAAAUnVubmVyQXBpRm4ucmVnaXN0ZXJfcGlja2xlX3VyblgDAAAAZGVmS1BLW4dYIQAAAFJ1bm5lckFwaUZuLnJlZ2lzdGVyX3Vybi5yZWdpc3RlclgDAAAAZGVmS0ZLSYdYIwAAAFJ1bm5lckFwaUZuLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyWAMAAABkZWZLMUs4h1gZAAAAUnVubmVyQXBpRm4udG9fcnVubmVyX2FwaVgDAAAAZGVmS1xLaodYGAAAAFJ1bm5lckFwaUZuLnJlZ2lzdGVyX3VyblgDAAAAZGVmSzlLT4dYCwAAAFJ1bm5lckFwaUZuWAUAAABjbGFzc0shS3WHdX1qfWkAAFgbAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlcrSCAACFgXK1ggAAfXK2ggAAYnRyt4IAAFUoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X3J1bm5lcihYH0cAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiRGlyZWN0UnVubmVyLCBleGVjdXRpbmcgb24gdGhlIGxvY2FsIG1hY2hpbmUuCgpUaGUgRGlyZWN0UnVubmVyIGlzIGEgcnVubmVyIGltcGxlbWVudGF0aW9uIHRoYXQgZXhlY3V0ZXMgdGhlIGVudGlyZQpncmFwaCBvZiB0cmFuc2Zvcm1hdGlvbnMgYmVsb25naW5nIHRvIGEgcGlwZWxpbmUgb24gdGhlIGxvY2FsIG1hY2hpbmUuCiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBpdGVydG9vbHMKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHRpbWUKCmZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCB3cmFwcGVyc19wYjIKCmltcG9ydCBhcGFjaGVfYmVhbSBhcyBiZWFtCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IGNvZGVycwpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCB0eXBlaGludHMKZnJvbSBhcGFjaGVfYmVhbS5pbnRlcm5hbC51dGlsIGltcG9ydCBBcmd1bWVudFBsYWNlaG9sZGVyCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBEaXJlY3RPcHRpb25zCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBTdGFuZGFyZE9wdGlvbnMKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyIGltcG9ydCBSdW50aW1lVmFsdWVQcm92aWRlcgpmcm9tIGFwYWNoZV9iZWFtLnB2YWx1ZSBpbXBvcnQgUENvbGxlY3Rpb24KZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5idW5kbGVfZmFjdG9yeSBpbXBvcnQgQnVuZGxlRmFjdG9yeQpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmNsb2NrIGltcG9ydCBSZWFsQ2xvY2sKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jbG9jayBpbXBvcnQgVGVzdENsb2NrCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIgaW1wb3J0IFBpcGVsaW5lUmVzdWx0CmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIgaW1wb3J0IFBpcGVsaW5lUnVubmVyCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIgaW1wb3J0IFBpcGVsaW5lU3RhdGUKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgaW1wb3J0IENvbWJpbmVQZXJLZXkKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgaW1wb3J0IENvbWJpbmVWYWx1ZXNEb0ZuCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlIGltcG9ydCBEb0ZuCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlIGltcG9ydCBQYXJEbwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSBpbXBvcnQgX0dyb3VwQWxzb0J5V2luZG93CmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlIGltcG9ydCBfR3JvdXBBbHNvQnlXaW5kb3dEb0ZuCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlIGltcG9ydCBfR3JvdXBCeUtleU9ubHkKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0gaW1wb3J0IFBUcmFuc2Zvcm0KCiMgTm90ZSB0aGF0IHRoZSBCdW5kbGVCYXNlZERpcmVjdFJ1bm5lciBhbmQgU3dpdGNoaW5nRGlyZWN0UnVubmVyIG5hbWVzIGFyZQojIGV4cGVyaW1lbnRhbCBhbmQgaGF2ZSBubyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgpfX2FsbF9fID0gWydCdW5kbGVCYXNlZERpcmVjdFJ1bm5lcicsCiAgICAgICAgICAgJ0RpcmVjdFJ1bm5lcicsCiAgICAgICAgICAgJ1N3aXRjaGluZ0RpcmVjdFJ1bm5lciddCgoKY2xhc3MgU3dpdGNoaW5nRGlyZWN0UnVubmVyKFBpcGVsaW5lUnVubmVyKToKICAiIiJFeGVjdXRlcyBhIHNpbmdsZSBwaXBlbGluZSBvbiB0aGUgbG9jYWwgbWFjaGluZS4KCiAgVGhpcyBpbXBsZW1lbnRhdGlvbiBzd2l0Y2hlcyBiZXR3ZWVuIHVzaW5nIHRoZSBGbkFwaVJ1bm5lciAod2hpY2ggaGFzCiAgaGlnaCB0aHJvdWdocHV0IGZvciBiYXRjaCBqb2JzKSBhbmQgdXNpbmcgdGhlIEJ1bmRsZUJhc2VkRGlyZWN0UnVubmVyLAogIHdoaWNoIHN1cHBvcnRzIHN0cmVhbWluZyBleGVjdXRpb24gYW5kIGNlcnRhaW4gcHJpbWl0aXZlcyBub3QgeWV0CiAgaW1wbGVtZW50ZWQgaW4gdGhlIEZuQXBpUnVubmVyLgogICIiIgoKICBkZWYgcnVuX3BpcGVsaW5lKHNlbGYsIHBpcGVsaW5lLCBvcHRpb25zKToKICAgIHVzZV9mbmFwaV9ydW5uZXIgPSBUcnVlCgogICAgIyBTdHJlYW1pbmcgbW9kZSBpcyBub3QgeWV0IHN1cHBvcnRlZCBvbiB0aGUgRm5BcGlSdW5uZXIuCiAgICBpZiBvcHRpb25zLnZpZXdfYXMoU3RhbmRhcmRPcHRpb25zKS5zdHJlYW1pbmc6CiAgICAgIHVzZV9mbmFwaV9ydW5uZXIgPSBGYWxzZQoKICAgIGZyb20gYXBhY2hlX2JlYW0ucGlwZWxpbmUgaW1wb3J0IFBpcGVsaW5lVmlzaXRvcgogICAgZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmNvbW1vbiBpbXBvcnQgRG9GblNpZ25hdHVyZQogICAgZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UgaW1wb3J0IE5hdGl2ZVNvdXJjZQogICAgZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UgaW1wb3J0IF9OYXRpdmVXcml0ZQogICAgZnJvbSBhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtIGltcG9ydCBUZXN0U3RyZWFtCgogICAgY2xhc3MgX0ZuQXBpUnVubmVyU3VwcG9ydFZpc2l0b3IoUGlwZWxpbmVWaXNpdG9yKToKICAgICAgIiIiVmlzaXRvciBkZXRlcm1pbmluZyBpZiBhIFBpcGVsaW5lIGNhbiBiZSBydW4gb24gdGhlIEZuQXBpUnVubmVyLiIiIgoKICAgICAgZGVmIGFjY2VwdChzZWxmLCBwaXBlbGluZSk6CiAgICAgICAgc2VsZi5zdXBwb3J0ZWRfYnlfZm5hcGlfcnVubmVyID0gVHJ1ZQogICAgICAgIHBpcGVsaW5lLnZpc2l0KHNlbGYpCiAgICAgICAgcmV0dXJuIHNlbGYuc3VwcG9ydGVkX2J5X2ZuYXBpX3J1bm5lcgoKICAgICAgZGVmIHZpc2l0X3RyYW5zZm9ybShzZWxmLCBhcHBsaWVkX3B0cmFuc2Zvcm0pOgogICAgICAgIHRyYW5zZm9ybSA9IGFwcGxpZWRfcHRyYW5zZm9ybS50cmFuc2Zvcm0KICAgICAgICAjIFRoZSBGbkFwaVJ1bm5lciBkb2VzIG5vdCBzdXBwb3J0IHN0cmVhbWluZyBleGVjdXRpb24uCiAgICAgICAgaWYgaXNpbnN0YW5jZSh0cmFuc2Zvcm0sIFRlc3RTdHJlYW0pOgogICAgICAgICAgc2VsZi5zdXBwb3J0ZWRfYnlfZm5hcGlfcnVubmVyID0gRmFsc2UKICAgICAgICAjIFRoZSBGbkFwaVJ1bm5lciBkb2VzIG5vdCBzdXBwb3J0IHJlYWRzIGZyb20gTmF0aXZlU291cmNlcy4KICAgICAgICBpZiAoaXNpbnN0YW5jZSh0cmFuc2Zvcm0sIGJlYW0uaW8uUmVhZCkgYW5kCiAgICAgICAgICAgIGlzaW5zdGFuY2UodHJhbnNmb3JtLnNvdXJjZSwgTmF0aXZlU291cmNlKSk6CiAgICAgICAgICBzZWxmLnN1cHBvcnRlZF9ieV9mbmFwaV9ydW5uZXIgPSBGYWxzZQogICAgICAgICMgVGhlIEZuQXBpUnVubmVyIGRvZXMgbm90IHN1cHBvcnQgdGhlIHVzZSBvZiBfTmF0aXZlV3JpdGVzLgogICAgICAgIGlmIGlzaW5zdGFuY2UodHJhbnNmb3JtLCBfTmF0aXZlV3JpdGUpOgogICAgICAgICAgc2VsZi5zdXBwb3J0ZWRfYnlfZm5hcGlfcnVubmVyID0gRmFsc2UKICAgICAgICBpZiBpc2luc3RhbmNlKHRyYW5zZm9ybSwgYmVhbS5QYXJEbyk6CiAgICAgICAgICBkb2ZuID0gdHJhbnNmb3JtLmRvZm4KICAgICAgICAgICMgVGhlIEZuQXBpUnVubmVyIGRvZXMgbm90IHN1cHBvcnQgZXhlY3V0aW9uIG9mIFNwbGl0dGFibGVEb0Zucy4KICAgICAgICAgIGlmIERvRm5TaWduYXR1cmUoZG9mbikuaXNfc3BsaXR0YWJsZV9kb2ZuKCk6CiAgICAgICAgICAgIHNlbGYuc3VwcG9ydGVkX2J5X2ZuYXBpX3J1bm5lciA9IEZhbHNlCiAgICAgICAgICAjIFRoZSBGbkFwaVJ1bm5lciBkb2VzIG5vdCBzdXBwb3J0IGV4ZWN1dGlvbiBvZiBEb0ZucyB3aXRoIHRpbWVycy4KICAgICAgICAgIGlmIERvRm5TaWduYXR1cmUoZG9mbikuaGFzX3RpbWVycygpOgogICAgICAgICAgICBzZWxmLnN1cHBvcnRlZF9ieV9mbmFwaV9ydW5uZXIgPSBGYWxzZQogICAgICAgICAgIyBUaGUgRm5BcGlSdW5uZXIgZG9lcyBub3Qgc3VwcG9ydCBleGVjdXRpb24gb2YgQ29tYmluZUZucyB3aXRoCiAgICAgICAgICAjIGRlZmVycmVkIHNpZGUgaW5wdXRzLgogICAgICAgICAgaWYgaXNpbnN0YW5jZShkb2ZuLCBDb21iaW5lVmFsdWVzRG9Gbik6CiAgICAgICAgICAgIGFyZ3MsIGt3YXJncyA9IHRyYW5zZm9ybS5yYXdfc2lkZV9pbnB1dHMKICAgICAgICAgICAgYXJnc190b19jaGVjayA9IGl0ZXJ0b29scy5jaGFpbihhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3YXJncy52YWx1ZXMoKSkKICAgICAgICAgICAgaWYgYW55KGlzaW5zdGFuY2UoYXJnLCBBcmd1bWVudFBsYWNlaG9sZGVyKQogICAgICAgICAgICAgICAgICAgZm9yIGFyZyBpbiBhcmdzX3RvX2NoZWNrKToKICAgICAgICAgICAgICBzZWxmLnN1cHBvcnRlZF9ieV9mbmFwaV9ydW5uZXIgPSBGYWxzZQoKICAgICMgQ2hlY2sgd2hldGhlciBhbGwgdHJhbnNmb3JtcyB1c2VkIGluIHRoZSBwaXBlbGluZSBhcmUgc3VwcG9ydGVkIGJ5IHRoZQogICAgIyBGbkFwaVJ1bm5lci4KICAgIHVzZV9mbmFwaV9ydW5uZXIgPSBfRm5BcGlSdW5uZXJTdXBwb3J0VmlzaXRvcigpLmFjY2VwdChwaXBlbGluZSkKCiAgICAjIEFsc28gZW5zdXJlIGdycGMgaXMgYXZhaWxhYmxlLgogICAgdHJ5OgogICAgICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtdmFyaWFibGUKICAgICAgaW1wb3J0IGdycGMKICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgdXNlX2ZuYXBpX3J1bm5lciA9IEZhbHNlCgogICAgaWYgdXNlX2ZuYXBpX3J1bm5lcjoKICAgICAgZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLnBvcnRhYmlsaXR5LmZuX2FwaV9ydW5uZXIgaW1wb3J0IEZuQXBpUnVubmVyCiAgICAgIHJ1bm5lciA9IEZuQXBpUnVubmVyKCkKICAgIGVsc2U6CiAgICAgIHJ1bm5lciA9IEJ1bmRsZUJhc2VkRGlyZWN0UnVubmVyKCkKCiAgICByZXR1cm4gcnVubmVyLnJ1bl9waXBlbGluZShwaXBlbGluZSwgb3B0aW9ucykKCgojIFR5cGUgdmFyaWFibGVzLgpLID0gdHlwZWhpbnRzLlR5cGVWYXJpYWJsZSgnSycpClYgPSB0eXBlaGludHMuVHlwZVZhcmlhYmxlKCdWJykKCgpAdHlwZWhpbnRzLndpdGhfaW5wdXRfdHlwZXModHlwZWhpbnRzLktWW0ssIFZdKQpAdHlwZWhpbnRzLndpdGhfb3V0cHV0X3R5cGVzKHR5cGVoaW50cy5LVltLLCB0eXBlaGludHMuSXRlcmFibGVbVl1dKQpjbGFzcyBfU3RyZWFtaW5nR3JvdXBCeUtleU9ubHkoX0dyb3VwQnlLZXlPbmx5KToKICAiIiJTdHJlYW1pbmcgR3JvdXBCeUtleU9ubHkgcGxhY2Vob2xkZXIgZm9yIG92ZXJyaWRpbmcgaW4gRGlyZWN0UnVubmVyLiIiIgogIHVybiA9ICJkaXJlY3RfcnVubmVyOnN0cmVhbWluZ19nYmtvOnYwLjEiCgogICMgVGhlc2UgYXJlIG5lZWRlZCBkdWUgdG8gYXBwbHkgb3ZlcmxvYWRzLgogIGRlZiB0b19ydW5uZXJfYXBpX3BhcmFtZXRlcihzZWxmLCB1bnVzZWRfY29udGV4dCk6CiAgICByZXR1cm4gX1N0cmVhbWluZ0dyb3VwQnlLZXlPbmx5LnVybiwgTm9uZQoKICBAUFRyYW5zZm9ybS5yZWdpc3Rlcl91cm4odXJuLCBOb25lKQogIGRlZiBmcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHVudXNlZF9wYXlsb2FkLCB1bnVzZWRfY29udGV4dCk6CiAgICByZXR1cm4gX1N0cmVhbWluZ0dyb3VwQnlLZXlPbmx5KCkKCgpAdHlwZWhpbnRzLndpdGhfaW5wdXRfdHlwZXModHlwZWhpbnRzLktWW0ssIHR5cGVoaW50cy5JdGVyYWJsZVtWXV0pCkB0eXBlaGludHMud2l0aF9vdXRwdXRfdHlwZXModHlwZWhpbnRzLktWW0ssIHR5cGVoaW50cy5JdGVyYWJsZVtWXV0pCmNsYXNzIF9TdHJlYW1pbmdHcm91cEFsc29CeVdpbmRvdyhfR3JvdXBBbHNvQnlXaW5kb3cpOgogICIiIlN0cmVhbWluZyBHcm91cEFsc29CeVdpbmRvdyBwbGFjZWhvbGRlciBmb3Igb3ZlcnJpZGluZyBpbiBEaXJlY3RSdW5uZXIuIiIiCiAgdXJuID0gImRpcmVjdF9ydW5uZXI6c3RyZWFtaW5nX2dhYnc6djAuMSIKCiAgIyBUaGVzZSBhcmUgbmVlZGVkIGR1ZSB0byBhcHBseSBvdmVybG9hZHMuCiAgZGVmIHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHNlbGYsIGNvbnRleHQpOgogICAgcmV0dXJuICgKICAgICAgICBfU3RyZWFtaW5nR3JvdXBBbHNvQnlXaW5kb3cudXJuLAogICAgICAgIHdyYXBwZXJzX3BiMi5CeXRlc1ZhbHVlKHZhbHVlPWNvbnRleHQud2luZG93aW5nX3N0cmF0ZWdpZXMuZ2V0X2lkKAogICAgICAgICAgICBzZWxmLndpbmRvd2luZykpKQoKICBAUFRyYW5zZm9ybS5yZWdpc3Rlcl91cm4odXJuLCB3cmFwcGVyc19wYjIuQnl0ZXNWYWx1ZSkKICBkZWYgZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcihwYXlsb2FkLCBjb250ZXh0KToKICAgIHJldHVybiBfU3RyZWFtaW5nR3JvdXBBbHNvQnlXaW5kb3coCiAgICAgICAgY29udGV4dC53aW5kb3dpbmdfc3RyYXRlZ2llcy5nZXRfYnlfaWQocGF5bG9hZC52YWx1ZSkpCgoKZGVmIF9nZXRfdHJhbnNmb3JtX292ZXJyaWRlcyhwaXBlbGluZV9vcHRpb25zKToKICAjIEEgbGlzdCBvZiBQVHJhbnNmb3JtT3ZlcnJpZGUgb2JqZWN0cyB0byBiZSBhcHBsaWVkIGJlZm9yZSBydW5uaW5nIGEgcGlwZWxpbmUKICAjIHVzaW5nIERpcmVjdFJ1bm5lci4KICAjIEN1cnJlbnRseSB0aGlzIG9ubHkgd29ya3MgZm9yIG92ZXJyaWRlcyB3aGVyZSB0aGUgaW5wdXQgYW5kIG91dHB1dCB0eXBlcyBkbwogICMgbm90IGNoYW5nZS4KICAjIEZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgIyBJbXBvcnRpbmcgZm9sbG93aW5nIGxvY2FsbHkgdG8gYXZvaWQgYSBjaXJjdWxhciBkZXBlbmRlbmN5LgogIGZyb20gYXBhY2hlX2JlYW0ucGlwZWxpbmUgaW1wb3J0IFBUcmFuc2Zvcm1PdmVycmlkZQogIGZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5zZGZfY29tbW9uIGltcG9ydCBTcGxpdHRhYmxlUGFyRG9PdmVycmlkZQogIGZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuaGVscGVyX3RyYW5zZm9ybXMgaW1wb3J0IExpZnRlZENvbWJpbmVQZXJLZXkKICBmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyIGltcG9ydCBQcm9jZXNzS2V5ZWRFbGVtZW50c1ZpYUtleWVkV29ya0l0ZW1zT3ZlcnJpZGUKCiAgY2xhc3MgQ29tYmluZVBlcktleU92ZXJyaWRlKFBUcmFuc2Zvcm1PdmVycmlkZSk6CiAgICBkZWYgbWF0Y2hlcyhzZWxmLCBhcHBsaWVkX3B0cmFuc2Zvcm0pOgogICAgICBpZiBpc2luc3RhbmNlKGFwcGxpZWRfcHRyYW5zZm9ybS50cmFuc2Zvcm0sIENvbWJpbmVQZXJLZXkpOgogICAgICAgIHJldHVybiBUcnVlCgogICAgZGVmIGdldF9yZXBsYWNlbWVudF90cmFuc2Zvcm0oc2VsZiwgdHJhbnNmb3JtKToKICAgICAgIyBUT0RPOiBNb3ZlIGltcG9ydHMgdG8gdG9wLiBQaXBlbGluZSA8LT4gUnVubmVyIGRlcGVuZGVuY3kgY2F1c2UgcHJvYmxlbXMKICAgICAgIyB3aXRoIHJlc29sdmluZyBpbXBvcnRzIHdoZW4gdGhleSBhcmUgYXQgdG9wLgogICAgICAjIHB5bGludDogZGlzYWJsZT13cm9uZy1pbXBvcnQtcG9zaXRpb24KICAgICAgdHJ5OgogICAgICAgIHJldHVybiBMaWZ0ZWRDb21iaW5lUGVyS2V5KHRyYW5zZm9ybS5mbiwgdHJhbnNmb3JtLmFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmt3YXJncykKICAgICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXJyb3I6CiAgICAgICAgcmV0dXJuIHRyYW5zZm9ybQoKICBjbGFzcyBTdHJlYW1pbmdHcm91cEJ5S2V5T3ZlcnJpZGUoUFRyYW5zZm9ybU92ZXJyaWRlKToKICAgIGRlZiBtYXRjaGVzKHNlbGYsIGFwcGxpZWRfcHRyYW5zZm9ybSk6CiAgICAgICMgTm90ZTogd2UgbWF0Y2ggdGhlIGV4YWN0IGNsYXNzLCBzaW5jZSB3ZSByZXBsYWNlIGl0IHdpdGggYSBzdWJjbGFzcy4KICAgICAgcmV0dXJuIGFwcGxpZWRfcHRyYW5zZm9ybS50cmFuc2Zvcm0uX19jbGFzc19fID09IF9Hcm91cEJ5S2V5T25seQoKICAgIGRlZiBnZXRfcmVwbGFjZW1lbnRfdHJhbnNmb3JtKHNlbGYsIHRyYW5zZm9ybSk6CiAgICAgICMgVXNlIHNwZWNpYWxpemVkIHN0cmVhbWluZyBpbXBsZW1lbnRhdGlvbi4KICAgICAgdHJhbnNmb3JtID0gX1N0cmVhbWluZ0dyb3VwQnlLZXlPbmx5KCkKICAgICAgcmV0dXJuIHRyYW5zZm9ybQoKICBjbGFzcyBTdHJlYW1pbmdHcm91cEFsc29CeVdpbmRvd092ZXJyaWRlKFBUcmFuc2Zvcm1PdmVycmlkZSk6CiAgICBkZWYgbWF0Y2hlcyhzZWxmLCBhcHBsaWVkX3B0cmFuc2Zvcm0pOgogICAgICAjIE5vdGU6IHdlIG1hdGNoIHRoZSBleGFjdCBjbGFzcywgc2luY2Ugd2UgcmVwbGFjZSBpdCB3aXRoIGEgc3ViY2xhc3MuCiAgICAgIHRyYW5zZm9ybSA9IGFwcGxpZWRfcHRyYW5zZm9ybS50cmFuc2Zvcm0KICAgICAgcmV0dXJuIChpc2luc3RhbmNlKGFwcGxpZWRfcHRyYW5zZm9ybS50cmFuc2Zvcm0sIFBhckRvKSBhbmQKICAgICAgICAgICAgICBpc2luc3RhbmNlKHRyYW5zZm9ybS5kb2ZuLCBfR3JvdXBBbHNvQnlXaW5kb3dEb0ZuKSBhbmQKICAgICAgICAgICAgICB0cmFuc2Zvcm0uX19jbGFzc19fICE9IF9TdHJlYW1pbmdHcm91cEFsc29CeVdpbmRvdykKCiAgICBkZWYgZ2V0X3JlcGxhY2VtZW50X3RyYW5zZm9ybShzZWxmLCB0cmFuc2Zvcm0pOgogICAgICAjIFVzZSBzcGVjaWFsaXplZCBzdHJlYW1pbmcgaW1wbGVtZW50YXRpb24uCiAgICAgIHRyYW5zZm9ybSA9IF9TdHJlYW1pbmdHcm91cEFsc29CeVdpbmRvdyh0cmFuc2Zvcm0uZG9mbi53aW5kb3dpbmcpCiAgICAgIHJldHVybiB0cmFuc2Zvcm0KCiAgb3ZlcnJpZGVzID0gW1NwbGl0dGFibGVQYXJEb092ZXJyaWRlKCksCiAgICAgICAgICAgICAgIFByb2Nlc3NLZXllZEVsZW1lbnRzVmlhS2V5ZWRXb3JrSXRlbXNPdmVycmlkZSgpLAogICAgICAgICAgICAgICBDb21iaW5lUGVyS2V5T3ZlcnJpZGUoKV0KCiAgIyBBZGQgc3RyZWFtaW5nIG92ZXJyaWRlcywgaWYgbmVjZXNzYXJ5LgogIGlmIHBpcGVsaW5lX29wdGlvbnMudmlld19hcyhTdGFuZGFyZE9wdGlvbnMpLnN0cmVhbWluZzoKICAgIG92ZXJyaWRlcy5hcHBlbmQoU3RyZWFtaW5nR3JvdXBCeUtleU92ZXJyaWRlKCkpCiAgICBvdmVycmlkZXMuYXBwZW5kKFN0cmVhbWluZ0dyb3VwQWxzb0J5V2luZG93T3ZlcnJpZGUoKSkKCiAgIyBBZGQgUHViU3ViIG92ZXJyaWRlcywgaWYgUHViU3ViIGlzIGF2YWlsYWJsZS4KICB0cnk6CiAgICBmcm9tIGFwYWNoZV9iZWFtLmlvLmdjcCBpbXBvcnQgcHVic3ViIGFzIHVudXNlZF9wdWJzdWIKICAgIG92ZXJyaWRlcyArPSBfZ2V0X3B1YnN1Yl90cmFuc2Zvcm1fb3ZlcnJpZGVzKHBpcGVsaW5lX29wdGlvbnMpCiAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgcGFzcwoKICByZXR1cm4gb3ZlcnJpZGVzCgoKY2xhc3MgX0RpcmVjdFJlYWRGcm9tUHViU3ViKFBUcmFuc2Zvcm0pOgogIGRlZiBfX2luaXRfXyhzZWxmLCBzb3VyY2UpOgogICAgc2VsZi5fc291cmNlID0gc291cmNlCgogIGRlZiBfaW5mZXJfb3V0cHV0X2NvZGVyKHNlbGYsIHVudXNlZF9pbnB1dF90eXBlPU5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdW51c2VkX2lucHV0X2NvZGVyPU5vbmUpOgogICAgcmV0dXJuIGNvZGVycy5CeXRlc0NvZGVyKCkKCiAgZGVmIGdldF93aW5kb3dpbmcoc2VsZiwgaW5wdXRzKToKICAgIHJldHVybiBiZWFtLldpbmRvd2luZyhiZWFtLndpbmRvdy5HbG9iYWxXaW5kb3dzKCkpCgogIGRlZiBleHBhbmQoc2VsZiwgcHZhbHVlKToKICAgICMgVGhpcyBpcyBoYW5kbGVkIGFzIGEgbmF0aXZlIHRyYW5zZm9ybS4KICAgIHJldHVybiBQQ29sbGVjdGlvbihzZWxmLnBpcGVsaW5lKQoKCmNsYXNzIF9EaXJlY3RXcml0ZVRvUHViU3ViRm4oRG9Gbik6CiAgQlVGRkVSX1NJWkVfRUxFTUVOVFMgPSAxMDAKICBGTFVTSF9USU1FT1VUX1NFQ1MgPSBCVUZGRVJfU0laRV9FTEVNRU5UUyAqIDAuNQoKICBkZWYgX19pbml0X18oc2VsZiwgc2luayk6CiAgICBzZWxmLnByb2plY3QgPSBzaW5rLnByb2plY3QKICAgIHNlbGYuc2hvcnRfdG9waWNfbmFtZSA9IHNpbmsudG9waWNfbmFtZQogICAgc2VsZi5pZF9sYWJlbCA9IHNpbmsuaWRfbGFiZWwKICAgIHNlbGYudGltZXN0YW1wX2F0dHJpYnV0ZSA9IHNpbmsudGltZXN0YW1wX2F0dHJpYnV0ZQogICAgc2VsZi53aXRoX2F0dHJpYnV0ZXMgPSBzaW5rLndpdGhfYXR0cmlidXRlcwoKICAgICMgVE9ETyhCRUFNLTQyNzUpOiBBZGQgc3VwcG9ydCBmb3IgaWRfbGFiZWwgYW5kIHRpbWVzdGFtcF9hdHRyaWJ1dGUuCiAgICBpZiBzaW5rLmlkX2xhYmVsOgogICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdEaXJlY3RSdW5uZXI6IGlkX2xhYmVsIGlzIG5vdCBzdXBwb3J0ZWQgZm9yICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUHViU3ViIHdyaXRlcycpCiAgICBpZiBzaW5rLnRpbWVzdGFtcF9hdHRyaWJ1dGU6CiAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ0RpcmVjdFJ1bm5lcjogdGltZXN0YW1wX2F0dHJpYnV0ZSBpcyBub3QgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdXBwb3J0ZWQgZm9yIFB1YlN1YiB3cml0ZXMnKQoKICBkZWYgc3RhcnRfYnVuZGxlKHNlbGYpOgogICAgc2VsZi5fYnVmZmVyID0gW10KCiAgZGVmIHByb2Nlc3Moc2VsZiwgZWxlbSk6CiAgICBzZWxmLl9idWZmZXIuYXBwZW5kKGVsZW0pCiAgICBpZiBsZW4oc2VsZi5fYnVmZmVyKSA+PSBzZWxmLkJVRkZFUl9TSVpFX0VMRU1FTlRTOgogICAgICBzZWxmLl9mbHVzaCgpCgogIGRlZiBmaW5pc2hfYnVuZGxlKHNlbGYpOgogICAgc2VsZi5fZmx1c2goKQoKICBkZWYgX2ZsdXNoKHNlbGYpOgogICAgZnJvbSBnb29nbGUuY2xvdWQgaW1wb3J0IHB1YnN1YgogICAgcHViX2NsaWVudCA9IHB1YnN1Yi5QdWJsaXNoZXJDbGllbnQoKQogICAgdG9waWMgPSBwdWJfY2xpZW50LnRvcGljX3BhdGgoc2VsZi5wcm9qZWN0LCBzZWxmLnNob3J0X3RvcGljX25hbWUpCgogICAgaWYgc2VsZi53aXRoX2F0dHJpYnV0ZXM6CiAgICAgIGZ1dHVyZXMgPSBbcHViX2NsaWVudC5wdWJsaXNoKHRvcGljLCBlbGVtLmRhdGEsICoqZWxlbS5hdHRyaWJ1dGVzKQogICAgICAgICAgICAgICAgIGZvciBlbGVtIGluIHNlbGYuX2J1ZmZlcl0KICAgIGVsc2U6CiAgICAgIGZ1dHVyZXMgPSBbcHViX2NsaWVudC5wdWJsaXNoKHRvcGljLCBlbGVtKQogICAgICAgICAgICAgICAgIGZvciBlbGVtIGluIHNlbGYuX2J1ZmZlcl0KCiAgICB0aW1lcl9zdGFydCA9IHRpbWUudGltZSgpCiAgICBmb3IgZnV0dXJlIGluIGZ1dHVyZXM6CiAgICAgIHJlbWFpbmluZyA9IHNlbGYuRkxVU0hfVElNRU9VVF9TRUNTIC0gKHRpbWUudGltZSgpIC0gdGltZXJfc3RhcnQpCiAgICAgIGZ1dHVyZS5yZXN1bHQocmVtYWluaW5nKQogICAgc2VsZi5fYnVmZmVyID0gW10KCgpkZWYgX2dldF9wdWJzdWJfdHJhbnNmb3JtX292ZXJyaWRlcyhwaXBlbGluZV9vcHRpb25zKToKICBmcm9tIGFwYWNoZV9iZWFtLmlvLmdjcCBpbXBvcnQgcHVic3ViIGFzIGJlYW1fcHVic3ViCiAgZnJvbSBhcGFjaGVfYmVhbS5waXBlbGluZSBpbXBvcnQgUFRyYW5zZm9ybU92ZXJyaWRlCgogIGNsYXNzIFJlYWRGcm9tUHViU3ViT3ZlcnJpZGUoUFRyYW5zZm9ybU92ZXJyaWRlKToKICAgIGRlZiBtYXRjaGVzKHNlbGYsIGFwcGxpZWRfcHRyYW5zZm9ybSk6CiAgICAgIHJldHVybiBpc2luc3RhbmNlKGFwcGxpZWRfcHRyYW5zZm9ybS50cmFuc2Zvcm0sCiAgICAgICAgICAgICAgICAgICAgICAgIGJlYW1fcHVic3ViLlJlYWRGcm9tUHViU3ViKQoKICAgIGRlZiBnZXRfcmVwbGFjZW1lbnRfdHJhbnNmb3JtKHNlbGYsIHRyYW5zZm9ybSk6CiAgICAgIGlmIG5vdCBwaXBlbGluZV9vcHRpb25zLnZpZXdfYXMoU3RhbmRhcmRPcHRpb25zKS5zdHJlYW1pbmc6CiAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdQdWJTdWIgSS9PIGlzIG9ubHkgYXZhaWxhYmxlIGluIHN0cmVhbWluZyBtb2RlICcKICAgICAgICAgICAgICAgICAgICAgICAgJyh1c2UgdGhlIC0tc3RyZWFtaW5nIGZsYWcpLicpCiAgICAgIHJldHVybiBfRGlyZWN0UmVhZEZyb21QdWJTdWIodHJhbnNmb3JtLl9zb3VyY2UpCgogIGNsYXNzIFdyaXRlVG9QdWJTdWJPdmVycmlkZShQVHJhbnNmb3JtT3ZlcnJpZGUpOgogICAgZGVmIG1hdGNoZXMoc2VsZiwgYXBwbGllZF9wdHJhbnNmb3JtKToKICAgICAgcmV0dXJuIGlzaW5zdGFuY2UoCiAgICAgICAgICBhcHBsaWVkX3B0cmFuc2Zvcm0udHJhbnNmb3JtLAogICAgICAgICAgKGJlYW1fcHVic3ViLldyaXRlVG9QdWJTdWIsIGJlYW1fcHVic3ViLl9Xcml0ZVN0cmluZ3NUb1B1YlN1YikpCgogICAgZGVmIGdldF9yZXBsYWNlbWVudF90cmFuc2Zvcm0oc2VsZiwgdHJhbnNmb3JtKToKICAgICAgaWYgbm90IHBpcGVsaW5lX29wdGlvbnMudmlld19hcyhTdGFuZGFyZE9wdGlvbnMpLnN0cmVhbWluZzoKICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1B1YlN1YiBJL08gaXMgb25seSBhdmFpbGFibGUgaW4gc3RyZWFtaW5nIG1vZGUgJwogICAgICAgICAgICAgICAgICAgICAgICAnKHVzZSB0aGUgLS1zdHJlYW1pbmcgZmxhZykuJykKICAgICAgcmV0dXJuIGJlYW0uUGFyRG8oX0RpcmVjdFdyaXRlVG9QdWJTdWJGbih0cmFuc2Zvcm0uX3NpbmspKQoKICByZXR1cm4gW1JlYWRGcm9tUHViU3ViT3ZlcnJpZGUoKSwgV3JpdGVUb1B1YlN1Yk92ZXJyaWRlKCldCgoKY2xhc3MgQnVuZGxlQmFzZWREaXJlY3RSdW5uZXIoUGlwZWxpbmVSdW5uZXIpOgogICIiIkV4ZWN1dGVzIGEgc2luZ2xlIHBpcGVsaW5lIG9uIHRoZSBsb2NhbCBtYWNoaW5lLiIiIgoKICBkZWYgcnVuX3BpcGVsaW5lKHNlbGYsIHBpcGVsaW5lLCBvcHRpb25zKToKICAgICIiIkV4ZWN1dGUgdGhlIGVudGlyZSBwaXBlbGluZSBhbmQgcmV0dXJucyBhbiBEaXJlY3RQaXBlbGluZVJlc3VsdC4iIiIKCiAgICAjIFRPRE86IE1vdmUgaW1wb3J0cyB0byB0b3AuIFBpcGVsaW5lIDwtPiBSdW5uZXIgZGVwZW5kZW5jeSBjYXVzZSBwcm9ibGVtcwogICAgIyB3aXRoIHJlc29sdmluZyBpbXBvcnRzIHdoZW4gdGhleSBhcmUgYXQgdG9wLgogICAgIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LXBvc2l0aW9uCiAgICBmcm9tIGFwYWNoZV9iZWFtLnBpcGVsaW5lIGltcG9ydCBQaXBlbGluZVZpc2l0b3IKICAgIGZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuY29uc3VtZXJfdHJhY2tpbmdfcGlwZWxpbmVfdmlzaXRvciBpbXBvcnQgXAogICAgICBDb25zdW1lclRyYWNraW5nUGlwZWxpbmVWaXNpdG9yCiAgICBmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dCBpbXBvcnQgRXZhbHVhdGlvbkNvbnRleHQKICAgIGZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXhlY3V0b3IgaW1wb3J0IEV4ZWN1dG9yCiAgICBmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnRyYW5zZm9ybV9ldmFsdWF0b3IgaW1wb3J0IFwKICAgICAgVHJhbnNmb3JtRXZhbHVhdG9yUmVnaXN0cnkKICAgIGZyb20gYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbSBpbXBvcnQgVGVzdFN0cmVhbQoKICAgICMgUGVyZm9ybWluZyBjb25maWd1cmVkIFBUcmFuc2Zvcm0gb3ZlcnJpZGVzLgogICAgcGlwZWxpbmUucmVwbGFjZV9hbGwoX2dldF90cmFuc2Zvcm1fb3ZlcnJpZGVzKG9wdGlvbnMpKQoKICAgICMgSWYgdGhlIFRlc3RTdHJlYW0gSS9PIGlzIHVzZWQsIHVzZSBhIG1vY2sgdGVzdCBjbG9jay4KICAgIGNsYXNzIF9UZXN0U3RyZWFtVXNhZ2VWaXNpdG9yKFBpcGVsaW5lVmlzaXRvcik6CiAgICAgICIiIlZpc2l0b3IgZGV0ZXJtaW5pbmcgd2hldGhlciBhIFBpcGVsaW5lIHVzZXMgYSBUZXN0U3RyZWFtLiIiIgoKICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIHNlbGYudXNlc190ZXN0X3N0cmVhbSA9IEZhbHNlCgogICAgICBkZWYgdmlzaXRfdHJhbnNmb3JtKHNlbGYsIGFwcGxpZWRfcHRyYW5zZm9ybSk6CiAgICAgICAgaWYgaXNpbnN0YW5jZShhcHBsaWVkX3B0cmFuc2Zvcm0udHJhbnNmb3JtLCBUZXN0U3RyZWFtKToKICAgICAgICAgIHNlbGYudXNlc190ZXN0X3N0cmVhbSA9IFRydWUKCiAgICB2aXNpdG9yID0gX1Rlc3RTdHJlYW1Vc2FnZVZpc2l0b3IoKQogICAgcGlwZWxpbmUudmlzaXQodmlzaXRvcikKICAgIGNsb2NrID0gVGVzdENsb2NrKCkgaWYgdmlzaXRvci51c2VzX3Rlc3Rfc3RyZWFtIGVsc2UgUmVhbENsb2NrKCkKCiAgICAjIFRPRE8oQkVBTS00Mjc0KTogQ2lyY3VsYXIgaW1wb3J0IHJ1bm5lcnMtbWV0cmljcy4gUmVxdWlyZXMgcmVmYWN0b3JpbmcuCiAgICBmcm9tIGFwYWNoZV9iZWFtLm1ldHJpY3MuZXhlY3V0aW9uIGltcG9ydCBNZXRyaWNzRW52aXJvbm1lbnQKICAgIE1ldHJpY3NFbnZpcm9ubWVudC5zZXRfbWV0cmljc19zdXBwb3J0ZWQoVHJ1ZSkKICAgIGxvZ2dpbmcuaW5mbygnUnVubmluZyBwaXBlbGluZSB3aXRoIERpcmVjdFJ1bm5lci4nKQogICAgc2VsZi5jb25zdW1lcl90cmFja2luZ192aXNpdG9yID0gQ29uc3VtZXJUcmFja2luZ1BpcGVsaW5lVmlzaXRvcigpCiAgICBwaXBlbGluZS52aXNpdChzZWxmLmNvbnN1bWVyX3RyYWNraW5nX3Zpc2l0b3IpCgogICAgZXZhbHVhdGlvbl9jb250ZXh0ID0gRXZhbHVhdGlvbkNvbnRleHQoCiAgICAgICAgb3B0aW9ucywKICAgICAgICBCdW5kbGVGYWN0b3J5KHN0YWNrZWQ9b3B0aW9ucy52aWV3X2FzKERpcmVjdE9wdGlvbnMpCiAgICAgICAgICAgICAgICAgICAgICAuZGlyZWN0X3J1bm5lcl91c2Vfc3RhY2tlZF9idW5kbGUpLAogICAgICAgIHNlbGYuY29uc3VtZXJfdHJhY2tpbmdfdmlzaXRvci5yb290X3RyYW5zZm9ybXMsCiAgICAgICAgc2VsZi5jb25zdW1lcl90cmFja2luZ192aXNpdG9yLnZhbHVlX3RvX2NvbnN1bWVycywKICAgICAgICBzZWxmLmNvbnN1bWVyX3RyYWNraW5nX3Zpc2l0b3Iuc3RlcF9uYW1lcywKICAgICAgICBzZWxmLmNvbnN1bWVyX3RyYWNraW5nX3Zpc2l0b3Iudmlld3MsCiAgICAgICAgY2xvY2spCgogICAgZXhlY3V0b3IgPSBFeGVjdXRvcihzZWxmLmNvbnN1bWVyX3RyYWNraW5nX3Zpc2l0b3IudmFsdWVfdG9fY29uc3VtZXJzLAogICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1FdmFsdWF0b3JSZWdpc3RyeShldmFsdWF0aW9uX2NvbnRleHQpLAogICAgICAgICAgICAgICAgICAgICAgICBldmFsdWF0aW9uX2NvbnRleHQpCiAgICAjIERpcmVjdFJ1bm5lciBkb2VzIG5vdCBzdXBwb3J0IGluamVjdGluZwogICAgIyBQaXBlbGluZU9wdGlvbnMgdmFsdWVzIGF0IHJ1bnRpbWUKICAgIFJ1bnRpbWVWYWx1ZVByb3ZpZGVyLnNldF9ydW50aW1lX29wdGlvbnMoe30pCiAgICAjIFN0YXJ0IHRoZSBleGVjdXRvci4gVGhpcyBpcyBhIG5vbi1ibG9ja2luZyBjYWxsLCBpdCB3aWxsIHN0YXJ0IHRoZQogICAgIyBleGVjdXRpb24gaW4gYmFja2dyb3VuZCB0aHJlYWRzIGFuZCByZXR1cm4uCiAgICBleGVjdXRvci5zdGFydChzZWxmLmNvbnN1bWVyX3RyYWNraW5nX3Zpc2l0b3Iucm9vdF90cmFuc2Zvcm1zKQogICAgcmVzdWx0ID0gRGlyZWN0UGlwZWxpbmVSZXN1bHQoZXhlY3V0b3IsIGV2YWx1YXRpb25fY29udGV4dCkKCiAgICByZXR1cm4gcmVzdWx0CgoKIyBVc2UgdGhlIFN3aXRjaGluZ0RpcmVjdFJ1bm5lciBhcyB0aGUgZGVmYXVsdC4KRGlyZWN0UnVubmVyID0gU3dpdGNoaW5nRGlyZWN0UnVubmVyCgoKY2xhc3MgRGlyZWN0UGlwZWxpbmVSZXN1bHQoUGlwZWxpbmVSZXN1bHQpOgogICIiIkEgRGlyZWN0UGlwZWxpbmVSZXN1bHQgcHJvdmlkZXMgYWNjZXNzIHRvIGluZm8gYWJvdXQgYSBwaXBlbGluZS4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGV4ZWN1dG9yLCBldmFsdWF0aW9uX2NvbnRleHQpOgogICAgc3VwZXIoRGlyZWN0UGlwZWxpbmVSZXN1bHQsIHNlbGYpLl9faW5pdF9fKFBpcGVsaW5lU3RhdGUuUlVOTklORykKICAgIHNlbGYuX2V4ZWN1dG9yID0gZXhlY3V0b3IKICAgIHNlbGYuX2V2YWx1YXRpb25fY29udGV4dCA9IGV2YWx1YXRpb25fY29udGV4dAoKICBkZWYgX19kZWxfXyhzZWxmKToKICAgIGlmIHNlbGYuX3N0YXRlID09IFBpcGVsaW5lU3RhdGUuUlVOTklORzoKICAgICAgbG9nZ2luZy53YXJuaW5nKAogICAgICAgICAgJ1RoZSBEaXJlY3RQaXBlbGluZVJlc3VsdCBpcyBiZWluZyBnYXJiYWdlLWNvbGxlY3RlZCB3aGlsZSB0aGUgJwogICAgICAgICAgJ0RpcmVjdFJ1bm5lciBpcyBzdGlsbCBydW5uaW5nIHRoZSBjb3JyZXNwb25kaW5nIHBpcGVsaW5lLiBUaGlzIG1heSAnCiAgICAgICAgICAnbGVhZCB0byBpbmNvbXBsZXRlIGV4ZWN1dGlvbiBvZiB0aGUgcGlwZWxpbmUgaWYgdGhlIG1haW4gdGhyZWFkICcKICAgICAgICAgICdleGl0cyBiZWZvcmUgcGlwZWxpbmUgY29tcGxldGlvbi4gQ29uc2lkZXIgdXNpbmcgJwogICAgICAgICAgJ3Jlc3VsdC53YWl0X3VudGlsX2ZpbmlzaCgpIHRvIHdhaXQgZm9yIGNvbXBsZXRpb24gb2YgcGlwZWxpbmUgJwogICAgICAgICAgJ2V4ZWN1dGlvbi4nKQoKICBkZWYgd2FpdF91bnRpbF9maW5pc2goc2VsZiwgZHVyYXRpb249Tm9uZSk6CiAgICBpZiBub3QgUGlwZWxpbmVTdGF0ZS5pc190ZXJtaW5hbChzZWxmLnN0YXRlKToKICAgICAgaWYgZHVyYXRpb246CiAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigKICAgICAgICAgICAgJ0RpcmVjdFJ1bm5lciBkb2VzIG5vdCBzdXBwb3J0IGR1cmF0aW9uIGFyZ3VtZW50LicpCiAgICAgIHRyeToKICAgICAgICBzZWxmLl9leGVjdXRvci5hd2FpdF9jb21wbGV0aW9uKCkKICAgICAgICBzZWxmLl9zdGF0ZSA9IFBpcGVsaW5lU3RhdGUuRE9ORQogICAgICBleGNlcHQ6ICAjIHB5bGludDogZGlzYWJsZT1icm9hZC1leGNlcHQKICAgICAgICBzZWxmLl9zdGF0ZSA9IFBpcGVsaW5lU3RhdGUuRkFJTEVECiAgICAgICAgcmFpc2UKICAgIHJldHVybiBzZWxmLl9zdGF0ZQoKICBkZWYgYWdncmVnYXRlZF92YWx1ZXMoc2VsZiwgYWdncmVnYXRvcl9vcl9uYW1lKToKICAgIHJldHVybiBzZWxmLl9ldmFsdWF0aW9uX2NvbnRleHQuZ2V0X2FnZ3JlZ2F0b3JfdmFsdWVzKGFnZ3JlZ2F0b3Jfb3JfbmFtZSkKCiAgZGVmIG1ldHJpY3Moc2VsZik6CiAgICByZXR1cm4gc2VsZi5fZXZhbHVhdGlvbl9jb250ZXh0Lm1ldHJpY3MoKQoKICBkZWYgY2FuY2VsKHNlbGYpOgogICAgIiIiU2h1dHMgZG93biBwaXBlbGluZSB3b3JrZXJzLgoKICAgIEZvciB0ZXN0aW5nIHVzZSBvbmx5LiBEb2VzIG5vdCBwcm9wZXJseSB3YWl0IGZvciBwaXBlbGluZSB3b3JrZXJzIHRvIHNodXQKICAgIGRvd24uCiAgICAiIiIKICAgIHNlbGYuX3N0YXRlID0gUGlwZWxpbmVTdGF0ZS5DQU5DRUxMSU5HCiAgICBzZWxmLl9leGVjdXRvci5zaHV0ZG93bigpCiAgICBzZWxmLl9zdGF0ZSA9IFBpcGVsaW5lU3RhdGUuQ0FOQ0VMTEVECn1yuIIAAChYFQAAAFN3aXRjaGluZ0RpcmVjdFJ1bm5lclgFAAAAY2xhc3NLPkuMh1gcAAAAX0RpcmVjdFJlYWRGcm9tUHViU3ViLmV4cGFuZFgDAAAAZGVmTQYBTQkBh1gzAAAAX1N0cmVhbWluZ0dyb3VwQWxzb0J5V2luZG93LnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyWAMAAABkZWZLqUuuh1gbAAAARGlyZWN0UGlwZWxpbmVSZXN1bHQuY2FuY2VsWAMAAABkZWZNxgFNzwGHWD0AAABTd2l0Y2hpbmdEaXJlY3RSdW5uZXIucnVuX3BpcGVsaW5lLl9GbkFwaVJ1bm5lclN1cHBvcnRWaXNpdG9yWAUAAABjbGFzc0tUS3mHWE0AAABTd2l0Y2hpbmdEaXJlY3RSdW5uZXIucnVuX3BpcGVsaW5lLl9GbkFwaVJ1bm5lclN1cHBvcnRWaXNpdG9yLnZpc2l0X3RyYW5zZm9ybVgDAAAAZGVmS1xLeYdYJgAAAERpcmVjdFBpcGVsaW5lUmVzdWx0LndhaXRfdW50aWxfZmluaXNoWAMAAABkZWZNswFNvwGHWDYAAABfZ2V0X3RyYW5zZm9ybV9vdmVycmlkZXMuQ29tYmluZVBlcktleU92ZXJyaWRlLm1hdGNoZXNYAwAAAGRlZkvDS8aHWE4AAABfZ2V0X3RyYW5zZm9ybV9vdmVycmlkZXMuU3RyZWFtaW5nR3JvdXBCeUtleU92ZXJyaWRlLmdldF9yZXBsYWNlbWVudF90cmFuc2Zvcm1YAwAAAGRlZkvWS9qHWCMAAABfRGlyZWN0V3JpdGVUb1B1YlN1YkZuLnN0YXJ0X2J1bmRsZVgDAAAAZGVmTR4BTSABh1g1AAAAX1N0cmVhbWluZ0dyb3VwQWxzb0J5V2luZG93LmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXJYAwAAAGRlZkuvS7OHWCQAAABfRGlyZWN0V3JpdGVUb1B1YlN1YkZuLmZpbmlzaF9idW5kbGVYAwAAAGRlZk0mAU0oAYdYVQAAAF9nZXRfdHJhbnNmb3JtX292ZXJyaWRlcy5TdHJlYW1pbmdHcm91cEFsc29CeVdpbmRvd092ZXJyaWRlLmdldF9yZXBsYWNlbWVudF90cmFuc2Zvcm1YAwAAAGRlZkvjS+eHWCIAAABTd2l0Y2hpbmdEaXJlY3RSdW5uZXIucnVuX3BpcGVsaW5lWAMAAABkZWZLR0uMh1hMAAAAQnVuZGxlQmFzZWREaXJlY3RSdW5uZXIucnVuX3BpcGVsaW5lLl9UZXN0U3RyZWFtVXNhZ2VWaXNpdG9yLnZpc2l0X3RyYW5zZm9ybVgDAAAAZGVmTXYBTXkBh1gcAAAARGlyZWN0UGlwZWxpbmVSZXN1bHQubWV0cmljc1gDAAAAZGVmTcMBTcUBh1gjAAAAX0RpcmVjdFJlYWRGcm9tUHViU3ViLmdldF93aW5kb3dpbmdYAwAAAGRlZk0DAU0FAYdYMAAAAF9TdHJlYW1pbmdHcm91cEJ5S2V5T25seS50b19ydW5uZXJfYXBpX3BhcmFtZXRlclgDAAAAZGVmS5pLnIdYHgAAAF9EaXJlY3RSZWFkRnJvbVB1YlN1Yi5fX2luaXRfX1gDAAAAZGVmS/xL/odYGAAAAF9nZXRfdHJhbnNmb3JtX292ZXJyaWRlc1gDAAAAZGVmS7VL+YdYGwAAAF9TdHJlYW1pbmdHcm91cEFsc29CeVdpbmRvd1gFAAAAY2xhc3NLokuzh1g1AAAAX2dldF9wdWJzdWJfdHJhbnNmb3JtX292ZXJyaWRlcy5Xcml0ZVRvUHViU3ViT3ZlcnJpZGVYBQAAAGNsYXNzTUsBTVYBh1gWAAAAX0RpcmVjdFdyaXRlVG9QdWJTdWJGblgFAAAAY2xhc3NNCwFNOgGHWC4AAABfZ2V0X3RyYW5zZm9ybV9vdmVycmlkZXMuQ29tYmluZVBlcktleU92ZXJyaWRlWAUAAABjbGFzc0vCS9CHWEgAAABfZ2V0X3RyYW5zZm9ybV9vdmVycmlkZXMuQ29tYmluZVBlcktleU92ZXJyaWRlLmdldF9yZXBsYWNlbWVudF90cmFuc2Zvcm1YAwAAAGRlZkvHS9CHWEUAAABCdW5kbGVCYXNlZERpcmVjdFJ1bm5lci5ydW5fcGlwZWxpbmUuX1Rlc3RTdHJlYW1Vc2FnZVZpc2l0b3IuX19pbml0X19YAwAAAGRlZk1zAU11AYdYJgAAAERpcmVjdFBpcGVsaW5lUmVzdWx0LmFnZ3JlZ2F0ZWRfdmFsdWVzWAMAAABkZWZNwAFNwgGHWB0AAABfRGlyZWN0V3JpdGVUb1B1YlN1YkZuLl9mbHVzaFgDAAAAZGVmTSkBTToBh1g0AAAAX2dldF90cmFuc2Zvcm1fb3ZlcnJpZGVzLlN0cmVhbWluZ0dyb3VwQnlLZXlPdmVycmlkZVgFAAAAY2xhc3NL0Uvah1gXAAAAQnVuZGxlQmFzZWREaXJlY3RSdW5uZXJYBQAAAGNsYXNzTVoBTZsBh1hEAAAAU3dpdGNoaW5nRGlyZWN0UnVubmVyLnJ1bl9waXBlbGluZS5fRm5BcGlSdW5uZXJTdXBwb3J0VmlzaXRvci5hY2NlcHRYAwAAAGRlZktXS1uHWDIAAABfU3RyZWFtaW5nR3JvdXBCeUtleU9ubHkuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlclgDAAAAZGVmS51LoIdYKQAAAF9EaXJlY3RSZWFkRnJvbVB1YlN1Yi5faW5mZXJfb3V0cHV0X2NvZGVyWAMAAABkZWZL/00CAYdYHAAAAERpcmVjdFBpcGVsaW5lUmVzdWx0Ll9fZGVsX19YAwAAAGRlZk2pAU2yAYdYPQAAAF9nZXRfcHVic3ViX3RyYW5zZm9ybV9vdmVycmlkZXMuV3JpdGVUb1B1YlN1Yk92ZXJyaWRlLm1hdGNoZXNYAwAAAGRlZk1MAU1QAYdYFQAAAF9EaXJlY3RSZWFkRnJvbVB1YlN1YlgFAAAAY2xhc3NL+00JAYdYGAAAAF9TdHJlYW1pbmdHcm91cEJ5S2V5T25seVgFAAAAY2xhc3NLk0ugh1gUAAAARGlyZWN0UGlwZWxpbmVSZXN1bHRYBQAAAGNsYXNzTaEBTc8Bh1g+AAAAX2dldF9wdWJzdWJfdHJhbnNmb3JtX292ZXJyaWRlcy5SZWFkRnJvbVB1YlN1Yk92ZXJyaWRlLm1hdGNoZXNYAwAAAGRlZk1BAU1EAYdYOwAAAF9nZXRfdHJhbnNmb3JtX292ZXJyaWRlcy5TdHJlYW1pbmdHcm91cEFsc29CeVdpbmRvd092ZXJyaWRlWAUAAABjbGFzc0vbS+eHWCQAAABCdW5kbGVCYXNlZERpcmVjdFJ1bm5lci5ydW5fcGlwZWxpbmVYAwAAAGRlZk1dAU2bAYdYHQAAAERpcmVjdFBpcGVsaW5lUmVzdWx0Ll9faW5pdF9fWAMAAABkZWZNpAFNqAGHWB4AAABfRGlyZWN0V3JpdGVUb1B1YlN1YkZuLnByb2Nlc3NYAwAAAGRlZk0hAU0lAYdYQwAAAF9nZXRfdHJhbnNmb3JtX292ZXJyaWRlcy5TdHJlYW1pbmdHcm91cEFsc29CeVdpbmRvd092ZXJyaWRlLm1hdGNoZXNYAwAAAGRlZkvcS+KHWFAAAABfZ2V0X3B1YnN1Yl90cmFuc2Zvcm1fb3ZlcnJpZGVzLlJlYWRGcm9tUHViU3ViT3ZlcnJpZGUuZ2V0X3JlcGxhY2VtZW50X3RyYW5zZm9ybVgDAAAAZGVmTUUBTUoBh1g8AAAAX2dldF90cmFuc2Zvcm1fb3ZlcnJpZGVzLlN0cmVhbWluZ0dyb3VwQnlLZXlPdmVycmlkZS5tYXRjaGVzWAMAAABkZWZL0kvVh1gfAAAAX0RpcmVjdFdyaXRlVG9QdWJTdWJGbi5fX2luaXRfX1gDAAAAZGVmTQ8BTR0Bh1g2AAAAX2dldF9wdWJzdWJfdHJhbnNmb3JtX292ZXJyaWRlcy5SZWFkRnJvbVB1YlN1Yk92ZXJyaWRlWAUAAABjbGFzc01AAU1KAYdYTwAAAF9nZXRfcHVic3ViX3RyYW5zZm9ybV9vdmVycmlkZXMuV3JpdGVUb1B1YlN1Yk92ZXJyaWRlLmdldF9yZXBsYWNlbWVudF90cmFuc2Zvcm1YAwAAAGRlZk1RAU1WAYdYPAAAAEJ1bmRsZUJhc2VkRGlyZWN0UnVubmVyLnJ1bl9waXBlbGluZS5fVGVzdFN0cmVhbVVzYWdlVmlzaXRvclgFAAAAY2xhc3NNcAFNeQGHWB8AAABfZ2V0X3B1YnN1Yl90cmFuc2Zvcm1fb3ZlcnJpZGVzWAMAAABkZWZNPAFNWAGHdX1yuYIAAChYFwAAAEJ1bmRsZUJhc2VkRGlyZWN0UnVubmVyatBkAABYFQAAAFN3aXRjaGluZ0RpcmVjdFJ1bm5lcmrQZAAAWCIAAABTd2l0Y2hpbmdEaXJlY3RSdW5uZXIucnVuX3BpcGVsaW5latBkAABYJAAAAEJ1bmRsZUJhc2VkRGlyZWN0UnVubmVyLnJ1bl9waXBlbGluZWrQZAAAdWp9aQAAWCgAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfcnVubmVycrqCAACFgXK7ggAAfXK8ggAAYnRVJGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyhYLXkAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiUGlwZWxpbmUgb3B0aW9ucyBvYnRhaW5lZCBmcm9tIGNvbW1hbmQgbGluZSBwYXJzaW5nLiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBhcmdwYXJzZQpmcm9tIGJ1aWx0aW5zIGltcG9ydCBsaXN0CmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdAoKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyIGltcG9ydCBSdW50aW1lVmFsdWVQcm92aWRlcgpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIgaW1wb3J0IFN0YXRpY1ZhbHVlUHJvdmlkZXIKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyIGltcG9ydCBWYWx1ZVByb3ZpZGVyCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5IGltcG9ydCBIYXNEaXNwbGF5RGF0YQoKX19hbGxfXyA9IFsKICAgICdQaXBlbGluZU9wdGlvbnMnLAogICAgJ1N0YW5kYXJkT3B0aW9ucycsCiAgICAnVHlwZU9wdGlvbnMnLAogICAgJ0RpcmVjdE9wdGlvbnMnLAogICAgJ0dvb2dsZUNsb3VkT3B0aW9ucycsCiAgICAnSGFkb29wRmlsZVN5c3RlbU9wdGlvbnMnLAogICAgJ1dvcmtlck9wdGlvbnMnLAogICAgJ0RlYnVnT3B0aW9ucycsCiAgICAnUHJvZmlsaW5nT3B0aW9ucycsCiAgICAnU2V0dXBPcHRpb25zJywKICAgICdUZXN0T3B0aW9ucycsCiAgICBdCgoKZGVmIF9zdGF0aWNfdmFsdWVfcHJvdmlkZXJfb2YodmFsdWVfdHlwZSk6CiAgIiIiIkhlbHBlciBmdW5jdGlvbiB0byBwbHVnIGEgVmFsdWVQcm92aWRlciBpbnRvIGFyZ3BhcnNlLgoKICBBcmdzOgogICAgdmFsdWVfdHlwZTogdGhlIHR5cGUgb2YgdGhlIHZhbHVlLiBTaW5jZSB0aGUgdHlwZSBwYXJhbSBvZiBhcmdwYXJzZSdzCiAgICAgICAgICAgICAgICBhZGRfYXJndW1lbnQgd2lsbCBhbHdheXMgYmUgVmFsdWVQcm92aWRlciwgd2UgbmVlZCB0bwogICAgICAgICAgICAgICAgcHJlc2VydmUgdGhlIHR5cGUgb2YgdGhlIGFjdHVhbCB2YWx1ZS4KICBSZXR1cm5zOgogICAgQSBwYXJ0aWFsbHkgY29uc3RydWN0ZWQgU3RhdGljVmFsdWVQcm92aWRlciBpbiB0aGUgZm9ybSBvZiBhIGZ1bmN0aW9uLgoKICAiIiIKICBkZWYgX2YodmFsdWUpOgogICAgX2YuX19uYW1lX18gPSB2YWx1ZV90eXBlLl9fbmFtZV9fCiAgICByZXR1cm4gU3RhdGljVmFsdWVQcm92aWRlcih2YWx1ZV90eXBlLCB2YWx1ZSkKICByZXR1cm4gX2YKCgpjbGFzcyBfQmVhbUFyZ3VtZW50UGFyc2VyKGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKToKICAiIiJBbiBBcmd1bWVudFBhcnNlciB0aGF0IHN1cHBvcnRzIFZhbHVlUHJvdmlkZXIgb3B0aW9ucy4KCiAgRXhhbXBsZSBVc2FnZTo6CgogICAgY2xhc3MgVGVtcGxhdGVVc2VyT3B0aW9ucyhQaXBlbGluZU9wdGlvbnMpOgogICAgICBAY2xhc3NtZXRob2QKCiAgICAgIGRlZiBfYWRkX2FyZ3BhcnNlX2FyZ3MoY2xzLCBwYXJzZXIpOgogICAgICAgIHBhcnNlci5hZGRfdmFsdWVfcHJvdmlkZXJfYXJndW1lbnQoJy0tdnAtYXJnMScsIGRlZmF1bHQ9J3N0YXJ0JykKICAgICAgICBwYXJzZXIuYWRkX3ZhbHVlX3Byb3ZpZGVyX2FyZ3VtZW50KCctLXZwLWFyZzInKQogICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tbm9uLXZwLWFyZycpCgogICIiIgogIGRlZiBhZGRfdmFsdWVfcHJvdmlkZXJfYXJndW1lbnQoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICIiIlZhbHVlUHJvdmlkZXIgYXJndW1lbnRzIGNhbiBiZSBlaXRoZXIgb2YgdHlwZSBrZXl3b3JkIG9yIHBvc2l0aW9uYWwuCiAgICBBdCBydW50aW1lLCBldmVuIHBvc2l0aW9uYWwgYXJndW1lbnRzIHdpbGwgbmVlZCB0byBiZSBzdXBwbGllZCBpbiB0aGUKICAgIGtleS92YWx1ZSBmb3JtLgogICAgIiIiCiAgICAjIEV4dHJhY3QgdGhlIG9wdGlvbiBuYW1lIGZyb20gcG9zaXRpb25hbCBhcmd1bWVudCBbJ3Bvc19hcmcnXQogICAgYXNzZXJ0IGFyZ3MgIT0gKCkgYW5kIGxlbihhcmdzWzBdKSA+PSAxCiAgICBpZiBhcmdzWzBdWzBdICE9ICctJzoKICAgICAgb3B0aW9uX25hbWUgPSBhcmdzWzBdCiAgICAgIGlmIGt3YXJncy5nZXQoJ25hcmdzJykgaXMgTm9uZTogICMgbWFrZSB0aGVtIG9wdGlvbmFsbHkgdGVtcGxhdGVkCiAgICAgICAga3dhcmdzWyduYXJncyddID0gJz8nCiAgICBlbHNlOgogICAgICAjIG9yIGtleXdvcmQgYXJndW1lbnRzIGxpa2UgWy0ta3dfYXJnLCAtaywgLXddIG9yIFstLWt3LWFyZ10KICAgICAgb3B0aW9uX25hbWUgPSBbaS5yZXBsYWNlKCctLScsICcnKSBmb3IgaSBpbiBhcmdzIGlmIGlbOjJdID09ICctLSddWzBdCgogICAgIyByZWFzc2lnbiB0aGUgdHlwZSB0byBtYWtlIHJvb20gZm9yIHVzaW5nCiAgICAjIFN0YXRpY1ZhbHVlUHJvdmlkZXIgYXMgdGhlIHR5cGUgZm9yIGFkZF9hcmd1bWVudAogICAgdmFsdWVfdHlwZSA9IGt3YXJncy5nZXQoJ3R5cGUnKSBvciBzdHIKICAgIGt3YXJnc1sndHlwZSddID0gX3N0YXRpY192YWx1ZV9wcm92aWRlcl9vZih2YWx1ZV90eXBlKQoKICAgICMgcmVhc3NpZ24gZGVmYXVsdCB0byBkZWZhdWx0X3ZhbHVlIHRvIG1ha2Ugcm9vbSBmb3IgdXNpbmcKICAgICMgUnVudGltZVZhbHVlUHJvdmlkZXIgYXMgdGhlIGRlZmF1bHQgZm9yIGFkZF9hcmd1bWVudAogICAgZGVmYXVsdF92YWx1ZSA9IGt3YXJncy5nZXQoJ2RlZmF1bHQnKQogICAga3dhcmdzWydkZWZhdWx0J10gPSBSdW50aW1lVmFsdWVQcm92aWRlcigKICAgICAgICBvcHRpb25fbmFtZT1vcHRpb25fbmFtZSwKICAgICAgICB2YWx1ZV90eXBlPXZhbHVlX3R5cGUsCiAgICAgICAgZGVmYXVsdF92YWx1ZT1kZWZhdWx0X3ZhbHVlCiAgICApCgogICAgIyBoYXZlIGFkZF9hcmd1bWVudCBkbyBtb3N0IG9mIHRoZSB3b3JrCiAgICBzZWxmLmFkZF9hcmd1bWVudCgqYXJncywgKiprd2FyZ3MpCgogICMgVGhlIGFyZ3BhcnNlIHBhY2thZ2UgYnkgZGVmYXVsdCB0cmllcyB0byBhdXRvY29tcGxldGUgb3B0aW9uIG5hbWVzLiBUaGlzCiAgIyByZXN1bHRzIGluIGFuICJhbWJpZ3VvdXMgb3B0aW9uIiBlcnJvciBmcm9tIGFyZ3BhcnNlIHdoZW4gYW4gdW5rbm93biBvcHRpb24KICAjIG1hdGNoaW5nIG11bHRpcGxlIGtub3duIG9uZXMgYXJlIHVzZWQuIFRoaXMgc3VwcHJlc3NlcyB0aGF0IGJlaGF2aW9yLgogIGRlZiBlcnJvcihzZWxmLCBtZXNzYWdlKToKICAgIGlmIG1lc3NhZ2Uuc3RhcnRzd2l0aCgnYW1iaWd1b3VzIG9wdGlvbjogJyk6CiAgICAgIHJldHVybgogICAgc3VwZXIoX0JlYW1Bcmd1bWVudFBhcnNlciwgc2VsZikuZXJyb3IobWVzc2FnZSkKCgpjbGFzcyBQaXBlbGluZU9wdGlvbnMoSGFzRGlzcGxheURhdGEpOgogICIiIlBpcGVsaW5lIG9wdGlvbnMgY2xhc3MgdXNlZCBhcyBjb250YWluZXIgZm9yIGNvbW1hbmQgbGluZSBvcHRpb25zLgoKICBUaGUgY2xhc3MgaXMgZXNzZW50aWFsbHkgYSB3cmFwcGVyIG92ZXIgdGhlIHN0YW5kYXJkIGFyZ3BhcnNlIFB5dGhvbiBtb2R1bGUKICAoc2VlIGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hcmdwYXJzZS5odG1sKS4gIFRvIGRlZmluZSBvbmUgb3B0aW9uCiAgb3IgYSBncm91cCBvZiBvcHRpb25zIHlvdSBzdWJjbGFzcyBmcm9tIFBpcGVsaW5lT3B0aW9uczo6CgogICAgY2xhc3MgWHl6T3B0aW9ucyhQaXBlbGluZU9wdGlvbnMpOgoKICAgICAgQGNsYXNzbWV0aG9kCiAgICAgIGRlZiBfYWRkX2FyZ3BhcnNlX2FyZ3MoY2xzLCBwYXJzZXIpOgogICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tYWJjJywgZGVmYXVsdD0nc3RhcnQnKQogICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0teHl6JywgZGVmYXVsdD0nZW5kJykKCiAgVGhlIGFyZ3VtZW50cyBmb3IgdGhlIGFkZF9hcmd1bWVudCgpIG1ldGhvZCBhcmUgZXhhY3RseSB0aGUgb25lcwogIGRlc2NyaWJlZCBpbiB0aGUgYXJncGFyc2UgcHVibGljIGRvY3VtZW50YXRpb24uCgogIFBpcGVsaW5lIG9iamVjdHMgcmVxdWlyZSBhbiBvcHRpb25zIG9iamVjdCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCiAgVGhpcyBpcyBvYnRhaW5lZCBzaW1wbHkgYnkgaW5pdGlhbGl6aW5nIGFuIG9wdGlvbnMgY2xhc3MgYXMgZGVmaW5lZCBhYm92ZTo6CgogICAgcCA9IFBpcGVsaW5lKG9wdGlvbnM9WHl6T3B0aW9ucygpKQogICAgaWYgcC5vcHRpb25zLnh5eiA9PSAnZW5kJzoKICAgICAgcmFpc2UgVmFsdWVFcnJvcignT3B0aW9uIHh5eiBoYXMgYW4gaW52YWxpZCB2YWx1ZS4nKQoKICBCeSBkZWZhdWx0IHRoZSBvcHRpb25zIGNsYXNzZXMgd2lsbCB1c2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyB0byBpbml0aWFsaXplCiAgdGhlIG9wdGlvbnMuCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIGZsYWdzPU5vbmUsICoqa3dhcmdzKToKICAgICIiIkluaXRpYWxpemUgYW4gb3B0aW9ucyBjbGFzcy4KCiAgICBUaGUgaW5pdGlhbGl6ZXIgd2lsbCB0cmF2ZXJzZSBhbGwgc3ViY2xhc3NlcywgYWRkIGFsbCB0aGVpciBhcmdwYXJzZQogICAgYXJndW1lbnRzIGFuZCB0aGVuIHBhcnNlIHRoZSBjb21tYW5kIGxpbmUgc3BlY2lmaWVkIGJ5IGZsYWdzIG9yIGJ5IGRlZmF1bHQKICAgIHRoZSBvbmUgb2J0YWluZWQgZnJvbSBzeXMuYXJndi4KCiAgICBUaGUgc3ViY2xhc3NlcyBhcmUgbm90IGV4cGVjdGVkIHRvIHJlcXVpcmUgYSByZWRlZmluaXRpb24gb2YgX19pbml0X18uCgogICAgQXJnczoKICAgICAgZmxhZ3M6IEFuIGl0ZXJhYmxlIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgdG8gYmUgdXNlZC4gSWYgbm90IHNwZWNpZmllZAogICAgICAgIHRoZW4gc3lzLmFyZ3Ygd2lsbCBiZSB1c2VkIGFzIGlucHV0IGZvciBwYXJzaW5nIGFyZ3VtZW50cy4KCiAgICAgICoqa3dhcmdzOiBBZGQgb3ZlcnJpZGVzIGZvciBhcmd1bWVudHMgcGFzc2VkIGluIGZsYWdzLgogICAgIiIiCiAgICBzZWxmLl9mbGFncyA9IGZsYWdzCiAgICBzZWxmLl9hbGxfb3B0aW9ucyA9IGt3YXJncwogICAgcGFyc2VyID0gX0JlYW1Bcmd1bWVudFBhcnNlcigpCgogICAgZm9yIGNscyBpbiB0eXBlKHNlbGYpLm1ybygpOgogICAgICBpZiBjbHMgPT0gUGlwZWxpbmVPcHRpb25zOgogICAgICAgIGJyZWFrCiAgICAgIGVsaWYgJ19hZGRfYXJncGFyc2VfYXJncycgaW4gY2xzLl9fZGljdF9fOgogICAgICAgIGNscy5fYWRkX2FyZ3BhcnNlX2FyZ3MocGFyc2VyKQogICAgIyBUaGUgX3Zpc2libGVfb3B0aW9ucyBhdHRyaWJ1dGUgd2lsbCBjb250YWluIG9ubHkgdGhvc2Ugb3B0aW9ucyBmcm9tIHRoZQogICAgIyBmbGFncyAoaS5lLiwgY29tbWFuZCBsaW5lKSB0aGF0IGNhbiBiZSByZWNvZ25pemVkLiBUaGUgX2FsbF9vcHRpb25zCiAgICAjIGZpZWxkIGNvbnRhaW5zIGFkZGl0aW9uYWwgb3ZlcnJpZGVzLgogICAgc2VsZi5fdmlzaWJsZV9vcHRpb25zLCBfID0gcGFyc2VyLnBhcnNlX2tub3duX2FyZ3MoZmxhZ3MpCgogIEBjbGFzc21ldGhvZAogIGRlZiBfYWRkX2FyZ3BhcnNlX2FyZ3MoY2xzLCBwYXJzZXIpOgogICAgIyBPdmVycmlkZSB0aGlzIGluIHN1YmNsYXNzZXMgdG8gcHJvdmlkZSBvcHRpb25zLgogICAgcGFzcwoKICBAY2xhc3NtZXRob2QKICBkZWYgZnJvbV9kaWN0aW9uYXJ5KGNscywgb3B0aW9ucyk6CiAgICAiIiJSZXR1cm5zIGEgUGlwZWxpbmVPcHRpb25zIGZyb20gYSBkaWN0aW9uYXJ5IG9mIGFyZ3VtZW50cy4KCiAgICBBcmdzOgogICAgICBvcHRpb25zOiBEaWN0aW9uYXJ5IG9mIGFyZ3VtZW50IHZhbHVlIHBhaXJzLgoKICAgIFJldHVybnM6CiAgICAgIEEgUGlwZWxpbmVPcHRpb25zIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGdpdmVuIGFyZ3VtZW50cy4KICAgICIiIgogICAgZmxhZ3MgPSBbXQogICAgZm9yIGssIHYgaW4gb3B0aW9ucy5pdGVtcygpOgogICAgICBpZiBpc2luc3RhbmNlKHYsIGJvb2wpOgogICAgICAgIGlmIHY6CiAgICAgICAgICBmbGFncy5hcHBlbmQoJy0tJXMnICUgaykKICAgICAgZWxpZiBpc2luc3RhbmNlKHYsIGxpc3QpOgogICAgICAgIGZvciBpIGluIHY6CiAgICAgICAgICBmbGFncy5hcHBlbmQoJy0tJXM9JXMnICUgKGssIGkpKQogICAgICBlbHNlOgogICAgICAgIGZsYWdzLmFwcGVuZCgnLS0lcz0lcycgJSAoaywgdikpCgogICAgcmV0dXJuIGNscyhmbGFncykKCiAgZGVmIGdldF9hbGxfb3B0aW9ucyhzZWxmLCBkcm9wX2RlZmF1bHQ9RmFsc2UpOgogICAgIiIiUmV0dXJucyBhIGRpY3Rpb25hcnkgb2YgYWxsIGRlZmluZWQgYXJndW1lbnRzLgoKICAgIFJldHVybnMgYSBkaWN0aW9uYXJ5IG9mIGFsbCBkZWZpbmVkIGFyZ3VtZW50cyAoYXJndW1lbnRzIHRoYXQgYXJlIGRlZmluZWQgaW4KICAgIGFueSBzdWJjbGFzcyBvZiBQaXBlbGluZU9wdGlvbnMpIGludG8gYSBkaWN0aW9uYXJ5LgoKICAgIEFyZ3M6CiAgICAgIGRyb3BfZGVmYXVsdDogSWYgc2V0IHRvIHRydWUsIG9wdGlvbnMgdGhhdCBhcmUgZXF1YWwgdG8gdGhlaXIgZGVmYXVsdAogICAgICAgIHZhbHVlcywgYXJlIG5vdCByZXR1cm5lZCBhcyBwYXJ0IG9mIHRoZSByZXN1bHQgZGljdGlvbmFyeS4KCiAgICBSZXR1cm5zOgogICAgICBEaWN0aW9uYXJ5IG9mIGFsbCBhcmdzIGFuZCB2YWx1ZXMuCiAgICAiIiIKCiAgICAjIFRPRE8oQkVBTS0xMzE5KTogUGlwZWxpbmVPcHRpb24gc3ViLWNsYXNzZXMgaW4gdGhlIG1haW4gc2Vzc2lvbiBtaWdodCBiZQogICAgIyByZXBlYXRlZC4gUGljayBsYXN0IHVuaXF1ZSBpbnN0YW5jZSBvZiBlYWNoIHN1YmNsYXNzIHRvIGF2b2lkIGNvbmZsaWN0cy4KICAgIHN1YnNldCA9IHt9CiAgICBwYXJzZXIgPSBfQmVhbUFyZ3VtZW50UGFyc2VyKCkKICAgIGZvciBjbHMgaW4gUGlwZWxpbmVPcHRpb25zLl9fc3ViY2xhc3Nlc19fKCk6CiAgICAgIHN1YnNldFtzdHIoY2xzKV0gPSBjbHMKICAgIGZvciBjbHMgaW4gc3Vic2V0LnZhbHVlcygpOgogICAgICBjbHMuX2FkZF9hcmdwYXJzZV9hcmdzKHBhcnNlcikgICMgcHlsaW50OiBkaXNhYmxlPXByb3RlY3RlZC1hY2Nlc3MKICAgIGtub3duX2FyZ3MsIF8gPSBwYXJzZXIucGFyc2Vfa25vd25fYXJncyhzZWxmLl9mbGFncykKICAgIHJlc3VsdCA9IHZhcnMoa25vd25fYXJncykKCiAgICAjIEFwcGx5IHRoZSBvdmVycmlkZXMgaWYgYW55CiAgICBmb3IgayBpbiBsaXN0KHJlc3VsdCk6CiAgICAgIGlmIGsgaW4gc2VsZi5fYWxsX29wdGlvbnM6CiAgICAgICAgcmVzdWx0W2tdID0gc2VsZi5fYWxsX29wdGlvbnNba10KICAgICAgaWYgKGRyb3BfZGVmYXVsdCBhbmQKICAgICAgICAgIHBhcnNlci5nZXRfZGVmYXVsdChrKSA9PSByZXN1bHRba10gYW5kCiAgICAgICAgICBub3QgaXNpbnN0YW5jZShwYXJzZXIuZ2V0X2RlZmF1bHQoayksIFZhbHVlUHJvdmlkZXIpKToKICAgICAgICBkZWwgcmVzdWx0W2tdCgogICAgcmV0dXJuIHJlc3VsdAoKICBkZWYgZGlzcGxheV9kYXRhKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuZ2V0X2FsbF9vcHRpb25zKFRydWUpCgogIGRlZiB2aWV3X2FzKHNlbGYsIGNscyk6CiAgICB2aWV3ID0gY2xzKHNlbGYuX2ZsYWdzKQogICAgdmlldy5fYWxsX29wdGlvbnMgPSBzZWxmLl9hbGxfb3B0aW9ucwogICAgcmV0dXJuIHZpZXcKCiAgZGVmIF92aXNpYmxlX29wdGlvbl9saXN0KHNlbGYpOgogICAgcmV0dXJuIHNvcnRlZChvcHRpb24KICAgICAgICAgICAgICAgICAgZm9yIG9wdGlvbiBpbiBkaXIoc2VsZi5fdmlzaWJsZV9vcHRpb25zKSBpZiBvcHRpb25bMF0gIT0gJ18nKQoKICBkZWYgX19kaXJfXyhzZWxmKToKICAgIHJldHVybiBzb3J0ZWQoZGlyKHR5cGUoc2VsZikpICsgbGlzdChzZWxmLl9fZGljdF9fKSArCiAgICAgICAgICAgICAgICAgIHNlbGYuX3Zpc2libGVfb3B0aW9uX2xpc3QoKSkKCiAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgogICAgIyBTcGVjaWFsIG1ldGhvZHMgd2hpY2ggbWF5IGJlIGFjY2Vzc2VkIGJlZm9yZSB0aGUgb2JqZWN0IGlzCiAgICAjIGZ1bGx5IGNvbnN0cnVjdGVkIChlLmcuIGluIHVucGlja2xpbmcpLgogICAgaWYgbmFtZVs6Ml0gPT0gbmFtZVstMjpdID09ICdfXyc6CiAgICAgIHJldHVybiBvYmplY3QuX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBuYW1lKQogICAgZWxpZiBuYW1lIGluIHNlbGYuX3Zpc2libGVfb3B0aW9uX2xpc3QoKToKICAgICAgcmV0dXJuIHNlbGYuX2FsbF9vcHRpb25zLmdldChuYW1lLCBnZXRhdHRyKHNlbGYuX3Zpc2libGVfb3B0aW9ucywgbmFtZSkpCiAgICBlbHNlOgogICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiJyVzJyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAnJXMnIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlKHNlbGYpLl9fbmFtZV9fLCBuYW1lKSkKCiAgZGVmIF9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKToKICAgIGlmIG5hbWUgaW4gKCdfZmxhZ3MnLCAnX2FsbF9vcHRpb25zJywgJ192aXNpYmxlX29wdGlvbnMnKToKICAgICAgc3VwZXIoUGlwZWxpbmVPcHRpb25zLCBzZWxmKS5fX3NldGF0dHJfXyhuYW1lLCB2YWx1ZSkKICAgIGVsaWYgbmFtZSBpbiBzZWxmLl92aXNpYmxlX29wdGlvbl9saXN0KCk6CiAgICAgIHNlbGYuX2FsbF9vcHRpb25zW25hbWVdID0gdmFsdWUKICAgIGVsc2U6CiAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCInJXMnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICclcyciICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGUoc2VsZikuX19uYW1lX18sIG5hbWUpKQoKICBkZWYgX19zdHJfXyhzZWxmKToKICAgIHJldHVybiAnJXMoJXMpJyAlICh0eXBlKHNlbGYpLl9fbmFtZV9fLAogICAgICAgICAgICAgICAgICAgICAgICcsICcuam9pbignJXM9JXMnICUgKG9wdGlvbiwgZ2V0YXR0cihzZWxmLCBvcHRpb24pKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Igb3B0aW9uIGluIHNlbGYuX3Zpc2libGVfb3B0aW9uX2xpc3QoKSkpCgoKY2xhc3MgU3RhbmRhcmRPcHRpb25zKFBpcGVsaW5lT3B0aW9ucyk6CgogIERFRkFVTFRfUlVOTkVSID0gJ0RpcmVjdFJ1bm5lcicKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIF9hZGRfYXJncGFyc2VfYXJncyhjbHMsIHBhcnNlcik6CiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLXJ1bm5lcicsCiAgICAgICAgaGVscD0oJ1BpcGVsaW5lIHJ1bm5lciB1c2VkIHRvIGV4ZWN1dGUgdGhlIHdvcmtmbG93LiBWYWxpZCB2YWx1ZXMgYXJlICcKICAgICAgICAgICAgICAnRGlyZWN0UnVubmVyLCBEYXRhZmxvd1J1bm5lci4nKSkKICAgICMgV2hldGhlciB0byBlbmFibGUgc3RyZWFtaW5nIG1vZGUuCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXN0cmVhbWluZycsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1doZXRoZXIgdG8gZW5hYmxlIHN0cmVhbWluZyBtb2RlLicpCgoKY2xhc3MgVHlwZU9wdGlvbnMoUGlwZWxpbmVPcHRpb25zKToKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIF9hZGRfYXJncGFyc2VfYXJncyhjbHMsIHBhcnNlcik6CiAgICAjIFRPRE8obGFvbHUpOiBBZGQgYSB0eXBlIGluZmVyZW5jaW5nIG9wdGlvbiBoZXJlIG9uY2UgaW1wbGVtZW50ZWQuCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXR5cGVfY2hlY2tfc3RyaWN0bmVzcycsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9J0RFRkFVTFRfVE9fQU5ZJywKICAgICAgICAgICAgICAgICAgICAgICAgY2hvaWNlcz1bJ0FMTF9SRVFVSVJFRCcsICdERUZBVUxUX1RPX0FOWSddLAogICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdUaGUgbGV2ZWwgb2YgZXhoYXVzdGl2ZSBtYW51YWwgdHlwZS1oaW50ICcKICAgICAgICAgICAgICAgICAgICAgICAgJ2Fubm90YXRpb24gcmVxdWlyZWQnKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1ub19waXBlbGluZV90eXBlX2NoZWNrJywKICAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0ncGlwZWxpbmVfdHlwZV9jaGVjaycsCiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfZmFsc2UnLAogICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdEaXNhYmxlIHR5cGUgY2hlY2tpbmcgYXQgcGlwZWxpbmUgY29uc3RydWN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgJ3RpbWUnKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1ydW50aW1lX3R5cGVfY2hlY2snLAogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAogICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdFbmFibGUgdHlwZSBjaGVja2luZyBhdCBwaXBlbGluZSBleGVjdXRpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAndGltZS4gTk9URTogb25seSBzdXBwb3J0ZWQgd2l0aCB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICAnRGlyZWN0UnVubmVyJykKCgpjbGFzcyBEaXJlY3RPcHRpb25zKFBpcGVsaW5lT3B0aW9ucyk6CiAgIiIiRGlyZWN0UnVubmVyLXNwZWNpZmljIGV4ZWN1dGlvbiBvcHRpb25zLiIiIgoKICBAY2xhc3NtZXRob2QKICBkZWYgX2FkZF9hcmdwYXJzZV9hcmdzKGNscywgcGFyc2VyKToKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tbm9fZGlyZWN0X3J1bm5lcl91c2Vfc3RhY2tlZF9idW5kbGUnLAogICAgICAgIGFjdGlvbj0nc3RvcmVfZmFsc2UnLAogICAgICAgIGRlc3Q9J2RpcmVjdF9ydW5uZXJfdXNlX3N0YWNrZWRfYnVuZGxlJywKICAgICAgICBoZWxwPSdEaXJlY3RSdW5uZXIgdXNlcyBzdGFja2VkIFdpbmRvd2VkVmFsdWVzIHdpdGhpbiBhIEJ1bmRsZSBmb3IgJwogICAgICAgICdtZW1vcnkgb3B0aW1pemF0aW9uLiBTZXQgLS1ub19kaXJlY3RfcnVubmVyX3VzZV9zdGFja2VkX2J1bmRsZSB0byAnCiAgICAgICAgJ2F2b2lkIGl0LicpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLWRpcmVjdF9ydW5uZXJfYnVuZGxlX3JlcGVhdCcsCiAgICAgICAgdHlwZT1pbnQsCiAgICAgICAgZGVmYXVsdD0wLAogICAgICAgIGhlbHA9J3JlcGxheSBldmVyeSBidW5kbGUgdGhpcyBtYW55IGV4dHJhIHRpbWVzLCBmb3IgcHJvZmlsaW5nJwogICAgICAgICdhbmQgZGVidWdnaW5nJykKCgpjbGFzcyBHb29nbGVDbG91ZE9wdGlvbnMoUGlwZWxpbmVPcHRpb25zKToKICAiIiJHb29nbGUgQ2xvdWQgRGF0YWZsb3cgc2VydmljZSBleGVjdXRpb24gb3B0aW9ucy4iIiIKCiAgQklHUVVFUllfQVBJX1NFUlZJQ0UgPSAnYmlncXVlcnkuZ29vZ2xlYXBpcy5jb20nCiAgQ09NUFVURV9BUElfU0VSVklDRSA9ICdjb21wdXRlLmdvb2dsZWFwaXMuY29tJwogIFNUT1JBR0VfQVBJX1NFUlZJQ0UgPSAnc3RvcmFnZS5nb29nbGVhcGlzLmNvbScKICBEQVRBRkxPV19FTkRQT0lOVCA9ICdodHRwczovL2RhdGFmbG93Lmdvb2dsZWFwaXMuY29tJwoKICBAY2xhc3NtZXRob2QKICBkZWYgX2FkZF9hcmdwYXJzZV9hcmdzKGNscywgcGFyc2VyKToKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tZGF0YWZsb3dfZW5kcG9pbnQnLAogICAgICAgIGRlZmF1bHQ9Y2xzLkRBVEFGTE9XX0VORFBPSU5ULAogICAgICAgIGhlbHA9CiAgICAgICAgKCdUaGUgVVJMIGZvciB0aGUgRGF0YWZsb3cgQVBJLiBJZiBub3Qgc2V0LCB0aGUgZGVmYXVsdCBwdWJsaWMgVVJMICcKICAgICAgICAgJ3dpbGwgYmUgdXNlZC4nKSkKICAgICMgUmVtb3RlIGV4ZWN1dGlvbiBtdXN0IGNoZWNrIHRoYXQgdGhpcyBvcHRpb24gaXMgbm90IE5vbmUuCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXByb2plY3QnLAogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PU5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J05hbWUgb2YgdGhlIENsb3VkIHByb2plY3Qgb3duaW5nIHRoZSBEYXRhZmxvdyAnCiAgICAgICAgICAgICAgICAgICAgICAgICdqb2IuJykKICAgICMgUmVtb3RlIGV4ZWN1dGlvbiBtdXN0IGNoZWNrIHRoYXQgdGhpcyBvcHRpb24gaXMgbm90IE5vbmUuCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWpvYl9uYW1lJywKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1Ob25lLAogICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdOYW1lIG9mIHRoZSBDbG91ZCBEYXRhZmxvdyBqb2IuJykKICAgICMgUmVtb3RlIGV4ZWN1dGlvbiBtdXN0IGNoZWNrIHRoYXQgdGhpcyBvcHRpb24gaXMgbm90IE5vbmUuCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXN0YWdpbmdfbG9jYXRpb24nLAogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PU5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0dDUyBwYXRoIGZvciBzdGFnaW5nIGNvZGUgcGFja2FnZXMgbmVlZGVkIGJ5ICcKICAgICAgICAgICAgICAgICAgICAgICAgJ3dvcmtlcnMuJykKICAgICMgUmVtb3RlIGV4ZWN1dGlvbiBtdXN0IGNoZWNrIHRoYXQgdGhpcyBvcHRpb24gaXMgbm90IE5vbmUuCiAgICAjIElmIHN0YWdpbmdfbG9jYXRpb24gaXMgbm90IHNldCwgaXQgZGVmYXVsdHMgdG8gdGVtcF9sb2NhdGlvbi4KICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tdGVtcF9sb2NhdGlvbicsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nR0NTIHBhdGggZm9yIHNhdmluZyB0ZW1wb3Jhcnkgd29ya2Zsb3cgam9icy4nKQogICAgIyBUaGUgQ2xvdWQgRGF0YWZsb3cgc2VydmljZSBkb2VzIG5vdCB5ZXQgaG9ub3IgdGhpcyBzZXR0aW5nLiBIb3dldmVyLCBvbmNlCiAgICAjIHNlcnZpY2Ugc3VwcG9ydCBpcyBhZGRlZCB0aGVuIHVzZXJzIG9mIHRoaXMgU0RLIHdpbGwgYmUgYWJsZSB0byBjb250cm9sCiAgICAjIHRoZSByZWdpb24uIERlZmF1bHQgaXMgdXAgdG8gdGhlIERhdGFmbG93IHNlcnZpY2UuIFNlZQogICAgIyBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vY29tcHV0ZS9kb2NzL3JlZ2lvbnMtem9uZXMvcmVnaW9ucy16b25lcyBmb3IgYQogICAgIyBsaXN0IG9mIHZhbGlkIG9wdGlvbnMvCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXJlZ2lvbicsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9J3VzLWNlbnRyYWwxJywKICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nVGhlIEdvb2dsZSBDb21wdXRlIEVuZ2luZSByZWdpb24gZm9yIGNyZWF0aW5nICcKICAgICAgICAgICAgICAgICAgICAgICAgJ0RhdGFmbG93IGpvYi4nKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1zZXJ2aWNlX2FjY291bnRfZW1haWwnLAogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PU5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0lkZW50aXR5IHRvIHJ1biB2aXJ0dWFsIG1hY2hpbmVzIGFzLicpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW5vX2F1dGgnLCBkZXN0PSdub19hdXRoJywgdHlwZT1ib29sLCBkZWZhdWx0PUZhbHNlKQogICAgIyBPcHRpb24gdG8gcnVuIHRlbXBsYXRlZCBwaXBlbGluZXMKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tdGVtcGxhdGVfbG9jYXRpb24nLAogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PU5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1NhdmUgam9iIHRvIHNwZWNpZmllZCBsb2NhbCBvciBHQ1MgbG9jYXRpb24uJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tbGFiZWwnLCAnLS1sYWJlbHMnLAogICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSdsYWJlbHMnLAogICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J2FwcGVuZCcsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nTGFiZWxzIHRvIGJlIGFwcGxpZWQgdG8gdGhpcyBEYXRhZmxvdyBqb2IuICcKICAgICAgICAgICAgICAgICAgICAgICAgJ0xhYmVscyBhcmUga2V5IHZhbHVlIHBhaXJzIHNlcGFyYXRlZCBieSA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgJyhlLmcuIC0tbGFiZWwga2V5PXZhbHVlKS4nKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS11cGRhdGUnLAogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAogICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdVcGRhdGUgYW4gZXhpc3Rpbmcgc3RyZWFtaW5nIENsb3VkIERhdGFmbG93IGpvYi4gJwogICAgICAgICAgICAgICAgICAgICAgICAnRXhwZXJpbWVudGFsLiAnCiAgICAgICAgICAgICAgICAgICAgICAgICdTZWUgaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2RhdGFmbG93L3BpcGVsaW5lcy8nCiAgICAgICAgICAgICAgICAgICAgICAgICd1cGRhdGluZy1hLXBpcGVsaW5lJykKCiAgZGVmIHZhbGlkYXRlKHNlbGYsIHZhbGlkYXRvcik6CiAgICBlcnJvcnMgPSBbXQogICAgaWYgdmFsaWRhdG9yLmlzX3NlcnZpY2VfcnVubmVyKCk6CiAgICAgIGVycm9ycy5leHRlbmQodmFsaWRhdG9yLnZhbGlkYXRlX2Nsb3VkX29wdGlvbnMoc2VsZikpCiAgICAgIGVycm9ycy5leHRlbmQodmFsaWRhdG9yLnZhbGlkYXRlX2djc19wYXRoKHNlbGYsICd0ZW1wX2xvY2F0aW9uJykpCiAgICAgIGlmIGdldGF0dHIoc2VsZiwgJ3N0YWdpbmdfbG9jYXRpb24nLAogICAgICAgICAgICAgICAgIE5vbmUpIG9yIGdldGF0dHIoc2VsZiwgJ3RlbXBfbG9jYXRpb24nLCBOb25lKSBpcyBOb25lOgogICAgICAgIGVycm9ycy5leHRlbmQodmFsaWRhdG9yLnZhbGlkYXRlX2djc19wYXRoKHNlbGYsICdzdGFnaW5nX2xvY2F0aW9uJykpCgogICAgaWYgc2VsZi52aWV3X2FzKERlYnVnT3B0aW9ucykuZGF0YWZsb3dfam9iX2ZpbGU6CiAgICAgIGlmIHNlbGYudmlld19hcyhHb29nbGVDbG91ZE9wdGlvbnMpLnRlbXBsYXRlX2xvY2F0aW9uOgogICAgICAgIGVycm9ycy5hcHBlbmQoJy0tZGF0YWZsb3dfam9iX2ZpbGUgYW5kIC0tdGVtcGxhdGVfbG9jYXRpb24gJwogICAgICAgICAgICAgICAgICAgICAgJ2FyZSBtdXR1YWxseSBleGNsdXNpdmUuJykKCiAgICByZXR1cm4gZXJyb3JzCgoKY2xhc3MgSGFkb29wRmlsZVN5c3RlbU9wdGlvbnMoUGlwZWxpbmVPcHRpb25zKToKICAiIiJgYEhhZG9vcEZpbGVTeXN0ZW1gYCBjb25uZWN0aW9uIG9wdGlvbnMuIiIiCgogIEBjbGFzc21ldGhvZAogIGRlZiBfYWRkX2FyZ3BhcnNlX2FyZ3MoY2xzLCBwYXJzZXIpOgogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1oZGZzX2hvc3QnLAogICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICBoZWxwPQogICAgICAgICgnSG9zdG5hbWUgb3IgYWRkcmVzcyBvZiB0aGUgSERGUyBuYW1lbm9kZS4nKSkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0taGRmc19wb3J0JywKICAgICAgICBkZWZhdWx0PU5vbmUsCiAgICAgICAgaGVscD0KICAgICAgICAoJ1BvcnQgb2YgdGhlIEhERlMgbmFtZW5vZGUuJykpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLWhkZnNfdXNlcicsCiAgICAgICAgZGVmYXVsdD1Ob25lLAogICAgICAgIGhlbHA9CiAgICAgICAgKCdIREZTIHVzZXJuYW1lIHRvIHVzZS4nKSkKCiAgZGVmIHZhbGlkYXRlKHNlbGYsIHZhbGlkYXRvcik6CiAgICBlcnJvcnMgPSBbXQogICAgZXJyb3JzLmV4dGVuZCh2YWxpZGF0b3IudmFsaWRhdGVfb3B0aW9uYWxfYXJndW1lbnRfcG9zaXRpdmUoc2VsZiwgJ3BvcnQnKSkKICAgIHJldHVybiBlcnJvcnMKCgojIENvbW1hbmQgbGluZSBvcHRpb25zIGNvbnRyb2xsaW5nIHRoZSB3b3JrZXIgcG9vbCBjb25maWd1cmF0aW9uLgojIFRPRE8oc2lsdml1Yyk6IFVwZGF0ZSBkZXNjcmlwdGlvbiB3aGVuIGF1dG9zY2FsaW5nIG9wdGlvbnMgYXJlIGluLgpjbGFzcyBXb3JrZXJPcHRpb25zKFBpcGVsaW5lT3B0aW9ucyk6CiAgIiIiV29ya2VyIHBvb2wgY29uZmlndXJhdGlvbiBvcHRpb25zLiIiIgoKICBAY2xhc3NtZXRob2QKICBkZWYgX2FkZF9hcmdwYXJzZV9hcmdzKGNscywgcGFyc2VyKToKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tbnVtX3dvcmtlcnMnLAogICAgICAgIHR5cGU9aW50LAogICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICBoZWxwPQogICAgICAgICgnTnVtYmVyIG9mIHdvcmtlcnMgdG8gdXNlIHdoZW4gZXhlY3V0aW5nIHRoZSBEYXRhZmxvdyBqb2IuIElmIG5vdCAnCiAgICAgICAgICdzZXQsIHRoZSBEYXRhZmxvdyBzZXJ2aWNlIHdpbGwgdXNlIGEgcmVhc29uYWJsZSBkZWZhdWx0LicpKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1tYXhfbnVtX3dvcmtlcnMnLAogICAgICAgIHR5cGU9aW50LAogICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICBoZWxwPQogICAgICAgICgnTWF4aW11bSBudW1iZXIgb2Ygd29ya2VycyB0byB1c2Ugd2hlbiBleGVjdXRpbmcgdGhlIERhdGFmbG93IGpvYi4nKSkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tYXV0b3NjYWxpbmdfYWxnb3JpdGhtJywKICAgICAgICB0eXBlPXN0ciwKICAgICAgICBjaG9pY2VzPVsnTk9ORScsICdUSFJPVUdIUFVUX0JBU0VEJ10sCiAgICAgICAgZGVmYXVsdD1Ob25lLCAgIyBNZWFuaW5nIHVuc2V0LCBkaXN0aW5jdCBmcm9tICdOT05FJyBtZWFuaW5nIGRvbid0IHNjYWxlCiAgICAgICAgaGVscD0KICAgICAgICAoJ0lmIGFuZCBob3cgdG8gYXV0b3NjYWxlIHRoZSB3b3JrZXJwb29sLicpKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS13b3JrZXJfbWFjaGluZV90eXBlJywKICAgICAgICBkZXN0PSdtYWNoaW5lX3R5cGUnLAogICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICBoZWxwPSgnTWFjaGluZSB0eXBlIHRvIGNyZWF0ZSBEYXRhZmxvdyB3b3JrZXIgVk1zIGFzLiBTZWUgJwogICAgICAgICAgICAgICdodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vY29tcHV0ZS9kb2NzL21hY2hpbmUtdHlwZXMgJwogICAgICAgICAgICAgICdmb3IgYSBsaXN0IG9mIHZhbGlkIG9wdGlvbnMuIElmIG5vdCBzZXQsICcKICAgICAgICAgICAgICAndGhlIERhdGFmbG93IHNlcnZpY2Ugd2lsbCBjaG9vc2UgYSByZWFzb25hYmxlICcKICAgICAgICAgICAgICAnZGVmYXVsdC4nKSkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tZGlza19zaXplX2diJywKICAgICAgICB0eXBlPWludCwKICAgICAgICBkZWZhdWx0PU5vbmUsCiAgICAgICAgaGVscD0KICAgICAgICAoJ1JlbW90ZSB3b3JrZXIgZGlzayBzaXplLCBpbiBnaWdhYnl0ZXMsIG9yIDAgdG8gdXNlIHRoZSBkZWZhdWx0IHNpemUuICcKICAgICAgICAgJ0lmIG5vdCBzZXQsIHRoZSBEYXRhZmxvdyBzZXJ2aWNlIHdpbGwgdXNlIGEgcmVhc29uYWJsZSBkZWZhdWx0LicpKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS13b3JrZXJfZGlza190eXBlJywKICAgICAgICBkZXN0PSdkaXNrX3R5cGUnLAogICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICBoZWxwPSgnU3BlY2lmaWVzIHdoYXQgdHlwZSBvZiBwZXJzaXN0ZW50IGRpc2sgc2hvdWxkIGJlIHVzZWQuJykpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLXpvbmUnLAogICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICBoZWxwPSgKICAgICAgICAgICAgJ0dDRSBhdmFpbGFiaWxpdHkgem9uZSBmb3IgbGF1bmNoaW5nIHdvcmtlcnMuIERlZmF1bHQgaXMgdXAgdG8gdGhlICcKICAgICAgICAgICAgJ0RhdGFmbG93IHNlcnZpY2UuJykpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLW5ldHdvcmsnLAogICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICBoZWxwPSgKICAgICAgICAgICAgJ0dDRSBuZXR3b3JrIGZvciBsYXVuY2hpbmcgd29ya2Vycy4gRGVmYXVsdCBpcyB1cCB0byB0aGUgRGF0YWZsb3cgJwogICAgICAgICAgICAnc2VydmljZS4nKSkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tc3VibmV0d29yaycsCiAgICAgICAgZGVmYXVsdD1Ob25lLAogICAgICAgIGhlbHA9KAogICAgICAgICAgICAnR0NFIHN1Ym5ldHdvcmsgZm9yIGxhdW5jaGluZyB3b3JrZXJzLiBEZWZhdWx0IGlzIHVwIHRvIHRoZSAnCiAgICAgICAgICAgICdEYXRhZmxvdyBzZXJ2aWNlLiBFeHBlY3RlZCBmb3JtYXQgaXMgJwogICAgICAgICAgICAncmVnaW9ucy9SRUdJT04vc3VibmV0d29ya3MvU1VCTkVUV09SSyBvciB0aGUgZnVsbHkgcXVhbGlmaWVkICcKICAgICAgICAgICAgJ3N1Ym5ldHdvcmsgbmFtZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSAnCiAgICAgICAgICAgICdodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vY29tcHV0ZS9kb2NzL3ZwYy8nKSkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0td29ya2VyX2hhcm5lc3NfY29udGFpbmVyX2ltYWdlJywKICAgICAgICBkZWZhdWx0PU5vbmUsCiAgICAgICAgaGVscD0oJ0RvY2tlciByZWdpc3RyeSBsb2NhdGlvbiBvZiBjb250YWluZXIgaW1hZ2UgdG8gdXNlIGZvciB0aGUgJwogICAgICAgICAgICAgICd3b3JrZXIgaGFybmVzcy4gRGVmYXVsdCBpcyB0aGUgY29udGFpbmVyIGZvciB0aGUgdmVyc2lvbiBvZiB0aGUgJwogICAgICAgICAgICAgICdTREsuIE5vdGU6IGN1cnJlbnRseSwgb25seSBhcHByb3ZlZCBHb29nbGUgQ2xvdWQgRGF0YWZsb3cgJwogICAgICAgICAgICAgICdjb250YWluZXIgaW1hZ2VzIG1heSBiZSB1c2VkIGhlcmUuJykpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLXVzZV9wdWJsaWNfaXBzJywKICAgICAgICBkZWZhdWx0PU5vbmUsCiAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKICAgICAgICBoZWxwPSdXaGV0aGVyIHRvIGFzc2lnbiBwdWJsaWMgSVAgYWRkcmVzc2VzIHRvIHRoZSB3b3JrZXIgVk1zLicpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLW5vX3VzZV9wdWJsaWNfaXBzJywKICAgICAgICBkZXN0PSd1c2VfcHVibGljX2lwcycsCiAgICAgICAgZGVmYXVsdD1Ob25lLAogICAgICAgIGFjdGlvbj0nc3RvcmVfZmFsc2UnLAogICAgICAgIGhlbHA9J1doZXRoZXIgdG8gYXNzaWduIG9ubHkgcHJpdmF0ZSBJUCBhZGRyZXNzZXMgdG8gdGhlIHdvcmtlciBWTXMuJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tbWluX2NwdV9wbGF0Zm9ybScsCiAgICAgICAgZGVzdD0nbWluX2NwdV9wbGF0Zm9ybScsCiAgICAgICAgdHlwZT1zdHIsCiAgICAgICAgaGVscD0nR0NFIG1pbmltdW0gQ1BVIHBsYXRmb3JtLiBEZWZhdWx0IGlzIGRldGVybWluZWQgYnkgR0NQLicKICAgICkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tZGF0YWZsb3dfd29ya2VyX2phcicsCiAgICAgICAgZGVzdD0nZGF0YWZsb3dfd29ya2VyX2phcicsCiAgICAgICAgdHlwZT1zdHIsCiAgICAgICAgaGVscD0nRGF0YWZsb3cgd29ya2VyIGphciBmaWxlLiBJZiBzcGVjaWZpZWQsIHRoZSBqYXIgZmlsZSBpcyBzdGFnZWQgJwogICAgICAgICAgICAgJ2luIEdDUywgdGhlbiBnZXRzIGxvYWRlZCBieSB3b3JrZXJzLiBFbmQgdXNlcnMgdXN1YWxseSAnCiAgICAgICAgICAgICAnc2hvdWxkIG5vdCB1c2UgdGhpcyBmZWF0dXJlLicKICAgICkKCiAgZGVmIHZhbGlkYXRlKHNlbGYsIHZhbGlkYXRvcik6CiAgICBlcnJvcnMgPSBbXQogICAgaWYgdmFsaWRhdG9yLmlzX3NlcnZpY2VfcnVubmVyKCk6CiAgICAgIGVycm9ycy5leHRlbmQoCiAgICAgICAgICB2YWxpZGF0b3IudmFsaWRhdGVfb3B0aW9uYWxfYXJndW1lbnRfcG9zaXRpdmUoc2VsZiwgJ251bV93b3JrZXJzJykpCiAgICByZXR1cm4gZXJyb3JzCgoKY2xhc3MgRGVidWdPcHRpb25zKFBpcGVsaW5lT3B0aW9ucyk6CgogIEBjbGFzc21ldGhvZAogIGRlZiBfYWRkX2FyZ3BhcnNlX2FyZ3MoY2xzLCBwYXJzZXIpOgogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1kYXRhZmxvd19qb2JfZmlsZScsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nRGVidWcgZmlsZSB0byB3cml0ZSB0aGUgd29ya2Zsb3cgc3BlY2lmaWNhdGlvbi4nKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1leHBlcmltZW50JywgJy0tZXhwZXJpbWVudHMnLAogICAgICAgIGRlc3Q9J2V4cGVyaW1lbnRzJywKICAgICAgICBhY3Rpb249J2FwcGVuZCcsCiAgICAgICAgZGVmYXVsdD1Ob25lLAogICAgICAgIGhlbHA9CiAgICAgICAgKCdSdW5uZXJzIG1heSBwcm92aWRlIGEgbnVtYmVyIG9mIGV4cGVyaW1lbnRhbCBmZWF0dXJlcyB0aGF0IGNhbiBiZSAnCiAgICAgICAgICdlbmFibGVkIHdpdGggdGhpcyBmbGFnLiBQbGVhc2Ugc3luYyB3aXRoIHRoZSBvd25lcnMgb2YgdGhlIHJ1bm5lciAnCiAgICAgICAgICdiZWZvcmUgZW5hYmxpbmcgYW55IGV4cGVyaW1lbnRzLicpKQoKCmNsYXNzIFByb2ZpbGluZ09wdGlvbnMoUGlwZWxpbmVPcHRpb25zKToKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIF9hZGRfYXJncGFyc2VfYXJncyhjbHMsIHBhcnNlcik6CiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXByb2ZpbGVfY3B1JywKICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nRW5hYmxlIHdvcmsgaXRlbSBDUFUgcHJvZmlsaW5nLicpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXByb2ZpbGVfbWVtb3J5JywKICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nRW5hYmxlIHdvcmsgaXRlbSBoZWFwIHByb2ZpbGluZy4nKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1wcm9maWxlX2xvY2F0aW9uJywKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1Ob25lLAogICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdwYXRoIGZvciBzYXZpbmcgcHJvZmlsZXIgZGF0YS4nKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1wcm9maWxlX3NhbXBsZV9yYXRlJywKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1mbG9hdCwKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0xLjAsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0EgbnVtYmVyIGJldHdlZW4gMCBhbmQgMSBpbmRpY2F0aW5nIHRoZSByYXRpbyAnCiAgICAgICAgICAgICAgICAgICAgICAgICdvZiBidW5kbGVzIHRoYXQgc2hvdWxkIGJlIHByb2ZpbGVkLicpCgoKY2xhc3MgU2V0dXBPcHRpb25zKFBpcGVsaW5lT3B0aW9ucyk6CgogIEBjbGFzc21ldGhvZAogIGRlZiBfYWRkX2FyZ3BhcnNlX2FyZ3MoY2xzLCBwYXJzZXIpOgogICAgIyBPcHRpb25zIGZvciBpbnN0YWxsaW5nIGRlcGVuZGVuY2llcyBpbiB0aGUgd29ya2VyLgogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1yZXF1aXJlbWVudHNfZmlsZScsCiAgICAgICAgZGVmYXVsdD1Ob25lLAogICAgICAgIGhlbHA9CiAgICAgICAgKCdQYXRoIHRvIGEgcmVxdWlyZW1lbnRzIGZpbGUgY29udGFpbmluZyBwYWNrYWdlIGRlcGVuZGVuY2llcy4gJwogICAgICAgICAnVHlwaWNhbGx5IGl0IGlzIHByb2R1Y2VkIGJ5IGEgcGlwIGZyZWV6ZSBjb21tYW5kLiBNb3JlIGRldGFpbHM6ICcKICAgICAgICAgJ2h0dHBzOi8vcGlwLnB5cGEuaW8vZW4vbGF0ZXN0L3JlZmVyZW5jZS9waXBfZnJlZXplLmh0bWwuICcKICAgICAgICAgJ0lmIHVzZWQsIGFsbCB0aGUgcGFja2FnZXMgc3BlY2lmaWVkIHdpbGwgYmUgZG93bmxvYWRlZCwgJwogICAgICAgICAnY2FjaGVkICh1c2UgLS1yZXF1aXJlbWVudHNfY2FjaGUgdG8gY2hhbmdlIGRlZmF1bHQgbG9jYXRpb24pLCAnCiAgICAgICAgICdhbmQgdGhlbiBzdGFnZWQgc28gdGhhdCB0aGV5IGNhbiBiZSBhdXRvbWF0aWNhbGx5IGluc3RhbGxlZCBpbiAnCiAgICAgICAgICd3b3JrZXJzIGR1cmluZyBzdGFydHVwLiBUaGUgY2FjaGUgaXMgcmVmcmVzaGVkIGFzIG5lZWRlZCAnCiAgICAgICAgICdhdm9pZGluZyBleHRyYSBkb3dubG9hZHMgZm9yIGV4aXN0aW5nIHBhY2thZ2VzLiBUeXBpY2FsbHkgdGhlICcKICAgICAgICAgJ2ZpbGUgaXMgbmFtZWQgcmVxdWlyZW1lbnRzLnR4dC4nKSkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tcmVxdWlyZW1lbnRzX2NhY2hlJywKICAgICAgICBkZWZhdWx0PU5vbmUsCiAgICAgICAgaGVscD0KICAgICAgICAoJ1BhdGggdG8gYSBmb2xkZXIgdG8gY2FjaGUgdGhlIHBhY2thZ2VzIHNwZWNpZmllZCBpbiAnCiAgICAgICAgICd0aGUgcmVxdWlyZW1lbnRzIGZpbGUgdXNpbmcgdGhlIC0tcmVxdWlyZW1lbnRzX2ZpbGUgb3B0aW9uLicpKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1zZXR1cF9maWxlJywKICAgICAgICBkZWZhdWx0PU5vbmUsCiAgICAgICAgaGVscD0KICAgICAgICAoJ1BhdGggdG8gYSBzZXR1cCBQeXRob24gZmlsZSBjb250YWluaW5nIHBhY2thZ2UgZGVwZW5kZW5jaWVzLiBJZiAnCiAgICAgICAgICdzcGVjaWZpZWQsIHRoZSBmaWxlXCdzIGNvbnRhaW5pbmcgZm9sZGVyIGlzIGFzc3VtZWQgdG8gaGF2ZSB0aGUgJwogICAgICAgICAnc3RydWN0dXJlIHJlcXVpcmVkIGZvciBhIHNldHVwdG9vbHMgc2V0dXAgcGFja2FnZS4gVGhlIGZpbGUgbXVzdCBiZSAnCiAgICAgICAgICduYW1lZCBzZXR1cC5weS4gTW9yZSBkZXRhaWxzOiAnCiAgICAgICAgICdodHRwczovL3B5dGhvbmhvc3RlZC5vcmcvYW5fZXhhbXBsZV9weXBpX3Byb2plY3Qvc2V0dXB0b29scy5odG1sICcKICAgICAgICAgJ0R1cmluZyBqb2Igc3VibWlzc2lvbiBhIHNvdXJjZSBkaXN0cmlidXRpb24gd2lsbCBiZSBidWlsdCBhbmQgdGhlICcKICAgICAgICAgJ3dvcmtlciB3aWxsIGluc3RhbGwgdGhlIHJlc3VsdGluZyBwYWNrYWdlIGJlZm9yZSBydW5uaW5nIGFueSBjdXN0b20gJwogICAgICAgICAnY29kZS4nKSkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tYmVhbV9wbHVnaW4nLCAnLS1iZWFtX3BsdWdpbicsCiAgICAgICAgZGVzdD0nYmVhbV9wbHVnaW5zJywKICAgICAgICBhY3Rpb249J2FwcGVuZCcsCiAgICAgICAgZGVmYXVsdD1Ob25lLAogICAgICAgIGhlbHA9CiAgICAgICAgKCdCb290c3RyYXAgdGhlIHB5dGhvbiBwcm9jZXNzIGJlZm9yZSBleGVjdXRpbmcgYW55IGNvZGUgYnkgaW1wb3J0aW5nICcKICAgICAgICAgJ2FsbCB0aGUgcGx1Z2lucyB1c2VkIGluIHRoZSBwaXBlbGluZS4gUGxlYXNlIHBhc3MgYSBjb21tYSBzZXBhcmF0ZWQnCiAgICAgICAgICdsaXN0IG9mIGltcG9ydCBwYXRocyB0byBiZSBpbmNsdWRlZC4gVGhpcyBpcyBjdXJyZW50bHkgYW4gJwogICAgICAgICAnZXhwZXJpbWVudGFsIGZsYWcgYW5kIHByb3ZpZGVzIG5vIHN0YWJpbGl0eS4gTXVsdGlwbGUgJwogICAgICAgICAnLS1iZWFtX3BsdWdpbiBvcHRpb25zIGNhbiBiZSBzcGVjaWZpZWQgaWYgbW9yZSB0aGFuIG9uZSBwbHVnaW4gJwogICAgICAgICAnaXMgbmVlZGVkLicpKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1zYXZlX21haW5fc2Vzc2lvbicsCiAgICAgICAgZGVmYXVsdD1GYWxzZSwKICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAogICAgICAgIGhlbHA9CiAgICAgICAgKCdTYXZlIHRoZSBtYWluIHNlc3Npb24gc3RhdGUgc28gdGhhdCBwaWNrbGVkIGZ1bmN0aW9ucyBhbmQgY2xhc3NlcyAnCiAgICAgICAgICdkZWZpbmVkIGluIF9fbWFpbl9fIChlLmcuIGludGVyYWN0aXZlIHNlc3Npb24pIGNhbiBiZSB1bnBpY2tsZWQuICcKICAgICAgICAgJ1NvbWUgd29ya2Zsb3dzIGRvIG5vdCBuZWVkIHRoZSBzZXNzaW9uIHN0YXRlIGlmIGZvciBpbnN0YW5jZSBhbGwgJwogICAgICAgICAndGhlaXIgZnVuY3Rpb25zL2NsYXNzZXMgYXJlIGRlZmluZWQgaW4gcHJvcGVyIG1vZHVsZXMgKG5vdCBfX21haW5fXyknCiAgICAgICAgICcgYW5kIHRoZSBtb2R1bGVzIGFyZSBpbXBvcnRhYmxlIGluIHRoZSB3b3JrZXIuICcpKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1zZGtfbG9jYXRpb24nLAogICAgICAgIGRlZmF1bHQ9J2RlZmF1bHQnLAogICAgICAgIGhlbHA9CiAgICAgICAgKCdPdmVycmlkZSB0aGUgZGVmYXVsdCBsb2NhdGlvbiBmcm9tIHdoZXJlIHRoZSBCZWFtIFNESyBpcyBkb3dubG9hZGVkLiAnCiAgICAgICAgICdJdCBjYW4gYmUgYSBVUkwsIGEgR0NTIHBhdGgsIG9yIGEgbG9jYWwgcGF0aCB0byBhbiBTREsgdGFyYmFsbC4gJwogICAgICAgICAnV29ya2Zsb3cgc3VibWlzc2lvbnMgd2lsbCBkb3dubG9hZCBvciBjb3B5IGFuIFNESyB0YXJiYWxsIGZyb20gaGVyZS4gJwogICAgICAgICAnSWYgc2V0IHRvIHRoZSBzdHJpbmcgImRlZmF1bHQiLCBhIHN0YW5kYXJkIFNESyBsb2NhdGlvbiBpcyB1c2VkLiBJZiAnCiAgICAgICAgICdlbXB0eSwgbm8gU0RLIGlzIGNvcGllZC4nKSkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tZXh0cmFfcGFja2FnZScsICctLWV4dHJhX3BhY2thZ2VzJywKICAgICAgICBkZXN0PSdleHRyYV9wYWNrYWdlcycsCiAgICAgICAgYWN0aW9uPSdhcHBlbmQnLAogICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICBoZWxwPQogICAgICAgICgnTG9jYWwgcGF0aCB0byBhIFB5dGhvbiBwYWNrYWdlIGZpbGUuIFRoZSBmaWxlIGlzIGV4cGVjdGVkIHRvIGJlICgxKSAnCiAgICAgICAgICdhIHBhY2thZ2UgdGFyYmFsbCAoIi50YXIiKSwgKDIpIGEgY29tcHJlc3NlZCBwYWNrYWdlIHRhcmJhbGwgJwogICAgICAgICAnKCIudGFyLmd6IiksICgzKSBhIFdoZWVsIGZpbGUgKCIud2hsIikgb3IgKDQpIGEgY29tcHJlc3NlZCBwYWNrYWdlICcKICAgICAgICAgJ3ppcCBmaWxlICgiLnppcCIpIHdoaWNoIGNhbiBiZSBpbnN0YWxsZWQgdXNpbmcgdGhlICJwaXAgaW5zdGFsbCIgJwogICAgICAgICAnY29tbWFuZCAgb2YgdGhlIHN0YW5kYXJkIHBpcCBwYWNrYWdlLiBNdWx0aXBsZSAtLWV4dHJhX3BhY2thZ2UgJwogICAgICAgICAnb3B0aW9ucyBjYW4gYmUgc3BlY2lmaWVkIGlmIG1vcmUgdGhhbiBvbmUgcGFja2FnZSBpcyBuZWVkZWQuIER1cmluZyAnCiAgICAgICAgICdqb2Igc3VibWlzc2lvbiwgdGhlIGZpbGVzIHdpbGwgYmUgc3RhZ2VkIGluIHRoZSBzdGFnaW5nIGFyZWEgJwogICAgICAgICAnKC0tc3RhZ2luZ19sb2NhdGlvbiBvcHRpb24pIGFuZCB0aGUgd29ya2VycyB3aWxsIGluc3RhbGwgdGhlbSBpbiAnCiAgICAgICAgICdzYW1lIG9yZGVyIHRoZXkgd2VyZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZS4nKSkKCgpjbGFzcyBQb3J0YWJsZU9wdGlvbnMoUGlwZWxpbmVPcHRpb25zKToKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIF9hZGRfYXJncGFyc2VfYXJncyhjbHMsIHBhcnNlcik6CiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWpvYl9lbmRwb2ludCcsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0KICAgICAgICAgICAgICAgICAgICAgICAgKCdKb2Igc2VydmljZSBlbmRwb2ludCB0byB1c2UuIFNob3VsZCBiZSBpbiB0aGUgZm9ybSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAnb2YgYWRkcmVzcyBhbmQgcG9ydCwgZS5nLiBsb2NhbGhvc3Q6MzAwMCcpKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1lbnZpcm9ubWVudF90eXBlJywgZGVmYXVsdD1Ob25lLAogICAgICAgIGhlbHA9KCdTZXQgdGhlIGRlZmF1bHQgZW52aXJvbm1lbnQgdHlwZSBmb3IgcnVubmluZyAnCiAgICAgICAgICAgICAgJ3VzZXIgY29kZS4gUG9zc2libGUgb3B0aW9ucyBhcmUgRE9DS0VSIGFuZCBQUk9DRVNTLicpKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1lbnZpcm9ubWVudF9jb25maWcnLCBkZWZhdWx0PU5vbmUsCiAgICAgICAgaGVscD0oJ1NldCBlbnZpcm9ubWVudCBjb25maWd1cmF0aW9uIGZvciBydW5uaW5nIHRoZSB1c2VyIGNvZGUuXG4gRm9yICcKICAgICAgICAgICAgICAnRE9DS0VSOiBVcmwgZm9yIHRoZSBkb2NrZXIgaW1hZ2UuXG4gRm9yIFBST0NFU1M6IGpzb24gb2YgdGhlICcKICAgICAgICAgICAgICAnZm9ybSB7Im9zIjogIjxPUz4iLCAiYXJjaCI6ICI8QVJDSElURUNUVVJFPiIsICJjb21tYW5kIjogJwogICAgICAgICAgICAgICciPHByb2Nlc3MgdG8gZXhlY3V0ZT4iLCAiZW52Ijp7IjxFbnZpcm9ubWVudCB2YXJpYWJsZXMgMT4iOiAnCiAgICAgICAgICAgICAgJyI8RU5WX1ZBTD4ifSB9LiBBbGwgZmllbGRzIGluIHRoZSBqc29uIGFyZSBvcHRpb25hbCBleGNlcHQgJwogICAgICAgICAgICAgICdjb21tYW5kLicpKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1lbnZpcm9ubWVudF9jYWNoZV9taWxsaXMnLCBkZWZhdWx0PTAsCiAgICAgICAgaGVscD0oJ0R1cmF0aW9uIGluIG1pbGxpc2Vjb25kcyBmb3IgZW52aXJvbm1lbnQgY2FjaGUgd2l0aGluIGEgam9iLiAnCiAgICAgICAgICAgICAgJzAgbWVhbnMgbm8gY2FjaGluZy4nKSkKCgpjbGFzcyBGbGlua09wdGlvbnMoUGlwZWxpbmVPcHRpb25zKToKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIF9hZGRfYXJncGFyc2VfYXJncyhjbHMsIHBhcnNlcik6CiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZsaW5rX21hc3RlcicsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9c3RyLAogICAgICAgICAgICAgICAgICAgICAgICBoZWxwPQogICAgICAgICAgICAgICAgICAgICAgICAoJ0FkZHJlc3Mgb2YgdGhlIEZsaW5rIG1hc3RlciB3aGVyZSB0aGUgcGlwZWxpbmUgJwogICAgICAgICAgICAgICAgICAgICAgICAgJ3Nob3VsZCBiZSBleGVjdXRlZC4gQ2FuIGVpdGhlciBiZSBvZiB0aGUgZm9ybSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAnXCdob3N0OnBvcnRcJyBvciBvbmUgb2YgdGhlIHNwZWNpYWwgdmFsdWVzICcKICAgICAgICAgICAgICAgICAgICAgICAgICdbbG9jYWxdLCBbY29sbGVjdGlvbl0sIG9yIFthdXRvXS4nKSkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tcGFyYWxsZWxpc20nLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlPWludCwKICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0KICAgICAgICAgICAgICAgICAgICAgICAgKCdUaGUgZGVncmVlIG9mIHBhcmFsbGVsaXNtIHRvIGJlIHVzZWQgd2hlbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAnZGlzdHJpYnV0aW5nIG9wZXJhdGlvbnMgb250byB3b3JrZXJzLicpKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1zaHV0ZG93bl9zb3VyY2VzX29uX2ZpbmFsX3dhdGVybWFyaycsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9CiAgICAgICAgICAgICAgICAgICAgICAgICgnSWYgc2V0IHRvIHRydWUsIGFsbG93cyBzb3VyY2VzIHRvIHNodXRkb3duICcKICAgICAgICAgICAgICAgICAgICAgICAgICdhZnRlciBlbWl0dGluZyB0aGUgZmluYWwgV2F0ZXJtYXJrLiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAnTm90ZTogQ2hlY2twb2ludHMvU2F2ZXBvaW50cyBjYW4gb25seSBiZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAndGFrZW4gd2hlbiBhbGwgb3BlcmF0b3JzLCBpbmNsdWRpbmcgc291cmNlcywgJwogICAgICAgICAgICAgICAgICAgICAgICAgJ2FyZSBydW5uaW5nLicpKQoKCmNsYXNzIFRlc3RPcHRpb25zKFBpcGVsaW5lT3B0aW9ucyk6CgogIEBjbGFzc21ldGhvZAogIGRlZiBfYWRkX2FyZ3BhcnNlX2FyZ3MoY2xzLCBwYXJzZXIpOgogICAgIyBPcHRpb25zIGZvciBlMmUgdGVzdCBwaXBlbGluZS4KICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tb25fc3VjY2Vzc19tYXRjaGVyJywKICAgICAgICBkZWZhdWx0PU5vbmUsCiAgICAgICAgaGVscD0oJ1ZlcmlmeSBzdGF0ZS9vdXRwdXQgb2YgZTJlIHRlc3QgcGlwZWxpbmUuIFRoaXMgaXMgcGlja2xlZCAnCiAgICAgICAgICAgICAgJ3ZlcnNpb24gb2YgdGhlIG1hdGNoZXIgd2hpY2ggc2hvdWxkIGV4dGVuZHMgJwogICAgICAgICAgICAgICdoYW1jcmVzdC5jb3JlLmJhc2VfbWF0Y2hlci5CYXNlTWF0Y2hlci4nKSkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tZHJ5X3J1bicsCiAgICAgICAgZGVmYXVsdD1GYWxzZSwKICAgICAgICBoZWxwPSgnVXNlZCBpbiB1bml0IHRlc3RpbmcgcnVubmVycyB3aXRob3V0IHN1Ym1pdHRpbmcgdGhlICcKICAgICAgICAgICAgICAnYWN0dWFsIGpvYi4nKSkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0td2FpdF91bnRpbF9maW5pc2hfZHVyYXRpb24nLAogICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICB0eXBlPWludCwKICAgICAgICBoZWxwPSdUaGUgdGltZSB0byB3YWl0IChpbiBtaWxsaXNlY29uZHMpIGZvciB0ZXN0IHBpcGVsaW5lIHRvIGZpbmlzaC4gJwogICAgICAgICAgICAgJ0lmIGl0IGlzIHNldCB0byBOb25lLCBpdCB3aWxsIHdhaXQgaW5kZWZpbml0ZWx5IHVudGlsIHRoZSBqb2IgJwogICAgICAgICAgICAgJ2lzIGZpbmlzaGVkLicpCgogIGRlZiB2YWxpZGF0ZShzZWxmLCB2YWxpZGF0b3IpOgogICAgZXJyb3JzID0gW10KICAgIGlmIHNlbGYudmlld19hcyhUZXN0T3B0aW9ucykub25fc3VjY2Vzc19tYXRjaGVyOgogICAgICBlcnJvcnMuZXh0ZW5kKHZhbGlkYXRvci52YWxpZGF0ZV90ZXN0X21hdGNoZXIoc2VsZiwgJ29uX3N1Y2Nlc3NfbWF0Y2hlcicpKQogICAgcmV0dXJuIGVycm9ycwoKCmNsYXNzIFRlc3REYXRhZmxvd09wdGlvbnMoUGlwZWxpbmVPcHRpb25zKToKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIF9hZGRfYXJncGFyc2VfYXJncyhjbHMsIHBhcnNlcik6CiAgICAjIFRoaXMgb3B0aW9uIGlzIHBhc3NlZCB0byBEYXRhZmxvdyBSdW5uZXIncyBQdWIvU3ViIGNsaWVudC4gVGhlIGNhbWVsQ2FzZQogICAgIyBzdHlsZSBpbiAnZGVzdCcgbWF0Y2hlcyB0aGUgcnVubmVyJ3MuCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLXB1YnN1Yl9yb290X3VybCcsCiAgICAgICAgZGVzdD0ncHVic3ViUm9vdFVybCcsCiAgICAgICAgZGVmYXVsdD1Ob25lLAogICAgICAgIGhlbHA9J1Jvb3QgVVJMIGZvciB1c2Ugd2l0aCB0aGUgR29vZ2xlIENsb3VkIFB1Yi9TdWIgQVBJLicsKQoKCiMgVE9ETyhzaWx2aXVjKTogQWRkIC0tZmlsZXNfdG9fc3RhZ2Ugb3B0aW9uLgojIFRoaXMgY291bGQgcG90ZW50aWFsbHkgcmVwbGFjZSB0aGUgLS1yZXF1aXJlbWVudHNfZmlsZSBhbmQgLS1zZXR1cF9maWxlLgoKIyBUT0RPKHNpbHZpdWMpOiBOb24tc3RhbmRhcmQgb3B0aW9ucy4gS2VlcCB0aGVtPyBJZiB5ZXMsIGFkZCBoZWxwIHRvbyEKIyBSZW1vdGUgZXhlY3V0aW9uIG11c3QgY2hlY2sgdGhhdCB0aGlzIG9wdGlvbiBpcyBub3QgTm9uZS4KCgpjbGFzcyBPcHRpb25zQ29udGV4dChvYmplY3QpOgogICIiIlNldCBkZWZhdWx0IHBpcGVsaW5lIG9wdGlvbnMgZm9yIHBpcGVsaW5lcyBjcmVhdGVkIGluIHRoaXMgYmxvY2suCgogIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgcGlwZWxpbmVzIGltcGxpY2l0bHkgY3JlYXRlZCB3aXRoIHRoZQoKICAgICAgW3B5dGhvbiBsaXN0XSB8IFBUcmFuc2Zvcm0KCiAgY29uc3RydWN0LgoKICBDYW4gYWxzbyBiZSB1c2VkIGFzIGEgZGVjb3JhdG9yLgogICIiIgogIG92ZXJyaWRlcyA9IFtdCgogIGRlZiBfX2luaXRfXyhzZWxmLCAqKm9wdGlvbnMpOgogICAgc2VsZi5vcHRpb25zID0gb3B0aW9ucwoKICBkZWYgX19lbnRlcl9fKHNlbGYpOgogICAgc2VsZi5vdmVycmlkZXMuYXBwZW5kKHNlbGYub3B0aW9ucykKCiAgZGVmIF9fZXhpdF9fKHNlbGYsICpleG5faW5mbyk6CiAgICBzZWxmLm92ZXJyaWRlcy5wb3AoKQoKICBkZWYgX19jYWxsX18oc2VsZiwgZiwgKmFyZ3MsICoqa3dhcmdzKToKCiAgICBkZWYgd3JhcHBlcigqYXJncywgKiprd2FyZ3MpOgogICAgICB3aXRoIHNlbGY6CiAgICAgICAgZigqYXJncywgKiprd2FyZ3MpCgogICAgcmV0dXJuIHdyYXBwZXIKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIGF1Z21lbnRfb3B0aW9ucyhjbHMsIG9wdGlvbnMpOgogICAgZm9yIG92ZXJyaWRlIGluIGNscy5vdmVycmlkZXM6CiAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBvdmVycmlkZS5pdGVtcygpOgogICAgICAgIHNldGF0dHIob3B0aW9ucywgbmFtZSwgdmFsdWUpCiAgICByZXR1cm4gb3B0aW9ucwp9cr2CAAAoWCUAAABHb29nbGVDbG91ZE9wdGlvbnMuX2FkZF9hcmdwYXJzZV9hcmdzWAMAAABkZWZNXAFNlgGHWBsAAABQaXBlbGluZU9wdGlvbnMuX19nZXRhdHRyX19YAwAAAGRlZkv+TQgBh1gfAAAAT3B0aW9uc0NvbnRleHQuX19jYWxsX18ud3JhcHBlclgDAAAAZGVmTSwDTS8Dh1geAAAAT3B0aW9uc0NvbnRleHQuYXVnbWVudF9vcHRpb25zWAMAAABkZWZNMgNNOAOHWBIAAABHb29nbGVDbG91ZE9wdGlvbnNYBQAAAGNsYXNzTVQBTaYBh1gcAAAAX3N0YXRpY192YWx1ZV9wcm92aWRlcl9vZi5fZlgDAAAAZGVmSzlLPIdYFwAAAFBpcGVsaW5lT3B0aW9ucy5fX2Rpcl9fWAMAAABkZWZL+kv9h1gNAAAARGlyZWN0T3B0aW9uc1gFAAAAY2xhc3NNQAFNUgGHWBMAAABUZXN0RGF0YWZsb3dPcHRpb25zWAUAAABjbGFzc00AA00LA4dYDAAAAERlYnVnT3B0aW9uc1gFAAAAY2xhc3NNMQJNQQKHWA8AAABTdGFuZGFyZE9wdGlvbnNYBQAAAGNsYXNzTRgBTScBh1gQAAAAUHJvZmlsaW5nT3B0aW9uc1gFAAAAY2xhc3NNQwJNVQKHWB8AAABTZXR1cE9wdGlvbnMuX2FkZF9hcmdwYXJzZV9hcmdzWAMAAABkZWZNWQJNqQKHWCoAAABIYWRvb3BGaWxlU3lzdGVtT3B0aW9ucy5fYWRkX2FyZ3BhcnNlX2FyZ3NYAwAAAGRlZk2rAU28AYdYFwAAAFBpcGVsaW5lT3B0aW9ucy52aWV3X2FzWAMAAABkZWZL8Uv1h1gbAAAAUGlwZWxpbmVPcHRpb25zLl9fc2V0YXR0cl9fWAMAAABkZWZNCQFNEQGHWC8AAABfQmVhbUFyZ3VtZW50UGFyc2VyLmFkZF92YWx1ZV9wcm92aWRlcl9hcmd1bWVudFgDAAAAZGVmS01LbIdYFwAAAE9wdGlvbnNDb250ZXh0Ll9faW5pdF9fWAMAAABkZWZNIQNNIwOHWAwAAABGbGlua09wdGlvbnNYBQAAAGNsYXNzTcYCTd8Ch1gfAAAARmxpbmtPcHRpb25zLl9hZGRfYXJncGFyc2VfYXJnc1gDAAAAZGVmTcgCTd8Ch1giAAAAUG9ydGFibGVPcHRpb25zLl9hZGRfYXJncGFyc2VfYXJnc1gDAAAAZGVmTa0CTcQCh1gXAAAASGFkb29wRmlsZVN5c3RlbU9wdGlvbnNYBQAAAGNsYXNzTagBTcEBh1gNAAAAV29ya2VyT3B0aW9uc1gFAAAAY2xhc3NNxQFNLwKHWB8AAABQaXBlbGluZU9wdGlvbnMuZnJvbV9kaWN0aW9uYXJ5WAMAAABkZWZLs0vJh1gPAAAAUGlwZWxpbmVPcHRpb25zWAUAAABjbGFzc0t2TRYBh1ggAAAAV29ya2VyT3B0aW9ucy5fYWRkX2FyZ3BhcnNlX2FyZ3NYAwAAAGRlZk3IAU0oAodYFgAAAFdvcmtlck9wdGlvbnMudmFsaWRhdGVYAwAAAGRlZk0pAk0vAodYCwAAAFR5cGVPcHRpb25zWAUAAABjbGFzc00pAU0+AYdYJgAAAFRlc3REYXRhZmxvd09wdGlvbnMuX2FkZF9hcmdwYXJzZV9hcmdzWAMAAABkZWZNAgNNCwOHWCMAAABQcm9maWxpbmdPcHRpb25zLl9hZGRfYXJncGFyc2VfYXJnc1gDAAAAZGVmTUUCTVUCh1gfAAAAUGlwZWxpbmVPcHRpb25zLmdldF9hbGxfb3B0aW9uc1gDAAAAZGVmS8pL7YdYCwAAAFRlc3RPcHRpb25zWAUAAABjbGFzc03hAk3+AodYFAAAAFRlc3RPcHRpb25zLnZhbGlkYXRlWAMAAABkZWZN+QJN/gKHWBkAAABfc3RhdGljX3ZhbHVlX3Byb3ZpZGVyX29mWAMAAABkZWZLLks9h1ggAAAARGlyZWN0T3B0aW9ucy5fYWRkX2FyZ3BhcnNlX2FyZ3NYAwAAAGRlZk1DAU1SAYdYJAAAAFBpcGVsaW5lT3B0aW9ucy5fdmlzaWJsZV9vcHRpb25fbGlzdFgDAAAAZGVmS/ZL+YdYGwAAAEdvb2dsZUNsb3VkT3B0aW9ucy52YWxpZGF0ZVgDAAAAZGVmTZcBTaYBh1gOAAAAT3B0aW9uc0NvbnRleHRYBQAAAGNsYXNzTRQDTTgDh1gXAAAAUGlwZWxpbmVPcHRpb25zLl9fc3RyX19YAwAAAGRlZk0SAU0WAYdYIgAAAFN0YW5kYXJkT3B0aW9ucy5fYWRkX2FyZ3BhcnNlX2FyZ3NYAwAAAGRlZk0cAU0nAYdYHwAAAERlYnVnT3B0aW9ucy5fYWRkX2FyZ3BhcnNlX2FyZ3NYAwAAAGRlZk0zAk1BAodYDAAAAFNldHVwT3B0aW9uc1gFAAAAY2xhc3NNVwJNqQKHWB4AAABUeXBlT3B0aW9ucy5fYWRkX2FyZ3BhcnNlX2FyZ3NYAwAAAGRlZk0rAU0+AYdYFwAAAE9wdGlvbnNDb250ZXh0Ll9fZXhpdF9fWAMAAABkZWZNJwNNKQOHWCIAAABQaXBlbGluZU9wdGlvbnMuX2FkZF9hcmdwYXJzZV9hcmdzWAMAAABkZWZLrkuyh1geAAAAVGVzdE9wdGlvbnMuX2FkZF9hcmdwYXJzZV9hcmdzWAMAAABkZWZN4wJN+AKHWBgAAABPcHRpb25zQ29udGV4dC5fX2VudGVyX19YAwAAAGRlZk0kA00mA4dYEwAAAF9CZWFtQXJndW1lbnRQYXJzZXJYBQAAAGNsYXNzSz9LdIdYDwAAAFBvcnRhYmxlT3B0aW9uc1gFAAAAY2xhc3NNqwJNxAKHWBcAAABPcHRpb25zQ29udGV4dC5fX2NhbGxfX1gDAAAAZGVmTSoDTTEDh1gcAAAAUGlwZWxpbmVPcHRpb25zLmRpc3BsYXlfZGF0YVgDAAAAZGVmS+5L8IdYGAAAAFBpcGVsaW5lT3B0aW9ucy5fX2luaXRfX1gDAAAAZGVmS5FLrYdYGQAAAF9CZWFtQXJndW1lbnRQYXJzZXIuZXJyb3JYAwAAAGRlZktwS3SHWCAAAABIYWRvb3BGaWxlU3lzdGVtT3B0aW9ucy52YWxpZGF0ZVgDAAAAZGVmTb0BTcEBh3V9cr6CAAAoWAsAAABUZXN0T3B0aW9uc1gkAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zcr+CAABYFgAAAFdvcmtlck9wdGlvbnMudmFsaWRhdGVqv4IAAFgLAAAAVHlwZU9wdGlvbnNqv4IAAFgXAAAAUGlwZWxpbmVPcHRpb25zLnZpZXdfYXNqv4IAAFgSAAAAR29vZ2xlQ2xvdWRPcHRpb25zar+CAABYDQAAAERpcmVjdE9wdGlvbnNqv4IAAFggAAAASGFkb29wRmlsZVN5c3RlbU9wdGlvbnMudmFsaWRhdGVqv4IAAFgfAAAAUGlwZWxpbmVPcHRpb25zLmdldF9hbGxfb3B0aW9uc2q/ggAAWBsAAABHb29nbGVDbG91ZE9wdGlvbnMudmFsaWRhdGVqv4IAAFgMAAAAU2V0dXBPcHRpb25zar+CAABYDwAAAFBpcGVsaW5lT3B0aW9uc2q/ggAAWBQAAABUZXN0T3B0aW9ucy52YWxpZGF0ZWq/ggAAWBwAAABQaXBlbGluZU9wdGlvbnMuZGlzcGxheV9kYXRhar+CAABYDAAAAERlYnVnT3B0aW9uc2q/ggAAWA8AAABTdGFuZGFyZE9wdGlvbnNqv4IAAFgNAAAAV29ya2VyT3B0aW9uc2q/ggAAWB8AAABQaXBlbGluZU9wdGlvbnMuZnJvbV9kaWN0aW9uYXJ5ar+CAABYEAAAAFByb2ZpbGluZ09wdGlvbnNqv4IAAFgXAAAASGFkb29wRmlsZVN5c3RlbU9wdGlvbnNqv4IAAHVqfWkAAFgkAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zcsCCAACFgXLBggAAfXLCggAAYnRyw4IAAFU3YXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsubmV4bWFya19sYXVuY2hlcihY5SQAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiTmV4bWFyayBsYXVuY2hlci4KClRoZSBOZXhtYXJrIHN1aXRlIGlzIGEgc2VyaWVzIG9mIHF1ZXJpZXMgKHN0cmVhbWluZyBwaXBlbGluZXMpIHBlcmZvcm1lZApvbiBhIHNpbXVsYXRpb24gb2YgYXVjdGlvbiBldmVudHMuIFRoZSBsYXVuY2hlciBvcmNoZXN0cmF0ZXMgdGhlIGdlbmVyYXRpb24KYW5kIHBhcnNpbmcgb2Ygc3RyZWFtaW5nIGV2ZW50cyBhbmQgdGhlIHJ1bm5pbmcgb2YgcXVlcmllcy4KCk1vZGVsCiAgLSBQZXJzb246IEF1dGhvciBvZiBhbiBhdWN0aW9uIG9yIGEgYmlkLgogIC0gQXVjdGlvbjogSXRlbSB1bmRlciBhdWN0aW9uLgogIC0gQmlkOiBBIGJpZCBmb3IgYW4gaXRlbSB1bmRlciBhdWN0aW9uLgoKRXZlbnRzCiAtIENyZWF0ZSBQZXJzb24KIC0gQ3JlYXRlIEF1Y3Rpb24KIC0gQ3JlYXRlIEJpZAoKUXVlcmllcwogIC0gUXVlcnkwOiBQYXNzIHRocm91Z2ggKHNlbmQgYW5kIHJlY2VpdmUgYXVjdGlvbiBldmVudHMpLgoKVXNhZ2UKICAtIERpcmVjdFJ1bm5lcgogICAgICBweXRob24gbmV4bWFya19sYXVuY2hlci5weSBcCiAgICAgICAgICAtLXF1ZXJ5L3EgPHF1ZXJ5IG51bWJlcj4gXAogICAgICAgICAgLS1wcm9qZWN0IDxwcm9qZWN0IGlkPiBcCiAgICAgICAgICAtLWxvZ2xldmVsPURFQlVHIChvcHRpb25hbCkgXAogICAgICAgICAgLS13YWl0X3VudGlsX2ZpbmlzaF9kdXJhdGlvbiA8dGltZV9pbl9tcz4gXAogICAgICAgICAgLS1zdHJlYW1pbmcKCiAgLSBEYXRhZmxvd1J1bm5lcgogICAgICBweXRob24gbmV4bWFya19sYXVuY2hlci5weSBcCiAgICAgICAgICAtLXF1ZXJ5L3EgPHF1ZXJ5IG51bWJlcj4gXAogICAgICAgICAgLS1wcm9qZWN0IDxwcm9qZWN0IGlkPiBcCiAgICAgICAgICAtLWxvZ2xldmVsPURFQlVHIChvcHRpb25hbCkgXAogICAgICAgICAgLS13YWl0X3VudGlsX2ZpbmlzaF9kdXJhdGlvbiA8dGltZV9pbl9tcz4gXAogICAgICAgICAgLS1zdHJlYW1pbmcgXAogICAgICAgICAgLS1zZGtfbG9jYXRpb24gPGFwYWNoZV9iZWFtIHRhci5nej4gXAogICAgICAgICAgLS1zdGFnaW5nX2xvY2F0aW9uPWdzOi8vLi4uIFwKICAgICAgICAgIC0tdGVtcF9sb2NhdGlvbj1nczovLwoKIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydApmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCgppbXBvcnQgYXJncGFyc2UKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHN5cwppbXBvcnQgdXVpZAoKZnJvbSBnb29nbGUuY2xvdWQgaW1wb3J0IHB1YnN1YgoKaW1wb3J0IGFwYWNoZV9iZWFtIGFzIGJlYW0KZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IEdvb2dsZUNsb3VkT3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgUGlwZWxpbmVPcHRpb25zCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBTZXR1cE9wdGlvbnMKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IFN0YW5kYXJkT3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgVGVzdE9wdGlvbnMKZnJvbSBhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5uZXhtYXJrX3V0aWwgaW1wb3J0IENvbW1hbmQKZnJvbSBhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5xdWVyaWVzIGltcG9ydCBxdWVyeTAKZnJvbSBhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5xdWVyaWVzIGltcG9ydCBxdWVyeTEKZnJvbSBhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5xdWVyaWVzIGltcG9ydCBxdWVyeTIKCgpjbGFzcyBOZXhtYXJrTGF1bmNoZXIob2JqZWN0KToKICBkZWYgX19pbml0X18oc2VsZik6CiAgICBzZWxmLnBhcnNlX2FyZ3MoKQogICAgc2VsZi51dWlkID0gc3RyKHV1aWQudXVpZDQoKSkKICAgIHNlbGYudG9waWNfbmFtZSA9IHNlbGYuYXJncy50b3BpY19uYW1lICsgc2VsZi51dWlkCiAgICBzZWxmLnN1YnNjcmlwdGlvbl9uYW1lID0gc2VsZi5hcmdzLnN1YnNjcmlwdGlvbl9uYW1lICsgc2VsZi51dWlkCiAgICBwdWJsaXNoX2NsaWVudCA9IHB1YnN1Yi5DbGllbnQocHJvamVjdD1zZWxmLnByb2plY3QpCiAgICB0b3BpYyA9IHB1Ymxpc2hfY2xpZW50LnRvcGljKHNlbGYudG9waWNfbmFtZSkKICAgIGlmIHRvcGljLmV4aXN0cygpOgogICAgICBsb2dnaW5nLmluZm8oJ2RlbGV0aW5nIHRvcGljICVzJywgc2VsZi50b3BpY19uYW1lKQogICAgICB0b3BpYy5kZWxldGUoKQogICAgbG9nZ2luZy5pbmZvKCdjcmVhdGluZyB0b3BpYyAlcycsIHNlbGYudG9waWNfbmFtZSkKICAgIHRvcGljLmNyZWF0ZSgpCiAgICBzdWIgPSB0b3BpYy5zdWJzY3JpcHRpb24oc2VsZi5zdWJzY3JpcHRpb25fbmFtZSkKICAgIGlmIHN1Yi5leGlzdHMoKToKICAgICAgbG9nZ2luZy5pbmZvKCdkZWxldGluZyBzdWIgJXMnLCBzZWxmLnRvcGljX25hbWUpCiAgICAgIHN1Yi5kZWxldGUoKQogICAgbG9nZ2luZy5pbmZvKCdjcmVhdGluZyBzdWIgJXMnLCBzZWxmLnRvcGljX25hbWUpCiAgICBzdWIuY3JlYXRlKCkKCiAgZGVmIHBhcnNlX2FyZ3Moc2VsZik6CiAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCgogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1xdWVyeScsICctcScsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9aW50LAogICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J2FwcGVuZCcsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkPVRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgIGNob2ljZXM9WzAsIDEsIDJdLAogICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdRdWVyeSB0byBydW4nKQoKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tc3Vic2NyaXB0aW9uX25hbWUnLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlPXN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nUHViL1N1YiBzdWJzY3JpcHRpb24gdG8gcmVhZCBmcm9tJykKCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXRvcGljX25hbWUnLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlPXN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nUHViL1N1YiB0b3BpYyB0byByZWFkIGZyb20nKQoKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tbG9nbGV2ZWwnLAogICAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzPVsnREVCVUcnLCAnSU5GTycsICdXQVJOSU5HJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0VSUk9SJywgJ0NSSVRJQ0FMJ10sCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9J0lORk8nLAogICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdTZXQgbG9nZ2luZyBsZXZlbCB0byBkZWJ1ZycpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWlucHV0JywKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1zdHIsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkPVRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1BhdGggdG8gdGhlIGRhdGEgZmlsZSBjb250YWluaW5nIG5leG1hcmsgZXZlbnRzLicpCgogICAgc2VsZi5hcmdzLCBzZWxmLnBpcGVsaW5lX2FyZ3MgPSBwYXJzZXIucGFyc2Vfa25vd25fYXJncygpCiAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGxldmVsPWdldGF0dHIobG9nZ2luZywgc2VsZi5hcmdzLmxvZ2xldmVsLCBOb25lKSwKICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0PScoJSh0aHJlYWROYW1lKS0xMHMpICUobWVzc2FnZSlzJykKCiAgICBzZWxmLnBpcGVsaW5lX29wdGlvbnMgPSBQaXBlbGluZU9wdGlvbnMoc2VsZi5waXBlbGluZV9hcmdzKQogICAgbG9nZ2luZy5kZWJ1ZygnYXJncywgcGlwZWxpbmVfYXJnczogJXMsICVzJywgc2VsZi5hcmdzLCBzZWxmLnBpcGVsaW5lX2FyZ3MpCgogICAgIyBVc2FnZSB3aXRoIERhdGFmbG93IHJlcXVpcmVzIGEgcHJvamVjdCB0byBiZSBzdXBwbGllZC4KICAgIHNlbGYucHJvamVjdCA9IHNlbGYucGlwZWxpbmVfb3B0aW9ucy52aWV3X2FzKEdvb2dsZUNsb3VkT3B0aW9ucykucHJvamVjdAogICAgaWYgc2VsZi5wcm9qZWN0IGlzIE5vbmU6CiAgICAgIHBhcnNlci5wcmludF91c2FnZSgpCiAgICAgIHByaW50KHN5cy5hcmd2WzBdICsgJzogZXJyb3I6IGFyZ3VtZW50IC0tcHJvamVjdCBpcyByZXF1aXJlZCcpCiAgICAgIHN5cy5leGl0KDEpCgogICAgIyBQdWIvU3ViIGlzIGN1cnJlbnRseSBhdmFpbGFibGUgZm9yIHVzZSBvbmx5IGluIHN0cmVhbWluZyBwaXBlbGluZXMuCiAgICBzZWxmLnN0cmVhbWluZyA9IHNlbGYucGlwZWxpbmVfb3B0aW9ucy52aWV3X2FzKFN0YW5kYXJkT3B0aW9ucykuc3RyZWFtaW5nCiAgICBpZiBzZWxmLnN0cmVhbWluZyBpcyBOb25lOgogICAgICBwYXJzZXIucHJpbnRfdXNhZ2UoKQogICAgICBwcmludChzeXMuYXJndlswXSArICc6IGVycm9yOiBhcmd1bWVudCAtLXN0cmVhbWluZyBpcyByZXF1aXJlZCcpCiAgICAgIHN5cy5leGl0KDEpCgogICAgIyB3YWl0X3VudGlsX2ZpbmlzaCBlbnN1cmVzIHRoYXQgdGhlIHN0cmVhbWluZyBqb2IgaXMgY2FuY2VsZWQuCiAgICBzZWxmLndhaXRfdW50aWxfZmluaXNoX2R1cmF0aW9uID0gKAogICAgICAgIHNlbGYucGlwZWxpbmVfb3B0aW9ucy52aWV3X2FzKFRlc3RPcHRpb25zKS53YWl0X3VudGlsX2ZpbmlzaF9kdXJhdGlvbgogICAgKQogICAgaWYgc2VsZi53YWl0X3VudGlsX2ZpbmlzaF9kdXJhdGlvbiBpcyBOb25lOgogICAgICBwYXJzZXIucHJpbnRfdXNhZ2UoKQogICAgICBwcmludChzeXMuYXJndlswXSArICc6IGVycm9yOiBhcmd1bWVudCAtLXdhaXRfdW50aWxfZmluaXNoX2R1cmF0aW9uIGlzIHJlcXVpcmVkJykgIyBweWxpbnQ6IGRpc2FibGU9bGluZS10b28tbG9uZwogICAgICBzeXMuZXhpdCgxKQoKICAgICMgV2UgdXNlIHRoZSBzYXZlX21haW5fc2Vzc2lvbiBvcHRpb24gYmVjYXVzZSBvbmUgb3IgbW9yZSBEb0ZuJ3MgaW4gdGhpcwogICAgIyB3b3JrZmxvdyByZWx5IG9uIGdsb2JhbCBjb250ZXh0IChlLmcuLCBhIG1vZHVsZSBpbXBvcnRlZCBhdCBtb2R1bGUgbGV2ZWwpLgogICAgc2VsZi5waXBlbGluZV9vcHRpb25zLnZpZXdfYXMoU2V0dXBPcHRpb25zKS5zYXZlX21haW5fc2Vzc2lvbiA9IFRydWUKCiAgZGVmIGdlbmVyYXRlX2V2ZW50cyhzZWxmKToKICAgIHB1Ymxpc2hfY2xpZW50ID0gcHVic3ViLkNsaWVudChwcm9qZWN0PXNlbGYucHJvamVjdCkKICAgIHRvcGljID0gcHVibGlzaF9jbGllbnQudG9waWMoc2VsZi50b3BpY19uYW1lKQogICAgc3ViID0gdG9waWMuc3Vic2NyaXB0aW9uKHNlbGYuc3Vic2NyaXB0aW9uX25hbWUpCgogICAgbG9nZ2luZy5pbmZvKCdHZW5lcmF0aW5nIGF1Y3Rpb24gZXZlbnRzIHRvIHRvcGljICVzJywgdG9waWMubmFtZSkKCiAgICBpZiBzZWxmLmFyZ3MuaW5wdXQuc3RhcnRzd2l0aCgnZ3M6Ly8nKToKICAgICAgZnJvbSBhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbSBpbXBvcnQgR0NTRmlsZVN5c3RlbQogICAgICBmcyA9IEdDU0ZpbGVTeXN0ZW0oc2VsZi5waXBlbGluZV9vcHRpb25zKQogICAgICB3aXRoIGZzLm9wZW4oc2VsZi5hcmdzLmlucHV0KSBhcyBpbmZpbGU6CiAgICAgICAgZm9yIGxpbmUgaW4gaW5maWxlOgogICAgICAgICAgdG9waWMucHVibGlzaChsaW5lKQogICAgZWxzZToKICAgICAgd2l0aCBvcGVuKHNlbGYuYXJncy5pbnB1dCkgYXMgaW5maWxlOgogICAgICAgIGZvciBsaW5lIGluIGluZmlsZToKICAgICAgICAgIHRvcGljLnB1Ymxpc2gobGluZSkKCiAgICBsb2dnaW5nLmluZm8oJ0ZpbmlzaGVkIGV2ZW50IGdlbmVyYXRpb24uJykKCiAgICAjIFJlYWQgZnJvbSBQdWJTdWIgaW50byBhIFBDb2xsZWN0aW9uLgogICAgaWYgc2VsZi5hcmdzLnN1YnNjcmlwdGlvbl9uYW1lOgogICAgICByYXdfZXZlbnRzID0gc2VsZi5waXBlbGluZSB8ICdSZWFkUHViU3ViJyA+PiBiZWFtLmlvLlJlYWRGcm9tUHViU3ViKAogICAgICAgICAgc3Vic2NyaXB0aW9uPXN1Yi5mdWxsX25hbWUpCiAgICBlbHNlOgogICAgICByYXdfZXZlbnRzID0gc2VsZi5waXBlbGluZSB8ICdSZWFkUHViU3ViJyA+PiBiZWFtLmlvLlJlYWRGcm9tUHViU3ViKAogICAgICAgICAgdG9waWM9dG9waWMuZnVsbF9uYW1lKQoKICAgIHJldHVybiByYXdfZXZlbnRzCgogIGRlZiBydW5fcXVlcnkoc2VsZiwgcXVlcnksIHF1ZXJ5X2FyZ3MsIHF1ZXJ5X2Vycm9ycyk6CiAgICB0cnk6CiAgICAgIHNlbGYucGFyc2VfYXJncygpCiAgICAgIHNlbGYucGlwZWxpbmUgPSBiZWFtLlBpcGVsaW5lKG9wdGlvbnM9c2VsZi5waXBlbGluZV9vcHRpb25zKQogICAgICByYXdfZXZlbnRzID0gc2VsZi5nZW5lcmF0ZV9ldmVudHMoKQogICAgICBxdWVyeS5sb2FkKHJhd19ldmVudHMsIHF1ZXJ5X2FyZ3MpCiAgICAgIHJlc3VsdCA9IHNlbGYucGlwZWxpbmUucnVuKCkKICAgICAgam9iX2R1cmF0aW9uID0gKAogICAgICAgICAgc2VsZi5waXBlbGluZV9vcHRpb25zLnZpZXdfYXMoVGVzdE9wdGlvbnMpLndhaXRfdW50aWxfZmluaXNoX2R1cmF0aW9uCiAgICAgICkKICAgICAgaWYgc2VsZi5waXBlbGluZV9vcHRpb25zLnZpZXdfYXMoU3RhbmRhcmRPcHRpb25zKS5ydW5uZXIgPT0gJ0RhdGFmbG93UnVubmVyJzogIyBweWxpbnQ6IGRpc2FibGU9bGluZS10b28tbG9uZwogICAgICAgIHJlc3VsdC53YWl0X3VudGlsX2ZpbmlzaChkdXJhdGlvbj1qb2JfZHVyYXRpb24pCiAgICAgICAgcmVzdWx0LmNhbmNlbCgpCiAgICAgIGVsc2U6CiAgICAgICAgcmVzdWx0LndhaXRfdW50aWxfZmluaXNoKCkKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgogICAgICBxdWVyeV9lcnJvcnMuYXBwZW5kKHN0cihleGMpKQogICAgICByYWlzZQoKICBkZWYgY2xlYW51cChzZWxmKToKICAgIHB1Ymxpc2hfY2xpZW50ID0gcHVic3ViLkNsaWVudChwcm9qZWN0PXNlbGYucHJvamVjdCkKICAgIHRvcGljID0gcHVibGlzaF9jbGllbnQudG9waWMoc2VsZi50b3BpY19uYW1lKQogICAgaWYgdG9waWMuZXhpc3RzKCk6CiAgICAgIHRvcGljLmRlbGV0ZSgpCiAgICBzdWIgPSB0b3BpYy5zdWJzY3JpcHRpb24oc2VsZi5zdWJzY3JpcHRpb25fbmFtZSkKICAgIGlmIHN1Yi5leGlzdHMoKToKICAgICAgc3ViLmRlbGV0ZSgpCgogIGRlZiBydW4oc2VsZik6CiAgICBxdWVyaWVzID0gewogICAgICAgIDA6IHF1ZXJ5MCwKICAgICAgICAxOiBxdWVyeTEsCiAgICAgICAgMjogcXVlcnkyLAogICAgICAgICMgVE9ETyhtYXJpYWdoKTogQWRkIG1vcmUgcXVlcmllcy4KICAgIH0KCiAgICAjIFRPRE8obWFyaWFnaCk6IE1vdmUgdG8gYSBjb25maWcgZmlsZS4KICAgIHF1ZXJ5X2FyZ3MgPSB7CiAgICAgICAgMjogewogICAgICAgICAgICAnYXVjdGlvbl9pZCc6ICdhMTAwMycKICAgICAgICB9CiAgICB9CgogICAgcXVlcnlfZXJyb3JzID0gW10KICAgIGZvciBpIGluIHNlbGYuYXJncy5xdWVyeToKICAgICAgc2VsZi5wYXJzZV9hcmdzKCkKICAgICAgbG9nZ2luZy5pbmZvKCdSdW5uaW5nIHF1ZXJ5ICVkJywgaSkKCiAgICAgICMgVGhlIERpcmVjdFJ1bm5lciBpcyB0aGUgZGVmYXVsdCBydW5uZXIsIGFuZCBpdCBuZWVkcwogICAgICAjIHNwZWNpYWwgaGFuZGxpbmcgdG8gY2FuY2VsIHN0cmVhbWluZyBqb2JzLgogICAgICBsYXVuY2hfZnJvbV9kaXJlY3RfcnVubmVyID0gc2VsZi5waXBlbGluZV9vcHRpb25zLnZpZXdfYXMoCiAgICAgICAgICBTdGFuZGFyZE9wdGlvbnMpLnJ1bm5lciBpbiBbTm9uZSwgJ0RpcmVjdFJ1bm5lciddCgogICAgICBxdWVyeV9kdXJhdGlvbiA9IHNlbGYucGlwZWxpbmVfb3B0aW9ucy52aWV3X2FzKFRlc3RPcHRpb25zKS53YWl0X3VudGlsX2ZpbmlzaF9kdXJhdGlvbiAjIHB5bGludDogZGlzYWJsZT1saW5lLXRvby1sb25nCiAgICAgIGlmIGxhdW5jaF9mcm9tX2RpcmVjdF9ydW5uZXI6CiAgICAgICAgY29tbWFuZCA9IENvbW1hbmQoc2VsZi5ydW5fcXVlcnksIGFyZ3M9W3F1ZXJpZXNbaV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5X2FyZ3MuZ2V0KGkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeV9lcnJvcnNdKQogICAgICAgIGNvbW1hbmQucnVuKHRpbWVvdXQ9cXVlcnlfZHVyYXRpb24gLy8gMTAwMCkKICAgICAgZWxzZToKICAgICAgICB0cnk6CiAgICAgICAgICBzZWxmLnJ1bl9xdWVyeShxdWVyaWVzW2ldLCBxdWVyeV9hcmdzLmdldChpKSwgcXVlcnlfZXJyb3JzPU5vbmUpCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CiAgICAgICAgICBxdWVyeV9lcnJvcnMuYXBwZW5kKGV4YykKCiAgICBpZiBxdWVyeV9lcnJvcnM6CiAgICAgIGxvZ2dpbmcuZXJyb3IoJ1F1ZXJ5IGZhaWxlZCB3aXRoICVzJywgJywgJy5qb2luKHF1ZXJ5X2Vycm9ycykpCiAgICBlbHNlOgogICAgICBsb2dnaW5nLmluZm8oJ1F1ZXJpZXMgcnVuOiAlcycsIHNlbGYuYXJncy5xdWVyeSkKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogIGxhdW5jaGVyID0gTmV4bWFya0xhdW5jaGVyKCkKICBsYXVuY2hlci5ydW4oKQogIGxhdW5jaGVyLmNsZWFudXAoKQp9csSCAAAoWBkAAABOZXhtYXJrTGF1bmNoZXIucnVuX3F1ZXJ5WAMAAABkZWZLwUvTh1gPAAAATmV4bWFya0xhdW5jaGVyWAUAAABjbGFzc0tRTQYBh1gfAAAATmV4bWFya0xhdW5jaGVyLmdlbmVyYXRlX2V2ZW50c1gDAAAAZGVmS6NLwIdYFwAAAE5leG1hcmtMYXVuY2hlci5jbGVhbnVwWAMAAABkZWZL1Evch1gaAAAATmV4bWFya0xhdW5jaGVyLnBhcnNlX2FyZ3NYAwAAAGRlZktlS6KHWBgAAABOZXhtYXJrTGF1bmNoZXIuX19pbml0X19YAwAAAGRlZktSS2SHWBMAAABOZXhtYXJrTGF1bmNoZXIucnVuWAMAAABkZWZL3U0GAYd1fXLFggAAKFgZAAAATmV4bWFya0xhdW5jaGVyLnJ1bl9xdWVyeWr/YQAAWA8AAABOZXhtYXJrTGF1bmNoZXJq/2EAAFgfAAAATmV4bWFya0xhdW5jaGVyLmdlbmVyYXRlX2V2ZW50c2r/YQAAWBcAAABOZXhtYXJrTGF1bmNoZXIuY2xlYW51cGr/YQAAWBoAAABOZXhtYXJrTGF1bmNoZXIucGFyc2VfYXJnc2r/YQAAWBMAAABOZXhtYXJrTGF1bmNoZXIucnVuav9hAAB1an1pAABYNwAAAGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm5leG1hcmtfbGF1bmNoZXJyxoIAAIWBcseCAAB9csiCAABidFUiYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlcihYFBAAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiQSBWYWx1ZVByb3ZpZGVyIGNsYXNzIHRvIGltcGxlbWVudCB0ZW1wbGF0ZXMgd2l0aCBib3RoIHN0YXRpY2FsbHkKYW5kIGR5bmFtaWNhbGx5IHByb3ZpZGVkIHZhbHVlcy4KIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0CmZyb20gZnVuY3Rvb2xzIGltcG9ydCB3cmFwcwoKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgZXJyb3IKCl9fYWxsX18gPSBbCiAgICAnVmFsdWVQcm92aWRlcicsCiAgICAnU3RhdGljVmFsdWVQcm92aWRlcicsCiAgICAnUnVudGltZVZhbHVlUHJvdmlkZXInLAogICAgJ2NoZWNrX2FjY2Vzc2libGUnLAogICAgXQoKCmNsYXNzIFZhbHVlUHJvdmlkZXIob2JqZWN0KToKICBkZWYgaXNfYWNjZXNzaWJsZShzZWxmKToKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoCiAgICAgICAgJ1ZhbHVlUHJvdmlkZXIuaXNfYWNjZXNzaWJsZSBpbXBsZW1lbnRlZCBpbiBkZXJpdmVkIGNsYXNzZXMnCiAgICApCgogIGRlZiBnZXQoc2VsZik6CiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKAogICAgICAgICdWYWx1ZVByb3ZpZGVyLmdldCBpbXBsZW1lbnRlZCBpbiBkZXJpdmVkIGNsYXNzZXMnCiAgICApCgoKY2xhc3MgU3RhdGljVmFsdWVQcm92aWRlcihWYWx1ZVByb3ZpZGVyKToKICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWVfdHlwZSwgdmFsdWUpOgogICAgc2VsZi52YWx1ZV90eXBlID0gdmFsdWVfdHlwZQogICAgc2VsZi52YWx1ZSA9IHZhbHVlX3R5cGUodmFsdWUpCgogIGRlZiBpc19hY2Nlc3NpYmxlKHNlbGYpOgogICAgcmV0dXJuIFRydWUKCiAgZGVmIGdldChzZWxmKToKICAgIHJldHVybiBzZWxmLnZhbHVlCgogIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgcmV0dXJuIHN0cihzZWxmLnZhbHVlKQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIGlmIHNlbGYudmFsdWUgPT0gb3RoZXI6CiAgICAgIHJldHVybiBUcnVlCiAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBTdGF0aWNWYWx1ZVByb3ZpZGVyKToKICAgICAgaWYgKHNlbGYudmFsdWVfdHlwZSA9PSBvdGhlci52YWx1ZV90eXBlIGFuZAogICAgICAgICAgc2VsZi52YWx1ZSA9PSBvdGhlci52YWx1ZSk6CiAgICAgICAgcmV0dXJuIFRydWUKICAgIHJldHVybiBGYWxzZQoKICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKICAgICMgVE9ETyhCRUFNLTU5NDkpOiBOZWVkZWQgZm9yIFB5dGhvbiAyIGNvbXBhdGliaWxpdHkuCiAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKCiAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgcmV0dXJuIGhhc2goKHR5cGUoc2VsZiksIHNlbGYudmFsdWVfdHlwZSwgc2VsZi52YWx1ZSkpCgoKY2xhc3MgUnVudGltZVZhbHVlUHJvdmlkZXIoVmFsdWVQcm92aWRlcik6CiAgcnVudGltZV9vcHRpb25zID0gTm9uZQogIGV4cGVyaW1lbnRzID0gc2V0KCkKCiAgZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbl9uYW1lLCB2YWx1ZV90eXBlLCBkZWZhdWx0X3ZhbHVlKToKICAgIHNlbGYub3B0aW9uX25hbWUgPSBvcHRpb25fbmFtZQogICAgc2VsZi5kZWZhdWx0X3ZhbHVlID0gZGVmYXVsdF92YWx1ZQogICAgc2VsZi52YWx1ZV90eXBlID0gdmFsdWVfdHlwZQoKICBkZWYgaXNfYWNjZXNzaWJsZShzZWxmKToKICAgIHJldHVybiBSdW50aW1lVmFsdWVQcm92aWRlci5ydW50aW1lX29wdGlvbnMgaXMgbm90IE5vbmUKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIGdldF92YWx1ZShjbHMsIG9wdGlvbl9uYW1lLCB2YWx1ZV90eXBlLCBkZWZhdWx0X3ZhbHVlKToKICAgIGlmIG5vdCBSdW50aW1lVmFsdWVQcm92aWRlci5ydW50aW1lX29wdGlvbnM6CiAgICAgIHJldHVybiBkZWZhdWx0X3ZhbHVlCgogICAgY2FuZGlkYXRlID0gUnVudGltZVZhbHVlUHJvdmlkZXIucnVudGltZV9vcHRpb25zLmdldChvcHRpb25fbmFtZSkKICAgIGlmIGNhbmRpZGF0ZToKICAgICAgcmV0dXJuIHZhbHVlX3R5cGUoY2FuZGlkYXRlKQogICAgZWxzZToKICAgICAgcmV0dXJuIGRlZmF1bHRfdmFsdWUKCiAgZGVmIGdldChzZWxmKToKICAgIGlmIFJ1bnRpbWVWYWx1ZVByb3ZpZGVyLnJ1bnRpbWVfb3B0aW9ucyBpcyBOb25lOgogICAgICByYWlzZSBlcnJvci5SdW50aW1lVmFsdWVQcm92aWRlckVycm9yKAogICAgICAgICAgJyVzLmdldCgpIG5vdCBjYWxsZWQgZnJvbSBhIHJ1bnRpbWUgY29udGV4dCcgJSBzZWxmKQoKICAgIHJldHVybiBSdW50aW1lVmFsdWVQcm92aWRlci5nZXRfdmFsdWUoc2VsZi5vcHRpb25fbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi52YWx1ZV90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRlZmF1bHRfdmFsdWUpCgogIEBjbGFzc21ldGhvZAogIGRlZiBzZXRfcnVudGltZV9vcHRpb25zKGNscywgcGlwZWxpbmVfb3B0aW9ucyk6CiAgICBSdW50aW1lVmFsdWVQcm92aWRlci5ydW50aW1lX29wdGlvbnMgPSBwaXBlbGluZV9vcHRpb25zCiAgICBSdW50aW1lVmFsdWVQcm92aWRlci5leHBlcmltZW50cyA9IFJ1bnRpbWVWYWx1ZVByb3ZpZGVyLmdldF92YWx1ZSgKICAgICAgICAnZXhwZXJpbWVudHMnLCBzZXQsIHNldCgpKQoKICBkZWYgX19zdHJfXyhzZWxmKToKICAgIHJldHVybiAnJXMob3B0aW9uOiAlcywgdHlwZTogJXMsIGRlZmF1bHRfdmFsdWU6ICVzKScgJSAoCiAgICAgICAgc2VsZi5fX2NsYXNzX18uX19uYW1lX18sCiAgICAgICAgc2VsZi5vcHRpb25fbmFtZSwKICAgICAgICBzZWxmLnZhbHVlX3R5cGUuX19uYW1lX18sCiAgICAgICAgcmVwcihzZWxmLmRlZmF1bHRfdmFsdWUpCiAgICApCgoKZGVmIGNoZWNrX2FjY2Vzc2libGUodmFsdWVfcHJvdmlkZXJfbGlzdCk6CiAgIiIiQ2hlY2sgYWNjZXNzaWJpbGl0eSBvZiBhIGxpc3Qgb2YgVmFsdWVQcm92aWRlciBvYmplY3RzLiIiIgogIGFzc2VydCBpc2luc3RhbmNlKHZhbHVlX3Byb3ZpZGVyX2xpc3QsIGxpc3QpCgogIGRlZiBfY2hlY2tfYWNjZXNzaWJsZShmbmMpOgogICAgQHdyYXBzKGZuYykKICAgIGRlZiBfZihzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgICBmb3Igb2JqIGluIFtnZXRhdHRyKHNlbGYsIHZwKSBmb3IgdnAgaW4gdmFsdWVfcHJvdmlkZXJfbGlzdF06CiAgICAgICAgaWYgbm90IG9iai5pc19hY2Nlc3NpYmxlKCk6CiAgICAgICAgICByYWlzZSBlcnJvci5SdW50aW1lVmFsdWVQcm92aWRlckVycm9yKCclcyBub3QgYWNjZXNzaWJsZScgJSBvYmopCiAgICAgIHJldHVybiBmbmMoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQogICAgcmV0dXJuIF9mCiAgcmV0dXJuIF9jaGVja19hY2Nlc3NpYmxlCn1yyYIAAChYEQAAAFZhbHVlUHJvdmlkZXIuZ2V0WAMAAABkZWZLK0svh1ghAAAAU3RhdGljVmFsdWVQcm92aWRlci5pc19hY2Nlc3NpYmxlWAMAAABkZWZLNks4h1gQAAAAY2hlY2tfYWNjZXNzaWJsZVgDAAAAZGVmS39LjIdYGwAAAFZhbHVlUHJvdmlkZXIuaXNfYWNjZXNzaWJsZVgDAAAAZGVmSyZLKodYFwAAAFN0YXRpY1ZhbHVlUHJvdmlkZXIuZ2V0WAMAAABkZWZLOUs7h1gdAAAAUnVudGltZVZhbHVlUHJvdmlkZXIuX19pbml0X19YAwAAAGRlZktUS1iHWCIAAABjaGVja19hY2Nlc3NpYmxlLl9jaGVja19hY2Nlc3NpYmxlWAMAAABkZWZLg0uLh1giAAAAUnVudGltZVZhbHVlUHJvdmlkZXIuaXNfYWNjZXNzaWJsZVgDAAAAZGVmS1lLW4dYGAAAAFJ1bnRpbWVWYWx1ZVByb3ZpZGVyLmdldFgDAAAAZGVmS2dLb4dYJQAAAGNoZWNrX2FjY2Vzc2libGUuX2NoZWNrX2FjY2Vzc2libGUuX2ZYAwAAAGRlZkuES4qHWBsAAABTdGF0aWNWYWx1ZVByb3ZpZGVyLl9fc3RyX19YAwAAAGRlZks8Sz6HWBMAAABTdGF0aWNWYWx1ZVByb3ZpZGVyWAUAAABjbGFzc0sxS06HWBwAAABTdGF0aWNWYWx1ZVByb3ZpZGVyLl9faGFzaF9fWAMAAABkZWZLTEtOh1gaAAAAU3RhdGljVmFsdWVQcm92aWRlci5fX25lX19YAwAAAGRlZktIS0uHWBwAAABTdGF0aWNWYWx1ZVByb3ZpZGVyLl9faW5pdF9fWAMAAABkZWZLMks1h1gNAAAAVmFsdWVQcm92aWRlclgFAAAAY2xhc3NLJUsvh1gUAAAAUnVudGltZVZhbHVlUHJvdmlkZXJYBQAAAGNsYXNzS1BLfYdYKAAAAFJ1bnRpbWVWYWx1ZVByb3ZpZGVyLnNldF9ydW50aW1lX29wdGlvbnNYAwAAAGRlZktwS3WHWBwAAABSdW50aW1lVmFsdWVQcm92aWRlci5fX3N0cl9fWAMAAABkZWZLdkt9h1gaAAAAU3RhdGljVmFsdWVQcm92aWRlci5fX2VxX19YAwAAAGRlZks/S0eHWB4AAABSdW50aW1lVmFsdWVQcm92aWRlci5nZXRfdmFsdWVYAwAAAGRlZktcS2aHdX1yyoIAAChYEQAAAFZhbHVlUHJvdmlkZXIuZ2V0WCIAAABhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVycsuCAABYIQAAAFN0YXRpY1ZhbHVlUHJvdmlkZXIuaXNfYWNjZXNzaWJsZWrLggAAWB4AAABSdW50aW1lVmFsdWVQcm92aWRlci5nZXRfdmFsdWVqy4IAAFgbAAAAVmFsdWVQcm92aWRlci5pc19hY2Nlc3NpYmxlasuCAABYFwAAAFN0YXRpY1ZhbHVlUHJvdmlkZXIuZ2V0asuCAABYGAAAAFJ1bnRpbWVWYWx1ZVByb3ZpZGVyLmdldGrLggAAWBMAAABTdGF0aWNWYWx1ZVByb3ZpZGVyasuCAABYFAAAAFJ1bnRpbWVWYWx1ZVByb3ZpZGVyasuCAABYDQAAAFZhbHVlUHJvdmlkZXJqy4IAAFgiAAAAUnVudGltZVZhbHVlUHJvdmlkZXIuaXNfYWNjZXNzaWJsZWrLggAAWCgAAABSdW50aW1lVmFsdWVQcm92aWRlci5zZXRfcnVudGltZV9vcHRpb25zasuCAABYEAAAAGNoZWNrX2FjY2Vzc2libGVqy4IAAHVqfWkAAFgiAAAAYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlcnLMggAAhYFyzYIAAH1yzoIAAGJ0cs+CAABVLGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyKFivOQAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJUaGlzIG1vZHVsZSBjb250YWlucyBTcGxpdHRhYmxlIERvRm4gbG9naWMgdGhhdCBpcyBzcGVjaWZpYyB0byBEaXJlY3RSdW5uZXIuCiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdApmcm9tIHRocmVhZGluZyBpbXBvcnQgTG9jawpmcm9tIHRocmVhZGluZyBpbXBvcnQgVGltZXIKCmltcG9ydCBhcGFjaGVfYmVhbSBhcyBiZWFtCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IFRpbWVEb21haW4KZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgcHZhbHVlCmZyb20gYXBhY2hlX2JlYW0uaW8uaW9iYXNlIGltcG9ydCBSZXN0cmljdGlvblRyYWNrZXIKZnJvbSBhcGFjaGVfYmVhbS5waXBlbGluZSBpbXBvcnQgUFRyYW5zZm9ybU92ZXJyaWRlCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5jb21tb24gaW1wb3J0IERvRm5Db250ZXh0CmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5jb21tb24gaW1wb3J0IERvRm5JbnZva2VyCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5jb21tb24gaW1wb3J0IERvRm5TaWduYXR1cmUKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmNvbW1vbiBpbXBvcnQgT3V0cHV0UHJvY2Vzc29yCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXZhbHVhdGlvbl9jb250ZXh0IGltcG9ydCBEaXJlY3RTdGVwQ29udGV4dApmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnV0aWwgaW1wb3J0IEtleWVkV29ya0l0ZW0KZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC53YXRlcm1hcmtfbWFuYWdlciBpbXBvcnQgV2F0ZXJtYXJrTWFuYWdlcgpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX2NvbW1vbiBpbXBvcnQgRWxlbWVudEFuZFJlc3RyaWN0aW9uCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5zZGZfY29tbW9uIGltcG9ydCBQcm9jZXNzS2V5ZWRFbGVtZW50cwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSBpbXBvcnQgUHJvY2Vzc0NvbnRpbnVhdGlvbgpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybSBpbXBvcnQgUFRyYW5zZm9ybQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlciBpbXBvcnQgX1ZhbHVlU3RhdGVUYWcKZnJvbSBhcGFjaGVfYmVhbS51dGlscy53aW5kb3dlZF92YWx1ZSBpbXBvcnQgV2luZG93ZWRWYWx1ZQoKCmNsYXNzIFByb2Nlc3NLZXllZEVsZW1lbnRzVmlhS2V5ZWRXb3JrSXRlbXNPdmVycmlkZShQVHJhbnNmb3JtT3ZlcnJpZGUpOgogICIiIkEgdHJhbnNmb3JtIG92ZXJyaWRlIGZvciBQcm9jZXNzRWxlbWVudHMgdHJhbnNmb3JtLiIiIgoKICBkZWYgbWF0Y2hlcyhzZWxmLCBhcHBsaWVkX3B0cmFuc2Zvcm0pOgogICAgcmV0dXJuIGlzaW5zdGFuY2UoCiAgICAgICAgYXBwbGllZF9wdHJhbnNmb3JtLnRyYW5zZm9ybSwgUHJvY2Vzc0tleWVkRWxlbWVudHMpCgogIGRlZiBnZXRfcmVwbGFjZW1lbnRfdHJhbnNmb3JtKHNlbGYsIHB0cmFuc2Zvcm0pOgogICAgcmV0dXJuIFByb2Nlc3NLZXllZEVsZW1lbnRzVmlhS2V5ZWRXb3JrSXRlbXMocHRyYW5zZm9ybSkKCgpjbGFzcyBQcm9jZXNzS2V5ZWRFbGVtZW50c1ZpYUtleWVkV29ya0l0ZW1zKFBUcmFuc2Zvcm0pOgogICIiIkEgdHJhbnNmb3JtIHRoYXQgcHJvY2Vzc2VzIFNwbGl0dGFibGUgRG9GbiBpbnB1dCB2aWEgS2V5ZWRXb3JrSXRlbXMuIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9jZXNzX2tleWVkX2VsZW1lbnRzX3RyYW5zZm9ybSk6CiAgICBzZWxmLl9wcm9jZXNzX2tleWVkX2VsZW1lbnRzX3RyYW5zZm9ybSA9IHByb2Nlc3Nfa2V5ZWRfZWxlbWVudHNfdHJhbnNmb3JtCgogIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgcHJvY2Vzc19lbGVtZW50cyA9IFByb2Nlc3NFbGVtZW50cygKICAgICAgICBzZWxmLl9wcm9jZXNzX2tleWVkX2VsZW1lbnRzX3RyYW5zZm9ybSkKICAgIHByb2Nlc3NfZWxlbWVudHMuYXJncyA9ICgKICAgICAgICBzZWxmLl9wcm9jZXNzX2tleWVkX2VsZW1lbnRzX3RyYW5zZm9ybS5wdHJhbnNmb3JtX2FyZ3MpCiAgICBwcm9jZXNzX2VsZW1lbnRzLmt3YXJncyA9ICgKICAgICAgICBzZWxmLl9wcm9jZXNzX2tleWVkX2VsZW1lbnRzX3RyYW5zZm9ybS5wdHJhbnNmb3JtX2t3YXJncykKICAgIHByb2Nlc3NfZWxlbWVudHMuc2lkZV9pbnB1dHMgPSAoCiAgICAgICAgc2VsZi5fcHJvY2Vzc19rZXllZF9lbGVtZW50c190cmFuc2Zvcm0ucHRyYW5zZm9ybV9zaWRlX2lucHV0cykKICAgIHJldHVybiBwY29sbCB8IGJlYW0uY29yZS5Hcm91cEJ5S2V5KCkgfCBwcm9jZXNzX2VsZW1lbnRzCgoKY2xhc3MgUHJvY2Vzc0VsZW1lbnRzKFBUcmFuc2Zvcm0pOgogICIiIkEgcHJpbWl0aXZlIHRyYW5zZm9ybSBmb3IgcHJvY2Vzc2luZyBrZXllZCBlbGVtZW50cyBvciBLZXllZFdvcmtJdGVtcy4KCiAgV2lsbCBiZSBldmFsdWF0ZWQgYnkKICBgcnVubmVycy5kaXJlY3QudHJhbnNmb3JtX2V2YWx1YXRvci5fUHJvY2Vzc0VsZW1lbnRzRXZhbHVhdG9yYC4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2Nlc3Nfa2V5ZWRfZWxlbWVudHNfdHJhbnNmb3JtKToKICAgIHNlbGYuX3Byb2Nlc3Nfa2V5ZWRfZWxlbWVudHNfdHJhbnNmb3JtID0gcHJvY2Vzc19rZXllZF9lbGVtZW50c190cmFuc2Zvcm0KICAgIHNlbGYuc2RmID0gc2VsZi5fcHJvY2Vzc19rZXllZF9lbGVtZW50c190cmFuc2Zvcm0uc2RmCgogIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgcmV0dXJuIHB2YWx1ZS5QQ29sbGVjdGlvbihwY29sbC5waXBlbGluZSkKCiAgZGVmIG5ld19wcm9jZXNzX2ZuKHNlbGYsIHNkZik6CiAgICByZXR1cm4gUHJvY2Vzc0ZuKAogICAgICAgIHNkZiwKICAgICAgICBzZWxmLl9wcm9jZXNzX2tleWVkX2VsZW1lbnRzX3RyYW5zZm9ybS5wdHJhbnNmb3JtX2FyZ3MsCiAgICAgICAgc2VsZi5fcHJvY2Vzc19rZXllZF9lbGVtZW50c190cmFuc2Zvcm0ucHRyYW5zZm9ybV9rd2FyZ3MpCgoKY2xhc3MgUHJvY2Vzc0ZuKGJlYW0uRG9Gbik6CiAgIiIiQSBgRG9GbmAgdGhhdCBleGVjdXRlcyBtYWNoaW5lYXJ5IGZvciBpbnZva2luZyBhIFNwbGl0dGFibGUgYERvRm5gLgoKICBJbnB1dCB0byB0aGUgYFBhckRvYCBzdGVwIHRoYXQgaW5jbHVkZXMgYSBgUHJvY2Vzc0ZuYCB3aWxsIGJlIGEgYFBDb2xsZWN0aW9uYAogIG9mIGBFbGVtZW50QW5kUmVzdHJpY3Rpb25gIG9iamVjdHMuCgogIFRoaXMgY2xhc3MgaXMgbWFpbmx5IHJlc3BvbnNpYmxlIGZvciBmb2xsb3dpbmcuCiAgKDEpIHNldHVwIGVudmlyb25tZW50IGZvciBwcm9wZXJseSBpbnZva2luZyBhIFNwbGl0dGFibGUgYERvRm5gLgogICgyKSBpbnZva2UgYHByb2Nlc3MoKWAgbWV0aG9kIG9mIGEgU3BsaXR0YWJsZSBgRG9GbmAuCiAgKDMpIGFmdGVyIHRoZSBgcHJvY2VzcygpYCBpbnZvY2F0aW9uIG9mIHRoZSBTcGxpdHRhYmxlIGBEb0ZuYCwgZGV0ZXJtaW5lIGlmIGEKICByZS1pbnZvY2F0aW9uIG9mIHRoZSBlbGVtZW50IGlzIG5lZWRlZC4gSWYgdGhpcyBpcyB0aGUgY2FzZSwgc2V0IHN0YXRlIGFuZAogIGEgdGltZXIgZm9yIGEgcmUtaW52b2NhdGlvbiBhbmQgaG9sZCBvdXRwdXQgd2F0ZXJtYXJrIHRpbGwgdGhpcwogIHJlLWludm9jYXRpb24uCiAgKDQpIGFmdGVyIHRoZSBmaW5hbCBpbnZvY2F0aW9uIG9mIGEgZ2l2ZW4gZWxlbWVudCBjbGVhciBhbnkgcHJldmlvdXMgc3RhdGUgc2V0CiAgZm9yIHJlLWludm9raW5nIHRoZSBlbGVtZW50IGFuZCByZWxlYXNlIHRoZSBvdXRwdXQgd2F0ZXJtYXJrLgogICIiIgoKICBkZWYgX19pbml0X18oCiAgICAgIHNlbGYsIHNkZiwgYXJnc19mb3JfaW52b2tlciwga3dhcmdzX2Zvcl9pbnZva2VyKToKICAgIHNlbGYuc2RmID0gc2RmCiAgICBzZWxmLl9lbGVtZW50X3RhZyA9IF9WYWx1ZVN0YXRlVGFnKCdlbGVtZW50JykKICAgIHNlbGYuX3Jlc3RyaWN0aW9uX3RhZyA9IF9WYWx1ZVN0YXRlVGFnKCdyZXN0cmljdGlvbicpCiAgICBzZWxmLndhdGVybWFya19ob2xkX3RhZyA9IF9WYWx1ZVN0YXRlVGFnKCd3YXRlcm1hcmtfaG9sZCcpCiAgICBzZWxmLl9wcm9jZXNzX2VsZW1lbnRfaW52b2tlciA9IE5vbmUKCiAgICBzZWxmLnNkZl9pbnZva2VyID0gRG9Gbkludm9rZXIuY3JlYXRlX2ludm9rZXIoCiAgICAgICAgRG9GblNpZ25hdHVyZShzZWxmLnNkZiksIGNvbnRleHQ9RG9GbkNvbnRleHQoJ3VudXNlZF9jb250ZXh0JyksCiAgICAgICAgaW5wdXRfYXJncz1hcmdzX2Zvcl9pbnZva2VyLCBpbnB1dF9rd2FyZ3M9a3dhcmdzX2Zvcl9pbnZva2VyKQoKICAgIHNlbGYuX3N0ZXBfY29udGV4dCA9IE5vbmUKCiAgQHByb3BlcnR5CiAgZGVmIHN0ZXBfY29udGV4dChzZWxmKToKICAgIHJldHVybiBzZWxmLl9zdGVwX2NvbnRleHQKCiAgQHN0ZXBfY29udGV4dC5zZXR0ZXIKICBkZWYgc3RlcF9jb250ZXh0KHNlbGYsIHN0ZXBfY29udGV4dCk6CiAgICBhc3NlcnQgaXNpbnN0YW5jZShzdGVwX2NvbnRleHQsIERpcmVjdFN0ZXBDb250ZXh0KQogICAgc2VsZi5fc3RlcF9jb250ZXh0ID0gc3RlcF9jb250ZXh0CgogIGRlZiBzZXRfcHJvY2Vzc19lbGVtZW50X2ludm9rZXIoc2VsZiwgcHJvY2Vzc19lbGVtZW50X2ludm9rZXIpOgogICAgYXNzZXJ0IGlzaW5zdGFuY2UocHJvY2Vzc19lbGVtZW50X2ludm9rZXIsIFNERlByb2Nlc3NFbGVtZW50SW52b2tlcikKICAgIHNlbGYuX3Byb2Nlc3NfZWxlbWVudF9pbnZva2VyID0gcHJvY2Vzc19lbGVtZW50X2ludm9rZXIKCiAgZGVmIHByb2Nlc3Moc2VsZiwgZWxlbWVudCwgdGltZXN0YW1wPWJlYW0uRG9Gbi5UaW1lc3RhbXBQYXJhbSwKICAgICAgICAgICAgICB3aW5kb3c9YmVhbS5Eb0ZuLldpbmRvd1BhcmFtLCAqYXJncywgKiprd2FyZ3MpOgogICAgaWYgaXNpbnN0YW5jZShlbGVtZW50LCBLZXllZFdvcmtJdGVtKToKICAgICAgIyBNdXN0IGJlIGEgdGltZXIgZmlyaW5nLgogICAgICBrZXkgPSBlbGVtZW50LmVuY29kZWRfa2V5CiAgICBlbHNlOgogICAgICBrZXksIHZhbHVlcyA9IGVsZW1lbnQKICAgICAgdmFsdWVzID0gbGlzdCh2YWx1ZXMpCiAgICAgIGFzc2VydCBsZW4odmFsdWVzKSA9PSAxCiAgICAgICMgVmFsdWUgaGVyZSB3aWxsIGVpdGhlciBiZSBhIFdpbmRvd2VkVmFsdWUgb3IgYW4gRWxlbWVudEFuZFJlc3RyaWN0aW9uCiAgICAgICMgb2JqZWN0LgogICAgICAjIFRPRE86IGhhbmRsZSBrZXkgY29sbGlzaW9ucyBoZXJlLgogICAgICBhc3NlcnQgbGVuKHZhbHVlcykgPT0gMSwgJ0ludGVybmFsIGVycm9yLiBQcm9jZXNzaW5nIG9mIHNwbGl0dGFibGUgJyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRG9GbiBjYW5ub3QgY29udGludWUgc2luY2UgZWxlbWVudHMgZGlkIG5vdCAnIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoYXZlIHVuaXF1ZSBrZXlzLicKICAgICAgdmFsdWUgPSB2YWx1ZXNbMF0KICAgICAgaWYgbGVuKHZhbHVlcykgIT0gMToKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCcnKQoKICAgIHN0YXRlID0gc2VsZi5fc3RlcF9jb250ZXh0LmdldF9rZXllZF9zdGF0ZShrZXkpCiAgICBlbGVtZW50X3N0YXRlID0gc3RhdGUuZ2V0X3N0YXRlKHdpbmRvdywgc2VsZi5fZWxlbWVudF90YWcpCiAgICAjIEluaXRpYWxseSBlbGVtZW50X3N0YXRlIGlzIGFuIGVtcHR5IGxpc3QuCiAgICBpc19zZWVkX2NhbGwgPSBub3QgZWxlbWVudF9zdGF0ZQoKICAgIGlmIG5vdCBpc19zZWVkX2NhbGw6CiAgICAgIGVsZW1lbnQgPSBzdGF0ZS5nZXRfc3RhdGUod2luZG93LCBzZWxmLl9lbGVtZW50X3RhZykKICAgICAgcmVzdHJpY3Rpb24gPSBzdGF0ZS5nZXRfc3RhdGUod2luZG93LCBzZWxmLl9yZXN0cmljdGlvbl90YWcpCiAgICAgIHdpbmRvd2VkX2VsZW1lbnQgPSBXaW5kb3dlZFZhbHVlKGVsZW1lbnQsIHRpbWVzdGFtcCwgW3dpbmRvd10pCiAgICBlbHNlOgogICAgICAjIEFmdGVyIHZhbHVlcyBpdGVyYXRvciBpcyBleHBhbmRlZCBhYm92ZSB3ZSBzaG91bGQgaGF2ZSBnb3R0ZW4gYSBsaXN0CiAgICAgICMgd2l0aCBhIHNpbmdsZSBFbGVtZW50QW5kUmVzdHJpY3Rpb24gb2JqZWN0LgogICAgICBhc3NlcnQgaXNpbnN0YW5jZSh2YWx1ZSwgRWxlbWVudEFuZFJlc3RyaWN0aW9uKQogICAgICBlbGVtZW50X2FuZF9yZXN0cmljdGlvbiA9IHZhbHVlCiAgICAgIGVsZW1lbnQgPSBlbGVtZW50X2FuZF9yZXN0cmljdGlvbi5lbGVtZW50CiAgICAgIHJlc3RyaWN0aW9uID0gZWxlbWVudF9hbmRfcmVzdHJpY3Rpb24ucmVzdHJpY3Rpb24KCiAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIFdpbmRvd2VkVmFsdWUpOgogICAgICAgIHdpbmRvd2VkX2VsZW1lbnQgPSBXaW5kb3dlZFZhbHVlKAogICAgICAgICAgICBlbGVtZW50LCB2YWx1ZS50aW1lc3RhbXAsIHZhbHVlLndpbmRvd3MpCiAgICAgIGVsc2U6CiAgICAgICAgd2luZG93ZWRfZWxlbWVudCA9IFdpbmRvd2VkVmFsdWUoZWxlbWVudCwgdGltZXN0YW1wLCBbd2luZG93XSkKCiAgICB0cmFja2VyID0gc2VsZi5zZGZfaW52b2tlci5pbnZva2VfY3JlYXRlX3RyYWNrZXIocmVzdHJpY3Rpb24pCiAgICBhc3NlcnQgc2VsZi5fcHJvY2Vzc19lbGVtZW50X2ludm9rZXIKICAgIGFzc2VydCBpc2luc3RhbmNlKHNlbGYuX3Byb2Nlc3NfZWxlbWVudF9pbnZva2VyLAogICAgICAgICAgICAgICAgICAgICAgU0RGUHJvY2Vzc0VsZW1lbnRJbnZva2VyKQoKICAgIG91dHB1dF92YWx1ZXMgPSBzZWxmLl9wcm9jZXNzX2VsZW1lbnRfaW52b2tlci5pbnZva2VfcHJvY2Vzc19lbGVtZW50KAogICAgICAgIHNlbGYuc2RmX2ludm9rZXIsIHdpbmRvd2VkX2VsZW1lbnQsIHRyYWNrZXIsICphcmdzLCAqKmt3YXJncykKCiAgICBzZGZfcmVzdWx0ID0gTm9uZQogICAgZm9yIG91dHB1dCBpbiBvdXRwdXRfdmFsdWVzOgogICAgICBpZiBpc2luc3RhbmNlKG91dHB1dCwgU0RGUHJvY2Vzc0VsZW1lbnRJbnZva2VyLlJlc3VsdCk6CiAgICAgICAgIyBTREZQcm9jZXNzRWxlbWVudEludm9rZXIuUmVzdWx0IHNob3VsZCBiZSB0aGUgbGFzdCBpdGVtIHlpZWxkZWQuCiAgICAgICAgc2RmX3Jlc3VsdCA9IG91dHB1dAogICAgICAgIGJyZWFrCiAgICAgIHlpZWxkIG91dHB1dAoKICAgIGFzc2VydCBzZGZfcmVzdWx0LCAoJ1NERlByb2Nlc3NFbGVtZW50SW52b2tlciBtdXN0IHJldHVybiBhICcKICAgICAgICAgICAgICAgICAgICAgICAgJ1NERlByb2Nlc3NFbGVtZW50SW52b2tlci5SZXN1bHQgb2JqZWN0IGFzIHRoZSBsYXN0ICcKICAgICAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlIG9mIGEgU0RGIGludm9rZV9wcm9jZXNzX2VsZW1lbnQoKSBpbnZvY2F0aW9uLicpCgogICAgaWYgbm90IHNkZl9yZXN1bHQucmVzaWR1YWxfcmVzdHJpY3Rpb246CiAgICAgICMgQWxsIHdvcmsgZm9yIGN1cnJlbnQgcmVzaWR1YWwgYW5kIHJlc3RyaWN0aW9uIHBhaXIgaXMgY29tcGxldGUuCiAgICAgIHN0YXRlLmNsZWFyX3N0YXRlKHdpbmRvdywgc2VsZi5fZWxlbWVudF90YWcpCiAgICAgIHN0YXRlLmNsZWFyX3N0YXRlKHdpbmRvdywgc2VsZi5fcmVzdHJpY3Rpb25fdGFnKQogICAgICAjIFJlbGVhc2luZyBvdXRwdXQgd2F0ZXJtYXJrIGJ5IHNldHRpbmcgaXQgdG8gcG9zaXRpdmUgaW5maW5pdHkuCiAgICAgIHN0YXRlLmFkZF9zdGF0ZSh3aW5kb3csIHNlbGYud2F0ZXJtYXJrX2hvbGRfdGFnLAogICAgICAgICAgICAgICAgICAgICAgV2F0ZXJtYXJrTWFuYWdlci5XQVRFUk1BUktfUE9TX0lORikKICAgIGVsc2U6CiAgICAgIHN0YXRlLmFkZF9zdGF0ZSh3aW5kb3csIHNlbGYuX2VsZW1lbnRfdGFnLCBlbGVtZW50KQogICAgICBzdGF0ZS5hZGRfc3RhdGUod2luZG93LCBzZWxmLl9yZXN0cmljdGlvbl90YWcsCiAgICAgICAgICAgICAgICAgICAgICBzZGZfcmVzdWx0LnJlc2lkdWFsX3Jlc3RyaWN0aW9uKQogICAgICAjIEhvbGRpbmcgb3V0cHV0IHdhdGVybWFyayBieSBzZXR0aW5nIGl0IHRvIG5lZ2F0aXZlIGluZmluaXR5LgogICAgICBzdGF0ZS5hZGRfc3RhdGUod2luZG93LCBzZWxmLndhdGVybWFya19ob2xkX3RhZywKICAgICAgICAgICAgICAgICAgICAgIFdhdGVybWFya01hbmFnZXIuV0FURVJNQVJLX05FR19JTkYpCgogICAgICAjIFNldHRpbmcgYSB0aW1lciB0byBiZSByZWludm9rZWQgdG8gY29udGludWUgcHJvY2Vzc2luZyB0aGUgZWxlbWVudC4KICAgICAgIyBDdXJyZW50bHkgUHl0aG9uIFNESyBvbmx5IHN1cHBvcnRzIHNldHRpbmcgdGltZXJzIGJhc2VkIG9uIHdhdGVybWFyay4gU28KICAgICAgIyBmb3JjaW5nIGEgcmVpbnZvY2F0aW9uIGJ5IHNldHRpbmcgYSB0aW1lciBmb3Igd2F0ZXJtYXJrIG5lZ2F0aXZlCiAgICAgICMgaW5maW5pdHkuCiAgICAgICMgVE9ETyhjaGFtaWthcmEpOiB1cGRhdGUgdGhpcyBieSBzZXR0aW5nIGEgdGltZXIgZm9yIHRoZSBwcm9wZXIKICAgICAgIyBwcm9jZXNzaW5nIHRpbWUgd2hlbiBQeXRob24gU0RLIHN1cHBvcnRzIHRoYXQuCiAgICAgIHN0YXRlLnNldF90aW1lcigKICAgICAgICAgIHdpbmRvdywgJycsIFRpbWVEb21haW4uV0FURVJNQVJLLCBXYXRlcm1hcmtNYW5hZ2VyLldBVEVSTUFSS19ORUdfSU5GKQoKCmNsYXNzIFNERlByb2Nlc3NFbGVtZW50SW52b2tlcihvYmplY3QpOgogICIiIkEgdXRpbGl0eSB0aGF0IGludm9rZXMgU0RGIGBwcm9jZXNzKClgIG1ldGhvZCBhbmQgcmVxdWVzdHMgY2hlY2twb2ludHMuCgogIFRoaXMgY2xhc3MgaXMgcmVzcG9uc2libGUgZm9yIGludm9raW5nIHRoZSBgcHJvY2VzcygpYCBtZXRob2Qgb2YgYSBTcGxpdHRhYmxlCiAgYERvRm5gIGFuZCBtYWtpbmcgc3VyZSB0aGF0IGludm9jYXRpb24gdGVybWluYXRlZCBwcm9wZXJseS4gQmFzZWQgb24gdGhlIGlucHV0CiAgY29uZmlndXJhdGlvbiwgdGhpcyBjbGFzcyBtYXkgZGVjaWRlIHRvIHJlcXVlc3QgYSBjaGVja3BvaW50IGZvciBhIGBwcm9jZXNzKClgCiAgZXhlY3V0aW9uIHNvIHRoYXQgcnVubmVyIGNhbiBwcm9jZXNzIGN1cnJlbnQgb3V0cHV0IGFuZCByZXN1bWUgdGhlIGludm9jYXRpb24KICBhdCBhIGxhdGVyIHRpbWUuCgogIE1vcmUgc3BlY2lmaWNhbGx5LCB3aGVuIGluaXRpYWxpemluZyBhIGBTREZQcm9jZXNzRWxlbWVudEludm9rZXJgLCBjYWxsZXIgbWF5CiAgc3BlY2lmeSB0aGUgbnVtYmVyIG9mIG91dHB1dCBlbGVtZW50cyBvciBwcm9jZXNzaW5nIHRpbWUgYWZ0ZXIgd2hpY2ggYQogIGNoZWNrcG9pbnQgc2hvdWxkIGJlIHJlcXVlc3RlZC4gVGhpcyBjbGFzcyBpcyByZXNwb25zaWJsZSBmb3IgcHJvcGVybHkKICByZXF1ZXN0aW5nIGEgY2hlY2twb2ludCBiYXNlZCBvbiBlaXRoZXIgb2YgdGhlc2UgY3JpdGVyaWEuCiAgV2hlbiB0aGUgYHByb2Nlc3MoKWAgY2FsbCBvZiBTcGxpdHRhYmxlIGBEb0ZuYCBlbmRzLCB0aGlzIGNsYXNzIHBlcmZvcm1zCiAgdmFsaWRhdGlvbnMgdG8gbWFrZSBzdXJlIHRoYXQgcHJvY2Vzc2luZyBlbmRlZCBncmFjZWZ1bGx5IGFuZCByZXR1cm5zIGEKICBgU0RGUHJvY2Vzc0VsZW1lbnRJbnZva2VyLlJlc3VsdGAgdGhhdCBjb250YWlucyBpbmZvcm1hdGlvbiB3aGljaCBjYW4gYmUgdXNlZAogIGJ5IHRoZSBjYWxsZXIgdG8gcGVyZm9ybSBhbm90aGVyIGBwcm9jZXNzKClgIGludm9jYXRpb24gZm9yIHRoZSByZXNpZHVhbC4KCiAgQSBgcHJvY2VzcygpYCBpbnZvY2F0aW9uIG1heSBkZWNpZGUgdG8gZ2l2ZSB1cCBwcm9jZXNzaW5nIHZvbHVudGFyaWx5IGJ5CiAgcmV0dXJuaW5nIGEgYFByb2Nlc3NDb250aW51YXRpb25gIG9iamVjdCAoc2VlIGRvY3VtZW50YXRpb24gb2YKICBgUHJvY2Vzc0NvbnRpbnVhdGlvbmAgZm9yIG1vcmUgZGV0YWlscykuIFNvIGlmIGEgJ1Byb2Nlc3NDb250aW51YXRpb24nIGlzCiAgcHJvZHVjZWQgdGhpcyBjbGFzcyBlbmRzIHRoZSBleGVjdXRpb24gYW5kIHBlcmZvcm1zIHN0ZXBzIHRvIGZpbmFsaXplIHRoZQogIGN1cnJlbnQgaW52b2NhdGlvbi4KICAiIiIKCiAgY2xhc3MgUmVzdWx0KG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oCiAgICAgICAgc2VsZiwgcmVzaWR1YWxfcmVzdHJpY3Rpb249Tm9uZSwgcHJvY2Vzc19jb250aW51YXRpb249Tm9uZSwKICAgICAgICBmdXR1cmVfb3V0cHV0X3dhdGVybWFyaz1Ob25lKToKICAgICAgIiIiUmV0dXJuZWQgYXMgYSByZXN1bHQgb2YgYSBgaW52b2tlX3Byb2Nlc3NfZWxlbWVudCgpYCBpbnZvY2F0aW9uLgoKICAgICAgQXJnczoKICAgICAgICByZXNpZHVhbF9yZXN0cmljdGlvbjogYSByZXN0cmljdGlvbiBmb3IgdGhlIHVucHJvY2Vzc2VkIHBhcnQgb2YgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC4KICAgICAgICBwcm9jZXNzX2NvbnRpbnVhdGlvbjogYSBgUHJvY2Vzc0NvbnRpbnVhdGlvbmAgaWYgb25lIHdhcyByZXR1cm5lZCBhcyB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCBlbGVtZW50IG9mIHRoZSBTREYgYHByb2Nlc3MoKWAgaW52b2NhdGlvbi4KICAgICAgICBmdXR1cmVfb3V0cHV0X3dhdGVybWFyazogb3V0cHV0IHdhdGVybWFyayBvZiB0aGUgcmVzdWx0cyB0aGF0IHdpbGwgYmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjZWQgd2hlbiBpbnZva2luZyB0aGUgU3BsaXR0YWJsZSBgRG9GbmAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBjdXJyZW50IGVsZW1lbnQgd2l0aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgcmVzaWR1YWxfcmVzdHJpY3Rpb25gLgogICAgICAiIiIKCiAgICAgIHNlbGYucmVzaWR1YWxfcmVzdHJpY3Rpb24gPSByZXNpZHVhbF9yZXN0cmljdGlvbgogICAgICBzZWxmLnByb2Nlc3NfY29udGludWF0aW9uID0gcHJvY2Vzc19jb250aW51YXRpb24KICAgICAgc2VsZi5mdXR1cmVfb3V0cHV0X3dhdGVybWFyayA9IGZ1dHVyZV9vdXRwdXRfd2F0ZXJtYXJrCgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwgbWF4X251bV9vdXRwdXRzLCBtYXhfZHVyYXRpb24pOgogICAgc2VsZi5fbWF4X251bV9vdXRwdXRzID0gbWF4X251bV9vdXRwdXRzCiAgICBzZWxmLl9tYXhfZHVyYXRpb24gPSBtYXhfZHVyYXRpb24KICAgIHNlbGYuX2NoZWNrcG9pbnRfbG9jayA9IExvY2soKQoKICBkZWYgdGVzdF9tZXRob2Qoc2VsZik6CiAgICByYWlzZSBWYWx1ZUVycm9yCgogIGRlZiBpbnZva2VfcHJvY2Vzc19lbGVtZW50KAogICAgICBzZWxmLCBzZGZfaW52b2tlciwgZWxlbWVudCwgdHJhY2tlciwgKmFyZ3MsICoqa3dhcmdzKToKICAgICIiIkludm9rZXMgYHByb2Nlc3MoKWAgbWV0aG9kIG9mIGEgU3BsaXR0YWJsZSBgRG9GbmAgZm9yIGEgZ2l2ZW4gZWxlbWVudC4KCiAgICAgQXJnczoKICAgICAgIHNkZl9pbnZva2VyOiBhIGBEb0ZuSW52b2tlcmAgZm9yIHRoZSBTcGxpdHRhYmxlIGBEb0ZuYC4KICAgICAgIGVsZW1lbnQ6IHRoZSBlbGVtZW50IHRvIHByb2Nlc3MKICAgICAgIHRyYWNrZXI6IGEgYFJlc3RyaWN0aW9uVHJhY2tlcmAgZm9yIHRoZSBlbGVtZW50IHRoYXQgd2lsbCBiZSBwYXNzZWQgd2hlbgogICAgICAgICAgICAgICAgaW52b2tpbmcgdGhlIGBwcm9jZXNzKClgIG1ldGhvZCBvZiB0aGUgU3BsaXR0YWJsZSBgRG9GbmAuCiAgICAgUmV0dXJuczoKICAgICAgIGEgYFNERlByb2Nlc3NFbGVtZW50SW52b2tlci5SZXN1bHRgIG9iamVjdC4KICAgICAiIiIKICAgIGFzc2VydCBpc2luc3RhbmNlKHNkZl9pbnZva2VyLCBEb0ZuSW52b2tlcikKICAgIGFzc2VydCBpc2luc3RhbmNlKHRyYWNrZXIsIFJlc3RyaWN0aW9uVHJhY2tlcikKCiAgICBjbGFzcyBDaGVja3BvaW50U3RhdGUob2JqZWN0KToKCiAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzZWxmLmNoZWNrcG9pbnRlZCA9IE5vbmUKICAgICAgICBzZWxmLnJlc2lkdWFsX3Jlc3RyaWN0aW9uID0gTm9uZQoKICAgIGNoZWNrcG9pbnRfc3RhdGUgPSBDaGVja3BvaW50U3RhdGUoKQoKICAgIGRlZiBpbml0aWF0ZV9jaGVja3BvaW50KCk6CiAgICAgIHdpdGggc2VsZi5fY2hlY2twb2ludF9sb2NrOgogICAgICAgIGlmIGNoZWNrcG9pbnRfc3RhdGUuY2hlY2twb2ludGVkOgogICAgICAgICAgcmV0dXJuCiAgICAgIGNoZWNrcG9pbnRfc3RhdGUucmVzaWR1YWxfcmVzdHJpY3Rpb24gPSB0cmFja2VyLmNoZWNrcG9pbnQoKQogICAgICBjaGVja3BvaW50X3N0YXRlLmNoZWNrcG9pbnRlZCA9IG9iamVjdCgpCgogICAgb3V0cHV0X3Byb2Nlc3NvciA9IF9PdXRwdXRQcm9jZXNzb3IoKQogICAgVGltZXIoc2VsZi5fbWF4X2R1cmF0aW9uLCBpbml0aWF0ZV9jaGVja3BvaW50KS5zdGFydCgpCiAgICBzZGZfaW52b2tlci5pbnZva2VfcHJvY2VzcygKICAgICAgICBlbGVtZW50LCByZXN0cmljdGlvbl90cmFja2VyPXRyYWNrZXIsIG91dHB1dF9wcm9jZXNzb3I9b3V0cHV0X3Byb2Nlc3NvciwKICAgICAgICBhZGRpdGlvbmFsX2FyZ3M9YXJncywgYWRkaXRpb25hbF9rd2FyZ3M9a3dhcmdzKQoKICAgIGFzc2VydCBvdXRwdXRfcHJvY2Vzc29yLm91dHB1dF9pdGVyIGlzIG5vdCBOb25lCiAgICBvdXRwdXRfY291bnQgPSAwCgogICAgIyBXZSBoYXZlIHRvIGV4cGFuZCBhbmQgcmUteWllbGQgaGVyZSB0byBzdXBwb3J0IGVuZGluZyBleGVjdXRpb24gZm9yIGEKICAgICMgZ2l2ZW4gbnVtYmVyIG9mIG91dHB1dCBlbGVtZW50cyBhcyB3ZWxsIGFzIHRvIGNhcHR1cmUgdGhlCiAgICAjIFByb2Nlc3NDb250aW51YXRpb24gb2Ygb25lIHdhcyByZXR1cm5lZC4KICAgIHByb2Nlc3NfY29udGludWF0aW9uID0gTm9uZQogICAgZm9yIG91dHB1dCBpbiBvdXRwdXRfcHJvY2Vzc29yLm91dHB1dF9pdGVyOgogICAgICAjIEEgUHJvY2Vzc0NvbnRpbnVhdGlvbiwgaWYgcmV0dXJuZWQsIHNob3VsZCBiZSB0aGUgbGFzdCBlbGVtZW50LgogICAgICBhc3NlcnQgbm90IHByb2Nlc3NfY29udGludWF0aW9uCiAgICAgIGlmIGlzaW5zdGFuY2Uob3V0cHV0LCBQcm9jZXNzQ29udGludWF0aW9uKToKICAgICAgICAjIFRha2luZyBhIGNoZWNrcG9pbnQgc28gdGhhdCB3ZSBjYW4gZGV0ZXJtaW5lIHByaW1hcnkgYW5kIHJlc2lkdWFsCiAgICAgICAgIyByZXN0cmljdGlvbnMuCiAgICAgICAgaW5pdGlhdGVfY2hlY2twb2ludCgpCgogICAgICAgICMgQSBQcm9jZXNzQ29udGludWF0aW9uIHNob3VsZCBhbHdheXMgYmUgdGhlIGxhc3QgZWxlbWVudCBwcm9kdWNlZCBieQogICAgICAgICMgdGhlIG91dHB1dCBpdGVyYXRvci4KICAgICAgICAjIFRPRE86IHN1cHBvcnQgY29udGludWluZyBhZnRlciB0aGUgc3BlY2lmaWVkIGFtb3VudCBvZiBkZWxheS4KCiAgICAgICAgIyBDb250aW51aW5nIGhlcmUgaW5zdGVhZCBvZiBicmVha2luZyB0byBlbmZvcmNlIHRoYXQgdGhpcyBpcyB0aGUgbGFzdAogICAgICAgICMgZWxlbWVudC4KICAgICAgICBwcm9jZXNzX2NvbnRpbnVhdGlvbiA9IG91dHB1dAogICAgICAgIGNvbnRpbnVlCgogICAgICB5aWVsZCBvdXRwdXQKICAgICAgb3V0cHV0X2NvdW50ICs9IDEKICAgICAgaWYgc2VsZi5fbWF4X251bV9vdXRwdXRzIGFuZCBvdXRwdXRfY291bnQgPj0gc2VsZi5fbWF4X251bV9vdXRwdXRzOgogICAgICAgIGluaXRpYXRlX2NoZWNrcG9pbnQoKQoKICAgIHRyYWNrZXIuY2hlY2tfZG9uZSgpCiAgICByZXN1bHQgPSAoCiAgICAgICAgU0RGUHJvY2Vzc0VsZW1lbnRJbnZva2VyLlJlc3VsdCgKICAgICAgICAgICAgcmVzaWR1YWxfcmVzdHJpY3Rpb249Y2hlY2twb2ludF9zdGF0ZS5yZXNpZHVhbF9yZXN0cmljdGlvbikKICAgICAgICBpZiBjaGVja3BvaW50X3N0YXRlLnJlc2lkdWFsX3Jlc3RyaWN0aW9uCiAgICAgICAgZWxzZSBTREZQcm9jZXNzRWxlbWVudEludm9rZXIuUmVzdWx0KCkpCiAgICB5aWVsZCByZXN1bHQKCgpjbGFzcyBfT3V0cHV0UHJvY2Vzc29yKE91dHB1dFByb2Nlc3Nvcik6CgogIGRlZiBfX2luaXRfXyhzZWxmKToKICAgIHNlbGYub3V0cHV0X2l0ZXIgPSBOb25lCgogIGRlZiBwcm9jZXNzX291dHB1dHMoc2VsZiwgd2luZG93ZWRfaW5wdXRfZWxlbWVudCwgb3V0cHV0X2l0ZXIpOgogICAgc2VsZi5vdXRwdXRfaXRlciA9IG91dHB1dF9pdGVyCn1y0IIAAChYEgAAAFByb2Nlc3NGbi5fX2luaXRfX1gDAAAAZGVmS3JLf4dYIAAAAF9PdXRwdXRQcm9jZXNzb3IucHJvY2Vzc19vdXRwdXRzWAMAAABkZWZNagFNbAGHWD8AAABTREZQcm9jZXNzRWxlbWVudEludm9rZXIuaW52b2tlX3Byb2Nlc3NfZWxlbWVudC5DaGVja3BvaW50U3RhdGVYBQAAAGNsYXNzTSoBTS8Bh1g1AAAAUHJvY2Vzc0tleWVkRWxlbWVudHNWaWFLZXllZFdvcmtJdGVtc092ZXJyaWRlLm1hdGNoZXNYAwAAAGRlZksySzWHWC0AAABQcm9jZXNzS2V5ZWRFbGVtZW50c1ZpYUtleWVkV29ya0l0ZW1zT3ZlcnJpZGVYBQAAAGNsYXNzSy9LOIdYLAAAAFByb2Nlc3NLZXllZEVsZW1lbnRzVmlhS2V5ZWRXb3JrSXRlbXMuZXhwYW5kWAMAAABkZWZLQEtKh1ghAAAAU0RGUHJvY2Vzc0VsZW1lbnRJbnZva2VyLl9faW5pdF9fWAMAAABkZWZNEgFNFwGHWBgAAABTREZQcm9jZXNzRWxlbWVudEludm9rZXJYBQAAAGNsYXNzS+RNYwGHWCUAAABQcm9jZXNzRm4uc2V0X3Byb2Nlc3NfZWxlbWVudF9pbnZva2VyWAMAAABkZWZLiUuMh1goAAAAU0RGUHJvY2Vzc0VsZW1lbnRJbnZva2VyLlJlc3VsdC5fX2luaXRfX1gDAAAAZGVmS/5NEQGHWCQAAABTREZQcm9jZXNzRWxlbWVudEludm9rZXIudGVzdF9tZXRob2RYAwAAAGRlZk0YAU0aAYdYHwAAAFNERlByb2Nlc3NFbGVtZW50SW52b2tlci5SZXN1bHRYBQAAAGNsYXNzS/1NEQGHWBEAAABQcm9jZXNzRm4ucHJvY2Vzc1gDAAAAZGVmS41L4odYSAAAAFNERlByb2Nlc3NFbGVtZW50SW52b2tlci5pbnZva2VfcHJvY2Vzc19lbGVtZW50LkNoZWNrcG9pbnRTdGF0ZS5fX2luaXRfX1gDAAAAZGVmTSwBTS8Bh1hDAAAAU0RGUHJvY2Vzc0VsZW1lbnRJbnZva2VyLmludm9rZV9wcm9jZXNzX2VsZW1lbnQuaW5pdGlhdGVfY2hlY2twb2ludFgDAAAAZGVmTTIBTTgBh1gQAAAAX091dHB1dFByb2Nlc3NvclgFAAAAY2xhc3NNZQFNbAGHWA8AAABQcm9jZXNzRWxlbWVudHNYBQAAAGNsYXNzS0xLX4dYFgAAAFByb2Nlc3NGbi5zdGVwX2NvbnRleHRYAwAAAGRlZkuES4iHWCUAAABQcm9jZXNzS2V5ZWRFbGVtZW50c1ZpYUtleWVkV29ya0l0ZW1zWAUAAABjbGFzc0s6S0qHWC8AAABTREZQcm9jZXNzRWxlbWVudEludm9rZXIuaW52b2tlX3Byb2Nlc3NfZWxlbWVudFgDAAAAZGVmTRsBTWMBh1hHAAAAUHJvY2Vzc0tleWVkRWxlbWVudHNWaWFLZXllZFdvcmtJdGVtc092ZXJyaWRlLmdldF9yZXBsYWNlbWVudF90cmFuc2Zvcm1YAwAAAGRlZks2SziHWBgAAABQcm9jZXNzRWxlbWVudHMuX19pbml0X19YAwAAAGRlZktTS1aHWB4AAABQcm9jZXNzRWxlbWVudHMubmV3X3Byb2Nlc3NfZm5YAwAAAGRlZktaS1+HWC4AAABQcm9jZXNzS2V5ZWRFbGVtZW50c1ZpYUtleWVkV29ya0l0ZW1zLl9faW5pdF9fWAMAAABkZWZLPUs/h1gJAAAAUHJvY2Vzc0ZuWAUAAABjbGFzc0thS+KHWBkAAABfT3V0cHV0UHJvY2Vzc29yLl9faW5pdF9fWAMAAABkZWZNZwFNaQGHWBYAAABQcm9jZXNzRWxlbWVudHMuZXhwYW5kWAMAAABkZWZLV0tZh3V9ctGCAAAoWEcAAABQcm9jZXNzS2V5ZWRFbGVtZW50c1ZpYUtleWVkV29ya0l0ZW1zT3ZlcnJpZGUuZ2V0X3JlcGxhY2VtZW50X3RyYW5zZm9ybWrlZAAAWCUAAABQcm9jZXNzRm4uc2V0X3Byb2Nlc3NfZWxlbWVudF9pbnZva2VyauVkAABYDwAAAFByb2Nlc3NFbGVtZW50c2rlZAAAWCQAAABTREZQcm9jZXNzRWxlbWVudEludm9rZXIudGVzdF9tZXRob2Rq5WQAAFgeAAAAUHJvY2Vzc0VsZW1lbnRzLm5ld19wcm9jZXNzX2ZuauVkAABYJQAAAFByb2Nlc3NLZXllZEVsZW1lbnRzVmlhS2V5ZWRXb3JrSXRlbXNq5WQAAFgfAAAAU0RGUHJvY2Vzc0VsZW1lbnRJbnZva2VyLlJlc3VsdGrlZAAAWAkAAABQcm9jZXNzRm5q5WQAAFg1AAAAUHJvY2Vzc0tleWVkRWxlbWVudHNWaWFLZXllZFdvcmtJdGVtc092ZXJyaWRlLm1hdGNoZXNq5WQAAFgtAAAAUHJvY2Vzc0tleWVkRWxlbWVudHNWaWFLZXllZFdvcmtJdGVtc092ZXJyaWRlauVkAABYEQAAAFByb2Nlc3NGbi5wcm9jZXNzauVkAABYLwAAAFNERlByb2Nlc3NFbGVtZW50SW52b2tlci5pbnZva2VfcHJvY2Vzc19lbGVtZW50auVkAABYLAAAAFByb2Nlc3NLZXllZEVsZW1lbnRzVmlhS2V5ZWRXb3JrSXRlbXMuZXhwYW5kauVkAABYFgAAAFByb2Nlc3NFbGVtZW50cy5leHBhbmRq5WQAAFgYAAAAU0RGUHJvY2Vzc0VsZW1lbnRJbnZva2VyauVkAAB1an1pAABYLAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyctKCAACFgXLTggAAfXLUggAAYnRVG2FwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeShYsAABACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiQmlnUXVlcnkgc291cmNlcyBhbmQgc2lua3MuCgpUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIHJlYWRpbmcgZnJvbSBhbmQgd3JpdGluZyB0byBCaWdRdWVyeSB0YWJsZXMuIEl0IHJlbGllcwpvbiBzZXZlcmFsIGNsYXNzZXMgZXhwb3NlZCBieSB0aGUgQmlnUXVlcnkgQVBJOiBUYWJsZVNjaGVtYSwgVGFibGVGaWVsZFNjaGVtYSwKVGFibGVSb3csIGFuZCBUYWJsZUNlbGwuIFRoZSBkZWZhdWx0IG1vZGUgaXMgdG8gcmV0dXJuIHRhYmxlIHJvd3MgcmVhZCBmcm9tIGEKQmlnUXVlcnkgc291cmNlIGFzIGRpY3Rpb25hcmllcy4gU2ltaWxhcmx5IGEgV3JpdGUgdHJhbnNmb3JtIHRvIGEgQmlnUXVlcnlTaW5rCmFjY2VwdHMgUENvbGxlY3Rpb25zIG9mIGRpY3Rpb25hcmllcy4gVGhpcyBpcyBkb25lIGZvciBtb3JlIGNvbnZlbmllbnQKcHJvZ3JhbW1pbmcuICBJZiBkZXNpcmVkLCB0aGUgbmF0aXZlIFRhYmxlUm93IG9iamVjdHMgY2FuIGJlIHVzZWQgdGhyb3VnaG91dCB0bwpyZXByZXNlbnQgcm93cyAodXNlIGFuIGluc3RhbmNlIG9mIFRhYmxlUm93SnNvbkNvZGVyIGFzIGEgY29kZXIgYXJndW1lbnQgd2hlbgpjcmVhdGluZyB0aGUgc291cmNlcyBvciBzaW5rcyByZXNwZWN0aXZlbHkpLgoKQWxzbywgZm9yIHByb2dyYW1taW5nIGNvbnZlbmllbmNlLCBpbnN0YW5jZXMgb2YgVGFibGVSZWZlcmVuY2UgYW5kIFRhYmxlU2NoZW1hCmhhdmUgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gdGhhdCBjYW4gYmUgdXNlZCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgYXJndW1lbnRzOgoKICAtIFRhYmxlUmVmZXJlbmNlIGNhbiBiZSBhIFBST0pFQ1Q6REFUQVNFVC5UQUJMRSBvciBEQVRBU0VULlRBQkxFIHN0cmluZy4KICAtIFRhYmxlU2NoZW1hIGNhbiBiZSBhIE5BTUU6VFlQRXssTkFNRTpUWVBFfSogc3RyaW5nCiAgICAoZS5nLiAnbW9udGg6U1RSSU5HLGV2ZW50X2NvdW50OklOVEVHRVInKS4KClRoZSBzeW50YXggc3VwcG9ydGVkIGlzIGRlc2NyaWJlZCBoZXJlOgpodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vYmlncXVlcnkvYnEtY29tbWFuZC1saW5lLXRvb2wtcXVpY2tzdGFydAoKQmlnUXVlcnkgc291cmNlcyBjYW4gYmUgdXNlZCBhcyBtYWluIGlucHV0cyBvciBzaWRlIGlucHV0cy4gQSBtYWluIGlucHV0Cihjb21tb24gY2FzZSkgaXMgZXhwZWN0ZWQgdG8gYmUgbWFzc2l2ZSBhbmQgd2lsbCBiZSBzcGxpdCBpbnRvIG1hbmFnZWFibGUgY2h1bmtzCmFuZCBwcm9jZXNzZWQgaW4gcGFyYWxsZWwuIFNpZGUgaW5wdXRzIGFyZSBleHBlY3RlZCB0byBiZSBzbWFsbCBhbmQgd2lsbCBiZSByZWFkCmNvbXBsZXRlbHkgZXZlcnkgdGltZSBhIFBhckRvIERvRm4gZ2V0cyBleGVjdXRlZC4gSW4gdGhlIGV4YW1wbGUgYmVsb3cgdGhlCmxhbWJkYSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhlIERvRm4gZm9yIHRoZSBNYXAgdHJhbnNmb3JtIHdpbGwgZ2V0IG9uIGVhY2gKY2FsbCAqb25lKiByb3cgb2YgdGhlIG1haW4gdGFibGUgYW5kICphbGwqIHJvd3Mgb2YgdGhlIHNpZGUgdGFibGUuIFRoZSBydW5uZXIKbWF5IHVzZSBzb21lIGNhY2hpbmcgdGVjaG5pcXVlcyB0byBzaGFyZSB0aGUgc2lkZSBpbnB1dHMgYmV0d2VlbiBjYWxscyBpbiBvcmRlcgp0byBhdm9pZCBleGNlc3NpdmUgcmVhZGluZzo6OgoKICBtYWluX3RhYmxlID0gcGlwZWxpbmUgfCAnVmVyeUJpZycgPj4gYmVhbS5pby5SZWFkKGJlYW0uaW8uQmlnUXVlcnlTb3VyY2UoKQogIHNpZGVfdGFibGUgPSBwaXBlbGluZSB8ICdOb3RCaWcnID4+IGJlYW0uaW8uUmVhZChiZWFtLmlvLkJpZ1F1ZXJ5U291cmNlKCkKICByZXN1bHRzID0gKAogICAgICBtYWluX3RhYmxlCiAgICAgIHwgJ1Byb2Nlc3NEYXRhJyA+PiBiZWFtLk1hcCgKICAgICAgICAgIGxhbWJkYSBlbGVtZW50LCBzaWRlX2lucHV0OiAuLi4sIEFzTGlzdChzaWRlX3RhYmxlKSkpCgpUaGVyZSBpcyBubyBkaWZmZXJlbmNlIGluIGhvdyBtYWluIGFuZCBzaWRlIGlucHV0cyBhcmUgcmVhZC4gV2hhdCBtYWtlcyB0aGUKc2lkZV90YWJsZSBhICdzaWRlIGlucHV0JyBpcyB0aGUgQXNMaXN0IHdyYXBwZXIgdXNlZCB3aGVuIHBhc3NpbmcgdGhlIHRhYmxlCmFzIGEgcGFyYW1ldGVyIHRvIHRoZSBNYXAgdHJhbnNmb3JtLiBBc0xpc3Qgc2lnbmFscyB0byB0aGUgZXhlY3V0aW9uIGZyYW1ld29yawp0aGF0IGl0cyBpbnB1dCBzaG91bGQgYmUgbWFkZSBhdmFpbGFibGUgd2hvbGUuCgpUaGUgbWFpbiBhbmQgc2lkZSBpbnB1dHMgYXJlIGltcGxlbWVudGVkIGRpZmZlcmVudGx5LiBSZWFkaW5nIGEgQmlnUXVlcnkgdGFibGUKYXMgbWFpbiBpbnB1dCBlbnRhaWxzIGV4cG9ydGluZyB0aGUgdGFibGUgdG8gYSBzZXQgb2YgR0NTIGZpbGVzIChjdXJyZW50bHkgaW4KSlNPTiBmb3JtYXQpIGFuZCB0aGVuIHByb2Nlc3NpbmcgdGhvc2UgZmlsZXMuIFJlYWRpbmcgdGhlIHNhbWUgdGFibGUgYXMgYSBzaWRlCmlucHV0IGVudGFpbHMgcXVlcnlpbmcgdGhlIHRhYmxlIGZvciBhbGwgaXRzIHJvd3MuIFRoZSBjb2RlciBhcmd1bWVudCBvbgpCaWdRdWVyeVNvdXJjZSBjb250cm9scyB0aGUgcmVhZGluZyBvZiB0aGUgbGluZXMgaW4gdGhlIGV4cG9ydCBmaWxlcyAoaS5lLiwKdHJhbnNmb3JtIGEgSlNPTiBvYmplY3QgaW50byBhIFBDb2xsZWN0aW9uIGVsZW1lbnQpLiBUaGUgY29kZXIgaXMgbm90IGludm9sdmVkCndoZW4gdGhlIHNhbWUgdGFibGUgaXMgcmVhZCBhcyBhIHNpZGUgaW5wdXQgc2luY2UgdGhlcmUgaXMgbm8gaW50ZXJtZWRpYXRlCmZvcm1hdCBpbnZvbHZlZC4gV2UgZ2V0IHRoZSB0YWJsZSByb3dzIGRpcmVjdGx5IGZyb20gdGhlIEJpZ1F1ZXJ5IHNlcnZpY2Ugd2l0aAphIHF1ZXJ5LgoKVXNlcnMgbWF5IHByb3ZpZGUgYSBxdWVyeSB0byByZWFkIGZyb20gcmF0aGVyIHRoYW4gcmVhZGluZyBhbGwgb2YgYSBCaWdRdWVyeQp0YWJsZS4gSWYgc3BlY2lmaWVkLCB0aGUgcmVzdWx0IG9idGFpbmVkIGJ5IGV4ZWN1dGluZyB0aGUgc3BlY2lmaWVkIHF1ZXJ5IHdpbGwKYmUgdXNlZCBhcyB0aGUgZGF0YSBvZiB0aGUgaW5wdXQgdHJhbnNmb3JtLjo6CgogIHF1ZXJ5X3Jlc3VsdHMgPSBwaXBlbGluZSB8IGJlYW0uaW8uUmVhZChiZWFtLmlvLkJpZ1F1ZXJ5U291cmNlKAogICAgICBxdWVyeT0nU0VMRUNUIHllYXIsIG1lYW5fdGVtcCBGUk9NIHNhbXBsZXMud2VhdGhlcl9zdGF0aW9ucycpKQoKV2hlbiBjcmVhdGluZyBhIEJpZ1F1ZXJ5IGlucHV0IHRyYW5zZm9ybSwgdXNlcnMgc2hvdWxkIHByb3ZpZGUgZWl0aGVyIGEgcXVlcnkKb3IgYSB0YWJsZS4gUGlwZWxpbmUgY29uc3RydWN0aW9uIHdpbGwgZmFpbCB3aXRoIGEgdmFsaWRhdGlvbiBlcnJvciBpZiBuZWl0aGVyCm9yIGJvdGggYXJlIHNwZWNpZmllZC4KCioqVGltZSBwYXJ0aXRpb25lZCB0YWJsZXMqKgoKQmlnUXVlcnkgc2luayBjdXJyZW50bHkgZG9lcyBub3QgZnVsbHkgc3VwcG9ydCB3cml0aW5nIHRvIEJpZ1F1ZXJ5CnRpbWUgcGFydGl0aW9uZWQgdGFibGVzLiBCdXQgd3JpdGluZyB0byBhICpzaW5nbGUqIHBhcnRpdGlvbiBtYXkgd29yayBpZgp0aGF0IGRvZXMgbm90IGludm9sdmUgY3JlYXRpbmcgYSBuZXcgdGFibGUgKGZvciBleGFtcGxlLCB3aGVuIHdyaXRpbmcgdG8gYW4KZXhpc3RpbmcgdGFibGUgd2l0aCBgY3JlYXRlX2Rpc3Bvc2l0aW9uPUNSRUFURV9ORVZFUmAgYW5kCmB3cml0ZV9kaXNwb3NpdGlvbj1XUklURV9BUFBFTkRgKS4KQmlnUXVlcnkgc291cmNlIHN1cHBvcnRzIHJlYWRpbmcgZnJvbSBhIHNpbmdsZSB0aW1lIHBhcnRpdGlvbiB3aXRoIHRoZSBwYXJ0aXRpb24KZGVjb3JhdG9yIHNwZWNpZmllZCBhcyBhIHBhcnQgb2YgdGhlIHRhYmxlIGlkZW50aWZpZXIuCgoqKiogU2hvcnQgaW50cm9kdWN0aW9uIHRvIEJpZ1F1ZXJ5IGNvbmNlcHRzICoqKgpUYWJsZXMgaGF2ZSByb3dzIChUYWJsZVJvdykgYW5kIGVhY2ggcm93IGhhcyBjZWxscyAoVGFibGVDZWxsKS4KQSB0YWJsZSBoYXMgYSBzY2hlbWEgKFRhYmxlU2NoZW1hKSwgd2hpY2ggaW4gdHVybiBkZXNjcmliZXMgdGhlIHNjaGVtYSBvZiBlYWNoCmNlbGwgKFRhYmxlRmllbGRTY2hlbWEpLiBUaGUgdGVybXMgZmllbGQgYW5kIGNlbGwgYXJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5LgoKVGFibGVTY2hlbWE6IERlc2NyaWJlcyB0aGUgc2NoZW1hICh0eXBlcyBhbmQgb3JkZXIpIGZvciB2YWx1ZXMgaW4gZWFjaCByb3cuCiAgSGFzIG9uZSBhdHRyaWJ1dGUsICdmaWVsZCcsIHdoaWNoIGlzIGxpc3Qgb2YgVGFibGVGaWVsZFNjaGVtYSBvYmplY3RzLgoKVGFibGVGaWVsZFNjaGVtYTogRGVzY3JpYmVzIHRoZSBzY2hlbWEgKHR5cGUsIG5hbWUpIGZvciBvbmUgZmllbGQuCiAgSGFzIHNldmVyYWwgYXR0cmlidXRlcywgaW5jbHVkaW5nICduYW1lJyBhbmQgJ3R5cGUnLiBDb21tb24gdmFsdWVzIGZvcgogIHRoZSB0eXBlIGF0dHJpYnV0ZSBhcmU6ICdTVFJJTkcnLCAnSU5URUdFUicsICdGTE9BVCcsICdCT09MRUFOJywgJ05VTUVSSUMnLAogICdHRU9HUkFQSFknLgogIEFsbCBwb3NzaWJsZSB2YWx1ZXMgYXJlIGRlc2NyaWJlZCBhdDoKICBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vYmlncXVlcnkvZG9jcy9yZWZlcmVuY2Uvc3RhbmRhcmQtc3FsL2RhdGEtdHlwZXMKClRhYmxlUm93OiBIb2xkcyBhbGwgdmFsdWVzIGluIGEgdGFibGUgcm93LiBIYXMgb25lIGF0dHJpYnV0ZSwgJ2YnLCB3aGljaCBpcyBhCiAgbGlzdCBvZiBUYWJsZUNlbGwgaW5zdGFuY2VzLgoKVGFibGVDZWxsOiBIb2xkcyB0aGUgdmFsdWUgZm9yIG9uZSBjZWxsIChvciBmaWVsZCkuICBIYXMgb25lIGF0dHJpYnV0ZSwKICAndicsIHdoaWNoIGlzIGEgSnNvblZhbHVlIGluc3RhbmNlLiBUaGlzIGNsYXNzIGlzIGRlZmluZWQgaW4KICBhcGl0b29scy5iYXNlLnB5LmV4dHJhX3R5cGVzLnB5IG1vZHVsZS4KCkFzIG9mIEJlYW0gMi43LjAsIHRoZSBOVU1FUklDIGRhdGEgdHlwZSBpcyBzdXBwb3J0ZWQuIFRoaXMgZGF0YSB0eXBlIHN1cHBvcnRzCmhpZ2gtcHJlY2lzaW9uIGRlY2ltYWwgbnVtYmVycyAocHJlY2lzaW9uIG9mIDM4IGRpZ2l0cywgc2NhbGUgb2YgOSBkaWdpdHMpLgpUaGUgR0VPR1JBUEhZIGRhdGEgdHlwZSB3b3JrcyB3aXRoIFdlbGwtS25vd24gVGV4dCAoU2VlCmh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1dlbGwta25vd25fdGV4dCkgZm9ybWF0IGZvciByZWFkaW5nIGFuZCB3cml0aW5nCnRvIEJpZ1F1ZXJ5LgoiIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgY29sbGVjdGlvbnMKaW1wb3J0IGRhdGV0aW1lCmltcG9ydCBkZWNpbWFsCmltcG9ydCBqc29uCmltcG9ydCBsb2dnaW5nCmltcG9ydCByZQppbXBvcnQgdGltZQppbXBvcnQgdXVpZApmcm9tIGJ1aWx0aW5zIGltcG9ydCBvYmplY3QKZnJvbSBidWlsdGlucyBpbXBvcnQgemlwCgpmcm9tIGZ1dHVyZS51dGlscyBpbXBvcnQgaXRlcml0ZW1zCmZyb20gZnV0dXJlLnV0aWxzIGltcG9ydCBpdGVydmFsdWVzCmZyb20gcGFzdC5idWlsdGlucyBpbXBvcnQgdW5pY29kZQoKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgY29kZXJzCmZyb20gYXBhY2hlX2JlYW0uaW50ZXJuYWwuZ2NwIGltcG9ydCBhdXRoCmZyb20gYXBhY2hlX2JlYW0uaW50ZXJuYWwuZ2NwLmpzb25fdmFsdWUgaW1wb3J0IGZyb21fanNvbl92YWx1ZQpmcm9tIGFwYWNoZV9iZWFtLmludGVybmFsLmdjcC5qc29uX3ZhbHVlIGltcG9ydCB0b19qc29uX3ZhbHVlCmZyb20gYXBhY2hlX2JlYW0uaW50ZXJuYWwuaHR0cF9jbGllbnQgaW1wb3J0IGdldF9uZXdfaHR0cApmcm9tIGFwYWNoZV9iZWFtLmlvLmdjcC5pbnRlcm5hbC5jbGllbnRzIGltcG9ydCBiaWdxdWVyeQpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgR29vZ2xlQ2xvdWRPcHRpb25zCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8gaW1wb3J0IGlvYmFzZSBhcyBkYXRhZmxvd19pbwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IERvRm4KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBQYXJEbwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IFBUcmFuc2Zvcm0KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXkgaW1wb3J0IERpc3BsYXlEYXRhSXRlbQpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzIGltcG9ydCByZXRyeQoKIyBQcm90ZWN0IGFnYWluc3QgZW52aXJvbm1lbnRzIHdoZXJlIGJpZ3F1ZXJ5IGxpYnJhcnkgaXMgbm90IGF2YWlsYWJsZS4KIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KdHJ5OgogIGZyb20gYXBpdG9vbHMuYmFzZS5weS5leGNlcHRpb25zIGltcG9ydCBIdHRwRXJyb3IKZXhjZXB0IEltcG9ydEVycm9yOgogIHBhc3MKIyBweWxpbnQ6IGVuYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbgoKCl9fYWxsX18gPSBbCiAgICAnVGFibGVSb3dKc29uQ29kZXInLAogICAgJ0JpZ1F1ZXJ5RGlzcG9zaXRpb24nLAogICAgJ0JpZ1F1ZXJ5U291cmNlJywKICAgICdCaWdRdWVyeVNpbmsnLAogICAgJ1dyaXRlVG9CaWdRdWVyeScsCiAgICBdCgpKU09OX0NPTVBMSUFOQ0VfRVJST1IgPSAnTkFOLCBJTkYgYW5kIC1JTkYgdmFsdWVzIGFyZSBub3QgSlNPTiBjb21wbGlhbnQuJwpNQVhfUkVUUklFUyA9IDMKCgpkZWYgZGVmYXVsdF9lbmNvZGVyKG9iaik6CiAgaWYgaXNpbnN0YW5jZShvYmosIGRlY2ltYWwuRGVjaW1hbCk6CiAgICByZXR1cm4gc3RyKG9iaikKICByYWlzZSBUeXBlRXJyb3IoCiAgICAgICJPYmplY3Qgb2YgdHlwZSAnJXMnIGlzIG5vdCBKU09OIHNlcmlhbGl6YWJsZSIgJSB0eXBlKG9iaikuX19uYW1lX18pCgoKY2xhc3MgUm93QXNEaWN0SnNvbkNvZGVyKGNvZGVycy5Db2Rlcik6CiAgIiIiQSBjb2RlciBmb3IgYSB0YWJsZSByb3cgKHJlcHJlc2VudGVkIGFzIGEgZGljdCkgdG8vZnJvbSBhIEpTT04gc3RyaW5nLgoKICBUaGlzIGlzIHRoZSBkZWZhdWx0IGNvZGVyIGZvciBzb3VyY2VzIGFuZCBzaW5rcyBpZiB0aGUgY29kZXIgYXJndW1lbnQgaXMgbm90CiAgc3BlY2lmaWVkLgogICIiIgoKICBkZWYgZW5jb2RlKHNlbGYsIHRhYmxlX3Jvdyk6CiAgICAjIFRoZSBub3JtYWwgZXJyb3Igd2hlbiBkdW1waW5nIE5BTi9JTkYgdmFsdWVzIGlzOgogICAgIyBWYWx1ZUVycm9yOiBPdXQgb2YgcmFuZ2UgZmxvYXQgdmFsdWVzIGFyZSBub3QgSlNPTiBjb21wbGlhbnQKICAgICMgVGhpcyBjb2RlIHdpbGwgY2F0Y2ggdGhpcyBlcnJvciB0byBlbWl0IGFuIGVycm9yIHRoYXQgZXhwbGFpbnMKICAgICMgdG8gdGhlIHByb2dyYW1tZXIgdGhhdCB0aGV5IGhhdmUgdXNlZCBOQU4vSU5GIHZhbHVlcy4KICAgIHRyeToKICAgICAgcmV0dXJuIGpzb24uZHVtcHMoCiAgICAgICAgICB0YWJsZV9yb3csIGFsbG93X25hbj1GYWxzZSwgZGVmYXVsdD1kZWZhdWx0X2VuY29kZXIpCiAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCclcy4gJXMnICUgKGUsIEpTT05fQ09NUExJQU5DRV9FUlJPUikpCgogIGRlZiBkZWNvZGUoc2VsZiwgZW5jb2RlZF90YWJsZV9yb3cpOgogICAgcmV0dXJuIGpzb24ubG9hZHMoZW5jb2RlZF90YWJsZV9yb3cpCgoKY2xhc3MgVGFibGVSb3dKc29uQ29kZXIoY29kZXJzLkNvZGVyKToKICAiIiJBIGNvZGVyIGZvciBhIFRhYmxlUm93IGluc3RhbmNlIHRvL2Zyb20gYSBKU09OIHN0cmluZy4KCiAgTm90ZSB0aGF0IHRoZSBlbmNvZGluZyBvcGVyYXRpb24gKHVzZWQgd2hlbiB3cml0aW5nIHRvIHNpbmtzKSByZXF1aXJlcyB0aGUKICB0YWJsZSBzY2hlbWEgaW4gb3JkZXIgdG8gb2J0YWluIHRoZSBvcmRlcmVkIGxpc3Qgb2YgZmllbGQgbmFtZXMuIFJlYWRpbmcgZnJvbQogIHNvdXJjZXMgb24gdGhlIG90aGVyIGhhbmQgZG9lcyBub3QgbmVlZCB0aGUgdGFibGUgc2NoZW1hLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgdGFibGVfc2NoZW1hPU5vbmUpOgogICAgIyBUaGUgdGFibGUgc2NoZW1hIGlzIG5lZWRlZCBmb3IgZW5jb2RpbmcgVGFibGVSb3dzIGFzIEpTT04gKHdyaXRpbmcgdG8KICAgICMgc2lua3MpIGJlY2F1c2UgdGhlIG9yZGVyZWQgbGlzdCBvZiBmaWVsZCBuYW1lcyBpcyB1c2VkIGluIHRoZSBKU09OCiAgICAjIHJlcHJlc2VudGF0aW9uLgogICAgc2VsZi50YWJsZV9zY2hlbWEgPSB0YWJsZV9zY2hlbWEKICAgICMgUHJlY29tcHV0ZSBmaWVsZCBuYW1lcyBzaW5jZSB3ZSBuZWVkIHRoZW0gZm9yIHJvdyBlbmNvZGluZy4KICAgIGlmIHNlbGYudGFibGVfc2NoZW1hOgogICAgICBzZWxmLmZpZWxkX25hbWVzID0gdHVwbGUoZnMubmFtZSBmb3IgZnMgaW4gc2VsZi50YWJsZV9zY2hlbWEuZmllbGRzKQogICAgICBzZWxmLmZpZWxkX3R5cGVzID0gdHVwbGUoZnMudHlwZSBmb3IgZnMgaW4gc2VsZi50YWJsZV9zY2hlbWEuZmllbGRzKQoKICBkZWYgZW5jb2RlKHNlbGYsIHRhYmxlX3Jvdyk6CiAgICBpZiBzZWxmLnRhYmxlX3NjaGVtYSBpcyBOb25lOgogICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigKICAgICAgICAgICdUaGUgVGFibGVSb3dKc29uQ29kZXIgcmVxdWlyZXMgYSB0YWJsZSBzY2hlbWEgZm9yICcKICAgICAgICAgICdlbmNvZGluZyBvcGVyYXRpb25zLiBQbGVhc2Ugc3BlY2lmeSBhIHRhYmxlX3NjaGVtYSBhcmd1bWVudC4nKQogICAgdHJ5OgogICAgICByZXR1cm4ganNvbi5kdW1wcygKICAgICAgICAgIGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KAogICAgICAgICAgICAgIHppcChzZWxmLmZpZWxkX25hbWVzLAogICAgICAgICAgICAgICAgICBbZnJvbV9qc29uX3ZhbHVlKGYudikgZm9yIGYgaW4gdGFibGVfcm93LmZdKSksCiAgICAgICAgICBhbGxvd19uYW49RmFsc2UsCiAgICAgICAgICBkZWZhdWx0PWRlZmF1bHRfZW5jb2RlcikKICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJyVzLiAlcycgJSAoZSwgSlNPTl9DT01QTElBTkNFX0VSUk9SKSkKCiAgZGVmIGRlY29kZShzZWxmLCBlbmNvZGVkX3RhYmxlX3Jvdyk6CiAgICBvZCA9IGpzb24ubG9hZHMoCiAgICAgICAgZW5jb2RlZF90YWJsZV9yb3csIG9iamVjdF9wYWlyc19ob29rPWNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KQogICAgcmV0dXJuIGJpZ3F1ZXJ5LlRhYmxlUm93KAogICAgICAgIGY9W2JpZ3F1ZXJ5LlRhYmxlQ2VsbCh2PXRvX2pzb25fdmFsdWUoZSkpIGZvciBlIGluIGl0ZXJ2YWx1ZXMob2QpXSkKCgpkZWYgcGFyc2VfdGFibGVfc2NoZW1hX2Zyb21fanNvbihzY2hlbWFfc3RyaW5nKToKICAiIiJQYXJzZSB0aGUgVGFibGUgU2NoZW1hIHByb3ZpZGVkIGFzIHN0cmluZy4KCiAgQXJnczoKICAgIHNjaGVtYV9zdHJpbmc6IFN0cmluZyBzZXJpYWxpemVkIHRhYmxlIHNjaGVtYSwgc2hvdWxkIGJlIGEgdmFsaWQgSlNPTi4KCiAgUmV0dXJuczoKICAgIEEgVGFibGVTY2hlbWEgb2YgdGhlIEJpZ1F1ZXJ5IGV4cG9ydCBmcm9tIGVpdGhlciB0aGUgUXVlcnkgb3IgdGhlIFRhYmxlLgogICIiIgogIGpzb25fc2NoZW1hID0ganNvbi5sb2FkcyhzY2hlbWFfc3RyaW5nKQoKICBkZWYgX3BhcnNlX3NjaGVtYV9maWVsZChmaWVsZCk6CiAgICAiIiJQYXJzZSBhIHNpbmdsZSBzY2hlbWEgZmllbGQgZnJvbSBkaWN0aW9uYXJ5LgoKICAgIEFyZ3M6CiAgICAgIGZpZWxkOiBEaWN0aW9uYXJ5IG9iamVjdCBjb250YWluaW5nIHNlcmlhbGl6ZWQgc2NoZW1hLgoKICAgIFJldHVybnM6CiAgICAgIEEgVGFibGVGaWVsZFNjaGVtYSBmb3IgYSBzaW5nbGUgY29sdW1uIGluIEJpZ1F1ZXJ5LgogICAgIiIiCiAgICBzY2hlbWEgPSBiaWdxdWVyeS5UYWJsZUZpZWxkU2NoZW1hKCkKICAgIHNjaGVtYS5uYW1lID0gZmllbGRbJ25hbWUnXQogICAgc2NoZW1hLnR5cGUgPSBmaWVsZFsndHlwZSddCiAgICBpZiAnbW9kZScgaW4gZmllbGQ6CiAgICAgIHNjaGVtYS5tb2RlID0gZmllbGRbJ21vZGUnXQogICAgZWxzZToKICAgICAgc2NoZW1hLm1vZGUgPSAnTlVMTEFCTEUnCiAgICBpZiAnZGVzY3JpcHRpb24nIGluIGZpZWxkOgogICAgICBzY2hlbWEuZGVzY3JpcHRpb24gPSBmaWVsZFsnZGVzY3JpcHRpb24nXQogICAgaWYgJ2ZpZWxkcycgaW4gZmllbGQ6CiAgICAgIHNjaGVtYS5maWVsZHMgPSBbX3BhcnNlX3NjaGVtYV9maWVsZCh4KSBmb3IgeCBpbiBmaWVsZFsnZmllbGRzJ11dCiAgICByZXR1cm4gc2NoZW1hCgogIGZpZWxkcyA9IFtfcGFyc2Vfc2NoZW1hX2ZpZWxkKGYpIGZvciBmIGluIGpzb25fc2NoZW1hWydmaWVsZHMnXV0KICByZXR1cm4gYmlncXVlcnkuVGFibGVTY2hlbWEoZmllbGRzPWZpZWxkcykKCgpjbGFzcyBCaWdRdWVyeURpc3Bvc2l0aW9uKG9iamVjdCk6CiAgIiIiQ2xhc3MgaG9sZGluZyBzdGFuZGFyZCBzdHJpbmdzIHVzZWQgZm9yIGNyZWF0ZSBhbmQgd3JpdGUgZGlzcG9zaXRpb25zLiIiIgoKICBDUkVBVEVfTkVWRVIgPSAnQ1JFQVRFX05FVkVSJwogIENSRUFURV9JRl9ORUVERUQgPSAnQ1JFQVRFX0lGX05FRURFRCcKICBXUklURV9UUlVOQ0FURSA9ICdXUklURV9UUlVOQ0FURScKICBXUklURV9BUFBFTkQgPSAnV1JJVEVfQVBQRU5EJwogIFdSSVRFX0VNUFRZID0gJ1dSSVRFX0VNUFRZJwoKICBAc3RhdGljbWV0aG9kCiAgZGVmIHZhbGlkYXRlX2NyZWF0ZShkaXNwb3NpdGlvbik6CiAgICB2YWx1ZXMgPSAoQmlnUXVlcnlEaXNwb3NpdGlvbi5DUkVBVEVfTkVWRVIsCiAgICAgICAgICAgICAgQmlnUXVlcnlEaXNwb3NpdGlvbi5DUkVBVEVfSUZfTkVFREVEKQogICAgaWYgZGlzcG9zaXRpb24gbm90IGluIHZhbHVlczoKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICdJbnZhbGlkIGNyZWF0ZSBkaXNwb3NpdGlvbiAlcy4gRXhwZWN0aW5nICVzJyAlIChkaXNwb3NpdGlvbiwgdmFsdWVzKSkKICAgIHJldHVybiBkaXNwb3NpdGlvbgoKICBAc3RhdGljbWV0aG9kCiAgZGVmIHZhbGlkYXRlX3dyaXRlKGRpc3Bvc2l0aW9uKToKICAgIHZhbHVlcyA9IChCaWdRdWVyeURpc3Bvc2l0aW9uLldSSVRFX1RSVU5DQVRFLAogICAgICAgICAgICAgIEJpZ1F1ZXJ5RGlzcG9zaXRpb24uV1JJVEVfQVBQRU5ELAogICAgICAgICAgICAgIEJpZ1F1ZXJ5RGlzcG9zaXRpb24uV1JJVEVfRU1QVFkpCiAgICBpZiBkaXNwb3NpdGlvbiBub3QgaW4gdmFsdWVzOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgJ0ludmFsaWQgd3JpdGUgZGlzcG9zaXRpb24gJXMuIEV4cGVjdGluZyAlcycgJSAoZGlzcG9zaXRpb24sIHZhbHVlcykpCiAgICByZXR1cm4gZGlzcG9zaXRpb24KCgpkZWYgX3BhcnNlX3RhYmxlX3JlZmVyZW5jZSh0YWJsZSwgZGF0YXNldD1Ob25lLCBwcm9qZWN0PU5vbmUpOgogICIiIlBhcnNlcyBhIHRhYmxlIHJlZmVyZW5jZSBpbnRvIGEgKHByb2plY3QsIGRhdGFzZXQsIHRhYmxlKSB0dXBsZS4KCiAgQXJnczoKICAgIHRhYmxlOiBUaGUgSUQgb2YgdGhlIHRhYmxlLiBUaGUgSUQgbXVzdCBjb250YWluIG9ubHkgbGV0dGVycwogICAgICAoYS16LCBBLVopLCBudW1iZXJzICgwLTkpLCBvciB1bmRlcnNjb3JlcyAoXykuIElmIGRhdGFzZXQgYXJndW1lbnQgaXMgTm9uZQogICAgICB0aGVuIHRoZSB0YWJsZSBhcmd1bWVudCBtdXN0IGNvbnRhaW4gdGhlIGVudGlyZSB0YWJsZSByZWZlcmVuY2U6CiAgICAgICdEQVRBU0VULlRBQkxFJyBvciAnUFJPSkVDVDpEQVRBU0VULlRBQkxFJy4gVGhpcyBhcmd1bWVudCBjYW4gYmUgYQogICAgICBiaWdxdWVyeS5UYWJsZVJlZmVyZW5jZSBpbnN0YW5jZSBpbiB3aGljaCBjYXNlIGRhdGFzZXQgYW5kIHByb2plY3QgYXJlCiAgICAgIGlnbm9yZWQgYW5kIHRoZSByZWZlcmVuY2UgaXMgcmV0dXJuZWQgYXMgYSByZXN1bHQuICBBZGRpdGlvbmFsbHksIGZvciBkYXRlCiAgICAgIHBhcnRpdGlvbmVkIHRhYmxlcywgYXBwZW5kaW5nICckWVlZWW1tZGQnIHRvIHRoZSB0YWJsZSBuYW1lIGlzIHN1cHBvcnRlZCwKICAgICAgZS5nLiAnREFUQVNFVC5UQUJMRSRZWVlZbW1kZCcuCiAgICBkYXRhc2V0OiBUaGUgSUQgb2YgdGhlIGRhdGFzZXQgY29udGFpbmluZyB0aGlzIHRhYmxlIG9yIG51bGwgaWYgdGhlIHRhYmxlCiAgICAgIHJlZmVyZW5jZSBpcyBzcGVjaWZpZWQgZW50aXJlbHkgYnkgdGhlIHRhYmxlIGFyZ3VtZW50LgogICAgcHJvamVjdDogVGhlIElEIG9mIHRoZSBwcm9qZWN0IGNvbnRhaW5pbmcgdGhpcyB0YWJsZSBvciBudWxsIGlmIHRoZSB0YWJsZQogICAgICByZWZlcmVuY2UgaXMgc3BlY2lmaWVkIGVudGlyZWx5IGJ5IHRoZSB0YWJsZSAoYW5kIHBvc3NpYmx5IGRhdGFzZXQpCiAgICAgIGFyZ3VtZW50LgoKICBSZXR1cm5zOgogICAgQSBiaWdxdWVyeS5UYWJsZVJlZmVyZW5jZSBvYmplY3QuIFRoZSBvYmplY3QgaGFzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczoKICAgIHByb2plY3RJZCwgZGF0YXNldElkLCBhbmQgdGFibGVJZC4KCiAgUmFpc2VzOgogICAgVmFsdWVFcnJvcjogaWYgdGhlIHRhYmxlIHJlZmVyZW5jZSBhcyBhIHN0cmluZyBkb2VzIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQKICAgICAgZm9ybWF0LgogICIiIgoKICBpZiBpc2luc3RhbmNlKHRhYmxlLCBiaWdxdWVyeS5UYWJsZVJlZmVyZW5jZSk6CiAgICByZXR1cm4gdGFibGUKCiAgdGFibGVfcmVmZXJlbmNlID0gYmlncXVlcnkuVGFibGVSZWZlcmVuY2UoKQogICMgSWYgZGF0YXNldCBhcmd1bWVudCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGUKICAjIHRhYmxlIGFyZ3VtZW50IHdpbGwgY29udGFpbiBhIGZ1bGwgdGFibGUgcmVmZXJlbmNlIGluc3RlYWQgb2YganVzdCBhCiAgIyB0YWJsZSBuYW1lLgogIGlmIGRhdGFzZXQgaXMgTm9uZToKICAgIG1hdGNoID0gcmUubWF0Y2goCiAgICAgICAgcideKCg/UDxwcm9qZWN0Pi4rKTopPyg/UDxkYXRhc2V0Plx3KylcLig/UDx0YWJsZT5bXHdcJF0rKSQnLCB0YWJsZSkKICAgIGlmIG5vdCBtYXRjaDoKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICdFeHBlY3RlZCBhIHRhYmxlIHJlZmVyZW5jZSAoUFJPSkVDVDpEQVRBU0VULlRBQkxFIG9yICcKICAgICAgICAgICdEQVRBU0VULlRBQkxFKSBpbnN0ZWFkIG9mICVzLicgJSB0YWJsZSkKICAgIHRhYmxlX3JlZmVyZW5jZS5wcm9qZWN0SWQgPSBtYXRjaC5ncm91cCgncHJvamVjdCcpCiAgICB0YWJsZV9yZWZlcmVuY2UuZGF0YXNldElkID0gbWF0Y2guZ3JvdXAoJ2RhdGFzZXQnKQogICAgdGFibGVfcmVmZXJlbmNlLnRhYmxlSWQgPSBtYXRjaC5ncm91cCgndGFibGUnKQogIGVsc2U6CiAgICB0YWJsZV9yZWZlcmVuY2UucHJvamVjdElkID0gcHJvamVjdAogICAgdGFibGVfcmVmZXJlbmNlLmRhdGFzZXRJZCA9IGRhdGFzZXQKICAgIHRhYmxlX3JlZmVyZW5jZS50YWJsZUlkID0gdGFibGUKICByZXR1cm4gdGFibGVfcmVmZXJlbmNlCgoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEJpZ1F1ZXJ5U291cmNlLCBCaWdRdWVyeVNpbmsuCgoKY2xhc3MgQmlnUXVlcnlTb3VyY2UoZGF0YWZsb3dfaW8uTmF0aXZlU291cmNlKToKICAiIiJBIHNvdXJjZSBiYXNlZCBvbiBhIEJpZ1F1ZXJ5IHRhYmxlLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgdGFibGU9Tm9uZSwgZGF0YXNldD1Ob25lLCBwcm9qZWN0PU5vbmUsIHF1ZXJ5PU5vbmUsCiAgICAgICAgICAgICAgIHZhbGlkYXRlPUZhbHNlLCBjb2Rlcj1Ob25lLCB1c2Vfc3RhbmRhcmRfc3FsPUZhbHNlLAogICAgICAgICAgICAgICBmbGF0dGVuX3Jlc3VsdHM9VHJ1ZSk6CiAgICAiIiJJbml0aWFsaXplIGEgOmNsYXNzOmBCaWdRdWVyeVNvdXJjZWAuCgogICAgQXJnczoKICAgICAgdGFibGUgKHN0cik6IFRoZSBJRCBvZiBhIEJpZ1F1ZXJ5IHRhYmxlLiBJZiBzcGVjaWZpZWQgYWxsIGRhdGEgb2YgdGhlCiAgICAgICAgdGFibGUgd2lsbCBiZSB1c2VkIGFzIGlucHV0IG9mIHRoZSBjdXJyZW50IHNvdXJjZS4gVGhlIElEIG11c3QgY29udGFpbgogICAgICAgIG9ubHkgbGV0dGVycyBgYGEtemBgLCBgYEEtWmBgLCBudW1iZXJzIGBgMC05YGAsIG9yIHVuZGVyc2NvcmVzCiAgICAgICAgYGBfYGAuIElmIGRhdGFzZXQgYW5kIHF1ZXJ5IGFyZ3VtZW50cyBhcmUgOmRhdGE6YE5vbmVgIHRoZW4gdGhlIHRhYmxlCiAgICAgICAgYXJndW1lbnQgbXVzdCBjb250YWluIHRoZSBlbnRpcmUgdGFibGUgcmVmZXJlbmNlIHNwZWNpZmllZCBhczoKICAgICAgICBgYCdEQVRBU0VULlRBQkxFJ2BgIG9yIGBgJ1BST0pFQ1Q6REFUQVNFVC5UQUJMRSdgYC4KICAgICAgZGF0YXNldCAoc3RyKTogVGhlIElEIG9mIHRoZSBkYXRhc2V0IGNvbnRhaW5pbmcgdGhpcyB0YWJsZSBvcgogICAgICAgIDpkYXRhOmBOb25lYCBpZiB0aGUgdGFibGUgcmVmZXJlbmNlIGlzIHNwZWNpZmllZCBlbnRpcmVseSBieSB0aGUgdGFibGUKICAgICAgICBhcmd1bWVudCBvciBhIHF1ZXJ5IGlzIHNwZWNpZmllZC4KICAgICAgcHJvamVjdCAoc3RyKTogVGhlIElEIG9mIHRoZSBwcm9qZWN0IGNvbnRhaW5pbmcgdGhpcyB0YWJsZSBvcgogICAgICAgIDpkYXRhOmBOb25lYCBpZiB0aGUgdGFibGUgcmVmZXJlbmNlIGlzIHNwZWNpZmllZCBlbnRpcmVseSBieSB0aGUgdGFibGUKICAgICAgICBhcmd1bWVudCBvciBhIHF1ZXJ5IGlzIHNwZWNpZmllZC4KICAgICAgcXVlcnkgKHN0cik6IEEgcXVlcnkgdG8gYmUgdXNlZCBpbnN0ZWFkIG9mIGFyZ3VtZW50cyB0YWJsZSwgZGF0YXNldCwgYW5kCiAgICAgICAgcHJvamVjdC4KICAgICAgdmFsaWRhdGUgKGJvb2wpOiBJZiA6ZGF0YTpgVHJ1ZWAsIHZhcmlvdXMgY2hlY2tzIHdpbGwgYmUgZG9uZSB3aGVuIHNvdXJjZQogICAgICAgIGdldHMgaW5pdGlhbGl6ZWQgKGUuZy4sIGlzIHRhYmxlIHByZXNlbnQ/KS4gVGhpcyBzaG91bGQgYmUKICAgICAgICA6ZGF0YTpgVHJ1ZWAgZm9yIG1vc3Qgc2NlbmFyaW9zIGluIG9yZGVyIHRvIGNhdGNoIGVycm9ycyBhcyBlYXJseSBhcwogICAgICAgIHBvc3NpYmxlIChwaXBlbGluZSBjb25zdHJ1Y3Rpb24gaW5zdGVhZCBvZiBwaXBlbGluZSBleGVjdXRpb24pLiBJdAogICAgICAgIHNob3VsZCBiZSA6ZGF0YTpgRmFsc2VgIGlmIHRoZSB0YWJsZSBpcyBjcmVhdGVkIGR1cmluZyBwaXBlbGluZQogICAgICAgIGV4ZWN1dGlvbiBieSBhIHByZXZpb3VzIHN0ZXAuCiAgICAgIGNvZGVyICh+YXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2Rlcik6IFRoZSBjb2RlciBmb3IgdGhlIHRhYmxlCiAgICAgICAgcm93cyBpZiBzZXJpYWxpemVkIHRvIGRpc2suIElmIDpkYXRhOmBOb25lYCwgdGhlbiB0aGUgZGVmYXVsdCBjb2RlciBpcwogICAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5Sb3dBc0RpY3RKc29uQ29kZXJgLAogICAgICAgIHdoaWNoIHdpbGwgaW50ZXJwcmV0IGV2ZXJ5IGxpbmUgaW4gYSBmaWxlIGFzIGEgSlNPTiBzZXJpYWxpemVkCiAgICAgICAgZGljdGlvbmFyeS4gVGhpcyBhcmd1bWVudCBuZWVkcyBhIHZhbHVlIG9ubHkgaW4gc3BlY2lhbCBjYXNlcyB3aGVuCiAgICAgICAgcmV0dXJuaW5nIHRhYmxlIHJvd3MgYXMgZGljdGlvbmFyaWVzIGlzIG5vdCBkZXNpcmFibGUuCiAgICAgIHVzZV9zdGFuZGFyZF9zcWwgKGJvb2wpOiBTcGVjaWZpZXMgd2hldGhlciB0byB1c2UgQmlnUXVlcnkncyBzdGFuZGFyZCBTUUwKICAgICAgICBkaWFsZWN0IGZvciB0aGlzIHF1ZXJ5LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA6ZGF0YTpgRmFsc2VgLgogICAgICAgIElmIHNldCB0byA6ZGF0YTpgVHJ1ZWAsIHRoZSBxdWVyeSB3aWxsIHVzZSBCaWdRdWVyeSdzIHVwZGF0ZWQgU1FMCiAgICAgICAgZGlhbGVjdCB3aXRoIGltcHJvdmVkIHN0YW5kYXJkcyBjb21wbGlhbmNlLgogICAgICAgIFRoaXMgcGFyYW1ldGVyIGlzIGlnbm9yZWQgZm9yIHRhYmxlIGlucHV0cy4KICAgICAgZmxhdHRlbl9yZXN1bHRzIChib29sKTogRmxhdHRlbnMgYWxsIG5lc3RlZCBhbmQgcmVwZWF0ZWQgZmllbGRzIGluIHRoZQogICAgICAgIHF1ZXJ5IHJlc3VsdHMuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDpkYXRhOmBUcnVlYC4KCiAgICBSYWlzZXM6CiAgICAgIH5leGNlcHRpb25zLlZhbHVlRXJyb3I6IGlmIGFueSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6CgogICAgICAgIDEpIHRoZSB0YWJsZSByZWZlcmVuY2UgYXMgYSBzdHJpbmcgZG9lcyBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIGZvcm1hdAogICAgICAgIDIpIG5laXRoZXIgYSB0YWJsZSBub3IgYSBxdWVyeSBpcyBzcGVjaWZpZWQKICAgICAgICAzKSBib3RoIGEgdGFibGUgYW5kIGEgcXVlcnkgaXMgc3BlY2lmaWVkLgogICAgIiIiCgogICAgIyBJbXBvcnQgaGVyZSB0byBhdm9pZCBhZGRpbmcgdGhlIGRlcGVuZGVuY3kgZm9yIGxvY2FsIHJ1bm5pbmcgc2NlbmFyaW9zLgogICAgdHJ5OgogICAgICAjIHB5bGludDogZGlzYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbgogICAgICBmcm9tIGFwaXRvb2xzLmJhc2UgaW1wb3J0IHB5ICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtdmFyaWFibGUKICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoCiAgICAgICAgICAnR29vZ2xlIENsb3VkIElPIG5vdCBhdmFpbGFibGUsICcKICAgICAgICAgICdwbGVhc2UgaW5zdGFsbCBhcGFjaGVfYmVhbVtnY3BdJykKCiAgICBpZiB0YWJsZSBpcyBub3QgTm9uZSBhbmQgcXVlcnkgaXMgbm90IE5vbmU6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0JvdGggYSBCaWdRdWVyeSB0YWJsZSBhbmQgYSBxdWVyeSB3ZXJlIHNwZWNpZmllZC4nCiAgICAgICAgICAgICAgICAgICAgICAgJyBQbGVhc2Ugc3BlY2lmeSBvbmx5IG9uZSBvZiB0aGVzZS4nKQogICAgZWxpZiB0YWJsZSBpcyBOb25lIGFuZCBxdWVyeSBpcyBOb25lOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdBIEJpZ1F1ZXJ5IHRhYmxlIG9yIGEgcXVlcnkgbXVzdCBiZSBzcGVjaWZpZWQnKQogICAgZWxpZiB0YWJsZSBpcyBub3QgTm9uZToKICAgICAgc2VsZi50YWJsZV9yZWZlcmVuY2UgPSBfcGFyc2VfdGFibGVfcmVmZXJlbmNlKHRhYmxlLCBkYXRhc2V0LCBwcm9qZWN0KQogICAgICBzZWxmLnF1ZXJ5ID0gTm9uZQogICAgICBzZWxmLnVzZV9sZWdhY3lfc3FsID0gVHJ1ZQogICAgZWxzZToKICAgICAgc2VsZi5xdWVyeSA9IHF1ZXJ5CiAgICAgICMgVE9ETyhCRUFNLTEwODIpOiBDaGFuZ2UgdGhlIGludGVybmFsIGZsYWcgdG8gYmUgc3RhbmRhcmRfc3FsCiAgICAgIHNlbGYudXNlX2xlZ2FjeV9zcWwgPSBub3QgdXNlX3N0YW5kYXJkX3NxbAogICAgICBzZWxmLnRhYmxlX3JlZmVyZW5jZSA9IE5vbmUKCiAgICBzZWxmLnZhbGlkYXRlID0gdmFsaWRhdGUKICAgIHNlbGYuZmxhdHRlbl9yZXN1bHRzID0gZmxhdHRlbl9yZXN1bHRzCiAgICBzZWxmLmNvZGVyID0gY29kZXIgb3IgUm93QXNEaWN0SnNvbkNvZGVyKCkKCiAgZGVmIGRpc3BsYXlfZGF0YShzZWxmKToKICAgIGlmIHNlbGYucXVlcnkgaXMgbm90IE5vbmU6CiAgICAgIHJlcyA9IHsncXVlcnknOiBEaXNwbGF5RGF0YUl0ZW0oc2VsZi5xdWVyeSwgbGFiZWw9J1F1ZXJ5Jyl9CiAgICBlbHNlOgogICAgICBpZiBzZWxmLnRhYmxlX3JlZmVyZW5jZS5wcm9qZWN0SWQgaXMgbm90IE5vbmU6CiAgICAgICAgdGFibGVTcGVjID0gJ3t9Ont9Lnt9Jy5mb3JtYXQoc2VsZi50YWJsZV9yZWZlcmVuY2UucHJvamVjdElkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGFibGVfcmVmZXJlbmNlLmRhdGFzZXRJZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhYmxlX3JlZmVyZW5jZS50YWJsZUlkKQogICAgICBlbHNlOgogICAgICAgIHRhYmxlU3BlYyA9ICd7fS57fScuZm9ybWF0KHNlbGYudGFibGVfcmVmZXJlbmNlLmRhdGFzZXRJZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhYmxlX3JlZmVyZW5jZS50YWJsZUlkKQogICAgICByZXMgPSB7J3RhYmxlJzogRGlzcGxheURhdGFJdGVtKHRhYmxlU3BlYywgbGFiZWw9J1RhYmxlJyl9CgogICAgcmVzWyd2YWxpZGF0aW9uJ10gPSBEaXNwbGF5RGF0YUl0ZW0oc2VsZi52YWxpZGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPSdWYWxpZGF0aW9uIEVuYWJsZWQnKQogICAgcmV0dXJuIHJlcwoKICBAcHJvcGVydHkKICBkZWYgZm9ybWF0KHNlbGYpOgogICAgIiIiU291cmNlIGZvcm1hdCBuYW1lIHJlcXVpcmVkIGZvciByZW1vdGUgZXhlY3V0aW9uLiIiIgogICAgcmV0dXJuICdiaWdxdWVyeScKCiAgZGVmIHJlYWRlcihzZWxmLCB0ZXN0X2JpZ3F1ZXJ5X2NsaWVudD1Ob25lKToKICAgIHJldHVybiBCaWdRdWVyeVJlYWRlcigKICAgICAgICBzb3VyY2U9c2VsZiwKICAgICAgICB0ZXN0X2JpZ3F1ZXJ5X2NsaWVudD10ZXN0X2JpZ3F1ZXJ5X2NsaWVudCwKICAgICAgICB1c2VfbGVnYWN5X3NxbD1zZWxmLnVzZV9sZWdhY3lfc3FsLAogICAgICAgIGZsYXR0ZW5fcmVzdWx0cz1zZWxmLmZsYXR0ZW5fcmVzdWx0cykKCgpjbGFzcyBCaWdRdWVyeVNpbmsoZGF0YWZsb3dfaW8uTmF0aXZlU2luayk6CiAgIiIiQSBzaW5rIGJhc2VkIG9uIGEgQmlnUXVlcnkgdGFibGUuCgogIFRoaXMgQmlnUXVlcnkgc2luayB0cmlnZ2VycyBhIERhdGFmbG93IG5hdGl2ZSBzaW5rIGZvciBCaWdRdWVyeQogIHRoYXQgb25seSBzdXBwb3J0cyBiYXRjaCBwaXBlbGluZXMuCiAgSW5zdGVhZCBvZiB1c2luZyB0aGlzIHNpbmsgZGlyZWN0bHksIHBsZWFzZSB1c2UgV3JpdGVUb0JpZ1F1ZXJ5CiAgdHJhbnNmb3JtIHRoYXQgd29ya3MgZm9yIGJvdGggYmF0Y2ggYW5kIHN0cmVhbWluZyBwaXBlbGluZXMuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCB0YWJsZSwgZGF0YXNldD1Ob25lLCBwcm9qZWN0PU5vbmUsIHNjaGVtYT1Ob25lLAogICAgICAgICAgICAgICBjcmVhdGVfZGlzcG9zaXRpb249QmlnUXVlcnlEaXNwb3NpdGlvbi5DUkVBVEVfSUZfTkVFREVELAogICAgICAgICAgICAgICB3cml0ZV9kaXNwb3NpdGlvbj1CaWdRdWVyeURpc3Bvc2l0aW9uLldSSVRFX0VNUFRZLAogICAgICAgICAgICAgICB2YWxpZGF0ZT1GYWxzZSwgY29kZXI9Tm9uZSk6CiAgICAiIiJJbml0aWFsaXplIGEgQmlnUXVlcnlTaW5rLgoKICAgIEFyZ3M6CiAgICAgIHRhYmxlIChzdHIpOiBUaGUgSUQgb2YgdGhlIHRhYmxlLiBUaGUgSUQgbXVzdCBjb250YWluIG9ubHkgbGV0dGVycwogICAgICAgIGBgYS16YGAsIGBgQS1aYGAsIG51bWJlcnMgYGAwLTlgYCwgb3IgdW5kZXJzY29yZXMgYGBfYGAuIElmCiAgICAgICAgKipkYXRhc2V0KiogYXJndW1lbnQgaXMgOmRhdGE6YE5vbmVgIHRoZW4gdGhlIHRhYmxlIGFyZ3VtZW50IG11c3QKICAgICAgICBjb250YWluIHRoZSBlbnRpcmUgdGFibGUgcmVmZXJlbmNlIHNwZWNpZmllZCBhczogYGAnREFUQVNFVC5UQUJMRSdgYCBvcgogICAgICAgIGBgJ1BST0pFQ1Q6REFUQVNFVC5UQUJMRSdgYC4KICAgICAgZGF0YXNldCAoc3RyKTogVGhlIElEIG9mIHRoZSBkYXRhc2V0IGNvbnRhaW5pbmcgdGhpcyB0YWJsZSBvcgogICAgICAgIDpkYXRhOmBOb25lYCBpZiB0aGUgdGFibGUgcmVmZXJlbmNlIGlzIHNwZWNpZmllZCBlbnRpcmVseSBieSB0aGUgdGFibGUKICAgICAgICBhcmd1bWVudC4KICAgICAgcHJvamVjdCAoc3RyKTogVGhlIElEIG9mIHRoZSBwcm9qZWN0IGNvbnRhaW5pbmcgdGhpcyB0YWJsZSBvcgogICAgICAgIDpkYXRhOmBOb25lYCBpZiB0aGUgdGFibGUgcmVmZXJlbmNlIGlzIHNwZWNpZmllZCBlbnRpcmVseSBieSB0aGUgdGFibGUKICAgICAgICBhcmd1bWVudC4KICAgICAgc2NoZW1hIChzdHIpOiBUaGUgc2NoZW1hIHRvIGJlIHVzZWQgaWYgdGhlIEJpZ1F1ZXJ5IHRhYmxlIHRvIHdyaXRlIGhhcwogICAgICAgIHRvIGJlIGNyZWF0ZWQuIFRoaXMgY2FuIGJlIGVpdGhlciBzcGVjaWZpZWQgYXMgYQogICAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLmlvLmdjcC5pbnRlcm5hbC5jbGllbnRzLmJpZ3F1ZXJ5LlwKYmlncXVlcnlfdjJfbWVzc2FnZXMuVGFibGVTY2hlbWFgIG9iamVjdCBvciBhIHNpbmdsZSBzdHJpbmcgIG9mIHRoZSBmb3JtCiAgICAgICAgYGAnZmllbGQxOnR5cGUxLGZpZWxkMjp0eXBlMixmaWVsZDM6dHlwZTMnYGAgdGhhdCBkZWZpbmVzIGEgY29tbWEKICAgICAgICBzZXBhcmF0ZWQgbGlzdCBvZiBmaWVsZHMuIEhlcmUgYGAndHlwZSdgYCBzaG91bGQgc3BlY2lmeSB0aGUgQmlnUXVlcnkKICAgICAgICB0eXBlIG9mIHRoZSBmaWVsZC4gU2luZ2xlIHN0cmluZyBiYXNlZCBzY2hlbWFzIGRvIG5vdCBzdXBwb3J0IG5lc3RlZAogICAgICAgIGZpZWxkcywgcmVwZWF0ZWQgZmllbGRzLCBvciBzcGVjaWZ5aW5nIGEgQmlnUXVlcnkgbW9kZSBmb3IgZmllbGRzIChtb2RlCiAgICAgICAgd2lsbCBhbHdheXMgYmUgc2V0IHRvIGBgJ05VTExBQkxFJ2BgKS4KICAgICAgY3JlYXRlX2Rpc3Bvc2l0aW9uIChCaWdRdWVyeURpc3Bvc2l0aW9uKTogQSBzdHJpbmcgZGVzY3JpYmluZyB3aGF0CiAgICAgICAgaGFwcGVucyBpZiB0aGUgdGFibGUgZG9lcyBub3QgZXhpc3QuIFBvc3NpYmxlIHZhbHVlcyBhcmU6CgogICAgICAgICAgKiA6YXR0cjpgQmlnUXVlcnlEaXNwb3NpdGlvbi5DUkVBVEVfSUZfTkVFREVEYDogY3JlYXRlIGlmIGRvZXMgbm90CiAgICAgICAgICAgIGV4aXN0LgogICAgICAgICAgKiA6YXR0cjpgQmlnUXVlcnlEaXNwb3NpdGlvbi5DUkVBVEVfTkVWRVJgOiBmYWlsIHRoZSB3cml0ZSBpZiBkb2VzIG5vdAogICAgICAgICAgICBleGlzdC4KCiAgICAgIHdyaXRlX2Rpc3Bvc2l0aW9uIChCaWdRdWVyeURpc3Bvc2l0aW9uKTogQSBzdHJpbmcgZGVzY3JpYmluZyB3aGF0CiAgICAgICAgaGFwcGVucyBpZiB0aGUgdGFibGUgaGFzIGFscmVhZHkgc29tZSBkYXRhLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOgoKICAgICAgICAgICogOmF0dHI6YEJpZ1F1ZXJ5RGlzcG9zaXRpb24uV1JJVEVfVFJVTkNBVEVgOiBkZWxldGUgZXhpc3Rpbmcgcm93cy4KICAgICAgICAgICogOmF0dHI6YEJpZ1F1ZXJ5RGlzcG9zaXRpb24uV1JJVEVfQVBQRU5EYDogYWRkIHRvIGV4aXN0aW5nIHJvd3MuCiAgICAgICAgICAqIDphdHRyOmBCaWdRdWVyeURpc3Bvc2l0aW9uLldSSVRFX0VNUFRZYDogZmFpbCB0aGUgd3JpdGUgaWYgdGFibGUgbm90CiAgICAgICAgICAgIGVtcHR5LgoKICAgICAgdmFsaWRhdGUgKGJvb2wpOiBJZiA6ZGF0YTpgVHJ1ZWAsIHZhcmlvdXMgY2hlY2tzIHdpbGwgYmUgZG9uZSB3aGVuIHNpbmsKICAgICAgICBnZXRzIGluaXRpYWxpemVkIChlLmcuLCBpcyB0YWJsZSBwcmVzZW50IGdpdmVuIHRoZSBkaXNwb3NpdGlvbgogICAgICAgIGFyZ3VtZW50cz8pLiBUaGlzIHNob3VsZCBiZSA6ZGF0YTpgVHJ1ZWAgZm9yIG1vc3Qgc2NlbmFyaW9zIGluIG9yZGVyIHRvCiAgICAgICAgY2F0Y2ggZXJyb3JzIGFzIGVhcmx5IGFzIHBvc3NpYmxlIChwaXBlbGluZSBjb25zdHJ1Y3Rpb24gaW5zdGVhZCBvZgogICAgICAgIHBpcGVsaW5lIGV4ZWN1dGlvbikuIEl0IHNob3VsZCBiZSA6ZGF0YTpgRmFsc2VgIGlmIHRoZSB0YWJsZSBpcyBjcmVhdGVkCiAgICAgICAgZHVyaW5nIHBpcGVsaW5lIGV4ZWN1dGlvbiBieSBhIHByZXZpb3VzIHN0ZXAuCiAgICAgIGNvZGVyICh+YXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2Rlcik6IFRoZSBjb2RlciBmb3IgdGhlCiAgICAgICAgdGFibGUgcm93cyBpZiBzZXJpYWxpemVkIHRvIGRpc2suIElmIDpkYXRhOmBOb25lYCwgdGhlbiB0aGUgZGVmYXVsdAogICAgICAgIGNvZGVyIGlzIDpjbGFzczpgfmFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5Sb3dBc0RpY3RKc29uQ29kZXJgLAogICAgICAgIHdoaWNoIHdpbGwgaW50ZXJwcmV0IGV2ZXJ5IGVsZW1lbnQgd3JpdHRlbiB0byB0aGUgc2luayBhcyBhIGRpY3Rpb25hcnkKICAgICAgICB0aGF0IHdpbGwgYmUgSlNPTiBzZXJpYWxpemVkIGFzIGEgbGluZSBpbiBhIGZpbGUuIFRoaXMgYXJndW1lbnQgbmVlZHMgYQogICAgICAgIHZhbHVlIG9ubHkgaW4gc3BlY2lhbCBjYXNlcyB3aGVuIHdyaXRpbmcgdGFibGUgcm93cyBhcyBkaWN0aW9uYXJpZXMgaXMKICAgICAgICBub3QgZGVzaXJhYmxlLgoKICAgIFJhaXNlczoKICAgICAgfmV4Y2VwdGlvbnMuVHlwZUVycm9yOiBpZiB0aGUgc2NoZW1hIGFyZ3VtZW50IGlzIG5vdCBhIDpjbGFzczpgc3RyYCBvciBhCiAgICAgICAgOmNsYXNzOmB+YXBhY2hlX2JlYW0uaW8uZ2NwLmludGVybmFsLmNsaWVudHMuYmlncXVlcnkuXApiaWdxdWVyeV92Ml9tZXNzYWdlcy5UYWJsZVNjaGVtYWAgb2JqZWN0LgogICAgICB+ZXhjZXB0aW9ucy5WYWx1ZUVycm9yOiBpZiB0aGUgdGFibGUgcmVmZXJlbmNlIGFzIGEgc3RyaW5nIGRvZXMgbm90CiAgICAgICAgbWF0Y2ggdGhlIGV4cGVjdGVkIGZvcm1hdC4KICAgICIiIgoKICAgICMgSW1wb3J0IGhlcmUgdG8gYXZvaWQgYWRkaW5nIHRoZSBkZXBlbmRlbmN5IGZvciBsb2NhbCBydW5uaW5nIHNjZW5hcmlvcy4KICAgIHRyeToKICAgICAgIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KICAgICAgZnJvbSBhcGl0b29scy5iYXNlIGltcG9ydCBweSAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLXZhcmlhYmxlCiAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgIHJhaXNlIEltcG9ydEVycm9yKAogICAgICAgICAgJ0dvb2dsZSBDbG91ZCBJTyBub3QgYXZhaWxhYmxlLCAnCiAgICAgICAgICAncGxlYXNlIGluc3RhbGwgYXBhY2hlX2JlYW1bZ2NwXScpCgogICAgc2VsZi50YWJsZV9yZWZlcmVuY2UgPSBfcGFyc2VfdGFibGVfcmVmZXJlbmNlKHRhYmxlLCBkYXRhc2V0LCBwcm9qZWN0KQogICAgIyBUcmFuc2Zvcm0gdGhlIHRhYmxlIHNjaGVtYSBpbnRvIGEgYmlncXVlcnkuVGFibGVTY2hlbWEgaW5zdGFuY2UuCiAgICBpZiBpc2luc3RhbmNlKHNjaGVtYSwgKHN0ciwgdW5pY29kZSkpOgogICAgICAjIFRPRE8oc2lsdml1Yyk6IFNob3VsZCBhZGQgYSByZWdleC1iYXNlZCB2YWxpZGF0aW9uIG9mIHRoZSBmb3JtYXQuCiAgICAgIHRhYmxlX3NjaGVtYSA9IGJpZ3F1ZXJ5LlRhYmxlU2NoZW1hKCkKICAgICAgc2NoZW1hX2xpc3QgPSBbcy5zdHJpcCgnICcpIGZvciBzIGluIHNjaGVtYS5zcGxpdCgnLCcpXQogICAgICBmb3IgZmllbGRfYW5kX3R5cGUgaW4gc2NoZW1hX2xpc3Q6CiAgICAgICAgZmllbGRfbmFtZSwgZmllbGRfdHlwZSA9IGZpZWxkX2FuZF90eXBlLnNwbGl0KCc6JykKICAgICAgICBmaWVsZF9zY2hlbWEgPSBiaWdxdWVyeS5UYWJsZUZpZWxkU2NoZW1hKCkKICAgICAgICBmaWVsZF9zY2hlbWEubmFtZSA9IGZpZWxkX25hbWUKICAgICAgICBmaWVsZF9zY2hlbWEudHlwZSA9IGZpZWxkX3R5cGUKICAgICAgICBmaWVsZF9zY2hlbWEubW9kZSA9ICdOVUxMQUJMRScKICAgICAgICB0YWJsZV9zY2hlbWEuZmllbGRzLmFwcGVuZChmaWVsZF9zY2hlbWEpCiAgICAgIHNlbGYudGFibGVfc2NoZW1hID0gdGFibGVfc2NoZW1hCiAgICBlbGlmIHNjaGVtYSBpcyBOb25lOgogICAgICAjIFRPRE8oc2lsdml1Yyk6IFNob3VsZCBjaGVjayB0aGF0IHRhYmxlIGV4aXN0cyBpZiBubyBzY2hlbWEgc3BlY2lmaWVkLgogICAgICBzZWxmLnRhYmxlX3NjaGVtYSA9IHNjaGVtYQogICAgZWxpZiBpc2luc3RhbmNlKHNjaGVtYSwgYmlncXVlcnkuVGFibGVTY2hlbWEpOgogICAgICBzZWxmLnRhYmxlX3NjaGVtYSA9IHNjaGVtYQogICAgZWxzZToKICAgICAgcmFpc2UgVHlwZUVycm9yKCdVbmV4cGVjdGVkIHNjaGVtYSBhcmd1bWVudDogJXMuJyAlIHNjaGVtYSkKCiAgICBzZWxmLmNyZWF0ZV9kaXNwb3NpdGlvbiA9IEJpZ1F1ZXJ5RGlzcG9zaXRpb24udmFsaWRhdGVfY3JlYXRlKAogICAgICAgIGNyZWF0ZV9kaXNwb3NpdGlvbikKICAgIHNlbGYud3JpdGVfZGlzcG9zaXRpb24gPSBCaWdRdWVyeURpc3Bvc2l0aW9uLnZhbGlkYXRlX3dyaXRlKAogICAgICAgIHdyaXRlX2Rpc3Bvc2l0aW9uKQogICAgc2VsZi52YWxpZGF0ZSA9IHZhbGlkYXRlCiAgICBzZWxmLmNvZGVyID0gY29kZXIgb3IgUm93QXNEaWN0SnNvbkNvZGVyKCkKCiAgZGVmIGRpc3BsYXlfZGF0YShzZWxmKToKICAgIHJlcyA9IHt9CiAgICBpZiBzZWxmLnRhYmxlX3JlZmVyZW5jZSBpcyBub3QgTm9uZToKICAgICAgdGFibGVTcGVjID0gJ3t9Lnt9Jy5mb3JtYXQoc2VsZi50YWJsZV9yZWZlcmVuY2UuZGF0YXNldElkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhYmxlX3JlZmVyZW5jZS50YWJsZUlkKQogICAgICBpZiBzZWxmLnRhYmxlX3JlZmVyZW5jZS5wcm9qZWN0SWQgaXMgbm90IE5vbmU6CiAgICAgICAgdGFibGVTcGVjID0gJ3t9Ont9Jy5mb3JtYXQoc2VsZi50YWJsZV9yZWZlcmVuY2UucHJvamVjdElkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlU3BlYykKICAgICAgcmVzWyd0YWJsZSddID0gRGlzcGxheURhdGFJdGVtKHRhYmxlU3BlYywgbGFiZWw9J1RhYmxlJykKCiAgICByZXNbJ3ZhbGlkYXRpb24nXSA9IERpc3BsYXlEYXRhSXRlbShzZWxmLnZhbGlkYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9IlZhbGlkYXRpb24gRW5hYmxlZCIpCiAgICByZXR1cm4gcmVzCgogIGRlZiBzY2hlbWFfYXNfanNvbihzZWxmKToKICAgICIiIlJldHVybnMgdGhlIFRhYmxlU2NoZW1hIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2luayBhcyBhIEpTT04gc3RyaW5nLiIiIgoKICAgIGRlZiBzY2hlbWFfbGlzdF9hc19vYmplY3Qoc2NoZW1hX2xpc3QpOgogICAgICAiIiJSZXR1cm5zIGEgbGlzdCBvZiBUYWJsZUZpZWxkU2NoZW1hIG9iamVjdHMgYXMgYSBsaXN0IG9mIGRpY3RzLiIiIgogICAgICBmaWVsZHMgPSBbXQogICAgICBmb3IgZiBpbiBzY2hlbWFfbGlzdDoKICAgICAgICBmcyA9IHsnbmFtZSc6IGYubmFtZSwgJ3R5cGUnOiBmLnR5cGV9CiAgICAgICAgaWYgZi5kZXNjcmlwdGlvbiBpcyBub3QgTm9uZToKICAgICAgICAgIGZzWydkZXNjcmlwdGlvbiddID0gZi5kZXNjcmlwdGlvbgogICAgICAgIGlmIGYubW9kZSBpcyBub3QgTm9uZToKICAgICAgICAgIGZzWydtb2RlJ10gPSBmLm1vZGUKICAgICAgICBpZiBmLnR5cGUubG93ZXIoKSA9PSAncmVjb3JkJzoKICAgICAgICAgIGZzWydmaWVsZHMnXSA9IHNjaGVtYV9saXN0X2FzX29iamVjdChmLmZpZWxkcykKICAgICAgICBmaWVsZHMuYXBwZW5kKGZzKQogICAgICByZXR1cm4gZmllbGRzCiAgICByZXR1cm4ganNvbi5kdW1wcygKICAgICAgICB7J2ZpZWxkcyc6IHNjaGVtYV9saXN0X2FzX29iamVjdChzZWxmLnRhYmxlX3NjaGVtYS5maWVsZHMpfSkKCiAgQHByb3BlcnR5CiAgZGVmIGZvcm1hdChzZWxmKToKICAgICIiIlNpbmsgZm9ybWF0IG5hbWUgcmVxdWlyZWQgZm9yIHJlbW90ZSBleGVjdXRpb24uIiIiCiAgICByZXR1cm4gJ2JpZ3F1ZXJ5JwoKICBkZWYgd3JpdGVyKHNlbGYsIHRlc3RfYmlncXVlcnlfY2xpZW50PU5vbmUsIGJ1ZmZlcl9zaXplPU5vbmUpOgogICAgcmV0dXJuIEJpZ1F1ZXJ5V3JpdGVyKAogICAgICAgIHNpbms9c2VsZiwgdGVzdF9iaWdxdWVyeV9jbGllbnQ9dGVzdF9iaWdxdWVyeV9jbGllbnQsCiAgICAgICAgYnVmZmVyX3NpemU9YnVmZmVyX3NpemUpCgoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEJpZ1F1ZXJ5UmVhZGVyLCBCaWdRdWVyeVdyaXRlci4KCgpjbGFzcyBCaWdRdWVyeVJlYWRlcihkYXRhZmxvd19pby5OYXRpdmVTb3VyY2VSZWFkZXIpOgogICIiIkEgcmVhZGVyIGZvciBhIEJpZ1F1ZXJ5IHNvdXJjZS4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHNvdXJjZSwgdGVzdF9iaWdxdWVyeV9jbGllbnQ9Tm9uZSwgdXNlX2xlZ2FjeV9zcWw9VHJ1ZSwKICAgICAgICAgICAgICAgZmxhdHRlbl9yZXN1bHRzPVRydWUpOgogICAgc2VsZi5zb3VyY2UgPSBzb3VyY2UKICAgIHNlbGYudGVzdF9iaWdxdWVyeV9jbGllbnQgPSB0ZXN0X2JpZ3F1ZXJ5X2NsaWVudAogICAgaWYgYXV0aC5pc19ydW5uaW5nX2luX2djZToKICAgICAgc2VsZi5leGVjdXRpbmdfcHJvamVjdCA9IGF1dGguZXhlY3V0aW5nX3Byb2plY3QKICAgIGVsaWYgaGFzYXR0cihzb3VyY2UsICdwaXBlbGluZV9vcHRpb25zJyk6CiAgICAgIHNlbGYuZXhlY3V0aW5nX3Byb2plY3QgPSAoCiAgICAgICAgICBzb3VyY2UucGlwZWxpbmVfb3B0aW9ucy52aWV3X2FzKEdvb2dsZUNsb3VkT3B0aW9ucykucHJvamVjdCkKICAgIGVsc2U6CiAgICAgIHNlbGYuZXhlY3V0aW5nX3Byb2plY3QgPSBOb25lCgogICAgIyBUT0RPKHNpbHZpdWMpOiBUcnkgdG8gYXV0b21hdGljYWxseSBnZXQgaXQgZnJvbSBnY2xvdWQgY29uZmlnIGluZm8uCiAgICBpZiBub3Qgc2VsZi5leGVjdXRpbmdfcHJvamVjdCBhbmQgdGVzdF9iaWdxdWVyeV9jbGllbnQgaXMgTm9uZToKICAgICAgcmFpc2UgUnVudGltZUVycm9yKAogICAgICAgICAgJ01pc3NpbmcgZXhlY3V0aW5nIHByb2plY3QgaW5mb3JtYXRpb24uIFBsZWFzZSB1c2UgdGhlIC0tcHJvamVjdCAnCiAgICAgICAgICAnY29tbWFuZCBsaW5lIG9wdGlvbiB0byBzcGVjaWZ5IGl0LicpCiAgICBzZWxmLnJvd19hc19kaWN0ID0gaXNpbnN0YW5jZShzZWxmLnNvdXJjZS5jb2RlciwgUm93QXNEaWN0SnNvbkNvZGVyKQogICAgIyBTY2hlbWEgZm9yIHRoZSByb3dzIGJlaW5nIHJlYWQgYnkgdGhlIHJlYWRlci4gSXQgaXMgaW5pdGlhbGl6ZWQgdGhlCiAgICAjIGZpcnN0IHRpbWUgc29tZXRoaW5nIGdldHMgcmVhZCBmcm9tIHRoZSB0YWJsZS4gSXQgaXMgbm90IHJlcXVpcmVkCiAgICAjIGZvciByZWFkaW5nIHRoZSBmaWVsZCB2YWx1ZXMgaW4gZWFjaCByb3cgYnV0IGNvdWxkIGJlIHVzZWZ1bCBmb3IKICAgICMgZ2V0dGluZyBhZGRpdGlvbmFsIGRldGFpbHMuCiAgICBzZWxmLnNjaGVtYSA9IE5vbmUKICAgIHNlbGYudXNlX2xlZ2FjeV9zcWwgPSB1c2VfbGVnYWN5X3NxbAogICAgc2VsZi5mbGF0dGVuX3Jlc3VsdHMgPSBmbGF0dGVuX3Jlc3VsdHMKCiAgICBpZiBzZWxmLnNvdXJjZS50YWJsZV9yZWZlcmVuY2UgaXMgbm90IE5vbmU6CiAgICAgICMgSWYgdGFibGUgc2NoZW1hIGRpZCBub3QgZGVmaW5lIGEgcHJvamVjdCB3ZSBkZWZhdWx0IHRvIGV4ZWN1dGluZwogICAgICAjIHByb2plY3QuCiAgICAgIHByb2plY3RfaWQgPSBzZWxmLnNvdXJjZS50YWJsZV9yZWZlcmVuY2UucHJvamVjdElkCiAgICAgIGlmIG5vdCBwcm9qZWN0X2lkOgogICAgICAgIHByb2plY3RfaWQgPSBzZWxmLmV4ZWN1dGluZ19wcm9qZWN0CiAgICAgIHNlbGYucXVlcnkgPSAnU0VMRUNUICogRlJPTSBbJXM6JXMuJXNdOycgJSAoCiAgICAgICAgICBwcm9qZWN0X2lkLAogICAgICAgICAgc2VsZi5zb3VyY2UudGFibGVfcmVmZXJlbmNlLmRhdGFzZXRJZCwKICAgICAgICAgIHNlbGYuc291cmNlLnRhYmxlX3JlZmVyZW5jZS50YWJsZUlkKQogICAgZWxpZiBzZWxmLnNvdXJjZS5xdWVyeSBpcyBub3QgTm9uZToKICAgICAgc2VsZi5xdWVyeSA9IHNlbGYuc291cmNlLnF1ZXJ5CiAgICBlbHNlOgogICAgICAjIEVuZm9yY2UgdGhlICJtb2RlcyIgZW5mb3JjZWQgYnkgQmlnUXVlcnlTb3VyY2UuX19pbml0X18uCiAgICAgICMgSWYgdGhpcyBleGNlcHRpb24gaGFzIGJlZW4gcmFpc2VkLCB0aGUgQmlnUXVlcnlTb3VyY2UgIm1vZGVzIiBoYXZlCiAgICAgICMgY2hhbmdlZCBhbmQgdGhpcyBtZXRob2Qgd2lsbCBuZWVkIHRvIGJlIHVwZGF0ZWQgYXMgd2VsbC4KICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQmlnUXVlcnlTb3VyY2UgbXVzdCBoYXZlIGVpdGhlciBhIHRhYmxlIG9yIHF1ZXJ5IikKCiAgZGVmIF9nZXRfc291cmNlX2xvY2F0aW9uKHNlbGYpOgogICAgIiIiCiAgICBHZXQgdGhlIHNvdXJjZSBsb2NhdGlvbiAoZS5nLiBgYCJFVSJgYCBvciBgYCJVUyJgYCkgZnJvbSBlaXRoZXIKCiAgICAtIDpkYXRhOmBzb3VyY2UudGFibGVfcmVmZXJlbmNlYAogICAgICBvcgogICAgLSBUaGUgZmlyc3QgcmVmZXJlbmNlZCB0YWJsZSBpbiA6ZGF0YTpgc291cmNlLnF1ZXJ5YAoKICAgIFNlZSBBbHNvOgogICAgICAtIDptZXRoOmBCaWdRdWVyeVdyYXBwZXIuZ2V0X3F1ZXJ5X2xvY2F0aW9uYAogICAgICAtIDptZXRoOmBCaWdRdWVyeVdyYXBwZXIuZ2V0X3RhYmxlX2xvY2F0aW9uYAoKICAgIFJldHVybnM6CiAgICAgIE9wdGlvbmFsW3N0cl06IFRoZSBzb3VyY2UgbG9jYXRpb24sIGlmIGFueS4KICAgICIiIgogICAgaWYgc2VsZi5zb3VyY2UudGFibGVfcmVmZXJlbmNlIGlzIG5vdCBOb25lOgogICAgICB0ciA9IHNlbGYuc291cmNlLnRhYmxlX3JlZmVyZW5jZQogICAgICByZXR1cm4gc2VsZi5jbGllbnQuZ2V0X3RhYmxlX2xvY2F0aW9uKAogICAgICAgICAgdHIucHJvamVjdElkIGlmIHRyLnByb2plY3RJZCBpcyBub3QgTm9uZSBlbHNlIHNlbGYuZXhlY3V0aW5nX3Byb2plY3QsCiAgICAgICAgICB0ci5kYXRhc2V0SWQsIHRyLnRhYmxlSWQpCiAgICBlbHNlOiAgIyBJdCdzIGEgcXVlcnkgc291cmNlCiAgICAgIHJldHVybiBzZWxmLmNsaWVudC5nZXRfcXVlcnlfbG9jYXRpb24oCiAgICAgICAgICBzZWxmLmV4ZWN1dGluZ19wcm9qZWN0LAogICAgICAgICAgc2VsZi5zb3VyY2UucXVlcnksCiAgICAgICAgICBzZWxmLnNvdXJjZS51c2VfbGVnYWN5X3NxbCkKCiAgZGVmIF9fZW50ZXJfXyhzZWxmKToKICAgIHNlbGYuY2xpZW50ID0gQmlnUXVlcnlXcmFwcGVyKGNsaWVudD1zZWxmLnRlc3RfYmlncXVlcnlfY2xpZW50KQogICAgc2VsZi5jbGllbnQuY3JlYXRlX3RlbXBvcmFyeV9kYXRhc2V0KAogICAgICAgIHNlbGYuZXhlY3V0aW5nX3Byb2plY3QsIGxvY2F0aW9uPXNlbGYuX2dldF9zb3VyY2VfbG9jYXRpb24oKSkKICAgIHJldHVybiBzZWxmCgogIGRlZiBfX2V4aXRfXyhzZWxmLCBleGNlcHRpb25fdHlwZSwgZXhjZXB0aW9uX3ZhbHVlLCB0cmFjZWJhY2spOgogICAgc2VsZi5jbGllbnQuY2xlYW5fdXBfdGVtcG9yYXJ5X2RhdGFzZXQoc2VsZi5leGVjdXRpbmdfcHJvamVjdCkKCiAgZGVmIF9faXRlcl9fKHNlbGYpOgogICAgZm9yIHJvd3MsIHNjaGVtYSBpbiBzZWxmLmNsaWVudC5ydW5fcXVlcnkoCiAgICAgICAgcHJvamVjdF9pZD1zZWxmLmV4ZWN1dGluZ19wcm9qZWN0LCBxdWVyeT1zZWxmLnF1ZXJ5LAogICAgICAgIHVzZV9sZWdhY3lfc3FsPXNlbGYudXNlX2xlZ2FjeV9zcWwsCiAgICAgICAgZmxhdHRlbl9yZXN1bHRzPXNlbGYuZmxhdHRlbl9yZXN1bHRzKToKICAgICAgaWYgc2VsZi5zY2hlbWEgaXMgTm9uZToKICAgICAgICBzZWxmLnNjaGVtYSA9IHNjaGVtYQogICAgICBmb3Igcm93IGluIHJvd3M6CiAgICAgICAgaWYgc2VsZi5yb3dfYXNfZGljdDoKICAgICAgICAgIHlpZWxkIHNlbGYuY2xpZW50LmNvbnZlcnRfcm93X3RvX2RpY3Qocm93LCBzY2hlbWEpCiAgICAgICAgZWxzZToKICAgICAgICAgIHlpZWxkIHJvdwoKCmNsYXNzIEJpZ1F1ZXJ5V3JpdGVyKGRhdGFmbG93X2lvLk5hdGl2ZVNpbmtXcml0ZXIpOgogICIiIlRoZSBzaW5rIHdyaXRlciBmb3IgYSBCaWdRdWVyeVNpbmsuIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBzaW5rLCB0ZXN0X2JpZ3F1ZXJ5X2NsaWVudD1Ob25lLCBidWZmZXJfc2l6ZT1Ob25lKToKICAgIHNlbGYuc2luayA9IHNpbmsKICAgIHNlbGYudGVzdF9iaWdxdWVyeV9jbGllbnQgPSB0ZXN0X2JpZ3F1ZXJ5X2NsaWVudAogICAgc2VsZi5yb3dfYXNfZGljdCA9IGlzaW5zdGFuY2Uoc2VsZi5zaW5rLmNvZGVyLCBSb3dBc0RpY3RKc29uQ29kZXIpCiAgICAjIEJ1ZmZlciB1c2VkIHRvIGJhdGNoIHdyaXR0ZW4gcm93cyBzbyB3ZSByZWR1Y2UgY29tbXVuaWNhdGlvbiB3aXRoIHRoZQogICAgIyBCaWdRdWVyeSBzZXJ2aWNlLgogICAgc2VsZi5yb3dzX2J1ZmZlciA9IFtdCiAgICBzZWxmLnJvd3NfYnVmZmVyX2ZsdXNoX3RocmVzaG9sZCA9IGJ1ZmZlcl9zaXplIG9yIDEwMDAKICAgICMgRmlndXJlIG91dCB0aGUgcHJvamVjdCwgZGF0YXNldCwgYW5kIHRhYmxlIHVzZWQgZm9yIHRoZSBzaW5rLgogICAgc2VsZi5wcm9qZWN0X2lkID0gc2VsZi5zaW5rLnRhYmxlX3JlZmVyZW5jZS5wcm9qZWN0SWQKCiAgICAjIElmIHRhYmxlIHNjaGVtYSBkaWQgbm90IGRlZmluZSBhIHByb2plY3Qgd2UgZGVmYXVsdCB0byBleGVjdXRpbmcgcHJvamVjdC4KICAgIGlmIHNlbGYucHJvamVjdF9pZCBpcyBOb25lIGFuZCBoYXNhdHRyKHNpbmssICdwaXBlbGluZV9vcHRpb25zJyk6CiAgICAgIHNlbGYucHJvamVjdF9pZCA9ICgKICAgICAgICAgIHNpbmsucGlwZWxpbmVfb3B0aW9ucy52aWV3X2FzKEdvb2dsZUNsb3VkT3B0aW9ucykucHJvamVjdCkKCiAgICBhc3NlcnQgc2VsZi5wcm9qZWN0X2lkIGlzIG5vdCBOb25lCgogICAgc2VsZi5kYXRhc2V0X2lkID0gc2VsZi5zaW5rLnRhYmxlX3JlZmVyZW5jZS5kYXRhc2V0SWQKICAgIHNlbGYudGFibGVfaWQgPSBzZWxmLnNpbmsudGFibGVfcmVmZXJlbmNlLnRhYmxlSWQKCiAgZGVmIF9mbHVzaF9yb3dzX2J1ZmZlcihzZWxmKToKICAgIGlmIHNlbGYucm93c19idWZmZXI6CiAgICAgIGxvZ2dpbmcuaW5mbygnV3JpdGluZyAlZCByb3dzIHRvICVzOiVzLiVzIHRhYmxlLicsIGxlbihzZWxmLnJvd3NfYnVmZmVyKSwKICAgICAgICAgICAgICAgICAgIHNlbGYucHJvamVjdF9pZCwgc2VsZi5kYXRhc2V0X2lkLCBzZWxmLnRhYmxlX2lkKQogICAgICBwYXNzZWQsIGVycm9ycyA9IHNlbGYuY2xpZW50Lmluc2VydF9yb3dzKAogICAgICAgICAgcHJvamVjdF9pZD1zZWxmLnByb2plY3RfaWQsIGRhdGFzZXRfaWQ9c2VsZi5kYXRhc2V0X2lkLAogICAgICAgICAgdGFibGVfaWQ9c2VsZi50YWJsZV9pZCwgcm93cz1zZWxmLnJvd3NfYnVmZmVyKQogICAgICBzZWxmLnJvd3NfYnVmZmVyID0gW10KICAgICAgaWYgbm90IHBhc3NlZDoKICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0NvdWxkIG5vdCBzdWNjZXNzZnVsbHkgaW5zZXJ0IHJvd3MgdG8gQmlnUXVlcnknCiAgICAgICAgICAgICAgICAgICAgICAgICAgICcgdGFibGUgWyVzOiVzLiVzXS4gRXJyb3JzOiAlcycgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5wcm9qZWN0X2lkLCBzZWxmLmRhdGFzZXRfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhYmxlX2lkLCBlcnJvcnMpKQoKICBkZWYgX19lbnRlcl9fKHNlbGYpOgogICAgc2VsZi5jbGllbnQgPSBCaWdRdWVyeVdyYXBwZXIoY2xpZW50PXNlbGYudGVzdF9iaWdxdWVyeV9jbGllbnQpCiAgICBzZWxmLmNsaWVudC5nZXRfb3JfY3JlYXRlX3RhYmxlKAogICAgICAgIHNlbGYucHJvamVjdF9pZCwgc2VsZi5kYXRhc2V0X2lkLCBzZWxmLnRhYmxlX2lkLCBzZWxmLnNpbmsudGFibGVfc2NoZW1hLAogICAgICAgIHNlbGYuc2luay5jcmVhdGVfZGlzcG9zaXRpb24sIHNlbGYuc2luay53cml0ZV9kaXNwb3NpdGlvbikKICAgIHJldHVybiBzZWxmCgogIGRlZiBfX2V4aXRfXyhzZWxmLCBleGNlcHRpb25fdHlwZSwgZXhjZXB0aW9uX3ZhbHVlLCB0cmFjZWJhY2spOgogICAgc2VsZi5fZmx1c2hfcm93c19idWZmZXIoKQoKICBkZWYgV3JpdGUoc2VsZiwgcm93KToKICAgIHNlbGYucm93c19idWZmZXIuYXBwZW5kKHJvdykKICAgIGlmIGxlbihzZWxmLnJvd3NfYnVmZmVyKSA+IHNlbGYucm93c19idWZmZXJfZmx1c2hfdGhyZXNob2xkOgogICAgICBzZWxmLl9mbHVzaF9yb3dzX2J1ZmZlcigpCgoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEJpZ1F1ZXJ5V3JhcHBlci4KCgpjbGFzcyBCaWdRdWVyeVdyYXBwZXIob2JqZWN0KToKICAiIiJCaWdRdWVyeSBjbGllbnQgd3JhcHBlciB3aXRoIHV0aWxpdGllcyBmb3IgcXVlcnlpbmcuCgogIFRoZSB3cmFwcGVyIGlzIHVzZWQgdG8gb3JnYW5pemUgYWxsIHRoZSBCaWdRdWVyeSBpbnRlZ3JhdGlvbiBwb2ludHMgYW5kCiAgb2ZmZXIgYSBjb21tb24gcGxhY2Ugd2hlcmUgcmV0cnkgbG9naWMgZm9yIGZhaWx1cmVzIGNhbiBiZSBjb250cm9sbGVkLgogIEluIGFkZGl0aW9uIGl0IG9mZmVycyB2YXJpb3VzIGZ1bmN0aW9ucyB1c2VkIGJvdGggaW4gc291cmNlcyBhbmQgc2lua3MKICAoZS5nLiwgZmluZCBhbmQgY3JlYXRlIHRhYmxlcywgcXVlcnkgYSB0YWJsZSwgZXRjLikuCiAgIiIiCgogIFRFTVBfVEFCTEUgPSAndGVtcF90YWJsZV8nCiAgVEVNUF9EQVRBU0VUID0gJ3RlbXBfZGF0YXNldF8nCgogIGRlZiBfX2luaXRfXyhzZWxmLCBjbGllbnQ9Tm9uZSk6CiAgICBzZWxmLmNsaWVudCA9IGNsaWVudCBvciBiaWdxdWVyeS5CaWdxdWVyeVYyKAogICAgICAgIGh0dHA9Z2V0X25ld19odHRwKCksCiAgICAgICAgY3JlZGVudGlhbHM9YXV0aC5nZXRfc2VydmljZV9jcmVkZW50aWFscygpKQogICAgc2VsZi5fdW5pcXVlX3Jvd19pZCA9IDAKICAgICMgRm9yIHRlc3Rpbmcgc2NlbmFyaW9zIHdoZXJlIHdlIHBhc3MgaW4gYSBjbGllbnQgd2UgZG8gbm90IHdhbnQgYQogICAgIyByYW5kb21pemVkIHByZWZpeCBmb3Igcm93IElEcy4KICAgIHNlbGYuX3Jvd19pZF9wcmVmaXggPSAnJyBpZiBjbGllbnQgZWxzZSB1dWlkLnV1aWQ0KCkKICAgIHNlbGYuX3RlbXBvcmFyeV90YWJsZV9zdWZmaXggPSB1dWlkLnV1aWQ0KCkuaGV4CgogIEBwcm9wZXJ0eQogIGRlZiB1bmlxdWVfcm93X2lkKHNlbGYpOgogICAgIiIiUmV0dXJucyBhIHVuaXF1ZSByb3cgSUQgKHN0cikgdXNlZCB0byBhdm9pZCBtdWx0aXBsZSBpbnNlcnRpb25zLgoKICAgIElmIHRoZSByb3cgSUQgaXMgcHJvdmlkZWQsIEJpZ1F1ZXJ5IHdpbGwgbWFrZSBhIGJlc3QgZWZmb3J0IHRvIG5vdCBpbnNlcnQKICAgIHRoZSBzYW1lIHJvdyBtdWx0aXBsZSB0aW1lcyBmb3IgZmFpbCBhbmQgcmV0cnkgc2NlbmFyaW9zIGluIHdoaWNoIHRoZSBpbnNlcnQKICAgIHJlcXVlc3QgbWF5IGJlIGlzc3VlZCBzZXZlcmFsIHRpbWVzLiBUaGlzIGNvbWVzIGludG8gcGxheSBmb3Igc2lua3MgZXhlY3V0ZWQKICAgIGluIGEgbG9jYWwgcnVubmVyLgoKICAgIFJldHVybnM6CiAgICAgIGEgdW5pcXVlIHJvdyBJRCBzdHJpbmcKICAgICIiIgogICAgc2VsZi5fdW5pcXVlX3Jvd19pZCArPSAxCiAgICByZXR1cm4gJyVzXyVkJyAlIChzZWxmLl9yb3dfaWRfcHJlZml4LCBzZWxmLl91bmlxdWVfcm93X2lkKQoKICBkZWYgX2dldF90ZW1wX3RhYmxlKHNlbGYsIHByb2plY3RfaWQpOgogICAgcmV0dXJuIF9wYXJzZV90YWJsZV9yZWZlcmVuY2UoCiAgICAgICAgdGFibGU9QmlnUXVlcnlXcmFwcGVyLlRFTVBfVEFCTEUgKyBzZWxmLl90ZW1wb3JhcnlfdGFibGVfc3VmZml4LAogICAgICAgIGRhdGFzZXQ9QmlnUXVlcnlXcmFwcGVyLlRFTVBfREFUQVNFVCArIHNlbGYuX3RlbXBvcmFyeV90YWJsZV9zdWZmaXgsCiAgICAgICAgcHJvamVjdD1wcm9qZWN0X2lkKQoKICBAcmV0cnkud2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmKAogICAgICBudW1fcmV0cmllcz1NQVhfUkVUUklFUywKICAgICAgcmV0cnlfZmlsdGVyPXJldHJ5LnJldHJ5X29uX3NlcnZlcl9lcnJvcnNfYW5kX3RpbWVvdXRfZmlsdGVyKQogIGRlZiBnZXRfcXVlcnlfbG9jYXRpb24oc2VsZiwgcHJvamVjdF9pZCwgcXVlcnksIHVzZV9sZWdhY3lfc3FsKToKICAgICIiIgogICAgR2V0IHRoZSBsb2NhdGlvbiBvZiB0YWJsZXMgcmVmZXJlbmNlZCBpbiBhIHF1ZXJ5LgoKICAgIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGxvY2F0aW9uIG9mIHRoZSBmaXJzdCByZWZlcmVuY2VkIHRhYmxlIGluIHRoZSBxdWVyeQogICAgYW5kIGRlcGVuZHMgb24gdGhlIEJpZ1F1ZXJ5IHNlcnZpY2UgdG8gcHJvdmlkZSBlcnJvciBoYW5kbGluZyBmb3IKICAgIHF1ZXJpZXMgdGhhdCByZWZlcmVuY2UgdGFibGVzIGluIG11bHRpcGxlIGxvY2F0aW9ucy4KICAgICIiIgogICAgcmVmZXJlbmNlID0gYmlncXVlcnkuSm9iUmVmZXJlbmNlKGpvYklkPXV1aWQudXVpZDQoKS5oZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdElkPXByb2plY3RfaWQpCiAgICByZXF1ZXN0ID0gYmlncXVlcnkuQmlncXVlcnlKb2JzSW5zZXJ0UmVxdWVzdCgKICAgICAgICBwcm9qZWN0SWQ9cHJvamVjdF9pZCwKICAgICAgICBqb2I9YmlncXVlcnkuSm9iKAogICAgICAgICAgICBjb25maWd1cmF0aW9uPWJpZ3F1ZXJ5LkpvYkNvbmZpZ3VyYXRpb24oCiAgICAgICAgICAgICAgICBkcnlSdW49VHJ1ZSwKICAgICAgICAgICAgICAgIHF1ZXJ5PWJpZ3F1ZXJ5LkpvYkNvbmZpZ3VyYXRpb25RdWVyeSgKICAgICAgICAgICAgICAgICAgICBxdWVyeT1xdWVyeSwKICAgICAgICAgICAgICAgICAgICB1c2VMZWdhY3lTcWw9dXNlX2xlZ2FjeV9zcWwsCiAgICAgICAgICAgICAgICApKSwKICAgICAgICAgICAgam9iUmVmZXJlbmNlPXJlZmVyZW5jZSkpCgogICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5qb2JzLkluc2VydChyZXF1ZXN0KQoKICAgIGlmIHJlc3BvbnNlLnN0YXRpc3RpY3MgaXMgTm9uZToKICAgICAgIyBUaGlzIGJlaGF2aW9yIGlzIG9ubHkgZXhwZWN0ZWQgaW4gdGVzdHMKICAgICAgbG9nZ2luZy53YXJuaW5nKAogICAgICAgICAgIlVuYWJsZSB0byBnZXQgbG9jYXRpb24sIG1pc3NpbmcgcmVzcG9uc2Uuc3RhdGlzdGljcy4gUXVlcnk6ICVzIiwKICAgICAgICAgIHF1ZXJ5KQogICAgICByZXR1cm4gTm9uZQoKICAgIHJlZmVyZW5jZWRfdGFibGVzID0gcmVzcG9uc2Uuc3RhdGlzdGljcy5xdWVyeS5yZWZlcmVuY2VkVGFibGVzCiAgICBpZiByZWZlcmVuY2VkX3RhYmxlczogICMgR3VhcmRzIGFnYWluc3QgYm90aCBub24tZW1wdHkgYW5kIG5vbi1Ob25lCiAgICAgIHRhYmxlID0gcmVmZXJlbmNlZF90YWJsZXNbMF0KICAgICAgbG9jYXRpb24gPSBzZWxmLmdldF90YWJsZV9sb2NhdGlvbigKICAgICAgICAgIHRhYmxlLnByb2plY3RJZCwKICAgICAgICAgIHRhYmxlLmRhdGFzZXRJZCwKICAgICAgICAgIHRhYmxlLnRhYmxlSWQpCiAgICAgIGxvZ2dpbmcuaW5mbygiVXNpbmcgbG9jYXRpb24gJXIgZnJvbSB0YWJsZSAlciByZWZlcmVuY2VkIGJ5IHF1ZXJ5ICVzIiwKICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLCB0YWJsZSwgcXVlcnkpCiAgICAgIHJldHVybiBsb2NhdGlvbgoKICAgIGxvZ2dpbmcuZGVidWcoIlF1ZXJ5ICVzIGRvZXMgbm90IHJlZmVyZW5jZSBhbnkgdGFibGVzLiIsIHF1ZXJ5KQogICAgcmV0dXJuIE5vbmUKCiAgQHJldHJ5LndpdGhfZXhwb25lbnRpYWxfYmFja29mZigKICAgICAgbnVtX3JldHJpZXM9TUFYX1JFVFJJRVMsCiAgICAgIHJldHJ5X2ZpbHRlcj1yZXRyeS5yZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2FuZF90aW1lb3V0X2ZpbHRlcikKICBkZWYgX3N0YXJ0X3F1ZXJ5X2pvYihzZWxmLCBwcm9qZWN0X2lkLCBxdWVyeSwgdXNlX2xlZ2FjeV9zcWwsIGZsYXR0ZW5fcmVzdWx0cywKICAgICAgICAgICAgICAgICAgICAgICBqb2JfaWQsIGRyeV9ydW49RmFsc2UpOgogICAgcmVmZXJlbmNlID0gYmlncXVlcnkuSm9iUmVmZXJlbmNlKGpvYklkPWpvYl9pZCwgcHJvamVjdElkPXByb2plY3RfaWQpCiAgICByZXF1ZXN0ID0gYmlncXVlcnkuQmlncXVlcnlKb2JzSW5zZXJ0UmVxdWVzdCgKICAgICAgICBwcm9qZWN0SWQ9cHJvamVjdF9pZCwKICAgICAgICBqb2I9YmlncXVlcnkuSm9iKAogICAgICAgICAgICBjb25maWd1cmF0aW9uPWJpZ3F1ZXJ5LkpvYkNvbmZpZ3VyYXRpb24oCiAgICAgICAgICAgICAgICBkcnlSdW49ZHJ5X3J1biwKICAgICAgICAgICAgICAgIHF1ZXJ5PWJpZ3F1ZXJ5LkpvYkNvbmZpZ3VyYXRpb25RdWVyeSgKICAgICAgICAgICAgICAgICAgICBxdWVyeT1xdWVyeSwKICAgICAgICAgICAgICAgICAgICB1c2VMZWdhY3lTcWw9dXNlX2xlZ2FjeV9zcWwsCiAgICAgICAgICAgICAgICAgICAgYWxsb3dMYXJnZVJlc3VsdHM9VHJ1ZSwKICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblRhYmxlPXNlbGYuX2dldF90ZW1wX3RhYmxlKHByb2plY3RfaWQpLAogICAgICAgICAgICAgICAgICAgIGZsYXR0ZW5SZXN1bHRzPWZsYXR0ZW5fcmVzdWx0cykpLAogICAgICAgICAgICBqb2JSZWZlcmVuY2U9cmVmZXJlbmNlKSkKCiAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LmpvYnMuSW5zZXJ0KHJlcXVlc3QpCiAgICByZXR1cm4gcmVzcG9uc2Uuam9iUmVmZXJlbmNlLmpvYklkCgogIEByZXRyeS53aXRoX2V4cG9uZW50aWFsX2JhY2tvZmYoCiAgICAgIG51bV9yZXRyaWVzPU1BWF9SRVRSSUVTLAogICAgICByZXRyeV9maWx0ZXI9cmV0cnkucmV0cnlfb25fc2VydmVyX2Vycm9yc19hbmRfdGltZW91dF9maWx0ZXIpCiAgZGVmIF9nZXRfcXVlcnlfcmVzdWx0cyhzZWxmLCBwcm9qZWN0X2lkLCBqb2JfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlX3Rva2VuPU5vbmUsIG1heF9yZXN1bHRzPTEwMDAwKToKICAgIHJlcXVlc3QgPSBiaWdxdWVyeS5CaWdxdWVyeUpvYnNHZXRRdWVyeVJlc3VsdHNSZXF1ZXN0KAogICAgICAgIGpvYklkPWpvYl9pZCwgcGFnZVRva2VuPXBhZ2VfdG9rZW4sIHByb2plY3RJZD1wcm9qZWN0X2lkLAogICAgICAgIG1heFJlc3VsdHM9bWF4X3Jlc3VsdHMpCiAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LmpvYnMuR2V0UXVlcnlSZXN1bHRzKHJlcXVlc3QpCiAgICByZXR1cm4gcmVzcG9uc2UKCiAgQHJldHJ5LndpdGhfZXhwb25lbnRpYWxfYmFja29mZigKICAgICAgbnVtX3JldHJpZXM9TUFYX1JFVFJJRVMsCiAgICAgIHJldHJ5X2ZpbHRlcj1yZXRyeS5yZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2ZpbHRlcikKICBkZWYgX2luc2VydF9hbGxfcm93cyhzZWxmLCBwcm9qZWN0X2lkLCBkYXRhc2V0X2lkLCB0YWJsZV9pZCwgcm93cyk6CiAgICAjIFRoZSByb3dzIGFyZ3VtZW50IGlzIGEgbGlzdCBvZgogICAgIyBiaWdxdWVyeS5UYWJsZURhdGFJbnNlcnRBbGxSZXF1ZXN0LlJvd3NWYWx1ZUxpc3RFbnRyeSBpbnN0YW5jZXMgYXMKICAgICMgcmVxdWlyZWQgYnkgdGhlIEluc2VydEFsbCgpIG1ldGhvZC4KICAgIHJlcXVlc3QgPSBiaWdxdWVyeS5CaWdxdWVyeVRhYmxlZGF0YUluc2VydEFsbFJlcXVlc3QoCiAgICAgICAgcHJvamVjdElkPXByb2plY3RfaWQsIGRhdGFzZXRJZD1kYXRhc2V0X2lkLCB0YWJsZUlkPXRhYmxlX2lkLAogICAgICAgIHRhYmxlRGF0YUluc2VydEFsbFJlcXVlc3Q9YmlncXVlcnkuVGFibGVEYXRhSW5zZXJ0QWxsUmVxdWVzdCgKICAgICAgICAgICAgIyBUT0RPKHNpbHZpdWMpOiBTaG91bGQgaGF2ZSBhbiBvcHRpb24gZm9yIHNraXBJbnZhbGlkUm93cz8KICAgICAgICAgICAgIyBUT0RPKHNpbHZpdWMpOiBTaG91bGQgaGF2ZSBhbiBvcHRpb24gZm9yIGlnbm9yZVVua25vd25WYWx1ZXM/CiAgICAgICAgICAgIHJvd3M9cm93cykpCiAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LnRhYmxlZGF0YS5JbnNlcnRBbGwocmVxdWVzdCkKICAgICMgcmVzcG9uc2UuaW5zZXJ0RXJyb3JzIGlzIG5vdCBbXSBpZiBlcnJvcnMgZW5jb3VudGVyZWQuCiAgICByZXR1cm4gbm90IHJlc3BvbnNlLmluc2VydEVycm9ycywgcmVzcG9uc2UuaW5zZXJ0RXJyb3JzCgogIEByZXRyeS53aXRoX2V4cG9uZW50aWFsX2JhY2tvZmYoCiAgICAgIG51bV9yZXRyaWVzPU1BWF9SRVRSSUVTLAogICAgICByZXRyeV9maWx0ZXI9cmV0cnkucmV0cnlfb25fc2VydmVyX2Vycm9yc19hbmRfdGltZW91dF9maWx0ZXIpCiAgZGVmIF9nZXRfdGFibGUoc2VsZiwgcHJvamVjdF9pZCwgZGF0YXNldF9pZCwgdGFibGVfaWQpOgogICAgcmVxdWVzdCA9IGJpZ3F1ZXJ5LkJpZ3F1ZXJ5VGFibGVzR2V0UmVxdWVzdCgKICAgICAgICBwcm9qZWN0SWQ9cHJvamVjdF9pZCwgZGF0YXNldElkPWRhdGFzZXRfaWQsIHRhYmxlSWQ9dGFibGVfaWQpCiAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LnRhYmxlcy5HZXQocmVxdWVzdCkKICAgICMgVGhlIHJlc3BvbnNlIGlzIGEgYmlncXVlcnkuVGFibGUgaW5zdGFuY2UuCiAgICByZXR1cm4gcmVzcG9uc2UKCiAgZGVmIF9jcmVhdGVfdGFibGUoc2VsZiwgcHJvamVjdF9pZCwgZGF0YXNldF9pZCwgdGFibGVfaWQsIHNjaGVtYSk6CiAgICB0YWJsZSA9IGJpZ3F1ZXJ5LlRhYmxlKAogICAgICAgIHRhYmxlUmVmZXJlbmNlPWJpZ3F1ZXJ5LlRhYmxlUmVmZXJlbmNlKAogICAgICAgICAgICBwcm9qZWN0SWQ9cHJvamVjdF9pZCwgZGF0YXNldElkPWRhdGFzZXRfaWQsIHRhYmxlSWQ9dGFibGVfaWQpLAogICAgICAgIHNjaGVtYT1zY2hlbWEpCiAgICByZXF1ZXN0ID0gYmlncXVlcnkuQmlncXVlcnlUYWJsZXNJbnNlcnRSZXF1ZXN0KAogICAgICAgIHByb2plY3RJZD1wcm9qZWN0X2lkLCBkYXRhc2V0SWQ9ZGF0YXNldF9pZCwgdGFibGU9dGFibGUpCiAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LnRhYmxlcy5JbnNlcnQocmVxdWVzdCkKICAgIGxvZ2dpbmcuZGVidWcoIkNyZWF0ZWQgdGhlIHRhYmxlIHdpdGggaWQgJXMiLCB0YWJsZV9pZCkKICAgICMgVGhlIHJlc3BvbnNlIGlzIGEgYmlncXVlcnkuVGFibGUgaW5zdGFuY2UuCiAgICByZXR1cm4gcmVzcG9uc2UKCiAgQHJldHJ5LndpdGhfZXhwb25lbnRpYWxfYmFja29mZigKICAgICAgbnVtX3JldHJpZXM9TUFYX1JFVFJJRVMsCiAgICAgIHJldHJ5X2ZpbHRlcj1yZXRyeS5yZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2FuZF90aW1lb3V0X2ZpbHRlcikKICBkZWYgZ2V0X29yX2NyZWF0ZV9kYXRhc2V0KHNlbGYsIHByb2plY3RfaWQsIGRhdGFzZXRfaWQsIGxvY2F0aW9uPU5vbmUpOgogICAgIyBDaGVjayBpZiBkYXRhc2V0IGFscmVhZHkgZXhpc3RzIG90aGVyd2lzZSBjcmVhdGUgaXQKICAgIHRyeToKICAgICAgZGF0YXNldCA9IHNlbGYuY2xpZW50LmRhdGFzZXRzLkdldChiaWdxdWVyeS5CaWdxdWVyeURhdGFzZXRzR2V0UmVxdWVzdCgKICAgICAgICAgIHByb2plY3RJZD1wcm9qZWN0X2lkLCBkYXRhc2V0SWQ9ZGF0YXNldF9pZCkpCiAgICAgIHJldHVybiBkYXRhc2V0CiAgICBleGNlcHQgSHR0cEVycm9yIGFzIGV4bjoKICAgICAgaWYgZXhuLnN0YXR1c19jb2RlID09IDQwNDoKICAgICAgICBkYXRhc2V0X3JlZmVyZW5jZSA9IGJpZ3F1ZXJ5LkRhdGFzZXRSZWZlcmVuY2UoCiAgICAgICAgICAgIHByb2plY3RJZD1wcm9qZWN0X2lkLCBkYXRhc2V0SWQ9ZGF0YXNldF9pZCkKICAgICAgICBkYXRhc2V0ID0gYmlncXVlcnkuRGF0YXNldChkYXRhc2V0UmVmZXJlbmNlPWRhdGFzZXRfcmVmZXJlbmNlKQogICAgICAgIGlmIGxvY2F0aW9uIGlzIG5vdCBOb25lOgogICAgICAgICAgZGF0YXNldC5sb2NhdGlvbiA9IGxvY2F0aW9uCiAgICAgICAgcmVxdWVzdCA9IGJpZ3F1ZXJ5LkJpZ3F1ZXJ5RGF0YXNldHNJbnNlcnRSZXF1ZXN0KAogICAgICAgICAgICBwcm9qZWN0SWQ9cHJvamVjdF9pZCwgZGF0YXNldD1kYXRhc2V0KQogICAgICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQuZGF0YXNldHMuSW5zZXJ0KHJlcXVlc3QpCiAgICAgICAgIyBUaGUgcmVzcG9uc2UgaXMgYSBiaWdxdWVyeS5EYXRhc2V0IGluc3RhbmNlLgogICAgICAgIHJldHVybiByZXNwb25zZQogICAgICBlbHNlOgogICAgICAgIHJhaXNlCgogIEByZXRyeS53aXRoX2V4cG9uZW50aWFsX2JhY2tvZmYoCiAgICAgIG51bV9yZXRyaWVzPU1BWF9SRVRSSUVTLAogICAgICByZXRyeV9maWx0ZXI9cmV0cnkucmV0cnlfb25fc2VydmVyX2Vycm9yc19hbmRfdGltZW91dF9maWx0ZXIpCiAgZGVmIF9pc190YWJsZV9lbXB0eShzZWxmLCBwcm9qZWN0X2lkLCBkYXRhc2V0X2lkLCB0YWJsZV9pZCk6CiAgICByZXF1ZXN0ID0gYmlncXVlcnkuQmlncXVlcnlUYWJsZWRhdGFMaXN0UmVxdWVzdCgKICAgICAgICBwcm9qZWN0SWQ9cHJvamVjdF9pZCwgZGF0YXNldElkPWRhdGFzZXRfaWQsIHRhYmxlSWQ9dGFibGVfaWQsCiAgICAgICAgbWF4UmVzdWx0cz0xKQogICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC50YWJsZWRhdGEuTGlzdChyZXF1ZXN0KQogICAgIyBUaGUgcmVzcG9uc2UgaXMgYSBiaWdxdWVyeS5UYWJsZURhdGFMaXN0IGluc3RhbmNlLgogICAgcmV0dXJuIHJlc3BvbnNlLnRvdGFsUm93cyA9PSAwCgogIEByZXRyeS53aXRoX2V4cG9uZW50aWFsX2JhY2tvZmYoCiAgICAgIG51bV9yZXRyaWVzPU1BWF9SRVRSSUVTLAogICAgICByZXRyeV9maWx0ZXI9cmV0cnkucmV0cnlfb25fc2VydmVyX2Vycm9yc19hbmRfdGltZW91dF9maWx0ZXIpCiAgZGVmIF9kZWxldGVfdGFibGUoc2VsZiwgcHJvamVjdF9pZCwgZGF0YXNldF9pZCwgdGFibGVfaWQpOgogICAgcmVxdWVzdCA9IGJpZ3F1ZXJ5LkJpZ3F1ZXJ5VGFibGVzRGVsZXRlUmVxdWVzdCgKICAgICAgICBwcm9qZWN0SWQ9cHJvamVjdF9pZCwgZGF0YXNldElkPWRhdGFzZXRfaWQsIHRhYmxlSWQ9dGFibGVfaWQpCiAgICB0cnk6CiAgICAgIHNlbGYuY2xpZW50LnRhYmxlcy5EZWxldGUocmVxdWVzdCkKICAgIGV4Y2VwdCBIdHRwRXJyb3IgYXMgZXhuOgogICAgICBpZiBleG4uc3RhdHVzX2NvZGUgPT0gNDA0OgogICAgICAgIGxvZ2dpbmcud2FybmluZygnVGFibGUgJXM6JXMuJXMgZG9lcyBub3QgZXhpc3QnLCBwcm9qZWN0X2lkLAogICAgICAgICAgICAgICAgICAgICAgICBkYXRhc2V0X2lkLCB0YWJsZV9pZCkKICAgICAgICByZXR1cm4KICAgICAgZWxzZToKICAgICAgICByYWlzZQoKICBAcmV0cnkud2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmKAogICAgICBudW1fcmV0cmllcz1NQVhfUkVUUklFUywKICAgICAgcmV0cnlfZmlsdGVyPXJldHJ5LnJldHJ5X29uX3NlcnZlcl9lcnJvcnNfYW5kX3RpbWVvdXRfZmlsdGVyKQogIGRlZiBfZGVsZXRlX2RhdGFzZXQoc2VsZiwgcHJvamVjdF9pZCwgZGF0YXNldF9pZCwgZGVsZXRlX2NvbnRlbnRzPVRydWUpOgogICAgcmVxdWVzdCA9IGJpZ3F1ZXJ5LkJpZ3F1ZXJ5RGF0YXNldHNEZWxldGVSZXF1ZXN0KAogICAgICAgIHByb2plY3RJZD1wcm9qZWN0X2lkLCBkYXRhc2V0SWQ9ZGF0YXNldF9pZCwKICAgICAgICBkZWxldGVDb250ZW50cz1kZWxldGVfY29udGVudHMpCiAgICB0cnk6CiAgICAgIHNlbGYuY2xpZW50LmRhdGFzZXRzLkRlbGV0ZShyZXF1ZXN0KQogICAgZXhjZXB0IEh0dHBFcnJvciBhcyBleG46CiAgICAgIGlmIGV4bi5zdGF0dXNfY29kZSA9PSA0MDQ6CiAgICAgICAgbG9nZ2luZy53YXJuaW5nKCdEYXRhc2V0ICVzOiVzIGRvZXMgbm90IGV4aXN0JywgcHJvamVjdF9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNldF9pZCkKICAgICAgICByZXR1cm4KICAgICAgZWxzZToKICAgICAgICByYWlzZQoKICBAcmV0cnkud2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmKAogICAgICBudW1fcmV0cmllcz1NQVhfUkVUUklFUywKICAgICAgcmV0cnlfZmlsdGVyPXJldHJ5LnJldHJ5X29uX3NlcnZlcl9lcnJvcnNfYW5kX3RpbWVvdXRfZmlsdGVyKQogIGRlZiBnZXRfdGFibGVfbG9jYXRpb24oc2VsZiwgcHJvamVjdF9pZCwgZGF0YXNldF9pZCwgdGFibGVfaWQpOgogICAgdGFibGUgPSBzZWxmLl9nZXRfdGFibGUocHJvamVjdF9pZCwgZGF0YXNldF9pZCwgdGFibGVfaWQpCiAgICByZXR1cm4gdGFibGUubG9jYXRpb24KCiAgQHJldHJ5LndpdGhfZXhwb25lbnRpYWxfYmFja29mZigKICAgICAgbnVtX3JldHJpZXM9TUFYX1JFVFJJRVMsCiAgICAgIHJldHJ5X2ZpbHRlcj1yZXRyeS5yZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2FuZF90aW1lb3V0X2ZpbHRlcikKICBkZWYgY3JlYXRlX3RlbXBvcmFyeV9kYXRhc2V0KHNlbGYsIHByb2plY3RfaWQsIGxvY2F0aW9uKToKICAgIGRhdGFzZXRfaWQgPSBCaWdRdWVyeVdyYXBwZXIuVEVNUF9EQVRBU0VUICsgc2VsZi5fdGVtcG9yYXJ5X3RhYmxlX3N1ZmZpeAogICAgIyBDaGVjayBpZiBkYXRhc2V0IGV4aXN0cyB0byBtYWtlIHN1cmUgdGhhdCB0aGUgdGVtcG9yYXJ5IGlkIGlzIHVuaXF1ZQogICAgdHJ5OgogICAgICBzZWxmLmNsaWVudC5kYXRhc2V0cy5HZXQoYmlncXVlcnkuQmlncXVlcnlEYXRhc2V0c0dldFJlcXVlc3QoCiAgICAgICAgICBwcm9qZWN0SWQ9cHJvamVjdF9pZCwgZGF0YXNldElkPWRhdGFzZXRfaWQpKQogICAgICBpZiBwcm9qZWN0X2lkIGlzIG5vdCBOb25lOgogICAgICAgICMgVW5pdHRlc3RzIGRvbid0IHBhc3MgcHJvamVjdElkcyBzbyB0aGV5IGNhbiBiZSBydW4gd2l0aG91dCBlcnJvcgogICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKICAgICAgICAgICAgJ0RhdGFzZXQgJXM6JXMgYWxyZWFkeSBleGlzdHMgc28gY2Fubm90IGJlIHVzZWQgYXMgdGVtcG9yYXJ5LicKICAgICAgICAgICAgJSAocHJvamVjdF9pZCwgZGF0YXNldF9pZCkpCiAgICBleGNlcHQgSHR0cEVycm9yIGFzIGV4bjoKICAgICAgaWYgZXhuLnN0YXR1c19jb2RlID09IDQwNDoKICAgICAgICBsb2dnaW5nLndhcm5pbmcoCiAgICAgICAgICAgICdEYXRhc2V0ICVzOiVzIGRvZXMgbm90IGV4aXN0IHNvIHdlIHdpbGwgY3JlYXRlIGl0IGFzIHRlbXBvcmFyeSAnCiAgICAgICAgICAgICd3aXRoIGxvY2F0aW9uPSVzJywKICAgICAgICAgICAgcHJvamVjdF9pZCwgZGF0YXNldF9pZCwgbG9jYXRpb24pCiAgICAgICAgc2VsZi5nZXRfb3JfY3JlYXRlX2RhdGFzZXQocHJvamVjdF9pZCwgZGF0YXNldF9pZCwgbG9jYXRpb249bG9jYXRpb24pCiAgICAgIGVsc2U6CiAgICAgICAgcmFpc2UKCiAgQHJldHJ5LndpdGhfZXhwb25lbnRpYWxfYmFja29mZigKICAgICAgbnVtX3JldHJpZXM9TUFYX1JFVFJJRVMsCiAgICAgIHJldHJ5X2ZpbHRlcj1yZXRyeS5yZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2FuZF90aW1lb3V0X2ZpbHRlcikKICBkZWYgY2xlYW5fdXBfdGVtcG9yYXJ5X2RhdGFzZXQoc2VsZiwgcHJvamVjdF9pZCk6CiAgICB0ZW1wX3RhYmxlID0gc2VsZi5fZ2V0X3RlbXBfdGFibGUocHJvamVjdF9pZCkKICAgIHRyeToKICAgICAgc2VsZi5jbGllbnQuZGF0YXNldHMuR2V0KGJpZ3F1ZXJ5LkJpZ3F1ZXJ5RGF0YXNldHNHZXRSZXF1ZXN0KAogICAgICAgICAgcHJvamVjdElkPXByb2plY3RfaWQsIGRhdGFzZXRJZD10ZW1wX3RhYmxlLmRhdGFzZXRJZCkpCiAgICBleGNlcHQgSHR0cEVycm9yIGFzIGV4bjoKICAgICAgaWYgZXhuLnN0YXR1c19jb2RlID09IDQwNDoKICAgICAgICBsb2dnaW5nLndhcm5pbmcoJ0RhdGFzZXQgJXM6JXMgZG9lcyBub3QgZXhpc3QnLCBwcm9qZWN0X2lkLAogICAgICAgICAgICAgICAgICAgICAgICB0ZW1wX3RhYmxlLmRhdGFzZXRJZCkKICAgICAgICByZXR1cm4KICAgICAgZWxzZToKICAgICAgICByYWlzZQogICAgc2VsZi5fZGVsZXRlX2RhdGFzZXQodGVtcF90YWJsZS5wcm9qZWN0SWQsIHRlbXBfdGFibGUuZGF0YXNldElkLCBUcnVlKQoKICBAcmV0cnkud2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmKAogICAgICBudW1fcmV0cmllcz1NQVhfUkVUUklFUywKICAgICAgcmV0cnlfZmlsdGVyPXJldHJ5LnJldHJ5X29uX3NlcnZlcl9lcnJvcnNfYW5kX3RpbWVvdXRfZmlsdGVyKQogIGRlZiBnZXRfb3JfY3JlYXRlX3RhYmxlKAogICAgICBzZWxmLCBwcm9qZWN0X2lkLCBkYXRhc2V0X2lkLCB0YWJsZV9pZCwgc2NoZW1hLAogICAgICBjcmVhdGVfZGlzcG9zaXRpb24sIHdyaXRlX2Rpc3Bvc2l0aW9uKToKICAgICIiIkdldHMgb3IgY3JlYXRlcyBhIHRhYmxlIGJhc2VkIG9uIGNyZWF0ZSBhbmQgd3JpdGUgZGlzcG9zaXRpb25zLgoKICAgIFRoZSBmdW5jdGlvbiBtaW1pY3MgdGhlIGJlaGF2aW9yIG9mIEJpZ1F1ZXJ5IGltcG9ydCBqb2JzIHdoZW4gdXNpbmcgdGhlCiAgICBzYW1lIGNyZWF0ZSBhbmQgd3JpdGUgZGlzcG9zaXRpb25zLgoKICAgIEFyZ3M6CiAgICAgIHByb2plY3RfaWQ6IFRoZSBwcm9qZWN0IGlkIG93bmluZyB0aGUgdGFibGUuCiAgICAgIGRhdGFzZXRfaWQ6IFRoZSBkYXRhc2V0IGlkIG93bmluZyB0aGUgdGFibGUuCiAgICAgIHRhYmxlX2lkOiBUaGUgdGFibGUgaWQuCiAgICAgIHNjaGVtYTogQSBiaWdxdWVyeS5UYWJsZVNjaGVtYSBpbnN0YW5jZSBvciBOb25lLgogICAgICBjcmVhdGVfZGlzcG9zaXRpb246IENSRUFURV9ORVZFUiBvciBDUkVBVEVfSUZfTkVFREVELgogICAgICB3cml0ZV9kaXNwb3NpdGlvbjogV1JJVEVfQVBQRU5ELCBXUklURV9FTVBUWSBvciBXUklURV9UUlVOQ0FURS4KCiAgICBSZXR1cm5zOgogICAgICBBIGJpZ3F1ZXJ5LlRhYmxlIGluc3RhbmNlIGlmIHRhYmxlIHdhcyBmb3VuZCBvciBjcmVhdGVkLgoKICAgIFJhaXNlczoKICAgICAgUnVudGltZUVycm9yOiBGb3IgdmFyaW91cyBtaXNtYXRjaGVzIGJldHdlZW4gdGhlIHN0YXRlIG9mIHRoZSB0YWJsZSBhbmQKICAgICAgICB0aGUgY3JlYXRlL3dyaXRlIGRpc3Bvc2l0aW9ucyBwYXNzZWQgaW4uIEZvciBleGFtcGxlIGlmIHRoZSB0YWJsZSBpcyBub3QKICAgICAgICBlbXB0eSBhbmQgV1JJVEVfRU1QVFkgd2FzIHNwZWNpZmllZCB0aGVuIGFuIGVycm9yIHdpbGwgYmUgcmFpc2VkIHNpbmNlCiAgICAgICAgdGhlIHRhYmxlIHdhcyBleHBlY3RlZCB0byBiZSBlbXB0eS4KICAgICIiIgogICAgZm91bmRfdGFibGUgPSBOb25lCiAgICB0cnk6CiAgICAgIGZvdW5kX3RhYmxlID0gc2VsZi5fZ2V0X3RhYmxlKHByb2plY3RfaWQsIGRhdGFzZXRfaWQsIHRhYmxlX2lkKQogICAgZXhjZXB0IEh0dHBFcnJvciBhcyBleG46CiAgICAgIGlmIGV4bi5zdGF0dXNfY29kZSA9PSA0MDQ6CiAgICAgICAgaWYgY3JlYXRlX2Rpc3Bvc2l0aW9uID09IEJpZ1F1ZXJ5RGlzcG9zaXRpb24uQ1JFQVRFX05FVkVSOgogICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAogICAgICAgICAgICAgICdUYWJsZSAlczolcy4lcyBub3QgZm91bmQgYnV0IGNyZWF0ZSBkaXNwb3NpdGlvbiBpcyBDUkVBVEVfTkVWRVIuJwogICAgICAgICAgICAgICUgKHByb2plY3RfaWQsIGRhdGFzZXRfaWQsIHRhYmxlX2lkKSkKICAgICAgZWxzZToKICAgICAgICByYWlzZQoKICAgICMgSWYgdGFibGUgZXhpc3RzIGFscmVhZHkgdGhlbiBoYW5kbGUgdGhlIHNlbWFudGljcyBmb3IgV1JJVEVfRU1QVFkgYW5kCiAgICAjIFdSSVRFX1RSVU5DQVRFIHdyaXRlIGRpc3Bvc2l0aW9ucy4KICAgIGlmIGZvdW5kX3RhYmxlOgogICAgICB0YWJsZV9lbXB0eSA9IHNlbGYuX2lzX3RhYmxlX2VtcHR5KHByb2plY3RfaWQsIGRhdGFzZXRfaWQsIHRhYmxlX2lkKQogICAgICBpZiAobm90IHRhYmxlX2VtcHR5IGFuZAogICAgICAgICAgd3JpdGVfZGlzcG9zaXRpb24gPT0gQmlnUXVlcnlEaXNwb3NpdGlvbi5XUklURV9FTVBUWSk6CiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAogICAgICAgICAgICAnVGFibGUgJXM6JXMuJXMgaXMgbm90IGVtcHR5IGJ1dCB3cml0ZSBkaXNwb3NpdGlvbiBpcyBXUklURV9FTVBUWS4nCiAgICAgICAgICAgICUgKHByb2plY3RfaWQsIGRhdGFzZXRfaWQsIHRhYmxlX2lkKSkKICAgICAgIyBEZWxldGUgdGhlIHRhYmxlIGFuZCByZWNyZWF0ZSBpdCAobGF0ZXIpIGlmIFdSSVRFX1RSVU5DQVRFIHdhcwogICAgICAjIHNwZWNpZmllZC4KICAgICAgaWYgd3JpdGVfZGlzcG9zaXRpb24gPT0gQmlnUXVlcnlEaXNwb3NpdGlvbi5XUklURV9UUlVOQ0FURToKICAgICAgICBzZWxmLl9kZWxldGVfdGFibGUocHJvamVjdF9pZCwgZGF0YXNldF9pZCwgdGFibGVfaWQpCgogICAgIyBDcmVhdGUgYSBuZXcgdGFibGUgcG90ZW50aWFsbHkgcmV1c2luZyB0aGUgc2NoZW1hIGZyb20gYSBwcmV2aW91c2x5CiAgICAjIGZvdW5kIHRhYmxlIGluIGNhc2UgdGhlIHNjaGVtYSB3YXMgbm90IHNwZWNpZmllZC4KICAgIGlmIHNjaGVtYSBpcyBOb25lIGFuZCBmb3VuZF90YWJsZSBpcyBOb25lOgogICAgICByYWlzZSBSdW50aW1lRXJyb3IoCiAgICAgICAgICAnVGFibGUgJXM6JXMuJXMgcmVxdWlyZXMgYSBzY2hlbWEuIE5vbmUgY2FuIGJlIGluZmVycmVkIGJlY2F1c2UgdGhlICcKICAgICAgICAgICd0YWJsZSBkb2VzIG5vdCBleGlzdC4nCiAgICAgICAgICAlIChwcm9qZWN0X2lkLCBkYXRhc2V0X2lkLCB0YWJsZV9pZCkpCiAgICBpZiBmb3VuZF90YWJsZSBhbmQgd3JpdGVfZGlzcG9zaXRpb24gIT0gQmlnUXVlcnlEaXNwb3NpdGlvbi5XUklURV9UUlVOQ0FURToKICAgICAgcmV0dXJuIGZvdW5kX3RhYmxlCiAgICBlbHNlOgogICAgICBjcmVhdGVkX3RhYmxlID0gc2VsZi5fY3JlYXRlX3RhYmxlKHByb2plY3RfaWQ9cHJvamVjdF9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhc2V0X2lkPWRhdGFzZXRfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfaWQ9dGFibGVfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hPXNjaGVtYSBvciBmb3VuZF90YWJsZS5zY2hlbWEpCiAgICAgICMgaWYgd3JpdGVfZGlzcG9zaXRpb24gPT0gQmlnUXVlcnlEaXNwb3NpdGlvbi5XUklURV9UUlVOQ0FURSB3ZSBkZWxldGUKICAgICAgIyB0aGUgdGFibGUgYmVmb3JlIHRoaXMgcG9pbnQuCiAgICAgIGlmIHdyaXRlX2Rpc3Bvc2l0aW9uID09IEJpZ1F1ZXJ5RGlzcG9zaXRpb24uV1JJVEVfVFJVTkNBVEU6CiAgICAgICAgIyBCaWdRdWVyeSBjYW4gcm91dGUgZGF0YSB0byB0aGUgb2xkIHRhYmxlIGZvciAyIG1pbnMgbWF4IHNvIHdhaXQKICAgICAgICAjIHRoYXQgbXVjaCB0aW1lIGJlZm9yZSBjcmVhdGluZyB0aGUgdGFibGUgYW5kIHdyaXRpbmcgaXQKICAgICAgICBsb2dnaW5nLndhcm5pbmcoJ1NsZWVwaW5nIGZvciAxNTAgc2Vjb25kcyBiZWZvcmUgdGhlIHdyaXRlIGFzICcgKwogICAgICAgICAgICAgICAgICAgICAgICAnQmlnUXVlcnkgaW5zZXJ0cyBjYW4gYmUgcm91dGVkIHRvIGRlbGV0ZWQgdGFibGUgJyArCiAgICAgICAgICAgICAgICAgICAgICAgICdmb3IgMiBtaW5zIGFmdGVyIHRoZSBkZWxldGUgYW5kIGNyZWF0ZS4nKQogICAgICAgICMgVE9ETyhCRUFNLTI2NzMpOiBSZW1vdmUgdGhpcyBzbGVlcCBieSBtaWdyYXRpbmcgdG8gbG9hZCBhcGkKICAgICAgICB0aW1lLnNsZWVwKDE1MCkKICAgICAgICByZXR1cm4gY3JlYXRlZF90YWJsZQogICAgICBlbHNlOgogICAgICAgIHJldHVybiBjcmVhdGVkX3RhYmxlCgogIGRlZiBydW5fcXVlcnkoc2VsZiwgcHJvamVjdF9pZCwgcXVlcnksIHVzZV9sZWdhY3lfc3FsLCBmbGF0dGVuX3Jlc3VsdHMsCiAgICAgICAgICAgICAgICBkcnlfcnVuPUZhbHNlKToKICAgIGpvYl9pZCA9IHNlbGYuX3N0YXJ0X3F1ZXJ5X2pvYihwcm9qZWN0X2lkLCBxdWVyeSwgdXNlX2xlZ2FjeV9zcWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhdHRlbl9yZXN1bHRzLCBqb2JfaWQ9dXVpZC51dWlkNCgpLmhleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcnlfcnVuPWRyeV9ydW4pCiAgICBpZiBkcnlfcnVuOgogICAgICAjIElmIHRoaXMgd2FzIGEgZHJ5IHJ1biB0aGVuIHRoZSBmYWN0IHRoYXQgd2UgZ2V0IGhlcmUgbWVhbnMgdGhlCiAgICAgICMgcXVlcnkgaGFzIG5vIGVycm9ycy4gVGhlIHN0YXJ0X3F1ZXJ5X2pvYiB3b3VsZCByYWlzZSBhbiBlcnJvciBvdGhlcndpc2UuCiAgICAgIHJldHVybgogICAgcGFnZV90b2tlbiA9IE5vbmUKICAgIHdoaWxlIFRydWU6CiAgICAgIHJlc3BvbnNlID0gc2VsZi5fZ2V0X3F1ZXJ5X3Jlc3VsdHMocHJvamVjdF9pZCwgam9iX2lkLCBwYWdlX3Rva2VuKQogICAgICBpZiBub3QgcmVzcG9uc2Uuam9iQ29tcGxldGU6CiAgICAgICAgIyBUaGUgam9iQ29tcGxldGUgZmllbGQgY2FuIGJlIEZhbHNlIGlmIHRoZSBxdWVyeSByZXF1ZXN0IHRpbWVzIG91dAogICAgICAgICMgKGRlZmF1bHQgaXMgMTAgc2Vjb25kcykuIE5vdGUgdGhhdCB0aGlzIGlzIGEgdGltZW91dCBmb3IgdGhlIHF1ZXJ5CiAgICAgICAgIyByZXF1ZXN0IG5vdCBmb3IgdGhlIGFjdHVhbCBleGVjdXRpb24gb2YgdGhlIHF1ZXJ5IGluIHRoZSBzZXJ2aWNlLiAgSWYKICAgICAgICAjIHRoZSByZXF1ZXN0IHRpbWVzIG91dCB3ZSBrZWVwIHRyeWluZy4gVGhpcyBzaXR1YXRpb24gaXMgcXVpdGUgcG9zc2libGUKICAgICAgICAjIGlmIHRoZSBxdWVyeSB3aWxsIHJldHVybiBhIGxhcmdlIG51bWJlciBvZiByb3dzLgogICAgICAgIGxvZ2dpbmcuaW5mbygnV2FpdGluZyBvbiByZXNwb25zZSBmcm9tIHF1ZXJ5OiAlcyAuLi4nLCBxdWVyeSkKICAgICAgICB0aW1lLnNsZWVwKDEuMCkKICAgICAgICBjb250aW51ZQogICAgICAjIFdlIGdvdCBzb21lIHJlc3VsdHMuIFRoZSBsYXN0IHBhZ2UgaXMgc2lnbmFsbGVkIGJ5IGEgbWlzc2luZyBwYWdlVG9rZW4uCiAgICAgIHlpZWxkIHJlc3BvbnNlLnJvd3MsIHJlc3BvbnNlLnNjaGVtYQogICAgICBpZiBub3QgcmVzcG9uc2UucGFnZVRva2VuOgogICAgICAgIGJyZWFrCiAgICAgIHBhZ2VfdG9rZW4gPSByZXNwb25zZS5wYWdlVG9rZW4KCiAgZGVmIGluc2VydF9yb3dzKHNlbGYsIHByb2plY3RfaWQsIGRhdGFzZXRfaWQsIHRhYmxlX2lkLCByb3dzKToKICAgICIiIkluc2VydHMgcm93cyBpbnRvIHRoZSBzcGVjaWZpZWQgdGFibGUuCgogICAgQXJnczoKICAgICAgcHJvamVjdF9pZDogVGhlIHByb2plY3QgaWQgb3duaW5nIHRoZSB0YWJsZS4KICAgICAgZGF0YXNldF9pZDogVGhlIGRhdGFzZXQgaWQgb3duaW5nIHRoZSB0YWJsZS4KICAgICAgdGFibGVfaWQ6IFRoZSB0YWJsZSBpZC4KICAgICAgcm93czogQSBsaXN0IG9mIHBsYWluIFB5dGhvbiBkaWN0aW9uYXJpZXMuIEVhY2ggZGljdGlvbmFyeSBpcyBhIHJvdyBhbmQKICAgICAgICBlYWNoIGtleSBpbiBpdCBpcyB0aGUgbmFtZSBvZiBhIGZpZWxkLgoKICAgIFJldHVybnM6CiAgICAgIEEgdHVwbGUgKGJvb2wsIGVycm9ycykuIElmIGZpcnN0IGVsZW1lbnQgaXMgRmFsc2UgdGhlbiB0aGUgc2Vjb25kIGVsZW1lbnQKICAgICAgd2lsbCBiZSBhIGJpZ3F1ZXJ5Lkluc2VydHRFcnJvcnNWYWx1ZUxpc3RFbnRyeSBpbnN0YW5jZSBjb250YWluaW5nCiAgICAgIHNwZWNpZmljIGVycm9ycy4KICAgICIiIgoKICAgICMgUHJlcGFyZSByb3dzIGZvciBpbnNlcnRpb24uIE9mIHNwZWNpYWwgbm90ZSBpcyB0aGUgcm93IElEIHRoYXQgd2UgYWRkIHRvCiAgICAjIGVhY2ggcm93IGluIG9yZGVyIHRvIGhlbHAgQmlnUXVlcnkgYXZvaWQgaW5zZXJ0aW5nIGEgcm93IG11bHRpcGxlIHRpbWVzLgogICAgIyBCaWdRdWVyeSB3aWxsIGRvIGEgYmVzdC1lZmZvcnQgaWYgdW5pcXVlIElEcyBhcmUgcHJvdmlkZWQuIFRoaXMgc2l0dWF0aW9uCiAgICAjIGNhbiBoYXBwZW4gZHVyaW5nIHJldHJpZXMgb24gZmFpbHVyZXMuCiAgICAjIFRPRE8oc2lsdml1Yyk6IE11c3QgYWRkIHN1cHBvcnQgdG8gd3JpdGluZyBUYWJsZVJvdydzIGluc3RlYWQgb2YgZGljdHMuCiAgICBmaW5hbF9yb3dzID0gW10KICAgIGZvciByb3cgaW4gcm93czoKICAgICAganNvbl9vYmplY3QgPSBiaWdxdWVyeS5Kc29uT2JqZWN0KCkKICAgICAgZm9yIGssIHYgaW4gaXRlcml0ZW1zKHJvdyk6CiAgICAgICAgaWYgaXNpbnN0YW5jZSh2LCBkZWNpbWFsLkRlY2ltYWwpOgogICAgICAgICAgIyBkZWNpbWFsIHZhbHVlcyBhcmUgY29udmVydGVkIGludG8gc3RyaW5nIGJlY2F1c2UgSlNPTiBkb2VzIG5vdAogICAgICAgICAgIyBzdXBwb3J0IHRoZSBwcmVjaXNpb24gdGhhdCBkZWNpbWFsIHN1cHBvcnRzLiBCUSBpcyBhYmxlIHRvIGhhbmRsZQogICAgICAgICAgIyBpbnNlcnRzIGludG8gTlVNRVJJQyBjb2x1bW5zIGJ5IHJlY2VpdmluZyBKU09OIHdpdGggc3RyaW5nIGF0dHJzLgogICAgICAgICAgdiA9IHN0cih2KQogICAgICAgIGpzb25fb2JqZWN0LmFkZGl0aW9uYWxQcm9wZXJ0aWVzLmFwcGVuZCgKICAgICAgICAgICAgYmlncXVlcnkuSnNvbk9iamVjdC5BZGRpdGlvbmFsUHJvcGVydHkoCiAgICAgICAgICAgICAgICBrZXk9aywgdmFsdWU9dG9fanNvbl92YWx1ZSh2KSkpCiAgICAgIGZpbmFsX3Jvd3MuYXBwZW5kKAogICAgICAgICAgYmlncXVlcnkuVGFibGVEYXRhSW5zZXJ0QWxsUmVxdWVzdC5Sb3dzVmFsdWVMaXN0RW50cnkoCiAgICAgICAgICAgICAgaW5zZXJ0SWQ9c3RyKHNlbGYudW5pcXVlX3Jvd19pZCksCiAgICAgICAgICAgICAganNvbj1qc29uX29iamVjdCkpCiAgICByZXN1bHQsIGVycm9ycyA9IHNlbGYuX2luc2VydF9hbGxfcm93cygKICAgICAgICBwcm9qZWN0X2lkLCBkYXRhc2V0X2lkLCB0YWJsZV9pZCwgZmluYWxfcm93cykKICAgIHJldHVybiByZXN1bHQsIGVycm9ycwoKICBkZWYgX2NvbnZlcnRfY2VsbF92YWx1ZV90b19kaWN0KHNlbGYsIHZhbHVlLCBmaWVsZCk6CiAgICBpZiBmaWVsZC50eXBlID09ICdTVFJJTkcnOgogICAgICAjIElucHV0OiAiWFlaIiAtLT4gT3V0cHV0OiAiWFlaIgogICAgICByZXR1cm4gdmFsdWUKICAgIGVsaWYgZmllbGQudHlwZSA9PSAnQk9PTEVBTic6CiAgICAgICMgSW5wdXQ6ICJ0cnVlIiAtLT4gT3V0cHV0OiBUcnVlCiAgICAgIHJldHVybiB2YWx1ZSA9PSAndHJ1ZScKICAgIGVsaWYgZmllbGQudHlwZSA9PSAnSU5URUdFUic6CiAgICAgICMgSW5wdXQ6ICIxMjMiIC0tPiBPdXRwdXQ6IDEyMwogICAgICByZXR1cm4gaW50KHZhbHVlKQogICAgZWxpZiBmaWVsZC50eXBlID09ICdGTE9BVCc6CiAgICAgICMgSW5wdXQ6ICIxLjIzIiAtLT4gT3V0cHV0OiAxLjIzCiAgICAgIHJldHVybiBmbG9hdCh2YWx1ZSkKICAgIGVsaWYgZmllbGQudHlwZSA9PSAnVElNRVNUQU1QJzoKICAgICAgIyBUaGUgVVRDIHNob3VsZCBjb21lIGZyb20gdGhlIHRpbWV6b25lIGxpYnJhcnkgYnV0IHRoaXMgaXMgYSBrbm93bgogICAgICAjIGlzc3VlIGluIHB5dGhvbiAyLjcgc28gd2UnbGwganVzdCBoYXJkY29kZSBpdCBhcyB3ZSdyZSByZWFkaW5nIHVzaW5nCiAgICAgICMgdXRjZnJvbXRpbWVzdGFtcC4KICAgICAgIyBJbnB1dDogMTQ3ODEzNDE3Ni45ODU4NjQgLS0+IE91dHB1dDogIjIwMTYtMTEtMDMgMDA6NDk6MzYuOTg1ODY0IFVUQyIKICAgICAgZHQgPSBkYXRldGltZS5kYXRldGltZS51dGNmcm9tdGltZXN0YW1wKGZsb2F0KHZhbHVlKSkKICAgICAgcmV0dXJuIGR0LnN0cmZ0aW1lKCclWS0lbS0lZCAlSDolTTolUy4lZiBVVEMnKQogICAgZWxpZiBmaWVsZC50eXBlID09ICdCWVRFUyc6CiAgICAgICMgSW5wdXQ6ICJZbUppIiAtLT4gT3V0cHV0OiAiWW1KaSIKICAgICAgcmV0dXJuIHZhbHVlCiAgICBlbGlmIGZpZWxkLnR5cGUgPT0gJ0RBVEUnOgogICAgICAjIElucHV0OiAiMjAxNi0xMS0wMyIgLS0+IE91dHB1dDogIjIwMTYtMTEtMDMiCiAgICAgIHJldHVybiB2YWx1ZQogICAgZWxpZiBmaWVsZC50eXBlID09ICdEQVRFVElNRSc6CiAgICAgICMgSW5wdXQ6ICIyMDE2LTExLTAzVDAwOjQ5OjM2IiAtLT4gT3V0cHV0OiAiMjAxNi0xMS0wM1QwMDo0OTozNiIKICAgICAgcmV0dXJuIHZhbHVlCiAgICBlbGlmIGZpZWxkLnR5cGUgPT0gJ1RJTUUnOgogICAgICAjIElucHV0OiAiMDA6NDk6MzYiIC0tPiBPdXRwdXQ6ICIwMDo0OTozNiIKICAgICAgcmV0dXJuIHZhbHVlCiAgICBlbGlmIGZpZWxkLnR5cGUgPT0gJ1JFQ09SRCc6CiAgICAgICMgTm90ZSB0aGF0IGEgc2NoZW1hIGZpZWxkIG9iamVjdCBzdXBwb3J0cyBhbHNvIGEgUkVDT1JEIHR5cGUuIEhvd2V2ZXIKICAgICAgIyB3aGVuIHF1ZXJ5aW5nLCB0aGUgcmVwZWF0ZWQgYW5kL29yIHJlY29yZCBmaWVsZHMgYXJlIGZsYXR0ZW5lZAogICAgICAjIHVubGVzcyB3ZSBwYXNzIHRoZSBmbGF0dGVuX3Jlc3VsdHMgZmxhZyBhcyBGYWxzZSB0byB0aGUgc291cmNlCiAgICAgIHJldHVybiBzZWxmLmNvbnZlcnRfcm93X3RvX2RpY3QodmFsdWUsIGZpZWxkKQogICAgZWxpZiBmaWVsZC50eXBlID09ICdOVU1FUklDJzoKICAgICAgcmV0dXJuIGRlY2ltYWwuRGVjaW1hbCh2YWx1ZSkKICAgIGVsaWYgZmllbGQudHlwZSA9PSAnR0VPR1JBUEhZJzoKICAgICAgcmV0dXJuIHZhbHVlCiAgICBlbHNlOgogICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1VuZXhwZWN0ZWQgZmllbGQgdHlwZTogJXMnICUgZmllbGQudHlwZSkKCiAgZGVmIGNvbnZlcnRfcm93X3RvX2RpY3Qoc2VsZiwgcm93LCBzY2hlbWEpOgogICAgIiIiQ29udmVydHMgYSBUYWJsZVJvdyBpbnN0YW5jZSB1c2luZyB0aGUgc2NoZW1hIHRvIGEgUHl0aG9uIGRpY3QuIiIiCiAgICByZXN1bHQgPSB7fQogICAgZm9yIGluZGV4LCBmaWVsZCBpbiBlbnVtZXJhdGUoc2NoZW1hLmZpZWxkcyk6CiAgICAgIHZhbHVlID0gTm9uZQogICAgICBpZiBpc2luc3RhbmNlKHNjaGVtYSwgYmlncXVlcnkuVGFibGVTY2hlbWEpOgogICAgICAgIGNlbGwgPSByb3cuZltpbmRleF0KICAgICAgICB2YWx1ZSA9IGZyb21fanNvbl92YWx1ZShjZWxsLnYpIGlmIGNlbGwudiBpcyBub3QgTm9uZSBlbHNlIE5vbmUKICAgICAgZWxpZiBpc2luc3RhbmNlKHNjaGVtYSwgYmlncXVlcnkuVGFibGVGaWVsZFNjaGVtYSk6CiAgICAgICAgY2VsbCA9IHJvd1snZiddW2luZGV4XQogICAgICAgIHZhbHVlID0gY2VsbFsndiddIGlmICd2JyBpbiBjZWxsIGVsc2UgTm9uZQogICAgICBpZiBmaWVsZC5tb2RlID09ICdSRVBFQVRFRCc6CiAgICAgICAgaWYgdmFsdWUgaXMgTm9uZToKICAgICAgICAgICMgSWRlYWxseSB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4gYXMgcmVwZWF0ZWQgZmllbGRzIGRlZmF1bHQgdG8KICAgICAgICAgICMgcmV0dXJuaW5nIGFuIGVtcHR5IGxpc3QKICAgICAgICAgIHJlc3VsdFtmaWVsZC5uYW1lXSA9IFtdCiAgICAgICAgZWxzZToKICAgICAgICAgIHJlc3VsdFtmaWVsZC5uYW1lXSA9IFtzZWxmLl9jb252ZXJ0X2NlbGxfdmFsdWVfdG9fZGljdCh4Wyd2J10sIGZpZWxkKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluIHZhbHVlXQogICAgICBlbGlmIHZhbHVlIGlzIE5vbmU6CiAgICAgICAgaWYgbm90IGZpZWxkLm1vZGUgPT0gJ05VTExBQkxFJzoKICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1JlY2VpdmVkIFwnTm9uZVwnIGFzIHRoZSB2YWx1ZSBmb3IgdGhlIGZpZWxkICVzICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2J1dCB0aGUgZmllbGQgaXMgbm90IE5VTExBQkxFLicgJSBmaWVsZC5uYW1lKQogICAgICAgIHJlc3VsdFtmaWVsZC5uYW1lXSA9IE5vbmUKICAgICAgZWxzZToKICAgICAgICByZXN1bHRbZmllbGQubmFtZV0gPSBzZWxmLl9jb252ZXJ0X2NlbGxfdmFsdWVfdG9fZGljdCh2YWx1ZSwgZmllbGQpCiAgICByZXR1cm4gcmVzdWx0CgoKY2xhc3MgQmlnUXVlcnlXcml0ZUZuKERvRm4pOgogICIiIkEgYGBEb0ZuYGAgdGhhdCBzdHJlYW1zIHdyaXRlcyB0byBCaWdRdWVyeSBvbmNlIHRoZSB0YWJsZSBpcyBjcmVhdGVkLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgdGFibGVfaWQsIGRhdGFzZXRfaWQsIHByb2plY3RfaWQsIGJhdGNoX3NpemUsIHNjaGVtYSwKICAgICAgICAgICAgICAgY3JlYXRlX2Rpc3Bvc2l0aW9uLCB3cml0ZV9kaXNwb3NpdGlvbiwgdGVzdF9jbGllbnQpOgogICAgIiIiSW5pdGlhbGl6ZSBhIFdyaXRlVG9CaWdRdWVyeSB0cmFuc2Zvcm0uCgogICAgQXJnczoKICAgICAgdGFibGVfaWQ6IFRoZSBJRCBvZiB0aGUgdGFibGUuIFRoZSBJRCBtdXN0IGNvbnRhaW4gb25seSBsZXR0ZXJzCiAgICAgICAgKGEteiwgQS1aKSwgbnVtYmVycyAoMC05KSwgb3IgdW5kZXJzY29yZXMgKF8pLiBJZiBkYXRhc2V0IGFyZ3VtZW50IGlzCiAgICAgICAgTm9uZSB0aGVuIHRoZSB0YWJsZSBhcmd1bWVudCBtdXN0IGNvbnRhaW4gdGhlIGVudGlyZSB0YWJsZSByZWZlcmVuY2UKICAgICAgICBzcGVjaWZpZWQgYXM6ICdEQVRBU0VULlRBQkxFJyBvciAnUFJPSkVDVDpEQVRBU0VULlRBQkxFJy4KICAgICAgZGF0YXNldF9pZDogVGhlIElEIG9mIHRoZSBkYXRhc2V0IGNvbnRhaW5pbmcgdGhpcyB0YWJsZSBvciBudWxsIGlmIHRoZQogICAgICAgIHRhYmxlIHJlZmVyZW5jZSBpcyBzcGVjaWZpZWQgZW50aXJlbHkgYnkgdGhlIHRhYmxlIGFyZ3VtZW50LgogICAgICBwcm9qZWN0X2lkOiBUaGUgSUQgb2YgdGhlIHByb2plY3QgY29udGFpbmluZyB0aGlzIHRhYmxlIG9yIG51bGwgaWYgdGhlCiAgICAgICAgdGFibGUgcmVmZXJlbmNlIGlzIHNwZWNpZmllZCBlbnRpcmVseSBieSB0aGUgdGFibGUgYXJndW1lbnQuCiAgICAgIGJhdGNoX3NpemU6IE51bWJlciBvZiByb3dzIHRvIGJlIHdyaXR0ZW4gdG8gQlEgcGVyIHN0cmVhbWluZyBBUEkgaW5zZXJ0LgogICAgICBzY2hlbWE6IFRoZSBzY2hlbWEgdG8gYmUgdXNlZCBpZiB0aGUgQmlnUXVlcnkgdGFibGUgdG8gd3JpdGUgaGFzIHRvIGJlCiAgICAgICAgY3JlYXRlZC4gVGhpcyBjYW4gYmUgZWl0aGVyIHNwZWNpZmllZCBhcyBhICdiaWdxdWVyeS5UYWJsZVNjaGVtYScgb2JqZWN0CiAgICAgICAgb3IgYSBzaW5nbGUgc3RyaW5nICBvZiB0aGUgZm9ybSAnZmllbGQxOnR5cGUxLGZpZWxkMjp0eXBlMixmaWVsZDM6dHlwZTMnCiAgICAgICAgdGhhdCBkZWZpbmVzIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgZmllbGRzLiBIZXJlICd0eXBlJyBzaG91bGQKICAgICAgICBzcGVjaWZ5IHRoZSBCaWdRdWVyeSB0eXBlIG9mIHRoZSBmaWVsZC4gU2luZ2xlIHN0cmluZyBiYXNlZCBzY2hlbWFzIGRvCiAgICAgICAgbm90IHN1cHBvcnQgbmVzdGVkIGZpZWxkcywgcmVwZWF0ZWQgZmllbGRzLCBvciBzcGVjaWZ5aW5nIGEgQmlnUXVlcnkKICAgICAgICBtb2RlIGZvciBmaWVsZHMgKG1vZGUgd2lsbCBhbHdheXMgYmUgc2V0IHRvICdOVUxMQUJMRScpLgogICAgICBjcmVhdGVfZGlzcG9zaXRpb246IEEgc3RyaW5nIGRlc2NyaWJpbmcgd2hhdCBoYXBwZW5zIGlmIHRoZSB0YWJsZSBkb2VzIG5vdAogICAgICAgIGV4aXN0LiBQb3NzaWJsZSB2YWx1ZXMgYXJlOgogICAgICAgIC0gQmlnUXVlcnlEaXNwb3NpdGlvbi5DUkVBVEVfSUZfTkVFREVEOiBjcmVhdGUgaWYgZG9lcyBub3QgZXhpc3QuCiAgICAgICAgLSBCaWdRdWVyeURpc3Bvc2l0aW9uLkNSRUFURV9ORVZFUjogZmFpbCB0aGUgd3JpdGUgaWYgZG9lcyBub3QgZXhpc3QuCiAgICAgIHdyaXRlX2Rpc3Bvc2l0aW9uOiBBIHN0cmluZyBkZXNjcmliaW5nIHdoYXQgaGFwcGVucyBpZiB0aGUgdGFibGUgaGFzCiAgICAgICAgYWxyZWFkeSBzb21lIGRhdGEuIFBvc3NpYmxlIHZhbHVlcyBhcmU6CiAgICAgICAgLSAgQmlnUXVlcnlEaXNwb3NpdGlvbi5XUklURV9UUlVOQ0FURTogZGVsZXRlIGV4aXN0aW5nIHJvd3MuCiAgICAgICAgLSAgQmlnUXVlcnlEaXNwb3NpdGlvbi5XUklURV9BUFBFTkQ6IGFkZCB0byBleGlzdGluZyByb3dzLgogICAgICAgIC0gIEJpZ1F1ZXJ5RGlzcG9zaXRpb24uV1JJVEVfRU1QVFk6IGZhaWwgdGhlIHdyaXRlIGlmIHRhYmxlIG5vdCBlbXB0eS4KICAgICAgICBGb3Igc3RyZWFtaW5nIHBpcGVsaW5lcyBXcml0ZVRydW5jYXRlIGNhbiBub3QgYmUgdXNlZC4KICAgICAgdGVzdF9jbGllbnQ6IE92ZXJyaWRlIHRoZSBkZWZhdWx0IGJpZ3F1ZXJ5IGNsaWVudCB1c2VkIGZvciB0ZXN0aW5nLgogICAgIiIiCiAgICBzZWxmLnRhYmxlX2lkID0gdGFibGVfaWQKICAgIHNlbGYuZGF0YXNldF9pZCA9IGRhdGFzZXRfaWQKICAgIHNlbGYucHJvamVjdF9pZCA9IHByb2plY3RfaWQKICAgIHNlbGYuc2NoZW1hID0gc2NoZW1hCiAgICBzZWxmLnRlc3RfY2xpZW50ID0gdGVzdF9jbGllbnQKICAgIHNlbGYuY3JlYXRlX2Rpc3Bvc2l0aW9uID0gY3JlYXRlX2Rpc3Bvc2l0aW9uCiAgICBzZWxmLndyaXRlX2Rpc3Bvc2l0aW9uID0gd3JpdGVfZGlzcG9zaXRpb24KICAgIHNlbGYuX3Jvd3NfYnVmZmVyID0gW10KICAgICMgVGhlIGRlZmF1bHQgYmF0Y2ggc2l6ZSBpcyA1MDAKICAgIHNlbGYuX21heF9iYXRjaF9zaXplID0gYmF0Y2hfc2l6ZSBvciA1MDAKCiAgZGVmIGRpc3BsYXlfZGF0YShzZWxmKToKICAgIHJldHVybiB7J3RhYmxlX2lkJzogc2VsZi50YWJsZV9pZCwKICAgICAgICAgICAgJ2RhdGFzZXRfaWQnOiBzZWxmLmRhdGFzZXRfaWQsCiAgICAgICAgICAgICdwcm9qZWN0X2lkJzogc2VsZi5wcm9qZWN0X2lkLAogICAgICAgICAgICAnc2NoZW1hJzogc3RyKHNlbGYuc2NoZW1hKSwKICAgICAgICAgICAgJ21heF9iYXRjaF9zaXplJzogc2VsZi5fbWF4X2JhdGNoX3NpemV9CgogIEBzdGF0aWNtZXRob2QKICBkZWYgZ2V0X3RhYmxlX3NjaGVtYShzY2hlbWEpOgogICAgIiIiVHJhbnNmb3JtIHRoZSB0YWJsZSBzY2hlbWEgaW50byBhIGJpZ3F1ZXJ5LlRhYmxlU2NoZW1hIGluc3RhbmNlLgoKICAgIEFyZ3M6CiAgICAgIHNjaGVtYTogVGhlIHNjaGVtYSB0byBiZSB1c2VkIGlmIHRoZSBCaWdRdWVyeSB0YWJsZSB0byB3cml0ZSBoYXMgdG8gYmUKICAgICAgICBjcmVhdGVkLiBUaGlzIGlzIGEgZGljdGlvbmFyeSBvYmplY3QgY3JlYXRlZCBpbiB0aGUgV3JpdGVUb0JpZ1F1ZXJ5CiAgICAgICAgdHJhbnNmb3JtLgogICAgUmV0dXJuczoKICAgICAgdGFibGVfc2NoZW1hOiBUaGUgc2NoZW1hIHRvIGJlIHVzZWQgaWYgdGhlIEJpZ1F1ZXJ5IHRhYmxlIHRvIHdyaXRlIGhhcwogICAgICAgICB0byBiZSBjcmVhdGVkIGJ1dCBpbiB0aGUgYmlncXVlcnkuVGFibGVTY2hlbWEgZm9ybWF0LgogICAgIiIiCiAgICBpZiBzY2hlbWEgaXMgTm9uZToKICAgICAgcmV0dXJuIHNjaGVtYQogICAgZWxpZiBpc2luc3RhbmNlKHNjaGVtYSwgZGljdCk6CiAgICAgIHJldHVybiBwYXJzZV90YWJsZV9zY2hlbWFfZnJvbV9qc29uKGpzb24uZHVtcHMoc2NoZW1hKSkKICAgIGVsc2U6CiAgICAgIHJhaXNlIFR5cGVFcnJvcignVW5leHBlY3RlZCBzY2hlbWEgYXJndW1lbnQ6ICVzLicgJSBzY2hlbWEpCgogIGRlZiBzdGFydF9idW5kbGUoc2VsZik6CiAgICBzZWxmLl9yb3dzX2J1ZmZlciA9IFtdCiAgICBzZWxmLnRhYmxlX3NjaGVtYSA9IHNlbGYuZ2V0X3RhYmxlX3NjaGVtYShzZWxmLnNjaGVtYSkKCiAgICBzZWxmLmJpZ3F1ZXJ5X3dyYXBwZXIgPSBCaWdRdWVyeVdyYXBwZXIoY2xpZW50PXNlbGYudGVzdF9jbGllbnQpCiAgICBzZWxmLmJpZ3F1ZXJ5X3dyYXBwZXIuZ2V0X29yX2NyZWF0ZV90YWJsZSgKICAgICAgICBzZWxmLnByb2plY3RfaWQsIHNlbGYuZGF0YXNldF9pZCwgc2VsZi50YWJsZV9pZCwgc2VsZi50YWJsZV9zY2hlbWEsCiAgICAgICAgc2VsZi5jcmVhdGVfZGlzcG9zaXRpb24sIHNlbGYud3JpdGVfZGlzcG9zaXRpb24pCgogIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQsIHVudXNlZF9jcmVhdGVfZm5fb3V0cHV0PU5vbmUpOgogICAgc2VsZi5fcm93c19idWZmZXIuYXBwZW5kKGVsZW1lbnQpCiAgICBpZiBsZW4oc2VsZi5fcm93c19idWZmZXIpID49IHNlbGYuX21heF9iYXRjaF9zaXplOgogICAgICBzZWxmLl9mbHVzaF9iYXRjaCgpCgogIGRlZiBmaW5pc2hfYnVuZGxlKHNlbGYpOgogICAgaWYgc2VsZi5fcm93c19idWZmZXI6CiAgICAgIHNlbGYuX2ZsdXNoX2JhdGNoKCkKICAgIHNlbGYuX3Jvd3NfYnVmZmVyID0gW10KCiAgZGVmIF9mbHVzaF9iYXRjaChzZWxmKToKICAgICMgRmx1c2ggdGhlIGN1cnJlbnQgYmF0Y2ggb2Ygcm93cyB0byBCaWdRdWVyeS4KICAgIHBhc3NlZCwgZXJyb3JzID0gc2VsZi5iaWdxdWVyeV93cmFwcGVyLmluc2VydF9yb3dzKAogICAgICAgIHByb2plY3RfaWQ9c2VsZi5wcm9qZWN0X2lkLCBkYXRhc2V0X2lkPXNlbGYuZGF0YXNldF9pZCwKICAgICAgICB0YWJsZV9pZD1zZWxmLnRhYmxlX2lkLCByb3dzPXNlbGYuX3Jvd3NfYnVmZmVyKQogICAgaWYgbm90IHBhc3NlZDoKICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdDb3VsZCBub3Qgc3VjY2Vzc2Z1bGx5IGluc2VydCByb3dzIHRvIEJpZ1F1ZXJ5JwogICAgICAgICAgICAgICAgICAgICAgICAgJyB0YWJsZSBbJXM6JXMuJXNdLiBFcnJvcnM6ICVzJyUKICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLnByb2plY3RfaWQsIHNlbGYuZGF0YXNldF9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhYmxlX2lkLCBlcnJvcnMpKQogICAgbG9nZ2luZy5kZWJ1ZygiU3VjY2Vzc2Z1bGx5IHdyb3RlICVkIHJvd3MuIiwgbGVuKHNlbGYuX3Jvd3NfYnVmZmVyKSkKICAgIHNlbGYuX3Jvd3NfYnVmZmVyID0gW10KCgpjbGFzcyBXcml0ZVRvQmlnUXVlcnkoUFRyYW5zZm9ybSk6CgogIGRlZiBfX2luaXRfXyhzZWxmLCB0YWJsZSwgZGF0YXNldD1Ob25lLCBwcm9qZWN0PU5vbmUsIHNjaGVtYT1Ob25lLAogICAgICAgICAgICAgICBjcmVhdGVfZGlzcG9zaXRpb249QmlnUXVlcnlEaXNwb3NpdGlvbi5DUkVBVEVfSUZfTkVFREVELAogICAgICAgICAgICAgICB3cml0ZV9kaXNwb3NpdGlvbj1CaWdRdWVyeURpc3Bvc2l0aW9uLldSSVRFX0FQUEVORCwKICAgICAgICAgICAgICAgYmF0Y2hfc2l6ZT1Ob25lLCB0ZXN0X2NsaWVudD1Ob25lKToKICAgICIiIkluaXRpYWxpemUgYSBXcml0ZVRvQmlnUXVlcnkgdHJhbnNmb3JtLgoKICAgIEFyZ3M6CiAgICAgIHRhYmxlIChzdHIpOiBUaGUgSUQgb2YgdGhlIHRhYmxlLiBUaGUgSUQgbXVzdCBjb250YWluIG9ubHkgbGV0dGVycwogICAgICAgIGBgYS16YGAsIGBgQS1aYGAsIG51bWJlcnMgYGAwLTlgYCwgb3IgdW5kZXJzY29yZXMgYGBfYGAuIElmIGRhdGFzZXQKICAgICAgICBhcmd1bWVudCBpcyA6ZGF0YTpgTm9uZWAgdGhlbiB0aGUgdGFibGUgYXJndW1lbnQgbXVzdCBjb250YWluIHRoZQogICAgICAgIGVudGlyZSB0YWJsZSByZWZlcmVuY2Ugc3BlY2lmaWVkIGFzOiBgYCdEQVRBU0VULlRBQkxFJ2BgIG9yCiAgICAgICAgYGAnUFJPSkVDVDpEQVRBU0VULlRBQkxFJ2BgLgogICAgICBkYXRhc2V0IChzdHIpOiBUaGUgSUQgb2YgdGhlIGRhdGFzZXQgY29udGFpbmluZyB0aGlzIHRhYmxlIG9yCiAgICAgICAgOmRhdGE6YE5vbmVgIGlmIHRoZSB0YWJsZSByZWZlcmVuY2UgaXMgc3BlY2lmaWVkIGVudGlyZWx5IGJ5IHRoZSB0YWJsZQogICAgICAgIGFyZ3VtZW50LgogICAgICBwcm9qZWN0IChzdHIpOiBUaGUgSUQgb2YgdGhlIHByb2plY3QgY29udGFpbmluZyB0aGlzIHRhYmxlIG9yCiAgICAgICAgOmRhdGE6YE5vbmVgIGlmIHRoZSB0YWJsZSByZWZlcmVuY2UgaXMgc3BlY2lmaWVkIGVudGlyZWx5IGJ5IHRoZSB0YWJsZQogICAgICAgIGFyZ3VtZW50LgogICAgICBzY2hlbWEgKHN0cik6IFRoZSBzY2hlbWEgdG8gYmUgdXNlZCBpZiB0aGUgQmlnUXVlcnkgdGFibGUgdG8gd3JpdGUgaGFzIHRvCiAgICAgICAgYmUgY3JlYXRlZC4gVGhpcyBjYW4gYmUgZWl0aGVyIHNwZWNpZmllZCBhcyBhCiAgICAgICAgOmNsYXNzOmB+YXBhY2hlX2JlYW0uaW8uZ2NwLmludGVybmFsLmNsaWVudHMuYmlncXVlcnkuXApiaWdxdWVyeV92Ml9tZXNzYWdlcy5UYWJsZVNjaGVtYWAKICAgICAgICBvYmplY3Qgb3IgYSBzaW5nbGUgc3RyaW5nICBvZiB0aGUgZm9ybQogICAgICAgIGBgJ2ZpZWxkMTp0eXBlMSxmaWVsZDI6dHlwZTIsZmllbGQzOnR5cGUzJ2BgIHRoYXQgZGVmaW5lcyBhIGNvbW1hCiAgICAgICAgc2VwYXJhdGVkIGxpc3Qgb2YgZmllbGRzLiBIZXJlIGBgJ3R5cGUnYGAgc2hvdWxkIHNwZWNpZnkgdGhlIEJpZ1F1ZXJ5CiAgICAgICAgdHlwZSBvZiB0aGUgZmllbGQuIFNpbmdsZSBzdHJpbmcgYmFzZWQgc2NoZW1hcyBkbyBub3Qgc3VwcG9ydCBuZXN0ZWQKICAgICAgICBmaWVsZHMsIHJlcGVhdGVkIGZpZWxkcywgb3Igc3BlY2lmeWluZyBhIEJpZ1F1ZXJ5IG1vZGUgZm9yIGZpZWxkcwogICAgICAgIChtb2RlIHdpbGwgYWx3YXlzIGJlIHNldCB0byBgYCdOVUxMQUJMRSdgYCkuCiAgICAgIGNyZWF0ZV9kaXNwb3NpdGlvbiAoQmlnUXVlcnlEaXNwb3NpdGlvbik6IEEgc3RyaW5nIGRlc2NyaWJpbmcgd2hhdAogICAgICAgIGhhcHBlbnMgaWYgdGhlIHRhYmxlIGRvZXMgbm90IGV4aXN0LiBQb3NzaWJsZSB2YWx1ZXMgYXJlOgoKICAgICAgICAqIDphdHRyOmBCaWdRdWVyeURpc3Bvc2l0aW9uLkNSRUFURV9JRl9ORUVERURgOiBjcmVhdGUgaWYgZG9lcyBub3QKICAgICAgICAgIGV4aXN0LgogICAgICAgICogOmF0dHI6YEJpZ1F1ZXJ5RGlzcG9zaXRpb24uQ1JFQVRFX05FVkVSYDogZmFpbCB0aGUgd3JpdGUgaWYgZG9lcyBub3QKICAgICAgICAgIGV4aXN0LgoKICAgICAgd3JpdGVfZGlzcG9zaXRpb24gKEJpZ1F1ZXJ5RGlzcG9zaXRpb24pOiBBIHN0cmluZyBkZXNjcmliaW5nIHdoYXQgaGFwcGVucwogICAgICAgIGlmIHRoZSB0YWJsZSBoYXMgYWxyZWFkeSBzb21lIGRhdGEuIFBvc3NpYmxlIHZhbHVlcyBhcmU6CgogICAgICAgICogOmF0dHI6YEJpZ1F1ZXJ5RGlzcG9zaXRpb24uV1JJVEVfVFJVTkNBVEVgOiBkZWxldGUgZXhpc3Rpbmcgcm93cy4KICAgICAgICAqIDphdHRyOmBCaWdRdWVyeURpc3Bvc2l0aW9uLldSSVRFX0FQUEVORGA6IGFkZCB0byBleGlzdGluZyByb3dzLgogICAgICAgICogOmF0dHI6YEJpZ1F1ZXJ5RGlzcG9zaXRpb24uV1JJVEVfRU1QVFlgOiBmYWlsIHRoZSB3cml0ZSBpZiB0YWJsZSBub3QKICAgICAgICAgIGVtcHR5LgoKICAgICAgICBGb3Igc3RyZWFtaW5nIHBpcGVsaW5lcyBXcml0ZVRydW5jYXRlIGNhbiBub3QgYmUgdXNlZC4KCiAgICAgIGJhdGNoX3NpemUgKGludCk6IE51bWJlciBvZiByb3dzIHRvIGJlIHdyaXR0ZW4gdG8gQlEgcGVyIHN0cmVhbWluZyBBUEkKICAgICAgICBpbnNlcnQuCiAgICAgIHRlc3RfY2xpZW50OiBPdmVycmlkZSB0aGUgZGVmYXVsdCBiaWdxdWVyeSBjbGllbnQgdXNlZCBmb3IgdGVzdGluZy4KICAgICIiIgogICAgc2VsZi50YWJsZV9yZWZlcmVuY2UgPSBfcGFyc2VfdGFibGVfcmVmZXJlbmNlKHRhYmxlLCBkYXRhc2V0LCBwcm9qZWN0KQogICAgc2VsZi5jcmVhdGVfZGlzcG9zaXRpb24gPSBCaWdRdWVyeURpc3Bvc2l0aW9uLnZhbGlkYXRlX2NyZWF0ZSgKICAgICAgICBjcmVhdGVfZGlzcG9zaXRpb24pCiAgICBzZWxmLndyaXRlX2Rpc3Bvc2l0aW9uID0gQmlnUXVlcnlEaXNwb3NpdGlvbi52YWxpZGF0ZV93cml0ZSgKICAgICAgICB3cml0ZV9kaXNwb3NpdGlvbikKICAgIHNlbGYuc2NoZW1hID0gc2NoZW1hCiAgICBzZWxmLmJhdGNoX3NpemUgPSBiYXRjaF9zaXplCiAgICBzZWxmLnRlc3RfY2xpZW50ID0gdGVzdF9jbGllbnQKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBnZXRfdGFibGVfc2NoZW1hX2Zyb21fc3RyaW5nKHNjaGVtYSk6CiAgICAiIiJUcmFuc2Zvcm0gdGhlIHN0cmluZyB0YWJsZSBzY2hlbWEgaW50byBhCiAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5pby5nY3AuaW50ZXJuYWwuY2xpZW50cy5iaWdxdWVyeS5cCmJpZ3F1ZXJ5X3YyX21lc3NhZ2VzLlRhYmxlU2NoZW1hYCBpbnN0YW5jZS4KCiAgICBBcmdzOgogICAgICBzY2hlbWEgKHN0cik6IFRoZSBzdGluZyBzY2hlbWEgdG8gYmUgdXNlZCBpZiB0aGUgQmlnUXVlcnkgdGFibGUgdG8gd3JpdGUKICAgICAgICBoYXMgdG8gYmUgY3JlYXRlZC4KCiAgICBSZXR1cm5zOgogICAgICB+YXBhY2hlX2JlYW0uaW8uZ2NwLmludGVybmFsLmNsaWVudHMuYmlncXVlcnkuXApiaWdxdWVyeV92Ml9tZXNzYWdlcy5UYWJsZVNjaGVtYToKICAgICAgVGhlIHNjaGVtYSB0byBiZSB1c2VkIGlmIHRoZSBCaWdRdWVyeSB0YWJsZSB0byB3cml0ZSBoYXMgdG8gYmUgY3JlYXRlZAogICAgICBidXQgaW4gdGhlIDpjbGFzczpgfmFwYWNoZV9iZWFtLmlvLmdjcC5pbnRlcm5hbC5jbGllbnRzLmJpZ3F1ZXJ5LlwKYmlncXVlcnlfdjJfbWVzc2FnZXMuVGFibGVTY2hlbWFgIGZvcm1hdC4KICAgICIiIgogICAgdGFibGVfc2NoZW1hID0gYmlncXVlcnkuVGFibGVTY2hlbWEoKQogICAgc2NoZW1hX2xpc3QgPSBbcy5zdHJpcCgpIGZvciBzIGluIHNjaGVtYS5zcGxpdCgnLCcpXQogICAgZm9yIGZpZWxkX2FuZF90eXBlIGluIHNjaGVtYV9saXN0OgogICAgICBmaWVsZF9uYW1lLCBmaWVsZF90eXBlID0gZmllbGRfYW5kX3R5cGUuc3BsaXQoJzonKQogICAgICBmaWVsZF9zY2hlbWEgPSBiaWdxdWVyeS5UYWJsZUZpZWxkU2NoZW1hKCkKICAgICAgZmllbGRfc2NoZW1hLm5hbWUgPSBmaWVsZF9uYW1lCiAgICAgIGZpZWxkX3NjaGVtYS50eXBlID0gZmllbGRfdHlwZQogICAgICBmaWVsZF9zY2hlbWEubW9kZSA9ICdOVUxMQUJMRScKICAgICAgdGFibGVfc2NoZW1hLmZpZWxkcy5hcHBlbmQoZmllbGRfc2NoZW1hKQogICAgcmV0dXJuIHRhYmxlX3NjaGVtYQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIHRhYmxlX3NjaGVtYV90b19kaWN0KHRhYmxlX3NjaGVtYSk6CiAgICAiIiJDcmVhdGUgYSBkaWN0aW9uYXJ5IHJlcHJlc2VudGF0aW9uIG9mIHRhYmxlIHNjaGVtYSBmb3Igc2VyaWFsaXphdGlvbgogICAgIiIiCiAgICBkZWYgZ2V0X3RhYmxlX2ZpZWxkKGZpZWxkKToKICAgICAgIiIiQ3JlYXRlIGEgZGljdGlvbmFyeSByZXByZXNlbnRhdGlvbiBvZiBhIHRhYmxlIGZpZWxkCiAgICAgICIiIgogICAgICByZXN1bHQgPSB7fQogICAgICByZXN1bHRbJ25hbWUnXSA9IGZpZWxkLm5hbWUKICAgICAgcmVzdWx0Wyd0eXBlJ10gPSBmaWVsZC50eXBlCiAgICAgIHJlc3VsdFsnbW9kZSddID0gZ2V0YXR0cihmaWVsZCwgJ21vZGUnLCAnTlVMTEFCTEUnKQogICAgICBpZiBoYXNhdHRyKGZpZWxkLCAnZGVzY3JpcHRpb24nKSBhbmQgZmllbGQuZGVzY3JpcHRpb24gaXMgbm90IE5vbmU6CiAgICAgICAgcmVzdWx0WydkZXNjcmlwdGlvbiddID0gZmllbGQuZGVzY3JpcHRpb24KICAgICAgaWYgaGFzYXR0cihmaWVsZCwgJ2ZpZWxkcycpIGFuZCBmaWVsZC5maWVsZHM6CiAgICAgICAgcmVzdWx0WydmaWVsZHMnXSA9IFtnZXRfdGFibGVfZmllbGQoZikgZm9yIGYgaW4gZmllbGQuZmllbGRzXQogICAgICByZXR1cm4gcmVzdWx0CgogICAgaWYgbm90IGlzaW5zdGFuY2UodGFibGVfc2NoZW1hLCBiaWdxdWVyeS5UYWJsZVNjaGVtYSk6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlRhYmxlIHNjaGVtYSBtdXN0IGJlIG9mIHRoZSB0eXBlIGJpZ3F1ZXJ5LlRhYmxlU2NoZW1hIikKICAgIHNjaGVtYSA9IHsnZmllbGRzJzogW119CiAgICBmb3IgZmllbGQgaW4gdGFibGVfc2NoZW1hLmZpZWxkczoKICAgICAgc2NoZW1hWydmaWVsZHMnXS5hcHBlbmQoZ2V0X3RhYmxlX2ZpZWxkKGZpZWxkKSkKICAgIHJldHVybiBzY2hlbWEKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBnZXRfZGljdF90YWJsZV9zY2hlbWEoc2NoZW1hKToKICAgICIiIlRyYW5zZm9ybSB0aGUgdGFibGUgc2NoZW1hIGludG8gYSBkaWN0aW9uYXJ5IGluc3RhbmNlLgoKICAgIEFyZ3M6CiAgICAgIHNjaGVtYSAofmFwYWNoZV9iZWFtLmlvLmdjcC5pbnRlcm5hbC5jbGllbnRzLmJpZ3F1ZXJ5LlwKYmlncXVlcnlfdjJfbWVzc2FnZXMuVGFibGVTY2hlbWEpOgogICAgICAgIFRoZSBzY2hlbWEgdG8gYmUgdXNlZCBpZiB0aGUgQmlnUXVlcnkgdGFibGUgdG8gd3JpdGUgaGFzIHRvIGJlIGNyZWF0ZWQuCiAgICAgICAgVGhpcyBjYW4gZWl0aGVyIGJlIGEgZGljdCBvciBzdHJpbmcgb3IgaW4gdGhlIFRhYmxlU2NoZW1hIGZvcm1hdC4KCiAgICBSZXR1cm5zOgogICAgICBEaWN0W3N0ciwgQW55XTogVGhlIHNjaGVtYSB0byBiZSB1c2VkIGlmIHRoZSBCaWdRdWVyeSB0YWJsZSB0byB3cml0ZSBoYXMKICAgICAgdG8gYmUgY3JlYXRlZCBidXQgaW4gdGhlIGRpY3Rpb25hcnkgZm9ybWF0LgogICAgIiIiCiAgICBpZiBpc2luc3RhbmNlKHNjaGVtYSwgZGljdCk6CiAgICAgIHJldHVybiBzY2hlbWEKICAgIGVsaWYgc2NoZW1hIGlzIE5vbmU6CiAgICAgIHJldHVybiBzY2hlbWEKICAgIGVsaWYgaXNpbnN0YW5jZShzY2hlbWEsIChzdHIsIHVuaWNvZGUpKToKICAgICAgdGFibGVfc2NoZW1hID0gV3JpdGVUb0JpZ1F1ZXJ5LmdldF90YWJsZV9zY2hlbWFfZnJvbV9zdHJpbmcoc2NoZW1hKQogICAgICByZXR1cm4gV3JpdGVUb0JpZ1F1ZXJ5LnRhYmxlX3NjaGVtYV90b19kaWN0KHRhYmxlX3NjaGVtYSkKICAgIGVsaWYgaXNpbnN0YW5jZShzY2hlbWEsIGJpZ3F1ZXJ5LlRhYmxlU2NoZW1hKToKICAgICAgcmV0dXJuIFdyaXRlVG9CaWdRdWVyeS50YWJsZV9zY2hlbWFfdG9fZGljdChzY2hlbWEpCiAgICBlbHNlOgogICAgICByYWlzZSBUeXBlRXJyb3IoJ1VuZXhwZWN0ZWQgc2NoZW1hIGFyZ3VtZW50OiAlcy4nICUgc2NoZW1hKQoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgIGlmIHNlbGYudGFibGVfcmVmZXJlbmNlLnByb2plY3RJZCBpcyBOb25lOgogICAgICBzZWxmLnRhYmxlX3JlZmVyZW5jZS5wcm9qZWN0SWQgPSBwY29sbC5waXBlbGluZS5vcHRpb25zLnZpZXdfYXMoCiAgICAgICAgICBHb29nbGVDbG91ZE9wdGlvbnMpLnByb2plY3QKICAgIGJpZ3F1ZXJ5X3dyaXRlX2ZuID0gQmlnUXVlcnlXcml0ZUZuKAogICAgICAgIHRhYmxlX2lkPXNlbGYudGFibGVfcmVmZXJlbmNlLnRhYmxlSWQsCiAgICAgICAgZGF0YXNldF9pZD1zZWxmLnRhYmxlX3JlZmVyZW5jZS5kYXRhc2V0SWQsCiAgICAgICAgcHJvamVjdF9pZD1zZWxmLnRhYmxlX3JlZmVyZW5jZS5wcm9qZWN0SWQsCiAgICAgICAgYmF0Y2hfc2l6ZT1zZWxmLmJhdGNoX3NpemUsCiAgICAgICAgc2NoZW1hPXNlbGYuZ2V0X2RpY3RfdGFibGVfc2NoZW1hKHNlbGYuc2NoZW1hKSwKICAgICAgICBjcmVhdGVfZGlzcG9zaXRpb249c2VsZi5jcmVhdGVfZGlzcG9zaXRpb24sCiAgICAgICAgd3JpdGVfZGlzcG9zaXRpb249c2VsZi53cml0ZV9kaXNwb3NpdGlvbiwKICAgICAgICB0ZXN0X2NsaWVudD1zZWxmLnRlc3RfY2xpZW50KQogICAgcmV0dXJuIHBjb2xsIHwgJ1dyaXRlVG9CaWdRdWVyeScgPj4gUGFyRG8oYmlncXVlcnlfd3JpdGVfZm4pCgogIGRlZiBkaXNwbGF5X2RhdGEoc2VsZik6CiAgICByZXMgPSB7fQogICAgaWYgc2VsZi50YWJsZV9yZWZlcmVuY2UgaXMgbm90IE5vbmU6CiAgICAgIHRhYmxlU3BlYyA9ICd7fS57fScuZm9ybWF0KHNlbGYudGFibGVfcmVmZXJlbmNlLmRhdGFzZXRJZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50YWJsZV9yZWZlcmVuY2UudGFibGVJZCkKICAgICAgaWYgc2VsZi50YWJsZV9yZWZlcmVuY2UucHJvamVjdElkIGlzIG5vdCBOb25lOgogICAgICAgIHRhYmxlU3BlYyA9ICd7fTp7fScuZm9ybWF0KHNlbGYudGFibGVfcmVmZXJlbmNlLnByb2plY3RJZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZVNwZWMpCiAgICAgIHJlc1sndGFibGUnXSA9IERpc3BsYXlEYXRhSXRlbSh0YWJsZVNwZWMsIGxhYmVsPSdUYWJsZScpCiAgICByZXR1cm4gcmVzCn1y1YIAAChYEwAAAEJpZ1F1ZXJ5U2luay53cml0ZXJYAwAAAGRlZk1tAk1xAodYGQAAAFJvd0FzRGljdEpzb25Db2Rlci5kZWNvZGVYAwAAAGRlZkvFS8eHWCMAAABCaWdRdWVyeURpc3Bvc2l0aW9uLnZhbGlkYXRlX2NyZWF0ZVgDAAAAZGVmTR8BTScBh1giAAAAQmlnUXVlcnlEaXNwb3NpdGlvbi52YWxpZGF0ZV93cml0ZVgDAAAAZGVmTSgBTTEBh1gWAAAAX3BhcnNlX3RhYmxlX3JlZmVyZW5jZVgDAAAAZGVmTTMBTWQBh1gVAAAAQmlnUXVlcnlTaW5rLl9faW5pdF9fWAMAAABkZWZN4AFNRgKHWCIAAABCaWdRdWVyeVdyYXBwZXIuZ2V0X3RhYmxlX2xvY2F0aW9uWAMAAABkZWZN9wNN/QOHWBgAAABUYWJsZVJvd0pzb25Db2Rlci5lbmNvZGVYAwAAAGRlZkvbS+mHWBgAAABXcml0ZVRvQmlnUXVlcnkuX19pbml0X19YAwAAAGRlZk1zBU2tBYdYHAAAAHBhcnNlX3RhYmxlX3NjaGVtYV9mcm9tX2pzb25YAwAAAGRlZkvxTRQBh1gjAAAAQmlnUXVlcnlXcmFwcGVyLmNvbnZlcnRfcm93X3RvX2RpY3RYAwAAAGRlZk3pBE0EBYdYFgAAAFdyaXRlVG9CaWdRdWVyeS5leHBhbmRYAwAAAGRlZk38BU0KBodYHQAAAEJpZ1F1ZXJ5V3JhcHBlci5fY3JlYXRlX3RhYmxlWAMAAABkZWZNpwNNsgOHWBgAAABCaWdRdWVyeVJlYWRlci5fX2VudGVyX19YAwAAAGRlZk3AAk3FAodYNAAAAFdyaXRlVG9CaWdRdWVyeS50YWJsZV9zY2hlbWFfdG9fZGljdC5nZXRfdGFibGVfZmllbGRYAwAAAGRlZk3OBU3aBYdYHAAAAFdyaXRlVG9CaWdRdWVyeS5kaXNwbGF5X2RhdGFYAwAAAGRlZk0LBk0VBodYIgAAAEJpZ1F1ZXJ5V3JhcHBlci5nZXRfcXVlcnlfbG9jYXRpb25YAwAAAGRlZk08A01qA4dYGAAAAEJpZ1F1ZXJ5V3JhcHBlci5fX2luaXRfX1gDAAAAZGVmTR0DTSYDh1gMAAAAQmlnUXVlcnlTaW5rWAUAAABjbGFzc03XAU1xAodYGgAAAEJpZ1F1ZXJ5V3JhcHBlci5fZ2V0X3RhYmxlWAMAAABkZWZNnQNNpgOHWA4AAABCaWdRdWVyeVNvdXJjZVgFAAAAY2xhc3NNagFN1QGHWCUAAABCaWdRdWVyeVdyYXBwZXIuZ2V0X29yX2NyZWF0ZV9kYXRhc2V0WAMAAABkZWZNswNNygOHWA4AAABCaWdRdWVyeVJlYWRlclgFAAAAY2xhc3NNdwJN1QKHWCMAAABCaWdRdWVyeVdyYXBwZXIuZ2V0X29yX2NyZWF0ZV90YWJsZVgDAAAAZGVmTScETXgEh1gPAAAAZGVmYXVsdF9lbmNvZGVyWAMAAABkZWZLrEuxh1giAAAAQmlnUXVlcnlXcmFwcGVyLl9nZXRfcXVlcnlfcmVzdWx0c1gDAAAAZGVmTYEDTYsDh1ggAAAAQmlnUXVlcnlXcmFwcGVyLl9zdGFydF9xdWVyeV9qb2JYAwAAAGRlZk1rA02AA4dYGQAAAEJpZ1F1ZXJ5V3JhcHBlci5ydW5fcXVlcnlYAwAAAGRlZk15BE2TBIdYHQAAAEJpZ1F1ZXJ5V3JhcHBlci5fZGVsZXRlX3RhYmxlWAMAAABkZWZN1gNN5QOHWBcAAABCaWdRdWVyeVdyaXRlci5fX2V4aXRfX1gDAAAAZGVmTQQDTQYDh1gqAAAAQmlnUXVlcnlXcmFwcGVyLmNsZWFuX3VwX3RlbXBvcmFyeV9kYXRhc2V0WAMAAABkZWZNFgRNJgSHWBQAAABCaWdRdWVyeVdyaXRlci5Xcml0ZVgDAAAAZGVmTQcDTQsDh1gVAAAAQmlnUXVlcnlTb3VyY2UuZm9ybWF0WAMAAABkZWZNygFNzgGHWCAAAABCaWdRdWVyeVdyaXRlRm4uZ2V0X3RhYmxlX3NjaGVtYVgDAAAAZGVmTT0FTU8Fh1gYAAAAVGFibGVSb3dKc29uQ29kZXIuZGVjb2RlWAMAAABkZWZL6kvvh1gcAAAAQmlnUXVlcnlXcml0ZUZuLmRpc3BsYXlfZGF0YVgDAAAAZGVmTTYFTTwFh1gfAAAAQmlnUXVlcnlXcmFwcGVyLl9nZXRfdGVtcF90YWJsZVgDAAAAZGVmTTYDTTsDh1gkAAAAV3JpdGVUb0JpZ1F1ZXJ5LnRhYmxlX3NjaGVtYV90b19kaWN0WAMAAABkZWZNygVN4QWHWCEAAABCaWdRdWVyeVdyaXRlci5fZmx1c2hfcm93c19idWZmZXJYAwAAAGRlZk3vAk38AodYHwAAAEJpZ1F1ZXJ5V3JhcHBlci5faXNfdGFibGVfZW1wdHlYAwAAAGRlZk3LA03VA4dYHQAAAEJpZ1F1ZXJ5V3JhcHBlci51bmlxdWVfcm93X2lkWAMAAABkZWZNJwNNNQOHWBMAAABCaWdRdWVyeVNpbmsuZm9ybWF0WAMAAABkZWZNaAJNbAKHWBwAAABCaWdRdWVyeVdyaXRlRm4uc3RhcnRfYnVuZGxlWAMAAABkZWZNUAVNWAWHWBsAAABCaWdRdWVyeVNvdXJjZS5kaXNwbGF5X2RhdGFYAwAAAGRlZk25AU3JAYdYFwAAAEJpZ1F1ZXJ5U291cmNlLl9faW5pdF9fWAMAAABkZWZNbQFNuAGHWBgAAABCaWdRdWVyeVdyaXRlci5fX2VudGVyX19YAwAAAGRlZk39Ak0DA4dYGQAAAFJvd0FzRGljdEpzb25Db2Rlci5lbmNvZGVYAwAAAGRlZku6S8SHWCsAAABCaWdRdWVyeVdyYXBwZXIuX2NvbnZlcnRfY2VsbF92YWx1ZV90b19kaWN0WAMAAABkZWZNvQRN6ASHWBcAAABCaWdRdWVyeVJlYWRlci5fX2l0ZXJfX1gDAAAAZGVmTckCTdUCh1gYAAAAQmlnUXVlcnlXcml0ZUZuLl9faW5pdF9fWAMAAABkZWZNCgVNNQWHWBIAAABSb3dBc0RpY3RKc29uQ29kZXJYBQAAAGNsYXNzS7NLx4dYMAAAAHBhcnNlX3RhYmxlX3NjaGVtYV9mcm9tX2pzb24uX3BhcnNlX3NjaGVtYV9maWVsZFgDAAAAZGVmS/xNEQGHWA8AAABCaWdRdWVyeVdyYXBwZXJYBQAAAGNsYXNzTREDTQQFh1gdAAAAQmlnUXVlcnlXcml0ZUZuLmZpbmlzaF9idW5kbGVYAwAAAGRlZk1eBU1iBYdYKAAAAEJpZ1F1ZXJ5V3JhcHBlci5jcmVhdGVfdGVtcG9yYXJ5X2RhdGFzZXRYAwAAAGRlZk3+A00VBIdYJQAAAFdyaXRlVG9CaWdRdWVyeS5nZXRfZGljdF90YWJsZV9zY2hlbWFYAwAAAGRlZk3iBU37BYdYMQAAAEJpZ1F1ZXJ5U2luay5zY2hlbWFfYXNfanNvbi5zY2hlbWFfbGlzdF9hc19vYmplY3RYAwAAAGRlZk1YAk1lAodYFwAAAEJpZ1F1ZXJ5UmVhZGVyLl9fZXhpdF9fWAMAAABkZWZNxgJNyAKHWBUAAABCaWdRdWVyeVNvdXJjZS5yZWFkZXJYAwAAAGRlZk3PAU3VAYdYGwAAAEJpZ1F1ZXJ5V3JhcHBlci5pbnNlcnRfcm93c1gDAAAAZGVmTZQETbwEh1gsAAAAV3JpdGVUb0JpZ1F1ZXJ5LmdldF90YWJsZV9zY2hlbWFfZnJvbV9zdHJpbmdYAwAAAGRlZk2uBU3JBYdYHwAAAEJpZ1F1ZXJ5V3JhcHBlci5fZGVsZXRlX2RhdGFzZXRYAwAAAGRlZk3mA032A4dYFwAAAEJpZ1F1ZXJ5V3JpdGVyLl9faW5pdF9fWAMAAABkZWZN2gJN7gKHWCMAAABCaWdRdWVyeVJlYWRlci5fZ2V0X3NvdXJjZV9sb2NhdGlvblgDAAAAZGVmTaYCTb8Ch1gcAAAAQmlnUXVlcnlXcml0ZUZuLl9mbHVzaF9iYXRjaFgDAAAAZGVmTWMFTW8Fh1gRAAAAVGFibGVSb3dKc29uQ29kZXJYBQAAAGNsYXNzS8lL74dYGwAAAEJpZ1F1ZXJ5U2luay5zY2hlbWFfYXNfanNvblgDAAAAZGVmTVUCTWcCh1gPAAAAV3JpdGVUb0JpZ1F1ZXJ5WAUAAABjbGFzc01xBU0VBodYEwAAAEJpZ1F1ZXJ5RGlzcG9zaXRpb25YBQAAAGNsYXNzTRYBTTEBh1gaAAAAVGFibGVSb3dKc29uQ29kZXIuX19pbml0X19YAwAAAGRlZkvRS9qHWBcAAABCaWdRdWVyeVJlYWRlci5fX2luaXRfX1gDAAAAZGVmTXoCTaUCh1gOAAAAQmlnUXVlcnlXcml0ZXJYBQAAAGNsYXNzTdcCTQsDh1ggAAAAQmlnUXVlcnlXcmFwcGVyLl9pbnNlcnRfYWxsX3Jvd3NYAwAAAGRlZk2MA02cA4dYDwAAAEJpZ1F1ZXJ5V3JpdGVGblgFAAAAY2xhc3NNBgVNbwWHWBcAAABCaWdRdWVyeVdyaXRlRm4ucHJvY2Vzc1gDAAAAZGVmTVkFTV0Fh1gZAAAAQmlnUXVlcnlTaW5rLmRpc3BsYXlfZGF0YVgDAAAAZGVmTUcCTVQCh3V9ctaCAAAoWBMAAABCaWdRdWVyeVNpbmsud3JpdGVyarNaAABYFQAAAEJpZ1F1ZXJ5U291cmNlLnJlYWRlcmqzWgAAWCMAAABCaWdRdWVyeURpc3Bvc2l0aW9uLnZhbGlkYXRlX2NyZWF0ZWqzWgAAWBEAAABUYWJsZVJvd0pzb25Db2RlcmqzWgAAWCIAAABCaWdRdWVyeURpc3Bvc2l0aW9uLnZhbGlkYXRlX3dyaXRlarNaAABYLAAAAFdyaXRlVG9CaWdRdWVyeS5nZXRfdGFibGVfc2NoZW1hX2Zyb21fc3RyaW5narNaAABYGwAAAEJpZ1F1ZXJ5U291cmNlLmRpc3BsYXlfZGF0YWqzWgAAWCQAAABXcml0ZVRvQmlnUXVlcnkudGFibGVfc2NoZW1hX3RvX2RpY3Rqs1oAAFgYAAAAVGFibGVSb3dKc29uQ29kZXIuZW5jb2RlarNaAABYGQAAAEJpZ1F1ZXJ5U2luay5kaXNwbGF5X2RhdGFqs1oAAFgbAAAAQmlnUXVlcnlTaW5rLnNjaGVtYV9hc19qc29uarNaAABYDgAAAEJpZ1F1ZXJ5U291cmNlarNaAABYEwAAAEJpZ1F1ZXJ5RGlzcG9zaXRpb25qs1oAAFgWAAAAV3JpdGVUb0JpZ1F1ZXJ5LmV4cGFuZGqzWgAAWA8AAABXcml0ZVRvQmlnUXVlcnlqs1oAAFgMAAAAQmlnUXVlcnlTaW5rarNaAABYHAAAAFdyaXRlVG9CaWdRdWVyeS5kaXNwbGF5X2RhdGFqs1oAAFgYAAAAVGFibGVSb3dKc29uQ29kZXIuZGVjb2RlarNaAABYJQAAAFdyaXRlVG9CaWdRdWVyeS5nZXRfZGljdF90YWJsZV9zY2hlbWFqs1oAAHVqfWkAAFgbAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5cteCAACFgXLYggAAfXLZggAAYnRVL2FwYWNoZV9iZWFtLnR5cGVoaW50cy5uYXRpdmVfdHlwZV9jb21wYXRpYmlsaXR5ctqCAAAoWOMUAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIk1vZHVsZSB0byBjb252ZXJ0IFB5dGhvbidzIG5hdGl2ZSB0eXBpbmcgdHlwZXMgdG8gQmVhbSB0eXBlcy4iIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgY29sbGVjdGlvbnMKaW1wb3J0IHR5cGluZwpmcm9tIGJ1aWx0aW5zIGltcG9ydCBuZXh0CmZyb20gYnVpbHRpbnMgaW1wb3J0IHJhbmdlCgpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cyBpbXBvcnQgdHlwZWhpbnRzCgojIERlc2NyaWJlcyBhbiBlbnRyeSBpbiB0aGUgdHlwZSBtYXAgaW4gY29udmVydF90b19iZWFtX3R5cGUuCiMgbWF0Y2ggaXMgYSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgdXNlciB0eXBlIGFuZCByZXR1cm5zIHdoZXRoZXIgdGhlIGNvbnZlcnNpb24KIyBzaG91bGQgdHJpZ2dlci4KIyBhcml0eSBpcyB0aGUgZXhwZWN0ZWQgYXJpdHkgb2YgdGhlIHVzZXIgdHlwZS4gLTEgbWVhbnMgaXQncyB2YXJpYWRpYy4KIyBiZWFtX3R5cGUgaXMgdGhlIEJlYW0gdHlwZSB0aGUgdXNlciB0eXBlIHNob3VsZCBtYXAgdG8uCl9UeXBlTWFwRW50cnkgPSBjb2xsZWN0aW9ucy5uYW1lZHR1cGxlKAogICAgJ19UeXBlTWFwRW50cnknLCBbJ21hdGNoJywgJ2FyaXR5JywgJ2JlYW1fdHlwZSddKQoKCmRlZiBfZ2V0X2FyZyh0eXAsIGluZGV4KToKICAiIiJSZXR1cm5zIHRoZSBpbmRleC10aCBhcmd1bWVudCB0byB0aGUgZ2l2ZW4gdHlwZS4iIiIKICByZXR1cm4gdHlwLl9fYXJnc19fW2luZGV4XQoKCmRlZiBfbGVuX2FyZyh0eXApOgogICIiIlJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgYXJndW1lbnRzIHRvIHRoZSBnaXZlbiB0eXBlLiIiIgogIHRyeToKICAgIHJldHVybiBsZW4odHlwLl9fYXJnc19fKQogIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICMgRm9yIEFueSB0eXBlLCB3aGljaCB0YWtlcyBubyBhcmd1bWVudHMuCiAgICByZXR1cm4gMAoKCmRlZiBfc2FmZV9pc3N1YmNsYXNzKGRlcml2ZWQsIHBhcmVudCk6CiAgIiIiTGlrZSBpc3N1YmNsYXNzLCBidXQgc3dhbGxvd3MgVHlwZUVycm9ycy4KCiAgVGhpcyBpcyB1c2VmdWwgZm9yIHdoZW4gZWl0aGVyIHBhcmFtZXRlciBtaWdodCBub3QgYWN0dWFsbHkgYmUgYSBjbGFzcywKICBlLmcuIHR5cGluZy5VbmlvbiBpc24ndCBhY3R1YWxseSBhIGNsYXNzLgoKICBBcmdzOgogICAgZGVyaXZlZDogQXMgaW4gaXNzdWJjbGFzcy4KICAgIHBhcmVudDogQXMgaW4gaXNzdWJjbGFzcy4KCiAgUmV0dXJuczoKICAgIGlzc3ViY2xhc3MoZGVyaXZlZCwgcGFyZW50KSwgb3IgRmFsc2UgaWYgYSBUeXBlRXJyb3Igd2FzIHJhaXNlZC4KICAiIiIKICB0cnk6CiAgICByZXR1cm4gaXNzdWJjbGFzcyhkZXJpdmVkLCBwYXJlbnQpCiAgZXhjZXB0IFR5cGVFcnJvcjoKICAgIHJldHVybiBGYWxzZQoKCmRlZiBfbWF0Y2hfaXNzdWJjbGFzcyhtYXRjaF9hZ2FpbnN0KToKICByZXR1cm4gbGFtYmRhIHVzZXJfdHlwZTogX3NhZmVfaXNzdWJjbGFzcyh1c2VyX3R5cGUsIG1hdGNoX2FnYWluc3QpCgoKZGVmIF9tYXRjaF9zYW1lX3R5cGUobWF0Y2hfYWdhaW5zdCk6CiAgIyBGb3IgVW5pb24gdHlwZXMuIFRoZXkgY2FuJ3QgYmUgY29tcGFyZWQgd2l0aCBpc2luc3RhbmNlIGVpdGhlciwgc28gd2UKICAjIGhhdmUgdG8gY29tcGFyZSB0aGVpciB0eXBlcyBkaXJlY3RseS4KICByZXR1cm4gbGFtYmRhIHVzZXJfdHlwZTogdHlwZSh1c2VyX3R5cGUpID09IHR5cGUobWF0Y2hfYWdhaW5zdCkKCgpkZWYgX21hdGNoX2lzX25hbWVkX3R1cGxlKHVzZXJfdHlwZSk6CiAgcmV0dXJuIChfc2FmZV9pc3N1YmNsYXNzKHVzZXJfdHlwZSwgdHlwaW5nLlR1cGxlKSBhbmQKICAgICAgICAgIGhhc2F0dHIodXNlcl90eXBlLCAnX2ZpZWxkX3R5cGVzJykpCgoKZGVmIGNvbnZlcnRfdG9fYmVhbV90eXBlKHR5cCk6CiAgIiIiQ29udmVydCBhIGdpdmVuIHR5cGluZyB0eXBlIHRvIGEgQmVhbSB0eXBlLgoKICBBcmdzOgogICAgdHlwICh0eXBlKTogdHlwaW5nIHR5cGUuCgogIFJldHVybnM6CiAgICB0eXBlOiBUaGUgZ2l2ZW4gdHlwZSBjb252ZXJ0ZWQgdG8gYSBCZWFtIHR5cGUgYXMgZmFyIGFzIHdlIGNhbiBkbyB0aGUKICAgIGNvbnZlcnNpb24uCgogIFJhaXNlczoKICAgIH5leGNlcHRpb25zLlZhbHVlRXJyb3I6IFRoZSB0eXBlIHdhcyBtYWxmb3JtZWQuCiAgIiIiCgogIHR5cGVfbWFwID0gWwogICAgICBfVHlwZU1hcEVudHJ5KAogICAgICAgICAgbWF0Y2g9X21hdGNoX3NhbWVfdHlwZSh0eXBpbmcuQW55KSwKICAgICAgICAgIGFyaXR5PTAsCiAgICAgICAgICBiZWFtX3R5cGU9dHlwZWhpbnRzLkFueSksCiAgICAgIF9UeXBlTWFwRW50cnkoCiAgICAgICAgICBtYXRjaD1fbWF0Y2hfaXNzdWJjbGFzcyh0eXBpbmcuRGljdCksCiAgICAgICAgICBhcml0eT0yLAogICAgICAgICAgYmVhbV90eXBlPXR5cGVoaW50cy5EaWN0KSwKICAgICAgX1R5cGVNYXBFbnRyeSgKICAgICAgICAgIG1hdGNoPV9tYXRjaF9pc3N1YmNsYXNzKHR5cGluZy5MaXN0KSwKICAgICAgICAgIGFyaXR5PTEsCiAgICAgICAgICBiZWFtX3R5cGU9dHlwZWhpbnRzLkxpc3QpLAogICAgICBfVHlwZU1hcEVudHJ5KAogICAgICAgICAgbWF0Y2g9X21hdGNoX2lzc3ViY2xhc3ModHlwaW5nLlNldCksCiAgICAgICAgICBhcml0eT0xLAogICAgICAgICAgYmVhbV90eXBlPXR5cGVoaW50cy5TZXQpLAogICAgICAjIE5hbWVkVHVwbGUgaXMgYSBzdWJjbGFzcyBvZiBUdXBsZSwgYnV0IGl0IG5lZWRzIHNwZWNpYWwgaGFuZGxpbmcuCiAgICAgICMgV2UganVzdCBjb252ZXJ0IGl0IHRvIEFueSBmb3Igbm93LgogICAgICAjIFRoaXMgTVVTVCBhcHBlYXIgYmVmb3JlIHRoZSBlbnRyeSBmb3IgdGhlIG5vcm1hbCBUdXBsZS4KICAgICAgX1R5cGVNYXBFbnRyeSgKICAgICAgICAgIG1hdGNoPV9tYXRjaF9pc19uYW1lZF90dXBsZSwgYXJpdHk9MCwgYmVhbV90eXBlPXR5cGVoaW50cy5BbnkpLAogICAgICBfVHlwZU1hcEVudHJ5KAogICAgICAgICAgbWF0Y2g9X21hdGNoX2lzc3ViY2xhc3ModHlwaW5nLlR1cGxlKSwKICAgICAgICAgIGFyaXR5PS0xLAogICAgICAgICAgYmVhbV90eXBlPXR5cGVoaW50cy5UdXBsZSksCiAgICAgIF9UeXBlTWFwRW50cnkoCiAgICAgICAgICBtYXRjaD1fbWF0Y2hfc2FtZV90eXBlKHR5cGluZy5VbmlvbiksCiAgICAgICAgICBhcml0eT0tMSwKICAgICAgICAgIGJlYW1fdHlwZT10eXBlaGludHMuVW5pb24pCiAgXQoKICAjIEZpbmQgdGhlIGZpcnN0IG1hdGNoaW5nIGVudHJ5LgogIG1hdGNoZWRfZW50cnkgPSBuZXh0KChlbnRyeSBmb3IgZW50cnkgaW4gdHlwZV9tYXAgaWYgZW50cnkubWF0Y2godHlwKSksIE5vbmUpCiAgaWYgbm90IG1hdGNoZWRfZW50cnk6CiAgICAjIE5vIG1hdGNoOiByZXR1cm4gb3JpZ2luYWwgdHlwZS4KICAgIHJldHVybiB0eXAKCiAgaWYgbWF0Y2hlZF9lbnRyeS5hcml0eSA9PSAtMToKICAgIGFyaXR5ID0gX2xlbl9hcmcodHlwKQogIGVsc2U6CiAgICBhcml0eSA9IG1hdGNoZWRfZW50cnkuYXJpdHkKICAgIGlmIF9sZW5fYXJnKHR5cCkgIT0gYXJpdHk6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2V4cGVjdGluZyB0eXBlICVzIHRvIGhhdmUgYXJpdHkgJWQsIGhhZCBhcml0eSAlZCAnCiAgICAgICAgICAgICAgICAgICAgICAgJ2luc3RlYWQnICUgKHN0cih0eXApLCBhcml0eSwgX2xlbl9hcmcodHlwKSkpCiAgdHlwcyA9IFtjb252ZXJ0X3RvX2JlYW1fdHlwZShfZ2V0X2FyZyh0eXAsIGkpKSBmb3IgaSBpbiByYW5nZShhcml0eSldCiAgaWYgYXJpdHkgPT0gMDoKICAgICMgTnVsbGFyeSB0eXBlcyAoZS5nLiBBbnkpIGRvbid0IGFjY2VwdCBlbXB0eSB0dXBsZXMgYXMgYXJndW1lbnRzLgogICAgcmV0dXJuIG1hdGNoZWRfZW50cnkuYmVhbV90eXBlCiAgZWxpZiBhcml0eSA9PSAxOgogICAgIyBVbmFyeSB0eXBlcyAoZS5nLiBTZXQpIGRvbid0IGFjY2VwdCAxLXR1cGxlcyBhcyBhcmd1bWVudHMKICAgIHJldHVybiBtYXRjaGVkX2VudHJ5LmJlYW1fdHlwZVt0eXBzWzBdXQogIGVsc2U6CiAgICByZXR1cm4gbWF0Y2hlZF9lbnRyeS5iZWFtX3R5cGVbdHVwbGUodHlwcyldCgoKZGVmIGNvbnZlcnRfdG9fYmVhbV90eXBlcyhhcmdzKToKICAiIiJDb252ZXJ0IHRoZSBnaXZlbiBsaXN0IG9yIGRpY3Rpb25hcnkgb2YgYXJncyB0byBCZWFtIHR5cGVzLgoKICBBcmdzOgogICAgYXJnczogRWl0aGVyIGFuIGl0ZXJhYmxlIG9mIHR5cGVzLCBvciBhIGRpY3Rpb25hcnkgd2hlcmUgdGhlIHZhbHVlcyBhcmUKICAgIHR5cGVzLgoKICBSZXR1cm5zOgogICAgSWYgZ2l2ZW4gYW4gaXRlcmFibGUsIGEgbGlzdCBvZiBjb252ZXJ0ZWQgdHlwZXMuIElmIGdpdmVuIGEgZGljdGlvbmFyeSwKICAgIGEgZGljdGlvbmFyeSB3aXRoIHRoZSBzYW1lIGtleXMsIGFuZCB2YWx1ZXMgd2hpY2ggaGF2ZSBiZWVuIGNvbnZlcnRlZC4KICAiIiIKICBpZiBpc2luc3RhbmNlKGFyZ3MsIGRpY3QpOgogICAgcmV0dXJuIHtrOiBjb252ZXJ0X3RvX2JlYW1fdHlwZSh2KSBmb3IgaywgdiBpbiBhcmdzLml0ZW1zKCl9CiAgZWxzZToKICAgIHJldHVybiBbY29udmVydF90b19iZWFtX3R5cGUodikgZm9yIHYgaW4gYXJnc10KfXLbggAAKFgIAAAAX2dldF9hcmdYAwAAAGRlZksmSymHWBEAAABfbWF0Y2hfaXNzdWJjbGFzc1gDAAAAZGVmS0dLSYdYFAAAAGNvbnZlcnRfdG9fYmVhbV90eXBlWAMAAABkZWZLVkuah1gQAAAAX3NhZmVfaXNzdWJjbGFzc1gDAAAAZGVmSzRLRYdYFQAAAGNvbnZlcnRfdG9fYmVhbV90eXBlc1gDAAAAZGVmS5xLq4dYFQAAAF9tYXRjaF9pc19uYW1lZF90dXBsZVgDAAAAZGVmS1FLVIdYCAAAAF9sZW5fYXJnWAMAAABkZWZLK0syh1gQAAAAX21hdGNoX3NhbWVfdHlwZVgDAAAAZGVmS0tLT4d1fXLcggAAKFgUAAAAY29udmVydF90b19iZWFtX3R5cGVqD2UAAFgVAAAAY29udmVydF90b19iZWFtX3R5cGVzag9lAAB1an1pAABYLwAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5uYXRpdmVfdHlwZV9jb21wYXRpYmlsaXR5ct2CAACFgXLeggAAfXLfggAAYnRy4IIAAFUfYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50aW1ldXRpbHLhggAAKFjIEQAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJUaW1lc3RhbXAgdXRpbGl0aWVzLiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmZyb20gYWJjIGltcG9ydCBBQkNNZXRhCmZyb20gYWJjIGltcG9ydCBhYnN0cmFjdG1ldGhvZApmcm9tIGJ1aWx0aW5zIGltcG9ydCBvYmplY3QKCmZyb20gZnV0dXJlLnV0aWxzIGltcG9ydCB3aXRoX21ldGFjbGFzcwoKZnJvbSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkgaW1wb3J0IGJlYW1fcnVubmVyX2FwaV9wYjIKCl9fYWxsX18gPSBbCiAgICAnVGltZURvbWFpbicsCiAgICBdCgoKY2xhc3MgVGltZURvbWFpbihvYmplY3QpOgogICIiIlRpbWUgZG9tYWluIGZvciBzdHJlYW1pbmcgdGltZXJzLiIiIgoKICBXQVRFUk1BUksgPSAnV0FURVJNQVJLJwogIFJFQUxfVElNRSA9ICdSRUFMX1RJTUUnCiAgREVQRU5ERU5UX1JFQUxfVElNRSA9ICdERVBFTkRFTlRfUkVBTF9USU1FJwoKICBfUlVOTkVSX0FQSV9NQVBQSU5HID0gewogICAgICBXQVRFUk1BUks6IGJlYW1fcnVubmVyX2FwaV9wYjIuVGltZURvbWFpbi5FVkVOVF9USU1FLAogICAgICBSRUFMX1RJTUU6IGJlYW1fcnVubmVyX2FwaV9wYjIuVGltZURvbWFpbi5QUk9DRVNTSU5HX1RJTUUsCiAgICAgIERFUEVOREVOVF9SRUFMX1RJTUU6CiAgICAgIGJlYW1fcnVubmVyX2FwaV9wYjIuVGltZURvbWFpbi5TWU5DSFJPTklaRURfUFJPQ0VTU0lOR19USU1FLAogIH0KCiAgQHN0YXRpY21ldGhvZAogIGRlZiBmcm9tX3N0cmluZyhkb21haW4pOgogICAgaWYgZG9tYWluIGluIChUaW1lRG9tYWluLldBVEVSTUFSSywKICAgICAgICAgICAgICAgICAgVGltZURvbWFpbi5SRUFMX1RJTUUsCiAgICAgICAgICAgICAgICAgIFRpbWVEb21haW4uREVQRU5ERU5UX1JFQUxfVElNRSk6CiAgICAgIHJldHVybiBkb21haW4KICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1Vua25vd24gdGltZSBkb21haW46ICVzJyAlIGRvbWFpbikKCiAgQHN0YXRpY21ldGhvZAogIGRlZiB0b19ydW5uZXJfYXBpKGRvbWFpbik6CiAgICByZXR1cm4gVGltZURvbWFpbi5fUlVOTkVSX0FQSV9NQVBQSU5HW2RvbWFpbl0KCgpjbGFzcyBUaW1lc3RhbXBDb21iaW5lckltcGwod2l0aF9tZXRhY2xhc3MoQUJDTWV0YSwgb2JqZWN0KSk6CiAgIiIiSW1wbGVtZW50YXRpb24gb2YgVGltZXN0YW1wQ29tYmluZXIuIiIiCgogIEBhYnN0cmFjdG1ldGhvZAogIGRlZiBhc3NpZ25fb3V0cHV0X3RpbWUoc2VsZiwgd2luZG93LCBpbnB1dF90aW1lc3RhbXApOgogICAgcGFzcwoKICBAYWJzdHJhY3RtZXRob2QKICBkZWYgY29tYmluZShzZWxmLCBvdXRwdXRfdGltZXN0YW1wLCBvdGhlcl9vdXRwdXRfdGltZXN0YW1wKToKICAgIHBhc3MKCiAgZGVmIGNvbWJpbmVfYWxsKHNlbGYsIG1lcmdpbmdfdGltZXN0YW1wcyk6CiAgICAiIiJBcHBseSBjb21iaW5lIHRvIGxpc3Qgb2YgdGltZXN0YW1wcy4iIiIKICAgIGNvbWJpbmVkX291dHB1dF90aW1lID0gTm9uZQogICAgZm9yIG91dHB1dF90aW1lIGluIG1lcmdpbmdfdGltZXN0YW1wczoKICAgICAgaWYgY29tYmluZWRfb3V0cHV0X3RpbWUgaXMgTm9uZToKICAgICAgICBjb21iaW5lZF9vdXRwdXRfdGltZSA9IG91dHB1dF90aW1lCiAgICAgIGVsc2U6CiAgICAgICAgY29tYmluZWRfb3V0cHV0X3RpbWUgPSBzZWxmLmNvbWJpbmUoCiAgICAgICAgICAgIGNvbWJpbmVkX291dHB1dF90aW1lLCBvdXRwdXRfdGltZSkKICAgIHJldHVybiBjb21iaW5lZF9vdXRwdXRfdGltZQoKICBkZWYgbWVyZ2Uoc2VsZiwgdW51c2VkX3Jlc3VsdF93aW5kb3csIG1lcmdpbmdfdGltZXN0YW1wcyk6CiAgICAiIiJEZWZhdWx0IHRvIHJldHVybmluZyB0aGUgcmVzdWx0IG9mIGNvbWJpbmVfYWxsLiIiIgogICAgcmV0dXJuIHNlbGYuY29tYmluZV9hbGwobWVyZ2luZ190aW1lc3RhbXBzKQoKCmNsYXNzIERlcGVuZHNPbmx5T25XaW5kb3cod2l0aF9tZXRhY2xhc3MoQUJDTWV0YSwgVGltZXN0YW1wQ29tYmluZXJJbXBsKSk6CiAgIiIiVGltZXN0YW1wQ29tYmluZXJJbXBsIHRoYXQgb25seSBkZXBlbmRzIG9uIHRoZSB3aW5kb3cuIiIiCgogIGRlZiBjb21iaW5lKHNlbGYsIG91dHB1dF90aW1lc3RhbXAsIG90aGVyX291dHB1dF90aW1lc3RhbXApOgogICAgcmV0dXJuIG91dHB1dF90aW1lc3RhbXAKCiAgZGVmIG1lcmdlKHNlbGYsIHJlc3VsdF93aW5kb3csIHVudXNlZF9tZXJnaW5nX3RpbWVzdGFtcHMpOgogICAgIyBTaW5jZSB3ZSBrbm93IHRoYXQgdGhlIHJlc3VsdCBvbmx5IGRlcGVuZHMgb24gdGhlIHdpbmRvdywgd2UgY2FuIGlnbm9yZQogICAgIyB0aGUgZ2l2ZW4gdGltZXN0YW1wcy4KICAgIHJldHVybiBzZWxmLmFzc2lnbl9vdXRwdXRfdGltZShyZXN1bHRfd2luZG93LCBOb25lKQoKCmNsYXNzIE91dHB1dEF0RWFybGllc3RJbnB1dFRpbWVzdGFtcEltcGwoVGltZXN0YW1wQ29tYmluZXJJbXBsKToKICAiIiJUaW1lc3RhbXBDb21iaW5lckltcGwgb3V0cHV0dGluZyBhdCBlYXJsaWVzdCBpbnB1dCB0aW1lc3RhbXAuIiIiCgogIGRlZiBhc3NpZ25fb3V0cHV0X3RpbWUoc2VsZiwgd2luZG93LCBpbnB1dF90aW1lc3RhbXApOgogICAgcmV0dXJuIGlucHV0X3RpbWVzdGFtcAoKICBkZWYgY29tYmluZShzZWxmLCBvdXRwdXRfdGltZXN0YW1wLCBvdGhlcl9vdXRwdXRfdGltZXN0YW1wKToKICAgICIiIkRlZmF1bHQgdG8gcmV0dXJuaW5nIHRoZSBlYXJsaWVyIG9mIHR3byB0aW1lc3RhbXBzLiIiIgogICAgcmV0dXJuIG1pbihvdXRwdXRfdGltZXN0YW1wLCBvdGhlcl9vdXRwdXRfdGltZXN0YW1wKQoKCmNsYXNzIE91dHB1dEF0RWFybGllc3RUcmFuc2Zvcm1lZElucHV0VGltZXN0YW1wSW1wbChUaW1lc3RhbXBDb21iaW5lckltcGwpOgogICIiIlRpbWVzdGFtcENvbWJpbmVySW1wbCBvdXRwdXR0aW5nIGF0IGVhcmxpZXN0IGlucHV0IHRpbWVzdGFtcC4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHdpbmRvd19mbik6CiAgICBzZWxmLndpbmRvd19mbiA9IHdpbmRvd19mbgoKICBkZWYgYXNzaWduX291dHB1dF90aW1lKHNlbGYsIHdpbmRvdywgaW5wdXRfdGltZXN0YW1wKToKICAgIHJldHVybiBzZWxmLndpbmRvd19mbi5nZXRfdHJhbnNmb3JtZWRfb3V0cHV0X3RpbWUod2luZG93LCBpbnB1dF90aW1lc3RhbXApCgogIGRlZiBjb21iaW5lKHNlbGYsIG91dHB1dF90aW1lc3RhbXAsIG90aGVyX291dHB1dF90aW1lc3RhbXApOgogICAgcmV0dXJuIG1pbihvdXRwdXRfdGltZXN0YW1wLCBvdGhlcl9vdXRwdXRfdGltZXN0YW1wKQoKCmNsYXNzIE91dHB1dEF0TGF0ZXN0SW5wdXRUaW1lc3RhbXBJbXBsKFRpbWVzdGFtcENvbWJpbmVySW1wbCk6CiAgIiIiVGltZXN0YW1wQ29tYmluZXJJbXBsIG91dHB1dHRpbmcgYXQgbGF0ZXN0IGlucHV0IHRpbWVzdGFtcC4iIiIKCiAgZGVmIGFzc2lnbl9vdXRwdXRfdGltZShzZWxmLCB3aW5kb3csIGlucHV0X3RpbWVzdGFtcCk6CiAgICByZXR1cm4gaW5wdXRfdGltZXN0YW1wCgogIGRlZiBjb21iaW5lKHNlbGYsIG91dHB1dF90aW1lc3RhbXAsIG90aGVyX291dHB1dF90aW1lc3RhbXApOgogICAgcmV0dXJuIG1heChvdXRwdXRfdGltZXN0YW1wLCBvdGhlcl9vdXRwdXRfdGltZXN0YW1wKQoKCmNsYXNzIE91dHB1dEF0RW5kT2ZXaW5kb3dJbXBsKERlcGVuZHNPbmx5T25XaW5kb3cpOgogICIiIlRpbWVzdGFtcENvbWJpbmVySW1wbCBvdXRwdXR0aW5nIGF0IGVuZCBvZiB3aW5kb3cuIiIiCgogIGRlZiBhc3NpZ25fb3V0cHV0X3RpbWUoc2VsZiwgd2luZG93LCB1bnVzZWRfaW5wdXRfdGltZXN0YW1wKToKICAgIHJldHVybiB3aW5kb3cuZW5kCn1y4oIAAChYMwAAAE91dHB1dEF0TGF0ZXN0SW5wdXRUaW1lc3RhbXBJbXBsLmFzc2lnbl9vdXRwdXRfdGltZVgDAAAAZGVmS4BLgodYFgAAAFRpbWVEb21haW4uZnJvbV9zdHJpbmdYAwAAAGRlZksxSziHWBMAAABEZXBlbmRzT25seU9uV2luZG93WAUAAABjbGFzc0tZS2OHWEAAAABPdXRwdXRBdEVhcmxpZXN0VHJhbnNmb3JtZWRJbnB1dFRpbWVzdGFtcEltcGwuYXNzaWduX291dHB1dF90aW1lWAMAAABkZWZLdkt4h1g2AAAAT3V0cHV0QXRFYXJsaWVzdFRyYW5zZm9ybWVkSW5wdXRUaW1lc3RhbXBJbXBsLl9faW5pdF9fWAMAAABkZWZLc0t1h1goAAAAVGltZXN0YW1wQ29tYmluZXJJbXBsLmFzc2lnbl9vdXRwdXRfdGltZVgDAAAAZGVmS0FLRIdYGQAAAERlcGVuZHNPbmx5T25XaW5kb3cubWVyZ2VYAwAAAGRlZktfS2OHWDUAAABPdXRwdXRBdEVhcmxpZXN0VHJhbnNmb3JtZWRJbnB1dFRpbWVzdGFtcEltcGwuY29tYmluZVgDAAAAZGVmS3lLe4dYKgAAAE91dHB1dEF0RW5kT2ZXaW5kb3dJbXBsLmFzc2lnbl9vdXRwdXRfdGltZVgDAAAAZGVmS4pLjIdYGwAAAFRpbWVzdGFtcENvbWJpbmVySW1wbC5tZXJnZVgDAAAAZGVmS1RLV4dYIAAAAE91dHB1dEF0TGF0ZXN0SW5wdXRUaW1lc3RhbXBJbXBsWAUAAABjbGFzc0t9S4WHWBgAAABUaW1lRG9tYWluLnRvX3J1bm5lcl9hcGlYAwAAAGRlZks5SzyHWC0AAABPdXRwdXRBdEVhcmxpZXN0VHJhbnNmb3JtZWRJbnB1dFRpbWVzdGFtcEltcGxYBQAAAGNsYXNzS3BLe4dYNQAAAE91dHB1dEF0RWFybGllc3RJbnB1dFRpbWVzdGFtcEltcGwuYXNzaWduX291dHB1dF90aW1lWAMAAABkZWZLaEtqh1giAAAAT3V0cHV0QXRFYXJsaWVzdElucHV0VGltZXN0YW1wSW1wbFgFAAAAY2xhc3NLZUtuh1gqAAAAT3V0cHV0QXRFYXJsaWVzdElucHV0VGltZXN0YW1wSW1wbC5jb21iaW5lWAMAAABkZWZLa0tuh1goAAAAT3V0cHV0QXRMYXRlc3RJbnB1dFRpbWVzdGFtcEltcGwuY29tYmluZVgDAAAAZGVmS4NLhYdYHQAAAFRpbWVzdGFtcENvbWJpbmVySW1wbC5jb21iaW5lWAMAAABkZWZLRUtIh1gKAAAAVGltZURvbWFpblgFAAAAY2xhc3NLI0s8h1gbAAAARGVwZW5kc09ubHlPbldpbmRvdy5jb21iaW5lWAMAAABkZWZLXEteh1gVAAAAVGltZXN0YW1wQ29tYmluZXJJbXBsWAUAAABjbGFzc0s+S1eHWBcAAABPdXRwdXRBdEVuZE9mV2luZG93SW1wbFgFAAAAY2xhc3NLh0uMh1ghAAAAVGltZXN0YW1wQ29tYmluZXJJbXBsLmNvbWJpbmVfYWxsWAMAAABkZWZLSUtTh3V9cuOCAAAoWBgAAABUaW1lRG9tYWluLnRvX3J1bm5lcl9hcGlqJGUAAFgWAAAAVGltZURvbWFpbi5mcm9tX3N0cmluZ2okZQAAWAoAAABUaW1lRG9tYWluaiRlAAB1an1pAABYHwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudGltZXV0aWxy5IIAAIWBcuWCAAB9cuaCAABidHLnggAAVSZhcGFjaGVfYmVhbS50ZXN0aW5nLnBpcGVsaW5lX3ZlcmlmaWVycyhY3BQAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiRW5kLXRvLWVuZCB0ZXN0IHJlc3VsdCB2ZXJpZmllcnMKCkEgc2V0IG9mIHZlcmlmaWVycyB0aGF0IGFyZSB1c2VkIGluIGVuZC10by1lbmQgdGVzdHMgdG8gdmVyaWZ5IHN0YXRlL291dHB1dApvZiB0ZXN0IHBpcGVsaW5lIGpvYi4gQ3VzdG9taXplZCB2ZXJpZmllciBzaG91bGQgZXh0ZW5kCmBoYW1jcmVzdC5jb3JlLmJhc2VfbWF0Y2hlci5CYXNlTWF0Y2hlcmAgYW5kIG92ZXJyaWRlIF9tYXRjaGVzLgoiIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgbG9nZ2luZwppbXBvcnQgdGltZQoKZnJvbSBoYW1jcmVzdC5jb3JlLmJhc2VfbWF0Y2hlciBpbXBvcnQgQmFzZU1hdGNoZXIKCmZyb20gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXMgaW1wb3J0IEZpbGVTeXN0ZW1zCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIgaW1wb3J0IFBpcGVsaW5lU3RhdGUKZnJvbSBhcGFjaGVfYmVhbS50ZXN0aW5nIGltcG9ydCB0ZXN0X3V0aWxzIGFzIHV0aWxzCmZyb20gYXBhY2hlX2JlYW0udXRpbHMgaW1wb3J0IHJldHJ5CgpfX2FsbF9fID0gWwogICAgJ1BpcGVsaW5lU3RhdGVNYXRjaGVyJywKICAgICdGaWxlQ2hlY2tzdW1NYXRjaGVyJywKICAgICdyZXRyeV9vbl9pb19lcnJvcl9hbmRfc2VydmVyX2Vycm9yJywKICAgIF0KCgp0cnk6CiAgZnJvbSBhcGl0b29scy5iYXNlLnB5LmV4Y2VwdGlvbnMgaW1wb3J0IEh0dHBFcnJvcgpleGNlcHQgSW1wb3J0RXJyb3I6CiAgSHR0cEVycm9yID0gTm9uZQoKTUFYX1JFVFJJRVMgPSA0CgoKY2xhc3MgUGlwZWxpbmVTdGF0ZU1hdGNoZXIoQmFzZU1hdGNoZXIpOgogICIiIk1hdGNoZXIgdGhhdCB2ZXJpZnkgcGlwZWxpbmUgam9iIHRlcm1pbmF0ZWQgaW4gZXhwZWN0ZWQgc3RhdGUKCiAgTWF0Y2hlciBjb21wYXJlcyB0aGUgYWN0dWFsIHBpcGVsaW5lIHRlcm1pbmF0ZSBzdGF0ZSB3aXRoIGV4cGVjdGVkLgogIEJ5IGRlZmF1bHQsIGBQaXBlbGluZVN0YXRlLkRPTkVgIGlzIHVzZWQgYXMgZXhwZWN0ZWQgc3RhdGUuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBleHBlY3RlZF9zdGF0ZT1QaXBlbGluZVN0YXRlLkRPTkUpOgogICAgc2VsZi5leHBlY3RlZF9zdGF0ZSA9IGV4cGVjdGVkX3N0YXRlCgogIGRlZiBfbWF0Y2hlcyhzZWxmLCBwaXBlbGluZV9yZXN1bHQpOgogICAgcmV0dXJuIHBpcGVsaW5lX3Jlc3VsdC5zdGF0ZSA9PSBzZWxmLmV4cGVjdGVkX3N0YXRlCgogIGRlZiBkZXNjcmliZV90byhzZWxmLCBkZXNjcmlwdGlvbik6CiAgICBkZXNjcmlwdGlvbiBcCiAgICAgIC5hcHBlbmRfdGV4dCgiVGVzdCBwaXBlbGluZSBleHBlY3RlZCB0ZXJtaW5hdGVkIGluIHN0YXRlOiAiKSBcCiAgICAgIC5hcHBlbmRfdGV4dChzZWxmLmV4cGVjdGVkX3N0YXRlKQoKICBkZWYgZGVzY3JpYmVfbWlzbWF0Y2goc2VsZiwgcGlwZWxpbmVfcmVzdWx0LCBtaXNtYXRjaF9kZXNjcmlwdGlvbik6CiAgICBtaXNtYXRjaF9kZXNjcmlwdGlvbiBcCiAgICAgIC5hcHBlbmRfdGV4dCgiVGVzdCBwaXBlbGluZSBqb2IgdGVybWluYXRlZCBpbiBzdGF0ZTogIikgXAogICAgICAuYXBwZW5kX3RleHQocGlwZWxpbmVfcmVzdWx0LnN0YXRlKQoKCmRlZiByZXRyeV9vbl9pb19lcnJvcl9hbmRfc2VydmVyX2Vycm9yKGV4Y2VwdGlvbik6CiAgIiIiRmlsdGVyIGFsbG93aW5nIHJldHJpZXMgb24gZmlsZSBJL08gZXJyb3JzIGFuZCBzZXJ2aWNlIGVycm9yLiIiIgogIHJldHVybiBpc2luc3RhbmNlKGV4Y2VwdGlvbiwgSU9FcnJvcikgb3IgXAogICAgICAgICAgKEh0dHBFcnJvciBpcyBub3QgTm9uZSBhbmQgaXNpbnN0YW5jZShleGNlcHRpb24sIEh0dHBFcnJvcikpCgoKY2xhc3MgRmlsZUNoZWNrc3VtTWF0Y2hlcihCYXNlTWF0Y2hlcik6CiAgIiIiTWF0Y2hlciB0aGF0IHZlcmlmaWVzIGZpbGUocykgY29udGVudCBieSBjb21wYXJpbmcgZmlsZSBjaGVja3N1bS4KCiAgVXNlIGFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNpbmsgdG8gZmV0Y2ggZmlsZShzKSBmcm9tIGdpdmVuIHBhdGguCiAgRmlsZSBjaGVja3N1bSBpcyBhIGhhc2ggc3RyaW5nIGNvbXB1dGVkIGZyb20gY29udGVudCBvZiBmaWxlKHMpLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgZmlsZV9wYXRoLCBleHBlY3RlZF9jaGVja3N1bSwgc2xlZXBfc2Vjcz1Ob25lKToKICAgICIiIkluaXRpYWxpemUgYSBGaWxlQ2hlY2tzdW1NYXRjaGVyIG9iamVjdAoKICAgIEFyZ3M6CiAgICAgIGZpbGVfcGF0aCA6IEEgc3RyaW5nIHRoYXQgaXMgdGhlIGZ1bGwgcGF0aCBvZiBvdXRwdXQgZmlsZS4gVGhpcyBwYXRoCiAgICAgICAgY2FuIGNvbnRhaW4gZ2xvYnMuCiAgICAgIGV4cGVjdGVkX2NoZWNrc3VtIDogQSBoYXNoIHN0cmluZyB0aGF0IGlzIGNvbXB1dGVkIGZyb20gZXhwZWN0ZWQKICAgICAgICByZXN1bHQuCiAgICAgIHNsZWVwX3NlY3MgOiBOdW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGJlZm9yZSB2ZXJpZmljYXRpb24gc3RhcnQuCiAgICAgICAgRXh0cmEgdGltZSBhcmUgZ2l2ZW4gdG8gbWFrZSBzdXJlIG91dHB1dCBmaWxlcyBhcmUgcmVhZHkgb24gRlMuCiAgICAiIiIKICAgIGlmIHNsZWVwX3NlY3MgaXMgbm90IE5vbmU6CiAgICAgIGlmIGlzaW5zdGFuY2Uoc2xlZXBfc2VjcywgaW50KToKICAgICAgICBzZWxmLnNsZWVwX3NlY3MgPSBzbGVlcF9zZWNzCiAgICAgIGVsc2U6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignU2xlZXAgc2Vjb25kcywgaWYgcmVjZWl2ZWQsIG11c3QgYmUgaW50LiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAnQnV0IHJlY2VpdmVkOiAlciwgJXMnICUgKHNsZWVwX3NlY3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUoc2xlZXBfc2VjcykpKQogICAgZWxzZToKICAgICAgc2VsZi5zbGVlcF9zZWNzID0gTm9uZQoKICAgIHNlbGYuZmlsZV9wYXRoID0gZmlsZV9wYXRoCiAgICBzZWxmLmV4cGVjdGVkX2NoZWNrc3VtID0gZXhwZWN0ZWRfY2hlY2tzdW0KCiAgQHJldHJ5LndpdGhfZXhwb25lbnRpYWxfYmFja29mZigKICAgICAgbnVtX3JldHJpZXM9TUFYX1JFVFJJRVMsCiAgICAgIHJldHJ5X2ZpbHRlcj1yZXRyeV9vbl9pb19lcnJvcl9hbmRfc2VydmVyX2Vycm9yKQogIGRlZiBfcmVhZF93aXRoX3JldHJ5KHNlbGYpOgogICAgIiIiUmVhZCBwYXRoIHdpdGggcmV0cnkgaWYgSS9PIGZhaWxlZCIiIgogICAgcmVhZF9saW5lcyA9IFtdCiAgICBtYXRjaF9yZXN1bHQgPSBGaWxlU3lzdGVtcy5tYXRjaChbc2VsZi5maWxlX3BhdGhdKVswXQogICAgbWF0Y2hlZF9wYXRoID0gW2YucGF0aCBmb3IgZiBpbiBtYXRjaF9yZXN1bHQubWV0YWRhdGFfbGlzdF0KICAgIGlmIG5vdCBtYXRjaGVkX3BhdGg6CiAgICAgIHJhaXNlIElPRXJyb3IoJ05vIHN1Y2ggZmlsZSBvciBkaXJlY3Rvcnk6ICVzJyAlIHNlbGYuZmlsZV9wYXRoKQoKICAgIGxvZ2dpbmcuaW5mbygnRmluZCAlZCBmaWxlcyBpbiAlczogXG4lcycsCiAgICAgICAgICAgICAgICAgbGVuKG1hdGNoZWRfcGF0aCksIHNlbGYuZmlsZV9wYXRoLCAnXG4nLmpvaW4obWF0Y2hlZF9wYXRoKSkKICAgIGZvciBwYXRoIGluIG1hdGNoZWRfcGF0aDoKICAgICAgd2l0aCBGaWxlU3lzdGVtcy5vcGVuKHBhdGgsICdyJykgYXMgZjoKICAgICAgICBmb3IgbGluZSBpbiBmOgogICAgICAgICAgcmVhZF9saW5lcy5hcHBlbmQobGluZSkKICAgIHJldHVybiByZWFkX2xpbmVzCgogIGRlZiBfbWF0Y2hlcyhzZWxmLCBfKToKICAgIGlmIHNlbGYuc2xlZXBfc2VjczoKICAgICAgIyBXYWl0IHRvIGhhdmUgb3V0cHV0IGZpbGUgcmVhZHkgb24gRlMKICAgICAgbG9nZ2luZy5pbmZvKCdXYWl0ICVkIHNlY29uZHMuLi4nLCBzZWxmLnNsZWVwX3NlY3MpCiAgICAgIHRpbWUuc2xlZXAoc2VsZi5zbGVlcF9zZWNzKQoKICAgICMgUmVhZCBmcm9tIGdpdmVuIGZpbGUocykgcGF0aAogICAgcmVhZF9saW5lcyA9IHNlbGYuX3JlYWRfd2l0aF9yZXRyeSgpCgogICAgIyBDb21wdXRlIGNoZWNrc3VtCiAgICBzZWxmLmNoZWNrc3VtID0gdXRpbHMuY29tcHV0ZV9oYXNoKHJlYWRfbGluZXMpCiAgICBsb2dnaW5nLmluZm8oJ1JlYWQgZnJvbSBnaXZlbiBwYXRoICVzLCAlZCBsaW5lcywgY2hlY2tzdW06ICVzLicsCiAgICAgICAgICAgICAgICAgc2VsZi5maWxlX3BhdGgsIGxlbihyZWFkX2xpbmVzKSwgc2VsZi5jaGVja3N1bSkKICAgIHJldHVybiBzZWxmLmNoZWNrc3VtID09IHNlbGYuZXhwZWN0ZWRfY2hlY2tzdW0KCiAgZGVmIGRlc2NyaWJlX3RvKHNlbGYsIGRlc2NyaXB0aW9uKToKICAgIGRlc2NyaXB0aW9uIFwKICAgICAgLmFwcGVuZF90ZXh0KCJFeHBlY3RlZCBjaGVja3N1bSBpcyAiKSBcCiAgICAgIC5hcHBlbmRfdGV4dChzZWxmLmV4cGVjdGVkX2NoZWNrc3VtKQoKICBkZWYgZGVzY3JpYmVfbWlzbWF0Y2goc2VsZiwgcGlwZWxpbmVfcmVzdWx0LCBtaXNtYXRjaF9kZXNjcmlwdGlvbik6CiAgICBtaXNtYXRjaF9kZXNjcmlwdGlvbiBcCiAgICAgIC5hcHBlbmRfdGV4dCgiQWN0dWFsIGNoZWNrc3VtIGlzICIpIFwKICAgICAgLmFwcGVuZF90ZXh0KHNlbGYuY2hlY2tzdW0pCn1y6IIAAChYJAAAAEZpbGVDaGVja3N1bU1hdGNoZXIuX3JlYWRfd2l0aF9yZXRyeVgDAAAAZGVmS3FLg4dYHQAAAFBpcGVsaW5lU3RhdGVNYXRjaGVyLl9tYXRjaGVzWAMAAABkZWZLPktAh1gfAAAARmlsZUNoZWNrc3VtTWF0Y2hlci5kZXNjcmliZV90b1gDAAAAZGVmS5NLl4dYJgAAAFBpcGVsaW5lU3RhdGVNYXRjaGVyLmRlc2NyaWJlX21pc21hdGNoWAMAAABkZWZLRktKh1gTAAAARmlsZUNoZWNrc3VtTWF0Y2hlclgFAAAAY2xhc3NLUkuch1glAAAARmlsZUNoZWNrc3VtTWF0Y2hlci5kZXNjcmliZV9taXNtYXRjaFgDAAAAZGVmS5hLnIdYHAAAAEZpbGVDaGVja3N1bU1hdGNoZXIuX21hdGNoZXNYAwAAAGRlZkuES5KHWBQAAABQaXBlbGluZVN0YXRlTWF0Y2hlclgFAAAAY2xhc3NLNEtKh1gcAAAARmlsZUNoZWNrc3VtTWF0Y2hlci5fX2luaXRfX1gDAAAAZGVmS1lLcIdYIAAAAFBpcGVsaW5lU3RhdGVNYXRjaGVyLmRlc2NyaWJlX3RvWAMAAABkZWZLQUtFh1gdAAAAUGlwZWxpbmVTdGF0ZU1hdGNoZXIuX19pbml0X19YAwAAAGRlZks7Sz2HWCIAAAByZXRyeV9vbl9pb19lcnJvcl9hbmRfc2VydmVyX2Vycm9yWAMAAABkZWZLTEtQh3V9cumCAAAoWB8AAABGaWxlQ2hlY2tzdW1NYXRjaGVyLmRlc2NyaWJlX3Rvag1bAABYJgAAAFBpcGVsaW5lU3RhdGVNYXRjaGVyLmRlc2NyaWJlX21pc21hdGNoag1bAABYEwAAAEZpbGVDaGVja3N1bU1hdGNoZXJqDVsAAFglAAAARmlsZUNoZWNrc3VtTWF0Y2hlci5kZXNjcmliZV9taXNtYXRjaGoNWwAAWBQAAABQaXBlbGluZVN0YXRlTWF0Y2hlcmoNWwAAWCAAAABQaXBlbGluZVN0YXRlTWF0Y2hlci5kZXNjcmliZV90b2oNWwAAWCIAAAByZXRyeV9vbl9pb19lcnJvcl9hbmRfc2VydmVyX2Vycm9yag1bAAB1an1pAABYJgAAAGFwYWNoZV9iZWFtLnRlc3RpbmcucGlwZWxpbmVfdmVyaWZpZXJzcuqCAACFgXLrggAAfXLsggAAYnRVGmFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyKFgQNwAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJQaXBlbGluZVJ1bm5lciwgYW4gYWJzdHJhY3QgYmFzZSBydW5uZXIgb2JqZWN0LiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBsb2dnaW5nCmltcG9ydCBvcwppbXBvcnQgc2hlbHZlCmltcG9ydCBzaHV0aWwKaW1wb3J0IHRlbXBmaWxlCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdAoKX19hbGxfXyA9IFsnUGlwZWxpbmVSdW5uZXInLCAnUGlwZWxpbmVTdGF0ZScsICdQaXBlbGluZVJlc3VsdCddCgoKZGVmIF9nZXRfcnVubmVyX21hcChydW5uZXJfbmFtZXMsIG1vZHVsZV9wYXRoKToKICAiIiJDcmVhdGUgYSBtYXAgb2YgcnVubmVyIG5hbWUgaW4gbG93ZXIgY2FzZSB0byBmdWxsIGltcG9ydCBwYXRoIHRvIHRoZQogIHJ1bm5lciBjbGFzcy4KICAiIiIKICByZXR1cm4ge3J1bm5lcl9uYW1lLmxvd2VyKCk6IG1vZHVsZV9wYXRoICsgcnVubmVyX25hbWUKICAgICAgICAgIGZvciBydW5uZXJfbmFtZSBpbiBydW5uZXJfbmFtZXN9CgoKX0RJUkVDVF9SVU5ORVJfUEFUSCA9ICdhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfcnVubmVyLicKX0RBVEFGTE9XX1JVTk5FUl9QQVRIID0gKAogICAgJ2FwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLicpCl9URVNUX1JVTk5FUl9QQVRIID0gJ2FwYWNoZV9iZWFtLnJ1bm5lcnMudGVzdC4nCl9QWVRIT05fUlBDX0RJUkVDVF9SVU5ORVIgPSAoCiAgICAnYXBhY2hlX2JlYW0ucnVubmVycy5leHBlcmltZW50YWwucHl0aG9uX3JwY19kaXJlY3QuJwogICAgJ3B5dGhvbl9ycGNfZGlyZWN0X3J1bm5lci4nKQpfUE9SVEFCTEVfUlVOTkVSX1BBVEggPSAoJ2FwYWNoZV9iZWFtLnJ1bm5lcnMucG9ydGFiaWxpdHkucG9ydGFibGVfcnVubmVyLicpCgpfS05PV05fUFlUSE9OX1JQQ19ESVJFQ1RfUlVOTkVSID0gKCdQeXRob25SUENEaXJlY3RSdW5uZXInLCkKX0tOT1dOX0RJUkVDVF9SVU5ORVJTID0gKCdEaXJlY3RSdW5uZXInLCAnQnVuZGxlQmFzZWREaXJlY3RSdW5uZXInLAogICAgICAgICAgICAgICAgICAgICAgICAgJ1N3aXRjaGluZ0RpcmVjdFJ1bm5lcicpCl9LTk9XTl9EQVRBRkxPV19SVU5ORVJTID0gKCdEYXRhZmxvd1J1bm5lcicsKQpfS05PV05fVEVTVF9SVU5ORVJTID0gKCdUZXN0RGF0YWZsb3dSdW5uZXInLCAnVGVzdERpcmVjdFJ1bm5lcicpCl9LTk9XTl9QT1JUQUJMRV9SVU5ORVJTID0gKCdQb3J0YWJsZVJ1bm5lcicsKQoKX1JVTk5FUl9NQVAgPSB7fQpfUlVOTkVSX01BUC51cGRhdGUoX2dldF9ydW5uZXJfbWFwKF9LTk9XTl9ESVJFQ1RfUlVOTkVSUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRElSRUNUX1JVTk5FUl9QQVRIKSkKX1JVTk5FUl9NQVAudXBkYXRlKF9nZXRfcnVubmVyX21hcChfS05PV05fREFUQUZMT1dfUlVOTkVSUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfREFUQUZMT1dfUlVOTkVSX1BBVEgpKQpfUlVOTkVSX01BUC51cGRhdGUoX2dldF9ydW5uZXJfbWFwKF9LTk9XTl9QWVRIT05fUlBDX0RJUkVDVF9SVU5ORVIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BZVEhPTl9SUENfRElSRUNUX1JVTk5FUikpCl9SVU5ORVJfTUFQLnVwZGF0ZShfZ2V0X3J1bm5lcl9tYXAoX0tOT1dOX1RFU1RfUlVOTkVSUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVEVTVF9SVU5ORVJfUEFUSCkpCl9SVU5ORVJfTUFQLnVwZGF0ZShfZ2V0X3J1bm5lcl9tYXAoX0tOT1dOX1BPUlRBQkxFX1JVTk5FUlMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BPUlRBQkxFX1JVTk5FUl9QQVRIKSkKCl9BTExfS05PV05fUlVOTkVSUyA9ICgKICAgIF9LTk9XTl9ESVJFQ1RfUlVOTkVSUyArIF9LTk9XTl9EQVRBRkxPV19SVU5ORVJTICsgX0tOT1dOX1RFU1RfUlVOTkVSUyArCiAgICBfS05PV05fUE9SVEFCTEVfUlVOTkVSUykKCgpkZWYgY3JlYXRlX3J1bm5lcihydW5uZXJfbmFtZSk6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBDcmVhdGVzIGEgcnVubmVyIGluc3RhbmNlIGZyb20gYSBydW5uZXIgY2xhc3MgbmFtZS4KCiAgQXJnczoKICAgIHJ1bm5lcl9uYW1lOiBOYW1lIG9mIHRoZSBwaXBlbGluZSBydW5uZXIuIFBvc3NpYmxlIHZhbHVlcyBhcmUgbGlzdGVkIGluCiAgICAgIF9SVU5ORVJfTUFQIGFib3ZlLgoKICBSZXR1cm5zOgogICAgQSBydW5uZXIgb2JqZWN0LgoKICBSYWlzZXM6CiAgICBSdW50aW1lRXJyb3I6IGlmIGFuIGludmFsaWQgcnVubmVyIG5hbWUgaXMgdXNlZC4KICAiIiIKCiAgIyBHZXQgdGhlIHF1YWxpZmllZCBydW5uZXIgbmFtZSBieSB1c2luZyB0aGUgbG93ZXIgY2FzZSBydW5uZXIgbmFtZS4gSWYgdGhhdAogICMgZmFpbHMgdHJ5IGFwcGVuZGluZyB0aGUgbmFtZSB3aXRoICdydW5uZXInIGFuZCBjaGVjayBpZiBpdCBtYXRjaGVzLgogICMgSWYgdGhhdCBhbHNvIGZhaWxzLCB1c2UgdGhlIGdpdmVuIHJ1bm5lciBuYW1lIGFzIGlzLgogIHJ1bm5lcl9uYW1lID0gX1JVTk5FUl9NQVAuZ2V0KAogICAgICBydW5uZXJfbmFtZS5sb3dlcigpLAogICAgICBfUlVOTkVSX01BUC5nZXQocnVubmVyX25hbWUubG93ZXIoKSArICdydW5uZXInLCBydW5uZXJfbmFtZSkpCgogIGlmICcuJyBpbiBydW5uZXJfbmFtZToKICAgIG1vZHVsZSwgcnVubmVyID0gcnVubmVyX25hbWUucnNwbGl0KCcuJywgMSkKICAgIHRyeToKICAgICAgcmV0dXJuIGdldGF0dHIoX19pbXBvcnRfXyhtb2R1bGUsIHt9LCB7fSwgW3J1bm5lcl0sIDApLCBydW5uZXIpKCkKICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgaWYgcnVubmVyX25hbWUgaW4gX0tOT1dOX0RBVEFGTE9XX1JVTk5FUlM6CiAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoCiAgICAgICAgICAgICdHb29nbGUgQ2xvdWQgRGF0YWZsb3cgcnVubmVyIG5vdCBhdmFpbGFibGUsICcKICAgICAgICAgICAgJ3BsZWFzZSBpbnN0YWxsIGFwYWNoZV9iZWFtW2djcF0nKQogICAgICBlbHNlOgogICAgICAgIHJhaXNlCiAgZWxzZToKICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgJ1VuZXhwZWN0ZWQgcGlwZWxpbmUgcnVubmVyOiAlcy4gVmFsaWQgdmFsdWVzIGFyZSAlcyAnCiAgICAgICAgJ29yIHRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiBhIFBpcGVsaW5lUnVubmVyIHN1YmNsYXNzLicgJSAoCiAgICAgICAgICAgIHJ1bm5lcl9uYW1lLCAnLCAnLmpvaW4oX0FMTF9LTk9XTl9SVU5ORVJTKSkpCgoKY2xhc3MgUGlwZWxpbmVSdW5uZXIob2JqZWN0KToKICAiIiJBIHJ1bm5lciBvZiBhIHBpcGVsaW5lIG9iamVjdC4KCiAgVGhlIGJhc2UgcnVubmVyIHByb3ZpZGVzIGEgcnVuKCkgbWV0aG9kIGZvciB2aXNpdGluZyBldmVyeSBub2RlIGluIHRoZQogIHBpcGVsaW5lJ3MgREFHIGFuZCBleGVjdXRpbmcgdGhlIHRyYW5zZm9ybXMgY29tcHV0aW5nIHRoZSBQVmFsdWUgaW4gdGhlIG5vZGUuCgogIEEgY3VzdG9tIHJ1bm5lciB3aWxsIHR5cGljYWxseSBwcm92aWRlIGltcGxlbWVudGF0aW9ucyBmb3Igc29tZSBvZiB0aGUKICB0cmFuc2Zvcm0gbWV0aG9kcyAoUGFyRG8sIEdyb3VwQnlLZXksIENyZWF0ZSwgZXRjLikuIEl0IG1heSBhbHNvCiAgcHJvdmlkZSBhIG5ldyBpbXBsZW1lbnRhdGlvbiBmb3IgY2xlYXJfcHZhbHVlKCksIHdoaWNoIGlzIHVzZWQgdG8gd2lwZSBvdXQKICBtYXRlcmlhbGl6ZWQgdmFsdWVzIGluIG9yZGVyIHRvIHJlZHVjZSBmb290cHJpbnQuCiAgIiIiCgogIGRlZiBydW4oc2VsZiwgdHJhbnNmb3JtLCBvcHRpb25zPU5vbmUpOgogICAgIiIiUnVuIHRoZSBnaXZlbiB0cmFuc2Zvcm0gb3IgY2FsbGFibGUgd2l0aCB0aGlzIHJ1bm5lci4KCiAgICBCbG9ja3MgdW50aWwgdGhlIHBpcGVsaW5lIGlzIGNvbXBsZXRlLiAgU2VlIGFsc28gYFBpcGVsaW5lUnVubmVyLnJ1bl9hc3luY2AuCiAgICAiIiIKICAgIHJlc3VsdCA9IHNlbGYucnVuX2FzeW5jKHRyYW5zZm9ybSwgb3B0aW9ucykKICAgIHJlc3VsdC53YWl0X3VudGlsX2ZpbmlzaCgpCiAgICByZXR1cm4gcmVzdWx0CgogIGRlZiBydW5fYXN5bmMoc2VsZiwgdHJhbnNmb3JtLCBvcHRpb25zPU5vbmUpOgogICAgIiIiUnVuIHRoZSBnaXZlbiB0cmFuc2Zvcm0gb3IgY2FsbGFibGUgd2l0aCB0aGlzIHJ1bm5lci4KCiAgICBNYXkgcmV0dXJuIGltbWVkaWF0ZWx5LCBleGVjdXRpbmcgdGhlIHBpcGVsaW5lIGluIHRoZSBiYWNrZ3JvdW5kLgogICAgVGhlIHJldHVybmVkIHJlc3VsdCBvYmplY3QgY2FuIGJlIHF1ZXJpZWQgZm9yIHByb2dyZXNzLCBhbmQKICAgIGB3YWl0X3VudGlsX2ZpbmlzaGAgbWF5IGJlIGNhbGxlZCB0byBibG9jayB1bnRpbCBjb21wbGV0aW9uLgogICAgIiIiCiAgICAjIEltcG9ydGVkIGhlcmUgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLgogICAgIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KICAgIGZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IFBUcmFuc2Zvcm0KICAgIGZyb20gYXBhY2hlX2JlYW0ucHZhbHVlIGltcG9ydCBQQmVnaW4KICAgIGZyb20gYXBhY2hlX2JlYW0ucGlwZWxpbmUgaW1wb3J0IFBpcGVsaW5lCiAgICBwID0gUGlwZWxpbmUocnVubmVyPXNlbGYsIG9wdGlvbnM9b3B0aW9ucykKICAgIGlmIGlzaW5zdGFuY2UodHJhbnNmb3JtLCBQVHJhbnNmb3JtKToKICAgICAgcCB8IHRyYW5zZm9ybQogICAgZWxzZToKICAgICAgdHJhbnNmb3JtKFBCZWdpbihwKSkKICAgIHJldHVybiBwLnJ1bigpCgogIGRlZiBydW5fcGlwZWxpbmUoc2VsZiwgcGlwZWxpbmUsIG9wdGlvbnMpOgogICAgIiIiRXhlY3V0ZSB0aGUgZW50aXJlIHBpcGVsaW5lIG9yIHRoZSBzdWItREFHIHJlYWNoYWJsZSBmcm9tIGEgbm9kZS4KCiAgICBSdW5uZXJzIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZC4KICAgICIiIgoKICAgICMgSW1wb3J0ZWQgaGVyZSB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMuCiAgICAjIHB5bGludDogZGlzYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbgogICAgZnJvbSBhcGFjaGVfYmVhbS5waXBlbGluZSBpbXBvcnQgUGlwZWxpbmVWaXNpdG9yCgogICAgY2xhc3MgUnVuVmlzaXRvcihQaXBlbGluZVZpc2l0b3IpOgoKICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJ1bm5lcik6CiAgICAgICAgc2VsZi5ydW5uZXIgPSBydW5uZXIKCiAgICAgIGRlZiB2aXNpdF90cmFuc2Zvcm0oc2VsZiwgdHJhbnNmb3JtX25vZGUpOgogICAgICAgIHRyeToKICAgICAgICAgIHNlbGYucnVubmVyLnJ1bl90cmFuc2Zvcm0odHJhbnNmb3JtX25vZGUsIG9wdGlvbnMpCiAgICAgICAgZXhjZXB0OgogICAgICAgICAgbG9nZ2luZy5lcnJvcignRXJyb3Igd2hpbGUgdmlzaXRpbmcgJXMnLCB0cmFuc2Zvcm1fbm9kZS5mdWxsX2xhYmVsKQogICAgICAgICAgcmFpc2UKCiAgICBwaXBlbGluZS52aXNpdChSdW5WaXNpdG9yKHNlbGYpKQoKICBkZWYgYXBwbHkoc2VsZiwgdHJhbnNmb3JtLCBpbnB1dCwgb3B0aW9ucyk6CiAgICAiIiJSdW5uZXIgY2FsbGJhY2sgZm9yIGEgcGlwZWxpbmUuYXBwbHkgY2FsbC4KCiAgICBBcmdzOgogICAgICB0cmFuc2Zvcm06IHRoZSB0cmFuc2Zvcm0gdG8gYXBwbHkuCiAgICAgIGlucHV0OiB0cmFuc2Zvcm0ncyBpbnB1dCAodHlwaWNhbGx5IGEgUENvbGxlY3Rpb24pLgoKICAgIEEgY29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIFJ1bm5lciBjbGFzcyBtYXkgd2FudCB0byBkbyBjdXN0b20KICAgIHBpcGVsaW5lIGNvbnN0cnVjdGlvbiBmb3IgYSBnaXZlbiB0cmFuc2Zvcm0uICBUbyBvdmVycmlkZSB0aGUgYmVoYXZpb3IKICAgIGZvciBhIHRyYW5zZm9ybSBjbGFzcyBYeXosIGltcGxlbWVudCBhbiBhcHBseV9YeXogbWV0aG9kIHdpdGggdGhpcyBzYW1lCiAgICBzaWduYXR1cmUuCiAgICAiIiIKICAgIGZvciBjbHMgaW4gdHJhbnNmb3JtLl9fY2xhc3NfXy5tcm8oKToKICAgICAgbSA9IGdldGF0dHIoc2VsZiwgJ2FwcGx5XyVzJyAlIGNscy5fX25hbWVfXywgTm9uZSkKICAgICAgaWYgbToKICAgICAgICByZXR1cm4gbSh0cmFuc2Zvcm0sIGlucHV0LCBvcHRpb25zKQogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigKICAgICAgICAnRXhlY3V0aW9uIG9mIFslc10gbm90IGltcGxlbWVudGVkIGluIHJ1bm5lciAlcy4nICUgKHRyYW5zZm9ybSwgc2VsZikpCgogIGRlZiBhcHBseV9QVHJhbnNmb3JtKHNlbGYsIHRyYW5zZm9ybSwgaW5wdXQsIG9wdGlvbnMpOgogICAgIyBUaGUgYmFzZSBjYXNlIG9mIGFwcGx5IGlzIHRvIGNhbGwgdGhlIHRyYW5zZm9ybSdzIGV4cGFuZC4KICAgIHJldHVybiB0cmFuc2Zvcm0uZXhwYW5kKGlucHV0KQoKICBkZWYgcnVuX3RyYW5zZm9ybShzZWxmLCB0cmFuc2Zvcm1fbm9kZSwgb3B0aW9ucyk6CiAgICAiIiJSdW5uZXIgY2FsbGJhY2sgZm9yIGEgcGlwZWxpbmUucnVuIGNhbGwuCgogICAgQXJnczoKICAgICAgdHJhbnNmb3JtX25vZGU6IHRyYW5zZm9ybSBub2RlIGZvciB0aGUgdHJhbnNmb3JtIHRvIHJ1bi4KCiAgICBBIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBSdW5uZXIgY2xhc3MgbXVzdCBpbXBsZW1lbnQgcnVuX0FiYyBmb3IKICAgIHNvbWUgY2xhc3MgQWJjIGluIHRoZSBtZXRob2QgcmVzb2x1dGlvbiBvcmRlciBmb3IgZXZlcnkgbm9uLWNvbXBvc2l0ZQogICAgdHJhbnNmb3JtIFh5eiBpbiB0aGUgcGlwZWxpbmUuCiAgICAiIiIKICAgIGZvciBjbHMgaW4gdHJhbnNmb3JtX25vZGUudHJhbnNmb3JtLl9fY2xhc3NfXy5tcm8oKToKICAgICAgbSA9IGdldGF0dHIoc2VsZiwgJ3J1bl8lcycgJSBjbHMuX19uYW1lX18sIE5vbmUpCiAgICAgIGlmIG06CiAgICAgICAgcmV0dXJuIG0odHJhbnNmb3JtX25vZGUsIG9wdGlvbnMpCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKAogICAgICAgICdFeGVjdXRpb24gb2YgWyVzXSBub3QgaW1wbGVtZW50ZWQgaW4gcnVubmVyICVzLicgJSAoCiAgICAgICAgICAgIHRyYW5zZm9ybV9ub2RlLnRyYW5zZm9ybSwgc2VsZikpCgoKY2xhc3MgUFZhbHVlQ2FjaGUob2JqZWN0KToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIExvY2FsIGNhY2hlIGZvciBhcmJpdHJhcnkgaW5mb3JtYXRpb24gY29tcHV0ZWQgZm9yIFBWYWx1ZSBvYmplY3RzLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgdXNlX2Rpc2tfYmFja2VkX2NhY2hlPUZhbHNlKToKICAgICMgQ2FjaGUgb2YgdmFsdWVzIGNvbXB1dGVkIHdoaWxlIGEgcnVubmVyIGV4ZWN1dGVzIGEgcGlwZWxpbmUuIFRoaXMgaXMgYQogICAgIyBkaWN0aW9uYXJ5IG9mIFBWYWx1ZXMgYW5kIHRoZWlyIGNvbXB1dGVkIHZhbHVlcy4gTm90ZSB0aGF0IGluIHByaW5jaXBsZQogICAgIyB0aGUgcnVubmVyIGNvdWxkIGNvbnRhaW4gUFZhbHVlcyBmcm9tIHNldmVyYWwgcGlwZWxpbmVzIHdpdGhvdXQgY2xhc2hlcwogICAgIyBzaW5jZSBhIFBWYWx1ZSBpcyBhc3NvY2lhdGVkIHdpdGggb25lIGFuZCBvbmx5IG9uZSBwaXBlbGluZS4gVGhlIGtleXMgb2YKICAgICMgdGhlIGRpY3Rpb25hcnkgYXJlIHR1cGxlIG9mIFBWYWx1ZSBpbnN0YW5jZSBhZGRyZXNzZXMgb2J0YWluZWQgdXNpbmcgaWQoKQogICAgIyBhbmQgdGFnIG5hbWVzIGNvbnZlcnRlZCB0byBzdHJpbmdzLgoKICAgIHNlbGYuX3VzZV9kaXNrX2JhY2tlZF9jYWNoZSA9IHVzZV9kaXNrX2JhY2tlZF9jYWNoZQogICAgaWYgdXNlX2Rpc2tfYmFja2VkX2NhY2hlOgogICAgICBzZWxmLl90ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcCgpCiAgICAgIHNlbGYuX2NhY2hlID0gc2hlbHZlLm9wZW4ob3MucGF0aC5qb2luKHNlbGYuX3RlbXBkaXIsICdzaGVsdmUnKSkKICAgIGVsc2U6CiAgICAgIHNlbGYuX2NhY2hlID0ge30KCiAgZGVmIF9fZGVsX18oc2VsZik6CiAgICBpZiBzZWxmLl91c2VfZGlza19iYWNrZWRfY2FjaGU6CiAgICAgIHNlbGYuX2NhY2hlLmNsb3NlKCkKICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLl90ZW1wZGlyKQoKICBkZWYgX19sZW5fXyhzZWxmKToKICAgIHJldHVybiBsZW4oc2VsZi5fY2FjaGUpCgogIGRlZiB0b19jYWNoZV9rZXkoc2VsZiwgdHJhbnNmb3JtLCB0YWcpOgogICAgcmV0dXJuIHRyYW5zZm9ybS5mdWxsX2xhYmVsLCB0YWcKCiAgZGVmIF9lbnN1cmVfcHZhbHVlX2hhc19yZWFsX3Byb2R1Y2VyKHNlbGYsIHB2YWx1ZSk6CiAgICAiIiJFbnN1cmUgdGhlIHBhc3NlZC1pbiBQVmFsdWUgaGFzIHRoZSByZWFsX3Byb2R1Y2VyIGF0dHJpYnV0ZS4KCiAgICBBcmdzOgogICAgICBwdmFsdWU6IEEgUFZhbHVlIGluc3RhbmNlIHdob3NlIGNhY2hlZCB2YWx1ZSBpcyByZXF1ZXN0ZWQuCgogICAgRHVyaW5nIHRoZSBydW5uZXIncyBleGVjdXRpb24gb25seSB0aGUgcmVzdWx0cyBvZiB0aGUgcHJpbWl0aXZlIHRyYW5zZm9ybXMKICAgIGFyZSBjYWNoZWQuIFdoZW5ldmVyIHdlIGFyZSBsb29raW5nIGZvciBhIFBWYWx1ZSB0aGF0IGlzIHRoZSBvdXRwdXQgb2YgYQogICAgY29tcG9zaXRlIHRyYW5zZm9ybSB3ZSBuZWVkIHRvIGZpbmQgdGhlIG91dHB1dCBvZiBpdHMgcmlnaHRtb3N0IHRyYW5zZm9ybQogICAgcGFydC4KICAgICIiIgogICAgaWYgbm90IGhhc2F0dHIocHZhbHVlLCAncmVhbF9wcm9kdWNlcicpOgogICAgICByZWFsX3Byb2R1Y2VyID0gcHZhbHVlLnByb2R1Y2VyCiAgICAgIHdoaWxlIHJlYWxfcHJvZHVjZXIucGFydHM6CiAgICAgICAgcmVhbF9wcm9kdWNlciA9IHJlYWxfcHJvZHVjZXIucGFydHNbLTFdCiAgICAgIHB2YWx1ZS5yZWFsX3Byb2R1Y2VyID0gcmVhbF9wcm9kdWNlcgoKICBkZWYgaXNfY2FjaGVkKHNlbGYsIHBvYmopOgogICAgZnJvbSBhcGFjaGVfYmVhbS5waXBlbGluZSBpbXBvcnQgQXBwbGllZFBUcmFuc2Zvcm0KICAgIGlmIGlzaW5zdGFuY2UocG9iaiwgQXBwbGllZFBUcmFuc2Zvcm0pOgogICAgICB0cmFuc2Zvcm0gPSBwb2JqCiAgICAgIHRhZyA9IE5vbmUKICAgIGVsc2U6CiAgICAgIHNlbGYuX2Vuc3VyZV9wdmFsdWVfaGFzX3JlYWxfcHJvZHVjZXIocG9iaikKICAgICAgdHJhbnNmb3JtID0gcG9iai5yZWFsX3Byb2R1Y2VyCiAgICAgIHRhZyA9IHBvYmoudGFnCiAgICByZXR1cm4gc2VsZi50b19jYWNoZV9rZXkodHJhbnNmb3JtLCB0YWcpIGluIHNlbGYuX2NhY2hlCgogIGRlZiBjYWNoZV9vdXRwdXQoc2VsZiwgdHJhbnNmb3JtLCB0YWdfb3JfdmFsdWUsIHZhbHVlPU5vbmUpOgogICAgaWYgdmFsdWUgaXMgTm9uZToKICAgICAgdmFsdWUgPSB0YWdfb3JfdmFsdWUKICAgICAgdGFnID0gTm9uZQogICAgZWxzZToKICAgICAgdGFnID0gdGFnX29yX3ZhbHVlCiAgICBzZWxmLl9jYWNoZVsKICAgICAgICBzZWxmLnRvX2NhY2hlX2tleSh0cmFuc2Zvcm0sIHRhZyldID0gdmFsdWUKCiAgZGVmIGdldF9wdmFsdWUoc2VsZiwgcHZhbHVlKToKICAgICIiIkdldHMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBhIFBWYWx1ZSBmcm9tIHRoZSBjYWNoZS4iIiIKICAgIHNlbGYuX2Vuc3VyZV9wdmFsdWVfaGFzX3JlYWxfcHJvZHVjZXIocHZhbHVlKQogICAgdHJ5OgogICAgICByZXR1cm4gc2VsZi5fY2FjaGVbc2VsZi5rZXkocHZhbHVlKV0KICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgaWYgKHB2YWx1ZS50YWcgaXMgbm90IE5vbmUKICAgICAgICAgIGFuZCBzZWxmLnRvX2NhY2hlX2tleShwdmFsdWUucmVhbF9wcm9kdWNlciwgTm9uZSkgaW4gc2VsZi5fY2FjaGUpOgogICAgICAgICMgVGhpcyBpcyBhbiB1bmRlY2xhcmVkLCBlbXB0eSBvdXRwdXQgb2YgYSBEb0ZuIGV4ZWN1dGVkCiAgICAgICAgIyBpbiB0aGUgbG9jYWwgcnVubmVyIGJlZm9yZSB0aGlzIG91dHB1dCB3YXMgcmVmZXJlbmNlZC4KICAgICAgICByZXR1cm4gW10KICAgICAgZWxzZToKICAgICAgICByYWlzZQoKICBkZWYgZ2V0X3Vud2luZG93ZWRfcHZhbHVlKHNlbGYsIHB2YWx1ZSk6CiAgICByZXR1cm4gW3YudmFsdWUgZm9yIHYgaW4gc2VsZi5nZXRfcHZhbHVlKHB2YWx1ZSldCgogIGRlZiBjbGVhcl9wdmFsdWUoc2VsZiwgcHZhbHVlKToKICAgICIiIlJlbW92ZXMgYSBQVmFsdWUgZnJvbSB0aGUgY2FjaGUuIiIiCiAgICBpZiBzZWxmLmlzX2NhY2hlZChwdmFsdWUpOgogICAgICBkZWwgc2VsZi5fY2FjaGVbc2VsZi5rZXkocHZhbHVlKV0KCiAgZGVmIGtleShzZWxmLCBwb2JqKToKICAgIHNlbGYuX2Vuc3VyZV9wdmFsdWVfaGFzX3JlYWxfcHJvZHVjZXIocG9iaikKICAgIHJldHVybiBzZWxmLnRvX2NhY2hlX2tleShwb2JqLnJlYWxfcHJvZHVjZXIsIHBvYmoudGFnKQoKCmNsYXNzIFBpcGVsaW5lU3RhdGUob2JqZWN0KToKICAiIiJTdGF0ZSBvZiB0aGUgUGlwZWxpbmUsIGFzIHJldHVybmVkIGJ5IDphdHRyOmBQaXBlbGluZVJlc3VsdC5zdGF0ZWAuCgogIFRoaXMgaXMgbWVhbnQgdG8gYmUgdGhlIHVuaW9uIG9mIGFsbCB0aGUgc3RhdGVzIGFueSBydW5uZXIgY2FuIHB1dCBhCiAgcGlwZWxpbmUgaW4uIEN1cnJlbnRseSwgaXQgcmVwcmVzZW50cyB0aGUgdmFsdWVzIG9mIHRoZSBkYXRhZmxvdwogIEFQSSBKb2JTdGF0ZSBlbnVtLgogICIiIgogIFVOS05PV04gPSAnVU5LTk9XTicgICMgbm90IHNwZWNpZmllZAogIFNUQVJUSU5HID0gJ1NUQVJUSU5HJyAgIyBub3QgeWV0IHN0YXJ0ZWQKICBTVE9QUEVEID0gJ1NUT1BQRUQnICAjIHBhdXNlZCBvciBub3QgeWV0IHN0YXJ0ZWQKICBSVU5OSU5HID0gJ1JVTk5JTkcnICAjIGN1cnJlbnRseSBydW5uaW5nCiAgRE9ORSA9ICdET05FJyAgIyBzdWNjZXNzZnVsbHkgY29tcGxldGVkICh0ZXJtaW5hbCBzdGF0ZSkKICBGQUlMRUQgPSAnRkFJTEVEJyAgIyBmYWlsZWQgKHRlcm1pbmFsIHN0YXRlKQogIENBTkNFTExFRCA9ICdDQU5DRUxMRUQnICAjIGV4cGxpY2l0bHkgY2FuY2VsbGVkICh0ZXJtaW5hbCBzdGF0ZSkKICBVUERBVEVEID0gJ1VQREFURUQnICAjIHJlcGxhY2VkIGJ5IGFub3RoZXIgam9iICh0ZXJtaW5hbCBzdGF0ZSkKICBEUkFJTklORyA9ICdEUkFJTklORycgICMgc3RpbGwgcHJvY2Vzc2luZywgbm8gbG9uZ2VyIHJlYWRpbmcgZGF0YQogIERSQUlORUQgPSAnRFJBSU5FRCcgICMgZHJhaW5pbmcgY29tcGxldGVkICh0ZXJtaW5hbCBzdGF0ZSkKICBQRU5ESU5HID0gJ1BFTkRJTkcnICMgdGhlIGpvYiBoYXMgYmVlbiBjcmVhdGVkIGJ1dCBpcyBub3QgeWV0IHJ1bm5pbmcuCiAgQ0FOQ0VMTElORyA9ICdDQU5DRUxMSU5HJyAjIGpvYiBoYXMgYmVlbiBleHBsaWNpdGx5IGNhbmNlbGxlZCBhbmQgaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaW4gdGhlIHByb2Nlc3Mgb2Ygc3RvcHBpbmcKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIGlzX3Rlcm1pbmFsKGNscywgc3RhdGUpOgogICAgcmV0dXJuIHN0YXRlIGluIFtjbHMuU1RPUFBFRCwgY2xzLkRPTkUsIGNscy5GQUlMRUQsIGNscy5DQU5DRUxMRUQsCiAgICAgICAgICAgICAgICAgICAgIGNscy5VUERBVEVELCBjbHMuRFJBSU5FRF0KCgpjbGFzcyBQaXBlbGluZVJlc3VsdChvYmplY3QpOgogICIiIkEgOmNsYXNzOmBQaXBlbGluZVJlc3VsdGAgcHJvdmlkZXMgYWNjZXNzIHRvIGluZm8gYWJvdXQgYSBwaXBlbGluZS4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YXRlKToKICAgIHNlbGYuX3N0YXRlID0gc3RhdGUKCiAgQHByb3BlcnR5CiAgZGVmIHN0YXRlKHNlbGYpOgogICAgIiIiUmV0dXJuIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBwaXBlbGluZSBleGVjdXRpb24uIiIiCiAgICByZXR1cm4gc2VsZi5fc3RhdGUKCiAgZGVmIHdhaXRfdW50aWxfZmluaXNoKHNlbGYsIGR1cmF0aW9uPU5vbmUpOgogICAgIiIiV2FpdHMgdW50aWwgdGhlIHBpcGVsaW5lIGZpbmlzaGVzIGFuZCByZXR1cm5zIHRoZSBmaW5hbCBzdGF0dXMuCgogICAgQXJnczoKICAgICAgZHVyYXRpb24gKGludCk6IFRoZSB0aW1lIHRvIHdhaXQgKGluIG1pbGxpc2Vjb25kcykgZm9yIGpvYiB0byBmaW5pc2guCiAgICAgICAgSWYgaXQgaXMgc2V0IHRvIDpkYXRhOmBOb25lYCwgaXQgd2lsbCB3YWl0IGluZGVmaW5pdGVseSB1bnRpbCB0aGUgam9iCiAgICAgICAgaXMgZmluaXNoZWQuCgogICAgUmFpc2VzOgogICAgICB+ZXhjZXB0aW9ucy5JT0Vycm9yOiBJZiB0aGVyZSBpcyBhIHBlcnNpc3RlbnQgcHJvYmxlbSBnZXR0aW5nIGpvYgogICAgICAgIGluZm9ybWF0aW9uLgogICAgICB+ZXhjZXB0aW9ucy5Ob3RJbXBsZW1lbnRlZEVycm9yOiBJZiB0aGUgcnVubmVyIGRvZXMgbm90IHN1cHBvcnQgdGhpcwogICAgICAgIG9wZXJhdGlvbi4KCiAgICBSZXR1cm5zOgogICAgICBUaGUgZmluYWwgc3RhdGUgb2YgdGhlIHBpcGVsaW5lLCBvciA6ZGF0YTpgTm9uZWAgb24gdGltZW91dC4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgY2FuY2VsKHNlbGYpOgogICAgIiIiQ2FuY2VscyB0aGUgcGlwZWxpbmUgZXhlY3V0aW9uLgoKICAgIFJhaXNlczoKICAgICAgfmV4Y2VwdGlvbnMuSU9FcnJvcjogSWYgdGhlcmUgaXMgYSBwZXJzaXN0ZW50IHByb2JsZW0gZ2V0dGluZyBqb2IKICAgICAgICBpbmZvcm1hdGlvbi4KICAgICAgfmV4Y2VwdGlvbnMuTm90SW1wbGVtZW50ZWRFcnJvcjogSWYgdGhlIHJ1bm5lciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMKICAgICAgICBvcGVyYXRpb24uCgogICAgUmV0dXJuczoKICAgICAgVGhlIGZpbmFsIHN0YXRlIG9mIHRoZSBwaXBlbGluZS4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgbWV0cmljcyhzZWxmKToKICAgICIiIlJldHVybnMgOmNsYXNzOmB+YXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWMuTWV0cmljUmVzdWx0c2Agb2JqZWN0IHRvCiAgICBxdWVyeSBtZXRyaWNzIGZyb20gdGhlIHJ1bm5lci4KCiAgICBSYWlzZXM6CiAgICAgIH5leGNlcHRpb25zLk5vdEltcGxlbWVudGVkRXJyb3I6IElmIHRoZSBydW5uZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzCiAgICAgICAgb3BlcmF0aW9uLgogICAgIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1hcmd1bWVudAogIGRlZiBhZ2dyZWdhdGVkX3ZhbHVlcyhzZWxmLCBhZ2dyZWdhdG9yX29yX25hbWUpOgogICAgIiIiUmV0dXJuIGEgZGljdCBvZiBzdGVwIG5hbWVzIHRvIHZhbHVlcyBvZiB0aGUgQWdncmVnYXRvci4iIiIKICAgIGxvZ2dpbmcud2FybignJXMgZG9lcyBub3QgaW1wbGVtZW50IGFnZ3JlZ2F0ZWRfdmFsdWVzJywKICAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXykKICAgIHJldHVybiB7fQp9cu2CAAAoWA8AAABfZ2V0X3J1bm5lcl9tYXBYAwAAAGRlZksgSyaHWBUAAABQVmFsdWVDYWNoZS5pc19jYWNoZWRYAwAAAGRlZk0MAU0WAYdYFAAAAFBpcGVsaW5lUmVzdWx0LnN0YXRlWAMAAABkZWZNXAFNYAGHWBYAAABQVmFsdWVDYWNoZS5nZXRfcHZhbHVlWAMAAABkZWZNIAFNLQGHWBQAAABQaXBlbGluZVJ1bm5lci5hcHBseVgDAAAAZGVmS7JLxIdYIAAAAFBpcGVsaW5lUmVzdWx0LndhaXRfdW50aWxfZmluaXNoWAMAAABkZWZNYQFNcwGHWA0AAABjcmVhdGVfcnVubmVyWAMAAABkZWZLSUtwh1ggAAAAUGlwZWxpbmVSZXN1bHQuYWdncmVnYXRlZF92YWx1ZXNYAwAAAGRlZk2NAU2SAYdYGAAAAFBWYWx1ZUNhY2hlLmNsZWFyX3B2YWx1ZVgDAAAAZGVmTTEBTTUBh1gOAAAAUGlwZWxpbmVSZXN1bHRYBQAAAGNsYXNzTVYBTZIBh1gTAAAAUFZhbHVlQ2FjaGUuX19kZWxfX1gDAAAAZGVmS/BL9IdYEwAAAFBWYWx1ZUNhY2hlLl9fbGVuX19YAwAAAGRlZkv1S/eHWCEAAABQVmFsdWVDYWNoZS5nZXRfdW53aW5kb3dlZF9wdmFsdWVYAwAAAGRlZk0uAU0wAYdYFAAAAFBWYWx1ZUNhY2hlLl9faW5pdF9fWAMAAABkZWZL4Uvvh1gNAAAAUGlwZWxpbmVTdGF0ZVgFAAAAY2xhc3NNOwFNVAGHWC8AAABQaXBlbGluZVJ1bm5lci5ydW5fcGlwZWxpbmUuUnVuVmlzaXRvci5fX2luaXRfX1gDAAAAZGVmS6ZLqIdYCwAAAFBWYWx1ZUNhY2hlWAUAAABjbGFzc0vcTTkBh1gZAAAAUGlwZWxpbmVTdGF0ZS5pc190ZXJtaW5hbFgDAAAAZGVmTVABTVQBh1gVAAAAUGlwZWxpbmVSZXN1bHQuY2FuY2VsWAMAAABkZWZNdAFNgQGHWBcAAABQaXBlbGluZVJlc3VsdC5fX2luaXRfX1gDAAAAZGVmTVkBTVsBh1gPAAAAUFZhbHVlQ2FjaGUua2V5WAMAAABkZWZNNgFNOQGHWBgAAABQaXBlbGluZVJ1bm5lci5ydW5fYXN5bmNYAwAAAGRlZkuHS5mHWBgAAABQVmFsdWVDYWNoZS5jYWNoZV9vdXRwdXRYAwAAAGRlZk0XAU0fAYdYDgAAAFBpcGVsaW5lUnVubmVyWAUAAABjbGFzc0tyS9qHWBsAAABQaXBlbGluZVJ1bm5lci5ydW5fcGlwZWxpbmVYAwAAAGRlZkuaS7GHWBwAAABQaXBlbGluZVJ1bm5lci5ydW5fdHJhbnNmb3JtWAMAAABkZWZLyUvah1gYAAAAUFZhbHVlQ2FjaGUudG9fY2FjaGVfa2V5WAMAAABkZWZL+Ev6h1gfAAAAUGlwZWxpbmVSdW5uZXIuYXBwbHlfUFRyYW5zZm9ybVgDAAAAZGVmS8VLyIdYNgAAAFBpcGVsaW5lUnVubmVyLnJ1bl9waXBlbGluZS5SdW5WaXNpdG9yLnZpc2l0X3RyYW5zZm9ybVgDAAAAZGVmS6lLr4dYLAAAAFBWYWx1ZUNhY2hlLl9lbnN1cmVfcHZhbHVlX2hhc19yZWFsX3Byb2R1Y2VyWAMAAABkZWZL+00LAYdYJgAAAFBpcGVsaW5lUnVubmVyLnJ1bl9waXBlbGluZS5SdW5WaXNpdG9yWAUAAABjbGFzc0ukS6+HWBYAAABQaXBlbGluZVJlc3VsdC5tZXRyaWNzWAMAAABkZWZNggFNiwGHWBIAAABQaXBlbGluZVJ1bm5lci5ydW5YAwAAAGRlZkt+S4aHdX1y7oIAAChYHAAAAFBpcGVsaW5lUnVubmVyLnJ1bl90cmFuc2Zvcm1qN1sAAFgOAAAAUGlwZWxpbmVSZXN1bHRqN1sAAFgZAAAAUGlwZWxpbmVTdGF0ZS5pc190ZXJtaW5hbGo3WwAAWB8AAABQaXBlbGluZVJ1bm5lci5hcHBseV9QVHJhbnNmb3JtajdbAABYFAAAAFBpcGVsaW5lUnVubmVyLmFwcGx5ajdbAABYIAAAAFBpcGVsaW5lUmVzdWx0LndhaXRfdW50aWxfZmluaXNoajdbAABYFQAAAFBpcGVsaW5lUmVzdWx0LmNhbmNlbGo3WwAAWBgAAABQaXBlbGluZVJ1bm5lci5ydW5fYXN5bmNqN1sAAFgNAAAAUGlwZWxpbmVTdGF0ZWo3WwAAWA4AAABQaXBlbGluZVJ1bm5lcmo3WwAAWBIAAABQaXBlbGluZVJ1bm5lci5ydW5qN1sAAFgWAAAAUGlwZWxpbmVSZXN1bHQubWV0cmljc2o3WwAAWBsAAABQaXBlbGluZVJ1bm5lci5ydW5fcGlwZWxpbmVqN1sAAFggAAAAUGlwZWxpbmVSZXN1bHQuYWdncmVnYXRlZF92YWx1ZXNqN1sAAHVqfWkAAFgaAAAAYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXJy74IAAIWBcvCCAAB9cvGCAABidFUrYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5kYXRhc3RvcmVpbyhYyE4AACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiQSBjb25uZWN0b3IgZm9yIHJlYWRpbmcgZnJvbSBhbmQgd3JpdGluZyB0byBHb29nbGUgQ2xvdWQgRGF0YXN0b3JlIiIiCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CmZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KCmltcG9ydCBsb2dnaW5nCmltcG9ydCB0aW1lCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdApmcm9tIGJ1aWx0aW5zIGltcG9ydCByb3VuZAoKZnJvbSBhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxIGltcG9ydCBoZWxwZXIKZnJvbSBhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxIGltcG9ydCBxdWVyeV9zcGxpdHRlcgpmcm9tIGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEgaW1wb3J0IHV0aWwKZnJvbSBhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmFkYXB0aXZlX3Rocm90dGxlciBpbXBvcnQgQWRhcHRpdmVUaHJvdHRsZXIKZnJvbSBhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYyBpbXBvcnQgTWV0cmljcwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IENyZWF0ZQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IERvRm4KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBGbGF0TWFwCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgR3JvdXBCeUtleQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IE1hcApmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IFBhckRvCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgUFRyYW5zZm9ybQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbCBpbXBvcnQgVmFsdWVzCgojIFByb3RlY3QgYWdhaW5zdCBlbnZpcm9ubWVudHMgd2hlcmUgZGF0YXN0b3JlIGxpYnJhcnkgaXMgbm90IGF2YWlsYWJsZS4KIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KdHJ5OgogIGZyb20gZ29vZ2xlLmNsb3VkLnByb3RvLmRhdGFzdG9yZS52MSBpbXBvcnQgZGF0YXN0b3JlX3BiMgogIGZyb20gZ29vZ2xlZGF0YXN0b3JlIGltcG9ydCBoZWxwZXIgYXMgZGF0YXN0b3JlX2hlbHBlcgpleGNlcHQgSW1wb3J0RXJyb3I6CiAgcGFzcwojIHB5bGludDogZW5hYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCgoKX19hbGxfXyA9IFsnUmVhZEZyb21EYXRhc3RvcmUnLCAnV3JpdGVUb0RhdGFzdG9yZScsICdEZWxldGVGcm9tRGF0YXN0b3JlJ10KCgpjbGFzcyBSZWFkRnJvbURhdGFzdG9yZShQVHJhbnNmb3JtKToKICAiIiJBIGBgUFRyYW5zZm9ybWBgIGZvciByZWFkaW5nIGZyb20gR29vZ2xlIENsb3VkIERhdGFzdG9yZS4KCiAgVG8gcmVhZCBhIGBgUENvbGxlY3Rpb25bRW50aXR5XWBgIGZyb20gYSBDbG91ZCBEYXRhc3RvcmUgYGBRdWVyeWBgLCB1c2UKICBgYFJlYWRGcm9tRGF0YXN0b3JlYGAgdHJhbnNmb3JtIGJ5IHByb3ZpZGluZyBhIGBwcm9qZWN0YCBpZCBhbmQgYSBgcXVlcnlgIHRvCiAgcmVhZCBmcm9tLiBZb3UgY2FuIG9wdGlvbmFsbHkgcHJvdmlkZSBhIGBuYW1lc3BhY2VgIGFuZC9vciBzcGVjaWZ5IGhvdyBtYW55CiAgc3BsaXRzIHlvdSB3YW50IGZvciB0aGUgcXVlcnkgdGhyb3VnaCBgbnVtX3NwbGl0c2Agb3B0aW9uLgoKICBOb3RlOiBOb3JtYWxseSwgYSBydW5uZXIgd2lsbCByZWFkIGZyb20gQ2xvdWQgRGF0YXN0b3JlIGluIHBhcmFsbGVsIGFjcm9zcwogIG1hbnkgd29ya2Vycy4gSG93ZXZlciwgd2hlbiB0aGUgYHF1ZXJ5YCBpcyBjb25maWd1cmVkIHdpdGggYSBgbGltaXRgIG9yIGlmIHRoZQogIHF1ZXJ5IGNvbnRhaW5zIGluZXF1YWxpdHkgZmlsdGVycyBsaWtlIGBHUkVBVEVSX1RIQU4sIExFU1NfVEhBTmAgZXRjLiwgdGhlbgogIGFsbCB0aGUgcmV0dXJuZWQgcmVzdWx0cyB3aWxsIGJlIHJlYWQgYnkgYSBzaW5nbGUgd29ya2VyIGluIG9yZGVyIHRvIGVuc3VyZQogIGNvcnJlY3QgZGF0YS4gU2luY2UgZGF0YSBpcyByZWFkIGZyb20gYSBzaW5nbGUgd29ya2VyLCB0aGlzIGNvdWxkIGhhdmUKICBzaWduaWZpY2FudCBpbXBhY3Qgb24gdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBqb2IuCgogIFRoZSBzZW1hbnRpY3MgZm9yIHRoZSBxdWVyeSBzcGxpdHRpbmcgaXMgZGVmaW5lZCBiZWxvdzoKICAgIDEuIElmIGBudW1fc3BsaXRzYCBpcyBlcXVhbCB0byAwLCB0aGVuIHRoZSBudW1iZXIgb2Ygc3BsaXRzIHdpbGwgYmUgY2hvc2VuCiAgICBkeW5hbWljYWxseSBhdCBydW50aW1lIGJhc2VkIG9uIHRoZSBxdWVyeSBkYXRhIHNpemUuCgogICAgMi4gQW55IHZhbHVlIG9mIGBudW1fc3BsaXRzYCBncmVhdGVyIHRoYW4KICAgIGBSZWFkRnJvbURhdGFzdG9yZS5fTlVNX1FVRVJZX1NQTElUU19NQVhgIHdpbGwgYmUgY2FwcGVkIGF0IHRoYXQgdmFsdWUuCgogICAgMy4gSWYgdGhlIGBxdWVyeWAgaGFzIGEgdXNlciBsaW1pdCBzZXQsIG9yIGNvbnRhaW5zIGluZXF1YWxpdHkgZmlsdGVycywgdGhlbgogICAgYG51bV9zcGxpdHNgIHdpbGwgYmUgaWdub3JlZCBhbmQgbm8gc3BsaXQgd2lsbCBiZSBwZXJmb3JtZWQuCgogICAgNC4gVW5kZXIgY2VydGFpbiBjYXNlcyBDbG91ZCBEYXRhc3RvcmUgaXMgdW5hYmxlIHRvIHNwbGl0IHF1ZXJ5IHRvIHRoZQogICAgcmVxdWVzdGVkIG51bWJlciBvZiBzcGxpdHMuIEluIHN1Y2ggY2FzZXMgd2UganVzdCB1c2Ugd2hhdGV2ZXIgdGhlIENsb3VkCiAgICBEYXRhc3RvcmUgcmV0dXJucy4KCiAgU2VlIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL2RhdGFzdG9yZS8gZm9yIG1vcmUgZGV0YWlscyBvbiBHb29nbGUgQ2xvdWQKICBEYXRhc3RvcmUuCiAgIiIiCgogICMgQW4gdXBwZXIgYm91bmQgb24gdGhlIG51bWJlciBvZiBzcGxpdHMgZm9yIGEgcXVlcnkuCiAgX05VTV9RVUVSWV9TUExJVFNfTUFYID0gNTAwMDAKICAjIEEgbG93ZXIgYm91bmQgb24gdGhlIG51bWJlciBvZiBzcGxpdHMgZm9yIGEgcXVlcnkuIFRoaXMgaXMgdG8gZW5zdXJlIHRoYXQKICAjIHdlIHBhcmVsbGVsaXplIHRoZSBxdWVyeSBldmVuIHdoZW4gRGF0YXN0b3JlIHN0YXRpc3RpY3MgYXJlIG5vdCBhdmFpbGFibGUuCiAgX05VTV9RVUVSWV9TUExJVFNfTUlOID0gMTIKICAjIERlZmF1bHQgYnVuZGxlIHNpemUgb2YgNjRNQi4KICBfREVGQVVMVF9CVU5ETEVfU0laRV9CWVRFUyA9IDY0ICogMTAyNCAqIDEwMjQKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2plY3QsIHF1ZXJ5LCBuYW1lc3BhY2U9Tm9uZSwgbnVtX3NwbGl0cz0wKToKICAgICIiIkluaXRpYWxpemUgdGhlIGBSZWFkRnJvbURhdGFzdG9yZWAgdHJhbnNmb3JtLgoKICAgIEFyZ3M6CiAgICAgIHByb2plY3Q6IFRoZSBJRCBvZiB0aGUgcHJvamVjdCB0byByZWFkIGZyb20uCiAgICAgIHF1ZXJ5OiBDbG91ZCBEYXRhc3RvcmUgcXVlcnkgdG8gYmUgcmVhZCBmcm9tLgogICAgICBuYW1lc3BhY2U6IEFuIG9wdGlvbmFsIG5hbWVzcGFjZS4KICAgICAgbnVtX3NwbGl0czogTnVtYmVyIG9mIHNwbGl0cyBmb3IgdGhlIHF1ZXJ5LgogICAgIiIiCgogICAgIyBJbXBvcnQgaGVyZSB0byBhdm9pZCBhZGRpbmcgdGhlIGRlcGVuZGVuY3kgZm9yIGxvY2FsIHJ1bm5pbmcgc2NlbmFyaW9zLgogICAgdHJ5OgogICAgICAjIHB5bGludDogZGlzYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbgogICAgICBmcm9tIGFwaXRvb2xzLmJhc2UgaW1wb3J0IHB5ICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtdmFyaWFibGUKICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoCiAgICAgICAgICAnR29vZ2xlIENsb3VkIElPIG5vdCBhdmFpbGFibGUsICcKICAgICAgICAgICdwbGVhc2UgaW5zdGFsbCBhcGFjaGVfYmVhbVtnY3BdJykKCiAgICBsb2dnaW5nLndhcm5pbmcoJ2RhdGFzdG9yZWlvIHJlYWQgdHJhbnNmb3JtIGlzIGV4cGVyaW1lbnRhbC4nKQogICAgc3VwZXIoUmVhZEZyb21EYXRhc3RvcmUsIHNlbGYpLl9faW5pdF9fKCkKCiAgICBpZiBub3QgcHJvamVjdDoKICAgICAgcmFpc2UgVmFsdWVFcnJvcigiUHJvamVjdCBjYW5ub3QgYmUgZW1wdHkiKQogICAgaWYgbm90IHF1ZXJ5OgogICAgICByYWlzZSBWYWx1ZUVycm9yKCJRdWVyeSBjYW5ub3QgYmUgZW1wdHkiKQogICAgaWYgbnVtX3NwbGl0cyA8IDA6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm51bV9zcGxpdHMgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgMCIpCgogICAgc2VsZi5fcHJvamVjdCA9IHByb2plY3QKICAgICMgdXNpbmcgX25hbWVzcGFjZSBjb25mbGljdHMgd2l0aCBEaXNwbGF5RGF0YS5fbmFtZXNwYWNlCiAgICBzZWxmLl9kYXRhc3RvcmVfbmFtZXNwYWNlID0gbmFtZXNwYWNlCiAgICBzZWxmLl9xdWVyeSA9IHF1ZXJ5CiAgICBzZWxmLl9udW1fc3BsaXRzID0gbnVtX3NwbGl0cwoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgICMgVGhpcyBpcyBhIGNvbXBvc2l0ZSB0cmFuc2Zvcm0gaW52b2x2ZXMgdGhlIGZvbGxvd2luZzoKICAgICMgICAxLiBDcmVhdGUgYSBzaW5nbGV0b24gb2YgdGhlIHVzZXIgcHJvdmlkZWQgYHF1ZXJ5YCBhbmQgYXBwbHkgYSBgYFBhckRvYGAKICAgICMgICB0aGF0IHNwbGl0cyB0aGUgcXVlcnkgaW50byBgbnVtX3NwbGl0c2AgYW5kIGFzc2lnbiBlYWNoIHNwbGl0IHF1ZXJ5IGEKICAgICMgICB1bmlxdWUgYGludGAgYXMgdGhlIGtleS4gVGhlIHJlc3VsdGluZyBvdXRwdXQgaXMgb2YgdGhlIHR5cGUKICAgICMgICBgYFBDb2xsZWN0aW9uWyhpbnQsIFF1ZXJ5KV1gYC4KICAgICMKICAgICMgICBJZiB0aGUgdmFsdWUgb2YgYG51bV9zcGxpdHNgIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAwLCB0aGVuIHRoZQogICAgIyAgIG51bWJlciBvZiBzcGxpdHMgd2lsbCBiZSBjb21wdXRlZCBkeW5hbWljYWxseSBiYXNlZCBvbiB0aGUgc2l6ZSBvZiB0aGUKICAgICMgICBkYXRhIGZvciB0aGUgYHF1ZXJ5YC4KICAgICMKICAgICMgICAyLiBUaGUgcmVzdWx0aW5nIGBgUENvbGxlY3Rpb25gYCBpcyBzaGFyZGVkIHVzaW5nIGEgYGBHcm91cEJ5S2V5YGAKICAgICMgICBvcGVyYXRpb24uIFRoZSBxdWVyaWVzIGFyZSBleHRyYWN0ZWQgZnJvbSB0aGUgKGludCwgSXRlcmFibGVbUXVlcnldKSBhbmQKICAgICMgICBmbGF0dGVuZWQgdG8gb3V0cHV0IGEgYGBQQ29sbGVjdGlvbltRdWVyeV1gYC4KICAgICMKICAgICMgICAzLiBJbiB0aGUgdGhpcmQgc3RlcCwgYSBgYFBhckRvYGAgcmVhZHMgZW50aXRpZXMgZm9yIGVhY2ggcXVlcnkgYW5kCiAgICAjICAgb3V0cHV0cyBhIGBgUENvbGxlY3Rpb25bRW50aXR5XWBgLgoKICAgIHF1ZXJpZXMgPSAocGNvbGwucGlwZWxpbmUKICAgICAgICAgICAgICAgfCAnVXNlclF1ZXJ5JyA+PiBDcmVhdGUoW3NlbGYuX3F1ZXJ5XSkKICAgICAgICAgICAgICAgfCAnU3BsaXRRdWVyeScgPj4gUGFyRG8oUmVhZEZyb21EYXRhc3RvcmUuU3BsaXRRdWVyeUZuKAogICAgICAgICAgICAgICAgICAgc2VsZi5fcHJvamVjdCwgc2VsZi5fcXVlcnksIHNlbGYuX2RhdGFzdG9yZV9uYW1lc3BhY2UsCiAgICAgICAgICAgICAgICAgICBzZWxmLl9udW1fc3BsaXRzKSkpCgogICAgc2hhcmRlZF9xdWVyaWVzID0gKHF1ZXJpZXMKICAgICAgICAgICAgICAgICAgICAgICB8IEdyb3VwQnlLZXkoKQogICAgICAgICAgICAgICAgICAgICAgIHwgVmFsdWVzKCkKICAgICAgICAgICAgICAgICAgICAgICB8ICdGbGF0dGVuJyA+PiBGbGF0TWFwKGxhbWJkYSB4OiB4KSkKCiAgICBlbnRpdGllcyA9IHNoYXJkZWRfcXVlcmllcyB8ICdSZWFkJyA+PiBQYXJEbygKICAgICAgICBSZWFkRnJvbURhdGFzdG9yZS5SZWFkRm4oc2VsZi5fcHJvamVjdCwgc2VsZi5fZGF0YXN0b3JlX25hbWVzcGFjZSkpCiAgICByZXR1cm4gZW50aXRpZXMKCiAgZGVmIGRpc3BsYXlfZGF0YShzZWxmKToKICAgIGRpc3BfZGF0YSA9IHsncHJvamVjdCc6IHNlbGYuX3Byb2plY3QsCiAgICAgICAgICAgICAgICAgJ3F1ZXJ5Jzogc3RyKHNlbGYuX3F1ZXJ5KSwKICAgICAgICAgICAgICAgICAnbnVtX3NwbGl0cyc6IHNlbGYuX251bV9zcGxpdHN9CgogICAgaWYgc2VsZi5fZGF0YXN0b3JlX25hbWVzcGFjZSBpcyBub3QgTm9uZToKICAgICAgZGlzcF9kYXRhWyduYW1lc3BhY2UnXSA9IHNlbGYuX2RhdGFzdG9yZV9uYW1lc3BhY2UKCiAgICByZXR1cm4gZGlzcF9kYXRhCgogIGNsYXNzIFNwbGl0UXVlcnlGbihEb0ZuKToKICAgICIiIkEgYERvRm5gIHRoYXQgc3BsaXRzIGEgZ2l2ZW4gcXVlcnkgaW50byBtdWx0aXBsZSBzdWItcXVlcmllcy4iIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9qZWN0LCBxdWVyeSwgbmFtZXNwYWNlLCBudW1fc3BsaXRzKToKICAgICAgc3VwZXIoUmVhZEZyb21EYXRhc3RvcmUuU3BsaXRRdWVyeUZuLCBzZWxmKS5fX2luaXRfXygpCiAgICAgIHNlbGYuX2RhdGFzdG9yZSA9IE5vbmUKICAgICAgc2VsZi5fcHJvamVjdCA9IHByb2plY3QKICAgICAgc2VsZi5fZGF0YXN0b3JlX25hbWVzcGFjZSA9IG5hbWVzcGFjZQogICAgICBzZWxmLl9xdWVyeSA9IHF1ZXJ5CiAgICAgIHNlbGYuX251bV9zcGxpdHMgPSBudW1fc3BsaXRzCgogICAgZGVmIHN0YXJ0X2J1bmRsZShzZWxmKToKICAgICAgc2VsZi5fZGF0YXN0b3JlID0gaGVscGVyLmdldF9kYXRhc3RvcmUoc2VsZi5fcHJvamVjdCkKCiAgICBkZWYgcHJvY2VzcyhzZWxmLCBxdWVyeSwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgIyBkaXN0aW5jdCBrZXkgdG8gYmUgdXNlZCB0byBncm91cCBxdWVyeSBzcGxpdHMuCiAgICAgIGtleSA9IDEKCiAgICAgICMgSWYgcXVlcnkgaGFzIGEgdXNlciBzZXQgbGltaXQsIHRoZW4gdGhlIHF1ZXJ5IGNhbm5vdCBiZSBzcGxpdC4KICAgICAgaWYgcXVlcnkuSGFzRmllbGQoJ2xpbWl0Jyk6CiAgICAgICAgcmV0dXJuIFsoa2V5LCBxdWVyeSldCgogICAgICAjIENvbXB1dGUgdGhlIGVzdGltYXRlZCBudW1TcGxpdHMgaWYgbm90IHNwZWNpZmllZCBieSB0aGUgdXNlci4KICAgICAgaWYgc2VsZi5fbnVtX3NwbGl0cyA9PSAwOgogICAgICAgIGVzdGltYXRlZF9udW1fc3BsaXRzID0gUmVhZEZyb21EYXRhc3RvcmUuZ2V0X2VzdGltYXRlZF9udW1fc3BsaXRzKAogICAgICAgICAgICBzZWxmLl9wcm9qZWN0LCBzZWxmLl9kYXRhc3RvcmVfbmFtZXNwYWNlLCBzZWxmLl9xdWVyeSwKICAgICAgICAgICAgc2VsZi5fZGF0YXN0b3JlKQogICAgICBlbHNlOgogICAgICAgIGVzdGltYXRlZF9udW1fc3BsaXRzID0gc2VsZi5fbnVtX3NwbGl0cwoKICAgICAgbG9nZ2luZy5pbmZvKCJTcGxpdHRpbmcgdGhlIHF1ZXJ5IGludG8gJWQgc3BsaXRzIiwgZXN0aW1hdGVkX251bV9zcGxpdHMpCiAgICAgIHRyeToKICAgICAgICBxdWVyeV9zcGxpdHMgPSBxdWVyeV9zcGxpdHRlci5nZXRfc3BsaXRzKAogICAgICAgICAgICBzZWxmLl9kYXRhc3RvcmUsIHF1ZXJ5LCBlc3RpbWF0ZWRfbnVtX3NwbGl0cywKICAgICAgICAgICAgaGVscGVyLm1ha2VfcGFydGl0aW9uKHNlbGYuX3Byb2plY3QsIHNlbGYuX2RhdGFzdG9yZV9uYW1lc3BhY2UpKQogICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgIGxvZ2dpbmcud2FybmluZygiVW5hYmxlIHRvIHBhcmFsbGVsaXplIHRoZSBnaXZlbiBxdWVyeTogJXMiLCBxdWVyeSwKICAgICAgICAgICAgICAgICAgICAgICAgZXhjX2luZm89VHJ1ZSkKICAgICAgICBxdWVyeV9zcGxpdHMgPSBbcXVlcnldCgogICAgICBzaGFyZGVkX3F1ZXJ5X3NwbGl0cyA9IFtdCiAgICAgIGZvciBzcGxpdF9xdWVyeSBpbiBxdWVyeV9zcGxpdHM6CiAgICAgICAgc2hhcmRlZF9xdWVyeV9zcGxpdHMuYXBwZW5kKChrZXksIHNwbGl0X3F1ZXJ5KSkKICAgICAgICBrZXkgKz0gMQoKICAgICAgcmV0dXJuIHNoYXJkZWRfcXVlcnlfc3BsaXRzCgogICAgZGVmIGRpc3BsYXlfZGF0YShzZWxmKToKICAgICAgZGlzcF9kYXRhID0geydwcm9qZWN0Jzogc2VsZi5fcHJvamVjdCwKICAgICAgICAgICAgICAgICAgICdxdWVyeSc6IHN0cihzZWxmLl9xdWVyeSksCiAgICAgICAgICAgICAgICAgICAnbnVtX3NwbGl0cyc6IHNlbGYuX251bV9zcGxpdHN9CgogICAgICBpZiBzZWxmLl9kYXRhc3RvcmVfbmFtZXNwYWNlIGlzIG5vdCBOb25lOgogICAgICAgIGRpc3BfZGF0YVsnbmFtZXNwYWNlJ10gPSBzZWxmLl9kYXRhc3RvcmVfbmFtZXNwYWNlCgogICAgICByZXR1cm4gZGlzcF9kYXRhCgogIGNsYXNzIFJlYWRGbihEb0ZuKToKICAgICIiIkEgRG9GbiB0aGF0IHJlYWRzIGVudGl0aWVzIGZyb20gQ2xvdWQgRGF0YXN0b3JlLCBmb3IgYSBnaXZlbiBxdWVyeS4iIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9qZWN0LCBuYW1lc3BhY2U9Tm9uZSk6CiAgICAgIHN1cGVyKFJlYWRGcm9tRGF0YXN0b3JlLlJlYWRGbiwgc2VsZikuX19pbml0X18oKQogICAgICBzZWxmLl9wcm9qZWN0ID0gcHJvamVjdAogICAgICBzZWxmLl9kYXRhc3RvcmVfbmFtZXNwYWNlID0gbmFtZXNwYWNlCiAgICAgIHNlbGYuX2RhdGFzdG9yZSA9IE5vbmUKCiAgICBkZWYgc3RhcnRfYnVuZGxlKHNlbGYpOgogICAgICBzZWxmLl9kYXRhc3RvcmUgPSBoZWxwZXIuZ2V0X2RhdGFzdG9yZShzZWxmLl9wcm9qZWN0KQoKICAgIGRlZiBwcm9jZXNzKHNlbGYsIHF1ZXJ5LCAqYXJncywgKiprd2FyZ3MpOgogICAgICAjIFJldHVybnMgYW4gaXRlcmF0b3Igb2YgZW50aXRpZXMgdGhhdCByZWFkcyBpbiBiYXRjaGVzLgogICAgICBlbnRpdGllcyA9IGhlbHBlci5mZXRjaF9lbnRpdGllcyhzZWxmLl9wcm9qZWN0LCBzZWxmLl9kYXRhc3RvcmVfbmFtZXNwYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeSwgc2VsZi5fZGF0YXN0b3JlKQogICAgICByZXR1cm4gZW50aXRpZXMKCiAgICBkZWYgZGlzcGxheV9kYXRhKHNlbGYpOgogICAgICBkaXNwX2RhdGEgPSB7J3Byb2plY3QnOiBzZWxmLl9wcm9qZWN0fQoKICAgICAgaWYgc2VsZi5fZGF0YXN0b3JlX25hbWVzcGFjZSBpcyBub3QgTm9uZToKICAgICAgICBkaXNwX2RhdGFbJ25hbWVzcGFjZSddID0gc2VsZi5fZGF0YXN0b3JlX25hbWVzcGFjZQoKICAgICAgcmV0dXJuIGRpc3BfZGF0YQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIHF1ZXJ5X2xhdGVzdF9zdGF0aXN0aWNzX3RpbWVzdGFtcChwcm9qZWN0LCBuYW1lc3BhY2UsIGRhdGFzdG9yZSk6CiAgICAiIiJGZXRjaGVzIHRoZSBsYXRlc3QgdGltZXN0YW1wIG9mIHN0YXRpc3RpY3MgZnJvbSBDbG91ZCBEYXRhc3RvcmUuCgogICAgQ2xvdWQgRGF0YXN0b3JlIHN5c3RlbSB0YWJsZXMgd2l0aCBzdGF0aXN0aWNzIGFyZSBwZXJpb2RpY2FsbHkgdXBkYXRlZC4KICAgIFRoaXMgbWV0aG9kIGZldGhlcyB0aGUgbGF0ZXN0IHRpbWVzdGFtcCAoaW4gbWljcm9zZWNvbmRzKSBvZiBzdGF0aXN0aWNzCiAgICB1cGRhdGUgdXNpbmcgdGhlIGBfX1N0YXRfVG90YWxfX2AgdGFibGUuCiAgICAiIiIKICAgIHF1ZXJ5ID0gaGVscGVyLm1ha2VfbGF0ZXN0X3RpbWVzdGFtcF9xdWVyeShuYW1lc3BhY2UpCiAgICByZXEgPSBoZWxwZXIubWFrZV9yZXF1ZXN0KHByb2plY3QsIG5hbWVzcGFjZSwgcXVlcnkpCiAgICByZXNwID0gZGF0YXN0b3JlLnJ1bl9xdWVyeShyZXEpCiAgICBpZiBub3QgcmVzcC5iYXRjaC5lbnRpdHlfcmVzdWx0czoKICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJEYXRhc3RvcmUgdG90YWwgc3RhdGlzdGljcyB1bmF2YWlsYWJsZS4iKQoKICAgIGVudGl0eSA9IHJlc3AuYmF0Y2guZW50aXR5X3Jlc3VsdHNbMF0uZW50aXR5CiAgICByZXR1cm4gZGF0YXN0b3JlX2hlbHBlci5taWNyb3NfZnJvbV90aW1lc3RhbXAoCiAgICAgICAgZW50aXR5LnByb3BlcnRpZXNbJ3RpbWVzdGFtcCddLnRpbWVzdGFtcF92YWx1ZSkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBnZXRfZXN0aW1hdGVkX3NpemVfYnl0ZXMocHJvamVjdCwgbmFtZXNwYWNlLCBxdWVyeSwgZGF0YXN0b3JlKToKICAgICIiIkdldCB0aGUgZXN0aW1hdGVkIHNpemUgb2YgdGhlIGRhdGEgcmV0dXJuZWQgYnkgdGhlIGdpdmVuIHF1ZXJ5LgoKICAgIENsb3VkIERhdGFzdG9yZSBwcm92aWRlcyBubyB3YXkgdG8gZ2V0IGEgZ29vZCBlc3RpbWF0ZSBvZiBob3cgbGFyZ2UgdGhlCiAgICByZXN1bHQgb2YgYSBxdWVyeSBpcyBnb2luZyB0byBiZS4gSGVuY2Ugd2UgdXNlIHRoZSBfX1N0YXRfS2luZF9fIHN5c3RlbQogICAgdGFibGUgdG8gZ2V0IHNpemUgb2YgdGhlIGVudGlyZSBraW5kIGFzIGFuIGFwcHJveGltYXRlIGVzdGltYXRlLCBhc3N1bWluZwogICAgZXhhY3RseSAxIGtpbmQgaXMgc3BlY2lmaWVkIGluIHRoZSBxdWVyeS4KICAgIFNlZSBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vZGF0YXN0b3JlL2RvY3MvY29uY2VwdHMvc3RhdHMuCiAgICAiIiIKICAgIGtpbmQgPSBxdWVyeS5raW5kWzBdLm5hbWUKICAgIGxhdGVzdF90aW1lc3RhbXAgPSBSZWFkRnJvbURhdGFzdG9yZS5xdWVyeV9sYXRlc3Rfc3RhdGlzdGljc190aW1lc3RhbXAoCiAgICAgICAgcHJvamVjdCwgbmFtZXNwYWNlLCBkYXRhc3RvcmUpCiAgICBsb2dnaW5nLmluZm8oJ0xhdGVzdCBzdGF0cyB0aW1lc3RhbXAgZm9yIGtpbmQgJXMgaXMgJXMnLAogICAgICAgICAgICAgICAgIGtpbmQsIGxhdGVzdF90aW1lc3RhbXApCgogICAga2luZF9zdGF0c19xdWVyeSA9ICgKICAgICAgICBoZWxwZXIubWFrZV9raW5kX3N0YXRzX3F1ZXJ5KG5hbWVzcGFjZSwga2luZCwgbGF0ZXN0X3RpbWVzdGFtcCkpCgogICAgcmVxID0gaGVscGVyLm1ha2VfcmVxdWVzdChwcm9qZWN0LCBuYW1lc3BhY2UsIGtpbmRfc3RhdHNfcXVlcnkpCiAgICByZXNwID0gZGF0YXN0b3JlLnJ1bl9xdWVyeShyZXEpCiAgICBpZiBub3QgcmVzcC5iYXRjaC5lbnRpdHlfcmVzdWx0czoKICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJEYXRhc3RvcmUgc3RhdGlzdGljcyBmb3Iga2luZCAlcyB1bmF2YWlsYWJsZSIgJSBraW5kKQoKICAgIGVudGl0eSA9IHJlc3AuYmF0Y2guZW50aXR5X3Jlc3VsdHNbMF0uZW50aXR5CiAgICByZXR1cm4gZGF0YXN0b3JlX2hlbHBlci5nZXRfdmFsdWUoZW50aXR5LnByb3BlcnRpZXNbJ2VudGl0eV9ieXRlcyddKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGdldF9lc3RpbWF0ZWRfbnVtX3NwbGl0cyhwcm9qZWN0LCBuYW1lc3BhY2UsIHF1ZXJ5LCBkYXRhc3RvcmUpOgogICAgIiIiQ29tcHV0ZXMgdGhlIG51bWJlciBvZiBzcGxpdHMgdG8gYmUgcGVyZm9ybWVkIG9uIHRoZSBnaXZlbiBxdWVyeS4iIiIKICAgIHRyeToKICAgICAgZXN0aW1hdGVkX3NpemVfYnl0ZXMgPSBSZWFkRnJvbURhdGFzdG9yZS5nZXRfZXN0aW1hdGVkX3NpemVfYnl0ZXMoCiAgICAgICAgICBwcm9qZWN0LCBuYW1lc3BhY2UsIHF1ZXJ5LCBkYXRhc3RvcmUpCiAgICAgIGxvZ2dpbmcuaW5mbygnRXN0aW1hdGVkIHNpemUgYnl0ZXMgZm9yIHF1ZXJ5OiAlcycsIGVzdGltYXRlZF9zaXplX2J5dGVzKQogICAgICBudW1fc3BsaXRzID0gaW50KG1pbihSZWFkRnJvbURhdGFzdG9yZS5fTlVNX1FVRVJZX1NQTElUU19NQVgsIHJvdW5kKAogICAgICAgICAgKGZsb2F0KGVzdGltYXRlZF9zaXplX2J5dGVzKSAvCiAgICAgICAgICAgUmVhZEZyb21EYXRhc3RvcmUuX0RFRkFVTFRfQlVORExFX1NJWkVfQllURVMpKSkpCgogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICBsb2dnaW5nLndhcm5pbmcoJ0ZhaWxlZCB0byBmZXRjaCBlc3RpbWF0ZWQgc2l6ZSBieXRlczogJXMnLCBlKQogICAgICAjIEZhbGxiYWNrIGluIGNhc2UgZXN0aW1hdGVkIHNpemUgaXMgdW5hdmFpbGFibGUuCiAgICAgIG51bV9zcGxpdHMgPSBSZWFkRnJvbURhdGFzdG9yZS5fTlVNX1FVRVJZX1NQTElUU19NSU4KCiAgICByZXR1cm4gbWF4KG51bV9zcGxpdHMsIFJlYWRGcm9tRGF0YXN0b3JlLl9OVU1fUVVFUllfU1BMSVRTX01JTikKCgpjbGFzcyBfTXV0YXRlKFBUcmFuc2Zvcm0pOgogICIiIkEgYGBQVHJhbnNmb3JtYGAgdGhhdCB3cml0ZXMgbXV0YXRpb25zIHRvIENsb3VkIERhdGFzdG9yZS4KCiAgT25seSBpZGVtcG90ZW50IERhdGFzdG9yZSBtdXRhdGlvbiBvcGVyYXRpb25zICh1cHNlcnQgYW5kIGRlbGV0ZSkgYXJlCiAgc3VwcG9ydGVkLCBhcyB0aGUgY29tbWl0cyBhcmUgcmV0cmllZCB3aGVuIGZhaWx1cmVzIG9jY3VyLgogICIiIgoKICBfV1JJVEVfQkFUQ0hfSU5JVElBTF9TSVpFID0gMjAwCiAgIyBNYXggYWxsb3dlZCBEYXRhc3RvcmUgd3JpdGVzIHBlciBiYXRjaCwgYW5kIG1heCBieXRlcyBwZXIgYmF0Y2guCiAgIyBOb3RlIHRoYXQgdGhlIG1heCBieXRlcyBwZXIgYmF0Y2ggc2V0IGhlcmUgaXMgbG93ZXIgdGhhbiB0aGUgMTBNQiBsaW1pdAogICMgYWN0dWFsbHkgZW5mb3JjZWQgYnkgdGhlIEFQSSwgdG8gbGVhdmUgc3BhY2UgZm9yIHRoZSBDb21taXRSZXF1ZXN0IHdyYXBwZXIKICAjIGFyb3VuZCB0aGUgbXV0YXRpb25zLgogIF9XUklURV9CQVRDSF9NQVhfU0laRSA9IDUwMAogIF9XUklURV9CQVRDSF9NQVhfQllURVNfU0laRSA9IDkwMDAwMDAKICBfV1JJVEVfQkFUQ0hfTUlOX1NJWkUgPSAxMAogIF9XUklURV9CQVRDSF9UQVJHRVRfTEFURU5DWV9NUyA9IDUwMDAKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2plY3QsIG11dGF0aW9uX2ZuKToKICAgICIiIkluaXRpYWxpemVzIGEgTXV0YXRlIHRyYW5zZm9ybS4KCiAgICAgQXJnczoKICAgICAgIHByb2plY3Q6IFRoZSBQcm9qZWN0IElECiAgICAgICBtdXRhdGlvbl9mbjogQSBmdW5jdGlvbiB0aGF0IGNvbnZlcnRzIGBlbnRpdGllc2Agb3IgYGtleXNgIHRvCiAgICAgICAgIGBtdXRhdGlvbnNgLgogICAgICIiIgogICAgc2VsZi5fcHJvamVjdCA9IHByb2plY3QKICAgIHNlbGYuX211dGF0aW9uX2ZuID0gbXV0YXRpb25fZm4KICAgIGxvZ2dpbmcud2FybmluZygnZGF0YXN0b3JlaW8gd3JpdGUgdHJhbnNmb3JtIGlzIGV4cGVyaW1lbnRhbC4nKQoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgIHJldHVybiAocGNvbGwKICAgICAgICAgICAgfCAnQ29udmVydCB0byBNdXRhdGlvbicgPj4gTWFwKHNlbGYuX211dGF0aW9uX2ZuKQogICAgICAgICAgICB8ICdXcml0ZSBNdXRhdGlvbiB0byBEYXRhc3RvcmUnID4+IFBhckRvKF9NdXRhdGUuRGF0YXN0b3JlV3JpdGVGbigKICAgICAgICAgICAgICAgIHNlbGYuX3Byb2plY3QpKSkKCiAgZGVmIGRpc3BsYXlfZGF0YShzZWxmKToKICAgIHJldHVybiB7J3Byb2plY3QnOiBzZWxmLl9wcm9qZWN0LAogICAgICAgICAgICAnbXV0YXRpb25fZm4nOiBzZWxmLl9tdXRhdGlvbl9mbi5fX2NsYXNzX18uX19uYW1lX199CgogIGNsYXNzIF9EeW5hbWljQmF0Y2hTaXplcihvYmplY3QpOgogICAgIiIiRGV0ZXJtaW5lcyByZXF1ZXN0IHNpemVzIGZvciBmdXR1cmUgRGF0YXN0b3JlIFJQQ1MuIiIiCiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgIHNlbGYuX2NvbW1pdF90aW1lX3Blcl9lbnRpdHlfbXMgPSB1dGlsLk1vdmluZ1N1bSh3aW5kb3dfbXM9MTIwMDAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVja2V0X21zPTEwMDAwKQoKICAgIGRlZiBnZXRfYmF0Y2hfc2l6ZShzZWxmLCBub3cpOgogICAgICAiIiJSZXR1cm5zIHRoZSByZWNvbW1lbmRlZCBzaXplIGZvciBkYXRhc3RvcmUgUlBDcyBhdCB0aGlzIHRpbWUuIiIiCiAgICAgIGlmIG5vdCBzZWxmLl9jb21taXRfdGltZV9wZXJfZW50aXR5X21zLmhhc19kYXRhKG5vdyk6CiAgICAgICAgcmV0dXJuIF9NdXRhdGUuX1dSSVRFX0JBVENIX0lOSVRJQUxfU0laRQoKICAgICAgcmVjZW50X21lYW5fbGF0ZW5jeV9tcyA9IChzZWxmLl9jb21taXRfdGltZV9wZXJfZW50aXR5X21zLnN1bShub3cpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VsZi5fY29tbWl0X3RpbWVfcGVyX2VudGl0eV9tcy5jb3VudChub3cpKQogICAgICByZXR1cm4gbWF4KF9NdXRhdGUuX1dSSVRFX0JBVENIX01JTl9TSVpFLAogICAgICAgICAgICAgICAgIG1pbihfTXV0YXRlLl9XUklURV9CQVRDSF9NQVhfU0laRSwKICAgICAgICAgICAgICAgICAgICAgX011dGF0ZS5fV1JJVEVfQkFUQ0hfVEFSR0VUX0xBVEVOQ1lfTVMKICAgICAgICAgICAgICAgICAgICAgLy8gbWF4KHJlY2VudF9tZWFuX2xhdGVuY3lfbXMsIDEpCiAgICAgICAgICAgICAgICAgICAgKSkKCiAgICBkZWYgcmVwb3J0X2xhdGVuY3koc2VsZiwgbm93LCBsYXRlbmN5X21zLCBudW1fbXV0YXRpb25zKToKICAgICAgIiIiUmVwb3J0cyB0aGUgbGF0ZW5jeSBvZiBhbiBSUEMgdG8gRGF0YXN0b3JlLgoKICAgICAgQXJnczoKICAgICAgICBub3c6IGRvdWJsZSwgY29tcGxldGlvbiB0aW1lIG9mIHRoZSBSUEMgYXMgc2Vjb25kcyBzaW5jZSB0aGUgZXBvY2guCiAgICAgICAgbGF0ZW5jeV9tczogZG91YmxlLCB0aGUgb2JzZXJ2ZWQgbGF0ZW5jeSBpbiBtaWxsaXNlY29uZHMgZm9yIHRoaXMgUlBDLgogICAgICAgIG51bV9tdXRhdGlvbnM6IGludCwgbnVtYmVyIG9mIG11dGF0aW9ucyBjb250YWluZWQgaW4gdGhlIFJQQy4KICAgICAgIiIiCiAgICAgIHNlbGYuX2NvbW1pdF90aW1lX3Blcl9lbnRpdHlfbXMuYWRkKG5vdywgbGF0ZW5jeV9tcyAvIG51bV9tdXRhdGlvbnMpCgogIGNsYXNzIERhdGFzdG9yZVdyaXRlRm4oRG9Gbik6CiAgICAiIiJBIGBgRG9GbmBgIHRoYXQgd3JpdGUgbXV0YXRpb25zIHRvIERhdGFzdG9yZS4KCiAgICBNdXRhdGlvbnMgYXJlIHdyaXR0ZW4gaW4gYmF0Y2hlcywgd2hlcmUgdGhlIG1heGltdW0gYmF0Y2ggc2l6ZSBpcwogICAgYF9NdXRhdGUuX1dSSVRFX0JBVENIX1NJWkVgLgoKICAgIENvbW1pdHMgYXJlIG5vbi10cmFuc2FjdGlvbmFsLiBJZiBhIGNvbW1pdCBmYWlscyBiZWNhdXNlIG9mIGEgY29uZmxpY3Qgb3ZlcgogICAgYW4gZW50aXR5IGdyb3VwLCB0aGUgY29tbWl0IHdpbGwgYmUgcmV0cmllZC4gVGhpcyBtZWFucyB0aGF0IHRoZSBtdXRhdGlvbgogICAgc2hvdWxkIGJlIGlkZW1wb3RlbnQgKGB1cHNlcnRgIGFuZCBgZGVsZXRlYCBtdXRhdGlvbnMpIHRvIHByZXZlbnQgZHVwbGljYXRlCiAgICBkYXRhIG9yIGVycm9ycy4KICAgICIiIgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2plY3QsIGZpeGVkX2JhdGNoX3NpemU9Tm9uZSk6CiAgICAgICIiIgogICAgICBBcmdzOgogICAgICAgIHByb2plY3Q6IHN0ciwgdGhlIGNsb3VkIHByb2plY3QgaWQuCiAgICAgICAgZml4ZWRfYmF0Y2hfc2l6ZTogaW50LCBmb3IgdGVzdGluZyBvbmx5LCB0aGlzIGZvcmNlcyBhbGwgYmF0Y2hlcyBvZgogICAgICAgICAgIHdyaXRlcyB0byBiZSBhIGZpeGVkIHNpemUsIGZvciBlYXNpZXIgdW5pdHRlc3RpbmcuCiAgICAgICIiIgogICAgICBzZWxmLl9wcm9qZWN0ID0gcHJvamVjdAogICAgICBzZWxmLl9kYXRhc3RvcmUgPSBOb25lCiAgICAgIHNlbGYuX2ZpeGVkX2JhdGNoX3NpemUgPSBmaXhlZF9iYXRjaF9zaXplCiAgICAgIHNlbGYuX3JwY19zdWNjZXNzZXMgPSBNZXRyaWNzLmNvdW50ZXIoCiAgICAgICAgICBfTXV0YXRlLkRhdGFzdG9yZVdyaXRlRm4sICJkYXRhc3RvcmVScGNTdWNjZXNzZXMiKQogICAgICBzZWxmLl9ycGNfZXJyb3JzID0gTWV0cmljcy5jb3VudGVyKAogICAgICAgICAgX011dGF0ZS5EYXRhc3RvcmVXcml0ZUZuLCAiZGF0YXN0b3JlUnBjRXJyb3JzIikKICAgICAgc2VsZi5fdGhyb3R0bGVkX3NlY3MgPSBNZXRyaWNzLmNvdW50ZXIoCiAgICAgICAgICBfTXV0YXRlLkRhdGFzdG9yZVdyaXRlRm4sICJjdW11bGF0aXZlVGhyb3R0bGluZ1NlY29uZHMiKQogICAgICBzZWxmLl90aHJvdHRsZXIgPSBBZGFwdGl2ZVRocm90dGxlcih3aW5kb3dfbXM9MTIwMDAwLCBidWNrZXRfbXM9MTAwMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxvYWRfcmF0aW89MS4yNSkKCiAgICBkZWYgX3VwZGF0ZV9ycGNfc3RhdHMoc2VsZiwgc3VjY2Vzc2VzPTAsIGVycm9ycz0wLCB0aHJvdHRsZWRfc2Vjcz0wKToKICAgICAgc2VsZi5fcnBjX3N1Y2Nlc3Nlcy5pbmMoc3VjY2Vzc2VzKQogICAgICBzZWxmLl9ycGNfZXJyb3JzLmluYyhlcnJvcnMpCiAgICAgIHNlbGYuX3Rocm90dGxlZF9zZWNzLmluYyh0aHJvdHRsZWRfc2VjcykKCiAgICBkZWYgc3RhcnRfYnVuZGxlKHNlbGYpOgogICAgICBzZWxmLl9tdXRhdGlvbnMgPSBbXQogICAgICBzZWxmLl9tdXRhdGlvbnNfc2l6ZSA9IDAKICAgICAgc2VsZi5fZGF0YXN0b3JlID0gaGVscGVyLmdldF9kYXRhc3RvcmUoc2VsZi5fcHJvamVjdCkKICAgICAgaWYgc2VsZi5fZml4ZWRfYmF0Y2hfc2l6ZToKICAgICAgICBzZWxmLl90YXJnZXRfYmF0Y2hfc2l6ZSA9IHNlbGYuX2ZpeGVkX2JhdGNoX3NpemUKICAgICAgZWxzZToKICAgICAgICBzZWxmLl9iYXRjaF9zaXplciA9IF9NdXRhdGUuX0R5bmFtaWNCYXRjaFNpemVyKCkKICAgICAgICBzZWxmLl90YXJnZXRfYmF0Y2hfc2l6ZSA9IHNlbGYuX2JhdGNoX3NpemVyLmdldF9iYXRjaF9zaXplKAogICAgICAgICAgICB0aW1lLnRpbWUoKSoxMDAwKQoKICAgIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQpOgogICAgICBzaXplID0gZWxlbWVudC5CeXRlU2l6ZSgpCiAgICAgIGlmIChzZWxmLl9tdXRhdGlvbnMgYW5kCiAgICAgICAgICBzaXplICsgc2VsZi5fbXV0YXRpb25zX3NpemUgPiBfTXV0YXRlLl9XUklURV9CQVRDSF9NQVhfQllURVNfU0laRSk6CiAgICAgICAgc2VsZi5fZmx1c2hfYmF0Y2goKQogICAgICBzZWxmLl9tdXRhdGlvbnMuYXBwZW5kKGVsZW1lbnQpCiAgICAgIHNlbGYuX211dGF0aW9uc19zaXplICs9IHNpemUKICAgICAgaWYgbGVuKHNlbGYuX211dGF0aW9ucykgPj0gc2VsZi5fdGFyZ2V0X2JhdGNoX3NpemU6CiAgICAgICAgc2VsZi5fZmx1c2hfYmF0Y2goKQoKICAgIGRlZiBmaW5pc2hfYnVuZGxlKHNlbGYpOgogICAgICBpZiBzZWxmLl9tdXRhdGlvbnM6CiAgICAgICAgc2VsZi5fZmx1c2hfYmF0Y2goKQoKICAgIGRlZiBfZmx1c2hfYmF0Y2goc2VsZik6CiAgICAgICMgRmx1c2ggdGhlIGN1cnJlbnQgYmF0Y2ggb2YgbXV0YXRpb25zIHRvIENsb3VkIERhdGFzdG9yZS4KICAgICAgXywgbGF0ZW5jeV9tcyA9IGhlbHBlci53cml0ZV9tdXRhdGlvbnMoCiAgICAgICAgICBzZWxmLl9kYXRhc3RvcmUsIHNlbGYuX3Byb2plY3QsIHNlbGYuX211dGF0aW9ucywKICAgICAgICAgIHNlbGYuX3Rocm90dGxlciwgc2VsZi5fdXBkYXRlX3JwY19zdGF0cywKICAgICAgICAgIHRocm90dGxlX2RlbGF5PV9NdXRhdGUuX1dSSVRFX0JBVENIX1RBUkdFVF9MQVRFTkNZX01TLy8xMDAwKQogICAgICBsb2dnaW5nLmRlYnVnKCJTdWNjZXNzZnVsbHkgd3JvdGUgJWQgbXV0YXRpb25zIGluICVkbXMuIiwKICAgICAgICAgICAgICAgICAgICBsZW4oc2VsZi5fbXV0YXRpb25zKSwgbGF0ZW5jeV9tcykKCiAgICAgIGlmIG5vdCBzZWxmLl9maXhlZF9iYXRjaF9zaXplOgogICAgICAgIG5vdyA9IHRpbWUudGltZSgpKjEwMDAKICAgICAgICBzZWxmLl9iYXRjaF9zaXplci5yZXBvcnRfbGF0ZW5jeShub3csIGxhdGVuY3lfbXMsIGxlbihzZWxmLl9tdXRhdGlvbnMpKQogICAgICAgIHNlbGYuX3RhcmdldF9iYXRjaF9zaXplID0gc2VsZi5fYmF0Y2hfc2l6ZXIuZ2V0X2JhdGNoX3NpemUobm93KQoKICAgICAgc2VsZi5fbXV0YXRpb25zID0gW10KICAgICAgc2VsZi5fbXV0YXRpb25zX3NpemUgPSAwCgoKY2xhc3MgV3JpdGVUb0RhdGFzdG9yZShfTXV0YXRlKToKICAiIiJBIGBgUFRyYW5zZm9ybWBgIHRvIHdyaXRlIGEgYGBQQ29sbGVjdGlvbltFbnRpdHldYGAgdG8gQ2xvdWQgRGF0YXN0b3JlLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgcHJvamVjdCk6CiAgICAiIiJJbml0aWFsaXplIHRoZSBgV3JpdGVUb0RhdGFzdG9yZWAgdHJhbnNmb3JtLgoKICAgIEFyZ3M6CiAgICAgIHByb2plY3Q6IFRoZSBJRCBvZiB0aGUgcHJvamVjdCB0byB3cml0ZSB0by4KICAgICIiIgoKICAgICMgSW1wb3J0IGhlcmUgdG8gYXZvaWQgYWRkaW5nIHRoZSBkZXBlbmRlbmN5IGZvciBsb2NhbCBydW5uaW5nIHNjZW5hcmlvcy4KICAgIHRyeToKICAgICAgIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KICAgICAgZnJvbSBhcGl0b29scy5iYXNlIGltcG9ydCBweSAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLXZhcmlhYmxlCiAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgIHJhaXNlIEltcG9ydEVycm9yKAogICAgICAgICAgJ0dvb2dsZSBDbG91ZCBJTyBub3QgYXZhaWxhYmxlLCAnCiAgICAgICAgICAncGxlYXNlIGluc3RhbGwgYXBhY2hlX2JlYW1bZ2NwXScpCgogICAgc3VwZXIoV3JpdGVUb0RhdGFzdG9yZSwgc2VsZikuX19pbml0X18oCiAgICAgICAgcHJvamVjdCwgV3JpdGVUb0RhdGFzdG9yZS50b191cHNlcnRfbXV0YXRpb24pCgogIEBzdGF0aWNtZXRob2QKICBkZWYgdG9fdXBzZXJ0X211dGF0aW9uKGVudGl0eSk6CiAgICBpZiBub3QgaGVscGVyLmlzX2tleV92YWxpZChlbnRpdHkua2V5KToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignRW50aXRpZXMgdG8gYmUgd3JpdHRlbiB0byB0aGUgQ2xvdWQgRGF0YXN0b3JlIG11c3QgJwogICAgICAgICAgICAgICAgICAgICAgICdoYXZlIGNvbXBsZXRlIGtleXM6XG4lcycgJSBlbnRpdHkpCiAgICBtdXRhdGlvbiA9IGRhdGFzdG9yZV9wYjIuTXV0YXRpb24oKQogICAgbXV0YXRpb24udXBzZXJ0LkNvcHlGcm9tKGVudGl0eSkKICAgIHJldHVybiBtdXRhdGlvbgoKCmNsYXNzIERlbGV0ZUZyb21EYXRhc3RvcmUoX011dGF0ZSk6CiAgIiIiQSBgYFBUcmFuc2Zvcm1gYCB0byBkZWxldGUgYSBgYFBDb2xsZWN0aW9uW0tleV1gYCBmcm9tIENsb3VkIERhdGFzdG9yZS4iIiIKICBkZWYgX19pbml0X18oc2VsZiwgcHJvamVjdCk6CiAgICAiIiJJbml0aWFsaXplIHRoZSBgRGVsZXRlRnJvbURhdGFzdG9yZWAgdHJhbnNmb3JtLgoKICAgIEFyZ3M6CiAgICAgIHByb2plY3Q6IFRoZSBJRCBvZiB0aGUgcHJvamVjdCBmcm9tIHdoaWNoIHRoZSBlbnRpdGllcyB3aWxsIGJlIGRlbGV0ZWQuCiAgICAiIiIKCiAgICBzdXBlcihEZWxldGVGcm9tRGF0YXN0b3JlLCBzZWxmKS5fX2luaXRfXygKICAgICAgICBwcm9qZWN0LCBEZWxldGVGcm9tRGF0YXN0b3JlLnRvX2RlbGV0ZV9tdXRhdGlvbikKCiAgQHN0YXRpY21ldGhvZAogIGRlZiB0b19kZWxldGVfbXV0YXRpb24oa2V5KToKICAgIGlmIG5vdCBoZWxwZXIuaXNfa2V5X3ZhbGlkKGtleSk6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0tleXMgdG8gYmUgZGVsZXRlZCBmcm9tIHRoZSBDbG91ZCBEYXRhc3RvcmUgbXVzdCBiZSAnCiAgICAgICAgICAgICAgICAgICAgICAgJ2NvbXBsZXRlOlxuJXMiLCBrZXknKQogICAgbXV0YXRpb24gPSBkYXRhc3RvcmVfcGIyLk11dGF0aW9uKCkKICAgIG11dGF0aW9uLmRlbGV0ZS5Db3B5RnJvbShrZXkpCiAgICByZXR1cm4gbXV0YXRpb24KfXLyggAAKFgZAAAAV3JpdGVUb0RhdGFzdG9yZS5fX2luaXRfX1gDAAAAZGVmTdMBTeUBh1gRAAAAUmVhZEZyb21EYXRhc3RvcmVYBQAAAGNsYXNzSzZNPAGHWCoAAABSZWFkRnJvbURhdGFzdG9yZS5nZXRfZXN0aW1hdGVkX3NpemVfYnl0ZXNYAwAAAGRlZk0QAU0qAYdYJQAAAFJlYWRGcm9tRGF0YXN0b3JlLlJlYWRGbi5kaXNwbGF5X2RhdGFYAwAAAGRlZkv2S/2HWCYAAABfTXV0YXRlLkRhdGFzdG9yZVdyaXRlRm4uZmluaXNoX2J1bmRsZVgDAAAAZGVmTboBTb0Bh1glAAAAUmVhZEZyb21EYXRhc3RvcmUuUmVhZEZuLnN0YXJ0X2J1bmRsZVgDAAAAZGVmS+1L74dYKwAAAFJlYWRGcm9tRGF0YXN0b3JlLlNwbGl0UXVlcnlGbi5zdGFydF9idW5kbGVYAwAAAGRlZku3S7mHWCYAAABSZWFkRnJvbURhdGFzdG9yZS5TcGxpdFF1ZXJ5Rm4ucHJvY2Vzc1gDAAAAZGVmS7pL2odYKQAAAF9NdXRhdGUuX0R5bmFtaWNCYXRjaFNpemVyLmdldF9iYXRjaF9zaXplWAMAAABkZWZNawFNdwGHWBgAAABSZWFkRnJvbURhdGFzdG9yZS5SZWFkRm5YBQAAAGNsYXNzS+VL/YdYIwAAAF9NdXRhdGUuX0R5bmFtaWNCYXRjaFNpemVyLl9faW5pdF9fWAMAAABkZWZNZwFNagGHWBoAAABSZWFkRnJvbURhdGFzdG9yZS5fX2luaXRfX1gDAAAAZGVmS19LgYdYIAAAAFJlYWRGcm9tRGF0YXN0b3JlLlJlYWRGbi5wcm9jZXNzWAMAAABkZWZL8Ev1h1glAAAAX011dGF0ZS5EYXRhc3RvcmVXcml0ZUZuLnN0YXJ0X2J1bmRsZVgDAAAAZGVmTaUBTa8Bh1gYAAAAX011dGF0ZS5EYXRhc3RvcmVXcml0ZUZuWAUAAABjbGFzc02CAU3OAYdYGgAAAF9NdXRhdGUuX0R5bmFtaWNCYXRjaFNpemVyWAUAAABjbGFzc01lAU2BAYdYIwAAAFdyaXRlVG9EYXRhc3RvcmUudG9fdXBzZXJ0X211dGF0aW9uWAMAAABkZWZN5gFN7gGHWBQAAABfTXV0YXRlLmRpc3BsYXlfZGF0YVgDAAAAZGVmTWEBTWQBh1gnAAAAUmVhZEZyb21EYXRhc3RvcmUuU3BsaXRRdWVyeUZuLl9faW5pdF9fWAMAAABkZWZLr0u2h1gTAAAARGVsZXRlRnJvbURhdGFzdG9yZVgFAAAAY2xhc3NN8AFNBAKHWCEAAABfTXV0YXRlLkRhdGFzdG9yZVdyaXRlRm4uX19pbml0X19YAwAAAGRlZk2NAU2fAYdYKwAAAFJlYWRGcm9tRGF0YXN0b3JlLlNwbGl0UXVlcnlGbi5kaXNwbGF5X2RhdGFYAwAAAGRlZkvbS+SHWBAAAABfTXV0YXRlLl9faW5pdF9fWAMAAABkZWZNTwFNWgGHWAcAAABfTXV0YXRlWAUAAABjbGFzc00+AU3OAYdYMwAAAFJlYWRGcm9tRGF0YXN0b3JlLnF1ZXJ5X2xhdGVzdF9zdGF0aXN0aWNzX3RpbWVzdGFtcFgDAAAAZGVmS/5NDwGHWA4AAABfTXV0YXRlLmV4cGFuZFgDAAAAZGVmTVsBTWABh1ghAAAAUmVhZEZyb21EYXRhc3RvcmUuUmVhZEZuLl9faW5pdF9fWAMAAABkZWZL50vsh1gpAAAAX011dGF0ZS5fRHluYW1pY0JhdGNoU2l6ZXIucmVwb3J0X2xhdGVuY3lYAwAAAGRlZk14AU2BAYdYJgAAAERlbGV0ZUZyb21EYXRhc3RvcmUudG9fZGVsZXRlX211dGF0aW9uWAMAAABkZWZN/AFNBAKHWCoAAABfTXV0YXRlLkRhdGFzdG9yZVdyaXRlRm4uX3VwZGF0ZV9ycGNfc3RhdHNYAwAAAGRlZk2gAU2kAYdYGAAAAFJlYWRGcm9tRGF0YXN0b3JlLmV4cGFuZFgDAAAAZGVmS4JLoodYJQAAAF9NdXRhdGUuRGF0YXN0b3JlV3JpdGVGbi5fZmx1c2hfYmF0Y2hYAwAAAGRlZk2+AU3OAYdYEAAAAFdyaXRlVG9EYXRhc3RvcmVYBQAAAGNsYXNzTdABTe4Bh1geAAAAUmVhZEZyb21EYXRhc3RvcmUuZGlzcGxheV9kYXRhWAMAAABkZWZLo0ush1geAAAAUmVhZEZyb21EYXRhc3RvcmUuU3BsaXRRdWVyeUZuWAUAAABjbGFzc0utS+SHWCAAAABfTXV0YXRlLkRhdGFzdG9yZVdyaXRlRm4ucHJvY2Vzc1gDAAAAZGVmTbABTbkBh1gcAAAARGVsZXRlRnJvbURhdGFzdG9yZS5fX2luaXRfX1gDAAAAZGVmTfIBTfsBh1gqAAAAUmVhZEZyb21EYXRhc3RvcmUuZ2V0X2VzdGltYXRlZF9udW1fc3BsaXRzWAMAAABkZWZNKwFNPAGHdX1y84IAAChYKwAAAFJlYWRGcm9tRGF0YXN0b3JlLlNwbGl0UXVlcnlGbi5zdGFydF9idW5kbGVqOWUAAFgTAAAARGVsZXRlRnJvbURhdGFzdG9yZWo5ZQAAWCsAAABSZWFkRnJvbURhdGFzdG9yZS5TcGxpdFF1ZXJ5Rm4uZGlzcGxheV9kYXRhajllAABYJgAAAFJlYWRGcm9tRGF0YXN0b3JlLlNwbGl0UXVlcnlGbi5wcm9jZXNzajllAABYGAAAAFJlYWRGcm9tRGF0YXN0b3JlLmV4cGFuZGo5ZQAAWBgAAABSZWFkRnJvbURhdGFzdG9yZS5SZWFkRm5qOWUAAFgRAAAAUmVhZEZyb21EYXRhc3RvcmVqOWUAAFgQAAAAV3JpdGVUb0RhdGFzdG9yZWo5ZQAAWB4AAABSZWFkRnJvbURhdGFzdG9yZS5kaXNwbGF5X2RhdGFqOWUAAFgeAAAAUmVhZEZyb21EYXRhc3RvcmUuU3BsaXRRdWVyeUZuajllAABYIAAAAFJlYWRGcm9tRGF0YXN0b3JlLlJlYWRGbi5wcm9jZXNzajllAABYKgAAAFJlYWRGcm9tRGF0YXN0b3JlLmdldF9lc3RpbWF0ZWRfc2l6ZV9ieXRlc2o5ZQAAWCUAAABSZWFkRnJvbURhdGFzdG9yZS5SZWFkRm4uZGlzcGxheV9kYXRhajllAABYMwAAAFJlYWRGcm9tRGF0YXN0b3JlLnF1ZXJ5X2xhdGVzdF9zdGF0aXN0aWNzX3RpbWVzdGFtcGo5ZQAAWCUAAABSZWFkRnJvbURhdGFzdG9yZS5SZWFkRm4uc3RhcnRfYnVuZGxlajllAABYIwAAAFdyaXRlVG9EYXRhc3RvcmUudG9fdXBzZXJ0X211dGF0aW9uajllAABYKgAAAFJlYWRGcm9tRGF0YXN0b3JlLmdldF9lc3RpbWF0ZWRfbnVtX3NwbGl0c2o5ZQAAWCYAAABEZWxldGVGcm9tRGF0YXN0b3JlLnRvX2RlbGV0ZV9tdXRhdGlvbmo5ZQAAdWp9aQAAWCsAAABhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmRhdGFzdG9yZWlvcvSCAACFgXL1ggAAfXL2ggAAYnRVLWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dChYYzsAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiRXZhbHVhdGlvbkNvbnRleHQgdHJhY2tzIGdsb2JhbCBzdGF0ZSwgdHJpZ2dlcnMgYW5kIHdhdGVybWFya3MuIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGNvbGxlY3Rpb25zCmltcG9ydCB0aHJlYWRpbmcKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0Cgpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9tZXRyaWNzIGltcG9ydCBEaXJlY3RNZXRyaWNzCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXhlY3V0b3IgaW1wb3J0IFRyYW5zZm9ybUV4ZWN1dG9yCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Qud2F0ZXJtYXJrX21hbmFnZXIgaW1wb3J0IFdhdGVybWFya01hbmFnZXIKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBzaWRlaW5wdXRzCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyIGltcG9ydCBJbk1lbW9yeVVubWVyZ2VkU3RhdGUKZnJvbSBhcGFjaGVfYmVhbS51dGlscyBpbXBvcnQgY291bnRlcnMKCgpjbGFzcyBfRXhlY3V0aW9uQ29udGV4dChvYmplY3QpOgoKICBkZWYgX19pbml0X18oc2VsZiwgd2F0ZXJtYXJrcywga2V5ZWRfc3RhdGVzKToKICAgIHNlbGYud2F0ZXJtYXJrcyA9IHdhdGVybWFya3MKICAgIHNlbGYua2V5ZWRfc3RhdGVzID0ga2V5ZWRfc3RhdGVzCgogICAgc2VsZi5fc3RlcF9jb250ZXh0ID0gTm9uZQoKICBkZWYgZ2V0X3N0ZXBfY29udGV4dChzZWxmKToKICAgIGlmIG5vdCBzZWxmLl9zdGVwX2NvbnRleHQ6CiAgICAgIHNlbGYuX3N0ZXBfY29udGV4dCA9IERpcmVjdFN0ZXBDb250ZXh0KHNlbGYua2V5ZWRfc3RhdGVzKQogICAgcmV0dXJuIHNlbGYuX3N0ZXBfY29udGV4dAoKICBkZWYgcmVzZXQoc2VsZik6CiAgICBzZWxmLl9zdGVwX2NvbnRleHQgPSBOb25lCgoKY2xhc3MgX1NpZGVJbnB1dFZpZXcob2JqZWN0KToKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHZpZXcpOgogICAgc2VsZi5fdmlldyA9IHZpZXcKICAgIHNlbGYuYmxvY2tlZF90YXNrcyA9IGNvbGxlY3Rpb25zLmRlcXVlKCkKICAgIHNlbGYuZWxlbWVudHMgPSBbXQogICAgc2VsZi52YWx1ZSA9IE5vbmUKICAgIHNlbGYud2F0ZXJtYXJrID0gTm9uZQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICBlbGVtZW50c19zdHJpbmcgPSAoJywgJy5qb2luKHN0cihlbG0pIGZvciBlbG0gaW4gc2VsZi5lbGVtZW50cykKICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmVsZW1lbnRzIGVsc2UgJ1tdJykKICAgIHJldHVybiAnX1NpZGVJbnB1dFZpZXcoZWxlbWVudHM9JXMpJyAlIGVsZW1lbnRzX3N0cmluZwoKCmNsYXNzIF9TaWRlSW5wdXRzQ29udGFpbmVyKG9iamVjdCk6CiAgIiIiQW4gaW4tcHJvY2VzcyBjb250YWluZXIgZm9yIHNpZGUgaW5wdXRzLgoKICBJdCBwcm92aWRlcyBtZXRob2RzIGZvciBibG9ja2luZyB1bnRpbCBhIHNpZGUtaW5wdXQgaXMgYXZhaWxhYmxlIGFuZCB3cml0aW5nCiAgdG8gYSBzaWRlIGlucHV0LgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgc2lkZV9pbnB1dHMpOgogICAgc2VsZi5fbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKICAgIHNlbGYuX3ZpZXdzID0ge30KICAgIHNlbGYuX3RyYW5zZm9ybV90b19zaWRlX2lucHV0cyA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGxpc3QpCiAgICBzZWxmLl9zaWRlX2lucHV0X3RvX2Jsb2NrZWRfdGFza3MgPSBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdChsaXN0KQoKICAgIGZvciBzaWRlIGluIHNpZGVfaW5wdXRzOgogICAgICBzZWxmLl92aWV3c1tzaWRlXSA9IF9TaWRlSW5wdXRWaWV3KHNpZGUpCiAgICAgIHNlbGYuX3RyYW5zZm9ybV90b19zaWRlX2lucHV0c1tzaWRlLnB2YWx1ZS5wcm9kdWNlcl0uYXBwZW5kKHNpZGUpCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHZpZXdzX3N0cmluZyA9ICgnLCAnLmpvaW4oc3RyKGVsbSkgZm9yIGVsbSBpbiBzZWxmLl92aWV3cy52YWx1ZXMoKSkKICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl92aWV3cyBlbHNlICdbXScpCiAgICByZXR1cm4gJ19TaWRlSW5wdXRzQ29udGFpbmVyKF92aWV3cz0lcyknICUgdmlld3Nfc3RyaW5nCgogIGRlZiBnZXRfdmFsdWVfb3JfYmxvY2tfdW50aWxfcmVhZHkoc2VsZiwgc2lkZV9pbnB1dCwgdGFzaywgYmxvY2tfdW50aWwpOgogICAgIiIiUmV0dXJucyB0aGUgdmFsdWUgb2YgYSB2aWV3IHdob3NlIHRhc2sgaXMgdW5ibG9ja2VkIG9yIGJsb2NrcyBpdHMgdGFzay4KCiAgICBJdCBnZXRzIHRoZSB2YWx1ZSBvZiBhIHZpZXcgd2hvc2Ugd2F0ZXJtYXJrIGhhcyBiZWVuIHVwZGF0ZWQgYW5kCiAgICBzdXJwYXNzZXMgYSBnaXZlbiB2YWx1ZS4KCiAgICBBcmdzOgogICAgICBzaWRlX2lucHV0OiBgYF9VbnBpY2tsZWRTaWRlSW5wdXRgYCB2YWx1ZS4KICAgICAgdGFzazogYGBUcmFuc2Zvcm1FeGVjdXRvcmBgIHRhc2sgd2FpdGluZyBvbiBhIHNpZGUgaW5wdXQuCiAgICAgIGJsb2NrX3VudGlsOiBUaW1lc3RhbXAgYWZ0ZXIgd2hpY2ggdGhlIHRhc2sgZ2V0cyB1bmJsb2NrZWQuCgogICAgUmV0dXJuczoKICAgICAgVGhlIGBgU2lkZUlucHV0TWFwYGAgdmFsdWUgb2YgYSB2aWV3IHdoZW4gdGhlIHRhc2tzIGl0IGJsb2NrcyBhcmUKICAgICAgdW5ibG9ja2VkLiBPdGhlcndpc2UsIE5vbmUuCiAgICAiIiIKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgdmlldyA9IHNlbGYuX3ZpZXdzW3NpZGVfaW5wdXRdCiAgICAgIGlmIHZpZXcud2F0ZXJtYXJrIGFuZCB2aWV3LndhdGVybWFyay5vdXRwdXRfd2F0ZXJtYXJrID49IGJsb2NrX3VudGlsOgogICAgICAgIHZpZXcudmFsdWUgPSBzZWxmLl9wdmFsdWVfdG9fdmFsdWUoc2lkZV9pbnB1dCwgdmlldy5lbGVtZW50cykKICAgICAgICByZXR1cm4gdmlldy52YWx1ZQogICAgICBlbHNlOgogICAgICAgIHZpZXcuYmxvY2tlZF90YXNrcy5hcHBlbmQoKHRhc2ssIGJsb2NrX3VudGlsKSkKICAgICAgICB0YXNrLmJsb2NrZWQgPSBUcnVlCgogIGRlZiBhZGRfdmFsdWVzKHNlbGYsIHNpZGVfaW5wdXQsIHZhbHVlcyk6CiAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgIHZpZXcgPSBzZWxmLl92aWV3c1tzaWRlX2lucHV0XQogICAgICB2aWV3LmVsZW1lbnRzLmV4dGVuZCh2YWx1ZXMpCgogIGRlZiB1cGRhdGVfd2F0ZXJtYXJrc19mb3JfdHJhbnNmb3JtX2FuZF91bmJsb2NrX3Rhc2tzKHNlbGYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRyYW5zZm9ybSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXRlcm1hcmspOgogICAgIiIiVXBkYXRlcyBfU2lkZUlucHV0c0NvbnRhaW5lciBhZnRlciBhIHdhdGVybWFyayB1cGRhdGUgYW5kIHVuYmxva3MgdGFza3MuCgogICAgSXQgdHJhdmVyc2VzIHRoZSBsaXN0IG9mIHNpZGUgaW5wdXRzIHBlciBQVHJhbnNmb3JtIGFuZCBjYWxscwogICAgX3VwZGF0ZV93YXRlcm1hcmtzX2Zvcl9zaWRlX2lucHV0X2FuZF91bmJsb2NrX3Rhc2tzIHRvIHVuYmxvY2sgdGFza3MuCgogICAgQXJnczoKICAgICAgcHRyYW5zZm9ybTogVmFsdWUgb2YgYSBQVHJhbnNmb3JtLgogICAgICB3YXRlcm1hcms6IFZhbHVlIG9mIHRoZSB3YXRlcm1hcmsgYWZ0ZXIgYW4gdXBkYXRlIGZvciBhIFBUcmFuc2Zvcm0uCgogICAgUmV0dXJuczoKICAgICAgVGFza3MgdGhhdCBnZXQgdW5ibG9ja2VkIGFzIGEgcmVzdWx0IG9mIHRoZSB3YXRlcm1hcmsgYWR2YW5jaW5nLgogICAgIiIiCiAgICB1bmJsb2NrZWRfdGFza3MgPSBbXQogICAgZm9yIHNpZGUgaW4gc2VsZi5fdHJhbnNmb3JtX3RvX3NpZGVfaW5wdXRzW3B0cmFuc2Zvcm1dOgogICAgICB1bmJsb2NrZWRfdGFza3MuZXh0ZW5kKAogICAgICAgICAgc2VsZi5fdXBkYXRlX3dhdGVybWFya3NfZm9yX3NpZGVfaW5wdXRfYW5kX3VuYmxvY2tfdGFza3MoCiAgICAgICAgICAgICAgc2lkZSwgd2F0ZXJtYXJrKSkKICAgIHJldHVybiB1bmJsb2NrZWRfdGFza3MKCiAgZGVmIF91cGRhdGVfd2F0ZXJtYXJrc19mb3Jfc2lkZV9pbnB1dF9hbmRfdW5ibG9ja190YXNrcyhzZWxmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lkZV9pbnB1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhdGVybWFyayk6CiAgICAiIiJIZWxwcyB1cGRhdGUgX1NpZGVJbnB1dHNDb250YWluZXIgYWZ0ZXIgYSB3YXRlcm1hcmsgdXBkYXRlLgoKICAgIEZvciBlYWNoIHZpZXcgb2YgdGhlIHNpZGUgaW5wdXQsIGl0IHVwZGF0ZXMgdGhlIHZhbHVlIG9mIHRoZSB3YXRlcm1hcmsKICAgIHJlY29yZGVkIHdoZW4gdGhlIHdhdGVybWFyayBtb3ZlZCBhbmQgdW5ibG9ja3MgdGFza3MgYWNjb3JkaW5nbHkuCgogICAgQXJnczoKICAgICAgc2lkZV9pbnB1dDogYGBfVW5waWNrbGVkU2lkZUlucHV0YGAgdmFsdWUuCiAgICAgIHdhdGVybWFyazogVmFsdWUgb2YgdGhlIHdhdGVybWFyayBhZnRlciBhbiB1cGRhdGUgZm9yIGEgUFRyYW5zZm9ybS4KCiAgICBSZXR1cm5zOgogICAgICBUYXNrcyB0aGF0IGdldCB1bmJsb2NrZWQgYXMgYSByZXN1bHQgb2YgdGhlIHdhdGVybWFyayBhZHZhbmNpbmcuCiAgICAiIiIKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgdmlldyA9IHNlbGYuX3ZpZXdzW3NpZGVfaW5wdXRdCiAgICAgIHZpZXcud2F0ZXJtYXJrID0gd2F0ZXJtYXJrCgogICAgICB1bmJsb2NrZWRfdGFza3MgPSBbXQogICAgICB0YXNrc19qdXN0X3VuYmxvY2tlZCA9IFtdCiAgICAgIGZvciB0YXNrLCBibG9ja191bnRpbCBpbiB2aWV3LmJsb2NrZWRfdGFza3M6CiAgICAgICAgaWYgd2F0ZXJtYXJrLm91dHB1dF93YXRlcm1hcmsgPj0gYmxvY2tfdW50aWw6CiAgICAgICAgICB2aWV3LnZhbHVlID0gc2VsZi5fcHZhbHVlX3RvX3ZhbHVlKHNpZGVfaW5wdXQsIHZpZXcuZWxlbWVudHMpCiAgICAgICAgICB1bmJsb2NrZWRfdGFza3MuYXBwZW5kKHRhc2spCiAgICAgICAgICB0YXNrc19qdXN0X3VuYmxvY2tlZC5hcHBlbmQoKHRhc2ssIGJsb2NrX3VudGlsKSkKICAgICAgICAgIHRhc2suYmxvY2tlZCA9IEZhbHNlCiAgICAgIGZvciB0YXNrIGluIHRhc2tzX2p1c3RfdW5ibG9ja2VkOgogICAgICAgIHZpZXcuYmxvY2tlZF90YXNrcy5yZW1vdmUodGFzaykKICAgICAgcmV0dXJuIHVuYmxvY2tlZF90YXNrcwoKICBkZWYgX3B2YWx1ZV90b192YWx1ZShzZWxmLCBzaWRlX2lucHV0LCB2YWx1ZXMpOgogICAgIiIiR2l2ZW4gYSBzaWRlIGlucHV0LCByZXR1cm5zIHRoZSBhc3NvY2lhdGVkIHZhbHVlIGluIGl0cyByZXF1ZXN0ZWQgZm9ybS4KCiAgICBBcmdzOgogICAgICBzaWRlX2lucHV0OiBfVW5waWNrbGVkU2lkZUlucHV0IG9iamVjdC4KICAgICAgdmFsdWVzOiBJdGVyYWJsZSB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzaWRlIGlucHV0LgoKICAgIFJldHVybnM6CiAgICAgIFRoZSBzaWRlIGlucHV0IGluIGl0cyByZXF1ZXN0ZWQgZm9ybS4KCiAgICBSYWlzZXM6CiAgICAgIFZhbHVlRXJyb3I6IElmIHZhbHVlcyBjYW5ub3QgYmUgY29udmVydGVkIGludG8gdGhlIHJlcXVlc3RlZCBmb3JtLgogICAgIiIiCiAgICByZXR1cm4gc2lkZWlucHV0cy5TaWRlSW5wdXRNYXAodHlwZShzaWRlX2lucHV0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWRlX2lucHV0Ll92aWV3X29wdGlvbnMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCgoKY2xhc3MgRXZhbHVhdGlvbkNvbnRleHQob2JqZWN0KToKICAiIiJFdmFsdWF0aW9uIGNvbnRleHQgd2l0aCB0aGUgZ2xvYmFsIHN0YXRlIGluZm9ybWF0aW9uIG9mIHRoZSBwaXBlbGluZS4KCiAgVGhlIGV2YWx1YXRpb24gY29udGV4dCBmb3IgYSBzcGVjaWZpYyBwaXBlbGluZSBiZWluZyBleGVjdXRlZCBieSB0aGUKICBEaXJlY3RSdW5uZXIuIENvbnRhaW5zIHN0YXRlIHNoYXJlZCB3aXRoaW4gdGhlIGV4ZWN1dGlvbiBhY3Jvc3MgYWxsCiAgdHJhbnNmb3Jtcy4KCiAgRXZhbHVhdGlvbkNvbnRleHQgY29udGFpbnMgc2hhcmVkIHN0YXRlIGZvciBhbiBleGVjdXRpb24gb2YgdGhlCiAgRGlyZWN0UnVubmVyIHRoYXQgY2FuIGJlIHVzZWQgd2hpbGUgZXZhbHVhdGluZyBhIFBUcmFuc2Zvcm0uIFRoaXMKICBjb25zaXN0cyBvZiB2aWV3cyBpbnRvIHVuZGVybHlpbmcgc3RhdGUgYW5kIHdhdGVybWFyayBpbXBsZW1lbnRhdGlvbnMsIGFjY2VzcwogIHRvIHJlYWQgYW5kIHdyaXRlIHNpZGUgaW5wdXRzLCBhbmQgY29uc3RydWN0aW5nIGNvdW50ZXIgc2V0cyBhbmQKICBleGVjdXRpb24gY29udGV4dHMuIFRoaXMgaW5jbHVkZXMgZXhlY3V0aW5nIGNhbGxiYWNrcyBhc3luY2hyb25vdXNseSB3aGVuCiAgc3RhdGUgY2hhbmdlcyB0byB0aGUgYXBwcm9wcmlhdGUgcG9pbnQgKGUuZy4gd2hlbiBhIHNpZGUgaW5wdXQgaXMKICByZXF1ZXN0ZWQgYW5kIGtub3duIHRvIGJlIGVtcHR5KS4KCiAgRXZhbHVhdGlvbkNvbnRleHQgYWxzbyBoYW5kbGVzIHJlc3VsdHMgYnkgY29tbWl0dGluZyBmaW5hbGl6aW5nCiAgYnVuZGxlcyBiYXNlZCBvbiB0aGUgY3VycmVudCBnbG9iYWwgc3RhdGUgYW5kIHVwZGF0aW5nIHRoZSBnbG9iYWwgc3RhdGUKICBhcHByb3ByaWF0ZWx5LiBUaGlzIGluY2x1ZGVzIHVwZGF0aW5nIHRoZSBwZXItKHN0ZXAsa2V5KSBzdGF0ZSwgdXBkYXRpbmcKICBnbG9iYWwgd2F0ZXJtYXJrcywgYW5kIGV4ZWN1dGluZyBhbnkgY2FsbGJhY2tzIHRoYXQgY2FuIGJlIGV4ZWN1dGVkLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgcGlwZWxpbmVfb3B0aW9ucywgYnVuZGxlX2ZhY3RvcnksIHJvb3RfdHJhbnNmb3JtcywKICAgICAgICAgICAgICAgdmFsdWVfdG9fY29uc3VtZXJzLCBzdGVwX25hbWVzLCB2aWV3cywgY2xvY2spOgogICAgc2VsZi5waXBlbGluZV9vcHRpb25zID0gcGlwZWxpbmVfb3B0aW9ucwogICAgc2VsZi5fYnVuZGxlX2ZhY3RvcnkgPSBidW5kbGVfZmFjdG9yeQogICAgc2VsZi5fcm9vdF90cmFuc2Zvcm1zID0gcm9vdF90cmFuc2Zvcm1zCiAgICBzZWxmLl92YWx1ZV90b19jb25zdW1lcnMgPSB2YWx1ZV90b19jb25zdW1lcnMKICAgIHNlbGYuX3N0ZXBfbmFtZXMgPSBzdGVwX25hbWVzCiAgICBzZWxmLnZpZXdzID0gdmlld3MKICAgIHNlbGYuX3Bjb2xsZWN0aW9uX3RvX3ZpZXdzID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QobGlzdCkKICAgIGZvciB2aWV3IGluIHZpZXdzOgogICAgICBzZWxmLl9wY29sbGVjdGlvbl90b192aWV3c1t2aWV3LnB2YWx1ZV0uYXBwZW5kKHZpZXcpCiAgICBzZWxmLl90cmFuc2Zvcm1fa2V5ZWRfc3RhdGVzID0gc2VsZi5faW5pdGlhbGl6ZV9rZXllZF9zdGF0ZXMoCiAgICAgICAgcm9vdF90cmFuc2Zvcm1zLCB2YWx1ZV90b19jb25zdW1lcnMpCiAgICBzZWxmLl9zaWRlX2lucHV0c19jb250YWluZXIgPSBfU2lkZUlucHV0c0NvbnRhaW5lcih2aWV3cykKICAgIHNlbGYuX3dhdGVybWFya19tYW5hZ2VyID0gV2F0ZXJtYXJrTWFuYWdlcigKICAgICAgICBjbG9jaywgcm9vdF90cmFuc2Zvcm1zLCB2YWx1ZV90b19jb25zdW1lcnMsCiAgICAgICAgc2VsZi5fdHJhbnNmb3JtX2tleWVkX3N0YXRlcykKICAgIHNlbGYuX3BlbmRpbmdfdW5ibG9ja2VkX3Rhc2tzID0gW10KICAgIHNlbGYuX2NvdW50ZXJfZmFjdG9yeSA9IGNvdW50ZXJzLkNvdW50ZXJGYWN0b3J5KCkKICAgIHNlbGYuX21ldHJpY3MgPSBEaXJlY3RNZXRyaWNzKCkKCiAgICBzZWxmLl9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQoKICBkZWYgX2luaXRpYWxpemVfa2V5ZWRfc3RhdGVzKHNlbGYsIHJvb3RfdHJhbnNmb3JtcywgdmFsdWVfdG9fY29uc3VtZXJzKToKICAgIHRyYW5zZm9ybV9rZXllZF9zdGF0ZXMgPSB7fQogICAgZm9yIHRyYW5zZm9ybSBpbiByb290X3RyYW5zZm9ybXM6CiAgICAgIHRyYW5zZm9ybV9rZXllZF9zdGF0ZXNbdHJhbnNmb3JtXSA9IHt9CiAgICBmb3IgY29uc3VtZXJzIGluIHZhbHVlX3RvX2NvbnN1bWVycy52YWx1ZXMoKToKICAgICAgZm9yIGNvbnN1bWVyIGluIGNvbnN1bWVyczoKICAgICAgICB0cmFuc2Zvcm1fa2V5ZWRfc3RhdGVzW2NvbnN1bWVyXSA9IHt9CiAgICByZXR1cm4gdHJhbnNmb3JtX2tleWVkX3N0YXRlcwoKICBkZWYgbWV0cmljcyhzZWxmKToKICAgICMgVE9ETy4gU2hvdWxkIHRoaXMgYmUgbWFkZSBhIEBwcm9wZXJ0eT8KICAgIHJldHVybiBzZWxmLl9tZXRyaWNzCgogIGRlZiBpc19yb290X3RyYW5zZm9ybShzZWxmLCBhcHBsaWVkX3B0cmFuc2Zvcm0pOgogICAgcmV0dXJuIGFwcGxpZWRfcHRyYW5zZm9ybSBpbiBzZWxmLl9yb290X3RyYW5zZm9ybXMKCiAgZGVmIGhhbmRsZV9yZXN1bHQoCiAgICAgIHNlbGYsIGNvbXBsZXRlZF9idW5kbGUsIGNvbXBsZXRlZF90aW1lcnMsIHJlc3VsdCk6CiAgICAiIiJIYW5kbGUgdGhlIHByb3ZpZGVkIHJlc3VsdCBwcm9kdWNlZCBhZnRlciBldmFsdWF0aW5nIHRoZSBpbnB1dCBidW5kbGUuCgogICAgSGFuZGxlIHRoZSBwcm92aWRlZCBUcmFuc2Zvcm1SZXN1bHQsIHByb2R1Y2VkIGFmdGVyIGV2YWx1YXRpbmcKICAgIHRoZSBwcm92aWRlZCBjb21taXR0ZWQgYnVuZGxlIChwb3RlbnRpYWxseSBOb25lLCBpZiB0aGUgcmVzdWx0IG9mIGEgcm9vdAogICAgUFRyYW5zZm9ybSkuCgogICAgVGhlIHJlc3VsdCBpcyB0aGUgb3V0cHV0IG9mIHJ1bm5pbmcgdGhlIHRyYW5zZm9ybSBjb250YWluZWQgaW4gdGhlCiAgICBUcmFuc2Zvcm1SZXN1bHQgb24gdGhlIGNvbnRlbnRzIG9mIHRoZSBwcm92aWRlZCBidW5kbGUuCgogICAgQXJnczoKICAgICAgY29tcGxldGVkX2J1bmRsZTogdGhlIGJ1bmRsZSB0aGF0IHdhcyBwcm9jZXNzZWQgdG8gcHJvZHVjZSB0aGUgcmVzdWx0LgogICAgICBjb21wbGV0ZWRfdGltZXJzOiB0aGUgdGltZXJzIHRoYXQgd2VyZSBkZWxpdmVyZWQgdG8gcHJvZHVjZSB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkX2J1bmRsZS4KICAgICAgcmVzdWx0OiB0aGUgVHJhbnNmb3JtUmVzdWx0IG9mIGV2YWx1YXRpbmcgdGhlIGlucHV0IGJ1bmRsZQoKICAgIFJldHVybnM6CiAgICAgIHRoZSBjb21taXR0ZWQgYnVuZGxlcyBjb250YWluZWQgd2l0aGluIHRoZSBoYW5kbGVkIHJlc3VsdC4KICAgICIiIgogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICBjb21taXR0ZWRfYnVuZGxlcywgdW5wcm9jZXNzZWRfYnVuZGxlcyA9IHNlbGYuX2NvbW1pdF9idW5kbGVzKAogICAgICAgICAgcmVzdWx0LnVuY29tbWl0dGVkX291dHB1dF9idW5kbGVzLAogICAgICAgICAgcmVzdWx0LnVucHJvY2Vzc2VkX2J1bmRsZXMpCgogICAgICBzZWxmLl9tZXRyaWNzLmNvbW1pdF9sb2dpY2FsKGNvbXBsZXRlZF9idW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmxvZ2ljYWxfbWV0cmljX3VwZGF0ZXMpCgogICAgICAjIElmIHRoZSByZXN1bHQgaXMgZm9yIGEgdmlldywgdXBkYXRlIHNpZGUgaW5wdXRzIGNvbnRhaW5lci4KICAgICAgaWYgKHJlc3VsdC51bmNvbW1pdHRlZF9vdXRwdXRfYnVuZGxlcwogICAgICAgICAgYW5kIHJlc3VsdC51bmNvbW1pdHRlZF9vdXRwdXRfYnVuZGxlc1swXS5wY29sbGVjdGlvbgogICAgICAgICAgaW4gc2VsZi5fcGNvbGxlY3Rpb25fdG9fdmlld3MpOgogICAgICAgIGZvciB2aWV3IGluIHNlbGYuX3Bjb2xsZWN0aW9uX3RvX3ZpZXdzWwogICAgICAgICAgICByZXN1bHQudW5jb21taXR0ZWRfb3V0cHV0X2J1bmRsZXNbMF0ucGNvbGxlY3Rpb25dOgogICAgICAgICAgZm9yIGNvbW1pdHRlZF9idW5kbGUgaW4gY29tbWl0dGVkX2J1bmRsZXM6CiAgICAgICAgICAgICMgc2lkZV9pbnB1dCBtdXN0IGJlIG1hdGVyaWFsaXplZC4KICAgICAgICAgICAgc2VsZi5fc2lkZV9pbnB1dHNfY29udGFpbmVyLmFkZF92YWx1ZXMoCiAgICAgICAgICAgICAgICB2aWV3LAogICAgICAgICAgICAgICAgY29tbWl0dGVkX2J1bmRsZS5nZXRfZWxlbWVudHNfaXRlcmFibGUobWFrZV9jb3B5PVRydWUpKQoKICAgICAgIyBUYXNrcyBnZW5lcmF0ZWQgZnJvbSB1bmJsb2NrZWQgc2lkZSBpbnB1dHMgYXMgdGhlIHdhdGVybWFyayBwcm9ncmVzc2VzLgogICAgICB0YXNrcyA9IHNlbGYuX3dhdGVybWFya19tYW5hZ2VyLnVwZGF0ZV93YXRlcm1hcmtzKAogICAgICAgICAgY29tcGxldGVkX2J1bmRsZSwgcmVzdWx0LnRyYW5zZm9ybSwgY29tcGxldGVkX3RpbWVycywKICAgICAgICAgIGNvbW1pdHRlZF9idW5kbGVzLCB1bnByb2Nlc3NlZF9idW5kbGVzLCByZXN1bHQua2V5ZWRfd2F0ZXJtYXJrX2hvbGRzLAogICAgICAgICAgc2VsZi5fc2lkZV9pbnB1dHNfY29udGFpbmVyKQogICAgICBzZWxmLl9wZW5kaW5nX3VuYmxvY2tlZF90YXNrcy5leHRlbmQodGFza3MpCgogICAgICBpZiByZXN1bHQuY291bnRlcnM6CiAgICAgICAgZm9yIGNvdW50ZXIgaW4gcmVzdWx0LmNvdW50ZXJzOgogICAgICAgICAgbWVyZ2VkX2NvdW50ZXIgPSBzZWxmLl9jb3VudGVyX2ZhY3RvcnkuZ2V0X2NvdW50ZXIoCiAgICAgICAgICAgICAgY291bnRlci5uYW1lLCBjb3VudGVyLmNvbWJpbmVfZm4pCiAgICAgICAgICBtZXJnZWRfY291bnRlci5hY2N1bXVsYXRvci5tZXJnZShbY291bnRlci5hY2N1bXVsYXRvcl0pCgogICAgICAjIENvbW1pdCBwYXJ0aWFsIEdCSyBzdGF0ZXMKICAgICAgZXhpc3Rpbmdfa2V5ZWRfc3RhdGUgPSBzZWxmLl90cmFuc2Zvcm1fa2V5ZWRfc3RhdGVzW3Jlc3VsdC50cmFuc2Zvcm1dCiAgICAgIGZvciBrLCB2IGluIHJlc3VsdC5wYXJ0aWFsX2tleWVkX3N0YXRlLml0ZW1zKCk6CiAgICAgICAgZXhpc3Rpbmdfa2V5ZWRfc3RhdGVba10gPSB2CiAgICAgIHJldHVybiBjb21taXR0ZWRfYnVuZGxlcwoKICBkZWYgZ2V0X2FnZ3JlZ2F0b3JfdmFsdWVzKHNlbGYsIGFnZ3JlZ2F0b3Jfb3JfbmFtZSk6CiAgICByZXR1cm4gc2VsZi5fY291bnRlcl9mYWN0b3J5LmdldF9hZ2dyZWdhdG9yX3ZhbHVlcyhhZ2dyZWdhdG9yX29yX25hbWUpCgogIGRlZiBzY2hlZHVsZV9wZW5kaW5nX3VuYmxvY2tlZF90YXNrcyhzZWxmLCBleGVjdXRvcl9zZXJ2aWNlKToKICAgIGlmIHNlbGYuX3BlbmRpbmdfdW5ibG9ja2VkX3Rhc2tzOgogICAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgICAgZm9yIHRhc2sgaW4gc2VsZi5fcGVuZGluZ191bmJsb2NrZWRfdGFza3M6CiAgICAgICAgICBleGVjdXRvcl9zZXJ2aWNlLnN1Ym1pdCh0YXNrKQogICAgICAgIHNlbGYuX3BlbmRpbmdfdW5ibG9ja2VkX3Rhc2tzID0gW10KCiAgZGVmIF9jb21taXRfYnVuZGxlcyhzZWxmLCB1bmNvbW1pdHRlZF9idW5kbGVzLCB1bnByb2Nlc3NlZF9idW5kbGVzKToKICAgICIiIkNvbW1pdHMgYnVuZGxlcyBhbmQgcmV0dXJucyBhIGltbXV0YWJsZSBzZXQgb2YgY29tbWl0dGVkIGJ1bmRsZXMuIiIiCiAgICBmb3IgaW5fcHJvZ3Jlc3NfYnVuZGxlIGluIHVuY29tbWl0dGVkX2J1bmRsZXM6CiAgICAgIHByb2R1Y2luZ19hcHBsaWVkX3B0cmFuc2Zvcm0gPSBpbl9wcm9ncmVzc19idW5kbGUucGNvbGxlY3Rpb24ucHJvZHVjZXIKICAgICAgd2F0ZXJtYXJrcyA9IHNlbGYuX3dhdGVybWFya19tYW5hZ2VyLmdldF93YXRlcm1hcmtzKAogICAgICAgICAgcHJvZHVjaW5nX2FwcGxpZWRfcHRyYW5zZm9ybSkKICAgICAgaW5fcHJvZ3Jlc3NfYnVuZGxlLmNvbW1pdCh3YXRlcm1hcmtzLnN5bmNocm9uaXplZF9wcm9jZXNzaW5nX291dHB1dF90aW1lKQoKICAgIGZvciB1bnByb2Nlc3NlZF9idW5kbGUgaW4gdW5wcm9jZXNzZWRfYnVuZGxlczoKICAgICAgdW5wcm9jZXNzZWRfYnVuZGxlLmNvbW1pdChOb25lKQogICAgcmV0dXJuIHR1cGxlKHVuY29tbWl0dGVkX2J1bmRsZXMpLCB0dXBsZSh1bnByb2Nlc3NlZF9idW5kbGVzKQoKICBkZWYgZ2V0X2V4ZWN1dGlvbl9jb250ZXh0KHNlbGYsIGFwcGxpZWRfcHRyYW5zZm9ybSk6CiAgICByZXR1cm4gX0V4ZWN1dGlvbkNvbnRleHQoCiAgICAgICAgc2VsZi5fd2F0ZXJtYXJrX21hbmFnZXIuZ2V0X3dhdGVybWFya3MoYXBwbGllZF9wdHJhbnNmb3JtKSwKICAgICAgICBzZWxmLl90cmFuc2Zvcm1fa2V5ZWRfc3RhdGVzW2FwcGxpZWRfcHRyYW5zZm9ybV0pCgogIGRlZiBjcmVhdGVfYnVuZGxlKHNlbGYsIG91dHB1dF9wY29sbGVjdGlvbik6CiAgICAiIiJDcmVhdGUgYW4gdW5jb21taXR0ZWQgYnVuZGxlIGZvciB0aGUgc3BlY2lmaWVkIFBDb2xsZWN0aW9uLiIiIgogICAgcmV0dXJuIHNlbGYuX2J1bmRsZV9mYWN0b3J5LmNyZWF0ZV9idW5kbGUob3V0cHV0X3Bjb2xsZWN0aW9uKQoKICBkZWYgY3JlYXRlX2VtcHR5X2NvbW1pdHRlZF9idW5kbGUoc2VsZiwgb3V0cHV0X3Bjb2xsZWN0aW9uKToKICAgICIiIkNyZWF0ZSBlbXB0eSBidW5kbGUgdXNlZnVsIGZvciB0cmlnZ2VyaW5nIGV2YWx1YXRpb24uIiIiCiAgICByZXR1cm4gc2VsZi5fYnVuZGxlX2ZhY3RvcnkuY3JlYXRlX2VtcHR5X2NvbW1pdHRlZF9idW5kbGUoCiAgICAgICAgb3V0cHV0X3Bjb2xsZWN0aW9uKQoKICBkZWYgZXh0cmFjdF9hbGxfdGltZXJzKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX3dhdGVybWFya19tYW5hZ2VyLmV4dHJhY3RfYWxsX3RpbWVycygpCgogIGRlZiBpc19kb25lKHNlbGYsIHRyYW5zZm9ybT1Ob25lKToKICAgICIiIkNoZWNrcyBjb21wbGV0aW9uIG9mIGEgc3RlcCBvciB0aGUgcGlwZWxpbmUuCgogICAgQXJnczoKICAgICAgdHJhbnNmb3JtOiBBcHBsaWVkUFRyYW5zZm9ybSB0byBjaGVjayBmb3IgY29tcGxldGlvbi4KCiAgICBSZXR1cm5zOgogICAgICBUcnVlIGlmIHRoZSBzdGVwIHdpbGwgbm90IHByb2R1Y2UgYWRkaXRpb25hbCBvdXRwdXQuIElmIHRyYW5zZm9ybSBpcyBOb25lCiAgICAgIHJldHVybnMgdHJ1ZSBpZiBhbGwgc3RlcHMgYXJlIGRvbmUuCiAgICAiIiIKICAgIGlmIHRyYW5zZm9ybToKICAgICAgcmV0dXJuIHNlbGYuX2lzX3RyYW5zZm9ybV9kb25lKHRyYW5zZm9ybSkKCiAgICBmb3IgYXBwbGllZF9wdHJhbnNmb3JtIGluIHNlbGYuX3N0ZXBfbmFtZXM6CiAgICAgIGlmIG5vdCBzZWxmLl9pc190cmFuc2Zvcm1fZG9uZShhcHBsaWVkX3B0cmFuc2Zvcm0pOgogICAgICAgIHJldHVybiBGYWxzZQogICAgcmV0dXJuIFRydWUKCiAgZGVmIF9pc190cmFuc2Zvcm1fZG9uZShzZWxmLCB0cmFuc2Zvcm0pOgogICAgdHcgPSBzZWxmLl93YXRlcm1hcmtfbWFuYWdlci5nZXRfd2F0ZXJtYXJrcyh0cmFuc2Zvcm0pCiAgICByZXR1cm4gdHcub3V0cHV0X3dhdGVybWFyayA9PSBXYXRlcm1hcmtNYW5hZ2VyLldBVEVSTUFSS19QT1NfSU5GCgogIGRlZiBnZXRfdmFsdWVfb3JfYmxvY2tfdW50aWxfcmVhZHkoc2VsZiwgc2lkZV9pbnB1dCwgdGFzaywgYmxvY2tfdW50aWwpOgogICAgYXNzZXJ0IGlzaW5zdGFuY2UodGFzaywgVHJhbnNmb3JtRXhlY3V0b3IpCiAgICByZXR1cm4gc2VsZi5fc2lkZV9pbnB1dHNfY29udGFpbmVyLmdldF92YWx1ZV9vcl9ibG9ja191bnRpbF9yZWFkeSgKICAgICAgICBzaWRlX2lucHV0LCB0YXNrLCBibG9ja191bnRpbCkKCgpjbGFzcyBEaXJlY3RVbm1lcmdlZFN0YXRlKEluTWVtb3J5VW5tZXJnZWRTdGF0ZSk6CiAgIiIiVW5tZXJnZWRTdGF0ZSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIERpcmVjdFJ1bm5lci4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgc3VwZXIoRGlyZWN0VW5tZXJnZWRTdGF0ZSwgc2VsZikuX19pbml0X18oZGVmZW5zaXZlX2NvcHk9RmFsc2UpCgoKY2xhc3MgRGlyZWN0U3RlcENvbnRleHQob2JqZWN0KToKICAiIiJDb250ZXh0IGZvciB0aGUgY3VycmVudGx5LWV4ZWN1dGluZyBzdGVwLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgZXhpc3Rpbmdfa2V5ZWRfc3RhdGUpOgogICAgc2VsZi5leGlzdGluZ19rZXllZF9zdGF0ZSA9IGV4aXN0aW5nX2tleWVkX3N0YXRlCiAgICAjIEluIG9yZGVyIHRvIGF2b2lkIHBhcnRpYWwgd3JpdGVzIG9mIGEgYnVuZGxlLCBldmVyeSB0aW1lCiAgICAjIGV4aXN0aW5nX2tleWVkX3N0YXRlIGlzIGFjY2Vzc2VkLCBhIGNvcHkgb2YgdGhlIHN0YXRlIGlzIG1hZGUKICAgICMgdG8gYmUgdHJhbnNmZXJyZWQgdG8gdGhlIGJ1bmRsZSBzdGF0ZSBvbmNlIHRoZSBidW5kbGUgaXMgY29tbWl0dGVkLgogICAgc2VsZi5wYXJ0aWFsX2tleWVkX3N0YXRlID0ge30KCiAgZGVmIGdldF9rZXllZF9zdGF0ZShzZWxmLCBrZXkpOgogICAgaWYgbm90IHNlbGYuZXhpc3Rpbmdfa2V5ZWRfc3RhdGUuZ2V0KGtleSk6CiAgICAgIHNlbGYuZXhpc3Rpbmdfa2V5ZWRfc3RhdGVba2V5XSA9IERpcmVjdFVubWVyZ2VkU3RhdGUoKQogICAgaWYgbm90IHNlbGYucGFydGlhbF9rZXllZF9zdGF0ZS5nZXQoa2V5KToKICAgICAgc2VsZi5wYXJ0aWFsX2tleWVkX3N0YXRlW2tleV0gPSBzZWxmLmV4aXN0aW5nX2tleWVkX3N0YXRlW2tleV0uY29weSgpCiAgICByZXR1cm4gc2VsZi5wYXJ0aWFsX2tleWVkX3N0YXRlW2tleV0KfXL3ggAAKFgvAAAARXZhbHVhdGlvbkNvbnRleHQuY3JlYXRlX2VtcHR5X2NvbW1pdHRlZF9idW5kbGVYAwAAAGRlZk1SAU1WAYdYEQAAAEV2YWx1YXRpb25Db250ZXh0WAUAAABjbGFzc0u8TXQBh1gnAAAARXZhbHVhdGlvbkNvbnRleHQuZ2V0X2FnZ3JlZ2F0b3JfdmFsdWVzWAMAAABkZWZNMwFNNQGHWB8AAABfU2lkZUlucHV0c0NvbnRhaW5lci5hZGRfdmFsdWVzWAMAAABkZWZLcEt0h1gzAAAAX1NpZGVJbnB1dHNDb250YWluZXIuZ2V0X3ZhbHVlX29yX2Jsb2NrX3VudGlsX3JlYWR5WAMAAABkZWZLWEtvh1gdAAAAX1NpZGVJbnB1dHNDb250YWluZXIuX19pbml0X19YAwAAAGRlZktJS1KHWB8AAABFdmFsdWF0aW9uQ29udGV4dC5jcmVhdGVfYnVuZGxlWAMAAABkZWZNTgFNUQGHWEgAAABfU2lkZUlucHV0c0NvbnRhaW5lci5fdXBkYXRlX3dhdGVybWFya3NfZm9yX3NpZGVfaW5wdXRfYW5kX3VuYmxvY2tfdGFza3NYAwAAAGRlZkuLS6mHWDAAAABFdmFsdWF0aW9uQ29udGV4dC5nZXRfdmFsdWVfb3JfYmxvY2tfdW50aWxfcmVhZHlYAwAAAGRlZk1wAU10AYdYEQAAAF9FeGVjdXRpb25Db250ZXh0WAUAAABjbGFzc0siSzGHWCcAAABFdmFsdWF0aW9uQ29udGV4dC5nZXRfZXhlY3V0aW9uX2NvbnRleHRYAwAAAGRlZk1JAU1NAYdYIQAAAERpcmVjdFN0ZXBDb250ZXh0LmdldF9rZXllZF9zdGF0ZVgDAAAAZGVmTYcBTY0Bh1gkAAAARXZhbHVhdGlvbkNvbnRleHQuZXh0cmFjdF9hbGxfdGltZXJzWAMAAABkZWZNVwFNWQGHWBoAAABEaXJlY3RTdGVwQ29udGV4dC5fX2luaXRfX1gDAAAAZGVmTYABTYYBh1gXAAAAX1NpZGVJbnB1dFZpZXcuX19yZXByX19YAwAAAGRlZks8S0CHWB8AAABFdmFsdWF0aW9uQ29udGV4dC5oYW5kbGVfcmVzdWx0WAMAAABkZWZL+E0yAYdYIgAAAF9FeGVjdXRpb25Db250ZXh0LmdldF9zdGVwX2NvbnRleHRYAwAAAGRlZksqSy6HWBQAAABfU2lkZUlucHV0c0NvbnRhaW5lclgFAAAAY2xhc3NLQku6h1gRAAAARGlyZWN0U3RlcENvbnRleHRYBQAAAGNsYXNzTX0BTY0Bh1gZAAAARXZhbHVhdGlvbkNvbnRleHQubWV0cmljc1gDAAAAZGVmS/FL9IdYIQAAAEV2YWx1YXRpb25Db250ZXh0Ll9jb21taXRfYnVuZGxlc1gDAAAAZGVmTT0BTUgBh1gXAAAAX1NpZGVJbnB1dFZpZXcuX19pbml0X19YAwAAAGRlZks1SzuHWDIAAABFdmFsdWF0aW9uQ29udGV4dC5zY2hlZHVsZV9wZW5kaW5nX3VuYmxvY2tlZF90YXNrc1gDAAAAZGVmTTYBTTwBh1gXAAAAX0V4ZWN1dGlvbkNvbnRleHQucmVzZXRYAwAAAGRlZksvSzGHWBMAAABEaXJlY3RVbm1lcmdlZFN0YXRlWAUAAABjbGFzc012AU17AYdYKgAAAEV2YWx1YXRpb25Db250ZXh0Ll9pbml0aWFsaXplX2tleWVkX3N0YXRlc1gDAAAAZGVmS+hL8IdYJQAAAF9TaWRlSW5wdXRzQ29udGFpbmVyLl9wdmFsdWVfdG9fdmFsdWVYAwAAAGRlZkuqS7qHWEYAAABfU2lkZUlucHV0c0NvbnRhaW5lci51cGRhdGVfd2F0ZXJtYXJrc19mb3JfdHJhbnNmb3JtX2FuZF91bmJsb2NrX3Rhc2tzWAMAAABkZWZLdUuKh1gdAAAAX1NpZGVJbnB1dHNDb250YWluZXIuX19yZXByX19YAwAAAGRlZktTS1eHWBoAAABFdmFsdWF0aW9uQ29udGV4dC5fX2luaXRfX1gDAAAAZGVmS9FL54dYGgAAAF9FeGVjdXRpb25Db250ZXh0Ll9faW5pdF9fWAMAAABkZWZLJEsph1gjAAAARXZhbHVhdGlvbkNvbnRleHQuaXNfcm9vdF90cmFuc2Zvcm1YAwAAAGRlZkv1S/eHWCQAAABFdmFsdWF0aW9uQ29udGV4dC5faXNfdHJhbnNmb3JtX2RvbmVYAwAAAGRlZk1sAU1vAYdYDgAAAF9TaWRlSW5wdXRWaWV3WAUAAABjbGFzc0szS0CHWBkAAABFdmFsdWF0aW9uQ29udGV4dC5pc19kb25lWAMAAABkZWZNWgFNawGHWBwAAABEaXJlY3RVbm1lcmdlZFN0YXRlLl9faW5pdF9fWAMAAABkZWZNeQFNewGHdX1y+IIAAChYLwAAAEV2YWx1YXRpb25Db250ZXh0LmNyZWF0ZV9lbXB0eV9jb21taXR0ZWRfYnVuZGxlavpkAABYGQAAAEV2YWx1YXRpb25Db250ZXh0Lm1ldHJpY3Nq+mQAAFghAAAARGlyZWN0U3RlcENvbnRleHQuZ2V0X2tleWVkX3N0YXRlavpkAABYJAAAAEV2YWx1YXRpb25Db250ZXh0LmV4dHJhY3RfYWxsX3RpbWVyc2r6ZAAAWBEAAABFdmFsdWF0aW9uQ29udGV4dGr6ZAAAWB8AAABFdmFsdWF0aW9uQ29udGV4dC5oYW5kbGVfcmVzdWx0avpkAABYJwAAAEV2YWx1YXRpb25Db250ZXh0LmdldF9hZ2dyZWdhdG9yX3ZhbHVlc2r6ZAAAWCMAAABFdmFsdWF0aW9uQ29udGV4dC5pc19yb290X3RyYW5zZm9ybWr6ZAAAWBkAAABFdmFsdWF0aW9uQ29udGV4dC5pc19kb25lavpkAABYHwAAAEV2YWx1YXRpb25Db250ZXh0LmNyZWF0ZV9idW5kbGVq+mQAAFgRAAAARGlyZWN0U3RlcENvbnRleHRq+mQAAFgTAAAARGlyZWN0VW5tZXJnZWRTdGF0ZWr6ZAAAWDIAAABFdmFsdWF0aW9uQ29udGV4dC5zY2hlZHVsZV9wZW5kaW5nX3VuYmxvY2tlZF90YXNrc2r6ZAAAWDAAAABFdmFsdWF0aW9uQ29udGV4dC5nZXRfdmFsdWVfb3JfYmxvY2tfdW50aWxfcmVhZHlq+mQAAFgnAAAARXZhbHVhdGlvbkNvbnRleHQuZ2V0X2V4ZWN1dGlvbl9jb250ZXh0avpkAAB1an1pAABYLQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dHL5ggAAhYFy+oIAAH1y+4IAAGJ0VRlhcGFjaGVfYmVhbS5pby50ZnJlY29yZGlvKFjcMAAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCiIiIlRGUmVjb3JkIHNvdXJjZXMgYW5kIHNpbmtzLiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBjb2RlY3MKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHN0cnVjdApmcm9tIGJ1aWx0aW5zIGltcG9ydCBvYmplY3QKZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHBhcnRpYWwKCmltcG9ydCBjcmNtb2QKCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IGNvZGVycwpmcm9tIGFwYWNoZV9iZWFtLmlvIGltcG9ydCBmaWxlYmFzZWRzaW5rCmZyb20gYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc291cmNlIGltcG9ydCBGaWxlQmFzZWRTb3VyY2UKZnJvbSBhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2UgaW1wb3J0IFJlYWRBbGxGaWxlcwpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0gaW1wb3J0IENvbXByZXNzaW9uVHlwZXMKZnJvbSBhcGFjaGVfYmVhbS5pby5pb2Jhc2UgaW1wb3J0IFJlYWQKZnJvbSBhcGFjaGVfYmVhbS5pby5pb2Jhc2UgaW1wb3J0IFdyaXRlCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgUFRyYW5zZm9ybQoKX19hbGxfXyA9IFsnUmVhZEZyb21URlJlY29yZCcsICdXcml0ZVRvVEZSZWNvcmQnXQoKCmRlZiBfZGVmYXVsdF9jcmMzMmNfZm4odmFsdWUpOgogICIiIkNhbGN1bGF0ZXMgY3JjMzJjIG9mIGEgYnl0ZXMgb2JqZWN0IHVzaW5nIGVpdGhlciBzbmFwcHkgb3IgY3JjbW9kLiIiIgoKICBpZiBub3QgX2RlZmF1bHRfY3JjMzJjX2ZuLmZuOgogICAgdHJ5OgogICAgICBpbXBvcnQgc25hcHB5ICAjIHB5bGludDogZGlzYWJsZT1pbXBvcnQtZXJyb3IKICAgICAgIyBTdXBwb3J0IG11bHRpcGxlIHZlcnNpb25zIG9mIHB5dGhvbi1zbmFwcHk6CiAgICAgICMgaHR0cHM6Ly9naXRodWIuY29tL2FuZHJpeC9weXRob24tc25hcHB5L3B1bGwvNTMKICAgICAgaWYgZ2V0YXR0cihzbmFwcHksICdfY3JjMzJjJywgTm9uZSk6CiAgICAgICAgX2RlZmF1bHRfY3JjMzJjX2ZuLmZuID0gc25hcHB5Ll9jcmMzMmMgICMgcHlsaW50OiBkaXNhYmxlPXByb3RlY3RlZC1hY2Nlc3MKICAgICAgZWxzZToKICAgICAgICBfZGVmYXVsdF9jcmMzMmNfZm4uZm4gPSBzbmFwcHkuX3NuYXBweS5fY3JjMzJjICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCiAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgIGxvZ2dpbmcud2FybmluZygnQ291bGRuXCd0IGZpbmQgcHl0aG9uLXNuYXBweSBzbyB0aGUgaW1wbGVtZW50YXRpb24gb2YgJwogICAgICAgICAgICAgICAgICAgICAgJ19URlJlY29yZFV0aWwuX21hc2tlZF9jcmMzMmMgaXMgbm90IGFzIGZhc3QgYXMgaXQgY291bGQgJwogICAgICAgICAgICAgICAgICAgICAgJ2JlLicpCiAgICAgIF9kZWZhdWx0X2NyYzMyY19mbi5mbiA9IGNyY21vZC5wcmVkZWZpbmVkLm1rUHJlZGVmaW5lZENyY0Z1bignY3JjLTMyYycpCiAgcmV0dXJuIF9kZWZhdWx0X2NyYzMyY19mbi5mbih2YWx1ZSkKCgpfZGVmYXVsdF9jcmMzMmNfZm4uZm4gPSBOb25lCgoKY2xhc3MgX1RGUmVjb3JkVXRpbChvYmplY3QpOgogICIiIlByb3ZpZGVzIGJhc2ljIFRGUmVjb3JkIGVuY29kaW5nL2RlY29kaW5nIHdpdGggY29uc2lzdGVuY3kgY2hlY2tzLgoKICBGb3IgZGV0YWlsZWQgVEZSZWNvcmQgZm9ybWF0IGRlc2NyaXB0aW9uIHNlZToKICAgIGh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL3ZlcnNpb25zL3IxLjExL2FwaV9ndWlkZXMvcHl0aG9uL3B5dGhvbl9pbyNURlJlY29yZHNfRm9ybWF0X0RldGFpbHMKCiAgTm90ZSB0aGF0IG1hc2tzIGFuZCBsZW5ndGggYXJlIHJlcHJlc2VudGVkIGluIExpdHRsZUVuZGlhbiBvcmRlci4KICAiIiIKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIF9tYXNrZWRfY3JjMzJjKGNscywgdmFsdWUsIGNyYzMyY19mbj1fZGVmYXVsdF9jcmMzMmNfZm4pOgogICAgIiIiQ29tcHV0ZSBhIG1hc2tlZCBjcmMzMmMgY2hlY2tzdW0gZm9yIGEgdmFsdWUuCgogICAgQXJnczoKICAgICAgdmFsdWU6IEEgYnl0ZXMgb2JqZWN0IGZvciB3aGljaCB3ZSBjb21wdXRlIHRoZSBjcmMuCiAgICAgIGNyYzMyY19mbjogQSBmdW5jdGlvbiB0aGF0IGNhbiBjb21wdXRlIGEgY3JjMzJjLgogICAgICAgIFRoaXMgaXMgYSBwZXJmb3JtYW5jZSBob29rIHRoYXQgYWxzbyBoZWxwcyB3aXRoIHRlc3RpbmcuIENhbGxlcnMgYXJlCiAgICAgICAgbm90IGV4cGVjdGVkIHRvIG1ha2UgdXNlIG9mIGl0IGRpcmVjdGx5LgogICAgUmV0dXJuczoKICAgICAgTWFza2VkIGNyYzMyYyBjaGVja3N1bS4KICAgICIiIgoKICAgIGNyYyA9IGNyYzMyY19mbih2YWx1ZSkKICAgIHJldHVybiAoKChjcmMgPj4gMTUpIHwgKGNyYyA8PCAxNykpICsgMHhhMjgyZWFkOCkgJiAweGZmZmZmZmZmCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZW5jb2RlZF9udW1fYnl0ZXMocmVjb3JkKToKICAgICIiIlJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvbnN1bWVkIGJ5IGEgcmVjb3JkIGluIGl0cyBlbmNvZGVkIGZvcm0uIiIiCiAgICAjIDE2ID0gOCAoTGVuZ3RoKSArIDQgKGNyYyBvZiBsZW5ndGgpICsgNCAoY3JjIG9mIGRhdGEpCiAgICByZXR1cm4gbGVuKHJlY29yZCkgKyAxNgoKICBAY2xhc3NtZXRob2QKICBkZWYgd3JpdGVfcmVjb3JkKGNscywgZmlsZV9oYW5kbGUsIHZhbHVlKToKICAgICIiIkVuY29kZSBhIHZhbHVlIGFzIGEgVEZSZWNvcmQuCgogICAgQXJnczoKICAgICAgZmlsZV9oYW5kbGU6IFRoZSBmaWxlIHRvIHdyaXRlIHRvLgogICAgICB2YWx1ZTogQSBieXRlcyBvYmplY3QgcmVwcmVzZW50aW5nIGNvbnRlbnQgb2YgdGhlIHJlY29yZC4KICAgICIiIgogICAgZW5jb2RlZF9sZW5ndGggPSBzdHJ1Y3QucGFjayhiJzxRJywgbGVuKHZhbHVlKSkKICAgIGZpbGVfaGFuZGxlLndyaXRlKGInJy5qb2luKFsKICAgICAgICBlbmNvZGVkX2xlbmd0aCwKICAgICAgICBzdHJ1Y3QucGFjayhiJzxJJywgY2xzLl9tYXNrZWRfY3JjMzJjKGVuY29kZWRfbGVuZ3RoKSksCiAgICAgICAgdmFsdWUsCiAgICAgICAgc3RydWN0LnBhY2soYic8SScsIGNscy5fbWFza2VkX2NyYzMyYyh2YWx1ZSkpCiAgICBdKSkKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIHJlYWRfcmVjb3JkKGNscywgZmlsZV9oYW5kbGUpOgogICAgIiIiUmVhZCBhIHJlY29yZCBmcm9tIGEgVEZSZWNvcmRzIGZpbGUuCgogICAgQXJnczoKICAgICAgZmlsZV9oYW5kbGU6IFRoZSBmaWxlIHRvIHJlYWQgZnJvbS4KICAgIFJldHVybnM6CiAgICAgIE5vbmUgaWYgRU9GIGlzIHJlYWNoZWQ7IHRoZSBwYXlsb2Qgb2YgdGhlIHJlY29yZCBvdGhlcndpc2UuCiAgICBSYWlzZXM6CiAgICAgIFZhbHVlRXJyb3I6IElmIGZpbGUgYXBwZWFycyB0byBub3QgYmUgYSB2YWxpZCBURlJlY29yZHMgZmlsZS4KICAgICIiIgogICAgYnVmX2xlbmd0aF9leHBlY3RlZCA9IDEyCiAgICBidWYgPSBmaWxlX2hhbmRsZS5yZWFkKGJ1Zl9sZW5ndGhfZXhwZWN0ZWQpCiAgICBpZiBub3QgYnVmOgogICAgICByZXR1cm4gTm9uZSAgIyBFT0YgUmVhY2hlZC4KCiAgICAjIFZhbGlkYXRlIGFsbCBsZW5ndGggcmVsYXRlZCBwYXlsb2Fkcy4KICAgIGlmIGxlbihidWYpICE9IGJ1Zl9sZW5ndGhfZXhwZWN0ZWQ6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ05vdCBhIHZhbGlkIFRGUmVjb3JkLiBGZXdlciB0aGFuICVkIGJ5dGVzOiAlcycgJQogICAgICAgICAgICAgICAgICAgICAgIChidWZfbGVuZ3RoX2V4cGVjdGVkLCBjb2RlY3MuZW5jb2RlKGJ1ZiwgJ2hleCcpKSkKICAgIGxlbmd0aCwgbGVuZ3RoX21hc2tfZXhwZWN0ZWQgPSBzdHJ1Y3QudW5wYWNrKCc8UUknLCBidWYpCiAgICBsZW5ndGhfbWFza19hY3R1YWwgPSBjbHMuX21hc2tlZF9jcmMzMmMoYnVmWzo4XSkKICAgIGlmIGxlbmd0aF9tYXNrX2FjdHVhbCAhPSBsZW5ndGhfbWFza19leHBlY3RlZDoKICAgICAgcmFpc2UgVmFsdWVFcnJvcignTm90IGEgdmFsaWQgVEZSZWNvcmQuIE1pc21hdGNoIG9mIGxlbmd0aCBtYXNrOiAlcycgJQogICAgICAgICAgICAgICAgICAgICAgIGNvZGVjcy5lbmNvZGUoYnVmLCAnaGV4JykpCgogICAgIyBWYWxpZGF0ZSBhbGwgZGF0YSByZWxhdGVkIHBheWxvYWRzLgogICAgYnVmX2xlbmd0aF9leHBlY3RlZCA9IGxlbmd0aCArIDQKICAgIGJ1ZiA9IGZpbGVfaGFuZGxlLnJlYWQoYnVmX2xlbmd0aF9leHBlY3RlZCkKICAgIGlmIGxlbihidWYpICE9IGJ1Zl9sZW5ndGhfZXhwZWN0ZWQ6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ05vdCBhIHZhbGlkIFRGUmVjb3JkLiBGZXdlciB0aGFuICVkIGJ5dGVzOiAlcycgJQogICAgICAgICAgICAgICAgICAgICAgIChidWZfbGVuZ3RoX2V4cGVjdGVkLCBjb2RlY3MuZW5jb2RlKGJ1ZiwgJ2hleCcpKSkKICAgIGRhdGEsIGRhdGFfbWFza19leHBlY3RlZCA9IHN0cnVjdC51bnBhY2soJzwlZHNJJyAlIGxlbmd0aCwgYnVmKQogICAgZGF0YV9tYXNrX2FjdHVhbCA9IGNscy5fbWFza2VkX2NyYzMyYyhkYXRhKQogICAgaWYgZGF0YV9tYXNrX2FjdHVhbCAhPSBkYXRhX21hc2tfZXhwZWN0ZWQ6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ05vdCBhIHZhbGlkIFRGUmVjb3JkLiBNaXNtYXRjaCBvZiBkYXRhIG1hc2s6ICVzJyAlCiAgICAgICAgICAgICAgICAgICAgICAgY29kZWNzLmVuY29kZShidWYsICdoZXgnKSkKCiAgICAjIEFsbCB2YWxpZGF0aW9uIGNoZWNrcyBwYXNzZWQuCiAgICByZXR1cm4gZGF0YQoKCmNsYXNzIF9URlJlY29yZFNvdXJjZShGaWxlQmFzZWRTb3VyY2UpOgogICIiIkEgRmlsZSBzb3VyY2UgZm9yIHJlYWRpbmcgZmlsZXMgb2YgVEZSZWNvcmRzLgoKICBGb3IgZGV0YWlsZWQgVEZSZWNvcmRzIGZvcm1hdCBkZXNjcmlwdGlvbiBzZWU6CiAgICBodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy92ZXJzaW9ucy9yMS4xMS9hcGlfZ3VpZGVzL3B5dGhvbi9weXRob25faW8jVEZSZWNvcmRzX0Zvcm1hdF9EZXRhaWxzCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLAogICAgICAgICAgICAgICBmaWxlX3BhdHRlcm4sCiAgICAgICAgICAgICAgIGNvZGVyLAogICAgICAgICAgICAgICBjb21wcmVzc2lvbl90eXBlLAogICAgICAgICAgICAgICB2YWxpZGF0ZSk6CiAgICAiIiJJbml0aWFsaXplIGEgVEZSZWNvcmRTb3VyY2UuICBTZWUgUmVhZEZyb21URlJlY29yZCBmb3IgZGV0YWlscy4iIiIKICAgIHN1cGVyKF9URlJlY29yZFNvdXJjZSwgc2VsZikuX19pbml0X18oCiAgICAgICAgZmlsZV9wYXR0ZXJuPWZpbGVfcGF0dGVybiwKICAgICAgICBjb21wcmVzc2lvbl90eXBlPWNvbXByZXNzaW9uX3R5cGUsCiAgICAgICAgc3BsaXR0YWJsZT1GYWxzZSwKICAgICAgICB2YWxpZGF0ZT12YWxpZGF0ZSkKICAgIHNlbGYuX2NvZGVyID0gY29kZXIKCiAgZGVmIHJlYWRfcmVjb3JkcyhzZWxmLCBmaWxlX25hbWUsIG9mZnNldF9yYW5nZV90cmFja2VyKToKICAgIGlmIG9mZnNldF9yYW5nZV90cmFja2VyLnN0YXJ0X3Bvc2l0aW9uKCk6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1N0YXJ0IHBvc2l0aW9uIG5vdCAwOiVzJyAlCiAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0X3JhbmdlX3RyYWNrZXIuc3RhcnRfcG9zaXRpb24oKSkKCiAgICBjdXJyZW50X29mZnNldCA9IG9mZnNldF9yYW5nZV90cmFja2VyLnN0YXJ0X3Bvc2l0aW9uKCkKICAgIHdpdGggc2VsZi5vcGVuX2ZpbGUoZmlsZV9uYW1lKSBhcyBmaWxlX2hhbmRsZToKICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICBpZiBub3Qgb2Zmc2V0X3JhbmdlX3RyYWNrZXIudHJ5X2NsYWltKGN1cnJlbnRfb2Zmc2V0KToKICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignVW5hYmxlIHRvIGNsYWltIHBvc2l0aW9uOiAlcycgJSBjdXJyZW50X29mZnNldCkKICAgICAgICByZWNvcmQgPSBfVEZSZWNvcmRVdGlsLnJlYWRfcmVjb3JkKGZpbGVfaGFuZGxlKQogICAgICAgIGlmIHJlY29yZCBpcyBOb25lOgogICAgICAgICAgcmV0dXJuICAjIFJlYWNoZWQgRU9GCiAgICAgICAgZWxzZToKICAgICAgICAgIGN1cnJlbnRfb2Zmc2V0ICs9IF9URlJlY29yZFV0aWwuZW5jb2RlZF9udW1fYnl0ZXMocmVjb3JkKQogICAgICAgICAgeWllbGQgc2VsZi5fY29kZXIuZGVjb2RlKHJlY29yZCkKCgpkZWYgX2NyZWF0ZV90ZnJlY29yZGlvX3NvdXJjZSgKICAgIGZpbGVfcGF0dGVybj1Ob25lLCBjb2Rlcj1Ob25lLCBjb21wcmVzc2lvbl90eXBlPU5vbmUpOgogICMgV2UgaW50ZW50aW9uYWxseSBkaXNhYmxlIHZhbGlkYXRpb24gZm9yIFJlYWRBbGwgcGF0dGVybiBzbyB0aGF0IHJlYWRpbmcgZG9lcwogICMgbm90IGZhaWwgZm9yIGdsb2JzIChlbGVtZW50cykgdGhhdCBhcmUgZW1wdHkuCiAgcmV0dXJuIF9URlJlY29yZFNvdXJjZShmaWxlX3BhdHRlcm4sIGNvZGVyLCBjb21wcmVzc2lvbl90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGU9RmFsc2UpCgoKY2xhc3MgUmVhZEFsbEZyb21URlJlY29yZChQVHJhbnNmb3JtKToKICAiIiJBIGBgUFRyYW5zZm9ybWBgIGZvciByZWFkaW5nIGEgYGBQQ29sbGVjdGlvbmBgIG9mIFRGUmVjb3JkIGZpbGVzLiIiIgoKICBkZWYgX19pbml0X18oCiAgICAgIHNlbGYsCiAgICAgIGNvZGVyPWNvZGVycy5CeXRlc0NvZGVyKCksCiAgICAgIGNvbXByZXNzaW9uX3R5cGU9Q29tcHJlc3Npb25UeXBlcy5BVVRPLAogICAgICAqKmt3YXJncyk6CiAgICAiIiJJbml0aWFsaXplIHRoZSBgYFJlYWRBbGxGcm9tVEZSZWNvcmRgYCB0cmFuc2Zvcm0uCgogICAgQXJnczoKICAgICAgY29kZXI6IENvZGVyIHVzZWQgdG8gZGVjb2RlIGVhY2ggcmVjb3JkLgogICAgICBjb21wcmVzc2lvbl90eXBlOiBVc2VkIHRvIGhhbmRsZSBjb21wcmVzc2VkIGlucHV0IGZpbGVzLiBEZWZhdWx0IHZhbHVlCiAgICAgICAgICBpcyBDb21wcmVzc2lvblR5cGVzLkFVVE8sIGluIHdoaWNoIGNhc2UgdGhlIGZpbGVfcGF0aCdzIGV4dGVuc2lvbiB3aWxsCiAgICAgICAgICBiZSB1c2VkIHRvIGRldGVjdCB0aGUgY29tcHJlc3Npb24uCiAgICAgICoqa3dhcmdzOiBvcHRpb25hbCBhcmdzIGRpY3Rpb25hcnkuIFRoZXNlIGFyZSBwYXNzZWQgdGhyb3VnaCB0byBwYXJlbnQKICAgICAgICBjb25zdHJ1Y3Rvci4KICAgICIiIgogICAgc3VwZXIoUmVhZEFsbEZyb21URlJlY29yZCwgc2VsZikuX19pbml0X18oKiprd2FyZ3MpCiAgICBzb3VyY2VfZnJvbV9maWxlID0gcGFydGlhbCgKICAgICAgICBfY3JlYXRlX3RmcmVjb3JkaW9fc291cmNlLCBjb21wcmVzc2lvbl90eXBlPWNvbXByZXNzaW9uX3R5cGUsCiAgICAgICAgY29kZXI9Y29kZXIpCiAgICAjIERlc2lyZWQgYW5kIG1pbiBidW5kbGUgc2l6ZXMgZG8gbm90IG1hdHRlciBzaW5jZSBURlJlY29yZCBmaWxlcyBhcmUKICAgICMgdW5zcGxpdHRhYmxlLgogICAgc2VsZi5fcmVhZF9hbGxfZmlsZXMgPSBSZWFkQWxsRmlsZXMoCiAgICAgICAgc3BsaXR0YWJsZT1GYWxzZSwgY29tcHJlc3Npb25fdHlwZT1jb21wcmVzc2lvbl90eXBlLAogICAgICAgIGRlc2lyZWRfYnVuZGxlX3NpemU9MCwgbWluX2J1bmRsZV9zaXplPTAsCiAgICAgICAgc291cmNlX2Zyb21fZmlsZT1zb3VyY2VfZnJvbV9maWxlKQoKICBkZWYgZXhwYW5kKHNlbGYsIHB2YWx1ZSk6CiAgICByZXR1cm4gcHZhbHVlIHwgJ1JlYWRBbGxGaWxlcycgPj4gc2VsZi5fcmVhZF9hbGxfZmlsZXMKCgpjbGFzcyBSZWFkRnJvbVRGUmVjb3JkKFBUcmFuc2Zvcm0pOgogICIiIlRyYW5zZm9ybSBmb3IgcmVhZGluZyBURlJlY29yZCBzb3VyY2VzLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgZmlsZV9wYXR0ZXJuLAogICAgICAgICAgICAgICBjb2Rlcj1jb2RlcnMuQnl0ZXNDb2RlcigpLAogICAgICAgICAgICAgICBjb21wcmVzc2lvbl90eXBlPUNvbXByZXNzaW9uVHlwZXMuQVVUTywKICAgICAgICAgICAgICAgdmFsaWRhdGU9VHJ1ZSwKICAgICAgICAgICAgICAgKiprd2FyZ3MpOgogICAgIiIiSW5pdGlhbGl6ZSBhIFJlYWRGcm9tVEZSZWNvcmQgdHJhbnNmb3JtLgoKICAgIEFyZ3M6CiAgICAgIGZpbGVfcGF0dGVybjogQSBmaWxlIGdsb2IgcGF0dGVybiB0byByZWFkIFRGUmVjb3JkcyBmcm9tLgogICAgICBjb2RlcjogQ29kZXIgdXNlZCB0byBkZWNvZGUgZWFjaCByZWNvcmQuCiAgICAgIGNvbXByZXNzaW9uX3R5cGU6IFVzZWQgdG8gaGFuZGxlIGNvbXByZXNzZWQgaW5wdXQgZmlsZXMuIERlZmF1bHQgdmFsdWUKICAgICAgICAgIGlzIENvbXByZXNzaW9uVHlwZXMuQVVUTywgaW4gd2hpY2ggY2FzZSB0aGUgZmlsZV9wYXRoJ3MgZXh0ZW5zaW9uIHdpbGwKICAgICAgICAgIGJlIHVzZWQgdG8gZGV0ZWN0IHRoZSBjb21wcmVzc2lvbi4KICAgICAgdmFsaWRhdGU6IEJvb2xlYW4gZmxhZyB0byB2ZXJpZnkgdGhhdCB0aGUgZmlsZXMgZXhpc3QgZHVyaW5nIHRoZSBwaXBlbGluZQogICAgICAgICAgY3JlYXRpb24gdGltZS4KICAgICAgKiprd2FyZ3M6IG9wdGlvbmFsIGFyZ3MgZGljdGlvbmFyeS4gVGhlc2UgYXJlIHBhc3NlZCB0aHJvdWdoIHRvIHBhcmVudAogICAgICAgIGNvbnN0cnVjdG9yLgoKICAgIFJldHVybnM6CiAgICAgIEEgUmVhZEZyb21URlJlY29yZCB0cmFuc2Zvcm0gb2JqZWN0LgogICAgIiIiCiAgICBzdXBlcihSZWFkRnJvbVRGUmVjb3JkLCBzZWxmKS5fX2luaXRfXygqKmt3YXJncykKICAgIHNlbGYuX3NvdXJjZSA9IF9URlJlY29yZFNvdXJjZShmaWxlX3BhdHRlcm4sIGNvZGVyLCBjb21wcmVzc2lvbl90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlKQoKICBkZWYgZXhwYW5kKHNlbGYsIHB2YWx1ZSk6CiAgICByZXR1cm4gcHZhbHVlLnBpcGVsaW5lIHwgUmVhZChzZWxmLl9zb3VyY2UpCgoKY2xhc3MgX1RGUmVjb3JkU2luayhmaWxlYmFzZWRzaW5rLkZpbGVCYXNlZFNpbmspOgogICIiIlNpbmsgZm9yIHdyaXRpbmcgVEZSZWNvcmRzIGZpbGVzLgoKICBGb3IgZGV0YWlsZWQgVEZSZWNvcmQgZm9ybWF0IGRlc2NyaXB0aW9uIHNlZToKICAgIGh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL3ZlcnNpb25zL3IxLjExL2FwaV9ndWlkZXMvcHl0aG9uL3B5dGhvbl9pbyNURlJlY29yZHNfRm9ybWF0X0RldGFpbHMKICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVfcGF0aF9wcmVmaXgsIGNvZGVyLCBmaWxlX25hbWVfc3VmZml4LCBudW1fc2hhcmRzLAogICAgICAgICAgICAgICBzaGFyZF9uYW1lX3RlbXBsYXRlLCBjb21wcmVzc2lvbl90eXBlKToKICAgICIiIkluaXRpYWxpemUgYSBURlJlY29yZFNpbmsuIFNlZSBXcml0ZVRvVEZSZWNvcmQgZm9yIGRldGFpbHMuIiIiCgogICAgc3VwZXIoX1RGUmVjb3JkU2luaywgc2VsZikuX19pbml0X18oCiAgICAgICAgZmlsZV9wYXRoX3ByZWZpeD1maWxlX3BhdGhfcHJlZml4LAogICAgICAgIGNvZGVyPWNvZGVyLAogICAgICAgIGZpbGVfbmFtZV9zdWZmaXg9ZmlsZV9uYW1lX3N1ZmZpeCwKICAgICAgICBudW1fc2hhcmRzPW51bV9zaGFyZHMsCiAgICAgICAgc2hhcmRfbmFtZV90ZW1wbGF0ZT1zaGFyZF9uYW1lX3RlbXBsYXRlLAogICAgICAgIG1pbWVfdHlwZT0nYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywKICAgICAgICBjb21wcmVzc2lvbl90eXBlPWNvbXByZXNzaW9uX3R5cGUpCgogIGRlZiB3cml0ZV9lbmNvZGVkX3JlY29yZChzZWxmLCBmaWxlX2hhbmRsZSwgdmFsdWUpOgogICAgX1RGUmVjb3JkVXRpbC53cml0ZV9yZWNvcmQoZmlsZV9oYW5kbGUsIHZhbHVlKQoKCmNsYXNzIFdyaXRlVG9URlJlY29yZChQVHJhbnNmb3JtKToKICAiIiJUcmFuc2Zvcm0gZm9yIHdyaXRpbmcgdG8gVEZSZWNvcmQgc2lua3MuIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLAogICAgICAgICAgICAgICBmaWxlX3BhdGhfcHJlZml4LAogICAgICAgICAgICAgICBjb2Rlcj1jb2RlcnMuQnl0ZXNDb2RlcigpLAogICAgICAgICAgICAgICBmaWxlX25hbWVfc3VmZml4PScnLAogICAgICAgICAgICAgICBudW1fc2hhcmRzPTAsCiAgICAgICAgICAgICAgIHNoYXJkX25hbWVfdGVtcGxhdGU9Tm9uZSwKICAgICAgICAgICAgICAgY29tcHJlc3Npb25fdHlwZT1Db21wcmVzc2lvblR5cGVzLkFVVE8sCiAgICAgICAgICAgICAgICoqa3dhcmdzKToKICAgICIiIkluaXRpYWxpemUgV3JpdGVUb1RGUmVjb3JkIHRyYW5zZm9ybS4KCiAgICBBcmdzOgogICAgICBmaWxlX3BhdGhfcHJlZml4OiBUaGUgZmlsZSBwYXRoIHRvIHdyaXRlIHRvLiBUaGUgZmlsZXMgd3JpdHRlbiB3aWxsIGJlZ2luCiAgICAgICAgd2l0aCB0aGlzIHByZWZpeCwgZm9sbG93ZWQgYnkgYSBzaGFyZCBpZGVudGlmaWVyIChzZWUgbnVtX3NoYXJkcyksIGFuZAogICAgICAgIGVuZCBpbiBhIGNvbW1vbiBleHRlbnNpb24sIGlmIGdpdmVuIGJ5IGZpbGVfbmFtZV9zdWZmaXguCiAgICAgIGNvZGVyOiBDb2RlciB1c2VkIHRvIGVuY29kZSBlYWNoIHJlY29yZC4KICAgICAgZmlsZV9uYW1lX3N1ZmZpeDogU3VmZml4IGZvciB0aGUgZmlsZXMgd3JpdHRlbi4KICAgICAgbnVtX3NoYXJkczogVGhlIG51bWJlciBvZiBmaWxlcyAoc2hhcmRzKSB1c2VkIGZvciBvdXRwdXQuIElmIG5vdCBzZXQsIHRoZQogICAgICAgIGRlZmF1bHQgdmFsdWUgd2lsbCBiZSB1c2VkLgogICAgICBzaGFyZF9uYW1lX3RlbXBsYXRlOiBBIHRlbXBsYXRlIHN0cmluZyBjb250YWluaW5nIHBsYWNlaG9sZGVycyBmb3IKICAgICAgICB0aGUgc2hhcmQgbnVtYmVyIGFuZCBzaGFyZCBjb3VudC4gV2hlbiBjb25zdHJ1Y3RpbmcgYSBmaWxlbmFtZSBmb3IgYQogICAgICAgIHBhcnRpY3VsYXIgc2hhcmQgbnVtYmVyLCB0aGUgdXBwZXItY2FzZSBsZXR0ZXJzICdTJyBhbmQgJ04nIGFyZQogICAgICAgIHJlcGxhY2VkIHdpdGggdGhlIDAtcGFkZGVkIHNoYXJkIG51bWJlciBhbmQgc2hhcmQgY291bnQgcmVzcGVjdGl2ZWx5LgogICAgICAgIFRoaXMgYXJndW1lbnQgY2FuIGJlICcnIGluIHdoaWNoIGNhc2UgaXQgYmVoYXZlcyBhcyBpZiBudW1fc2hhcmRzIHdhcwogICAgICAgIHNldCB0byAxIGFuZCBvbmx5IG9uZSBmaWxlIHdpbGwgYmUgZ2VuZXJhdGVkLiBUaGUgZGVmYXVsdCBwYXR0ZXJuIHVzZWQKICAgICAgICBpcyAnLVNTU1NTLW9mLU5OTk5OJyBpZiBOb25lIGlzIHBhc3NlZCBhcyB0aGUgc2hhcmRfbmFtZV90ZW1wbGF0ZS4KICAgICAgY29tcHJlc3Npb25fdHlwZTogVXNlZCB0byBoYW5kbGUgY29tcHJlc3NlZCBvdXRwdXQgZmlsZXMuIFR5cGljYWwgdmFsdWUKICAgICAgICAgIGlzIENvbXByZXNzaW9uVHlwZXMuQVVUTywgaW4gd2hpY2ggY2FzZSB0aGUgZmlsZV9wYXRoJ3MgZXh0ZW5zaW9uIHdpbGwKICAgICAgICAgIGJlIHVzZWQgdG8gZGV0ZWN0IHRoZSBjb21wcmVzc2lvbi4KICAgICAgKiprd2FyZ3M6IE9wdGlvbmFsIGFyZ3MgZGljdGlvbmFyeS4gVGhlc2UgYXJlIHBhc3NlZCB0aHJvdWdoIHRvIHBhcmVudAogICAgICAgIGNvbnN0cnVjdG9yLgoKICAgIFJldHVybnM6CiAgICAgIEEgV3JpdGVUb1RGUmVjb3JkIHRyYW5zZm9ybSBvYmplY3QuCiAgICAiIiIKICAgIHN1cGVyKFdyaXRlVG9URlJlY29yZCwgc2VsZikuX19pbml0X18oKiprd2FyZ3MpCiAgICBzZWxmLl9zaW5rID0gX1RGUmVjb3JkU2luayhmaWxlX3BhdGhfcHJlZml4LCBjb2RlciwgZmlsZV9uYW1lX3N1ZmZpeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9zaGFyZHMsIHNoYXJkX25hbWVfdGVtcGxhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2lvbl90eXBlKQoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgIHJldHVybiBwY29sbCB8IFdyaXRlKHNlbGYuX3NpbmspCn1y/IIAAChYEAAAAFJlYWRGcm9tVEZSZWNvcmRYBQAAAGNsYXNzS+hNBwGHWBgAAABfVEZSZWNvcmRTb3VyY2UuX19pbml0X19YAwAAAGRlZkugS6yHWBkAAABfY3JlYXRlX3RmcmVjb3JkaW9fc291cmNlWAMAAABkZWZLv0vFh1gZAAAAX1RGUmVjb3JkVXRpbC5yZWFkX3JlY29yZFgDAAAAZGVmS29Ll4dYDQAAAF9URlJlY29yZFV0aWxYBQAAAGNsYXNzS0BLl4dYIgAAAF9URlJlY29yZFNpbmsud3JpdGVfZW5jb2RlZF9yZWNvcmRYAwAAAGRlZk0dAU0fAYdYGgAAAFJlYWRBbGxGcm9tVEZSZWNvcmQuZXhwYW5kWAMAAABkZWZL5Evmh1gTAAAAUmVhZEFsbEZyb21URlJlY29yZFgFAAAAY2xhc3NLx0vmh1gPAAAAX1RGUmVjb3JkU291cmNlWAUAAABjbGFzc0uZS72HWBIAAABfZGVmYXVsdF9jcmMzMmNfZm5YAwAAAGRlZkspSzuHWBYAAABXcml0ZVRvVEZSZWNvcmQuZXhwYW5kWAMAAABkZWZNSwFNTQGHWBwAAABfVEZSZWNvcmRVdGlsLl9tYXNrZWRfY3JjMzJjWAMAAABkZWZLSUtYh1gNAAAAX1RGUmVjb3JkU2lua1gFAAAAY2xhc3NNCQFNHwGHWBwAAABfVEZSZWNvcmRTb3VyY2UucmVhZF9yZWNvcmRzWAMAAABkZWZLrUu9h1gaAAAAX1RGUmVjb3JkVXRpbC53cml0ZV9yZWNvcmRYAwAAAGRlZktfS26HWBcAAABSZWFkRnJvbVRGUmVjb3JkLmV4cGFuZFgDAAAAZGVmTQUBTQcBh1gYAAAAV3JpdGVUb1RGUmVjb3JkLl9faW5pdF9fWAMAAABkZWZNJAFNSgGHWBkAAABSZWFkRnJvbVRGUmVjb3JkLl9faW5pdF9fWAMAAABkZWZL600EAYdYHwAAAF9URlJlY29yZFV0aWwuZW5jb2RlZF9udW1fYnl0ZXNYAwAAAGRlZktZS16HWBwAAABSZWFkQWxsRnJvbVRGUmVjb3JkLl9faW5pdF9fWAMAAABkZWZLykvjh1gPAAAAV3JpdGVUb1RGUmVjb3JkWAUAAABjbGFzc00hAU1NAYdYFgAAAF9URlJlY29yZFNpbmsuX19pbml0X19YAwAAAGRlZk0QAU0cAYd1fXL9ggAAKFgXAAAAUmVhZEZyb21URlJlY29yZC5leHBhbmRqTmUAAFgWAAAAV3JpdGVUb1RGUmVjb3JkLmV4cGFuZGpOZQAAWA8AAABXcml0ZVRvVEZSZWNvcmRqTmUAAFgQAAAAUmVhZEZyb21URlJlY29yZGpOZQAAdWp9aQAAWBkAAABhcGFjaGVfYmVhbS5pby50ZnJlY29yZGlvcv6CAACFgXL/ggAAfXIAgwAAYnRVH2FwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnV0aWwoWDEMAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIlV0aWxpdHkgY2xhc3NlcyB1c2VkIGJ5IHRoZSBEaXJlY3RSdW5uZXIuCgpGb3IgaW50ZXJuYWwgdXNlIG9ubHkuIE5vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdAoKCmNsYXNzIFRyYW5zZm9ybVJlc3VsdChvYmplY3QpOgogICIiIlJlc3VsdCBvZiBldmFsdWF0aW5nIGFuIEFwcGxpZWRQVHJhbnNmb3JtIHdpdGggYSBUcmFuc2Zvcm1FdmFsdWF0b3IuIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCB0cmFuc2Zvcm1fZXZhbHVhdG9yLCB1bmNvbW1pdHRlZF9vdXRwdXRfYnVuZGxlcywKICAgICAgICAgICAgICAgdW5wcm9jZXNzZWRfYnVuZGxlcywgY291bnRlcnMsIGtleWVkX3dhdGVybWFya19ob2xkcywKICAgICAgICAgICAgICAgdW5kZWNsYXJlZF90YWdfdmFsdWVzPU5vbmUpOgogICAgc2VsZi50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1fZXZhbHVhdG9yLl9hcHBsaWVkX3B0cmFuc2Zvcm0KICAgIHNlbGYudW5jb21taXR0ZWRfb3V0cHV0X2J1bmRsZXMgPSB1bmNvbW1pdHRlZF9vdXRwdXRfYnVuZGxlcwogICAgc2VsZi51bnByb2Nlc3NlZF9idW5kbGVzID0gdW5wcm9jZXNzZWRfYnVuZGxlcwogICAgc2VsZi5jb3VudGVycyA9IGNvdW50ZXJzCiAgICAjIE1hcHBpbmcgb2Yga2V5IC0+IGVhcmxpZXN0IGhvbGQgdGltZXN0YW1wIG9yIE5vbmUuICBLZXlzIHNob3VsZCBiZQogICAgIyBzdHJpbmdzIG9yIE5vbmUuCiAgICAjCiAgICAjIEZvciBlYWNoIGtleSwgd2UgcmVjZWl2ZSBhcyBpdHMgY29ycmVzcG9uZGluZyB2YWx1ZSB0aGUgZWFybGllc3QKICAgICMgd2F0ZXJtYXJrIGhvbGQgZm9yIHRoYXQga2V5ICh0aGUga2V5IGNhbiBiZSBOb25lIGZvciBnbG9iYWwgc3RhdGUpLCBwYXN0CiAgICAjIHdoaWNoIHRoZSBvdXRwdXQgd2F0ZXJtYXJrIGZvciB0aGUgY3VycmVudGx5LWV4ZWN1dGluZyBzdGVwIHdpbGwgbm90CiAgICAjIGFkdmFuY2UuICBJZiB0aGUgdmFsdWUgaXMgTm9uZSBvciB1dGlscy50aW1lc3RhbXAuTUFYX1RJTUVTVEFNUCwgdGhlCiAgICAjIHdhdGVybWFyayBob2xkIHdpbGwgYmUgcmVtb3ZlZC4KICAgIHNlbGYua2V5ZWRfd2F0ZXJtYXJrX2hvbGRzID0ga2V5ZWRfd2F0ZXJtYXJrX2hvbGRzIG9yIHt9CiAgICAjIE9ubHkgdXNlZCB3aGVuIGNhY2hpbmcgKG1hdGVyaWFsaXppbmcpIGFsbCB2YWx1ZXMgaXMgcmVxdWVzdGVkLgogICAgc2VsZi51bmRlY2xhcmVkX3RhZ192YWx1ZXMgPSB1bmRlY2xhcmVkX3RhZ192YWx1ZXMKICAgICMgUG9wdWxhdGVkIGJ5IHRoZSBUcmFuc2Zvcm1FeGVjdXRvci4KICAgIHNlbGYubG9naWNhbF9tZXRyaWNfdXBkYXRlcyA9IE5vbmUKCiAgICBzdGVwX2NvbnRleHQgPSB0cmFuc2Zvcm1fZXZhbHVhdG9yLl9leGVjdXRpb25fY29udGV4dC5nZXRfc3RlcF9jb250ZXh0KCkKICAgIHNlbGYucGFydGlhbF9rZXllZF9zdGF0ZSA9IHN0ZXBfY29udGV4dC5wYXJ0aWFsX2tleWVkX3N0YXRlCgoKY2xhc3MgVGltZXJGaXJpbmcob2JqZWN0KToKICAiIiJBIHNpbmdsZSBpbnN0YW5jZSBvZiBhIGZpcmVkIHRpbWVyLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgZW5jb2RlZF9rZXksIHdpbmRvdywgbmFtZSwgdGltZV9kb21haW4sIHRpbWVzdGFtcCk6CiAgICBzZWxmLmVuY29kZWRfa2V5ID0gZW5jb2RlZF9rZXkKICAgIHNlbGYud2luZG93ID0gd2luZG93CiAgICBzZWxmLm5hbWUgPSBuYW1lCiAgICBzZWxmLnRpbWVfZG9tYWluID0gdGltZV9kb21haW4KICAgIHNlbGYudGltZXN0YW1wID0gdGltZXN0YW1wCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnVGltZXJGaXJpbmcoJXIsICVyLCAlcywgJXMpJyAlIChzZWxmLmVuY29kZWRfa2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubmFtZSwgc2VsZi50aW1lX2RvbWFpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRpbWVzdGFtcCkKCgpjbGFzcyBLZXllZFdvcmtJdGVtKG9iamVjdCk6CiAgIiIiQSBrZXllZCBpdGVtIHRoYXQgY2FuIGVpdGhlciBiZSBhIHRpbWVyIGZpcmluZyBvciBhIGxpc3Qgb2YgZWxlbWVudHMuIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIGVuY29kZWRfa2V5LCB0aW1lcl9maXJpbmdzPU5vbmUsIGVsZW1lbnRzPU5vbmUpOgogICAgc2VsZi5lbmNvZGVkX2tleSA9IGVuY29kZWRfa2V5CiAgICBzZWxmLnRpbWVyX2ZpcmluZ3MgPSB0aW1lcl9maXJpbmdzIG9yIFtdCiAgICBzZWxmLmVsZW1lbnRzID0gZWxlbWVudHMgb3IgW10KfXIBgwAAKFgUAAAAVGltZXJGaXJpbmcuX19pbml0X19YAwAAAGRlZks7S0GHWBYAAABLZXllZFdvcmtJdGVtLl9faW5pdF9fWAMAAABkZWZLSktOh1gNAAAAS2V5ZWRXb3JrSXRlbVgFAAAAY2xhc3NLSEtOh1gLAAAAVGltZXJGaXJpbmdYBQAAAGNsYXNzSzhLRodYDwAAAFRyYW5zZm9ybVJlc3VsdFgFAAAAY2xhc3NLHEs2h1gYAAAAVHJhbnNmb3JtUmVzdWx0Ll9faW5pdF9fWAMAAABkZWZLH0s2h1gUAAAAVGltZXJGaXJpbmcuX19yZXByX19YAwAAAGRlZktCS0aHdX1yAoMAAChYCwAAAFRpbWVyRmlyaW5nauVlAABYDwAAAFRyYW5zZm9ybVJlc3VsdGrlZQAAWA0AAABLZXllZFdvcmtJdGVtauVlAAB1an1pAABYHwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnV0aWxyA4MAAIWBcgSDAAB9cgWDAABidFU1YXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsucXVlcmllcy5xdWVyeTEoWIMHAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIk5leG1hcmsgUXVlcnkgMTogQ29udmVydCBiaWQgcHJpY2VzIGZyb20gZG9sbGFycyB0byBldXJvcy4KClRoZSBOZXhtYXJrIHN1aXRlIGlzIGEgc2VyaWVzIG9mIHF1ZXJpZXMgKHN0cmVhbWluZyBwaXBlbGluZXMpIHBlcmZvcm1lZApvbiBhIHNpbXVsYXRpb24gb2YgYXVjdGlvbiBldmVudHMuCgpUaGlzIHF1ZXJ5IGNvbnZlcnRzIGJpZCBwcmljZXMgZnJvbSBkb2xsYXJzIHRvIGV1cm9zLgpJdCBpbGx1c3RyYXRlcyBhIHNpbXBsZSBtYXAuCiIiIgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGFwYWNoZV9iZWFtIGFzIGJlYW0KZnJvbSBhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5tb2RlbHMgaW1wb3J0IG5leG1hcmtfbW9kZWwKZnJvbSBhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5uZXhtYXJrX3V0aWwgaW1wb3J0IFBhcnNlRXZlbnRGbgpmcm9tIGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm5leG1hcmtfdXRpbCBpbXBvcnQgZGlzcGxheQoKCmRlZiBsb2FkKHJhd19ldmVudHMsIHF1ZXJ5X2FyZ3M9Tm9uZSk6CiAgcmV0dXJuIChyYXdfZXZlbnRzCiAgICAgICAgICB8ICdQYXJzZUV2ZW50Rm4nID4+IGJlYW0uUGFyRG8oUGFyc2VFdmVudEZuKCkpCiAgICAgICAgICB8ICdGaWx0ZXJJbkJpZHMnID4+IGJlYW0uRmlsdGVyKAogICAgICAgICAgICAgIGxhbWJkYSBldmVudDogaXNpbnN0YW5jZShldmVudCwgbmV4bWFya19tb2RlbC5CaWQpKQogICAgICAgICAgfCAnQ29udmVydFRvRXVybycgPj4gYmVhbS5NYXAoCiAgICAgICAgICAgICAgbGFtYmRhIGJpZDogbmV4bWFya19tb2RlbC5CaWQoCiAgICAgICAgICAgICAgICAgIGJpZC5hdWN0aW9uLAogICAgICAgICAgICAgICAgICBiaWQuYmlkZGVyLAogICAgICAgICAgICAgICAgICAoZmxvYXQoYmlkLnByaWNlKSAqIDg5KSAvLyAxMDAsCiAgICAgICAgICAgICAgICAgIGJpZC50aW1lc3RhbXAsCiAgICAgICAgICAgICAgICAgIGJpZC5leHRyYSkpCiAgICAgICAgICB8ICdEaXNwbGF5UXVlcnkxJyA+PiBiZWFtLk1hcChkaXNwbGF5KQogICAgICAgICApICAjIHB5bGludDogZGlzYWJsZT1leHByZXNzaW9uLW5vdC1hc3NpZ25lZAp9cgaDAABYBAAAAGxvYWRYAwAAAGRlZksiSzCHc31yB4MAAFgEAAAAbG9hZGphWwAAc2p9aQAAWDUAAABhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5xdWVyaWVzLnF1ZXJ5MXIIgwAAhYFyCYMAAH1yCoMAAGJ0VUJhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkuaW50ZXJhY3RpdmVfcGlwZWxpbmVfZ3JhcGgoWOYVAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkhlbHBlciB0byByZW5kZXIgcGlwZWxpbmUgZ3JhcGggaW4gSVB5dGhvbiB3aGVuIHJ1bm5pbmcgaW50ZXJhY3RpdmVseS4KClRoaXMgbW9kdWxlIGlzIGV4cGVyaW1lbnRhbC4gTm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydApmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KCmltcG9ydCByZQoKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkgaW1wb3J0IHBpcGVsaW5lX2dyYXBoCgoKZGVmIG5pY2Vfc3RyKG8pOgogIHMgPSByZXByKG8pCiAgcyA9IHMucmVwbGFjZSgnIicsICInIikKICBzID0gcy5yZXBsYWNlKCdcXCcsICd8JykKICBzID0gcmUuc3ViKHInW15ceDIwLVx4N0ZdJywgJyAnLCBzKQogIGFzc2VydCAnIicgbm90IGluIHMKICBpZiBsZW4ocykgPiAzNToKICAgIHMgPSBzWzozNV0gKyAnLi4uJwogIHJldHVybiBzCgoKZGVmIGZvcm1hdF9zYW1wbGUoY29udGVudHMsIGNvdW50PTEwMDApOgogIGNvbnRlbnRzID0gbGlzdChjb250ZW50cykKICBlbGVtcyA9ICcsICcuam9pbihbbmljZV9zdHIobykgZm9yIG8gaW4gY29udGVudHNbOmNvdW50XV0pCiAgaWYgbGVuKGNvbnRlbnRzKSA+IGNvdW50OgogICAgZWxlbXMgKz0gJywgLi4uJwogIGFzc2VydCAnIicgbm90IGluIGVsZW1zCiAgcmV0dXJuICd7JXN9JyAlIGVsZW1zCgoKY2xhc3MgSW50ZXJhY3RpdmVQaXBlbGluZUdyYXBoKHBpcGVsaW5lX2dyYXBoLlBpcGVsaW5lR3JhcGgpOgogICIiIkNyZWF0ZXMgdGhlIERPVCByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlcmFjdGl2ZSBwaXBlbGluZS4gVGhyZWFkLXNhZmUuIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLAogICAgICAgICAgICAgICBwaXBlbGluZSwKICAgICAgICAgICAgICAgcmVxdWlyZWRfdHJhbnNmb3Jtcz1Ob25lLAogICAgICAgICAgICAgICByZWZlcmVuY2VkX3Bjb2xsZWN0aW9ucz1Ob25lLAogICAgICAgICAgICAgICBjYWNoZWRfcGNvbGxlY3Rpb25zPU5vbmUpOgogICAgIiIiQ29uc3RydWN0b3Igb2YgUGlwZWxpbmVHcmFwaC4KCiAgICBBcmdzOgogICAgICBwaXBlbGluZTogKFBpcGVsaW5lIHByb3RvKSBvciAoUGlwZWxpbmUpIHBpcGVsaW5lIHRvIGJlIHJlbmRlcmVkLgogICAgICByZXF1aXJlZF90cmFuc2Zvcm1zOiAobGlzdC9zZXQgb2Ygc3RyKSBJRCBvZiB0b3AgbGV2ZWwgUFRyYW5zZm9ybXMgdGhhdAogICAgICAgICAgbGVhZCB0byB2aXNpYmxlIHJlc3VsdHMuCiAgICAgIHJlZmVyZW5jZWRfcGNvbGxlY3Rpb25zOiAobGlzdC9zZXQgb2Ygc3RyKSBJRCBvZiBQQ29sbGVjdGlvbnMgdGhhdCBhcmUKICAgICAgICAgIHJlZmVyZW5jZWQgYnkgdG9wIGxldmVsIFBUcmFuc2Zvcm1zIGV4ZWN1dGVkIChpLmUuCiAgICAgICAgICByZXF1aXJlZF90cmFuc2Zvcm1zKQogICAgICBjYWNoZWRfcGNvbGxlY3Rpb25zOiAoc2V0IG9mIHN0cikgYSBzZXQgb2YgUENvbGxlY3Rpb24gSURzIG9mIHRob3NlIHdob3NlCiAgICAgICAgICBjYWNoZWQgcmVzdWx0cyBhcmUgdXNlZCBpbiB0aGUgZXhlY3V0aW9uLgogICAgIiIiCiAgICBzZWxmLl9yZXF1aXJlZF90cmFuc2Zvcm1zID0gcmVxdWlyZWRfdHJhbnNmb3JtcyBvciBzZXQoKQogICAgc2VsZi5fcmVmZXJlbmNlZF9wY29sbGVjdGlvbnMgPSByZWZlcmVuY2VkX3Bjb2xsZWN0aW9ucyBvciBzZXQoKQogICAgc2VsZi5fY2FjaGVkX3Bjb2xsZWN0aW9ucyA9IGNhY2hlZF9wY29sbGVjdGlvbnMgb3Igc2V0KCkKCiAgICBzdXBlcihJbnRlcmFjdGl2ZVBpcGVsaW5lR3JhcGgsIHNlbGYpLl9faW5pdF9fKAogICAgICAgIHBpcGVsaW5lPXBpcGVsaW5lLAogICAgICAgIGRlZmF1bHRfdmVydGV4X2F0dHJzPXsnY29sb3InOiAnZ3JheScsICdmb250Y29sb3InOiAnZ3JheSd9LAogICAgICAgIGRlZmF1bHRfZWRnZV9hdHRycz17J2NvbG9yJzogJ2dyYXknfQogICAgKQoKICAgIHRyYW5zZm9ybV91cGRhdGVzLCBwY29sbGVjdGlvbl91cGRhdGVzID0gc2VsZi5fZ2VuZXJhdGVfZ3JhcGhfdXBkYXRlX2RpY3RzKCkKICAgIHNlbGYuX3VwZGF0ZV9ncmFwaCh0cmFuc2Zvcm1fdXBkYXRlcywgcGNvbGxlY3Rpb25fdXBkYXRlcykKCiAgZGVmIHVwZGF0ZV9wY29sbGVjdGlvbl9zdGF0cyhzZWxmLCBwY29sbGVjdGlvbl9zdGF0cyk6CiAgICAiIiJVcGRhdGVzIFBDb2xsZWN0aW9uIHN0YXRzLgoKICAgIEFyZ3M6CiAgICAgIHBjb2xsZWN0aW9uX3N0YXRzOiAoZGljdCBvZiBkaWN0KSBtYXBzIFBDb2xsZWN0aW9uIElEcyB0byBpbmZvcm1hdGlvbnMuIEluCiAgICAgICAgICBwYXJ0aWN1bGFyLCB3ZSBvbmx5IGNhcmUgYWJvdXQgdGhlIGZpZWxkICdzYW1wbGUnIHdoaWNoIHNob3VsZCBiZSBhCiAgICAgICAgICB0aGUgUENvbGxlY3Rpb24gcmVzdWx0IGluIGFzIGEgbGlzdC4KICAgICIiIgogICAgZWRnZV9kaWN0ID0ge30KICAgIGZvciBwY29sbF9pZCwgc3RhdHMgaW4gcGNvbGxlY3Rpb25fc3RhdHMuaXRlbXMoKToKICAgICAgYXR0cnMgPSB7fQogICAgICBwY29sbF9saXN0ID0gc3RhdHNbJ3NhbXBsZSddCiAgICAgIGlmIHBjb2xsX2xpc3Q6CiAgICAgICAgYXR0cnNbJ2xhYmVsJ10gPSBmb3JtYXRfc2FtcGxlKHBjb2xsX2xpc3QsIDEpCiAgICAgICAgYXR0cnNbJ2xhYmVsdG9vbHRpcCddID0gZm9ybWF0X3NhbXBsZShwY29sbF9saXN0LCAxMCkKICAgICAgZWxzZToKICAgICAgICBhdHRyc1snbGFiZWwnXSA9ICc/JwogICAgICBlZGdlX2RpY3RbcGNvbGxfaWRdID0gYXR0cnMKCiAgICBzZWxmLl91cGRhdGVfZ3JhcGgoZWRnZV9kaWN0PWVkZ2VfZGljdCkKCiAgZGVmIF9nZW5lcmF0ZV9ncmFwaF91cGRhdGVfZGljdHMoc2VsZik6CiAgICAiIiJHZW5lcmF0ZSB1cGRhdGVzIHNwZWNpZmljIHRvIGludGVyYWN0aXZlIHBpcGVsaW5lLgoKICAgIFJldHVybnM6CiAgICAgIHZlcnRleF9kaWN0OiAoRGljdFtzdHIsIERpY3Rbc3RyLCBzdHJdXSkgbWFwcyB2ZXJ0ZXggbmFtZSB0byBhdHRyaWJ1dGVzCiAgICAgIGVkZ2VfZGljdDogKERpY3Rbc3RyLCBEaWN0W3N0ciwgc3RyXV0pIG1hcHMgdmVydGV4IG5hbWUgdG8gYXR0cmlidXRlcwogICAgIiIiCiAgICB0cmFuc2Zvcm1fZGljdCA9IHt9ICAjIG1hcHMgUFRyYW5zZm9ybSBJRHMgdG8gcHJvcGVydGllcwogICAgcGNvbGxfZGljdCA9IHt9ICAjIG1hcHMgUENvbGxlY3Rpb24gSURzIHRvIHByb3BlcnRpZXMKCiAgICBmb3IgdHJhbnNmb3JtX2lkLCB0cmFuc2Zvcm1fcHJvdG8gaW4gc2VsZi5fdG9wX2xldmVsX3RyYW5zZm9ybXMoKToKICAgICAgdHJhbnNmb3JtX2RpY3RbdHJhbnNmb3JtX3Byb3RvLnVuaXF1ZV9uYW1lXSA9IHsKICAgICAgICAgICdyZXF1aXJlZCc6IHRyYW5zZm9ybV9pZCBpbiBzZWxmLl9yZXF1aXJlZF90cmFuc2Zvcm1zCiAgICAgIH0KCiAgICAgIGZvciBwY29sbF9pZCBpbiB0cmFuc2Zvcm1fcHJvdG8ub3V0cHV0cy52YWx1ZXMoKToKICAgICAgICBwY29sbF9kaWN0W3Bjb2xsX2lkXSA9IHsKICAgICAgICAgICAgJ2NhY2hlZCc6IHBjb2xsX2lkIGluIHNlbGYuX2NhY2hlZF9wY29sbGVjdGlvbnMsCiAgICAgICAgICAgICdyZWZlcmVuY2VkJzogcGNvbGxfaWQgaW4gc2VsZi5fcmVmZXJlbmNlZF9wY29sbGVjdGlvbnMKICAgICAgICB9CgogICAgZGVmIHZlcnRleF9wcm9wZXJ0aWVzX3RvX2F0dHJpYnV0ZXModmVydGV4KToKICAgICAgIiIiQ29udmVydHMgUENvbGxlY3Rpb24gcHJvcGVydGllcyB0byBET1QgdmVydGV4IGF0dHJpYnV0ZXMuIiIiCiAgICAgIGF0dHJzID0ge30KICAgICAgaWYgJ2xlYWYnIGluIHZlcnRleDoKICAgICAgICBhdHRyc1snc3R5bGUnXSA9ICdpbnZpcycKICAgICAgZWxpZiB2ZXJ0ZXguZ2V0KCdyZXF1aXJlZCcpOgogICAgICAgIGF0dHJzWydjb2xvciddID0gJ2JsdWUnCiAgICAgICAgYXR0cnNbJ2ZvbnRjb2xvciddID0gJ2JsdWUnCiAgICAgIGVsc2U6CiAgICAgICAgYXR0cnNbJ2NvbG9yJ10gPSAnZ3JleScKICAgICAgcmV0dXJuIGF0dHJzCgogICAgZGVmIGVkZ2VfcHJvcGVydGllc190b19hdHRyaWJ1dGVzKGVkZ2UpOgogICAgICAiIiJDb252ZXJ0cyBQVHJhbnNmb3JtIHByb3BlcnRpZXMgdG8gRE9UIGVkZ2UgYXR0cmlidXRlcy4iIiIKICAgICAgYXR0cnMgPSB7fQogICAgICBpZiBlZGdlLmdldCgnY2FjaGVkJyk6CiAgICAgICAgYXR0cnNbJ2NvbG9yJ10gPSAncmVkJwogICAgICBlbGlmIGVkZ2UuZ2V0KCdyZWZlcmVuY2VkJyk6CiAgICAgICAgYXR0cnNbJ2NvbG9yJ10gPSAnYmxhY2snCiAgICAgIGVsc2U6CiAgICAgICAgYXR0cnNbJ2NvbG9yJ10gPSAnZ3JleScKICAgICAgcmV0dXJuIGF0dHJzCgogICAgdmVydGV4X2RpY3QgPSB7fSAgIyBtYXBzIHZlcnRleCBuYW1lcyB0byBhdHRyaWJ1dGVzCiAgICBlZGdlX2RpY3QgPSB7fSAgIyBtYXBzIGVkZ2UgbmFtZXMgdG8gYXR0cmlidXRlcwoKICAgIGZvciB0cmFuc2Zvcm1fbmFtZSwgdHJhbnNmb3JtX3Byb3BlcnRpZXMgaW4gdHJhbnNmb3JtX2RpY3QuaXRlbXMoKToKICAgICAgdmVydGV4X2RpY3RbdHJhbnNmb3JtX25hbWVdID0gdmVydGV4X3Byb3BlcnRpZXNfdG9fYXR0cmlidXRlcygKICAgICAgICAgIHRyYW5zZm9ybV9wcm9wZXJ0aWVzKQoKICAgIGZvciBwY29sbF9pZCwgcGNvbGxfcHJvcGVydGllcyBpbiBwY29sbF9kaWN0Lml0ZW1zKCk6CiAgICAgIGVkZ2VfZGljdFtwY29sbF9pZF0gPSBlZGdlX3Byb3BlcnRpZXNfdG9fYXR0cmlidXRlcyhwY29sbF9wcm9wZXJ0aWVzKQoKICAgIHJldHVybiB2ZXJ0ZXhfZGljdCwgZWRnZV9kaWN0Cn1yC4MAAChYVQAAAEludGVyYWN0aXZlUGlwZWxpbmVHcmFwaC5fZ2VuZXJhdGVfZ3JhcGhfdXBkYXRlX2RpY3RzLnZlcnRleF9wcm9wZXJ0aWVzX3RvX2F0dHJpYnV0ZXNYAwAAAGRlZkt/S4qHWFMAAABJbnRlcmFjdGl2ZVBpcGVsaW5lR3JhcGguX2dlbmVyYXRlX2dyYXBoX3VwZGF0ZV9kaWN0cy5lZGdlX3Byb3BlcnRpZXNfdG9fYXR0cmlidXRlc1gDAAAAZGVmS4tLlYdYNQAAAEludGVyYWN0aXZlUGlwZWxpbmVHcmFwaC5fZ2VuZXJhdGVfZ3JhcGhfdXBkYXRlX2RpY3RzWAMAAABkZWZLakuhh1gNAAAAZm9ybWF0X3NhbXBsZVgDAAAAZGVmSytLModYMQAAAEludGVyYWN0aXZlUGlwZWxpbmVHcmFwaC51cGRhdGVfcGNvbGxlY3Rpb25fc3RhdHNYAwAAAGRlZktVS2mHWCEAAABJbnRlcmFjdGl2ZVBpcGVsaW5lR3JhcGguX19pbml0X19YAwAAAGRlZks3S1SHWBgAAABJbnRlcmFjdGl2ZVBpcGVsaW5lR3JhcGhYBQAAAGNsYXNzSzRLoYdYCAAAAG5pY2Vfc3RyWAMAAABkZWZLIEsph3V9cgyDAAAoWBgAAABJbnRlcmFjdGl2ZVBpcGVsaW5lR3JhcGhYQgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5pbnRlcmFjdGl2ZV9waXBlbGluZV9ncmFwaHINgwAAWAgAAABuaWNlX3N0cmoNgwAAWA0AAABmb3JtYXRfc2FtcGxlag2DAABYMQAAAEludGVyYWN0aXZlUGlwZWxpbmVHcmFwaC51cGRhdGVfcGNvbGxlY3Rpb25fc3RhdHNqDYMAAHVqfWkAAFhCAAAAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LmludGVyYWN0aXZlX3BpcGVsaW5lX2dyYXBocg6DAACFgXIPgwAAfXIQgwAAYnRyEYMAAFU3YXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LmRpc3BsYXlfbWFuYWdlcihYbBoAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiTWFuYWdlcyBkaXNwbGF5aW5nIHBpcGVsaW5lIGdyYXBoIGFuZCBleGVjdXRpb24gc3RhdHVzIG9uIHRoZSBmcm9udGVuZC4KClRoaXMgbW9kdWxlIGlzIGV4cGVyaW1lbnRhbC4gTm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydApmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KCmltcG9ydCBjb2xsZWN0aW9ucwppbXBvcnQgdGhyZWFkaW5nCmltcG9ydCB0aW1lCgpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheSBpbXBvcnQgaW50ZXJhY3RpdmVfcGlwZWxpbmVfZ3JhcGgKCnRyeToKICBpbXBvcnQgSVB5dGhvbiAgIyBweWxpbnQ6IGRpc2FibGU9aW1wb3J0LWVycm9yCiAgIyBfZGlzcGxheV9wcm9ncmVzcyBkZWZpbmVzIGhvdyBvdXRwdXRzIGFyZSBwcmludGVkIG9uIHRoZSBmcm9udGVuZC4KICBfZGlzcGxheV9wcm9ncmVzcyA9IElQeXRob24uZGlzcGxheS5kaXNwbGF5CgogIGRlZiBfZm9ybWF0dGVyKHN0cmluZywgcHAsIGN5Y2xlKTogICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1hcmd1bWVudAogICAgcHAudGV4dChzdHJpbmcpCiAgcGxhaW4gPSBnZXRfaXB5dGhvbigpLmRpc3BsYXlfZm9ybWF0dGVyLmZvcm1hdHRlcnNbJ3RleHQvcGxhaW4nXSAgIyBweWxpbnQ6IGRpc2FibGU9dW5kZWZpbmVkLXZhcmlhYmxlCiAgcGxhaW4uZm9yX3R5cGUoc3RyLCBfZm9ybWF0dGVyKQoKIyBOYW1lRXJyb3IgaXMgYWRkZWQgaGVyZSBiZWNhdXNlIGdldF9pcHl0aG9uKCkgdGhyb3dzICJub3QgZGVmaW5lZCIgTmFtZUVycm9yCiMgaWYgbm90IHN0YXJ0ZWQgd2l0aCBJUHl0aG9uLgpleGNlcHQgKEltcG9ydEVycm9yLCBOYW1lRXJyb3IpOgogIElQeXRob24gPSBOb25lCiAgX2Rpc3BsYXlfcHJvZ3Jlc3MgPSBwcmludAoKCmNsYXNzIERpc3BsYXlNYW5hZ2VyKG9iamVjdCk6CiAgIiIiTWFuYWdlcyBkaXNwbGF5aW5nIHBpcGVsaW5lIGdyYXBoIGFuZCBleGVjdXRpb24gc3RhdHVzIG9uIHRoZSBmcm9udGVuZC4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHBpcGVsaW5lX3Byb3RvLCBwaXBlbGluZV9hbmFseXplciwgY2FjaGVfbWFuYWdlciwKICAgICAgICAgICAgICAgcGlwZWxpbmVfZ3JhcGhfcmVuZGVyZXIpOgogICAgIiIiQ29uc3RydWN0b3Igb2YgRGlzcGxheU1hbmFnZXIuCgogICAgQXJnczoKICAgICAgcGlwZWxpbmVfcHJvdG86IChQaXBlbGluZSBwcm90bykKICAgICAgcGlwZWxpbmVfYW5hbHl6ZXI6IChQaXBlbGluZUFuYWx5emVyKSB0aGUgcGlwZWxpbmUgYW5hbHl6ZXIgdGhhdAogICAgICAgICAgY29ycmVzcG9uZHMgdG8gdGhpcyByb3VuZCBvZiBleGVjdXRpb24uIFRoaXMgd2lsbCBwcm92aWRlIG1vcmUKICAgICAgICAgIGRldGFpbGVkIGluZm9ybWF0aW9ucyBhYm91dCB0aGUgcGlwZWxpbmUKICAgICAgY2FjaGVfbWFuYWdlcjogKGludGVyYWN0aXZlX3J1bm5lci5DYWNoZU1hbmFnZXIpIERpc3BsYXlNYW5hZ2VyIGZldGNoZXMKICAgICAgICAgIHRoZSBsYXRlc3Qgc3RhdHVzIG9mIHBpcGVsaW5lIGV4ZWN1dGlvbiBieSBxdWVyeWluZyBjYWNoZV9tYW5hZ2VyLgogICAgICBwaXBlbGluZV9ncmFwaF9yZW5kZXJlcjogKHBpcGVsaW5lX2dyYXBoX3JlbmRlcmVyLlBpcGVsaW5lR3JhcGhSZW5kZXJlcikKICAgICAgICAgIGRlY2lkZXMgaG93IGEgcGlwZWxpbmUgZ3JhcGggaXMgcmVuZGVyZWQuCiAgICAiIiIKICAgICMgRXZlcnkgcGFyYW1ldGVyIGV4Y2VwdCBjYWNoZV9tYW5hZ2VyIGlzIGV4cGVjdGVkIHRvIHJlbWFpbiBjb25zdGFudC4KICAgIHNlbGYuX2FuYWx5emVyID0gcGlwZWxpbmVfYW5hbHl6ZXIKICAgIHNlbGYuX2NhY2hlX21hbmFnZXIgPSBjYWNoZV9tYW5hZ2VyCiAgICBzZWxmLl9waXBlbGluZV9ncmFwaCA9IGludGVyYWN0aXZlX3BpcGVsaW5lX2dyYXBoLkludGVyYWN0aXZlUGlwZWxpbmVHcmFwaCgKICAgICAgICBwaXBlbGluZV9wcm90bywKICAgICAgICByZXF1aXJlZF90cmFuc2Zvcm1zPXNlbGYuX2FuYWx5emVyLnRsX3JlcXVpcmVkX3RyYW5zX2lkcygpLAogICAgICAgIHJlZmVyZW5jZWRfcGNvbGxlY3Rpb25zPXNlbGYuX2FuYWx5emVyLnRsX3JlZmVyZW5jZWRfcGNvbGxfaWRzKCksCiAgICAgICAgY2FjaGVkX3Bjb2xsZWN0aW9ucz1zZWxmLl9hbmFseXplci5jYWNoZXNfdXNlZCgpKQogICAgc2VsZi5fcmVuZGVyZXIgPSBwaXBlbGluZV9ncmFwaF9yZW5kZXJlcgoKICAgICMgX3RleHRfdG9fcHJpbnQga2VlcHMgdHJhY2sgb2YgaW5mb3JtYXRpb24gdG8gYmUgZGlzcGxheWVkLgogICAgc2VsZi5fdGV4dF90b19wcmludCA9IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCkKICAgIHNlbGYuX3RleHRfdG9fcHJpbnRbJ3N1bW1hcnknXSA9ICgKICAgICAgICAnVXNpbmcgJXMgY2FjaGVkIFBDb2xsZWN0aW9uc1xuRXhlY3V0aW5nICVzIG9mICVzICcKICAgICAgICAndHJhbnNmb3Jtcy4nKSAlICgKICAgICAgICAgICAgbGVuKHNlbGYuX2FuYWx5emVyLmNhY2hlc191c2VkKCkpLAogICAgICAgICAgICAobGVuKHNlbGYuX2FuYWx5emVyLnRsX3JlcXVpcmVkX3RyYW5zX2lkcygpKQogICAgICAgICAgICAgLSBsZW4oc2VsZi5fYW5hbHl6ZXIucmVhZF9jYWNoZV9pZHMoKSkKICAgICAgICAgICAgIC0gbGVuKHNlbGYuX2FuYWx5emVyLndyaXRlX2NhY2hlX2lkcygpKSksCiAgICAgICAgICAgIGxlbihwaXBlbGluZV9wcm90by5jb21wb25lbnRzLnRyYW5zZm9ybXNbCiAgICAgICAgICAgICAgICBwaXBlbGluZV9wcm90by5yb290X3RyYW5zZm9ybV9pZHNbMF1dLnN1YnRyYW5zZm9ybXMpKQogICAgc2VsZi5fdGV4dF90b19wcmludC51cGRhdGUoewogICAgICAgIHBjb2xsX2lkOiAiIiBmb3IgcGNvbGxfaWQKICAgICAgICBpbiBzZWxmLl9hbmFseXplci50bF9yZWZlcmVuY2VkX3Bjb2xsX2lkcygpfSkKCiAgICAjIF9wY29sbGVjdGlvbl9zdGF0cyBtYXBzIHBjb2xsX2lkIHRvCiAgICAjIHsgJ2NhY2hlX2xhYmVsJzogY2FjaGVfbGFiZWwsIHZlcnNpb24nOiB2ZXJzaW9uLCAnc2FtcGxlJzogcGNvbGxfaW5fbGlzdCB9CiAgICBzZWxmLl9wY29sbGVjdGlvbl9zdGF0cyA9IHt9CiAgICBmb3IgcGNvbGxfaWQgaW4gc2VsZi5fYW5hbHl6ZXIudGxfcmVmZXJlbmNlZF9wY29sbF9pZHMoKToKICAgICAgc2VsZi5fcGNvbGxlY3Rpb25fc3RhdHNbcGNvbGxfaWRdID0gewogICAgICAgICAgJ2NhY2hlX2xhYmVsJzogc2VsZi5fYW5hbHl6ZXIucGlwZWxpbmVfaW5mbygpLmNhY2hlX2xhYmVsKHBjb2xsX2lkKSwKICAgICAgICAgICd2ZXJzaW9uJzogLTEsCiAgICAgICAgICAnc2FtcGxlJzogW10KICAgICAgfQoKICAgIHNlbGYuX3Byb2R1Y2VycyA9IHt9CiAgICBmb3IgXywgdHJhbnNmb3JtIGluIHBpcGVsaW5lX3Byb3RvLmNvbXBvbmVudHMudHJhbnNmb3Jtcy5pdGVtcygpOgogICAgICBmb3IgcGNvbGxfaWQgaW4gdHJhbnNmb3JtLm91dHB1dHMudmFsdWVzKCk6CiAgICAgICAgaWYgcGNvbGxfaWQgbm90IGluIHNlbGYuX3Byb2R1Y2VycyBvciAnLycgbm90IGluIHRyYW5zZm9ybS51bmlxdWVfbmFtZToKICAgICAgICAgIHNlbGYuX3Byb2R1Y2Vyc1twY29sbF9pZF0gPSB0cmFuc2Zvcm0udW5pcXVlX25hbWUKCiAgICAjIEZvciBwZXJpb2RpYyB1cGRhdGUuCiAgICBzZWxmLl9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQogICAgc2VsZi5fcGVyaW9kaWNfdXBkYXRlID0gRmFsc2UKCiAgZGVmIHVwZGF0ZV9kaXNwbGF5KHNlbGYsIGZvcmNlPUZhbHNlKToKICAgICIiIlVwZGF0ZXMgZGlzcGxheSBvbiB0aGUgZnJvbnRlbmQuCgogICAgUmV0cmlldmVzIHRoZSBsYXRlc3QgZXhlY3V0aW9uIHN0YXR1cyBieSBxdWVyeWluZyBDYWNoZU1hbmFnZXIgYW5kIHVwZGF0ZXMKICAgIGRpc3BsYXkgb24gdGhlIGZyb25lbmQuIFRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgdGhlcmUgaXMgb25seSBvbmUgcGlwZWxpbmUgaW4KICAgIGEgY2VsbCwgYmVjYXVzZSBpdCBjbGVhcnMgdXAgZXZlcnl0aGluZyBpbiB0aGUgY2VsbCBvdXRwdXQgZXZlcnkgdXBkYXRlCiAgICBjeWNsZS4KCiAgICBBcmdzOgogICAgICBmb3JjZTogKGJvb2wpIHdoZXRoZXIgdG8gZm9yY2UgdXBkYXRpbmcgd2hlbiBubyBzdGF0cyBjaGFuZ2UgaGFwcGVucy4KICAgICIiIgogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICBzdGF0c191cGRhdGVkID0gRmFsc2UKCiAgICAgIGZvciBwY29sbF9pZCwgc3RhdHMgaW4gc2VsZi5fcGNvbGxlY3Rpb25fc3RhdHMuaXRlbXMoKToKICAgICAgICBjYWNoZV9sYWJlbCA9IHN0YXRzWydjYWNoZV9sYWJlbCddCiAgICAgICAgdmVyc2lvbiA9IHN0YXRzWyd2ZXJzaW9uJ10KCiAgICAgICAgaWYgZm9yY2Ugb3Igbm90IHNlbGYuX2NhY2hlX21hbmFnZXIuaXNfbGF0ZXN0X3ZlcnNpb24oCiAgICAgICAgICAgIHZlcnNpb24sICdzYW1wbGUnLCBjYWNoZV9sYWJlbCk6CiAgICAgICAgICBwY29sbF9saXN0LCB2ZXJzaW9uID0gc2VsZi5fY2FjaGVfbWFuYWdlci5yZWFkKCdzYW1wbGUnLCBjYWNoZV9sYWJlbCkKICAgICAgICAgIHN0YXRzWydzYW1wbGUnXSA9IHBjb2xsX2xpc3QKICAgICAgICAgIHN0YXRzWyd2ZXJzaW9uJ10gPSB2ZXJzaW9uCiAgICAgICAgICBzdGF0c191cGRhdGVkID0gVHJ1ZQoKICAgICAgICAgIGlmIHBjb2xsX2lkIGluIHNlbGYuX2FuYWx5emVyLnRsX3JlZmVyZW5jZWRfcGNvbGxfaWRzKCk6CiAgICAgICAgICAgIHNlbGYuX3RleHRfdG9fcHJpbnRbcGNvbGxfaWRdID0gKHN0cigKICAgICAgICAgICAgICAgICclcyBwcm9kdWNlZCAlcycgJSAoCiAgICAgICAgICAgICAgICAgICAgc2VsZi5fcHJvZHVjZXJzW3Bjb2xsX2lkXSwKICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZV9waXBlbGluZV9ncmFwaC5mb3JtYXRfc2FtcGxlKHBjb2xsX2xpc3QsIDUpKSkpCgogICAgICBpZiBmb3JjZSBvciBzdGF0c191cGRhdGVkOgogICAgICAgIHNlbGYuX3BpcGVsaW5lX2dyYXBoLnVwZGF0ZV9wY29sbGVjdGlvbl9zdGF0cyhzZWxmLl9wY29sbGVjdGlvbl9zdGF0cykKCiAgICAgICAgaWYgSVB5dGhvbjoKICAgICAgICAgIGZyb20gSVB5dGhvbi5jb3JlIGltcG9ydCBkaXNwbGF5CiAgICAgICAgICBkaXNwbGF5LmNsZWFyX291dHB1dChUcnVlKQogICAgICAgICAgcmVuZGVyZWRfZ3JhcGggPSBzZWxmLl9yZW5kZXJlci5yZW5kZXJfcGlwZWxpbmVfZ3JhcGgoCiAgICAgICAgICAgICAgc2VsZi5fcGlwZWxpbmVfZ3JhcGgpCiAgICAgICAgICBkaXNwbGF5LmRpc3BsYXkoZGlzcGxheS5IVE1MKHJlbmRlcmVkX2dyYXBoKSkKCiAgICAgICAgX2Rpc3BsYXlfcHJvZ3Jlc3MoJ1J1bm5pbmcuLi4nKQogICAgICAgIGZvciB0ZXh0IGluIHNlbGYuX3RleHRfdG9fcHJpbnQudmFsdWVzKCk6CiAgICAgICAgICBpZiB0ZXh0ICE9ICIiOgogICAgICAgICAgICBfZGlzcGxheV9wcm9ncmVzcyh0ZXh0KQoKICBkZWYgc3RhcnRfcGVyaW9kaWNfdXBkYXRlKHNlbGYpOgogICAgIiIiU3RhcnQgYSB0aHJlYWQgdGhhdCBwZXJpb2RpY2FsbHkgdXBkYXRlcyB0aGUgZGlzcGxheS4iIiIKICAgIHNlbGYudXBkYXRlX2Rpc3BsYXkoVHJ1ZSkKICAgIHNlbGYuX3BlcmlvZGljX3VwZGF0ZSA9IFRydWUKCiAgICBkZWYgX3VwZGF0ZXIoKToKICAgICAgd2hpbGUgc2VsZi5fcGVyaW9kaWNfdXBkYXRlOgogICAgICAgIHNlbGYudXBkYXRlX2Rpc3BsYXkoKQogICAgICAgIHRpbWUuc2xlZXAoLjAyKQoKICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1fdXBkYXRlcikKICAgIHQuZGFlbW9uID0gVHJ1ZQogICAgdC5zdGFydCgpCgogIGRlZiBzdG9wX3BlcmlvZGljX3VwZGF0ZShzZWxmKToKICAgICIiIlN0b3AgcGVyaW9kaWNhbGx5IHVwZGF0aW5nIHRoZSBkaXNwbGF5LiIiIgogICAgc2VsZi51cGRhdGVfZGlzcGxheShUcnVlKQogICAgc2VsZi5fcGVyaW9kaWNfdXBkYXRlID0gRmFsc2UKfXISgwAAKFgdAAAARGlzcGxheU1hbmFnZXIudXBkYXRlX2Rpc3BsYXlYAwAAAGRlZktwS52HWC0AAABEaXNwbGF5TWFuYWdlci5zdGFydF9wZXJpb2RpY191cGRhdGUuX3VwZGF0ZXJYAwAAAGRlZkujS6eHWAoAAABfZm9ybWF0dGVyWAMAAABkZWZLJksoh1gOAAAARGlzcGxheU1hbmFnZXJYBQAAAGNsYXNzSzJLsIdYIwAAAERpc3BsYXlNYW5hZ2VyLnN0b3BfcGVyaW9kaWNfdXBkYXRlWAMAAABkZWZLrEuwh1gXAAAARGlzcGxheU1hbmFnZXIuX19pbml0X19YAwAAAGRlZks1S2+HWCQAAABEaXNwbGF5TWFuYWdlci5zdGFydF9wZXJpb2RpY191cGRhdGVYAwAAAGRlZkueS6uHdX1yE4MAAChYHQAAAERpc3BsYXlNYW5hZ2VyLnVwZGF0ZV9kaXNwbGF5WDcAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkuZGlzcGxheV9tYW5hZ2VychSDAABYIwAAAERpc3BsYXlNYW5hZ2VyLnN0b3BfcGVyaW9kaWNfdXBkYXRlahSDAABYDgAAAERpc3BsYXlNYW5hZ2VyahSDAABYJAAAAERpc3BsYXlNYW5hZ2VyLnN0YXJ0X3BlcmlvZGljX3VwZGF0ZWoUgwAAdWp9aQAAWDcAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkuZGlzcGxheV9tYW5hZ2VychWDAACFgXIWgwAAfXIXgwAAYnRyGIMAAFUeYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VychmDAAAoWKOpAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIlN1cHBvcnQgZm9yIERhdGFmbG93IHRyaWdnZXJzLgoKVHJpZ2dlcnMgY29udHJvbCB3aGVuIGluIHByb2Nlc3NpbmcgdGltZSB3aW5kb3dzIGdldCBlbWl0dGVkLgoiIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgY29sbGVjdGlvbnMKaW1wb3J0IGNvcHkKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IG51bWJlcnMKZnJvbSBhYmMgaW1wb3J0IEFCQ01ldGEKZnJvbSBhYmMgaW1wb3J0IGFic3RyYWN0bWV0aG9kCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdAoKZnJvbSBmdXR1cmUubW92ZXMuaXRlcnRvb2xzIGltcG9ydCB6aXBfbG9uZ2VzdApmcm9tIGZ1dHVyZS51dGlscyBpbXBvcnQgaXRlcml0ZW1zCmZyb20gZnV0dXJlLnV0aWxzIGltcG9ydCB3aXRoX21ldGFjbGFzcwoKZnJvbSBhcGFjaGVfYmVhbS5jb2RlcnMgaW1wb3J0IG9ic2VydmFibGUKZnJvbSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkgaW1wb3J0IGJlYW1fcnVubmVyX2FwaV9wYjIKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBjb21iaW5lcnMKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBjb3JlCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50aW1ldXRpbCBpbXBvcnQgVGltZURvbWFpbgpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93IGltcG9ydCBHbG9iYWxXaW5kb3cKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdyBpbXBvcnQgR2xvYmFsV2luZG93cwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93IGltcG9ydCBUaW1lc3RhbXBDb21iaW5lcgpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93IGltcG9ydCBXaW5kb3dlZFZhbHVlCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cgaW1wb3J0IFdpbmRvd0ZuCmZyb20gYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wIGltcG9ydCBNQVhfVElNRVNUQU1QCmZyb20gYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wIGltcG9ydCBNSU5fVElNRVNUQU1QCmZyb20gYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wIGltcG9ydCBUSU1FX0dSQU5VTEFSSVRZCgojIEFmdGVyQ291bnQgaXMgZXhwZXJpbWVudGFsLiBObyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKX19hbGxfXyA9IFsKICAgICdBY2N1bXVsYXRpb25Nb2RlJywKICAgICdUcmlnZ2VyRm4nLAogICAgJ0RlZmF1bHRUcmlnZ2VyJywKICAgICdBZnRlcldhdGVybWFyaycsCiAgICAnQWZ0ZXJQcm9jZXNzaW5nVGltZScsCiAgICAnQWZ0ZXJDb3VudCcsCiAgICAnUmVwZWF0ZWRseScsCiAgICAnQWZ0ZXJBbnknLAogICAgJ0FmdGVyQWxsJywKICAgICdBZnRlckVhY2gnLAogICAgJ09yRmluYWxseScsCiAgICBdCgoKY2xhc3MgQWNjdW11bGF0aW9uTW9kZShvYmplY3QpOgogICIiIkNvbnRyb2xzIHdoYXQgdG8gZG8gd2l0aCBkYXRhIHdoZW4gYSB0cmlnZ2VyIGZpcmVzIG11bHRpcGxlIHRpbWVzLgogICIiIgogIERJU0NBUkRJTkcgPSBiZWFtX3J1bm5lcl9hcGlfcGIyLkFjY3VtdWxhdGlvbk1vZGUuRElTQ0FSRElORwogIEFDQ1VNVUxBVElORyA9IGJlYW1fcnVubmVyX2FwaV9wYjIuQWNjdW11bGF0aW9uTW9kZS5BQ0NVTVVMQVRJTkcKICAjIFRPRE8ocm9iZXJ0d2IpOiBQcm92aWRlIHJldHJhY3Rpb25zIG9mIHByZXZpb3VzIG91dHB1dHMuCiAgIyBSRVRSQUNUSU5HID0gMwoKCmNsYXNzIF9TdGF0ZVRhZyh3aXRoX21ldGFjbGFzcyhBQkNNZXRhLCBvYmplY3QpKToKICAiIiJBbiBpZGVudGlmaWVyIHVzZWQgdG8gc3RvcmUgYW5kIHJldHJpZXZlIHR5cGVkLCBjb21iaW5hYmxlIHN0YXRlLgoKICBUaGUgZ2l2ZW4gdGFnIG11c3QgYmUgdW5pcXVlIGZvciB0aGlzIHN0YWdlLiAgSWYgQ29tYmluZUZuIGlzIE5vbmUgdGhlbgogIGFsbCBlbGVtZW50cyB3aWxsIGJlIHJldHVybmVkIGFzIGEgbGlzdCwgb3RoZXJ3aXNlIHRoZSBnaXZlbiBDb21iaW5lRm4KICB3aWxsIGJlIGFwcGxpZWQgKHBvc3NpYmx5IGluY3JlbWVudGFsbHkgYW5kIGVhZ2VybHkpIHdoZW4gYWRkaW5nIGVsZW1lbnRzLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgdGFnKToKICAgIHNlbGYudGFnID0gdGFnCgoKY2xhc3MgX1ZhbHVlU3RhdGVUYWcoX1N0YXRlVGFnKToKICAiIiJTdGF0ZVRhZyBwb2ludGluZyB0byBhbiBlbGVtZW50LiIiIgoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJ1ZhbHVlU3RhdGVUYWcoJXMpJyAlIChzZWxmLnRhZykKCiAgZGVmIHdpdGhfcHJlZml4KHNlbGYsIHByZWZpeCk6CiAgICByZXR1cm4gX1ZhbHVlU3RhdGVUYWcocHJlZml4ICsgc2VsZi50YWcpCgoKY2xhc3MgX0NvbWJpbmluZ1ZhbHVlU3RhdGVUYWcoX1N0YXRlVGFnKToKICAiIiJTdGF0ZVRhZyBwb2ludGluZyB0byBhbiBlbGVtZW50LCBhY2N1bXVsYXRlZCB3aXRoIGEgY29tYmluZXIuIiIiCgogICMgVE9ETyhyb2JlcnR3Yik6IEFsc28gc3RvcmUgdGhlIGNvZGVyIChwZXJoYXBzIGV4dHJhY3RlZCBmcm9tIHRoZSBjb21iaW5lX2ZuKQogIGRlZiBfX2luaXRfXyhzZWxmLCB0YWcsIGNvbWJpbmVfZm4pOgogICAgc3VwZXIoX0NvbWJpbmluZ1ZhbHVlU3RhdGVUYWcsIHNlbGYpLl9faW5pdF9fKHRhZykKICAgIGlmIG5vdCBjb21iaW5lX2ZuOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdjb21iaW5lX2ZuIG11c3QgYmUgc3BlY2lmaWVkLicpCiAgICBpZiBub3QgaXNpbnN0YW5jZShjb21iaW5lX2ZuLCBjb3JlLkNvbWJpbmVGbik6CiAgICAgIGNvbWJpbmVfZm4gPSBjb3JlLkNvbWJpbmVGbi5mcm9tX2NhbGxhYmxlKGNvbWJpbmVfZm4pCiAgICBzZWxmLmNvbWJpbmVfZm4gPSBjb21iaW5lX2ZuCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnQ29tYmluaW5nVmFsdWVTdGF0ZVRhZyglcywgJXMpJyAlIChzZWxmLnRhZywgc2VsZi5jb21iaW5lX2ZuKQoKICBkZWYgd2l0aF9wcmVmaXgoc2VsZiwgcHJlZml4KToKICAgIHJldHVybiBfQ29tYmluaW5nVmFsdWVTdGF0ZVRhZyhwcmVmaXggKyBzZWxmLnRhZywgc2VsZi5jb21iaW5lX2ZuKQoKCmNsYXNzIF9MaXN0U3RhdGVUYWcoX1N0YXRlVGFnKToKICAiIiJTdGF0ZVRhZyBwb2ludGluZyB0byBhIGxpc3Qgb2YgZWxlbWVudHMuIiIiCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICdMaXN0U3RhdGVUYWcoJXMpJyAlIHNlbGYudGFnCgogIGRlZiB3aXRoX3ByZWZpeChzZWxmLCBwcmVmaXgpOgogICAgcmV0dXJuIF9MaXN0U3RhdGVUYWcocHJlZml4ICsgc2VsZi50YWcpCgoKY2xhc3MgX1dhdGVybWFya0hvbGRTdGF0ZVRhZyhfU3RhdGVUYWcpOgoKICBkZWYgX19pbml0X18oc2VsZiwgdGFnLCB0aW1lc3RhbXBfY29tYmluZXJfaW1wbCk6CiAgICBzdXBlcihfV2F0ZXJtYXJrSG9sZFN0YXRlVGFnLCBzZWxmKS5fX2luaXRfXyh0YWcpCiAgICBzZWxmLnRpbWVzdGFtcF9jb21iaW5lcl9pbXBsID0gdGltZXN0YW1wX2NvbWJpbmVyX2ltcGwKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICdXYXRlcm1hcmtIb2xkU3RhdGVUYWcoJXMsICVzKScgJSAoc2VsZi50YWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRpbWVzdGFtcF9jb21iaW5lcl9pbXBsKQoKICBkZWYgd2l0aF9wcmVmaXgoc2VsZiwgcHJlZml4KToKICAgIHJldHVybiBfV2F0ZXJtYXJrSG9sZFN0YXRlVGFnKHByZWZpeCArIHNlbGYudGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aW1lc3RhbXBfY29tYmluZXJfaW1wbCkKCgojIHB5bGludDogZGlzYWJsZT11bnVzZWQtYXJndW1lbnQKIyBUT0RPKHJvYmVydHdiKTogUHJvdmlzaW9uYWwgQVBJLCBKYXZhIGxpa2VseSB0byBjaGFuZ2UgYXMgd2VsbC4KY2xhc3MgVHJpZ2dlckZuKHdpdGhfbWV0YWNsYXNzKEFCQ01ldGEsIG9iamVjdCkpOgogICIiIkEgVHJpZ2dlckZuIGRldGVybWluZXMgd2hlbiB3aW5kb3cgKHBhbmVzKSBhcmUgZW1pdHRlZC4KCiAgU2VlIGh0dHBzOi8vYmVhbS5hcGFjaGUub3JnL2RvY3VtZW50YXRpb24vcHJvZ3JhbW1pbmctZ3VpZGUvI3RyaWdnZXJzCiAgIiIiCgogIEBhYnN0cmFjdG1ldGhvZAogIGRlZiBvbl9lbGVtZW50KHNlbGYsIGVsZW1lbnQsIHdpbmRvdywgY29udGV4dCk6CiAgICAiIiJDYWxsZWQgd2hlbiBhIG5ldyBlbGVtZW50IGFycml2ZXMgaW4gYSB3aW5kb3cuCgogICAgQXJnczoKICAgICAgZWxlbWVudDogdGhlIGVsZW1lbnQgYmVpbmcgYWRkZWQKICAgICAgd2luZG93OiB0aGUgd2luZG93IHRvIHdoaWNoIHRoZSBlbGVtZW50IGlzIGJlaW5nIGFkZGVkCiAgICAgIGNvbnRleHQ6IGEgY29udGV4dCAoZS5nLiBhIFRyaWdnZXJDb250ZXh0IGluc3RhbmNlKSBmb3IgbWFuYWdpbmcgc3RhdGUKICAgICAgICAgIGFuZCBzZXR0aW5nIHRpbWVycwogICAgIiIiCiAgICBwYXNzCgogIEBhYnN0cmFjdG1ldGhvZAogIGRlZiBvbl9tZXJnZShzZWxmLCB0b19iZV9tZXJnZWQsIG1lcmdlX3Jlc3VsdCwgY29udGV4dCk6CiAgICAiIiJDYWxsZWQgd2hlbiBtdWx0aXBsZSB3aW5kb3dzIGFyZSBtZXJnZWQuCgogICAgQXJnczoKICAgICAgdG9fYmVfbWVyZ2VkOiB0aGUgc2V0IG9mIHdpbmRvd3MgdG8gYmUgbWVyZ2VkCiAgICAgIG1lcmdlX3Jlc3VsdDogdGhlIHdpbmRvdyBpbnRvIHdoaWNoIHRoZSB3aW5kb3dzIGFyZSBiZWluZyBtZXJnZWQKICAgICAgY29udGV4dDogYSBjb250ZXh0IChlLmcuIGEgVHJpZ2dlckNvbnRleHQgaW5zdGFuY2UpIGZvciBtYW5hZ2luZyBzdGF0ZQogICAgICAgICAgYW5kIHNldHRpbmcgdGltZXJzCiAgICAiIiIKICAgIHBhc3MKCiAgQGFic3RyYWN0bWV0aG9kCiAgZGVmIHNob3VsZF9maXJlKHNlbGYsIHRpbWVfZG9tYWluLCB0aW1lc3RhbXAsIHdpbmRvdywgY29udGV4dCk6CiAgICAiIiJXaGV0aGVyIHRoaXMgdHJpZ2dlciBzaG91bGQgY2F1c2UgdGhlIHdpbmRvdyB0byBmaXJlLgoKICAgIEFyZ3M6CiAgICAgIHRpbWVfZG9tYWluOiBXQVRFUk1BUksgZm9yIGV2ZW50LXRpbWUgdGltZXJzIGFuZCBSRUFMX1RJTUUgZm9yCiAgICAgICAgICBwcm9jZXNzaW5nLXRpbWUgdGltZXJzLgogICAgICB0aW1lc3RhbXA6IGZvciB0aW1lX2RvbWFpbiBXQVRFUk1BUkssIGl0IHJlcHJlc2VudHMgdGhlCiAgICAgICAgICB3YXRlcm1hcms6IChhIGxvd2VyIGJvdW5kIG9uKSB0aGUgd2F0ZXJtYXJrIG9mIHRoZSBzeXN0ZW0KICAgICAgICAgIGFuZCBmb3IgdGltZV9kb21haW4gUkVBTF9USU1FLCBpdCByZXByZXNlbnRzIHRoZQogICAgICAgICAgdHJpZ2dlcjogdGltZXN0YW1wIG9mIHRoZSBwcm9jZXNzaW5nLXRpbWUgdGltZXIuCiAgICAgIHdpbmRvdzogdGhlIHdpbmRvdyB3aG9zZSB0cmlnZ2VyIGlzIGJlaW5nIGNvbnNpZGVyZWQKICAgICAgY29udGV4dDogYSBjb250ZXh0IChlLmcuIGEgVHJpZ2dlckNvbnRleHQgaW5zdGFuY2UpIGZvciBtYW5hZ2luZyBzdGF0ZQogICAgICAgICAgYW5kIHNldHRpbmcgdGltZXJzCgogICAgUmV0dXJuczoKICAgICAgd2hldGhlciB0aGlzIHRyaWdnZXIgc2hvdWxkIGNhdXNlIGEgZmlyaW5nCiAgICAiIiIKICAgIHBhc3MKCiAgQGFic3RyYWN0bWV0aG9kCiAgZGVmIG9uX2ZpcmUoc2VsZiwgd2F0ZXJtYXJrLCB3aW5kb3csIGNvbnRleHQpOgogICAgIiIiQ2FsbGVkIHdoZW4gYSB0cmlnZ2VyIGFjdHVhbGx5IGZpcmVzLgoKICAgIEFyZ3M6CiAgICAgIHdhdGVybWFyazogKGEgbG93ZXIgYm91bmQgb24pIHRoZSB3YXRlcm1hcmsgb2YgdGhlIHN5c3RlbQogICAgICB3aW5kb3c6IHRoZSB3aW5kb3cgd2hvc2UgdHJpZ2dlciBpcyBiZWluZyBmaXJlZAogICAgICBjb250ZXh0OiBhIGNvbnRleHQgKGUuZy4gYSBUcmlnZ2VyQ29udGV4dCBpbnN0YW5jZSkgZm9yIG1hbmFnaW5nIHN0YXRlCiAgICAgICAgICBhbmQgc2V0dGluZyB0aW1lcnMKCiAgICBSZXR1cm5zOgogICAgICB3aGV0aGVyIHRoaXMgdHJpZ2dlciBpcyBmaW5pc2hlZAogICAgIiIiCiAgICBwYXNzCgogIEBhYnN0cmFjdG1ldGhvZAogIGRlZiByZXNldChzZWxmLCB3aW5kb3csIGNvbnRleHQpOgogICAgIiIiQ2xlYXIgYW55IHN0YXRlIGFuZCB0aW1lcnMgdXNlZCBieSB0aGlzIFRyaWdnZXJGbi4iIiIKICAgIHBhc3MKIyBweWxpbnQ6IGVuYWJsZT11bnVzZWQtYXJndW1lbnQKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBmcm9tX3J1bm5lcl9hcGkocHJvdG8sIGNvbnRleHQpOgogICAgcmV0dXJuIHsKICAgICAgICAnYWZ0ZXJfYWxsJzogQWZ0ZXJBbGwsCiAgICAgICAgJ2FmdGVyX2FueSc6IEFmdGVyQW55LAogICAgICAgICdhZnRlcl9lYWNoJzogQWZ0ZXJFYWNoLAogICAgICAgICdhZnRlcl9lbmRfb2Zfd2luZG93JzogQWZ0ZXJXYXRlcm1hcmssCiAgICAgICAgJ2FmdGVyX3Byb2Nlc3NpbmdfdGltZSc6IEFmdGVyUHJvY2Vzc2luZ1RpbWUsCiAgICAgICAgIyBhZnRlcl9wcm9jZXNzaW5nX3RpbWUsIGFmdGVyX3N5bmNocm9uaXplZF9wcm9jZXNzaW5nX3RpbWUKICAgICAgICAjIGFsd2F5cwogICAgICAgICdkZWZhdWx0JzogRGVmYXVsdFRyaWdnZXIsCiAgICAgICAgJ2VsZW1lbnRfY291bnQnOiBBZnRlckNvdW50LAogICAgICAgICMgbmV2ZXIKICAgICAgICAnb3JfZmluYWxseSc6IE9yRmluYWxseSwKICAgICAgICAncmVwZWF0JzogUmVwZWF0ZWRseSwKICAgIH1bcHJvdG8uV2hpY2hPbmVvZigndHJpZ2dlcicpXS5mcm9tX3J1bm5lcl9hcGkocHJvdG8sIGNvbnRleHQpCgogIEBhYnN0cmFjdG1ldGhvZAogIGRlZiB0b19ydW5uZXJfYXBpKHNlbGYsIHVudXNlZF9jb250ZXh0KToKICAgIHBhc3MKCiAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CiAgICAjIFRPRE8oQkVBTS01OTQ5KTogTmVlZGVkIGZvciBQeXRob24gMiBjb21wYXRpYmlsaXR5LgogICAgcmV0dXJuIG5vdCBzZWxmID09IG90aGVyCgoKY2xhc3MgRGVmYXVsdFRyaWdnZXIoVHJpZ2dlckZuKToKICAiIiJTZW1hbnRpY2FsbHkgUmVwZWF0ZWRseShBZnRlcldhdGVybWFyaygpKSwgYnV0IG1vcmUgb3B0aW1pemVkLiIiIgoKICBkZWYgX19pbml0X18oc2VsZik6CiAgICBwYXNzCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnRGVmYXVsdFRyaWdnZXIoKScKCiAgZGVmIG9uX2VsZW1lbnQoc2VsZiwgZWxlbWVudCwgd2luZG93LCBjb250ZXh0KToKICAgIGNvbnRleHQuc2V0X3RpbWVyKCcnLCBUaW1lRG9tYWluLldBVEVSTUFSSywgd2luZG93LmVuZCkKCiAgZGVmIG9uX21lcmdlKHNlbGYsIHRvX2JlX21lcmdlZCwgbWVyZ2VfcmVzdWx0LCBjb250ZXh0KToKICAgICMgTm90ZTogVGltZXIgY2xlYXJpbmcgc29sZWx5IGFuIG9wdGltaXphdGlvbi4KICAgIGZvciB3aW5kb3cgaW4gdG9fYmVfbWVyZ2VkOgogICAgICBpZiB3aW5kb3cuZW5kICE9IG1lcmdlX3Jlc3VsdC5lbmQ6CiAgICAgICAgY29udGV4dC5jbGVhcl90aW1lcignJywgVGltZURvbWFpbi5XQVRFUk1BUkspCgogIGRlZiBzaG91bGRfZmlyZShzZWxmLCB0aW1lX2RvbWFpbiwgd2F0ZXJtYXJrLCB3aW5kb3csIGNvbnRleHQpOgogICAgcmV0dXJuIHdhdGVybWFyayA+PSB3aW5kb3cuZW5kCgogIGRlZiBvbl9maXJlKHNlbGYsIHdhdGVybWFyaywgd2luZG93LCBjb250ZXh0KToKICAgIHJldHVybiBGYWxzZQoKICBkZWYgcmVzZXQoc2VsZiwgd2luZG93LCBjb250ZXh0KToKICAgIGNvbnRleHQuY2xlYXJfdGltZXIoJycsIFRpbWVEb21haW4uV0FURVJNQVJLKQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiB0eXBlKHNlbGYpID09IHR5cGUob3RoZXIpCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKHR5cGUoc2VsZikpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZnJvbV9ydW5uZXJfYXBpKHByb3RvLCBjb250ZXh0KToKICAgIHJldHVybiBEZWZhdWx0VHJpZ2dlcigpCgogIGRlZiB0b19ydW5uZXJfYXBpKHNlbGYsIHVudXNlZF9jb250ZXh0KToKICAgIHJldHVybiBiZWFtX3J1bm5lcl9hcGlfcGIyLlRyaWdnZXIoCiAgICAgICAgZGVmYXVsdD1iZWFtX3J1bm5lcl9hcGlfcGIyLlRyaWdnZXIuRGVmYXVsdCgpKQoKCmNsYXNzIEFmdGVyUHJvY2Vzc2luZ1RpbWUoVHJpZ2dlckZuKToKICAiIiJGaXJlIGV4YWN0bHkgb25jZSBhZnRlciBhIHNwZWNpZmllZCBkZWxheSBmcm9tIHByb2Nlc3NpbmcgdGltZS4KCiAgQWZ0ZXJQcm9jZXNzaW5nVGltZSBpcyBleHBlcmltZW50YWwuIE5vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBkZWxheT0wKToKICAgIHNlbGYuZGVsYXkgPSBkZWxheQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJ0FmdGVyUHJvY2Vzc2luZ1RpbWUoZGVsYXk9JWQpJyAlIHNlbGYuZGVsYXkKCiAgZGVmIG9uX2VsZW1lbnQoc2VsZiwgZWxlbWVudCwgd2luZG93LCBjb250ZXh0KToKICAgIGNvbnRleHQuc2V0X3RpbWVyKAogICAgICAgICcnLCBUaW1lRG9tYWluLlJFQUxfVElNRSwgY29udGV4dC5nZXRfY3VycmVudF90aW1lKCkgKyBzZWxmLmRlbGF5KQoKICBkZWYgb25fbWVyZ2Uoc2VsZiwgdG9fYmVfbWVyZ2VkLCBtZXJnZV9yZXN1bHQsIGNvbnRleHQpOgogICAgIyB0aW1lcnMgd2lsbCBiZSBrZXB0IHRocm91Z2ggbWVyZ2luZwogICAgcGFzcwoKICBkZWYgc2hvdWxkX2ZpcmUoc2VsZiwgdGltZV9kb21haW4sIHRpbWVzdGFtcCwgd2luZG93LCBjb250ZXh0KToKICAgIGlmIHRpbWVfZG9tYWluID09IFRpbWVEb21haW4uUkVBTF9USU1FOgogICAgICByZXR1cm4gVHJ1ZQoKICBkZWYgb25fZmlyZShzZWxmLCB0aW1lc3RhbXAsIHdpbmRvdywgY29udGV4dCk6CiAgICByZXR1cm4gVHJ1ZQoKICBkZWYgcmVzZXQoc2VsZiwgd2luZG93LCBjb250ZXh0KToKICAgIHBhc3MKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBmcm9tX3J1bm5lcl9hcGkocHJvdG8sIGNvbnRleHQpOgogICAgcmV0dXJuIEFmdGVyUHJvY2Vzc2luZ1RpbWUoCiAgICAgICAgZGVsYXk9KAogICAgICAgICAgICBwcm90by5hZnRlcl9wcm9jZXNzaW5nX3RpbWUKICAgICAgICAgICAgLnRpbWVzdGFtcF90cmFuc2Zvcm1zWzBdCiAgICAgICAgICAgIC5kZWxheQogICAgICAgICAgICAuZGVsYXlfbWlsbGlzKSkKCiAgZGVmIHRvX3J1bm5lcl9hcGkoc2VsZiwgY29udGV4dCk6CiAgICBkZWxheV9wcm90byA9IGJlYW1fcnVubmVyX2FwaV9wYjIuVGltZXN0YW1wVHJhbnNmb3JtKAogICAgICAgIGRlbGF5PWJlYW1fcnVubmVyX2FwaV9wYjIuVGltZXN0YW1wVHJhbnNmb3JtLkRlbGF5KAogICAgICAgICAgICBkZWxheV9taWxsaXM9c2VsZi5kZWxheSkpCiAgICByZXR1cm4gYmVhbV9ydW5uZXJfYXBpX3BiMi5UcmlnZ2VyKAogICAgICAgIGFmdGVyX3Byb2Nlc3NpbmdfdGltZT1iZWFtX3J1bm5lcl9hcGlfcGIyLlRyaWdnZXIuQWZ0ZXJQcm9jZXNzaW5nVGltZSgKICAgICAgICAgICAgdGltZXN0YW1wX3RyYW5zZm9ybXM9W2RlbGF5X3Byb3RvXSkpCgoKY2xhc3MgQWZ0ZXJXYXRlcm1hcmsoVHJpZ2dlckZuKToKICAiIiJGaXJlIGV4YWN0bHkgb25jZSB3aGVuIHRoZSB3YXRlcm1hcmsgcGFzc2VzIHRoZSBlbmQgb2YgdGhlIHdpbmRvdy4KCiAgQXJnczoKICAgICAgZWFybHk6IGlmIG5vdCBOb25lLCBhIHNwZWN1bGF0aXZlIHRyaWdnZXIgdG8gcmVwZWF0ZWRseSBldmFsdWF0ZSBiZWZvcmUKICAgICAgICB0aGUgd2F0ZXJtYXJrIHBhc3NlcyB0aGUgZW5kIG9mIHRoZSB3aW5kb3cKICAgICAgbGF0ZTogaWYgbm90IE5vbmUsIGEgc3BlY3VsYXRpdmUgdHJpZ2dlciB0byByZXBlYXRlZGx5IGV2YWx1YXRlIGFmdGVyCiAgICAgICAgdGhlIHdhdGVybWFyayBwYXNzZXMgdGhlIGVuZCBvZiB0aGUgd2luZG93CiAgIiIiCiAgTEFURV9UQUcgPSBfQ29tYmluaW5nVmFsdWVTdGF0ZVRhZygnaXNfbGF0ZScsIGFueSkKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGVhcmx5PU5vbmUsIGxhdGU9Tm9uZSk6CiAgICBzZWxmLmVhcmx5ID0gUmVwZWF0ZWRseShlYXJseSkgaWYgZWFybHkgZWxzZSBOb25lCiAgICBzZWxmLmxhdGUgPSBSZXBlYXRlZGx5KGxhdGUpIGlmIGxhdGUgZWxzZSBOb25lCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHF1YWxpZmllcnMgPSBbXQogICAgaWYgc2VsZi5lYXJseToKICAgICAgcXVhbGlmaWVycy5hcHBlbmQoJ2Vhcmx5PSVzJyAlIHNlbGYuZWFybHkudW5kZXJseWluZykKICAgIGlmIHNlbGYubGF0ZToKICAgICAgcXVhbGlmaWVycy5hcHBlbmQoJ2xhdGU9JXMnICUgc2VsZi5sYXRlLnVuZGVybHlpbmcpCiAgICByZXR1cm4gJ0FmdGVyV2F0ZXJtYXJrKCVzKScgJSAnLCAnLmpvaW4ocXVhbGlmaWVycykKCiAgZGVmIGlzX2xhdGUoc2VsZiwgY29udGV4dCk6CiAgICByZXR1cm4gc2VsZi5sYXRlIGFuZCBjb250ZXh0LmdldF9zdGF0ZShzZWxmLkxBVEVfVEFHKQoKICBkZWYgb25fZWxlbWVudChzZWxmLCBlbGVtZW50LCB3aW5kb3csIGNvbnRleHQpOgogICAgaWYgc2VsZi5pc19sYXRlKGNvbnRleHQpOgogICAgICBzZWxmLmxhdGUub25fZWxlbWVudChlbGVtZW50LCB3aW5kb3csIE5lc3RlZENvbnRleHQoY29udGV4dCwgJ2xhdGUnKSkKICAgIGVsc2U6CiAgICAgIGNvbnRleHQuc2V0X3RpbWVyKCcnLCBUaW1lRG9tYWluLldBVEVSTUFSSywgd2luZG93LmVuZCkKICAgICAgaWYgc2VsZi5lYXJseToKICAgICAgICBzZWxmLmVhcmx5Lm9uX2VsZW1lbnQoZWxlbWVudCwgd2luZG93LCBOZXN0ZWRDb250ZXh0KGNvbnRleHQsICdlYXJseScpKQoKICBkZWYgb25fbWVyZ2Uoc2VsZiwgdG9fYmVfbWVyZ2VkLCBtZXJnZV9yZXN1bHQsIGNvbnRleHQpOgogICAgIyBUT0RPKHJvYmVydHdiKTogRmlndXJlIG91dCB3aGV0aGVyIHRoZSAncmV3aW5kJyBzZW1hbnRpY3MgY291bGQgYmUgdXNlZAogICAgIyBoZXJlLgogICAgaWYgc2VsZi5pc19sYXRlKGNvbnRleHQpOgogICAgICBzZWxmLmxhdGUub25fbWVyZ2UoCiAgICAgICAgICB0b19iZV9tZXJnZWQsIG1lcmdlX3Jlc3VsdCwgTmVzdGVkQ29udGV4dChjb250ZXh0LCAnbGF0ZScpKQogICAgZWxzZToKICAgICAgIyBOb3RlOiBUaW1lciBjbGVhcmluZyBzb2xlbHkgYW4gb3B0aW1pemF0aW9uLgogICAgICBmb3Igd2luZG93IGluIHRvX2JlX21lcmdlZDoKICAgICAgICBpZiB3aW5kb3cuZW5kICE9IG1lcmdlX3Jlc3VsdC5lbmQ6CiAgICAgICAgICBjb250ZXh0LmNsZWFyX3RpbWVyKCcnLCBUaW1lRG9tYWluLldBVEVSTUFSSykKICAgICAgaWYgc2VsZi5lYXJseToKICAgICAgICBzZWxmLmVhcmx5Lm9uX21lcmdlKAogICAgICAgICAgICB0b19iZV9tZXJnZWQsIG1lcmdlX3Jlc3VsdCwgTmVzdGVkQ29udGV4dChjb250ZXh0LCAnZWFybHknKSkKCiAgZGVmIHNob3VsZF9maXJlKHNlbGYsIHRpbWVfZG9tYWluLCB3YXRlcm1hcmssIHdpbmRvdywgY29udGV4dCk6CiAgICBpZiBzZWxmLmlzX2xhdGUoY29udGV4dCk6CiAgICAgIHJldHVybiBzZWxmLmxhdGUuc2hvdWxkX2ZpcmUodGltZV9kb21haW4sIHdhdGVybWFyaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3csIE5lc3RlZENvbnRleHQoY29udGV4dCwgJ2xhdGUnKSkKICAgIGVsaWYgd2F0ZXJtYXJrID49IHdpbmRvdy5lbmQ6CiAgICAgIHJldHVybiBUcnVlCiAgICBlbGlmIHNlbGYuZWFybHk6CiAgICAgIHJldHVybiBzZWxmLmVhcmx5LnNob3VsZF9maXJlKHRpbWVfZG9tYWluLCB3YXRlcm1hcmssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdywgTmVzdGVkQ29udGV4dChjb250ZXh0LCAnZWFybHknKSkKICAgIHJldHVybiBGYWxzZQoKICBkZWYgb25fZmlyZShzZWxmLCB3YXRlcm1hcmssIHdpbmRvdywgY29udGV4dCk6CiAgICBpZiBzZWxmLmlzX2xhdGUoY29udGV4dCk6CiAgICAgIHJldHVybiBzZWxmLmxhdGUub25fZmlyZSgKICAgICAgICAgIHdhdGVybWFyaywgd2luZG93LCBOZXN0ZWRDb250ZXh0KGNvbnRleHQsICdsYXRlJykpCiAgICBlbGlmIHdhdGVybWFyayA+PSB3aW5kb3cuZW5kOgogICAgICBjb250ZXh0LmFkZF9zdGF0ZShzZWxmLkxBVEVfVEFHLCBUcnVlKQogICAgICByZXR1cm4gbm90IHNlbGYubGF0ZQogICAgZWxpZiBzZWxmLmVhcmx5OgogICAgICBzZWxmLmVhcmx5Lm9uX2ZpcmUod2F0ZXJtYXJrLCB3aW5kb3csIE5lc3RlZENvbnRleHQoY29udGV4dCwgJ2Vhcmx5JykpCiAgICAgIHJldHVybiBGYWxzZQoKICBkZWYgcmVzZXQoc2VsZiwgd2luZG93LCBjb250ZXh0KToKICAgIGlmIHNlbGYubGF0ZToKICAgICAgY29udGV4dC5jbGVhcl9zdGF0ZShzZWxmLkxBVEVfVEFHKQogICAgaWYgc2VsZi5lYXJseToKICAgICAgc2VsZi5lYXJseS5yZXNldCh3aW5kb3csIE5lc3RlZENvbnRleHQoY29udGV4dCwgJ2Vhcmx5JykpCiAgICBpZiBzZWxmLmxhdGU6CiAgICAgIHNlbGYubGF0ZS5yZXNldCh3aW5kb3csIE5lc3RlZENvbnRleHQoY29udGV4dCwgJ2xhdGUnKSkKCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gKHR5cGUoc2VsZikgPT0gdHlwZShvdGhlcikKICAgICAgICAgICAgYW5kIHNlbGYuZWFybHkgPT0gb3RoZXIuZWFybHkKICAgICAgICAgICAgYW5kIHNlbGYubGF0ZSA9PSBvdGhlci5sYXRlKQoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaCgodHlwZShzZWxmKSwgc2VsZi5lYXJseSwgc2VsZi5sYXRlKSkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBmcm9tX3J1bm5lcl9hcGkocHJvdG8sIGNvbnRleHQpOgogICAgcmV0dXJuIEFmdGVyV2F0ZXJtYXJrKAogICAgICAgIGVhcmx5PVRyaWdnZXJGbi5mcm9tX3J1bm5lcl9hcGkoCiAgICAgICAgICAgIHByb3RvLmFmdGVyX2VuZF9vZl93aW5kb3cuZWFybHlfZmlyaW5ncywgY29udGV4dCkKICAgICAgICBpZiBwcm90by5hZnRlcl9lbmRfb2Zfd2luZG93Lkhhc0ZpZWxkKCdlYXJseV9maXJpbmdzJykKICAgICAgICBlbHNlIE5vbmUsCiAgICAgICAgbGF0ZT1UcmlnZ2VyRm4uZnJvbV9ydW5uZXJfYXBpKAogICAgICAgICAgICBwcm90by5hZnRlcl9lbmRfb2Zfd2luZG93LmxhdGVfZmlyaW5ncywgY29udGV4dCkKICAgICAgICBpZiBwcm90by5hZnRlcl9lbmRfb2Zfd2luZG93Lkhhc0ZpZWxkKCdsYXRlX2ZpcmluZ3MnKQogICAgICAgIGVsc2UgTm9uZSkKCiAgZGVmIHRvX3J1bm5lcl9hcGkoc2VsZiwgY29udGV4dCk6CiAgICBlYXJseV9wcm90byA9IHNlbGYuZWFybHkudW5kZXJseWluZy50b19ydW5uZXJfYXBpKAogICAgICAgIGNvbnRleHQpIGlmIHNlbGYuZWFybHkgZWxzZSBOb25lCiAgICBsYXRlX3Byb3RvID0gc2VsZi5sYXRlLnVuZGVybHlpbmcudG9fcnVubmVyX2FwaSgKICAgICAgICBjb250ZXh0KSBpZiBzZWxmLmxhdGUgZWxzZSBOb25lCiAgICByZXR1cm4gYmVhbV9ydW5uZXJfYXBpX3BiMi5UcmlnZ2VyKAogICAgICAgIGFmdGVyX2VuZF9vZl93aW5kb3c9YmVhbV9ydW5uZXJfYXBpX3BiMi5UcmlnZ2VyLkFmdGVyRW5kT2ZXaW5kb3coCiAgICAgICAgICAgIGVhcmx5X2ZpcmluZ3M9ZWFybHlfcHJvdG8sCiAgICAgICAgICAgIGxhdGVfZmlyaW5ncz1sYXRlX3Byb3RvKSkKCgpjbGFzcyBBZnRlckNvdW50KFRyaWdnZXJGbik6CiAgIiIiRmlyZSB3aGVuIHRoZXJlIGFyZSBhdCBsZWFzdCBjb3VudCBlbGVtZW50cyBpbiB0aGlzIHdpbmRvdyBwYW5lLgoKICBBZnRlckNvdW50IGlzIGV4cGVyaW1lbnRhbC4gTm8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KICAiIiIKCiAgQ09VTlRfVEFHID0gX0NvbWJpbmluZ1ZhbHVlU3RhdGVUYWcoJ2NvdW50JywgY29tYmluZXJzLkNvdW50Q29tYmluZUZuKCkpCgogIGRlZiBfX2luaXRfXyhzZWxmLCBjb3VudCk6CiAgICBpZiBub3QgaXNpbnN0YW5jZShjb3VudCwgbnVtYmVycy5JbnRlZ3JhbCkgb3IgY291bnQgPCAxOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCJjb3VudCAoJWQpIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLiIgJSBjb3VudCkKICAgIHNlbGYuY291bnQgPSBjb3VudAoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJ0FmdGVyQ291bnQoJXMpJyAlIHNlbGYuY291bnQKCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gdHlwZShzZWxmKSA9PSB0eXBlKG90aGVyKSBhbmQgc2VsZi5jb3VudCA9PSBvdGhlci5jb3VudAoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaChzZWxmLmNvdW50KQoKICBkZWYgb25fZWxlbWVudChzZWxmLCBlbGVtZW50LCB3aW5kb3csIGNvbnRleHQpOgogICAgY29udGV4dC5hZGRfc3RhdGUoc2VsZi5DT1VOVF9UQUcsIDEpCgogIGRlZiBvbl9tZXJnZShzZWxmLCB0b19iZV9tZXJnZWQsIG1lcmdlX3Jlc3VsdCwgY29udGV4dCk6CiAgICAjIHN0YXRlcyBhdXRvbWF0aWNhbGx5IG1lcmdlZAogICAgcGFzcwoKICBkZWYgc2hvdWxkX2ZpcmUoc2VsZiwgdGltZV9kb21haW4sIHdhdGVybWFyaywgd2luZG93LCBjb250ZXh0KToKICAgIHJldHVybiBjb250ZXh0LmdldF9zdGF0ZShzZWxmLkNPVU5UX1RBRykgPj0gc2VsZi5jb3VudAoKICBkZWYgb25fZmlyZShzZWxmLCB3YXRlcm1hcmssIHdpbmRvdywgY29udGV4dCk6CiAgICByZXR1cm4gVHJ1ZQoKICBkZWYgcmVzZXQoc2VsZiwgd2luZG93LCBjb250ZXh0KToKICAgIGNvbnRleHQuY2xlYXJfc3RhdGUoc2VsZi5DT1VOVF9UQUcpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZnJvbV9ydW5uZXJfYXBpKHByb3RvLCB1bnVzZWRfY29udGV4dCk6CiAgICByZXR1cm4gQWZ0ZXJDb3VudChwcm90by5lbGVtZW50X2NvdW50LmVsZW1lbnRfY291bnQpCgogIGRlZiB0b19ydW5uZXJfYXBpKHNlbGYsIHVudXNlZF9jb250ZXh0KToKICAgIHJldHVybiBiZWFtX3J1bm5lcl9hcGlfcGIyLlRyaWdnZXIoCiAgICAgICAgZWxlbWVudF9jb3VudD1iZWFtX3J1bm5lcl9hcGlfcGIyLlRyaWdnZXIuRWxlbWVudENvdW50KAogICAgICAgICAgICBlbGVtZW50X2NvdW50PXNlbGYuY291bnQpKQoKCmNsYXNzIFJlcGVhdGVkbHkoVHJpZ2dlckZuKToKICAiIiJSZXBlYXRlZGx5IGludm9rZSB0aGUgZ2l2ZW4gdHJpZ2dlciwgbmV2ZXIgZmluaXNoaW5nLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgdW5kZXJseWluZyk6CiAgICBzZWxmLnVuZGVybHlpbmcgPSB1bmRlcmx5aW5nCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnUmVwZWF0ZWRseSglcyknICUgc2VsZi51bmRlcmx5aW5nCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuIHR5cGUoc2VsZikgPT0gdHlwZShvdGhlcikgYW5kIHNlbGYudW5kZXJseWluZyA9PSBvdGhlci51bmRlcmx5aW5nCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKHNlbGYudW5kZXJseWluZykKCiAgZGVmIG9uX2VsZW1lbnQoc2VsZiwgZWxlbWVudCwgd2luZG93LCBjb250ZXh0KToKICAgIHNlbGYudW5kZXJseWluZy5vbl9lbGVtZW50KGVsZW1lbnQsIHdpbmRvdywgY29udGV4dCkKCiAgZGVmIG9uX21lcmdlKHNlbGYsIHRvX2JlX21lcmdlZCwgbWVyZ2VfcmVzdWx0LCBjb250ZXh0KToKICAgIHNlbGYudW5kZXJseWluZy5vbl9tZXJnZSh0b19iZV9tZXJnZWQsIG1lcmdlX3Jlc3VsdCwgY29udGV4dCkKCiAgZGVmIHNob3VsZF9maXJlKHNlbGYsIHRpbWVfZG9tYWluLCB3YXRlcm1hcmssIHdpbmRvdywgY29udGV4dCk6CiAgICByZXR1cm4gc2VsZi51bmRlcmx5aW5nLnNob3VsZF9maXJlKHRpbWVfZG9tYWluLCB3YXRlcm1hcmssIHdpbmRvdywgY29udGV4dCkKCiAgZGVmIG9uX2ZpcmUoc2VsZiwgd2F0ZXJtYXJrLCB3aW5kb3csIGNvbnRleHQpOgogICAgaWYgc2VsZi51bmRlcmx5aW5nLm9uX2ZpcmUod2F0ZXJtYXJrLCB3aW5kb3csIGNvbnRleHQpOgogICAgICBzZWxmLnVuZGVybHlpbmcucmVzZXQod2luZG93LCBjb250ZXh0KQogICAgcmV0dXJuIEZhbHNlCgogIGRlZiByZXNldChzZWxmLCB3aW5kb3csIGNvbnRleHQpOgogICAgc2VsZi51bmRlcmx5aW5nLnJlc2V0KHdpbmRvdywgY29udGV4dCkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBmcm9tX3J1bm5lcl9hcGkocHJvdG8sIGNvbnRleHQpOgogICAgcmV0dXJuIFJlcGVhdGVkbHkoCiAgICAgICAgVHJpZ2dlckZuLmZyb21fcnVubmVyX2FwaShwcm90by5yZXBlYXQuc3VidHJpZ2dlciwgY29udGV4dCkpCgogIGRlZiB0b19ydW5uZXJfYXBpKHNlbGYsIGNvbnRleHQpOgogICAgcmV0dXJuIGJlYW1fcnVubmVyX2FwaV9wYjIuVHJpZ2dlcigKICAgICAgICByZXBlYXQ9YmVhbV9ydW5uZXJfYXBpX3BiMi5UcmlnZ2VyLlJlcGVhdCgKICAgICAgICAgICAgc3VidHJpZ2dlcj1zZWxmLnVuZGVybHlpbmcudG9fcnVubmVyX2FwaShjb250ZXh0KSkpCgoKY2xhc3MgX1BhcmFsbGVsVHJpZ2dlckZuKHdpdGhfbWV0YWNsYXNzKEFCQ01ldGEsIFRyaWdnZXJGbikpOgoKICBkZWYgX19pbml0X18oc2VsZiwgKnRyaWdnZXJzKToKICAgIHNlbGYudHJpZ2dlcnMgPSB0cmlnZ2VycwoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJyVzKCVzKScgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sCiAgICAgICAgICAgICAgICAgICAgICAgJywgJy5qb2luKHN0cih0KSBmb3IgdCBpbiBzZWxmLnRyaWdnZXJzKSkKCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gdHlwZShzZWxmKSA9PSB0eXBlKG90aGVyKSBhbmQgc2VsZi50cmlnZ2VycyA9PSBvdGhlci50cmlnZ2VycwoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaChzZWxmLnRyaWdnZXJzKQoKICBAYWJzdHJhY3RtZXRob2QKICBkZWYgY29tYmluZV9vcChzZWxmLCB0cmlnZ2VyX3Jlc3VsdHMpOgogICAgcGFzcwoKICBkZWYgb25fZWxlbWVudChzZWxmLCBlbGVtZW50LCB3aW5kb3csIGNvbnRleHQpOgogICAgZm9yIGl4LCB0cmlnZ2VyIGluIGVudW1lcmF0ZShzZWxmLnRyaWdnZXJzKToKICAgICAgdHJpZ2dlci5vbl9lbGVtZW50KGVsZW1lbnQsIHdpbmRvdywgc2VsZi5fc3ViX2NvbnRleHQoY29udGV4dCwgaXgpKQoKICBkZWYgb25fbWVyZ2Uoc2VsZiwgdG9fYmVfbWVyZ2VkLCBtZXJnZV9yZXN1bHQsIGNvbnRleHQpOgogICAgZm9yIGl4LCB0cmlnZ2VyIGluIGVudW1lcmF0ZShzZWxmLnRyaWdnZXJzKToKICAgICAgdHJpZ2dlci5vbl9tZXJnZSgKICAgICAgICAgIHRvX2JlX21lcmdlZCwgbWVyZ2VfcmVzdWx0LCBzZWxmLl9zdWJfY29udGV4dChjb250ZXh0LCBpeCkpCgogIGRlZiBzaG91bGRfZmlyZShzZWxmLCB0aW1lX2RvbWFpbiwgd2F0ZXJtYXJrLCB3aW5kb3csIGNvbnRleHQpOgogICAgc2VsZi5fdGltZV9kb21haW4gPSB0aW1lX2RvbWFpbgogICAgcmV0dXJuIHNlbGYuY29tYmluZV9vcCgKICAgICAgICB0cmlnZ2VyLnNob3VsZF9maXJlKHRpbWVfZG9tYWluLCB3YXRlcm1hcmssIHdpbmRvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N1Yl9jb250ZXh0KGNvbnRleHQsIGl4KSkKICAgICAgICBmb3IgaXgsIHRyaWdnZXIgaW4gZW51bWVyYXRlKHNlbGYudHJpZ2dlcnMpKQoKICBkZWYgb25fZmlyZShzZWxmLCB3YXRlcm1hcmssIHdpbmRvdywgY29udGV4dCk6CiAgICBmaW5pc2hlZCA9IFtdCiAgICBmb3IgaXgsIHRyaWdnZXIgaW4gZW51bWVyYXRlKHNlbGYudHJpZ2dlcnMpOgogICAgICBuZXN0ZWRfY29udGV4dCA9IHNlbGYuX3N1Yl9jb250ZXh0KGNvbnRleHQsIGl4KQogICAgICBpZiB0cmlnZ2VyLnNob3VsZF9maXJlKFRpbWVEb21haW4uV0FURVJNQVJLLCB3YXRlcm1hcmssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LCBuZXN0ZWRfY29udGV4dCk6CiAgICAgICAgZmluaXNoZWQuYXBwZW5kKHRyaWdnZXIub25fZmlyZSh3YXRlcm1hcmssIHdpbmRvdywgbmVzdGVkX2NvbnRleHQpKQogICAgcmV0dXJuIHNlbGYuY29tYmluZV9vcChmaW5pc2hlZCkKCiAgZGVmIHJlc2V0KHNlbGYsIHdpbmRvdywgY29udGV4dCk6CiAgICBmb3IgaXgsIHRyaWdnZXIgaW4gZW51bWVyYXRlKHNlbGYudHJpZ2dlcnMpOgogICAgICB0cmlnZ2VyLnJlc2V0KHdpbmRvdywgc2VsZi5fc3ViX2NvbnRleHQoY29udGV4dCwgaXgpKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIF9zdWJfY29udGV4dChjb250ZXh0LCBpbmRleCk6CiAgICByZXR1cm4gTmVzdGVkQ29udGV4dChjb250ZXh0LCAnJWQvJyAlIGluZGV4KQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGZyb21fcnVubmVyX2FwaShwcm90bywgY29udGV4dCk6CiAgICBzdWJ0cmlnZ2VycyA9IFsKICAgICAgICBUcmlnZ2VyRm4uZnJvbV9ydW5uZXJfYXBpKHN1YnRyaWdnZXIsIGNvbnRleHQpCiAgICAgICAgZm9yIHN1YnRyaWdnZXIKICAgICAgICBpbiBwcm90by5hZnRlcl9hbGwuc3VidHJpZ2dlcnMgb3IgcHJvdG8uYWZ0ZXJfYW55LnN1YnRyaWdnZXJzXQogICAgaWYgcHJvdG8uYWZ0ZXJfYWxsLnN1YnRyaWdnZXJzOgogICAgICByZXR1cm4gQWZ0ZXJBbGwoKnN1YnRyaWdnZXJzKQogICAgZWxzZToKICAgICAgcmV0dXJuIEFmdGVyQW55KCpzdWJ0cmlnZ2VycykKCiAgZGVmIHRvX3J1bm5lcl9hcGkoc2VsZiwgY29udGV4dCk6CiAgICBzdWJ0cmlnZ2VycyA9IFsKICAgICAgICBzdWJ0cmlnZ2VyLnRvX3J1bm5lcl9hcGkoY29udGV4dCkgZm9yIHN1YnRyaWdnZXIgaW4gc2VsZi50cmlnZ2Vyc10KICAgIGlmIHNlbGYuY29tYmluZV9vcCA9PSBhbGw6CiAgICAgIHJldHVybiBiZWFtX3J1bm5lcl9hcGlfcGIyLlRyaWdnZXIoCiAgICAgICAgICBhZnRlcl9hbGw9YmVhbV9ydW5uZXJfYXBpX3BiMi5UcmlnZ2VyLkFmdGVyQWxsKAogICAgICAgICAgICAgIHN1YnRyaWdnZXJzPXN1YnRyaWdnZXJzKSkKICAgIGVsaWYgc2VsZi5jb21iaW5lX29wID09IGFueToKICAgICAgcmV0dXJuIGJlYW1fcnVubmVyX2FwaV9wYjIuVHJpZ2dlcigKICAgICAgICAgIGFmdGVyX2FueT1iZWFtX3J1bm5lcl9hcGlfcGIyLlRyaWdnZXIuQWZ0ZXJBbnkoCiAgICAgICAgICAgICAgc3VidHJpZ2dlcnM9c3VidHJpZ2dlcnMpKQogICAgZWxzZToKICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcihzZWxmKQoKCmNsYXNzIEFmdGVyQW55KF9QYXJhbGxlbFRyaWdnZXJGbik6CiAgIiIiRmlyZXMgd2hlbiBhbnkgc3VidHJpZ2dlciBmaXJlcy4KCiAgQWxzbyBmaW5pc2hlcyB3aGVuIGFueSBzdWJ0cmlnZ2VyIGZpbmlzaGVzLgogICIiIgogIGNvbWJpbmVfb3AgPSBhbnkKCgpjbGFzcyBBZnRlckFsbChfUGFyYWxsZWxUcmlnZ2VyRm4pOgogICIiIkZpcmVzIHdoZW4gYWxsIHN1YnRyaWdnZXJzIGhhdmUgZmlyZWQuCgogIEFsc28gZmluaXNoZXMgd2hlbiBhbGwgc3VidHJpZ2dlcnMgaGF2ZSBmaW5pc2hlZC4KICAiIiIKICBjb21iaW5lX29wID0gYWxsCgoKY2xhc3MgQWZ0ZXJFYWNoKFRyaWdnZXJGbik6CgogIElOREVYX1RBRyA9IF9Db21iaW5pbmdWYWx1ZVN0YXRlVGFnKCdpbmRleCcsICgKICAgICAgbGFtYmRhIGluZGljZXM6IDAgaWYgbm90IGluZGljZXMgZWxzZSBtYXgoaW5kaWNlcykpKQoKICBkZWYgX19pbml0X18oc2VsZiwgKnRyaWdnZXJzKToKICAgIHNlbGYudHJpZ2dlcnMgPSB0cmlnZ2VycwoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJyVzKCVzKScgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sCiAgICAgICAgICAgICAgICAgICAgICAgJywgJy5qb2luKHN0cih0KSBmb3IgdCBpbiBzZWxmLnRyaWdnZXJzKSkKCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gdHlwZShzZWxmKSA9PSB0eXBlKG90aGVyKSBhbmQgc2VsZi50cmlnZ2VycyA9PSBvdGhlci50cmlnZ2VycwoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaChzZWxmLnRyaWdnZXJzKQoKICBkZWYgb25fZWxlbWVudChzZWxmLCBlbGVtZW50LCB3aW5kb3csIGNvbnRleHQpOgogICAgaXggPSBjb250ZXh0LmdldF9zdGF0ZShzZWxmLklOREVYX1RBRykKICAgIGlmIGl4IDwgbGVuKHNlbGYudHJpZ2dlcnMpOgogICAgICBzZWxmLnRyaWdnZXJzW2l4XS5vbl9lbGVtZW50KAogICAgICAgICAgZWxlbWVudCwgd2luZG93LCBzZWxmLl9zdWJfY29udGV4dChjb250ZXh0LCBpeCkpCgogIGRlZiBvbl9tZXJnZShzZWxmLCB0b19iZV9tZXJnZWQsIG1lcmdlX3Jlc3VsdCwgY29udGV4dCk6CiAgICAjIFRoaXMgdGFrZXMgdGhlIGZ1cnRoZXN0IHdpbmRvdyBvbiBtZXJnaW5nLgogICAgIyBUT0RPKHJvYmVydHdiKTogUmV2aXNpdCB0aGlzIHdoZW4gbWVyZ2luZyB3aW5kb3dzIGxvZ2ljIGlzIHNldHRsZWQgZm9yCiAgICAjIGFsbCBwb3NzaWJsZSBtZXJnaW5nIHNpdHVhdGlvbnMuCiAgICBpeCA9IGNvbnRleHQuZ2V0X3N0YXRlKHNlbGYuSU5ERVhfVEFHKQogICAgaWYgaXggPCBsZW4oc2VsZi50cmlnZ2Vycyk6CiAgICAgIHNlbGYudHJpZ2dlcnNbaXhdLm9uX21lcmdlKAogICAgICAgICAgdG9fYmVfbWVyZ2VkLCBtZXJnZV9yZXN1bHQsIHNlbGYuX3N1Yl9jb250ZXh0KGNvbnRleHQsIGl4KSkKCiAgZGVmIHNob3VsZF9maXJlKHNlbGYsIHRpbWVfZG9tYWluLCB3YXRlcm1hcmssIHdpbmRvdywgY29udGV4dCk6CiAgICBpeCA9IGNvbnRleHQuZ2V0X3N0YXRlKHNlbGYuSU5ERVhfVEFHKQogICAgaWYgaXggPCBsZW4oc2VsZi50cmlnZ2Vycyk6CiAgICAgIHJldHVybiBzZWxmLnRyaWdnZXJzW2l4XS5zaG91bGRfZmlyZSgKICAgICAgICAgIHRpbWVfZG9tYWluLCB3YXRlcm1hcmssIHdpbmRvdywgc2VsZi5fc3ViX2NvbnRleHQoY29udGV4dCwgaXgpKQoKICBkZWYgb25fZmlyZShzZWxmLCB3YXRlcm1hcmssIHdpbmRvdywgY29udGV4dCk6CiAgICBpeCA9IGNvbnRleHQuZ2V0X3N0YXRlKHNlbGYuSU5ERVhfVEFHKQogICAgaWYgaXggPCBsZW4oc2VsZi50cmlnZ2Vycyk6CiAgICAgIGlmIHNlbGYudHJpZ2dlcnNbaXhdLm9uX2ZpcmUoCiAgICAgICAgICB3YXRlcm1hcmssIHdpbmRvdywgc2VsZi5fc3ViX2NvbnRleHQoY29udGV4dCwgaXgpKToKICAgICAgICBpeCArPSAxCiAgICAgICAgY29udGV4dC5hZGRfc3RhdGUoc2VsZi5JTkRFWF9UQUcsIGl4KQogICAgICByZXR1cm4gaXggPT0gbGVuKHNlbGYudHJpZ2dlcnMpCgogIGRlZiByZXNldChzZWxmLCB3aW5kb3csIGNvbnRleHQpOgogICAgY29udGV4dC5jbGVhcl9zdGF0ZShzZWxmLklOREVYX1RBRykKICAgIGZvciBpeCwgdHJpZ2dlciBpbiBlbnVtZXJhdGUoc2VsZi50cmlnZ2Vycyk6CiAgICAgIHRyaWdnZXIucmVzZXQod2luZG93LCBzZWxmLl9zdWJfY29udGV4dChjb250ZXh0LCBpeCkpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgX3N1Yl9jb250ZXh0KGNvbnRleHQsIGluZGV4KToKICAgIHJldHVybiBOZXN0ZWRDb250ZXh0KGNvbnRleHQsICclZC8nICUgaW5kZXgpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZnJvbV9ydW5uZXJfYXBpKHByb3RvLCBjb250ZXh0KToKICAgIHJldHVybiBBZnRlckVhY2goKlsKICAgICAgICBUcmlnZ2VyRm4uZnJvbV9ydW5uZXJfYXBpKHN1YnRyaWdnZXIsIGNvbnRleHQpCiAgICAgICAgZm9yIHN1YnRyaWdnZXIgaW4gcHJvdG8uYWZ0ZXJfZWFjaC5zdWJ0cmlnZ2Vyc10pCgogIGRlZiB0b19ydW5uZXJfYXBpKHNlbGYsIGNvbnRleHQpOgogICAgcmV0dXJuIGJlYW1fcnVubmVyX2FwaV9wYjIuVHJpZ2dlcigKICAgICAgICBhZnRlcl9lYWNoPWJlYW1fcnVubmVyX2FwaV9wYjIuVHJpZ2dlci5BZnRlckVhY2goCiAgICAgICAgICAgIHN1YnRyaWdnZXJzPVsKICAgICAgICAgICAgICAgIHN1YnRyaWdnZXIudG9fcnVubmVyX2FwaShjb250ZXh0KQogICAgICAgICAgICAgICAgZm9yIHN1YnRyaWdnZXIgaW4gc2VsZi50cmlnZ2Vyc10pKQoKCmNsYXNzIE9yRmluYWxseShBZnRlckFueSk6CgogIEBzdGF0aWNtZXRob2QKICBkZWYgZnJvbV9ydW5uZXJfYXBpKHByb3RvLCBjb250ZXh0KToKICAgIHJldHVybiBPckZpbmFsbHkoCiAgICAgICAgVHJpZ2dlckZuLmZyb21fcnVubmVyX2FwaShwcm90by5vcl9maW5hbGx5Lm1haW4sIGNvbnRleHQpLAogICAgICAgICMgZ2V0YXR0ciBpcyB1c2VkIGFzIGZpbmFsbHkgaXMgYSBrZXl3b3JkIGluIFB5dGhvbgogICAgICAgIFRyaWdnZXJGbi5mcm9tX3J1bm5lcl9hcGkoZ2V0YXR0cihwcm90by5vcl9maW5hbGx5LCAnZmluYWxseScpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCkpCgogIGRlZiB0b19ydW5uZXJfYXBpKHNlbGYsIGNvbnRleHQpOgogICAgcmV0dXJuIGJlYW1fcnVubmVyX2FwaV9wYjIuVHJpZ2dlcigKICAgICAgICBvcl9maW5hbGx5PWJlYW1fcnVubmVyX2FwaV9wYjIuVHJpZ2dlci5PckZpbmFsbHkoCiAgICAgICAgICAgIG1haW49c2VsZi50cmlnZ2Vyc1swXS50b19ydW5uZXJfYXBpKGNvbnRleHQpLAogICAgICAgICAgICAjIGRpY3Qga2V5d29yZCBhcmd1bWVudCBpcyB1c2VkIGFzIGZpbmFsbHkgaXMgYSBrZXl3b3JkIGluIFB5dGhvbgogICAgICAgICAgICAqKnsnZmluYWxseSc6IHNlbGYudHJpZ2dlcnNbMV0udG9fcnVubmVyX2FwaShjb250ZXh0KX0pKQoKCmNsYXNzIFRyaWdnZXJDb250ZXh0KG9iamVjdCk6CgogIGRlZiBfX2luaXRfXyhzZWxmLCBvdXRlciwgd2luZG93LCBjbG9jayk6CiAgICBzZWxmLl9vdXRlciA9IG91dGVyCiAgICBzZWxmLl93aW5kb3cgPSB3aW5kb3cKICAgIHNlbGYuX2Nsb2NrID0gY2xvY2sKCiAgZGVmIGdldF9jdXJyZW50X3RpbWUoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fY2xvY2sudGltZSgpCgogIGRlZiBzZXRfdGltZXIoc2VsZiwgbmFtZSwgdGltZV9kb21haW4sIHRpbWVzdGFtcCk6CiAgICBzZWxmLl9vdXRlci5zZXRfdGltZXIoc2VsZi5fd2luZG93LCBuYW1lLCB0aW1lX2RvbWFpbiwgdGltZXN0YW1wKQoKICBkZWYgY2xlYXJfdGltZXIoc2VsZiwgbmFtZSwgdGltZV9kb21haW4pOgogICAgc2VsZi5fb3V0ZXIuY2xlYXJfdGltZXIoc2VsZi5fd2luZG93LCBuYW1lLCB0aW1lX2RvbWFpbikKCiAgZGVmIGFkZF9zdGF0ZShzZWxmLCB0YWcsIHZhbHVlKToKICAgIHNlbGYuX291dGVyLmFkZF9zdGF0ZShzZWxmLl93aW5kb3csIHRhZywgdmFsdWUpCgogIGRlZiBnZXRfc3RhdGUoc2VsZiwgdGFnKToKICAgIHJldHVybiBzZWxmLl9vdXRlci5nZXRfc3RhdGUoc2VsZi5fd2luZG93LCB0YWcpCgogIGRlZiBjbGVhcl9zdGF0ZShzZWxmLCB0YWcpOgogICAgcmV0dXJuIHNlbGYuX291dGVyLmNsZWFyX3N0YXRlKHNlbGYuX3dpbmRvdywgdGFnKQoKCmNsYXNzIE5lc3RlZENvbnRleHQob2JqZWN0KToKICAiIiJOYW1lc3BhY2VkIGNvbnRleHQgdXNlZnVsIGZvciBkZWZpbmluZyBjb21wb3NpdGUgdHJpZ2dlcnMuIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBvdXRlciwgcHJlZml4KToKICAgIHNlbGYuX291dGVyID0gb3V0ZXIKICAgIHNlbGYuX3ByZWZpeCA9IHByZWZpeAoKICBkZWYgZ2V0X2N1cnJlbnRfdGltZShzZWxmKToKICAgIHJldHVybiBzZWxmLl9vdXRlci5nZXRfY3VycmVudF90aW1lKCkKCiAgZGVmIHNldF90aW1lcihzZWxmLCBuYW1lLCB0aW1lX2RvbWFpbiwgdGltZXN0YW1wKToKICAgIHNlbGYuX291dGVyLnNldF90aW1lcihzZWxmLl9wcmVmaXggKyBuYW1lLCB0aW1lX2RvbWFpbiwgdGltZXN0YW1wKQoKICBkZWYgY2xlYXJfdGltZXIoc2VsZiwgbmFtZSwgdGltZV9kb21haW4pOgogICAgc2VsZi5fb3V0ZXIuY2xlYXJfdGltZXIoc2VsZi5fcHJlZml4ICsgbmFtZSwgdGltZV9kb21haW4pCgogIGRlZiBhZGRfc3RhdGUoc2VsZiwgdGFnLCB2YWx1ZSk6CiAgICBzZWxmLl9vdXRlci5hZGRfc3RhdGUodGFnLndpdGhfcHJlZml4KHNlbGYuX3ByZWZpeCksIHZhbHVlKQoKICBkZWYgZ2V0X3N0YXRlKHNlbGYsIHRhZyk6CiAgICByZXR1cm4gc2VsZi5fb3V0ZXIuZ2V0X3N0YXRlKHRhZy53aXRoX3ByZWZpeChzZWxmLl9wcmVmaXgpKQoKICBkZWYgY2xlYXJfc3RhdGUoc2VsZiwgdGFnKToKICAgIHNlbGYuX291dGVyLmNsZWFyX3N0YXRlKHRhZy53aXRoX3ByZWZpeChzZWxmLl9wcmVmaXgpKQoKCiMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1hcmd1bWVudApjbGFzcyBTaW1wbGVTdGF0ZSh3aXRoX21ldGFjbGFzcyhBQkNNZXRhLCBvYmplY3QpKToKICAiIiJCYXNpYyBzdGF0ZSBzdG9yYWdlIGludGVyZmFjZSB1c2VkIGZvciB0cmlnZ2VyaW5nLgoKICBPbmx5IHRpbWVycyBtdXN0IGhvbGQgdGhlIHdhdGVybWFyayAoYnkgdGhlaXIgdGltZXN0YW1wKS4KICAiIiIKCiAgQGFic3RyYWN0bWV0aG9kCiAgZGVmIHNldF90aW1lcihzZWxmLCB3aW5kb3csIG5hbWUsIHRpbWVfZG9tYWluLCB0aW1lc3RhbXApOgogICAgcGFzcwoKICBAYWJzdHJhY3RtZXRob2QKICBkZWYgZ2V0X3dpbmRvdyhzZWxmLCB3aW5kb3dfaWQpOgogICAgcGFzcwoKICBAYWJzdHJhY3RtZXRob2QKICBkZWYgY2xlYXJfdGltZXIoc2VsZiwgd2luZG93LCBuYW1lLCB0aW1lX2RvbWFpbik6CiAgICBwYXNzCgogIEBhYnN0cmFjdG1ldGhvZAogIGRlZiBhZGRfc3RhdGUoc2VsZiwgd2luZG93LCB0YWcsIHZhbHVlKToKICAgIHBhc3MKCiAgQGFic3RyYWN0bWV0aG9kCiAgZGVmIGdldF9zdGF0ZShzZWxmLCB3aW5kb3csIHRhZyk6CiAgICBwYXNzCgogIEBhYnN0cmFjdG1ldGhvZAogIGRlZiBjbGVhcl9zdGF0ZShzZWxmLCB3aW5kb3csIHRhZyk6CiAgICBwYXNzCgogIGRlZiBhdChzZWxmLCB3aW5kb3csIGNsb2NrKToKICAgIHJldHVybiBUcmlnZ2VyQ29udGV4dChzZWxmLCB3aW5kb3csIGNsb2NrKQoKCmNsYXNzIFVubWVyZ2VkU3RhdGUoU2ltcGxlU3RhdGUpOgogICIiIlN0YXRlIHN1aXRhYmxlIGZvciB1c2UgaW4gVHJpZ2dlckRyaXZlci4KCiAgVGhpcyBjbGFzcyBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGVhY2ggYmFja2VuZC4KICAiIiIKCiAgQGFic3RyYWN0bWV0aG9kCiAgZGVmIHNldF9nbG9iYWxfc3RhdGUoc2VsZiwgdGFnLCB2YWx1ZSk6CiAgICBwYXNzCgogIEBhYnN0cmFjdG1ldGhvZAogIGRlZiBnZXRfZ2xvYmFsX3N0YXRlKHNlbGYsIHRhZywgZGVmYXVsdD1Ob25lKToKICAgIHBhc3MKIyBweWxpbnQ6IGVuYWJsZT11bnVzZWQtYXJndW1lbnQKCgpjbGFzcyBNZXJnZWFibGVTdGF0ZUFkYXB0ZXIoU2ltcGxlU3RhdGUpOgogICIiIldyYXBzIGFuIFVubWVyZ2VkU3RhdGUsIHRyYWNraW5nIG1lcmdlZCB3aW5kb3dzLiIiIgogICMgVE9ETyhyb2JlcnR3Yik6IEEgc2ltaWxhciBpbmRpcmVjdGlvbiBjb3VsZCBiZSB1c2VkIGZvciBzbGlkaW5nIHdpbmRvd3MKICAjIG9yIG90aGVyIHdpbmRvd19mbnMgd2hlbiBhIHNpbmdsZSBlbGVtZW50IHR5cGljYWxseSBiZWxvbmdzIHRvIG1hbnkgd2luZG93cy4KCiAgV0lORE9XX0lEUyA9IF9WYWx1ZVN0YXRlVGFnKCd3aW5kb3dfaWRzJykKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHJhd19zdGF0ZSk6CiAgICBzZWxmLnJhd19zdGF0ZSA9IHJhd19zdGF0ZQogICAgc2VsZi53aW5kb3dfaWRzID0gc2VsZi5yYXdfc3RhdGUuZ2V0X2dsb2JhbF9zdGF0ZShzZWxmLldJTkRPV19JRFMsIHt9KQogICAgc2VsZi5jb3VudGVyID0gTm9uZQoKICBkZWYgc2V0X3RpbWVyKHNlbGYsIHdpbmRvdywgbmFtZSwgdGltZV9kb21haW4sIHRpbWVzdGFtcCk6CiAgICBzZWxmLnJhd19zdGF0ZS5zZXRfdGltZXIoc2VsZi5fZ2V0X2lkKHdpbmRvdyksIG5hbWUsIHRpbWVfZG9tYWluLCB0aW1lc3RhbXApCgogIGRlZiBjbGVhcl90aW1lcihzZWxmLCB3aW5kb3csIG5hbWUsIHRpbWVfZG9tYWluKToKICAgIGZvciB3aW5kb3dfaWQgaW4gc2VsZi5fZ2V0X2lkcyh3aW5kb3cpOgogICAgICBzZWxmLnJhd19zdGF0ZS5jbGVhcl90aW1lcih3aW5kb3dfaWQsIG5hbWUsIHRpbWVfZG9tYWluKQoKICBkZWYgYWRkX3N0YXRlKHNlbGYsIHdpbmRvdywgdGFnLCB2YWx1ZSk6CiAgICBpZiBpc2luc3RhbmNlKHRhZywgX1ZhbHVlU3RhdGVUYWcpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgJ01lcmdpbmcgcmVxdWVzdGVkIGZvciBub24tbWVyZ2VhYmxlIHN0YXRlIHRhZzogJXIuJyAlIHRhZykKICAgIHNlbGYucmF3X3N0YXRlLmFkZF9zdGF0ZShzZWxmLl9nZXRfaWQod2luZG93KSwgdGFnLCB2YWx1ZSkKCiAgZGVmIGdldF9zdGF0ZShzZWxmLCB3aW5kb3csIHRhZyk6CiAgICB2YWx1ZXMgPSBbc2VsZi5yYXdfc3RhdGUuZ2V0X3N0YXRlKHdpbmRvd19pZCwgdGFnKQogICAgICAgICAgICAgIGZvciB3aW5kb3dfaWQgaW4gc2VsZi5fZ2V0X2lkcyh3aW5kb3cpXQogICAgaWYgaXNpbnN0YW5jZSh0YWcsIF9WYWx1ZVN0YXRlVGFnKToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICdNZXJnaW5nIHJlcXVlc3RlZCBmb3Igbm9uLW1lcmdlYWJsZSBzdGF0ZSB0YWc6ICVyLicgJSB0YWcpCiAgICBlbGlmIGlzaW5zdGFuY2UodGFnLCBfQ29tYmluaW5nVmFsdWVTdGF0ZVRhZyk6CiAgICAgICMgVE9ETyhyb2JlcnR3Yik6IFN0cmlwIGNvbWJpbmVfZm4uZXh0cmFjdF9vdXRwdXQgZnJvbSByYXdfc3RhdGUgdGFnLgogICAgICBpZiBub3QgdmFsdWVzOgogICAgICAgIGFjY3VtdWxhdG9yID0gdGFnLmNvbWJpbmVfZm4uY3JlYXRlX2FjY3VtdWxhdG9yKCkKICAgICAgZWxpZiBsZW4odmFsdWVzKSA9PSAxOgogICAgICAgIGFjY3VtdWxhdG9yID0gdmFsdWVzWzBdCiAgICAgIGVsc2U6CiAgICAgICAgYWNjdW11bGF0b3IgPSB0YWcuY29tYmluZV9mbi5tZXJnZV9hY2N1bXVsYXRvcnModmFsdWVzKQogICAgICAgICMgVE9ETyhyb2JlcnR3Yik6IFN0b3JlIHRoZSBtZXJnZWQgdmFsdWUgaW4gdGhlIGZpcnN0IHRhZy4KICAgICAgcmV0dXJuIHRhZy5jb21iaW5lX2ZuLmV4dHJhY3Rfb3V0cHV0KGFjY3VtdWxhdG9yKQogICAgZWxpZiBpc2luc3RhbmNlKHRhZywgX0xpc3RTdGF0ZVRhZyk6CiAgICAgIHJldHVybiBbdiBmb3IgdnMgaW4gdmFsdWVzIGZvciB2IGluIHZzXQogICAgZWxpZiBpc2luc3RhbmNlKHRhZywgX1dhdGVybWFya0hvbGRTdGF0ZVRhZyk6CiAgICAgIHJldHVybiB0YWcudGltZXN0YW1wX2NvbWJpbmVyX2ltcGwuY29tYmluZV9hbGwodmFsdWVzKQogICAgZWxzZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxpZCB0YWcuJywgdGFnKQoKICBkZWYgY2xlYXJfc3RhdGUoc2VsZiwgd2luZG93LCB0YWcpOgogICAgZm9yIHdpbmRvd19pZCBpbiBzZWxmLl9nZXRfaWRzKHdpbmRvdyk6CiAgICAgIHNlbGYucmF3X3N0YXRlLmNsZWFyX3N0YXRlKHdpbmRvd19pZCwgdGFnKQogICAgaWYgdGFnIGlzIE5vbmU6CiAgICAgIGRlbCBzZWxmLndpbmRvd19pZHNbd2luZG93XQogICAgICBzZWxmLl9wZXJzaXN0X3dpbmRvd19pZHMoKQoKICBkZWYgbWVyZ2Uoc2VsZiwgdG9fYmVfbWVyZ2VkLCBtZXJnZV9yZXN1bHQpOgogICAgZm9yIHdpbmRvdyBpbiB0b19iZV9tZXJnZWQ6CiAgICAgIGlmIHdpbmRvdyAhPSBtZXJnZV9yZXN1bHQ6CiAgICAgICAgaWYgd2luZG93IGluIHNlbGYud2luZG93X2lkczoKICAgICAgICAgIGlmIG1lcmdlX3Jlc3VsdCBpbiBzZWxmLndpbmRvd19pZHM6CiAgICAgICAgICAgIG1lcmdlX3dpbmRvd19pZHMgPSBzZWxmLndpbmRvd19pZHNbbWVyZ2VfcmVzdWx0XQogICAgICAgICAgZWxzZToKICAgICAgICAgICAgbWVyZ2Vfd2luZG93X2lkcyA9IHNlbGYud2luZG93X2lkc1ttZXJnZV9yZXN1bHRdID0gW10KICAgICAgICAgIG1lcmdlX3dpbmRvd19pZHMuZXh0ZW5kKHNlbGYud2luZG93X2lkcy5wb3Aod2luZG93KSkKICAgICAgICAgIHNlbGYuX3BlcnNpc3Rfd2luZG93X2lkcygpCgogIGRlZiBrbm93bl93aW5kb3dzKHNlbGYpOgogICAgcmV0dXJuIGxpc3Qoc2VsZi53aW5kb3dfaWRzKQoKICBkZWYgZ2V0X3dpbmRvdyhzZWxmLCB3aW5kb3dfaWQpOgogICAgZm9yIHdpbmRvdywgaWRzIGluIHNlbGYud2luZG93X2lkcy5pdGVtcygpOgogICAgICBpZiB3aW5kb3dfaWQgaW4gaWRzOgogICAgICAgIHJldHVybiB3aW5kb3cKICAgIHJhaXNlIFZhbHVlRXJyb3IoJ05vIHdpbmRvdyBmb3IgJXMnICUgd2luZG93X2lkKQoKICBkZWYgX2dldF9pZChzZWxmLCB3aW5kb3cpOgogICAgaWYgd2luZG93IGluIHNlbGYud2luZG93X2lkczoKICAgICAgcmV0dXJuIHNlbGYud2luZG93X2lkc1t3aW5kb3ddWzBdCgogICAgd2luZG93X2lkID0gc2VsZi5fZ2V0X25leHRfY291bnRlcigpCiAgICBzZWxmLndpbmRvd19pZHNbd2luZG93XSA9IFt3aW5kb3dfaWRdCiAgICBzZWxmLl9wZXJzaXN0X3dpbmRvd19pZHMoKQogICAgcmV0dXJuIHdpbmRvd19pZAoKICBkZWYgX2dldF9pZHMoc2VsZiwgd2luZG93KToKICAgIHJldHVybiBzZWxmLndpbmRvd19pZHMuZ2V0KHdpbmRvdywgW10pCgogIGRlZiBfZ2V0X25leHRfY291bnRlcihzZWxmKToKICAgIGlmIG5vdCBzZWxmLndpbmRvd19pZHM6CiAgICAgIHNlbGYuY291bnRlciA9IDAKICAgIGVsaWYgc2VsZi5jb3VudGVyIGlzIE5vbmU6CiAgICAgIHNlbGYuY291bnRlciA9IG1heChrIGZvciBpZHMgaW4gc2VsZi53aW5kb3dfaWRzLnZhbHVlcygpIGZvciBrIGluIGlkcykKICAgIHNlbGYuY291bnRlciArPSAxCiAgICByZXR1cm4gc2VsZi5jb3VudGVyCgogIGRlZiBfcGVyc2lzdF93aW5kb3dfaWRzKHNlbGYpOgogICAgc2VsZi5yYXdfc3RhdGUuc2V0X2dsb2JhbF9zdGF0ZShzZWxmLldJTkRPV19JRFMsIHNlbGYud2luZG93X2lkcykKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICdcblx0Jy5qb2luKFtyZXByKHNlbGYud2luZG93X2lkcyldICsKICAgICAgICAgICAgICAgICAgICAgICByZXByKHNlbGYucmF3X3N0YXRlKS5zcGxpdCgnXG4nKSkKCgpkZWYgY3JlYXRlX3RyaWdnZXJfZHJpdmVyKHdpbmRvd2luZywKICAgICAgICAgICAgICAgICAgICAgICAgICBpc19iYXRjaD1GYWxzZSwgcGhhc2VkX2NvbWJpbmVfZm49Tm9uZSwgY2xvY2s9Tm9uZSk6CiAgIiIiQ3JlYXRlIHRoZSBUcmlnZ2VyRHJpdmVyIGZvciB0aGUgZ2l2ZW4gd2luZG93aW5nIGFuZCBvcHRpb25zLiIiIgoKICAjIFRPRE8ocm9iZXJ0d2IpOiBXZSBjYW4gZG8gbW9yZSBpZiB3ZSBrbm93IGVsZW1lbnRzIGFyZSBpbiB0aW1lc3RhbXAKICAjIHNvcnRlZCBvcmRlci4KICBpZiB3aW5kb3dpbmcuaXNfZGVmYXVsdCgpIGFuZCBpc19iYXRjaDoKICAgIGRyaXZlciA9IERpc2NhcmRpbmdHbG9iYWxUcmlnZ2VyRHJpdmVyKCkKICBlbGlmICh3aW5kb3dpbmcud2luZG93Zm4gPT0gR2xvYmFsV2luZG93cygpCiAgICAgICAgYW5kIHdpbmRvd2luZy50cmlnZ2VyZm4gPT0gQWZ0ZXJDb3VudCgxKQogICAgICAgIGFuZCB3aW5kb3dpbmcuYWNjdW11bGF0aW9uX21vZGUgPT0gQWNjdW11bGF0aW9uTW9kZS5ESVNDQVJESU5HKToKICAgICMgSGVyZSB3ZSBhbHNvIGp1c3QgcGFzcyB0aHJvdWdoIGFsbCB0aGUgdmFsdWVzIGV2ZXJ5IHRpbWUuCiAgICBkcml2ZXIgPSBEaXNjYXJkaW5nR2xvYmFsVHJpZ2dlckRyaXZlcigpCiAgZWxzZToKICAgIGRyaXZlciA9IEdlbmVyYWxUcmlnZ2VyRHJpdmVyKHdpbmRvd2luZywgY2xvY2spCgogIGlmIHBoYXNlZF9jb21iaW5lX2ZuOgogICAgIyBUT0RPKGNjeSk6IFJlZmFjdG9yIEdlbmVyYWxUcmlnZ2VyRHJpdmVyIHRvIGNvbWJpbmUgdmFsdWVzIGVhZ2VybHkgdXNpbmcKICAgICMgdGhlIGtub3duIHBoYXNlZF9jb21iaW5lX2ZuIGhlcmUuCiAgICBkcml2ZXIgPSBDb21iaW5pbmdUcmlnZ2VyRHJpdmVyKHBoYXNlZF9jb21iaW5lX2ZuLCBkcml2ZXIpCiAgcmV0dXJuIGRyaXZlcgoKCmNsYXNzIFRyaWdnZXJEcml2ZXIod2l0aF9tZXRhY2xhc3MoQUJDTWV0YSwgb2JqZWN0KSk6CiAgIiIiQnJlYWtzIGEgc2VyaWVzIG9mIGJ1bmRsZSBhbmQgdGltZXIgZmlyaW5ncyBpbnRvIHdpbmRvdyAocGFuZSlzLiIiIgoKICBAYWJzdHJhY3RtZXRob2QKICBkZWYgcHJvY2Vzc19lbGVtZW50cyhzZWxmLCBzdGF0ZSwgd2luZG93ZWRfdmFsdWVzLCBvdXRwdXRfd2F0ZXJtYXJrKToKICAgIHBhc3MKCiAgQGFic3RyYWN0bWV0aG9kCiAgZGVmIHByb2Nlc3NfdGltZXIoc2VsZiwgd2luZG93X2lkLCBuYW1lLCB0aW1lX2RvbWFpbiwgdGltZXN0YW1wLCBzdGF0ZSk6CiAgICBwYXNzCgogIGRlZiBwcm9jZXNzX2VudGlyZV9rZXkoCiAgICAgIHNlbGYsIGtleSwgd2luZG93ZWRfdmFsdWVzLCBvdXRwdXRfd2F0ZXJtYXJrPU1JTl9USU1FU1RBTVApOgogICAgc3RhdGUgPSBJbk1lbW9yeVVubWVyZ2VkU3RhdGUoKQogICAgZm9yIHd2YWx1ZSBpbiBzZWxmLnByb2Nlc3NfZWxlbWVudHMoCiAgICAgICAgc3RhdGUsIHdpbmRvd2VkX3ZhbHVlcywgb3V0cHV0X3dhdGVybWFyayk6CiAgICAgIHlpZWxkIHd2YWx1ZS53aXRoX3ZhbHVlKChrZXksIHd2YWx1ZS52YWx1ZSkpCiAgICB3aGlsZSBzdGF0ZS50aW1lcnM6CiAgICAgIGZpcmVkID0gc3RhdGUuZ2V0X2FuZF9jbGVhcl90aW1lcnMoKQogICAgICBmb3IgdGltZXJfd2luZG93LCAobmFtZSwgdGltZV9kb21haW4sIGZpcmVfdGltZSkgaW4gZmlyZWQ6CiAgICAgICAgZm9yIHd2YWx1ZSBpbiBzZWxmLnByb2Nlc3NfdGltZXIoCiAgICAgICAgICAgIHRpbWVyX3dpbmRvdywgbmFtZSwgdGltZV9kb21haW4sIGZpcmVfdGltZSwgc3RhdGUpOgogICAgICAgICAgeWllbGQgd3ZhbHVlLndpdGhfdmFsdWUoKGtleSwgd3ZhbHVlLnZhbHVlKSkKCgpjbGFzcyBfVW53aW5kb3dlZFZhbHVlcyhvYnNlcnZhYmxlLk9ic2VydmFibGVNaXhpbik6CiAgIiIiRXhwb3NlcyBpdGVyYWJsZSBvZiB3aW5kb3dlZCB2YWx1ZXMgYXMgaXRlcmFibGUgb2YgdW53aW5kb3dlZCB2YWx1ZXMuIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCB3aW5kb3dlZF92YWx1ZXMpOgogICAgc3VwZXIoX1Vud2luZG93ZWRWYWx1ZXMsIHNlbGYpLl9faW5pdF9fKCkKICAgIHNlbGYuX3dpbmRvd2VkX3ZhbHVlcyA9IHdpbmRvd2VkX3ZhbHVlcwoKICBkZWYgX19pdGVyX18oc2VsZik6CiAgICBmb3Igd3YgaW4gc2VsZi5fd2luZG93ZWRfdmFsdWVzOgogICAgICB1bndpbmRvd2VkX3ZhbHVlID0gd3YudmFsdWUKICAgICAgc2VsZi5ub3RpZnlfb2JzZXJ2ZXJzKHVud2luZG93ZWRfdmFsdWUpCiAgICAgIHlpZWxkIHVud2luZG93ZWRfdmFsdWUKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICc8X1Vud2luZG93ZWRWYWx1ZXMgb2YgJXM+JyAlIHNlbGYuX3dpbmRvd2VkX3ZhbHVlcwoKICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKICAgIHJldHVybiBsaXN0LCAobGlzdChzZWxmKSwpCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgaWYgaXNpbnN0YW5jZShvdGhlciwgY29sbGVjdGlvbnMuSXRlcmFibGUpOgogICAgICByZXR1cm4gYWxsKAogICAgICAgICAgYSA9PSBiCiAgICAgICAgICBmb3IgYSwgYiBpbiB6aXBfbG9uZ2VzdChzZWxmLCBvdGhlciwgZmlsbHZhbHVlPW9iamVjdCgpKSkKICAgIGVsc2U6CiAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaCh0dXBsZShzZWxmKSkKCiAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CiAgICAjIFRPRE8oQkVBTS01OTQ5KTogTmVlZGVkIGZvciBQeXRob24gMiBjb21wYXRpYmlsaXR5LgogICAgcmV0dXJuIG5vdCBzZWxmID09IG90aGVyCgoKY2xhc3MgRGlzY2FyZGluZ0dsb2JhbFRyaWdnZXJEcml2ZXIoVHJpZ2dlckRyaXZlcik6CiAgIiIiR3JvdXBzIGFsbCByZWNlaXZlZCB2YWx1ZXMgdG9nZXRoZXIuCiAgIiIiCiAgR0xPQkFMX1dJTkRPV19UVVBMRSA9IChHbG9iYWxXaW5kb3coKSwpCgogIGRlZiBwcm9jZXNzX2VsZW1lbnRzKHNlbGYsIHN0YXRlLCB3aW5kb3dlZF92YWx1ZXMsIHVudXNlZF9vdXRwdXRfd2F0ZXJtYXJrKToKICAgIHlpZWxkIFdpbmRvd2VkVmFsdWUoCiAgICAgICAgX1Vud2luZG93ZWRWYWx1ZXMod2luZG93ZWRfdmFsdWVzKSwKICAgICAgICBNSU5fVElNRVNUQU1QLAogICAgICAgIHNlbGYuR0xPQkFMX1dJTkRPV19UVVBMRSkKCiAgZGVmIHByb2Nlc3NfdGltZXIoc2VsZiwgd2luZG93X2lkLCBuYW1lLCB0aW1lX2RvbWFpbiwgdGltZXN0YW1wLCBzdGF0ZSk6CiAgICByYWlzZSBUeXBlRXJyb3IoJ1RyaWdnZXJzIG5ldmVyIHNldCBvciBjYWxsZWQgZm9yIGJhdGNoIGRlZmF1bHQgd2luZG93aW5nLicpCgoKY2xhc3MgQ29tYmluaW5nVHJpZ2dlckRyaXZlcihUcmlnZ2VyRHJpdmVyKToKICAiIiJVc2VzIGEgcGhhc2VkX2NvbWJpbmVfZm4gdG8gcHJvY2VzcyBvdXRwdXQgb2Ygd3JhcHBlZCBUcmlnZ2VyRHJpdmVyLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgcGhhc2VkX2NvbWJpbmVfZm4sIHVuZGVybHlpbmcpOgogICAgc2VsZi5waGFzZWRfY29tYmluZV9mbiA9IHBoYXNlZF9jb21iaW5lX2ZuCiAgICBzZWxmLnVuZGVybHlpbmcgPSB1bmRlcmx5aW5nCgogIGRlZiBwcm9jZXNzX2VsZW1lbnRzKHNlbGYsIHN0YXRlLCB3aW5kb3dlZF92YWx1ZXMsIG91dHB1dF93YXRlcm1hcmspOgogICAgdW5jb21iaW5lZCA9IHNlbGYudW5kZXJseWluZy5wcm9jZXNzX2VsZW1lbnRzKHN0YXRlLCB3aW5kb3dlZF92YWx1ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3dhdGVybWFyaykKICAgIGZvciBvdXRwdXQgaW4gdW5jb21iaW5lZDoKICAgICAgeWllbGQgb3V0cHV0LndpdGhfdmFsdWUoc2VsZi5waGFzZWRfY29tYmluZV9mbi5hcHBseShvdXRwdXQudmFsdWUpKQoKICBkZWYgcHJvY2Vzc190aW1lcihzZWxmLCB3aW5kb3dfaWQsIG5hbWUsIHRpbWVfZG9tYWluLCB0aW1lc3RhbXAsIHN0YXRlKToKICAgIHVuY29tYmluZWQgPSBzZWxmLnVuZGVybHlpbmcucHJvY2Vzc190aW1lcih3aW5kb3dfaWQsIG5hbWUsIHRpbWVfZG9tYWluLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcCwgc3RhdGUpCiAgICBmb3Igb3V0cHV0IGluIHVuY29tYmluZWQ6CiAgICAgIHlpZWxkIG91dHB1dC53aXRoX3ZhbHVlKHNlbGYucGhhc2VkX2NvbWJpbmVfZm4uYXBwbHkob3V0cHV0LnZhbHVlKSkKCgpjbGFzcyBHZW5lcmFsVHJpZ2dlckRyaXZlcihUcmlnZ2VyRHJpdmVyKToKICAiIiJCcmVha3MgYSBzZXJpZXMgb2YgYnVuZGxlIGFuZCB0aW1lciBmaXJpbmdzIGludG8gd2luZG93IChwYW5lKXMuCgogIFN1aXRhYmxlIGZvciBhbGwgdmFyaWFudHMgb2YgV2luZG93aW5nLgogICIiIgogIEVMRU1FTlRTID0gX0xpc3RTdGF0ZVRhZygnZWxlbWVudHMnKQogIFRPTUJTVE9ORSA9IF9Db21iaW5pbmdWYWx1ZVN0YXRlVGFnKCd0b21ic3RvbmUnLCBjb21iaW5lcnMuQ291bnRDb21iaW5lRm4oKSkKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHdpbmRvd2luZywgY2xvY2spOgogICAgc2VsZi5jbG9jayA9IGNsb2NrCiAgICBzZWxmLndpbmRvd19mbiA9IHdpbmRvd2luZy53aW5kb3dmbgogICAgc2VsZi50aW1lc3RhbXBfY29tYmluZXJfaW1wbCA9IFRpbWVzdGFtcENvbWJpbmVyLmdldF9pbXBsKAogICAgICAgIHdpbmRvd2luZy50aW1lc3RhbXBfY29tYmluZXIsIHNlbGYud2luZG93X2ZuKQogICAgIyBweWxpbnQ6IGRpc2FibGU9aW52YWxpZC1uYW1lCiAgICBzZWxmLldBVEVSTUFSS19IT0xEID0gX1dhdGVybWFya0hvbGRTdGF0ZVRhZygKICAgICAgICAnd2F0ZXJtYXJrJywgc2VsZi50aW1lc3RhbXBfY29tYmluZXJfaW1wbCkKICAgICMgcHlsaW50OiBlbmFibGU9aW52YWxpZC1uYW1lCiAgICBzZWxmLnRyaWdnZXJfZm4gPSB3aW5kb3dpbmcudHJpZ2dlcmZuCiAgICBzZWxmLmFjY3VtdWxhdGlvbl9tb2RlID0gd2luZG93aW5nLmFjY3VtdWxhdGlvbl9tb2RlCiAgICBzZWxmLmlzX21lcmdpbmcgPSBUcnVlCgogIGRlZiBwcm9jZXNzX2VsZW1lbnRzKHNlbGYsIHN0YXRlLCB3aW5kb3dlZF92YWx1ZXMsIG91dHB1dF93YXRlcm1hcmspOgogICAgaWYgc2VsZi5pc19tZXJnaW5nOgogICAgICBzdGF0ZSA9IE1lcmdlYWJsZVN0YXRlQWRhcHRlcihzdGF0ZSkKCiAgICB3aW5kb3dzX3RvX2VsZW1lbnRzID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QobGlzdCkKICAgIGZvciB3diBpbiB3aW5kb3dlZF92YWx1ZXM6CiAgICAgIGZvciB3aW5kb3cgaW4gd3Yud2luZG93czoKICAgICAgICB3aW5kb3dzX3RvX2VsZW1lbnRzW3dpbmRvd10uYXBwZW5kKCh3di52YWx1ZSwgd3YudGltZXN0YW1wKSkKCiAgICAjIEZpcnN0IGhhbmRsZSBtZXJnaW5nLgogICAgaWYgc2VsZi5pc19tZXJnaW5nOgogICAgICBvbGRfd2luZG93cyA9IHNldChzdGF0ZS5rbm93bl93aW5kb3dzKCkpCiAgICAgIGFsbF93aW5kb3dzID0gb2xkX3dpbmRvd3MudW5pb24obGlzdCh3aW5kb3dzX3RvX2VsZW1lbnRzKSkKCiAgICAgIGlmIGFsbF93aW5kb3dzICE9IG9sZF93aW5kb3dzOgogICAgICAgIG1lcmdlZF9hd2F5ID0ge30KCiAgICAgICAgY2xhc3MgVHJpZ2dlck1lcmdlQ29udGV4dChXaW5kb3dGbi5NZXJnZUNvbnRleHQpOgoKICAgICAgICAgIGRlZiBtZXJnZShfLCB0b19iZV9tZXJnZWQsIG1lcmdlX3Jlc3VsdCk6ICAjIHB5bGludDogZGlzYWJsZT1uby1zZWxmLWFyZ3VtZW50CiAgICAgICAgICAgIGZvciB3aW5kb3cgaW4gdG9fYmVfbWVyZ2VkOgogICAgICAgICAgICAgIGlmIHdpbmRvdyAhPSBtZXJnZV9yZXN1bHQ6CiAgICAgICAgICAgICAgICBtZXJnZWRfYXdheVt3aW5kb3ddID0gbWVyZ2VfcmVzdWx0CiAgICAgICAgICAgIHN0YXRlLm1lcmdlKHRvX2JlX21lcmdlZCwgbWVyZ2VfcmVzdWx0KQogICAgICAgICAgICAjIHVzaW5nIHRoZSBvdXRlciBzZWxmIGFyZ3VtZW50LgogICAgICAgICAgICBzZWxmLnRyaWdnZXJfZm4ub25fbWVyZ2UoCiAgICAgICAgICAgICAgICB0b19iZV9tZXJnZWQsIG1lcmdlX3Jlc3VsdCwgc3RhdGUuYXQobWVyZ2VfcmVzdWx0LCBzZWxmLmNsb2NrKSkKCiAgICAgICAgc2VsZi53aW5kb3dfZm4ubWVyZ2UoVHJpZ2dlck1lcmdlQ29udGV4dChhbGxfd2luZG93cykpCgogICAgICAgIG1lcmdlZF93aW5kb3dzX3RvX2VsZW1lbnRzID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QobGlzdCkKICAgICAgICBmb3Igd2luZG93LCB2YWx1ZXMgaW4gd2luZG93c190b19lbGVtZW50cy5pdGVtcygpOgogICAgICAgICAgd2hpbGUgd2luZG93IGluIG1lcmdlZF9hd2F5OgogICAgICAgICAgICB3aW5kb3cgPSBtZXJnZWRfYXdheVt3aW5kb3ddCiAgICAgICAgICBtZXJnZWRfd2luZG93c190b19lbGVtZW50c1t3aW5kb3ddLmV4dGVuZCh2YWx1ZXMpCiAgICAgICAgd2luZG93c190b19lbGVtZW50cyA9IG1lcmdlZF93aW5kb3dzX3RvX2VsZW1lbnRzCgogICAgICAgIGZvciB3aW5kb3cgaW4gbWVyZ2VkX2F3YXk6CiAgICAgICAgICBzdGF0ZS5jbGVhcl9zdGF0ZSh3aW5kb3csIHNlbGYuV0FURVJNQVJLX0hPTEQpCgogICAgIyBOZXh0IGhhbmRsZSBlbGVtZW50IGFkZGluZy4KICAgIGZvciB3aW5kb3csIGVsZW1lbnRzIGluIHdpbmRvd3NfdG9fZWxlbWVudHMuaXRlbXMoKToKICAgICAgaWYgc3RhdGUuZ2V0X3N0YXRlKHdpbmRvdywgc2VsZi5UT01CU1RPTkUpOgogICAgICAgIGNvbnRpbnVlCiAgICAgICMgQWRkIHdhdGVybWFyayBob2xkLgogICAgICAjIFRPRE8oY2N5KTogQWRkIGxhdGUgZGF0YSBhbmQgZ2FyYmFnZS1jb2xsZWN0aW9uIGhvbGQgc3VwcG9ydC4KICAgICAgb3V0cHV0X3RpbWUgPSBzZWxmLnRpbWVzdGFtcF9jb21iaW5lcl9pbXBsLm1lcmdlKAogICAgICAgICAgd2luZG93LAogICAgICAgICAgKGVsZW1lbnRfb3V0cHV0X3RpbWUgZm9yIGVsZW1lbnRfb3V0cHV0X3RpbWUgaW4KICAgICAgICAgICAoc2VsZi50aW1lc3RhbXBfY29tYmluZXJfaW1wbC5hc3NpZ25fb3V0cHV0X3RpbWUod2luZG93LCB0aW1lc3RhbXApCiAgICAgICAgICAgIGZvciB1bnVzZWRfdmFsdWUsIHRpbWVzdGFtcCBpbiBlbGVtZW50cykKICAgICAgICAgICBpZiBlbGVtZW50X291dHB1dF90aW1lID49IG91dHB1dF93YXRlcm1hcmspKQogICAgICBpZiBvdXRwdXRfdGltZSBpcyBub3QgTm9uZToKICAgICAgICBzdGF0ZS5jbGVhcl9zdGF0ZSh3aW5kb3csIHNlbGYuV0FURVJNQVJLX0hPTEQpCiAgICAgICAgc3RhdGUuYWRkX3N0YXRlKHdpbmRvdywgc2VsZi5XQVRFUk1BUktfSE9MRCwgb3V0cHV0X3RpbWUpCgogICAgICBjb250ZXh0ID0gc3RhdGUuYXQod2luZG93LCBzZWxmLmNsb2NrKQogICAgICBmb3IgdmFsdWUsIHVudXNlZF90aW1lc3RhbXAgaW4gZWxlbWVudHM6CiAgICAgICAgc3RhdGUuYWRkX3N0YXRlKHdpbmRvdywgc2VsZi5FTEVNRU5UUywgdmFsdWUpCiAgICAgICAgc2VsZi50cmlnZ2VyX2ZuLm9uX2VsZW1lbnQodmFsdWUsIHdpbmRvdywgY29udGV4dCkKCiAgICAgICMgTWF5YmUgZmlyZSB0aGlzIHdpbmRvdy4KICAgICAgd2F0ZXJtYXJrID0gTUlOX1RJTUVTVEFNUAogICAgICBpZiBzZWxmLnRyaWdnZXJfZm4uc2hvdWxkX2ZpcmUoVGltZURvbWFpbi5XQVRFUk1BUkssIHdhdGVybWFyaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdywgY29udGV4dCk6CiAgICAgICAgZmluaXNoZWQgPSBzZWxmLnRyaWdnZXJfZm4ub25fZmlyZSh3YXRlcm1hcmssIHdpbmRvdywgY29udGV4dCkKICAgICAgICB5aWVsZCBzZWxmLl9vdXRwdXQod2luZG93LCBmaW5pc2hlZCwgc3RhdGUpCgogIGRlZiBwcm9jZXNzX3RpbWVyKHNlbGYsIHdpbmRvd19pZCwgdW51c2VkX25hbWUsIHRpbWVfZG9tYWluLCB0aW1lc3RhbXAsCiAgICAgICAgICAgICAgICAgICAgc3RhdGUpOgogICAgaWYgc2VsZi5pc19tZXJnaW5nOgogICAgICBzdGF0ZSA9IE1lcmdlYWJsZVN0YXRlQWRhcHRlcihzdGF0ZSkKICAgIHdpbmRvdyA9IHN0YXRlLmdldF93aW5kb3cod2luZG93X2lkKQogICAgaWYgc3RhdGUuZ2V0X3N0YXRlKHdpbmRvdywgc2VsZi5UT01CU1RPTkUpOgogICAgICByZXR1cm4KCiAgICBpZiB0aW1lX2RvbWFpbiBpbiAoVGltZURvbWFpbi5XQVRFUk1BUkssIFRpbWVEb21haW4uUkVBTF9USU1FKToKICAgICAgaWYgbm90IHNlbGYuaXNfbWVyZ2luZyBvciB3aW5kb3cgaW4gc3RhdGUua25vd25fd2luZG93cygpOgogICAgICAgIGNvbnRleHQgPSBzdGF0ZS5hdCh3aW5kb3csIHNlbGYuY2xvY2spCiAgICAgICAgaWYgc2VsZi50cmlnZ2VyX2ZuLnNob3VsZF9maXJlKHRpbWVfZG9tYWluLCB0aW1lc3RhbXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdywgY29udGV4dCk6CiAgICAgICAgICBmaW5pc2hlZCA9IHNlbGYudHJpZ2dlcl9mbi5vbl9maXJlKHRpbWVzdGFtcCwgd2luZG93LCBjb250ZXh0KQogICAgICAgICAgeWllbGQgc2VsZi5fb3V0cHV0KHdpbmRvdywgZmluaXNoZWQsIHN0YXRlKQogICAgZWxzZToKICAgICAgcmFpc2UgRXhjZXB0aW9uKCdVbmV4cGVjdGVkIHRpbWUgZG9tYWluOiAlcycgJSB0aW1lX2RvbWFpbikKCiAgZGVmIF9vdXRwdXQoc2VsZiwgd2luZG93LCBmaW5pc2hlZCwgc3RhdGUpOgogICAgIiIiT3V0cHV0IHdpbmRvdyBhbmQgY2xlYW4gdXAgaWYgYXBwcm9wcmlhdGUuIiIiCgogICAgdmFsdWVzID0gc3RhdGUuZ2V0X3N0YXRlKHdpbmRvdywgc2VsZi5FTEVNRU5UUykKICAgIGlmIGZpbmlzaGVkOgogICAgICAjIFRPRE8ocm9iZXJ0d2IpOiBhbGxvd2VkIGxhdGVuZXNzCiAgICAgIHN0YXRlLmNsZWFyX3N0YXRlKHdpbmRvdywgc2VsZi5FTEVNRU5UUykKICAgICAgc3RhdGUuYWRkX3N0YXRlKHdpbmRvdywgc2VsZi5UT01CU1RPTkUsIDEpCiAgICBlbGlmIHNlbGYuYWNjdW11bGF0aW9uX21vZGUgPT0gQWNjdW11bGF0aW9uTW9kZS5ESVNDQVJESU5HOgogICAgICBzdGF0ZS5jbGVhcl9zdGF0ZSh3aW5kb3csIHNlbGYuRUxFTUVOVFMpCgogICAgdGltZXN0YW1wID0gc3RhdGUuZ2V0X3N0YXRlKHdpbmRvdywgc2VsZi5XQVRFUk1BUktfSE9MRCkKICAgIGlmIHRpbWVzdGFtcCBpcyBOb25lOgogICAgICAjIElmIG5vIHdhdGVybWFyayBob2xkIHdhcyBzZXQsIG91dHB1dCBhdCBlbmQgb2Ygd2luZG93LgogICAgICB0aW1lc3RhbXAgPSB3aW5kb3cuZW5kCiAgICBlbHNlOgogICAgICBzdGF0ZS5jbGVhcl9zdGF0ZSh3aW5kb3csIHNlbGYuV0FURVJNQVJLX0hPTEQpCgogICAgcmV0dXJuIFdpbmRvd2VkVmFsdWUodmFsdWVzLCB0aW1lc3RhbXAsICh3aW5kb3csKSkKCgpjbGFzcyBJbk1lbW9yeVVubWVyZ2VkU3RhdGUoVW5tZXJnZWRTdGF0ZSk6CiAgIiIiSW4tbWVtb3J5IGltcGxlbWVudGF0aW9uIG9mIFVubWVyZ2VkU3RhdGUuCgogIFVzZWQgZm9yIGJhdGNoIGFuZCB0ZXN0aW5nLgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBkZWZlbnNpdmVfY29weT1UcnVlKToKICAgICMgVE9ETyhyb2JlcnR3Yik6IFNraXAgZGVmZW5zaXZlX2NvcHkgaW4gcHJvZHVjdGlvbiBpZiBpdCdzIHRvbyBleHBlbnNpdmUuCiAgICBzZWxmLnRpbWVycyA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGRpY3QpCiAgICBzZWxmLnN0YXRlID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QobGFtYmRhOiBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdChsaXN0KSkKICAgIHNlbGYuZ2xvYmFsX3N0YXRlID0ge30KICAgIHNlbGYuZGVmZW5zaXZlX2NvcHkgPSBkZWZlbnNpdmVfY29weQoKICBkZWYgY29weShzZWxmKToKICAgIGNsb25lZF9vYmplY3QgPSBJbk1lbW9yeVVubWVyZ2VkU3RhdGUoZGVmZW5zaXZlX2NvcHk9c2VsZi5kZWZlbnNpdmVfY29weSkKICAgIGNsb25lZF9vYmplY3QudGltZXJzID0gY29weS5kZWVwY29weShzZWxmLnRpbWVycykKICAgIGNsb25lZF9vYmplY3QuZ2xvYmFsX3N0YXRlID0gY29weS5kZWVwY29weShzZWxmLmdsb2JhbF9zdGF0ZSkKICAgIGZvciB3aW5kb3cgaW4gc2VsZi5zdGF0ZToKICAgICAgZm9yIHRhZyBpbiBzZWxmLnN0YXRlW3dpbmRvd106CiAgICAgICAgY2xvbmVkX29iamVjdC5zdGF0ZVt3aW5kb3ddW3RhZ10gPSBjb3B5LmNvcHkoc2VsZi5zdGF0ZVt3aW5kb3ddW3RhZ10pCiAgICByZXR1cm4gY2xvbmVkX29iamVjdAoKICBkZWYgc2V0X2dsb2JhbF9zdGF0ZShzZWxmLCB0YWcsIHZhbHVlKToKICAgIGFzc2VydCBpc2luc3RhbmNlKHRhZywgX1ZhbHVlU3RhdGVUYWcpCiAgICBpZiBzZWxmLmRlZmVuc2l2ZV9jb3B5OgogICAgICB2YWx1ZSA9IGNvcHkuZGVlcGNvcHkodmFsdWUpCiAgICBzZWxmLmdsb2JhbF9zdGF0ZVt0YWcudGFnXSA9IHZhbHVlCgogIGRlZiBnZXRfZ2xvYmFsX3N0YXRlKHNlbGYsIHRhZywgZGVmYXVsdD1Ob25lKToKICAgIHJldHVybiBzZWxmLmdsb2JhbF9zdGF0ZS5nZXQodGFnLnRhZywgZGVmYXVsdCkKCiAgZGVmIHNldF90aW1lcihzZWxmLCB3aW5kb3csIG5hbWUsIHRpbWVfZG9tYWluLCB0aW1lc3RhbXApOgogICAgc2VsZi50aW1lcnNbd2luZG93XVsobmFtZSwgdGltZV9kb21haW4pXSA9IHRpbWVzdGFtcAoKICBkZWYgY2xlYXJfdGltZXIoc2VsZiwgd2luZG93LCBuYW1lLCB0aW1lX2RvbWFpbik6CiAgICBzZWxmLnRpbWVyc1t3aW5kb3ddLnBvcCgobmFtZSwgdGltZV9kb21haW4pLCBOb25lKQogICAgaWYgbm90IHNlbGYudGltZXJzW3dpbmRvd106CiAgICAgIGRlbCBzZWxmLnRpbWVyc1t3aW5kb3ddCgogIGRlZiBnZXRfd2luZG93KHNlbGYsIHdpbmRvd19pZCk6CiAgICByZXR1cm4gd2luZG93X2lkCgogIGRlZiBhZGRfc3RhdGUoc2VsZiwgd2luZG93LCB0YWcsIHZhbHVlKToKICAgIGlmIHNlbGYuZGVmZW5zaXZlX2NvcHk6CiAgICAgIHZhbHVlID0gY29weS5kZWVwY29weSh2YWx1ZSkKICAgIGlmIGlzaW5zdGFuY2UodGFnLCBfVmFsdWVTdGF0ZVRhZyk6CiAgICAgIHNlbGYuc3RhdGVbd2luZG93XVt0YWcudGFnXSA9IHZhbHVlCiAgICBlbGlmIGlzaW5zdGFuY2UodGFnLCBfQ29tYmluaW5nVmFsdWVTdGF0ZVRhZyk6CiAgICAgIHNlbGYuc3RhdGVbd2luZG93XVt0YWcudGFnXS5hcHBlbmQodmFsdWUpCiAgICBlbGlmIGlzaW5zdGFuY2UodGFnLCBfTGlzdFN0YXRlVGFnKToKICAgICAgc2VsZi5zdGF0ZVt3aW5kb3ddW3RhZy50YWddLmFwcGVuZCh2YWx1ZSkKICAgIGVsaWYgaXNpbnN0YW5jZSh0YWcsIF9XYXRlcm1hcmtIb2xkU3RhdGVUYWcpOgogICAgICBzZWxmLnN0YXRlW3dpbmRvd11bdGFnLnRhZ10uYXBwZW5kKHZhbHVlKQogICAgZWxzZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxpZCB0YWcuJywgdGFnKQoKICBkZWYgZ2V0X3N0YXRlKHNlbGYsIHdpbmRvdywgdGFnKToKICAgIHZhbHVlcyA9IHNlbGYuc3RhdGVbd2luZG93XVt0YWcudGFnXQogICAgaWYgaXNpbnN0YW5jZSh0YWcsIF9WYWx1ZVN0YXRlVGFnKToKICAgICAgcmV0dXJuIHZhbHVlcwogICAgZWxpZiBpc2luc3RhbmNlKHRhZywgX0NvbWJpbmluZ1ZhbHVlU3RhdGVUYWcpOgogICAgICByZXR1cm4gdGFnLmNvbWJpbmVfZm4uYXBwbHkodmFsdWVzKQogICAgZWxpZiBpc2luc3RhbmNlKHRhZywgX0xpc3RTdGF0ZVRhZyk6CiAgICAgIHJldHVybiB2YWx1ZXMKICAgIGVsaWYgaXNpbnN0YW5jZSh0YWcsIF9XYXRlcm1hcmtIb2xkU3RhdGVUYWcpOgogICAgICByZXR1cm4gdGFnLnRpbWVzdGFtcF9jb21iaW5lcl9pbXBsLmNvbWJpbmVfYWxsKHZhbHVlcykKICAgIGVsc2U6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgdGFnLicsIHRhZykKCiAgZGVmIGNsZWFyX3N0YXRlKHNlbGYsIHdpbmRvdywgdGFnKToKICAgIHNlbGYuc3RhdGVbd2luZG93XS5wb3AodGFnLnRhZywgTm9uZSkKICAgIGlmIG5vdCBzZWxmLnN0YXRlW3dpbmRvd106CiAgICAgIHNlbGYuc3RhdGUucG9wKHdpbmRvdywgTm9uZSkKCiAgZGVmIGdldF90aW1lcnMoc2VsZiwgY2xlYXI9RmFsc2UsIHdhdGVybWFyaz1NQVhfVElNRVNUQU1QLAogICAgICAgICAgICAgICAgIHByb2Nlc3NpbmdfdGltZT1Ob25lKToKICAgICIiIkdldHMgZXhwaXJlZCB0aW1lcnMgYW5kIHJlcG9ydHMgaWYgdGhlcmUKICAgIGFyZSBhbnkgcmVhbHRpbWUgdGltZXJzIHNldCBwZXIgc3RhdGUuCgogICAgRXhwaXJhdGlvbiBpcyBtZWFzdXJlZCBhZ2FpbnN0IHRoZSB3YXRlcm1hcmsgZm9yIGV2ZW50LXRpbWUgdGltZXJzLAogICAgYW5kIGFnYWluc3QgYSB3YWxsIGNsb2NrIGZvciBwcm9jZXNzaW5nLXRpbWUgdGltZXJzLgogICAgIiIiCiAgICBleHBpcmVkID0gW10KICAgIGhhc19yZWFsdGltZV90aW1lciA9IEZhbHNlCiAgICBmb3Igd2luZG93LCB0aW1lcnMgaW4gbGlzdChzZWxmLnRpbWVycy5pdGVtcygpKToKICAgICAgZm9yIChuYW1lLCB0aW1lX2RvbWFpbiksIHRpbWVzdGFtcCBpbiBsaXN0KHRpbWVycy5pdGVtcygpKToKICAgICAgICBpZiB0aW1lX2RvbWFpbiA9PSBUaW1lRG9tYWluLlJFQUxfVElNRToKICAgICAgICAgIHRpbWVfbWFya2VyID0gcHJvY2Vzc2luZ190aW1lCiAgICAgICAgICBoYXNfcmVhbHRpbWVfdGltZXIgPSBUcnVlCiAgICAgICAgZWxpZiB0aW1lX2RvbWFpbiA9PSBUaW1lRG9tYWluLldBVEVSTUFSSzoKICAgICAgICAgIHRpbWVfbWFya2VyID0gd2F0ZXJtYXJrCiAgICAgICAgZWxzZToKICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoCiAgICAgICAgICAgICAgJ1RpbWVEb21haW4gZXJyb3I6IE5vIHRpbWVycyBkZWZpbmVkIGZvciB0aW1lIGRvbWFpbiAlcy4nLAogICAgICAgICAgICAgIHRpbWVfZG9tYWluKQogICAgICAgIGlmIHRpbWVzdGFtcCA8PSB0aW1lX21hcmtlcjoKICAgICAgICAgIGV4cGlyZWQuYXBwZW5kKCh3aW5kb3csIChuYW1lLCB0aW1lX2RvbWFpbiwgdGltZXN0YW1wKSkpCiAgICAgICAgICBpZiBjbGVhcjoKICAgICAgICAgICAgZGVsIHRpbWVyc1sobmFtZSwgdGltZV9kb21haW4pXQogICAgICBpZiBub3QgdGltZXJzIGFuZCBjbGVhcjoKICAgICAgICBkZWwgc2VsZi50aW1lcnNbd2luZG93XQogICAgcmV0dXJuIGV4cGlyZWQsIGhhc19yZWFsdGltZV90aW1lcgoKICBkZWYgZ2V0X2FuZF9jbGVhcl90aW1lcnMoc2VsZiwgd2F0ZXJtYXJrPU1BWF9USU1FU1RBTVApOgogICAgcmV0dXJuIHNlbGYuZ2V0X3RpbWVycyhjbGVhcj1UcnVlLCB3YXRlcm1hcms9d2F0ZXJtYXJrKVswXQoKICBkZWYgZ2V0X2VhcmxpZXN0X2hvbGQoc2VsZik6CiAgICBlYXJsaWVzdF9ob2xkID0gTUFYX1RJTUVTVEFNUAogICAgZm9yIHVudXNlZF93aW5kb3csIHRhZ2dlZF9zdGF0ZXMgaW4gaXRlcml0ZW1zKHNlbGYuc3RhdGUpOgogICAgICAjIFRPRE8oQkVBTS0yNTE5KTogY3VycmVudGx5LCB0aGlzIGFzc3VtZXMgdGhhdCB0aGUgd2F0ZXJtYXJrIGhvbGQgdGFnIGlzCiAgICAgICMgbmFtZWQgIndhdGVybWFyayIuICBUaGlzIGlzIGN1cnJlbnRseSBvbmx5IHRydWUgYmVjYXVzZSB0aGUgb25seSBwbGFjZQogICAgICAjIHdhdGVybWFyayBob2xkcyBhcmUgc2V0IGlzIGluIHRoZSBHZW5lcmFsVHJpZ2dlckRyaXZlciwgd2hlcmUgd2UgdXNlCiAgICAgICMgdGhpcyBuYW1lLiAgV2Ugc2hvdWxkIGZpeCB0aGlzIGJ5IGFsbG93aW5nIGVudW1lcmF0aW9uIG9mIHRoZSB0YWcgdHlwZXMKICAgICAgIyB1c2VkIGluIGFkZGluZyBzdGF0ZS4KICAgICAgaWYgJ3dhdGVybWFyaycgaW4gdGFnZ2VkX3N0YXRlcyBhbmQgdGFnZ2VkX3N0YXRlc1snd2F0ZXJtYXJrJ106CiAgICAgICAgaG9sZCA9IG1pbih0YWdnZWRfc3RhdGVzWyd3YXRlcm1hcmsnXSkgLSBUSU1FX0dSQU5VTEFSSVRZCiAgICAgICAgZWFybGllc3RfaG9sZCA9IG1pbihlYXJsaWVzdF9ob2xkLCBob2xkKQogICAgcmV0dXJuIGVhcmxpZXN0X2hvbGQKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgc3RhdGVfc3RyID0gJ1xuJy5qb2luKCclczogJXMnICUgKGtleSwgZGljdChzdGF0ZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGtleSwgc3RhdGUgaW4gc2VsZi5zdGF0ZS5pdGVtcygpKQogICAgcmV0dXJuICd0aW1lcnM6ICVzXG5zdGF0ZTogJXMnICUgKGRpY3Qoc2VsZi50aW1lcnMpLCBzdGF0ZV9zdHIpCn1yGoMAAChYEgAAAEFmdGVyRWFjaC5fX2luaXRfX1gDAAAAZGVmTXcCTXkCh1gXAAAARGVmYXVsdFRyaWdnZXIub25fbWVyZ2VYAwAAAGRlZkv9TQIBh1gkAAAAQ29tYmluaW5nVHJpZ2dlckRyaXZlci5wcm9jZXNzX3RpbWVyWAMAAABkZWZNCARNDQSHWBsAAABfUGFyYWxsZWxUcmlnZ2VyRm4uX19pbml0X19YAwAAAGRlZk0WAk0YAodYFQAAAFNpbXBsZVN0YXRlLmFkZF9zdGF0ZVgDAAAAZGVmTRIDTRUDh1gVAAAAY3JlYXRlX3RyaWdnZXJfZHJpdmVyWAMAAABkZWZNmQNNrgOHWBMAAABSZXBlYXRlZGx5Ll9faGFzaF9fWAMAAABkZWZN9QFN9wGHWBYAAABBZnRlcldhdGVybWFyay5pc19sYXRlWAMAAABkZWZNYgFNZAGHWCAAAABfQ29tYmluaW5nVmFsdWVTdGF0ZVRhZy5fX3JlcHJfX1gDAAAAZGVmS29LcYdYFwAAAFRyaWdnZXJGbi50b19ydW5uZXJfYXBpWAMAAABkZWZL6Evrh1ghAAAATWVyZ2VhYmxlU3RhdGVBZGFwdGVyLmNsZWFyX3RpbWVyWAMAAABkZWZNQQNNRAOHWBoAAABfVW53aW5kb3dlZFZhbHVlcy5fX2l0ZXJfX1gDAAAAZGVmTdADTdUDh1geAAAASW5NZW1vcnlVbm1lcmdlZFN0YXRlLl9fcmVwcl9fWAMAAABkZWZNBQVNCQWHWCMAAABBZnRlclByb2Nlc3NpbmdUaW1lLmZyb21fcnVubmVyX2FwaVgDAAAAZGVmTTkBTUEBh1gVAAAARGVmYXVsdFRyaWdnZXIuX19lcV9fWAMAAABkZWZNDAFNDgGHWCEAAABBZnRlclByb2Nlc3NpbmdUaW1lLnRvX3J1bm5lcl9hcGlYAwAAAGRlZk1CAU1JAYdYDwAAAFRyaWdnZXJGbi5yZXNldFgDAAAAZGVmS9FL1YdYDQAAAF9MaXN0U3RhdGVUYWdYBQAAAGNsYXNzS3ZLfYdYFwAAAE5lc3RlZENvbnRleHQuYWRkX3N0YXRlWAMAAABkZWZN9QJN9wKHWCIAAABHZW5lcmFsVHJpZ2dlckRyaXZlci5wcm9jZXNzX3RpbWVyWAMAAABkZWZNaARNeQSHWBkAAABPckZpbmFsbHkuZnJvbV9ydW5uZXJfYXBpWAMAAABkZWZNuwJNwgKHWBcAAABBZnRlcldhdGVybWFyay5fX3JlcHJfX1gDAAAAZGVmTVoBTWEBh1gKAAAAQWZ0ZXJDb3VudFgFAAAAY2xhc3NNuQFN5wGHWB8AAABNZXJnZWFibGVTdGF0ZUFkYXB0ZXIuYWRkX3N0YXRlWAMAAABkZWZNRQNNSgOHWB4AAABNZXJnZWFibGVTdGF0ZUFkYXB0ZXIuX19yZXByX19YAwAAAGRlZk2UA02XA4dYEgAAAEFmdGVyRWFjaC5vbl9tZXJnZVgDAAAAZGVmTYoCTZICh1gjAAAATWVyZ2VhYmxlU3RhdGVBZGFwdGVyLmtub3duX3dpbmRvd3NYAwAAAGRlZk10A012A4dYIwAAAF9Db21iaW5pbmdWYWx1ZVN0YXRlVGFnLndpdGhfcHJlZml4WAMAAABkZWZLckt0h1geAAAAVW5tZXJnZWRTdGF0ZS5zZXRfZ2xvYmFsX3N0YXRlWAMAAABkZWZNKANNKwOHWCIAAABfV2F0ZXJtYXJrSG9sZFN0YXRlVGFnLndpdGhfcHJlZml4WAMAAABkZWZLiUuMh1gaAAAAQWZ0ZXJXYXRlcm1hcmsuc2hvdWxkX2ZpcmVYAwAAAGRlZk18AU2GAYdYGQAAAEFmdGVyUHJvY2Vzc2luZ1RpbWUucmVzZXRYAwAAAGRlZk02AU04AYdYEQAAAFJlcGVhdGVkbHkuX19lcV9fWAMAAABkZWZN8gFN9AGHWA4AAABBZnRlcldhdGVybWFya1gFAAAAY2xhc3NNSwFNtwGHWBoAAABfVmFsdWVTdGF0ZVRhZy53aXRoX3ByZWZpeFgDAAAAZGVmS19LYYdYGQAAAERlZmF1bHRUcmlnZ2VyLm9uX2VsZW1lbnRYAwAAAGRlZkv6S/yHWCcAAABDb21iaW5pbmdUcmlnZ2VyRHJpdmVyLnByb2Nlc3NfZWxlbWVudHNYAwAAAGRlZk0CBE0HBIdYFgAAAF9MaXN0U3RhdGVUYWcuX19yZXByX19YAwAAAGRlZkt4S3qHWCEAAABJbk1lbW9yeVVubWVyZ2VkU3RhdGUuY2xlYXJfc3RhdGVYAwAAAGRlZk3TBE3XBIdYEwAAAEFmdGVyQ291bnQuX19oYXNoX19YAwAAAGRlZk3MAU3OAYdYHAAAAEFmdGVyUHJvY2Vzc2luZ1RpbWUuX19yZXByX19YAwAAAGRlZk0kAU0mAYdYIAAAAFRyaWdnZXJEcml2ZXIucHJvY2Vzc19lbnRpcmVfa2V5WAMAAABkZWZNuwNNxwOHWBIAAABUcmlnZ2VyRm4ub25fbWVyZ2VYAwAAAGRlZkuiS62HWB4AAABOZXN0ZWRDb250ZXh0LmdldF9jdXJyZW50X3RpbWVYAwAAAGRlZk3sAk3uAodYDQAAAFRyaWdnZXJEcml2ZXJYBQAAAGNsYXNzTbADTccDh1gXAAAAX1ZhbHVlU3RhdGVUYWcuX19yZXByX19YAwAAAGRlZktcS16HWAkAAABPckZpbmFsbHlYBQAAAGNsYXNzTbkCTckCh1gbAAAAX1BhcmFsbGVsVHJpZ2dlckZuLm9uX21lcmdlWAMAAABkZWZNKwJNLwKHWB0AAABfUGFyYWxsZWxUcmlnZ2VyRm4ub25fZWxlbWVudFgDAAAAZGVmTScCTSoCh1gUAAAARGVmYXVsdFRyaWdnZXIucmVzZXRYAwAAAGRlZk0JAU0LAYdYCQAAAFRyaWdnZXJGblgFAAAAY2xhc3NLkEvvh1gfAAAAX1dhdGVybWFya0hvbGRTdGF0ZVRhZy5fX2luaXRfX1gDAAAAZGVmS4FLhIdYFAAAAEFmdGVyRWFjaC5vbl9lbGVtZW50WAMAAABkZWZNhAJNiQKHWCYAAABJbk1lbW9yeVVubWVyZ2VkU3RhdGUuc2V0X2dsb2JhbF9zdGF0ZVgDAAAAZGVmTaQETakEh1gXAAAARGVmYXVsdFRyaWdnZXIuX19yZXByX19YAwAAAGRlZkv3S/mHWBwAAABBZnRlcldhdGVybWFyay50b19ydW5uZXJfYXBpWAMAAABkZWZNrgFNtwGHWB4AAABNZXJnZWFibGVTdGF0ZUFkYXB0ZXIuX19pbml0X19YAwAAAGRlZk05A009A4dYEwAAAEFmdGVyQ291bnQuX19pbml0X19YAwAAAGRlZk3BAU3FAYdYGgAAAEluTWVtb3J5VW5tZXJnZWRTdGF0ZS5jb3B5WAMAAABkZWZNmwRNowSHWBEAAABfVW53aW5kb3dlZFZhbHVlc1gFAAAAY2xhc3NNyQNN6gOHWBcAAABBZnRlckVhY2gudG9fcnVubmVyX2FwaVgDAAAAZGVmTbECTbcCh1gbAAAAX1BhcmFsbGVsVHJpZ2dlckZuLl9faGFzaF9fWAMAAABkZWZNIAJNIgKHWB8AAABDb21iaW5pbmdUcmlnZ2VyRHJpdmVyLl9faW5pdF9fWAMAAABkZWZN/gNNAQSHWB4AAABBZnRlclByb2Nlc3NpbmdUaW1lLm9uX2VsZW1lbnRYAwAAAGRlZk0nAU0qAYdYKQAAAE1lcmdlYWJsZVN0YXRlQWRhcHRlci5fcGVyc2lzdF93aW5kb3dfaWRzWAMAAABkZWZNkQNNkwOHWBoAAABfVW53aW5kb3dlZFZhbHVlcy5fX2luaXRfX1gDAAAAZGVmTcwDTc8Dh1gXAAAATmVzdGVkQ29udGV4dC5zZXRfdGltZXJYAwAAAGRlZk3vAk3xAodYEgAAAF9TdGF0ZVRhZy5fX2luaXRfX1gDAAAAZGVmS1VLV4dYHwAAAEFmdGVyUHJvY2Vzc2luZ1RpbWUuc2hvdWxkX2ZpcmVYAwAAAGRlZk0vAU0yAYdYFwAAAEFmdGVyV2F0ZXJtYXJrLl9faW5pdF9fWAMAAABkZWZNVgFNWQGHWB8AAABJbk1lbW9yeVVubWVyZ2VkU3RhdGUuYWRkX3N0YXRlWAMAAABkZWZNuARNxQSHWBYAAABDb21iaW5pbmdUcmlnZ2VyRHJpdmVyWAUAAABjbGFzc037A00NBIdYIAAAAF9Db21iaW5pbmdWYWx1ZVN0YXRlVGFnLl9faW5pdF9fWAMAAABkZWZLZ0tuh1gOAAAARGVmYXVsdFRyaWdnZXJYBQAAAGNsYXNzS/FNGQGHWBYAAABfV2F0ZXJtYXJrSG9sZFN0YXRlVGFnWAUAAABjbGFzc0t/S4yHWBgAAABUcmlnZ2VyQ29udGV4dC5hZGRfc3RhdGVYAwAAAGRlZk3bAk3dAodYFQAAAFJlcGVhdGVkbHkub25fZWxlbWVudFgDAAAAZGVmTfgBTfoBh1gqAAAASW5NZW1vcnlVbm1lcmdlZFN0YXRlLmdldF9hbmRfY2xlYXJfdGltZXJzWAMAAABkZWZN9QRN9wSHWBoAAABfUGFyYWxsZWxUcmlnZ2VyRm4ub25fZmlyZVgDAAAAZGVmTTcCTT8Ch1gUAAAAQWZ0ZXJXYXRlcm1hcmsucmVzZXRYAwAAAGRlZk2SAU2ZAYdYLgAAAERpc2NhcmRpbmdHbG9iYWxUcmlnZ2VyRHJpdmVyLnByb2Nlc3NfZWxlbWVudHNYAwAAAGRlZk3xA032A4dYCAAAAEFmdGVyQWxsWAUAAABjbGFzc01qAk1wAodYFAAAAFRyaWdnZXJGbi5vbl9lbGVtZW50WAMAAABkZWZLlkuhh1gRAAAAQWZ0ZXJFYWNoLm9uX2ZpcmVYAwAAAGRlZk2ZAk2hAodYDwAAAEFmdGVyRWFjaC5yZXNldFgDAAAAZGVmTaICTaYCh1gQAAAAQWNjdW11bGF0aW9uTW9kZVgFAAAAY2xhc3NLREtJh1gWAAAAQWZ0ZXJXYXRlcm1hcmsub25fZmlyZVgDAAAAZGVmTYcBTZEBh1gNAAAAVW5tZXJnZWRTdGF0ZVgFAAAAY2xhc3NNIgNNLwOHWCsAAABEaXNjYXJkaW5nR2xvYmFsVHJpZ2dlckRyaXZlci5wcm9jZXNzX3RpbWVyWAMAAABkZWZN9wNN+QOHWBUAAABNZXJnZWFibGVTdGF0ZUFkYXB0ZXJYBQAAAGNsYXNzTTIDTZcDh1gaAAAAQWZ0ZXJDb3VudC5mcm9tX3J1bm5lcl9hcGlYAwAAAGRlZk3fAU3iAYdYCQAAAF9TdGF0ZVRhZ1gFAAAAY2xhc3NLTUtXh1geAAAAVHJpZ2dlckRyaXZlci5wcm9jZXNzX2VsZW1lbnRzWAMAAABkZWZNswNNtgOHWBsAAABfUGFyYWxsZWxUcmlnZ2VyRm4uX19yZXByX19YAwAAAGRlZk0ZAk0cAodYEwAAAEFmdGVyQ291bnQub25fbWVyZ2VYAwAAAGRlZk3SAU3VAYdYEAAAAFRyaWdnZXJGbi5fX25lX19YAwAAAGRlZkvsS++HWBUAAABJbk1lbW9yeVVubWVyZ2VkU3RhdGVYBQAAAGNsYXNzTY8ETQkFh1gfAAAATWVyZ2VhYmxlU3RhdGVBZGFwdGVyLmdldF9zdGF0ZVgDAAAAZGVmTUsDTWEDh1gaAAAAX1Vud2luZG93ZWRWYWx1ZXMuX19oYXNoX19YAwAAAGRlZk3kA03mA4dYDgAAAF9WYWx1ZVN0YXRlVGFnWAUAAABjbGFzc0tZS2GHWBMAAABBZnRlclByb2Nlc3NpbmdUaW1lWAUAAABjbGFzc00bAU1JAYdYJgAAAEluTWVtb3J5VW5tZXJnZWRTdGF0ZS5nZXRfZ2xvYmFsX3N0YXRlWAMAAABkZWZNqgRNrASHWBgAAABBZnRlckNvdW50LnRvX3J1bm5lcl9hcGlYAwAAAGRlZk3jAU3nAYdYFwAAAFNpbXBsZVN0YXRlLmNsZWFyX3N0YXRlWAMAAABkZWZNGgNNHQOHWB4AAABNZXJnZWFibGVTdGF0ZUFkYXB0ZXIuX2dldF9pZHNYAwAAAGRlZk2GA02IA4dYFwAAAERlZmF1bHRUcmlnZ2VyLl9faGFzaF9fWAMAAABkZWZNDwFNEQGHWBwAAABfVW53aW5kb3dlZFZhbHVlcy5fX3JlZHVjZV9fWAMAAABkZWZN2QNN2wOHWA4AAABUcmlnZ2VyQ29udGV4dFgFAAAAY2xhc3NNywJN4wKHWBgAAABfVW53aW5kb3dlZFZhbHVlcy5fX25lX19YAwAAAGRlZk3nA03qA4dYHgAAAEFmdGVyV2F0ZXJtYXJrLmZyb21fcnVubmVyX2FwaVgDAAAAZGVmTaIBTa0Bh1gWAAAARGVmYXVsdFRyaWdnZXIub25fZmlyZVgDAAAAZGVmTQYBTQgBh1gRAAAAQWZ0ZXJDb3VudC5fX2VxX19YAwAAAGRlZk3JAU3LAYdYGQAAAE5lc3RlZENvbnRleHQuY2xlYXJfdGltZXJYAwAAAGRlZk3yAk30AodYHQAAAF9QYXJhbGxlbFRyaWdnZXJGbi5jb21iaW5lX29wWAMAAABkZWZNIwJNJgKHWBMAAABSZXBlYXRlZGx5Ll9fcmVwcl9fWAMAAABkZWZN7wFN8QGHWCcAAABNZXJnZWFibGVTdGF0ZUFkYXB0ZXIuX2dldF9uZXh0X2NvdW50ZXJYAwAAAGRlZk2JA02QA4dYHAAAAEdlbmVyYWxUcmlnZ2VyRHJpdmVyLl9vdXRwdXRYAwAAAGRlZk16BE2NBIdYFwAAAFRyaWdnZXJDb250ZXh0Ll9faW5pdF9fWAMAAABkZWZNzQJN0QKHWBUAAABTaW1wbGVTdGF0ZS5zZXRfdGltZXJYAwAAAGRlZk0GA00JA4dYEgAAAEFmdGVyRWFjaC5fX3JlcHJfX1gDAAAAZGVmTXoCTX0Ch1gQAAAAQWZ0ZXJFYWNoLl9fZXFfX1gDAAAAZGVmTX4CTYACh1gIAAAAQWZ0ZXJBbnlYBQAAAGNsYXNzTWICTWgCh1gVAAAAVHJpZ2dlckZuLnNob3VsZF9maXJlWAMAAABkZWZLrkvBh1gTAAAAQWZ0ZXJDb3VudC5fX3JlcHJfX1gDAAAAZGVmTcYBTcgBh1gZAAAAQWZ0ZXJXYXRlcm1hcmsub25fZWxlbWVudFgDAAAAZGVmTWUBTWwBh1gaAAAAX1Vud2luZG93ZWRWYWx1ZXMuX19yZXByX19YAwAAAGRlZk3WA03YA4dYHQAAAE1lcmdlYWJsZVN0YXRlQWRhcHRlci5fZ2V0X2lkWAMAAABkZWZNfQNNhQOHWA0AAABOZXN0ZWRDb250ZXh0WAUAAABjbGFzc03lAk39AodYGQAAAEFmdGVyRWFjaC5mcm9tX3J1bm5lcl9hcGlYAwAAAGRlZk2rAk2wAodYHAAAAEFmdGVyUHJvY2Vzc2luZ1RpbWUuX19pbml0X19YAwAAAGRlZk0hAU0jAYdYFwAAAF9Db21iaW5pbmdWYWx1ZVN0YXRlVGFnWAUAAABjbGFzc0tjS3SHWB0AAABHZW5lcmFsVHJpZ2dlckRyaXZlci5fX2luaXRfX1gDAAAAZGVmTRcETSMEh1gVAAAAU2ltcGxlU3RhdGUuZ2V0X3N0YXRlWAMAAABkZWZNFgNNGQOHWAsAAABTaW1wbGVTdGF0ZVgFAAAAY2xhc3NNAANNIAOHWBYAAABTaW1wbGVTdGF0ZS5nZXRfd2luZG93WAMAAABkZWZNCgNNDQOHWBcAAABBZnRlcldhdGVybWFyay5vbl9tZXJnZVgDAAAAZGVmTW0BTXsBh1gYAAAAUmVwZWF0ZWRseS50b19ydW5uZXJfYXBpWAMAAABkZWZNDgJNEgKHWBMAAABSZXBlYXRlZGx5Lm9uX21lcmdlWAMAAABkZWZN+wFN/QGHWBgAAABfUGFyYWxsZWxUcmlnZ2VyRm4ucmVzZXRYAwAAAGRlZk1AAk1DAodYHgAAAEluTWVtb3J5VW5tZXJnZWRTdGF0ZS5fX2luaXRfX1gDAAAAZGVmTZQETZoEh1ggAAAASW5NZW1vcnlVbm1lcmdlZFN0YXRlLmdldF90aW1lcnNYAwAAAGRlZk3YBE30BIdYEwAAAFJlcGVhdGVkbHkuX19pbml0X19YAwAAAGRlZk3sAU3uAYdYOQAAAEdlbmVyYWxUcmlnZ2VyRHJpdmVyLnByb2Nlc3NfZWxlbWVudHMuVHJpZ2dlck1lcmdlQ29udGV4dFgFAAAAY2xhc3NNNQRNPwSHWCIAAABfUGFyYWxsZWxUcmlnZ2VyRm4uZnJvbV9ydW5uZXJfYXBpWAMAAABkZWZNSAJNUgKHWCcAAABJbk1lbW9yeVVubWVyZ2VkU3RhdGUuZ2V0X2VhcmxpZXN0X2hvbGRYAwAAAGRlZk34BE0EBYdYIAAAAF9QYXJhbGxlbFRyaWdnZXJGbi50b19ydW5uZXJfYXBpWAMAAABkZWZNUwJNYAKHWCUAAABHZW5lcmFsVHJpZ2dlckRyaXZlci5wcm9jZXNzX2VsZW1lbnRzWAMAAABkZWZNJARNZwSHWBwAAABBZnRlclByb2Nlc3NpbmdUaW1lLm9uX21lcmdlWAMAAABkZWZNKwFNLgGHWCAAAABNZXJnZWFibGVTdGF0ZUFkYXB0ZXIuZ2V0X3dpbmRvd1gDAAAAZGVmTXcDTXwDh1gXAAAARGVmYXVsdFRyaWdnZXIuX19pbml0X19YAwAAAGRlZkv0S/aHWBIAAABBZnRlckVhY2guX19oYXNoX19YAwAAAGRlZk2BAk2DAodYGgAAAERlZmF1bHRUcmlnZ2VyLnNob3VsZF9maXJlWAMAAABkZWZNAwFNBQGHWBQAAABHZW5lcmFsVHJpZ2dlckRyaXZlclgFAAAAY2xhc3NNDwRNjQSHWBcAAABBZnRlcldhdGVybWFyay5fX2hhc2hfX1gDAAAAZGVmTZ8BTaEBh1gZAAAAX0xpc3RTdGF0ZVRhZy53aXRoX3ByZWZpeFgDAAAAZGVmS3tLfYdYDgAAAFNpbXBsZVN0YXRlLmF0WAMAAABkZWZNHgNNIAOHWBgAAABUcmlnZ2VyQ29udGV4dC5nZXRfc3RhdGVYAwAAAGRlZk3eAk3gAodYHwAAAFRyaWdnZXJDb250ZXh0LmdldF9jdXJyZW50X3RpbWVYAwAAAGRlZk3SAk3UAodYHwAAAF9QYXJhbGxlbFRyaWdnZXJGbi5fc3ViX2NvbnRleHRYAwAAAGRlZk1EAk1HAodYIQAAAEluTWVtb3J5VW5tZXJnZWRTdGF0ZS5jbGVhcl90aW1lclgDAAAAZGVmTbAETbQEh1gaAAAAVHJpZ2dlckNvbnRleHQuY2xlYXJfdGltZXJYAwAAAGRlZk3YAk3aAodYPwAAAEdlbmVyYWxUcmlnZ2VyRHJpdmVyLnByb2Nlc3NfZWxlbWVudHMuVHJpZ2dlck1lcmdlQ29udGV4dC5tZXJnZVgDAAAAZGVmTTcETT8Eh1gRAAAAVHJpZ2dlckZuLm9uX2ZpcmVYAwAAAGRlZkvCS9CHWBUAAABBZnRlcldhdGVybWFyay5fX2VxX19YAwAAAGRlZk2aAU2eAYdYGAAAAFRyaWdnZXJDb250ZXh0LnNldF90aW1lclgDAAAAZGVmTdUCTdcCh1gWAAAAUmVwZWF0ZWRseS5zaG91bGRfZmlyZVgDAAAAZGVmTf4BTQACh1gZAAAAVHJpZ2dlckZuLmZyb21fcnVubmVyX2FwaVgDAAAAZGVmS9dL54dYFgAAAEFmdGVyQ291bnQuc2hvdWxkX2ZpcmVYAwAAAGRlZk3WAU3YAYdYCQAAAEFmdGVyRWFjaFgFAAAAY2xhc3NNcgJNtwKHWB4AAABVbm1lcmdlZFN0YXRlLmdldF9nbG9iYWxfc3RhdGVYAwAAAGRlZk0sA00vA4dYIAAAAEluTWVtb3J5VW5tZXJnZWRTdGF0ZS5nZXRfd2luZG93WAMAAABkZWZNtQRNtwSHWBUAAABBZnRlckNvdW50Lm9uX2VsZW1lbnRYAwAAAGRlZk3PAU3RAYdYHQAAAERpc2NhcmRpbmdHbG9iYWxUcmlnZ2VyRHJpdmVyWAUAAABjbGFzc03sA035A4dYEgAAAF9QYXJhbGxlbFRyaWdnZXJGblgFAAAAY2xhc3NNFAJNYAKHWAoAAABSZXBlYXRlZGx5WAUAAABjbGFzc03pAU0SAodYHAAAAERlZmF1bHRUcmlnZ2VyLnRvX3J1bm5lcl9hcGlYAwAAAGRlZk0WAU0ZAYdYFwAAAE5lc3RlZENvbnRleHQuZ2V0X3N0YXRlWAMAAABkZWZN+AJN+gKHWBcAAABTaW1wbGVTdGF0ZS5jbGVhcl90aW1lclgDAAAAZGVmTQ4DTREDh1gbAAAAVHJpZ2dlckRyaXZlci5wcm9jZXNzX3RpbWVyWAMAAABkZWZNtwNNugOHWBkAAABfUGFyYWxsZWxUcmlnZ2VyRm4uX19lcV9fWAMAAABkZWZNHQJNHwKHWBAAAABSZXBlYXRlZGx5LnJlc2V0WAMAAABkZWZNBgJNCAKHWB8AAABJbk1lbW9yeVVubWVyZ2VkU3RhdGUuZ2V0X3N0YXRlWAMAAABkZWZNxgRN0gSHWB8AAABfV2F0ZXJtYXJrSG9sZFN0YXRlVGFnLl9fcmVwcl9fWAMAAABkZWZLhUuIh1gaAAAAUmVwZWF0ZWRseS5mcm9tX3J1bm5lcl9hcGlYAwAAAGRlZk0JAk0NAodYGgAAAFRyaWdnZXJDb250ZXh0LmNsZWFyX3N0YXRlWAMAAABkZWZN4QJN4wKHWBIAAABBZnRlckNvdW50Lm9uX2ZpcmVYAwAAAGRlZk3ZAU3bAYdYHgAAAERlZmF1bHRUcmlnZ2VyLmZyb21fcnVubmVyX2FwaVgDAAAAZGVmTRIBTRUBh1gSAAAAUmVwZWF0ZWRseS5vbl9maXJlWAMAAABkZWZNAQJNBQKHWBAAAABBZnRlckNvdW50LnJlc2V0WAMAAABkZWZN3AFN3gGHWBsAAABNZXJnZWFibGVTdGF0ZUFkYXB0ZXIubWVyZ2VYAwAAAGRlZk1pA01zA4dYIQAAAE1lcmdlYWJsZVN0YXRlQWRhcHRlci5jbGVhcl9zdGF0ZVgDAAAAZGVmTWIDTWgDh1gfAAAATWVyZ2VhYmxlU3RhdGVBZGFwdGVyLnNldF90aW1lclgDAAAAZGVmTT4DTUADh1gYAAAAX1Vud2luZG93ZWRWYWx1ZXMuX19lcV9fWAMAAABkZWZN3ANN4wOHWB4AAABfUGFyYWxsZWxUcmlnZ2VyRm4uc2hvdWxkX2ZpcmVYAwAAAGRlZk0wAk02AodYFgAAAEFmdGVyRWFjaC5fc3ViX2NvbnRleHRYAwAAAGRlZk2nAk2qAodYGwAAAEFmdGVyUHJvY2Vzc2luZ1RpbWUub25fZmlyZVgDAAAAZGVmTTMBTTUBh1gVAAAAQWZ0ZXJFYWNoLnNob3VsZF9maXJlWAMAAABkZWZNkwJNmAKHWBkAAABOZXN0ZWRDb250ZXh0LmNsZWFyX3N0YXRlWAMAAABkZWZN+wJN/QKHWBYAAABOZXN0ZWRDb250ZXh0Ll9faW5pdF9fWAMAAABkZWZN6AJN6wKHWBcAAABPckZpbmFsbHkudG9fcnVubmVyX2FwaVgDAAAAZGVmTcMCTckCh1gfAAAASW5NZW1vcnlVbm1lcmdlZFN0YXRlLnNldF90aW1lclgDAAAAZGVmTa0ETa8Eh3V9chuDAAAoWBoAAABEZWZhdWx0VHJpZ2dlci5zaG91bGRfZmlyZWrRWwAAWBcAAABEZWZhdWx0VHJpZ2dlci5vbl9tZXJnZWrRWwAAWAkAAABPckZpbmFsbHlq0VsAAFgcAAAAQWZ0ZXJXYXRlcm1hcmsudG9fcnVubmVyX2FwaWrRWwAAWBMAAABBZnRlclByb2Nlc3NpbmdUaW1latFbAABYFAAAAERlZmF1bHRUcmlnZ2VyLnJlc2V0atFbAABYCQAAAFRyaWdnZXJGbmrRWwAAWB4AAABEZWZhdWx0VHJpZ2dlci5mcm9tX3J1bm5lcl9hcGlq0VsAAFgRAAAAVHJpZ2dlckZuLm9uX2ZpcmVq0VsAAFgXAAAAQWZ0ZXJFYWNoLnRvX3J1bm5lcl9hcGlq0VsAAFgVAAAAVHJpZ2dlckZuLnNob3VsZF9maXJlatFbAABYGgAAAFJlcGVhdGVkbHkuZnJvbV9ydW5uZXJfYXBpatFbAABYFwAAAFRyaWdnZXJGbi50b19ydW5uZXJfYXBpatFbAABYFgAAAFJlcGVhdGVkbHkuc2hvdWxkX2ZpcmVq0VsAAFgZAAAAVHJpZ2dlckZuLmZyb21fcnVubmVyX2FwaWrRWwAAWCMAAABBZnRlclByb2Nlc3NpbmdUaW1lLmZyb21fcnVubmVyX2FwaWrRWwAAWB4AAABBZnRlcldhdGVybWFyay5mcm9tX3J1bm5lcl9hcGlq0VsAAFgJAAAAQWZ0ZXJFYWNoatFbAABYFQAAAEFmdGVyQ291bnQub25fZWxlbWVudGrRWwAAWB8AAABBZnRlclByb2Nlc3NpbmdUaW1lLnNob3VsZF9maXJlatFbAABYIQAAAEFmdGVyUHJvY2Vzc2luZ1RpbWUudG9fcnVubmVyX2FwaWrRWwAAWA8AAABUcmlnZ2VyRm4ucmVzZXRq0VsAAFgZAAAAQWZ0ZXJXYXRlcm1hcmsub25fZWxlbWVudGrRWwAAWBAAAABBZnRlckNvdW50LnJlc2V0atFbAABYFgAAAEFmdGVyQ291bnQuc2hvdWxkX2ZpcmVq0VsAAFgKAAAAUmVwZWF0ZWRseWrRWwAAWBwAAABEZWZhdWx0VHJpZ2dlci50b19ydW5uZXJfYXBpatFbAABYFAAAAEFmdGVyRWFjaC5vbl9lbGVtZW50atFbAABYCAAAAEFmdGVyQW55atFbAABYGQAAAE9yRmluYWxseS5mcm9tX3J1bm5lcl9hcGlq0VsAAFgWAAAAQWZ0ZXJXYXRlcm1hcmsuaXNfbGF0ZWrRWwAAWA4AAABEZWZhdWx0VHJpZ2dlcmrRWwAAWBAAAABSZXBlYXRlZGx5LnJlc2V0atFbAABYCgAAAEFmdGVyQ291bnRq0VsAAFgUAAAAQWZ0ZXJXYXRlcm1hcmsucmVzZXRq0VsAAFgZAAAAQWZ0ZXJFYWNoLmZyb21fcnVubmVyX2FwaWrRWwAAWBoAAABBZnRlcldhdGVybWFyay5zaG91bGRfZmlyZWrRWwAAWBUAAABSZXBlYXRlZGx5Lm9uX2VsZW1lbnRq0VsAAFgQAAAAQWNjdW11bGF0aW9uTW9kZWrRWwAAWBgAAABBZnRlckNvdW50LnRvX3J1bm5lcl9hcGlq0VsAAFgSAAAAQWZ0ZXJFYWNoLm9uX21lcmdlatFbAABYGQAAAEFmdGVyUHJvY2Vzc2luZ1RpbWUucmVzZXRq0VsAAFgWAAAARGVmYXVsdFRyaWdnZXIub25fZmlyZWrRWwAAWBIAAABBZnRlckNvdW50Lm9uX2ZpcmVq0VsAAFgIAAAAQWZ0ZXJBbGxq0VsAAFgUAAAAVHJpZ2dlckZuLm9uX2VsZW1lbnRq0VsAAFgXAAAAQWZ0ZXJXYXRlcm1hcmsub25fbWVyZ2Vq0VsAAFgPAAAAQWZ0ZXJFYWNoLnJlc2V0atFbAABYGAAAAFJlcGVhdGVkbHkudG9fcnVubmVyX2FwaWrRWwAAWBYAAABBZnRlcldhdGVybWFyay5vbl9maXJlatFbAABYDgAAAEFmdGVyV2F0ZXJtYXJratFbAABYEgAAAFJlcGVhdGVkbHkub25fZmlyZWrRWwAAWBMAAABSZXBlYXRlZGx5Lm9uX21lcmdlatFbAABYEwAAAEFmdGVyQ291bnQub25fbWVyZ2Vq0VsAAFgaAAAAQWZ0ZXJDb3VudC5mcm9tX3J1bm5lcl9hcGlq0VsAAFgZAAAARGVmYXVsdFRyaWdnZXIub25fZWxlbWVudGrRWwAAWB4AAABBZnRlclByb2Nlc3NpbmdUaW1lLm9uX2VsZW1lbnRq0VsAAFgRAAAAQWZ0ZXJFYWNoLm9uX2ZpcmVq0VsAAFgbAAAAQWZ0ZXJQcm9jZXNzaW5nVGltZS5vbl9maXJlatFbAABYFQAAAEFmdGVyRWFjaC5zaG91bGRfZmlyZWrRWwAAWBIAAABUcmlnZ2VyRm4ub25fbWVyZ2Vq0VsAAFgcAAAAQWZ0ZXJQcm9jZXNzaW5nVGltZS5vbl9tZXJnZWrRWwAAWBcAAABPckZpbmFsbHkudG9fcnVubmVyX2FwaWrRWwAAdWp9aQAAWB4AAABhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXJyHIMAAIWBch2DAAB9ch6DAABidHIfgwAAVS1hcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC50ZXN0X2RpcmVjdF9ydW5uZXIoWKwIAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIldyYXBwZXIgb2YgQmVhbSBydW5uZXJzIHRoYXQncyBidWlsdCBmb3IgcnVubmluZyBhbmQgdmVyaWZ5aW5nIGUyZSB0ZXN0cy4iIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CmZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KCmZyb20gYXBhY2hlX2JlYW0uaW50ZXJuYWwgaW1wb3J0IHBpY2tsZXIKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IFN0YW5kYXJkT3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgVGVzdE9wdGlvbnMKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfcnVubmVyIGltcG9ydCBEaXJlY3RSdW5uZXIKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lciBpbXBvcnQgUGlwZWxpbmVTdGF0ZQoKX19hbGxfXyA9IFsnVGVzdERpcmVjdFJ1bm5lciddCgoKY2xhc3MgVGVzdERpcmVjdFJ1bm5lcihEaXJlY3RSdW5uZXIpOgogIGRlZiBydW5fcGlwZWxpbmUoc2VsZiwgcGlwZWxpbmUsIG9wdGlvbnMpOgogICAgIiIiRXhlY3V0ZSB0ZXN0IHBpcGVsaW5lIGFuZCB2ZXJpZnkgdGVzdCBtYXRjaGVyIiIiCiAgICB0ZXN0X29wdGlvbnMgPSBvcHRpb25zLnZpZXdfYXMoVGVzdE9wdGlvbnMpCiAgICBvbl9zdWNjZXNzX21hdGNoZXIgPSB0ZXN0X29wdGlvbnMub25fc3VjY2Vzc19tYXRjaGVyCiAgICBpc19zdHJlYW1pbmcgPSBvcHRpb25zLnZpZXdfYXMoU3RhbmRhcmRPcHRpb25zKS5zdHJlYW1pbmcKCiAgICAjIFtCRUFNLTE4ODldIERvIG5vdCBzZW5kIHRoaXMgdG8gcmVtb3RlIHdvcmtlcnMgYWxzbywgdGhlcmUgaXMgbm8gbmVlZCB0bwogICAgIyBzZW5kIHRoaXMgb3B0aW9uIHRvIHJlbW90ZSBleGVjdXRvcnMuCiAgICB0ZXN0X29wdGlvbnMub25fc3VjY2Vzc19tYXRjaGVyID0gTm9uZQoKICAgIHNlbGYucmVzdWx0ID0gc3VwZXIoVGVzdERpcmVjdFJ1bm5lciwgc2VsZikucnVuX3BpcGVsaW5lKHBpcGVsaW5lLCBvcHRpb25zKQoKICAgIHRyeToKICAgICAgaWYgbm90IGlzX3N0cmVhbWluZzoKICAgICAgICBzZWxmLnJlc3VsdC53YWl0X3VudGlsX2ZpbmlzaCgpCgogICAgICBpZiBvbl9zdWNjZXNzX21hdGNoZXI6CiAgICAgICAgZnJvbSBoYW1jcmVzdCBpbXBvcnQgYXNzZXJ0X3RoYXQgYXMgaGNfYXNzZXJ0X3RoYXQKICAgICAgICBoY19hc3NlcnRfdGhhdChzZWxmLnJlc3VsdCwgcGlja2xlci5sb2Fkcyhvbl9zdWNjZXNzX21hdGNoZXIpKQogICAgZmluYWxseToKICAgICAgaWYgbm90IFBpcGVsaW5lU3RhdGUuaXNfdGVybWluYWwoc2VsZi5yZXN1bHQuc3RhdGUpOgogICAgICAgIHNlbGYucmVzdWx0LmNhbmNlbCgpCiAgICAgICAgc2VsZi5yZXN1bHQud2FpdF91bnRpbF9maW5pc2goKQoKICAgIHJldHVybiBzZWxmLnJlc3VsdAp9ciCDAAAoWB0AAABUZXN0RGlyZWN0UnVubmVyLnJ1bl9waXBlbGluZVgDAAAAZGVmSyFLOodYEAAAAFRlc3REaXJlY3RSdW5uZXJYBQAAAGNsYXNzSyBLOod1fXIhgwAAKFgdAAAAVGVzdERpcmVjdFJ1bm5lci5ydW5fcGlwZWxpbmVq5lsAAFgQAAAAVGVzdERpcmVjdFJ1bm5lcmrmWwAAdWp9aQAAWC0AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC50ZXN0X2RpcmVjdF9ydW5uZXJyIoMAAIWBciODAAB9ciSDAABidFUgYXBhY2hlX2JlYW0uaW8uc291cmNlX3Rlc3RfdXRpbHMoWLdmAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkhlbHBlciBmdW5jdGlvbnMgYW5kIHRlc3QgaGFybmVzc2VzIGZvciBzb3VyY2UgaW1wbGVtZW50YXRpb25zLgoKVGhpcyBtb2R1bGUgY29udGFpbnMgaGVscGVyIGZ1bmN0aW9ucyBhbmQgdGVzdCBoYXJuZXNzZXMgZm9yIGNoZWNraW5nCmNvcnJlY3RuZXNzIG9mIHNvdXJjZSAoYSBzdWJjbGFzcyBvZiBgYGlvYmFzZS5Cb3VuZGVkU291cmNlYGApIGFuZCByYW5nZQp0cmFja2VyIChhIHN1YmNsYXNzIG9mYGBpb2Jhc2UuUmFuZ2VUcmFja2VyYGApIGltcGxlbWVudGF0aW9ucy4KCkNvbnRhaW5zIGEgZmV3IGxpZ2h0d2VpZ2h0IHV0aWxpdGllcyAoZS5nLiByZWFkaW5nIGl0ZW1zIGZyb20gYSBzb3VyY2Ugc3VjaCBhcwpgYHJlYWRGcm9tU291cmNlKClgYCwgYXMgd2VsbCBhcyBoZWF2eXdlaWdodCBwcm9wZXJ0eSB0ZXN0aW5nIGFuZCBzdHJlc3MKdGVzdGluZyBoYXJuZXNzZXMgdGhhdCBoZWxwIGdldHRpbmcgYSBsYXJnZSBhbW91bnQgb2YgdGVzdCBjb3ZlcmFnZSB3aXRoIGZldwpjb2RlLgoKTW9zdCBub3RhYmxlIG9uZXMgYXJlOgoqIGBgYXNzZXJ0U291cmNlc0VxdWFsUmVmZXJlbmNlU291cmNlKClgYCBoZWxwcyB0ZXN0aW5nIHRoYXQgdGhlIGRhdGEgcmVhZCBieQp0aGUgdW5pb24gb2Ygc291cmNlcyBwcm9kdWNlZCBieSBgYEJvdW5kZWRTb3VyY2Uuc3BsaXQoKWBgIGlzIHRoZSBzYW1lIGFzIGRhdGEKcmVhZCBieSB0aGUgb3JpZ2luYWwgc291cmNlLgoqIElmIHlvdXIgc291cmNlIGltcGxlbWVudHMgZHluYW1pYyB3b3JrIHJlYmFsYW5jaW5nLCB1c2UgdGhlCmBgYXNzZXJ0U3BsaXRBdEZyYWN0aW9uKClgYCBmYW1pbHkgb2YgZnVuY3Rpb25zIC0gdGhleSB0ZXN0IGJlaGF2aW9yIG9mCmBgUmFuZ2VUcmFja2VyLnRyeV9zcGxpdCgpYGAsIGluIHBhcnRpY3VsYXIsIHRoYXQgdmFyaW91cyBjb25zaXN0ZW5jeQpwcm9wZXJ0aWVzIGFyZSByZXNwZWN0ZWQgYW5kIHRoZSB0b3RhbCBzZXQgb2YgZGF0YSByZWFkIGJ5IHRoZSBzb3VyY2UgaXMKcHJlc2VydmVkIHdoZW4gc3BsaXRzIGhhcHBlbi4gVXNlIGBgYXNzZXJ0U3BsaXRBdEZyYWN0aW9uQmVoYXZpb3IoKWBgIHRvIHRlc3QKaW5kaXZpZHVhbCBjYXNlcyBvZiBgYFJhbmdlVHJhY2tlci50cnlfc3BsaXQoKWBgIGFuZCB1c2UKYGBhc3NlcnRTcGxpdEF0RnJhY3Rpb25FeGhhdXN0aXZlKClgYCBhcyBhIGhlYXZ5LXdlaWdodCBzdHJlc3MgdGVzdCBpbmNsdWRpbmcKY29uY3VycmVuY3kuIFdlIHN0cm9uZ2x5IHJlY29tbWVuZCB0byB1c2UgYm90aC4KCkZvciBleGFtcGxlIHVzYWdlcywgc2VlIHRoZSB1bml0IHRlc3RzIG9mIG1vZHVsZXMgc3VjaCBhcwogKiBhcGFjaGVfYmVhbS5pby5zb3VyY2VfdGVzdF91dGlsc190ZXN0LnB5CiAqIGFwYWNoZV9iZWFtLmlvLmF2cm9pb190ZXN0LnB5CiIiIgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydApmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCgppbXBvcnQgbG9nZ2luZwppbXBvcnQgdGhyZWFkaW5nCmltcG9ydCB3ZWFrcmVmCmZyb20gYnVpbHRpbnMgaW1wb3J0IG5leHQKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0CmZyb20gYnVpbHRpbnMgaW1wb3J0IHJhbmdlCmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IG5hbWVkdHVwbGUKZnJvbSBtdWx0aXByb2Nlc3NpbmcucG9vbCBpbXBvcnQgVGhyZWFkUG9vbAoKZnJvbSBhcGFjaGVfYmVhbS5pbyBpbXBvcnQgaW9iYXNlCgpfX2FsbF9fID0gWydyZWFkX2Zyb21fc291cmNlJywKICAgICAgICAgICAnYXNzZXJ0X3NvdXJjZXNfZXF1YWxfcmVmZXJlbmNlX3NvdXJjZScsCiAgICAgICAgICAgJ2Fzc2VydF9yZWVudHJhbnRfcmVhZHNfc3VjY2VlZCcsCiAgICAgICAgICAgJ2Fzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9iZWhhdmlvcicsCiAgICAgICAgICAgJ2Fzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9iaW5hcnknLAogICAgICAgICAgICdhc3NlcnRfc3BsaXRfYXRfZnJhY3Rpb25fZXhoYXVzdGl2ZScsCiAgICAgICAgICAgJ2Fzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9mYWlscycsCiAgICAgICAgICAgJ2Fzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9zdWNjZWVkc19hbmRfY29uc2lzdGVudCddCgoKY2xhc3MgRXhwZWN0ZWRTcGxpdE91dGNvbWUob2JqZWN0KToKICBNVVNUX1NVQ0NFRURfQU5EX0JFX0NPTlNJU1RFTlQgPSAxCiAgTVVTVF9GQUlMID0gMgogIE1VU1RfQkVfQ09OU0lTVEVOVF9JRl9TVUNDRUVEUyA9IDMKCgpTcGxpdEF0RnJhY3Rpb25SZXN1bHQgPSBuYW1lZHR1cGxlKAogICAgJ1NwbGl0QXRGcmFjdGlvblJlc3VsdCcsICdudW1fcHJpbWFyeV9pdGVtcyBudW1fcmVzaWR1YWxfaXRlbXMnKQoKU3BsaXRGcmFjdGlvblN0YXRpc3RpY3MgPSBuYW1lZHR1cGxlKAogICAgJ1NwbGl0RnJhY3Rpb25TdGF0aXN0aWNzJywKICAgICdzdWNjZXNzZnVsX2ZyYWN0aW9ucyBub25fdHJpdmlhbF9mcmFjdGlvbnMnKQoKCmRlZiByZWFkX2Zyb21fc291cmNlKHNvdXJjZSwgc3RhcnRfcG9zaXRpb249Tm9uZSwgc3RvcF9wb3NpdGlvbj1Ob25lKToKICAiIiJSZWFkcyBlbGVtZW50cyBmcm9tIHRoZSBnaXZlbiBgYGBCb3VuZGVkU291cmNlYGBgLgoKICBPbmx5IHJlYWRzIGVsZW1lbnRzIHdpdGhpbiB0aGUgZ2l2ZW4gcG9zaXRpb24gcmFuZ2UuCiAgQXJnczoKICAgIHNvdXJjZSAofmFwYWNoZV9iZWFtLmlvLmlvYmFzZS5Cb3VuZGVkU291cmNlKToKICAgICAgOmNsYXNzOmB+YXBhY2hlX2JlYW0uaW8uaW9iYXNlLkJvdW5kZWRTb3VyY2VgIGltcGxlbWVudGF0aW9uLgogICAgc3RhcnRfcG9zaXRpb24gKGludCk6IHN0YXJ0IHBvc2l0aW9uIGZvciByZWFkaW5nLgogICAgc3RvcF9wb3NpdGlvbiAoaW50KTogc3RvcCBwb3NpdGlvbiBmb3IgcmVhZGluZy4KCiAgUmV0dXJuczoKICAgIExpc3Rbc3RyXTogdGhlIHNldCBvZiB2YWx1ZXMgcmVhZCBmcm9tIHRoZSBzb3VyY2VzLgogICIiIgogIHZhbHVlcyA9IFtdCiAgcmFuZ2VfdHJhY2tlciA9IHNvdXJjZS5nZXRfcmFuZ2VfdHJhY2tlcihzdGFydF9wb3NpdGlvbiwgc3RvcF9wb3NpdGlvbikKICBhc3NlcnQgaXNpbnN0YW5jZShyYW5nZV90cmFja2VyLCBpb2Jhc2UuUmFuZ2VUcmFja2VyKQogIHJlYWRlciA9IHNvdXJjZS5yZWFkKHJhbmdlX3RyYWNrZXIpCiAgZm9yIHZhbHVlIGluIHJlYWRlcjoKICAgIHZhbHVlcy5hcHBlbmQodmFsdWUpCgogIHJldHVybiB2YWx1ZXMKCgpkZWYgX1RocmVhZFBvb2wodGhyZWFkcyk6CiAgIyBUaHJlYWRQb29sIGNyYXNoZXMgaW4gb2xkIHZlcnNpb25zIG9mIFB5dGhvbiAoPCAyLjcuNSkgaWYgY3JlYXRlZCBmcm9tIGEKICAjIGNoaWxkIHRocmVhZC4gKGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxMDAxNSkKICBpZiBub3QgaGFzYXR0cih0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKSwgJ19jaGlsZHJlbicpOgogICAgdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkuX2NoaWxkcmVuID0gd2Vha3JlZi5XZWFrS2V5RGljdGlvbmFyeSgpCiAgcmV0dXJuIFRocmVhZFBvb2wodGhyZWFkcykKCgpkZWYgYXNzZXJ0X3NvdXJjZXNfZXF1YWxfcmVmZXJlbmNlX3NvdXJjZShyZWZlcmVuY2Vfc291cmNlX2luZm8sIHNvdXJjZXNfaW5mbyk6CiAgIiIiVGVzdHMgaWYgYSByZWZlcmVuY2Ugc291cmNlIGlzIGVxdWFsIHRvIGEgZ2l2ZW4gc2V0IG9mIHNvdXJjZXMuCgogIEdpdmVuIGEgcmVmZXJlbmNlIHNvdXJjZSAoYSA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5pby5pb2Jhc2UuQm91bmRlZFNvdXJjZWAKICBhbmQgYSBwb3NpdGlvbiByYW5nZSkgYW5kIGEgbGlzdCBvZiBzb3VyY2VzLCBhc3NlcnQgdGhhdCB0aGUgdW5pb24gb2YgdGhlCiAgcmVjb3JkcyByZWFkIGZyb20gdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyBlcXVhbCB0byB0aGUgcmVjb3JkcyByZWFkIGZyb20gdGhlCiAgcmVmZXJlbmNlIHNvdXJjZS4KCiAgQXJnczoKICAgIHJlZmVyZW5jZV9zb3VyY2VfaW5mb1wKICAgICAgICAoVHVwbGVbfmFwYWNoZV9iZWFtLmlvLmlvYmFzZS5Cb3VuZGVkU291cmNlLCBpbnQsIGludF0pOgogICAgICBhIHRocmVlLXR1cGxlIHRoYXQgZ2l2ZXMgdGhlIHJlZmVyZW5jZQogICAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5pby5pb2Jhc2UuQm91bmRlZFNvdXJjZWAsIHBvc2l0aW9uIHRvIHN0YXJ0CiAgICAgIHJlYWRpbmcgYXQsIGFuZCBwb3NpdGlvbiB0byBzdG9wIHJlYWRpbmcgYXQuCiAgICBzb3VyY2VzX2luZm9cCiAgICAgICAgKEl0ZXJhYmxlW1R1cGxlW35hcGFjaGVfYmVhbS5pby5pb2Jhc2UuQm91bmRlZFNvdXJjZSwgaW50LCBpbnRdXSk6CiAgICAgIGEgc2V0IG9mIHNvdXJjZXMuIEVhY2ggc291cmNlIGlzIGEgdGhyZWUtdHVwbGUgdGhhdCBpcyBvZiB0aGUgc2FtZQogICAgICBmb3JtYXQgZGVzY3JpYmVkIGFib3ZlLgoKICBSYWlzZXM6CiAgICB+ZXhjZXB0aW9ucy5WYWx1ZUVycm9yOiBpZiB0aGUgc2V0IG9mIGRhdGEgcHJvZHVjZWQgYnkgdGhlIHJlZmVyZW5jZSBzb3VyY2UKICAgICAgYW5kIHRoZSBnaXZlbiBzZXQgb2Ygc291cmNlcyBhcmUgbm90IGVxdWl2YWxlbnQuCgogICIiIgoKICBpZiBub3QgKGlzaW5zdGFuY2UocmVmZXJlbmNlX3NvdXJjZV9pbmZvLCB0dXBsZSkgYW5kCiAgICAgICAgICBsZW4ocmVmZXJlbmNlX3NvdXJjZV9pbmZvKSA9PSAzIGFuZAogICAgICAgICAgaXNpbnN0YW5jZShyZWZlcmVuY2Vfc291cmNlX2luZm9bMF0sIGlvYmFzZS5Cb3VuZGVkU291cmNlKSk6CiAgICByYWlzZSBWYWx1ZUVycm9yKCdyZWZlcmVuY2Vfc291cmNlX2luZm8gbXVzdCBhIHRocmVlLXR1cGxlIHdoZXJlIGZpcnN0JwogICAgICAgICAgICAgICAgICAgICAnaXRlbSBvZiB0aGUgdHVwbGUgZ2l2ZXMgYSAnCiAgICAgICAgICAgICAgICAgICAgICdpb2Jhc2UuQm91bmRlZFNvdXJjZS4gUmVjZWl2ZWQ6ICVyJwogICAgICAgICAgICAgICAgICAgICAlIHJlZmVyZW5jZV9zb3VyY2VfaW5mbykKICByZWZlcmVuY2VfcmVjb3JkcyA9IHJlYWRfZnJvbV9zb3VyY2UoCiAgICAgICpyZWZlcmVuY2Vfc291cmNlX2luZm8pCgogIHNvdXJjZV9yZWNvcmRzID0gW10KICBmb3Igc291cmNlX2luZm8gaW4gc291cmNlc19pbmZvOgogICAgYXNzZXJ0IGlzaW5zdGFuY2Uoc291cmNlX2luZm8sIHR1cGxlKQogICAgYXNzZXJ0IGxlbihzb3VyY2VfaW5mbykgPT0gMwogICAgaWYgbm90IChpc2luc3RhbmNlKHNvdXJjZV9pbmZvLCB0dXBsZSkgYW5kCiAgICAgICAgICAgIGxlbihzb3VyY2VfaW5mbykgPT0gMyBhbmQKICAgICAgICAgICAgaXNpbnN0YW5jZShzb3VyY2VfaW5mb1swXSwgaW9iYXNlLkJvdW5kZWRTb3VyY2UpKToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignc291cmNlX2luZm8gbXVzdCBhIHRocmVlIHR1cGxlIHdoZXJlIGZpcnN0JwogICAgICAgICAgICAgICAgICAgICAgICdpdGVtIG9mIHRoZSB0dXBsZSBnaXZlcyBhICcKICAgICAgICAgICAgICAgICAgICAgICAnaW9iYXNlLkJvdW5kZWRTb3VyY2UuIFJlY2VpdmVkOiAlcicKICAgICAgICAgICAgICAgICAgICAgICAlIHNvdXJjZV9pbmZvKQogICAgaWYgKHR5cGUocmVmZXJlbmNlX3NvdXJjZV9pbmZvWzBdLmRlZmF1bHRfb3V0cHV0X2NvZGVyKCkpICE9CiAgICAgICAgdHlwZShzb3VyY2VfaW5mb1swXS5kZWZhdWx0X291dHB1dF9jb2RlcigpKSk6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnUmVmZXJlbmNlIHNvdXJjZSAlciBhbmQgdGhlIHNvdXJjZSAlciBtdXN0IHVzZSB0aGUgc2FtZSBjb2Rlci4gJwogICAgICAgICAgJ1RoZXkgYXJlIHVzaW5nICVyIGFuZCAlciByZXNwZWN0aXZlbHkgaW5zdGVhZC4nCiAgICAgICAgICAlIChyZWZlcmVuY2Vfc291cmNlX2luZm9bMF0sIHNvdXJjZV9pbmZvWzBdLAogICAgICAgICAgICAgdHlwZShyZWZlcmVuY2Vfc291cmNlX2luZm9bMF0uZGVmYXVsdF9vdXRwdXRfY29kZXIoKSksCiAgICAgICAgICAgICB0eXBlKHNvdXJjZV9pbmZvWzBdLmRlZmF1bHRfb3V0cHV0X2NvZGVyKCkpKSkKICAgIHNvdXJjZV9yZWNvcmRzLmV4dGVuZChyZWFkX2Zyb21fc291cmNlKCpzb3VyY2VfaW5mbykpCgogIGlmIGxlbihyZWZlcmVuY2VfcmVjb3JkcykgIT0gbGVuKHNvdXJjZV9yZWNvcmRzKToKICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgJ1JlZmVyZW5jZSBzb3VyY2UgbXVzdCBwcm9kdWNlIHRoZSBzYW1lIG51bWJlciBvZiByZWNvcmRzIGFzIHRoZSAnCiAgICAgICAgJ2xpc3Qgb2Ygc291cmNlcy4gTnVtYmVyIG9mIHJlY29yZHMgd2VyZSAlZCBhbmQgJWQgaW5zdGVhZC4nCiAgICAgICAgJSAobGVuKHJlZmVyZW5jZV9yZWNvcmRzKSwgbGVuKHNvdXJjZV9yZWNvcmRzKSkpCgogIGlmIHNvcnRlZChyZWZlcmVuY2VfcmVjb3JkcykgIT0gc29ydGVkKHNvdXJjZV9yZWNvcmRzKToKICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgJ1JlZmVyZW5jZSBzb3VyY2UgYW5kIHByb3ZpZGVkIGxpc3Qgb2Ygc291cmNlcyBtdXN0IHByb2R1Y2UgdGhlICcKICAgICAgICAnc2FtZSBzZXQgb2YgcmVjb3Jkcy4nKQoKCmRlZiBhc3NlcnRfcmVlbnRyYW50X3JlYWRzX3N1Y2NlZWQoc291cmNlX2luZm8pOgogICIiIlRlc3RzIGlmIGEgZ2l2ZW4gc291cmNlIGNhbiBiZSByZWFkIGluIGEgcmVlbnRyYW50IG1hbm5lci4KCiAgQXNzdW1lIHRoYXQgZ2l2ZW4gc291cmNlIHByb2R1Y2VzIHRoZSBzZXQgb2YgdmFsdWVzIGBge3YxLCB2MiwgdjMsIC4uLiB2bn1gYC4KICBGb3IgYGBpYGAgaW4gcmFuZ2UgYGBbMSwgbi0xXWBgIHRoaXMgbWV0aG9kIHBlcmZvcm1zIGEgcmVlbnRyYW50IHJlYWQgYWZ0ZXIKICByZWFkaW5nIGBgaWBgIGVsZW1lbnRzIGFuZCB2ZXJpZmllcyB0aGF0IGJvdGggdGhlIG9yaWdpbmFsIGFuZCByZWVudHJhbnQgcmVhZAogIHByb2R1Y2UgdGhlIGV4cGVjdGVkIHNldCBvZiB2YWx1ZXMuCgogIEFyZ3M6CiAgICBzb3VyY2VfaW5mbyAoVHVwbGVbfmFwYWNoZV9iZWFtLmlvLmlvYmFzZS5Cb3VuZGVkU291cmNlLCBpbnQsIGludF0pOgogICAgICBhIHRocmVlLXR1cGxlIHRoYXQgZ2l2ZXMgdGhlIHJlZmVyZW5jZQogICAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5pby5pb2Jhc2UuQm91bmRlZFNvdXJjZWAsIHBvc2l0aW9uIHRvIHN0YXJ0IHJlYWRpbmcKICAgICAgYXQsIGFuZCBhIHBvc2l0aW9uIHRvIHN0b3AgcmVhZGluZyBhdC4KCiAgUmFpc2VzOgogICAgfmV4Y2VwdGlvbnMuVmFsdWVFcnJvcjogaWYgc291cmNlIGlzIHRvbyB0cml2aWFsIG9yIHJlZW50cmFudCByZWFkIHJlc3VsdAogICAgICBpbiBhbiBpbmNvcnJlY3QgcmVhZC4KICAiIiIKCiAgc291cmNlLCBzdGFydF9wb3NpdGlvbiwgc3RvcF9wb3NpdGlvbiA9IHNvdXJjZV9pbmZvCiAgYXNzZXJ0IGlzaW5zdGFuY2Uoc291cmNlLCBpb2Jhc2UuQm91bmRlZFNvdXJjZSkKCiAgZXhwZWN0ZWRfdmFsdWVzID0gW3ZhbCBmb3IgdmFsIGluIHNvdXJjZS5yZWFkKHNvdXJjZS5nZXRfcmFuZ2VfdHJhY2tlcigKICAgICAgc3RhcnRfcG9zaXRpb24sIHN0b3BfcG9zaXRpb24pKV0KICBpZiBsZW4oZXhwZWN0ZWRfdmFsdWVzKSA8IDI6CiAgICByYWlzZSBWYWx1ZUVycm9yKCdTb3VyY2UgaXMgdG9vIHRyaXZpYWwgc2luY2UgaXQgcHJvZHVjZXMgb25seSAlZCAnCiAgICAgICAgICAgICAgICAgICAgICd2YWx1ZXMuIFBsZWFzZSBnaXZlIGEgc291cmNlIHRoYXQgcmVhZHMgYXQgbGVhc3QgMiAnCiAgICAgICAgICAgICAgICAgICAgICd2YWx1ZXMuJyAlIGxlbihleHBlY3RlZF92YWx1ZXMpKQoKICBmb3IgaSBpbiByYW5nZSgxLCBsZW4oZXhwZWN0ZWRfdmFsdWVzKSAtIDEpOgogICAgcmVhZF9pdGVyID0gc291cmNlLnJlYWQoc291cmNlLmdldF9yYW5nZV90cmFja2VyKAogICAgICAgIHN0YXJ0X3Bvc2l0aW9uLCBzdG9wX3Bvc2l0aW9uKSkKICAgIG9yaWdpbmFsX3JlYWQgPSBbXQogICAgZm9yIF8gaW4gcmFuZ2UoaSk6CiAgICAgIG9yaWdpbmFsX3JlYWQuYXBwZW5kKG5leHQocmVhZF9pdGVyKSkKCiAgICAjIFJlZW50cmFudCByZWFkCiAgICByZWVudHJhbnRfcmVhZCA9IFt2YWwgZm9yIHZhbCBpbiBzb3VyY2UucmVhZCgKICAgICAgICBzb3VyY2UuZ2V0X3JhbmdlX3RyYWNrZXIoc3RhcnRfcG9zaXRpb24sIHN0b3BfcG9zaXRpb24pKV0KCiAgICAjIENvbnRpbnVpbmcgb3JpZ2luYWwgcmVhZC4KICAgIGZvciB2YWwgaW4gcmVhZF9pdGVyOgogICAgICBvcmlnaW5hbF9yZWFkLmFwcGVuZCh2YWwpCgogICAgaWYgc29ydGVkKG9yaWdpbmFsX3JlYWQpICE9IHNvcnRlZChleHBlY3RlZF92YWx1ZXMpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdTb3VyY2UgZGlkIG5vdCBwcm9kdWNlIGV4cGVjdGVkIHZhbHVlcyB3aGVuICcKICAgICAgICAgICAgICAgICAgICAgICAncGVyZm9ybWluZyBhIHJlZW50cmFudCByZWFkIGFmdGVyIHJlYWRpbmcgJWQgdmFsdWVzLiAnCiAgICAgICAgICAgICAgICAgICAgICAgJ0V4cGVjdGVkICVyIHJlY2VpdmVkICVyLicKICAgICAgICAgICAgICAgICAgICAgICAlIChpLCBleHBlY3RlZF92YWx1ZXMsIG9yaWdpbmFsX3JlYWQpKQoKICAgIGlmIHNvcnRlZChyZWVudHJhbnRfcmVhZCkgIT0gc29ydGVkKGV4cGVjdGVkX3ZhbHVlcyk6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0EgcmVlbnRyYW50IHJlYWQgb2Ygc291cmNlIGFmdGVyIHJlYWRpbmcgJWQgdmFsdWVzICcKICAgICAgICAgICAgICAgICAgICAgICAnZGlkIG5vdCBwcm9kdWNlIGV4cGVjdGVkIHZhbHVlcy4gRXhwZWN0ZWQgJXIgJwogICAgICAgICAgICAgICAgICAgICAgICdyZWNlaXZlZCAlci4nCiAgICAgICAgICAgICAgICAgICAgICAgJSAoaSwgZXhwZWN0ZWRfdmFsdWVzLCByZWVudHJhbnRfcmVhZCkpCgoKZGVmIGFzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9iZWhhdmlvcihzb3VyY2UsIG51bV9pdGVtc190b19yZWFkX2JlZm9yZV9zcGxpdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGxpdF9mcmFjdGlvbiwgZXhwZWN0ZWRfb3V0Y29tZSk6CiAgIiIiVmVyaWZpZXMgdGhlIGJlaGF2aW91ciBvZiBzcGxpdHRpbmcgYSBzb3VyY2UgYXQgYSBnaXZlbiBmcmFjdGlvbi4KCiAgQXNzZXJ0cyB0aGF0IHNwbGl0dGluZyBhIDpjbGFzczpgfmFwYWNoZV9iZWFtLmlvLmlvYmFzZS5Cb3VuZGVkU291cmNlYCBlaXRoZXIKICBmYWlscyBhZnRlciByZWFkaW5nICoqbnVtX2l0ZW1zX3RvX3JlYWRfYmVmb3JlX3NwbGl0KiogaXRlbXMsIG9yIHN1Y2NlZWRzIGluCiAgYSB3YXkgdGhhdCBpcyBjb25zaXN0ZW50IGFjY29yZGluZyB0bwogIDpmdW5jOmBhc3NlcnRfc3BsaXRfYXRfZnJhY3Rpb25fc3VjY2VlZHNfYW5kX2NvbnNpc3RlbnQoKWAuCgogIEFyZ3M6CiAgICBzb3VyY2UgKH5hcGFjaGVfYmVhbS5pby5pb2Jhc2UuQm91bmRlZFNvdXJjZSk6IHRoZSBzb3VyY2UgdG8gcGVyZm9ybQogICAgICBkeW5hbWljIHNwbGl0dGluZyBvbi4KICAgIG51bV9pdGVtc190b19yZWFkX2JlZm9yZV9zcGxpdCAoaW50KTogbnVtYmVyIG9mIGl0ZW1zIHRvIHJlYWQgYmVmb3JlCiAgICAgIHNwbGl0dGluZy4KICAgIHNwbGl0X2ZyYWN0aW9uIChmbG9hdCk6IGZyYWN0aW9uIHRvIHNwbGl0IGF0LgogICAgZXhwZWN0ZWRfb3V0Y29tZSAoaW50KTogYSB2YWx1ZSBmcm9tCiAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLmlvLnNvdXJjZV90ZXN0X3V0aWxzLkV4cGVjdGVkU3BsaXRPdXRjb21lYC4KCiAgUmV0dXJuczoKICAgIFR1cGxlW2ludCwgaW50XTogYSB0dXBsZSB0aGF0IGdpdmVzIHRoZSBudW1iZXIgb2YgaXRlbXMgcHJvZHVjZWQgYnkgcmVhZGluZwogICAgdGhlIHR3byByYW5nZXMgcHJvZHVjZWQgYWZ0ZXIgZHluYW1pYyBzcGxpdHRpbmcuIElmIHNwbGl0dGluZyBkaWQgbm90CiAgICBvY2N1ciwgdGhlIGZpcnN0IHZhbHVlIG9mIHRoZSB0dXBsZSB3aWxsIHJlcHJlc2VudCB0aGUgZnVsbCBzZXQgb2YgcmVjb3JkcwogICAgcmVhZCBieSB0aGUgc291cmNlIHdoaWxlIHRoZSBzZWNvbmQgdmFsdWUgb2YgdGhlIHR1cGxlIHdpbGwgYmUgYGAtMWBgLgogICIiIgogIGFzc2VydCBpc2luc3RhbmNlKHNvdXJjZSwgaW9iYXNlLkJvdW5kZWRTb3VyY2UpCiAgZXhwZWN0ZWRfaXRlbXMgPSByZWFkX2Zyb21fc291cmNlKHNvdXJjZSwgTm9uZSwgTm9uZSkKICByZXR1cm4gX2Fzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9iZWhhdmlvcigKICAgICAgc291cmNlLCBleHBlY3RlZF9pdGVtcywgbnVtX2l0ZW1zX3RvX3JlYWRfYmVmb3JlX3NwbGl0LCBzcGxpdF9mcmFjdGlvbiwKICAgICAgZXhwZWN0ZWRfb3V0Y29tZSkKCgpkZWYgX2Fzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9iZWhhdmlvcigKICAgIHNvdXJjZSwgZXhwZWN0ZWRfaXRlbXMsIG51bV9pdGVtc190b19yZWFkX2JlZm9yZV9zcGxpdCwKICAgIHNwbGl0X2ZyYWN0aW9uLCBleHBlY3RlZF9vdXRjb21lLCBzdGFydF9wb3NpdGlvbj1Ob25lLCBzdG9wX3Bvc2l0aW9uPU5vbmUpOgoKICByYW5nZV90cmFja2VyID0gc291cmNlLmdldF9yYW5nZV90cmFja2VyKHN0YXJ0X3Bvc2l0aW9uLCBzdG9wX3Bvc2l0aW9uKQogIGFzc2VydCBpc2luc3RhbmNlKHJhbmdlX3RyYWNrZXIsIGlvYmFzZS5SYW5nZVRyYWNrZXIpCiAgY3VycmVudF9pdGVtcyA9IFtdCiAgcmVhZGVyID0gc291cmNlLnJlYWQocmFuZ2VfdHJhY2tlcikKICAjIFJlYWRpbmcgJ251bV9pdGVtc190b19yZWFkX2JlZm9yZV9zcGxpdCcgaXRlbXMuCiAgcmVhZGVyX2l0ZXIgPSBpdGVyKHJlYWRlcikKICBmb3IgXyBpbiByYW5nZShudW1faXRlbXNfdG9fcmVhZF9iZWZvcmVfc3BsaXQpOgogICAgY3VycmVudF9pdGVtcy5hcHBlbmQobmV4dChyZWFkZXJfaXRlcikpCgogIHN1Z2dlc3RlZF9zcGxpdF9wb3NpdGlvbiA9IHJhbmdlX3RyYWNrZXIucG9zaXRpb25fYXRfZnJhY3Rpb24oCiAgICAgIHNwbGl0X2ZyYWN0aW9uKQoKICBzdG9wX3Bvc2l0aW9uX2JlZm9yZV9zcGxpdCA9IHJhbmdlX3RyYWNrZXIuc3RvcF9wb3NpdGlvbigpCiAgc3BsaXRfcmVzdWx0ID0gcmFuZ2VfdHJhY2tlci50cnlfc3BsaXQoc3VnZ2VzdGVkX3NwbGl0X3Bvc2l0aW9uKQoKICBpZiBzcGxpdF9yZXN1bHQgaXMgbm90IE5vbmU6CiAgICBpZiBsZW4oc3BsaXRfcmVzdWx0KSAhPSAyOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdTcGxpdCByZXN1bHQgbXVzdCBiZSBhIHR1cGxlIHRoYXQgY29udGFpbnMgc3BsaXQgJwogICAgICAgICAgICAgICAgICAgICAgICdwb3NpdGlvbiBhbmQgc3BsaXQgZnJhY3Rpb24uIFJlY2VpdmVkOiAlcicgJQogICAgICAgICAgICAgICAgICAgICAgIChzcGxpdF9yZXN1bHQsKSkKCiAgICBpZiByYW5nZV90cmFja2VyLnN0b3BfcG9zaXRpb24oKSAhPSBzcGxpdF9yZXN1bHRbMF06CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0FmdGVyIGEgc3VjY2Vzc2Z1bCBzcGxpdCwgdGhlIHN0b3AgcG9zaXRpb24gb2YgdGhlICcKICAgICAgICAgICAgICAgICAgICAgICAnUmFuZ2VUcmFja2VyIG11c3QgYmUgdGhlIHNhbWUgYXMgdGhlIHJldHVybmVkIHNwbGl0ICcKICAgICAgICAgICAgICAgICAgICAgICAncG9zaXRpb24uIE9ic2VydmVkICVyIGFuZCAlciB3aGljaCBhcmUgZGlmZmVyZW50LicKICAgICAgICAgICAgICAgICAgICAgICAlIChyYW5nZV90cmFja2VyLnN0b3BfcG9zaXRpb24oKSAlIChzcGxpdF9yZXN1bHRbMF0sKSkpCgogICAgaWYgc3BsaXRfZnJhY3Rpb24gPCAwIG9yIHNwbGl0X2ZyYWN0aW9uID4gMToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignU3BsaXQgZnJhY3Rpb24gbXVzdCBiZSB3aXRoaW4gdGhlIHJhbmdlIFswLDFdJywKICAgICAgICAgICAgICAgICAgICAgICAnT2JzZXJ2ZWQgc3BsaXQgZnJhY3Rpb24gd2FzICVyLicgJSAoc3BsaXRfcmVzdWx0WzFdLCkpCgogIHN0b3BfcG9zaXRpb25fYWZ0ZXJfc3BsaXQgPSByYW5nZV90cmFja2VyLnN0b3BfcG9zaXRpb24oKQogIGlmIHNwbGl0X3Jlc3VsdCBhbmQgc3RvcF9wb3NpdGlvbl9hZnRlcl9zcGxpdCA9PSBzdG9wX3Bvc2l0aW9uX2JlZm9yZV9zcGxpdDoKICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1N0b3AgcG9zaXRpb24gJXIgZGlkIG5vdCBjaGFuZ2UgYWZ0ZXIgYSBzdWNjZXNzZnVsICcKICAgICAgICAgICAgICAgICAgICAgJ3NwbGl0IG9mIHNvdXJjZSAlciBhdCBmcmFjdGlvbiAlci4nICUKICAgICAgICAgICAgICAgICAgICAgKHN0b3BfcG9zaXRpb25fYmVmb3JlX3NwbGl0LCBzb3VyY2UsIHNwbGl0X2ZyYWN0aW9uKSkKCiAgaWYgZXhwZWN0ZWRfb3V0Y29tZSA9PSBFeHBlY3RlZFNwbGl0T3V0Y29tZS5NVVNUX1NVQ0NFRURfQU5EX0JFX0NPTlNJU1RFTlQ6CiAgICBpZiBub3Qgc3BsaXRfcmVzdWx0OgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdFeHBlY3RlZCBzcGxpdCBvZiBzb3VyY2UgJXIgYXQgZnJhY3Rpb24gJXIgdG8gYmUgJwogICAgICAgICAgICAgICAgICAgICAgICdzdWNjZXNzZnVsIGFmdGVyIHJlYWRpbmcgJWQgZWxlbWVudHMuIEJ1dCAnCiAgICAgICAgICAgICAgICAgICAgICAgJ3RoZSBzcGxpdCBmYWlsZWQuJyAlCiAgICAgICAgICAgICAgICAgICAgICAgKHNvdXJjZSwgc3BsaXRfZnJhY3Rpb24sIG51bV9pdGVtc190b19yZWFkX2JlZm9yZV9zcGxpdCkpCiAgZWxpZiBleHBlY3RlZF9vdXRjb21lID09IEV4cGVjdGVkU3BsaXRPdXRjb21lLk1VU1RfRkFJTDoKICAgIGlmIHNwbGl0X3Jlc3VsdDoKICAgICAgcmFpc2UgVmFsdWVFcnJvcignRXhwZWN0ZWQgc3BsaXQgb2Ygc291cmNlICVyIGF0IGZyYWN0aW9uICVyIGFmdGVyICcKICAgICAgICAgICAgICAgICAgICAgICAncmVhZGluZyAlZCBlbGVtZW50cyB0byBmYWlsLiBCdXQgc3BsaXR0aW5nICcKICAgICAgICAgICAgICAgICAgICAgICAnc3VjY2VlZGVkIHdpdGggcmVzdWx0ICVyLicgJQogICAgICAgICAgICAgICAgICAgICAgIChzb3VyY2UsIHNwbGl0X2ZyYWN0aW9uLCBudW1faXRlbXNfdG9fcmVhZF9iZWZvcmVfc3BsaXQsCiAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0X3Jlc3VsdCkpCgogIGVsaWYgKGV4cGVjdGVkX291dGNvbWUgIT0KICAgICAgICBFeHBlY3RlZFNwbGl0T3V0Y29tZS5NVVNUX0JFX0NPTlNJU1RFTlRfSUZfU1VDQ0VFRFMpOgogICAgcmFpc2UgVmFsdWVFcnJvcignVW5rbm93biB0eXBlIG9mIGV4cGVjdGVkIG91dGNvbWU6ICVyJyAlCiAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX291dGNvbWUpCiAgY3VycmVudF9pdGVtcy5leHRlbmQoW3ZhbHVlIGZvciB2YWx1ZSBpbiByZWFkZXJfaXRlcl0pCgogIHJlc2lkdWFsX3JhbmdlID0gKAogICAgICBzcGxpdF9yZXN1bHRbMF0sIHN0b3BfcG9zaXRpb25fYmVmb3JlX3NwbGl0KSBpZiBzcGxpdF9yZXN1bHQgZWxzZSBOb25lCgogIHJldHVybiBfdmVyaWZ5X3NpbmdsZV9zcGxpdF9mcmFjdGlvbl9yZXN1bHQoCiAgICAgIHNvdXJjZSwgZXhwZWN0ZWRfaXRlbXMsIGN1cnJlbnRfaXRlbXMsCiAgICAgIHNwbGl0X3Jlc3VsdCwKICAgICAgKHJhbmdlX3RyYWNrZXIuc3RhcnRfcG9zaXRpb24oKSwgcmFuZ2VfdHJhY2tlci5zdG9wX3Bvc2l0aW9uKCkpLAogICAgICByZXNpZHVhbF9yYW5nZSwgc3BsaXRfZnJhY3Rpb24pCgoKZGVmIF9yYW5nZV90b19zdHIoc3RhcnQsIHN0b3ApOgogIHJldHVybiAnWycgKyAoc3RyKHN0YXJ0KSArICcsJyArIHN0cihzdG9wKSArICcpJykKCgpkZWYgX3ZlcmlmeV9zaW5nbGVfc3BsaXRfZnJhY3Rpb25fcmVzdWx0KAogICAgc291cmNlLCBleHBlY3RlZF9pdGVtcywgY3VycmVudF9pdGVtcywgc3BsaXRfc3VjY2Vzc2Z1bCwgcHJpbWFyeV9yYW5nZSwKICAgIHJlc2lkdWFsX3JhbmdlLCBzcGxpdF9mcmFjdGlvbik6CgogIGFzc2VydCBwcmltYXJ5X3JhbmdlCiAgcHJpbWFyeV9pdGVtcyA9IHJlYWRfZnJvbV9zb3VyY2Uoc291cmNlLCAqcHJpbWFyeV9yYW5nZSkKCiAgaWYgbm90IHNwbGl0X3N1Y2Nlc3NmdWw6CiAgICAjIEZvciB1bnN1Y2Nlc3NmdWwgc3BsaXRzLCByZXNpZHVhbF9yYW5nZSBzaG91bGQgYmUgTm9uZS4KICAgIGFzc2VydCBub3QgcmVzaWR1YWxfcmFuZ2UKCiAgcmVzaWR1YWxfaXRlbXMgPSAoCiAgICAgIHJlYWRfZnJvbV9zb3VyY2Uoc291cmNlLCAqcmVzaWR1YWxfcmFuZ2UpCiAgICAgIGlmIHNwbGl0X3N1Y2Nlc3NmdWwgZWxzZSBbXSkKCiAgdG90YWxfaXRlbXMgPSBwcmltYXJ5X2l0ZW1zICsgcmVzaWR1YWxfaXRlbXMKCiAgaWYgY3VycmVudF9pdGVtcyAhPSBwcmltYXJ5X2l0ZW1zOgogICAgcmFpc2UgVmFsdWVFcnJvcignQ3VycmVudCBzb3VyY2UgJXIgYW5kIGEgc291cmNlIGNyZWF0ZWQgdXNpbmcgdGhlICcKICAgICAgICAgICAgICAgICAgICAgJ3JhbmdlIG9mIHRoZSBwcmltYXJ5IHNvdXJjZSAlciBkZXRlcm1pbmVkICcKICAgICAgICAgICAgICAgICAgICAgJ2J5IHBlcmZvcm1pbmcgZHluYW1pYyB3b3JrIHJlYmFsYW5jaW5nIGF0IGZyYWN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgJyVyIHByb2R1Y2VkIGRpZmZlcmVudCB2YWx1ZXMuIEV4cGVjdGVkICcKICAgICAgICAgICAgICAgICAgICAgJ3RoZXNlIHNvdXJjZXMgdG8gcHJvZHVjZSB0aGUgc2FtZSBsaXN0IG9mIHZhbHVlcy4nCiAgICAgICAgICAgICAgICAgICAgICUgKHNvdXJjZSwKICAgICAgICAgICAgICAgICAgICAgICAgX3JhbmdlX3RvX3N0cigqcHJpbWFyeV9yYW5nZSksCiAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0X2ZyYWN0aW9uKQogICAgICAgICAgICAgICAgICAgICkKCiAgaWYgZXhwZWN0ZWRfaXRlbXMgIT0gdG90YWxfaXRlbXM6CiAgICByYWlzZSBWYWx1ZUVycm9yKCdJdGVtcyBvYnRhaW5lZCBieSByZWFkaW5nIHRoZSBzb3VyY2UgJXIgZm9yIHByaW1hcnkgJwogICAgICAgICAgICAgICAgICAgICAnYW5kIHJlc2lkdWFsIHJhbmdlcyAlcyBhbmQgJXMgZGlkIG5vdCBwcm9kdWNlIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICdleHBlY3RlZCBsaXN0IG9mIHZhbHVlcy4nCiAgICAgICAgICAgICAgICAgICAgICUgKHNvdXJjZSwKICAgICAgICAgICAgICAgICAgICAgICAgX3JhbmdlX3RvX3N0cigqcHJpbWFyeV9yYW5nZSksCiAgICAgICAgICAgICAgICAgICAgICAgIF9yYW5nZV90b19zdHIoKnJlc2lkdWFsX3JhbmdlKSkpCgogIHJlc3VsdCA9IChsZW4ocHJpbWFyeV9pdGVtcyksCiAgICAgICAgICAgIGxlbihyZXNpZHVhbF9pdGVtcykgaWYgc3BsaXRfc3VjY2Vzc2Z1bCBlbHNlIC0xKQogIHJldHVybiByZXN1bHQKCgpkZWYgYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX3N1Y2NlZWRzX2FuZF9jb25zaXN0ZW50KAogICAgc291cmNlLCBudW1faXRlbXNfdG9fcmVhZF9iZWZvcmVfc3BsaXQsIHNwbGl0X2ZyYWN0aW9uKToKICAiIiJWZXJpZmllcyBzb21lIGNvbnNpc3RlbmN5IHByb3BlcnRpZXMgb2YgZHluYW1pYyB3b3JrIHJlYmFsYW5jaW5nLgoKICBFcXVpdmFsZW50IHRvIHRoZSBmb2xsb3dpbmcgcHNldWRvY29kZTo6OgoKICAgIG9yaWdpbmFsX3JhbmdlX3RyYWNrZXIgPSBzb3VyY2UuZ2V0UmFuZ2VUcmFja2VyKE5vbmUsIE5vbmUpCiAgICBvcmlnaW5hbF9yZWFkZXIgPSBzb3VyY2UucmVhZChvcmlnaW5hbF9yYW5nZV90cmFja2VyKQogICAgaXRlbXNfYmVmb3JlX3NwbGl0ID0gcmVhZCBOIGl0ZW1zIGZyb20gb3JpZ2luYWxfcmVhZGVyCiAgICBzdWdnZXN0ZWRfc3BsaXRfcG9zaXRpb24gPSBvcmlnaW5hbF9yYW5nZV90cmFja2VyLnBvc2l0aW9uX2Zvcl9mcmFjdGlvbigKICAgICAgc3BsaXRfZnJhY3Rpb24pCiAgICBvcmlnaW5hbF9zdG9wX3Bvc2l0aW9uIC0gb3JpZ2luYWxfcmFuZ2VfdHJhY2tlci5zdG9wX3Bvc2l0aW9uKCkKICAgIHNwbGl0X3Jlc3VsdCA9IHJhbmdlX3RyYWNrZXIudHJ5X3NwbGl0KCkKICAgIHNwbGl0X3Bvc2l0aW9uLCBzcGxpdF9mcmFjdGlvbiA9IHNwbGl0X3Jlc3VsdAogICAgcHJpbWFyeV9yYW5nZV90cmFja2VyID0gc291cmNlLmdldF9yYW5nZV90cmFja2VyKAogICAgICBvcmlnaW5hbF9yYW5nZV90cmFja2VyLnN0YXJ0X3Bvc2l0aW9uKCksIHNwbGl0X3Bvc2l0aW9uKQogICAgcmVzaWR1YWxfcmFuZ2VfdHJhY2tlciA9IHNvdXJjZS5nZXRfcmFuZ2VfdHJhY2tlcihzcGxpdF9wb3NpdGlvbiwKICAgICAgb3JpZ2luYWxfc3RvcF9wb3NpdGlvbikKCiAgICBhc3NlcnQgdGhhdDogaXRlbXMgd2hlbiByZWFkaW5nIHNvdXJjZS5yZWFkKHByaW1hcnlfcmFuZ2VfdHJhY2tlcikgPT0KICAgICAgaXRlbXNfYmVmb3JlX3NwbGl0ICsgaXRlbXMgZnJvbSBjb250aW51aW5nIHRvIHJlYWQgJ29yaWdpbmFsX3JlYWRlcicKICAgIGFzc2VydCB0aGF0OiBpdGVtcyB3aGVuIHJlYWRpbmcgc291cmNlLnJlYWQob3JpZ2luYWxfcmFuZ2VfdHJhY2tlcikgPQogICAgICBpdGVtcyB3aGVuIHJlYWRpbmcgc291cmNlLnJlYWQocHJpbWFyeV9yYW5nZV90cmFja2VyKSArIGl0ZW1zIHdoZW4gcmVhZGluZwogICAgc291cmNlLnJlYWQocmVzaWR1YWxfcmFuZ2VfdHJhY2tlcikKCiAgQXJnczoKCiAgICBzb3VyY2U6IHNvdXJjZSB0byBwZXJmb3JtIGR5bmFtaWMgd29yayByZWJhbGFuY2luZyBvbi4KICAgIG51bV9pdGVtc190b19yZWFkX2JlZm9yZV9zcGxpdDogbnVtYmVyIG9mIGl0ZW1zIHRvIHJlYWQgYmVmb3JlIHNwbGl0dGluZy4KICAgIHNwbGl0X2ZyYWN0aW9uOiBmcmFjdGlvbiB0byBzcGxpdCBhdC4KICAiIiIKCiAgYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2JlaGF2aW9yKAogICAgICBzb3VyY2UsIG51bV9pdGVtc190b19yZWFkX2JlZm9yZV9zcGxpdCwgc3BsaXRfZnJhY3Rpb24sCiAgICAgIEV4cGVjdGVkU3BsaXRPdXRjb21lLk1VU1RfU1VDQ0VFRF9BTkRfQkVfQ09OU0lTVEVOVCkKCgpkZWYgYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2ZhaWxzKHNvdXJjZSwgbnVtX2l0ZW1zX3RvX3JlYWRfYmVmb3JlX3NwbGl0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0X2ZyYWN0aW9uKToKICAiIiJBc3NlcnRzIHRoYXQgZHluYW1pYyB3b3JrIHJlYmFsYW5jaW5nIGF0IGEgZ2l2ZW4gZnJhY3Rpb24gZmFpbHMuCgogIEFzc2VydHMgdGhhdCB0cnlpbmcgdG8gcGVyZm9ybSBkeW5hbWljIHNwbGl0dGluZyBhZnRlciByZWFkaW5nCiAgJ251bV9pdGVtc190b19yZWFkX2JlZm9yZV9zcGxpdCcgaXRlbXMgZnJvbSB0aGUgc291cmNlIGZhaWxzLgoKICBBcmdzOgogICAgc291cmNlOiBzb3VyY2UgdG8gcGVyZm9ybSBkeW5hbWljIHNwbGl0dGluZyBvbi4KICAgIG51bV9pdGVtc190b19yZWFkX2JlZm9yZV9zcGxpdDogbnVtYmVyIG9mIGl0ZW1zIHRvIHJlYWQgYmVmb3JlIHNwbGl0dGluZy4KICAgIHNwbGl0X2ZyYWN0aW9uOiBmcmFjdGlvbiB0byBzcGxpdCBhdC4KICAiIiIKCiAgYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2JlaGF2aW9yKAogICAgICBzb3VyY2UsIG51bV9pdGVtc190b19yZWFkX2JlZm9yZV9zcGxpdCwgc3BsaXRfZnJhY3Rpb24sCiAgICAgIEV4cGVjdGVkU3BsaXRPdXRjb21lLk1VU1RfRkFJTCkKCgpkZWYgYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2JpbmFyeSgKICAgIHNvdXJjZSwgZXhwZWN0ZWRfaXRlbXMsIG51bV9pdGVtc190b19yZWFkX2JlZm9yZV9zcGxpdCwgbGVmdF9mcmFjdGlvbiwKICAgIGxlZnRfcmVzdWx0LCByaWdodF9mcmFjdGlvbiwgcmlnaHRfcmVzdWx0LCBzdGF0cywgc3RhcnRfcG9zaXRpb249Tm9uZSwKICAgIHN0b3BfcG9zaXRpb249Tm9uZSk6CiAgIiIiUGVyZm9ybXMgZHluYW1pYyB3b3JrIHJlYmFsYW5jaW5nIGZvciBmcmFjdGlvbnMgd2l0aGluIGEgZ2l2ZW4gcmFuZ2UuCgogIEFzc2VydHMgdGhhdCBnaXZlbiBhIHN0YXJ0IHBvc2l0aW9uLCBhIHNvdXJjZSBjYW4gYmUgc3BsaXQgYXQgZXZlcnkKICBpbnRlcmVzdGluZyBmcmFjdGlvbiAoaGFsZndheSBiZXR3ZWVuIHR3byBmcmFjdGlvbnMgdGhhdCBkaWZmZXIgYnkgYXQKICBsZWFzdCBvbmUgaXRlbSkgYW5kIHRoZSByZXN1bHRzIGFyZSBjb25zaXN0ZW50IGlmIGEgc3BsaXQgc3VjY2VlZHMuCgogIEFyZ3M6CiAgICBzb3VyY2U6IHNvdXJjZSB0byBwZXJmb3JtIGR5bmFtaWMgc3BsaXR0aW5nIG9uLgogICAgZXhwZWN0ZWRfaXRlbXM6IHRvdGFsIHNldCBvZiBpdGVtcyBleHBlY3RlZCB3aGVuIHJlYWRpbmcgdGhlIHNvdXJjZS4KICAgIG51bV9pdGVtc190b19yZWFkX2JlZm9yZV9zcGxpdDogbnVtYmVyIG9mIGl0ZW1zIHRvIHJlYWQgYmVmb3JlIHNwbGl0dGluZy4KICAgIGxlZnRfZnJhY3Rpb246IGxlZnQgZnJhY3Rpb24gZm9yIGJpbmFyeSBzcGxpdHRpbmcuCiAgICBsZWZ0X3Jlc3VsdDogcmVzdWx0IHJlY2VpdmVkIGJ5IHNwbGl0dGluZyBhdCBsZWZ0IGZyYWN0aW9uLgogICAgcmlnaHRfZnJhY3Rpb246IHJpZ2h0IGZyYWN0aW9uIGZvciBiaW5hcnkgc3BsaXR0aW5nLgogICAgcmlnaHRfcmVzdWx0OiByZXN1bHQgcmVjZWl2ZWQgYnkgc3BsaXR0aW5nIGF0IHJpZ2h0IGZyYWN0aW9uLgogICAgc3RhdHM6IGEgYGBTcGxpdEZyYWN0aW9uU3RhdGlzdGljc2BgIGZvciBzdG9yaW5nIHJlc3VsdHMuCiAgIiIiCiAgYXNzZXJ0IHJpZ2h0X2ZyYWN0aW9uID4gbGVmdF9mcmFjdGlvbgoKICBpZiByaWdodF9mcmFjdGlvbiAtIGxlZnRfZnJhY3Rpb24gPCAwLjAwMToKICAgICMgVGhpcyBwcmV2ZW50cyBpbmZpbml0ZSByZWN1cnNpb24uCiAgICByZXR1cm4KCiAgbWlkZGxlX2ZyYWN0aW9uID0gKGxlZnRfZnJhY3Rpb24gKyByaWdodF9mcmFjdGlvbikgLyAyCgogIGlmIGxlZnRfcmVzdWx0IGlzIE5vbmU6CiAgICBsZWZ0X3Jlc3VsdCA9IF9hc3NlcnRfc3BsaXRfYXRfZnJhY3Rpb25fYmVoYXZpb3IoCiAgICAgICAgc291cmNlLCBleHBlY3RlZF9pdGVtcywgbnVtX2l0ZW1zX3RvX3JlYWRfYmVmb3JlX3NwbGl0LCBsZWZ0X2ZyYWN0aW9uLAogICAgICAgIEV4cGVjdGVkU3BsaXRPdXRjb21lLk1VU1RfQkVfQ09OU0lTVEVOVF9JRl9TVUNDRUVEUykKCiAgaWYgcmlnaHRfcmVzdWx0IGlzIE5vbmU6CiAgICByaWdodF9yZXN1bHQgPSBfYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2JlaGF2aW9yKAogICAgICAgIHNvdXJjZSwgZXhwZWN0ZWRfaXRlbXMsIG51bV9pdGVtc190b19yZWFkX2JlZm9yZV9zcGxpdCwKICAgICAgICByaWdodF9mcmFjdGlvbiwgRXhwZWN0ZWRTcGxpdE91dGNvbWUuTVVTVF9CRV9DT05TSVNURU5UX0lGX1NVQ0NFRURTKQoKICBtaWRkbGVfcmVzdWx0ID0gX2Fzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9iZWhhdmlvcigKICAgICAgc291cmNlLCBleHBlY3RlZF9pdGVtcywgbnVtX2l0ZW1zX3RvX3JlYWRfYmVmb3JlX3NwbGl0LCBtaWRkbGVfZnJhY3Rpb24sCiAgICAgIEV4cGVjdGVkU3BsaXRPdXRjb21lLk1VU1RfQkVfQ09OU0lTVEVOVF9JRl9TVUNDRUVEUykKCiAgaWYgbWlkZGxlX3Jlc3VsdFsxXSAhPSAtMToKICAgIHN0YXRzLnN1Y2Nlc3NmdWxfZnJhY3Rpb25zLmFwcGVuZChtaWRkbGVfZnJhY3Rpb24pCiAgaWYgbWlkZGxlX3Jlc3VsdFsxXSA+IDA6CiAgICBzdGF0cy5ub25fdHJpdmlhbF9mcmFjdGlvbnMuYXBwZW5kKG1pZGRsZV9mcmFjdGlvbikKCiAgIyBUd28gc3BsaXQgcmVzdWx0cyBhcmUgZXF1aXZhbGVudCBpZiBwcmltYXJ5IGFuZCByZXNpZHVhbCByYW5nZXMgb2YgdGhlbQogICMgcHJvZHVjZSB0aGUgc2FtZSBudW1iZXIgb2YgcmVjb3JkcyAoc2ltcGx5IGNoZWNraW5nIHRoZSBzaXplIG9mIHByaW1hcnkKICAjIGVub3VnaCBzaW5jZSB0aGUgdG90YWwgbnVtYmVyIG9mIHJlY29yZHMgaXMgY29uc3RhbnQpLgoKICBpZiBsZWZ0X3Jlc3VsdFswXSAhPSBtaWRkbGVfcmVzdWx0WzBdOgogICAgYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2JpbmFyeSgKICAgICAgICBzb3VyY2UsIGV4cGVjdGVkX2l0ZW1zLCBudW1faXRlbXNfdG9fcmVhZF9iZWZvcmVfc3BsaXQsIGxlZnRfZnJhY3Rpb24sCiAgICAgICAgbGVmdF9yZXN1bHQsIG1pZGRsZV9mcmFjdGlvbiwgbWlkZGxlX3Jlc3VsdCwgc3RhdHMpCgogICMgV2Ugc3BlY2lhbCBjYXNlIHJpZ2h0X2ZyYWN0aW9uPTEuMCBzaW5jZSB0aGF0IGNvdWxkIGZhaWwgZHVlIHRvIGJlaW5nIG91dAogICMgb2YgcmFuZ2UuIChldmVuIGlmIGEgZHluYW1pYyBzcGxpdCBmYWlscyBhdCAnbWlkZGxlX2ZyYWN0aW9uJyBhbmQgYXQKICAjIGZyYWN0aW9uIDEuMCwgdGhlcmUgbWlnaHQgYmUgZnJhY3Rpb25zIGluIHJhbmdlICgnbWlkZGxlX2ZyYWN0aW9uJywgMS4wKQogICMgd2hlcmUgZHluYW1pYyBzcGxpdHRpbmcgc3VjY2VlZHMpLgogIGlmIHJpZ2h0X2ZyYWN0aW9uID09IDEuMCBvciBtaWRkbGVfcmVzdWx0WzBdICE9IHJpZ2h0X3Jlc3VsdFswXToKICAgIGFzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9iaW5hcnkoCiAgICAgICAgc291cmNlLCBleHBlY3RlZF9pdGVtcywgbnVtX2l0ZW1zX3RvX3JlYWRfYmVmb3JlX3NwbGl0LAogICAgICAgIG1pZGRsZV9mcmFjdGlvbiwgbWlkZGxlX3Jlc3VsdCwgcmlnaHRfZnJhY3Rpb24sIHJpZ2h0X3Jlc3VsdCwgc3RhdHMpCgoKTUFYX0NPTkNVUlJFTlRfU1BMSVRUSU5HX1RSSUFMU19QRVJfSVRFTSA9IDEwMApNQVhfQ09OQ1VSUkVOVF9TUExJVFRJTkdfVFJJQUxTX1RPVEFMID0gMTAwMAoKCmRlZiBhc3NlcnRfc3BsaXRfYXRfZnJhY3Rpb25fZXhoYXVzdGl2ZSgKICAgIHNvdXJjZSwgc3RhcnRfcG9zaXRpb249Tm9uZSwgc3RvcF9wb3NpdGlvbj1Ob25lLAogICAgcGVyZm9ybV9tdWx0aV90aHJlYWRlZF90ZXN0PVRydWUpOgogICIiIlBlcmZvcm1zIGFuZCB0ZXN0cyBkeW5hbWljIHdvcmsgcmViYWxhbmNpbmcgZXhoYXVzdGl2ZWx5LgoKICBBc3NlcnRzIHRoYXQgZm9yIGVhY2ggcG9zc2libGUgc3RhcnQgcG9zaXRpb24sIGEgc291cmNlIGNhbiBiZSBzcGxpdCBhdAogIGV2ZXJ5IGludGVyZXN0aW5nIGZyYWN0aW9uIChoYWxmd2F5IGJldHdlZW4gdHdvIGZyYWN0aW9ucyB0aGF0IGRpZmZlciBieSBhdAogIGxlYXN0IG9uZSBpdGVtKSBhbmQgdGhlIHJlc3VsdHMgYXJlIGNvbnNpc3RlbnQgaWYgYSBzcGxpdCBzdWNjZWVkcy4KICBWZXJpZmllcyBtdWx0aSB0aHJlYWRlZCBzcGxpdHRpbmcgYXMgd2VsbC4KCiAgQXJnczoKICAgIHNvdXJjZSAofmFwYWNoZV9iZWFtLmlvLmlvYmFzZS5Cb3VuZGVkU291cmNlKTogdGhlIHNvdXJjZSB0byBwZXJmb3JtCiAgICAgIGR5bmFtaWMgc3BsaXR0aW5nIG9uLgogICAgcGVyZm9ybV9tdWx0aV90aHJlYWRlZF90ZXN0IChib29sKTogaWYgOmRhdGE6YFRydWVgIHBlcmZvcm1zIGEKICAgICAgbXVsdGktdGhyZWFkZWQgdGVzdCwgb3RoZXJ3aXNlIHRoaXMgdGVzdCBpcyBza2lwcGVkLgoKICBSYWlzZXM6CiAgICB+ZXhjZXB0aW9ucy5WYWx1ZUVycm9yOiBpZiB0aGUgZXhoYXVzdGl2ZSBzcGxpdHRpbmcgdGVzdCBmYWlscy4KICAiIiIKCiAgZXhwZWN0ZWRfaXRlbXMgPSByZWFkX2Zyb21fc291cmNlKHNvdXJjZSwgc3RhcnRfcG9zaXRpb24sIHN0b3BfcG9zaXRpb24pCiAgaWYgbm90IGV4cGVjdGVkX2l0ZW1zOgogICAgcmFpc2UgVmFsdWVFcnJvcignU291cmNlICVyIGlzIGVtcHR5LicgJSBzb3VyY2UpCgogIGlmIGxlbihleHBlY3RlZF9pdGVtcykgPT0gMToKICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1NvdXJjZSAlciBvbmx5IHJlYWRzIGEgc2luZ2xlIGl0ZW0uJyAlIHNvdXJjZSkKCiAgYWxsX25vbl90cml2aWFsX2ZyYWN0aW9ucyA9IFtdCgogIGFueV9zdWNjZXNzZnVsX2ZyYWN0aW9ucyA9IEZhbHNlCiAgYW55X25vbl90cml2aWFsX2ZyYWN0aW9ucyA9IEZhbHNlCgogIGZvciBpIGluIHJhbmdlKGxlbihleHBlY3RlZF9pdGVtcykpOgogICAgc3RhdHMgPSBTcGxpdEZyYWN0aW9uU3RhdGlzdGljcyhbXSwgW10pCgogICAgYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2JpbmFyeSgKICAgICAgICBzb3VyY2UsIGV4cGVjdGVkX2l0ZW1zLCBpLCAwLjAsIE5vbmUsIDEuMCwgTm9uZSwgc3RhdHMpCgogICAgaWYgc3RhdHMuc3VjY2Vzc2Z1bF9mcmFjdGlvbnM6CiAgICAgIGFueV9zdWNjZXNzZnVsX2ZyYWN0aW9ucyA9IFRydWUKICAgIGlmIHN0YXRzLm5vbl90cml2aWFsX2ZyYWN0aW9uczoKICAgICAgYW55X25vbl90cml2aWFsX2ZyYWN0aW9ucyA9IFRydWUKCiAgICBhbGxfbm9uX3RyaXZpYWxfZnJhY3Rpb25zLmFwcGVuZChzdGF0cy5ub25fdHJpdmlhbF9mcmFjdGlvbnMpCgogIGlmIG5vdCBhbnlfc3VjY2Vzc2Z1bF9mcmFjdGlvbnM6CiAgICByYWlzZSBWYWx1ZUVycm9yKCdTcGxpdEF0RnJhY3Rpb24gdGVzdCBjb21wbGV0ZWQgdmFjdW91c2x5OiBubyAnCiAgICAgICAgICAgICAgICAgICAgICdzdWNjZXNzZnVsIHNwbGl0IGZyYWN0aW9ucyBmb3VuZCcpCgogIGlmIG5vdCBhbnlfbm9uX3RyaXZpYWxfZnJhY3Rpb25zOgogICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAnU3BsaXRBdEZyYWN0aW9uIHRlc3QgY29tcGxldGVkIHZhY3VvdXNseTogbm8gbm9uLXRyaXZpYWwgc3BsaXQgJwogICAgICAgICdmcmFjdGlvbnMgZm91bmQnKQoKICBpZiBub3QgcGVyZm9ybV9tdWx0aV90aHJlYWRlZF90ZXN0OgogICAgcmV0dXJuCgogIG51bV90b3RhbF90cmlhbHMgPSAwCiAgZm9yIGkgaW4gcmFuZ2UobGVuKGV4cGVjdGVkX2l0ZW1zKSk6CiAgICBub25fdHJpdmlhbF9mcmFjdGlvbnMgPSBbMi4wXSAgIyAyLjAgaXMgbGFyZ2VyIHRoYW4gYW55IHZhbGlkIGZyYWN0aW9uLgogICAgbm9uX3RyaXZpYWxfZnJhY3Rpb25zLmV4dGVuZChhbGxfbm9uX3RyaXZpYWxfZnJhY3Rpb25zW2ldKQogICAgbWluX25vbl90cml2aWFsX2ZyYWN0aW9uID0gbWluKG5vbl90cml2aWFsX2ZyYWN0aW9ucykKCiAgICBpZiBtaW5fbm9uX3RyaXZpYWxfZnJhY3Rpb24gPT0gMi4wOgogICAgICAjIFRoaXMgd2lsbCBub3QgaGFwcGVuIGFsbCB0aGUgdGltZS4gT3RoZXJ3aXNlIHByZXZpb3VzIHRlc3Qgd2lsbCBmYWlsCiAgICAgICMgZHVlIHRvIHZhY3VvdXNuZXNzLgogICAgICBjb250aW51ZQoKICAgIG51bV90cmlhbHMgPSAwCiAgICBoYXZlX3N1Y2Nlc3MgPSBGYWxzZQogICAgaGF2ZV9mYWlsdXJlID0gRmFsc2UKCiAgICB0aHJlYWRfcG9vbCA9IF9UaHJlYWRQb29sKDIpCiAgICB0cnk6CiAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgbnVtX3RyaWFscyArPSAxCiAgICAgICAgaWYgKG51bV90cmlhbHMgPgogICAgICAgICAgICBNQVhfQ09OQ1VSUkVOVF9TUExJVFRJTkdfVFJJQUxTX1BFUl9JVEVNKToKICAgICAgICAgIGxvZ2dpbmcud2FybigKICAgICAgICAgICAgICAnQWZ0ZXIgJWQgY29uY3VycmVudCBzcGxpdHRpbmcgdHJpYWxzIGF0IGl0ZW0gIyVkLCBvYnNlcnZlZCAnCiAgICAgICAgICAgICAgJ29ubHkgJXMsIGdpdmluZyB1cCBvbiB0aGlzIGl0ZW0nLAogICAgICAgICAgICAgIG51bV90cmlhbHMsCiAgICAgICAgICAgICAgaSwKICAgICAgICAgICAgICAnc3VjY2VzcycgaWYgaGF2ZV9zdWNjZXNzIGVsc2UgJ2ZhaWx1cmUnCiAgICAgICAgICApCiAgICAgICAgICBicmVhawoKICAgICAgICBpZiBfYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2NvbmN1cnJlbnQoCiAgICAgICAgICAgIHNvdXJjZSwgZXhwZWN0ZWRfaXRlbXMsIGksIG1pbl9ub25fdHJpdmlhbF9mcmFjdGlvbiwgdGhyZWFkX3Bvb2wpOgogICAgICAgICAgaGF2ZV9zdWNjZXNzID0gVHJ1ZQogICAgICAgIGVsc2U6CiAgICAgICAgICBoYXZlX2ZhaWx1cmUgPSBUcnVlCgogICAgICAgIGlmIGhhdmVfc3VjY2VzcyBhbmQgaGF2ZV9mYWlsdXJlOgogICAgICAgICAgbG9nZ2luZy5pbmZvKCclZCB0cmlhbHMgdG8gb2JzZXJ2ZSBib3RoIHN1Y2Nlc3MgYW5kIGZhaWx1cmUgb2YgJwogICAgICAgICAgICAgICAgICAgICAgICdjb25jdXJyZW50IHNwbGl0dGluZyBhdCBpdGVtICMlZCcsIG51bV90cmlhbHMsIGkpCiAgICAgICAgICBicmVhawogICAgZmluYWxseToKICAgICAgdGhyZWFkX3Bvb2wuY2xvc2UoKQoKICAgIG51bV90b3RhbF90cmlhbHMgKz0gbnVtX3RyaWFscwoKICAgIGlmIG51bV90b3RhbF90cmlhbHMgPiBNQVhfQ09OQ1VSUkVOVF9TUExJVFRJTkdfVFJJQUxTX1RPVEFMOgogICAgICBsb2dnaW5nLndhcm4oJ0FmdGVyICVkIHRvdGFsIGNvbmN1cnJlbnQgc3BsaXR0aW5nIHRyaWFscywgY29uc2lkZXJlZCAnCiAgICAgICAgICAgICAgICAgICAnb25seSAlZCBpdGVtcywgZ2l2aW5nIHVwLicsIG51bV90b3RhbF90cmlhbHMsIGkpCiAgICAgIGJyZWFrCgogIGxvZ2dpbmcuaW5mbygnJWQgdG90YWwgY29uY3VycmVudCBzcGxpdHRpbmcgdHJpYWxzIGZvciAlZCBpdGVtcycsCiAgICAgICAgICAgICAgIG51bV90b3RhbF90cmlhbHMsIGxlbihleHBlY3RlZF9pdGVtcykpCgoKZGVmIF9hc3NlcnRfc3BsaXRfYXRfZnJhY3Rpb25fY29uY3VycmVudCgKICAgIHNvdXJjZSwgZXhwZWN0ZWRfaXRlbXMsIG51bV9pdGVtc190b19yZWFkX2JlZm9yZV9zcGxpdHRpbmcsCiAgICBzcGxpdF9mcmFjdGlvbiwgdGhyZWFkX3Bvb2w9Tm9uZSk6CgogIHJhbmdlX3RyYWNrZXIgPSBzb3VyY2UuZ2V0X3JhbmdlX3RyYWNrZXIoTm9uZSwgTm9uZSkKICBzdG9wX3Bvc2l0aW9uX2JlZm9yZV9zcGxpdCA9IHJhbmdlX3RyYWNrZXIuc3RvcF9wb3NpdGlvbigpCiAgcmVhZGVyID0gc291cmNlLnJlYWQocmFuZ2VfdHJhY2tlcikKICByZWFkZXJfaXRlciA9IGl0ZXIocmVhZGVyKQoKICBjdXJyZW50X2l0ZW1zID0gW10KICBmb3IgXyBpbiByYW5nZShudW1faXRlbXNfdG9fcmVhZF9iZWZvcmVfc3BsaXR0aW5nKToKICAgIGN1cnJlbnRfaXRlbXMuYXBwZW5kKG5leHQocmVhZGVyX2l0ZXIpKQoKICBkZWYgcmVhZF9vcl9zcGxpdCh0ZXN0X3BhcmFtcyk6CiAgICBpZiB0ZXN0X3BhcmFtc1swXToKICAgICAgcmV0dXJuIFt2YWwgZm9yIHZhbCBpbiB0ZXN0X3BhcmFtc1sxXV0KICAgIGVsc2U6CiAgICAgIHBvc2l0aW9uID0gdGVzdF9wYXJhbXNbMV0ucG9zaXRpb25fYXRfZnJhY3Rpb24odGVzdF9wYXJhbXNbMl0pCiAgICAgIHJlc3VsdCA9IHRlc3RfcGFyYW1zWzFdLnRyeV9zcGxpdChwb3NpdGlvbikKICAgICAgcmV0dXJuIHJlc3VsdAoKICBpbnB1dHMgPSBbXQogIHBvb2wgPSB0aHJlYWRfcG9vbCBpZiB0aHJlYWRfcG9vbCBlbHNlIF9UaHJlYWRQb29sKDIpCiAgdHJ5OgogICAgaW5wdXRzLmFwcGVuZChbVHJ1ZSwgcmVhZGVyX2l0ZXJdKQogICAgaW5wdXRzLmFwcGVuZChbRmFsc2UsIHJhbmdlX3RyYWNrZXIsIHNwbGl0X2ZyYWN0aW9uXSkKCiAgICByZXN1bHRzID0gcG9vbC5tYXAocmVhZF9vcl9zcGxpdCwgaW5wdXRzKQogIGZpbmFsbHk6CiAgICBpZiBub3QgdGhyZWFkX3Bvb2w6CiAgICAgIHBvb2wuY2xvc2UoKQoKICBjdXJyZW50X2l0ZW1zLmV4dGVuZChyZXN1bHRzWzBdKQogIHByaW1hcnlfcmFuZ2UgPSAoCiAgICAgIHJhbmdlX3RyYWNrZXIuc3RhcnRfcG9zaXRpb24oKSwgcmFuZ2VfdHJhY2tlci5zdG9wX3Bvc2l0aW9uKCkpCgogIHNwbGl0X3Jlc3VsdCA9IHJlc3VsdHNbMV0KICByZXNpZHVhbF9yYW5nZSA9ICgKICAgICAgc3BsaXRfcmVzdWx0WzBdLCBzdG9wX3Bvc2l0aW9uX2JlZm9yZV9zcGxpdCkgaWYgc3BsaXRfcmVzdWx0IGVsc2UgTm9uZQoKICByZXMgPSBfdmVyaWZ5X3NpbmdsZV9zcGxpdF9mcmFjdGlvbl9yZXN1bHQoCiAgICAgIHNvdXJjZSwgZXhwZWN0ZWRfaXRlbXMsIGN1cnJlbnRfaXRlbXMsIHNwbGl0X3Jlc3VsdCwKICAgICAgcHJpbWFyeV9yYW5nZSwgcmVzaWR1YWxfcmFuZ2UsIHNwbGl0X2ZyYWN0aW9uKQoKICByZXR1cm4gcmVzWzFdID4gMAp9ciWDAAAoWCEAAABhc3NlcnRfc3BsaXRfYXRfZnJhY3Rpb25fYmVoYXZpb3JYAwAAAGRlZkvwTQ0Bh1gNAAAAX3JhbmdlX3RvX3N0clgDAAAAZGVmTVYBTVgBh1gUAAAARXhwZWN0ZWRTcGxpdE91dGNvbWVYBQAAAGNsYXNzS0ZLSodYHgAAAGFzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9mYWlsc1gDAAAAZGVmTagBTbgBh1gfAAAAYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2JpbmFyeVgDAAAAZGVmTboBTfoBh1gQAAAAcmVhZF9mcm9tX3NvdXJjZVgDAAAAZGVmS1RLaYdYJAAAAF9hc3NlcnRfc3BsaXRfYXRfZnJhY3Rpb25fY29uY3VycmVudFgDAAAAZGVmTW8CTZwCh1gjAAAAYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2V4aGF1c3RpdmVYAwAAAGRlZk0AAk1tAodYJQAAAGFzc2VydF9zb3VyY2VzX2VxdWFsX3JlZmVyZW5jZV9zb3VyY2VYAwAAAGRlZktzS7WHWCQAAABfdmVyaWZ5X3NpbmdsZV9zcGxpdF9mcmFjdGlvbl9yZXN1bHRYAwAAAGRlZk1aAU2BAYdYCwAAAF9UaHJlYWRQb29sWAMAAABkZWZLa0txh1geAAAAYXNzZXJ0X3JlZW50cmFudF9yZWFkc19zdWNjZWVkWAMAAABkZWZLt0vuh1giAAAAX2Fzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9iZWhhdmlvclgDAAAAZGVmTQ8BTVQBh1gyAAAAX2Fzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9jb25jdXJyZW50LnJlYWRfb3Jfc3BsaXRYAwAAAGRlZk18Ak2DAodYMAAAAGFzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9zdWNjZWVkc19hbmRfY29uc2lzdGVudFgDAAAAZGVmTYMBTaYBh3V9ciaDAAAoWCEAAABhc3NlcnRfc3BsaXRfYXRfZnJhY3Rpb25fYmVoYXZpb3JqBFwAAFgeAAAAYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2ZhaWxzagRcAABYHwAAAGFzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9iaW5hcnlqBFwAAFgQAAAAcmVhZF9mcm9tX3NvdXJjZWoEXAAAWCMAAABhc3NlcnRfc3BsaXRfYXRfZnJhY3Rpb25fZXhoYXVzdGl2ZWoEXAAAWCUAAABhc3NlcnRfc291cmNlc19lcXVhbF9yZWZlcmVuY2Vfc291cmNlagRcAABYHgAAAGFzc2VydF9yZWVudHJhbnRfcmVhZHNfc3VjY2VlZGoEXAAAWDAAAABhc3NlcnRfc3BsaXRfYXRfZnJhY3Rpb25fc3VjY2VlZHNfYW5kX2NvbnNpc3RlbnRqBFwAAHVqfWkAAFggAAAAYXBhY2hlX2JlYW0uaW8uc291cmNlX3Rlc3RfdXRpbHNyJ4MAAIWBciiDAAB9cimDAABidFUZYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbShYkW0AACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoiIiJGaWxlIHN5c3RlbSBhYnN0cmFjdGlvbiBmb3IgZmlsZS1iYXNlZCBzb3VyY2VzIGFuZCBzaW5rcy4KCk5vdGUgdG8gaW1wbGVtZW50b3JzOgogICJwYXRoIiBhcmd1bWVudHMgd2lsbCBiZSBVUkxzIGluIHRoZSBmb3JtIHNjaGVtZTovL2Zvby9iYXIuIFRoZSBleGNlcHRpb24gaXMKICBMb2NhbEZpbGVTeXN0ZW0sIHdoaWNoIGdldHMgdW5peC1zdHlsZSBwYXRocyBpbiB0aGUgZm9ybSAvZm9vL2Jhci4KIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydApmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCgppbXBvcnQgYWJjCmltcG9ydCBiejIKaW1wb3J0IGlvCmltcG9ydCBsb2dnaW5nCmltcG9ydCBvcwppbXBvcnQgcG9zaXhwYXRoCmltcG9ydCByZQppbXBvcnQgdGltZQppbXBvcnQgemxpYgpmcm9tIGJ1aWx0aW5zIGltcG9ydCBvYmplY3QKZnJvbSBidWlsdGlucyBpbXBvcnQgemlwCgpmcm9tIGZ1dHVyZS51dGlscyBpbXBvcnQgd2l0aF9tZXRhY2xhc3MKZnJvbSBwYXN0LmJ1aWx0aW5zIGltcG9ydCBsb25nCmZyb20gcGFzdC5idWlsdGlucyBpbXBvcnQgdW5pY29kZQoKZnJvbSBhcGFjaGVfYmVhbS51dGlscy5wbHVnaW4gaW1wb3J0IEJlYW1QbHVnaW4KCmxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQoKREVGQVVMVF9SRUFEX0JVRkZFUl9TSVpFID0gMTYgKiAxMDI0ICogMTAyNAoKX19hbGxfXyA9IFsnQ29tcHJlc3Npb25UeXBlcycsICdDb21wcmVzc2VkRmlsZScsICdGaWxlTWV0YWRhdGEnLCAnRmlsZVN5c3RlbScsCiAgICAgICAgICAgJ01hdGNoUmVzdWx0J10KCgpjbGFzcyBDb21wcmVzc2lvblR5cGVzKG9iamVjdCk6CiAgIiIiRW51bS1saWtlIGNsYXNzIHJlcHJlc2VudGluZyBrbm93biBjb21wcmVzc2lvbiB0eXBlcy4iIiIKCiAgIyBEZXRlY3QgY29tcHJlc3Npb24gYmFzZWQgb24gZmlsZW5hbWUgZXh0ZW5zaW9uLgogICMKICAjIFRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9ucyBhcmUgY3VycmVudGx5IHJlY29nbml6ZWQgYnkgYXV0by1kZXRlY3Rpb246CiAgIyAgIC5iejIgKGltcGxpZXMgQlpJUDIgYXMgZGVzY3JpYmVkIGJlbG93KS4KICAjICAgLmd6ICAoaW1wbGllcyBHWklQIGFzIGRlc2NyaWJlZCBiZWxvdykKICAjIEFueSBub24tcmVjb2duaXplZCBleHRlbnNpb24gaW1wbGllcyBVTkNPTVBSRVNTRUQgYXMgZGVzY3JpYmVkIGJlbG93LgogIEFVVE8gPSAnYXV0bycKCiAgIyBCWklQMiBjb21wcmVzc2lvbi4KICBCWklQMiA9ICdiemlwMicKCiAgIyBHWklQIGNvbXByZXNzaW9uIChkZWZsYXRlIHdpdGggR1pJUCBoZWFkZXJzKS4KICBHWklQID0gJ2d6aXAnCgogICMgVW5jb21wcmVzc2VkIChpLmUuLCBtYXkgYmUgc3BsaXQpLgogIFVOQ09NUFJFU1NFRCA9ICd1bmNvbXByZXNzZWQnCgogIEBjbGFzc21ldGhvZAogIGRlZiBpc192YWxpZF9jb21wcmVzc2lvbl90eXBlKGNscywgY29tcHJlc3Npb25fdHlwZSk6CiAgICAiIiJSZXR1cm5zIFRydWUgZm9yIHZhbGlkIGNvbXByZXNzaW9uIHR5cGVzLCBGYWxzZSBvdGhlcndpc2UuIiIiCiAgICB0eXBlcyA9IHNldChbCiAgICAgICAgQ29tcHJlc3Npb25UeXBlcy5BVVRPLAogICAgICAgIENvbXByZXNzaW9uVHlwZXMuQlpJUDIsCiAgICAgICAgQ29tcHJlc3Npb25UeXBlcy5HWklQLAogICAgICAgIENvbXByZXNzaW9uVHlwZXMuVU5DT01QUkVTU0VECiAgICBdKQogICAgcmV0dXJuIGNvbXByZXNzaW9uX3R5cGUgaW4gdHlwZXMKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIG1pbWVfdHlwZShjbHMsIGNvbXByZXNzaW9uX3R5cGUsIGRlZmF1bHQ9J2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScpOgogICAgbWltZV90eXBlc19ieV9jb21wcmVzc2lvbl90eXBlID0gewogICAgICAgIGNscy5CWklQMjogJ2FwcGxpY2F0aW9uL3gtYnoyJywKICAgICAgICBjbHMuR1pJUDogJ2FwcGxpY2F0aW9uL3gtZ3ppcCcsCiAgICB9CiAgICByZXR1cm4gbWltZV90eXBlc19ieV9jb21wcmVzc2lvbl90eXBlLmdldChjb21wcmVzc2lvbl90eXBlLCBkZWZhdWx0KQoKICBAY2xhc3NtZXRob2QKICBkZWYgZGV0ZWN0X2NvbXByZXNzaW9uX3R5cGUoY2xzLCBmaWxlX3BhdGgpOgogICAgIiIiUmV0dXJucyB0aGUgY29tcHJlc3Npb24gdHlwZSBvZiBhIGZpbGUgKGJhc2VkIG9uIGl0cyBzdWZmaXgpLiIiIgogICAgY29tcHJlc3Npb25fdHlwZXNfYnlfc3VmZml4ID0geycuYnoyJzogY2xzLkJaSVAyLCAnLmd6JzogY2xzLkdaSVB9CiAgICBsb3dlcmNhc2VkX3BhdGggPSBmaWxlX3BhdGgubG93ZXIoKQogICAgZm9yIHN1ZmZpeCwgY29tcHJlc3Npb25fdHlwZSBpbiBjb21wcmVzc2lvbl90eXBlc19ieV9zdWZmaXguaXRlbXMoKToKICAgICAgaWYgbG93ZXJjYXNlZF9wYXRoLmVuZHN3aXRoKHN1ZmZpeCk6CiAgICAgICAgcmV0dXJuIGNvbXByZXNzaW9uX3R5cGUKICAgIHJldHVybiBjbHMuVU5DT01QUkVTU0VECgoKY2xhc3MgQ29tcHJlc3NlZEZpbGUob2JqZWN0KToKICAiIiJGaWxlIHdyYXBwZXIgZm9yIGVhc2llciBoYW5kbGluZyBvZiBjb21wcmVzc2VkIGZpbGVzLiIiIgogICMgWFhYOiBUaGlzIGNsYXNzIGlzIG5vdCB0aHJlYWQgc2FmZSBpbiB0aGUgcmVhZCBwYXRoLgoKICAjIFRoZSBiaXQgbWFzayB0byB1c2UgZm9yIHRoZSB3Yml0cyBwYXJhbWV0ZXJzIG9mIHRoZSB6bGliIGNvbXByZXNzb3IgYW5kCiAgIyBkZWNvbXByZXNzb3Igb2JqZWN0cy4KICBfZ3ppcF9tYXNrID0gemxpYi5NQVhfV0JJVFMgfCAxNiAgIyBNYXNrIHdoZW4gdXNpbmcgR1pJUCBoZWFkZXJzLgoKICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgZmlsZW9iaiwKICAgICAgICAgICAgICAgY29tcHJlc3Npb25fdHlwZT1Db21wcmVzc2lvblR5cGVzLkdaSVAsCiAgICAgICAgICAgICAgIHJlYWRfc2l6ZT1ERUZBVUxUX1JFQURfQlVGRkVSX1NJWkUpOgogICAgaWYgbm90IGZpbGVvYmo6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ZpbGUgb2JqZWN0IG11c3Qgbm90IGJlIE5vbmUnKQoKICAgIGlmIG5vdCBDb21wcmVzc2lvblR5cGVzLmlzX3ZhbGlkX2NvbXByZXNzaW9uX3R5cGUoY29tcHJlc3Npb25fdHlwZSk6CiAgICAgIHJhaXNlIFR5cGVFcnJvcignY29tcHJlc3Npb25fdHlwZSBtdXN0IGJlIENvbXByZXNzaW9uVHlwZSBvYmplY3QgYnV0ICcKICAgICAgICAgICAgICAgICAgICAgICd3YXMgJXMnICUgdHlwZShjb21wcmVzc2lvbl90eXBlKSkKICAgIGlmIGNvbXByZXNzaW9uX3R5cGUgaW4gKENvbXByZXNzaW9uVHlwZXMuQVVUTywgQ29tcHJlc3Npb25UeXBlcy5VTkNPTVBSRVNTRUQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICdDYW5ub3QgY3JlYXRlIG9iamVjdCB3aXRoIHVuc3BlY2lmaWVkIG9yIG5vIGNvbXByZXNzaW9uJykKCiAgICBzZWxmLl9maWxlID0gZmlsZW9iagogICAgc2VsZi5fY29tcHJlc3Npb25fdHlwZSA9IGNvbXByZXNzaW9uX3R5cGUKCiAgICBpZiBzZWxmLl9maWxlLnRlbGwoKSAhPSAwOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdGaWxlIG9iamVjdCBtdXN0IGJlIGF0IHBvc2l0aW9uIDAgYnV0IHdhcyAlZCcgJQogICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUudGVsbCgpKQogICAgc2VsZi5fdW5jb21wcmVzc2VkX3Bvc2l0aW9uID0gMAogICAgc2VsZi5fdW5jb21wcmVzc2VkX3NpemUgPSBOb25lCgogICAgaWYgc2VsZi5yZWFkYWJsZSgpOgogICAgICBzZWxmLl9yZWFkX3NpemUgPSByZWFkX3NpemUKICAgICAgc2VsZi5fcmVhZF9idWZmZXIgPSBpby5CeXRlc0lPKCkKICAgICAgc2VsZi5fcmVhZF9wb3NpdGlvbiA9IDAKICAgICAgc2VsZi5fcmVhZF9lb2YgPSBGYWxzZQoKICAgICAgc2VsZi5faW5pdGlhbGl6ZV9kZWNvbXByZXNzb3IoKQogICAgZWxzZToKICAgICAgc2VsZi5fZGVjb21wcmVzc29yID0gTm9uZQoKICAgIGlmIHNlbGYud3JpdGVhYmxlKCk6CiAgICAgIHNlbGYuX2luaXRpYWxpemVfY29tcHJlc3NvcigpCiAgICBlbHNlOgogICAgICBzZWxmLl9jb21wcmVzc29yID0gTm9uZQoKICBkZWYgX2luaXRpYWxpemVfZGVjb21wcmVzc29yKHNlbGYpOgogICAgaWYgc2VsZi5fY29tcHJlc3Npb25fdHlwZSA9PSBDb21wcmVzc2lvblR5cGVzLkJaSVAyOgogICAgICBzZWxmLl9kZWNvbXByZXNzb3IgPSBiejIuQloyRGVjb21wcmVzc29yKCkKICAgIGVsc2U6CiAgICAgIGFzc2VydCBzZWxmLl9jb21wcmVzc2lvbl90eXBlID09IENvbXByZXNzaW9uVHlwZXMuR1pJUAogICAgICBzZWxmLl9kZWNvbXByZXNzb3IgPSB6bGliLmRlY29tcHJlc3NvYmooc2VsZi5fZ3ppcF9tYXNrKQoKICBkZWYgX2luaXRpYWxpemVfY29tcHJlc3NvcihzZWxmKToKICAgIGlmIHNlbGYuX2NvbXByZXNzaW9uX3R5cGUgPT0gQ29tcHJlc3Npb25UeXBlcy5CWklQMjoKICAgICAgc2VsZi5fY29tcHJlc3NvciA9IGJ6Mi5CWjJDb21wcmVzc29yKCkKICAgIGVsc2U6CiAgICAgIGFzc2VydCBzZWxmLl9jb21wcmVzc2lvbl90eXBlID09IENvbXByZXNzaW9uVHlwZXMuR1pJUAogICAgICBzZWxmLl9jb21wcmVzc29yID0gemxpYi5jb21wcmVzc29iaih6bGliLlpfREVGQVVMVF9DT01QUkVTU0lPTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemxpYi5ERUZMQVRFRCwgc2VsZi5fZ3ppcF9tYXNrKQoKICBkZWYgcmVhZGFibGUoc2VsZik6CiAgICBtb2RlID0gc2VsZi5fZmlsZS5tb2RlCiAgICByZXR1cm4gJ3InIGluIG1vZGUgb3IgJ2EnIGluIG1vZGUKCiAgZGVmIHdyaXRlYWJsZShzZWxmKToKICAgIG1vZGUgPSBzZWxmLl9maWxlLm1vZGUKICAgIHJldHVybiAndycgaW4gbW9kZSBvciAnYScgaW4gbW9kZQoKICBkZWYgd3JpdGUoc2VsZiwgZGF0YSk6CiAgICAiIiJXcml0ZSBkYXRhIHRvIGZpbGUuIiIiCiAgICBpZiBub3Qgc2VsZi5fY29tcHJlc3NvcjoKICAgICAgcmFpc2UgVmFsdWVFcnJvcignY29tcHJlc3NvciBub3QgaW5pdGlhbGl6ZWQnKQogICAgc2VsZi5fdW5jb21wcmVzc2VkX3Bvc2l0aW9uICs9IGxlbihkYXRhKQogICAgY29tcHJlc3NlZCA9IHNlbGYuX2NvbXByZXNzb3IuY29tcHJlc3MoZGF0YSkKICAgIGlmIGNvbXByZXNzZWQ6CiAgICAgIHNlbGYuX2ZpbGUud3JpdGUoY29tcHJlc3NlZCkKCiAgZGVmIF9mZXRjaF90b19pbnRlcm5hbF9idWZmZXIoc2VsZiwgbnVtX2J5dGVzKToKICAgICIiIkZldGNoIHVwIHRvIG51bV9ieXRlcyBpbnRvIHRoZSBpbnRlcm5hbCBidWZmZXIuIiIiCiAgICBpZiAobm90IHNlbGYuX3JlYWRfZW9mIGFuZCBzZWxmLl9yZWFkX3Bvc2l0aW9uID4gMCBhbmQKICAgICAgICAoc2VsZi5fcmVhZF9idWZmZXIudGVsbCgpIC0gc2VsZi5fcmVhZF9wb3NpdGlvbikgPCBudW1fYnl0ZXMpOgogICAgICAjIFRoZXJlIGFyZW4ndCBlbm91Z2ggbnVtYmVyIG9mIGJ5dGVzIHRvIGFjY29tbW9kYXRlIGEgcmVhZCwgc28gd2UKICAgICAgIyBwcmVwYXJlIGZvciBhIHBvc3NpYmx5IGxhcmdlIHJlYWQgYnkgY2xlYXJpbmcgdXAgYWxsIGludGVybmFsIGJ1ZmZlcnMKICAgICAgIyBidXQgd2l0aG91dCBkcm9wcGluZyBhbnkgcHJldmlvdXMgaGVsZCBkYXRhLgogICAgICBzZWxmLl9yZWFkX2J1ZmZlci5zZWVrKHNlbGYuX3JlYWRfcG9zaXRpb24pCiAgICAgIGRhdGEgPSBzZWxmLl9yZWFkX2J1ZmZlci5yZWFkKCkKICAgICAgc2VsZi5fY2xlYXJfcmVhZF9idWZmZXIoKQogICAgICBzZWxmLl9yZWFkX2J1ZmZlci53cml0ZShkYXRhKQoKICAgIHdoaWxlIG5vdCBzZWxmLl9yZWFkX2VvZiBhbmQgKHNlbGYuX3JlYWRfYnVmZmVyLnRlbGwoKSAtIHNlbGYuX3JlYWRfcG9zaXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA8IG51bV9ieXRlczoKICAgICAgIyBDb250aW51ZSByZWFkaW5nIGZyb20gdGhlIHVuZGVybHlpbmcgZmlsZSBvYmplY3QgdW50aWwgZW5vdWdoIGJ5dGVzIGFyZQogICAgICAjIGF2YWlsYWJsZSwgb3IgRU9GIGlzIHJlYWNoZWQuCiAgICAgIGJ1ZiA9IHNlbGYuX2ZpbGUucmVhZChzZWxmLl9yZWFkX3NpemUpCiAgICAgIGlmIGJ1ZjoKICAgICAgICBkZWNvbXByZXNzZWQgPSBzZWxmLl9kZWNvbXByZXNzb3IuZGVjb21wcmVzcyhidWYpCiAgICAgICAgZGVsIGJ1ZiAgIyBGcmVlIHVwIHNvbWUgcG9zc2libHkgbGFyZ2UgYW5kIG5vLWxvbmdlci1uZWVkZWQgbWVtb3J5LgogICAgICAgIHNlbGYuX3JlYWRfYnVmZmVyLndyaXRlKGRlY29tcHJlc3NlZCkKICAgICAgZWxzZToKICAgICAgICAjIEVPRiBvZiBjdXJyZW50IHN0cmVhbSByZWFjaGVkLgogICAgICAgICMKICAgICAgICAjIEFueSB1bmNvbXByZXNzZWQgZGF0YSBhdCB0aGUgZW5kIG9mIHRoZSBzdHJlYW0gb2YgYSBnemlwIG9yIGJ6aXAyCiAgICAgICAgIyBmaWxlIHRoYXQgaXMgbm90IGNvcnJ1cHRlZCBwb2ludHMgdG8gYSBjb25jYXRlbmF0ZWQgY29tcHJlc3NlZAogICAgICAgICMgZmlsZS4gV2UgcmVhZCBjb25jYXRlbmF0ZWQgZmlsZXMgYnkgcmVjdXJzaXZlbHkgY3JlYXRpbmcgZGVjb21wcmVzc29yCiAgICAgICAgIyBvYmplY3RzIGZvciB0aGUgdW51c2VkIGNvbXByZXNzZWQgZGF0YS4KICAgICAgICBpZiAoc2VsZi5fY29tcHJlc3Npb25fdHlwZSA9PSBDb21wcmVzc2lvblR5cGVzLkJaSVAyIG9yCiAgICAgICAgICAgIHNlbGYuX2NvbXByZXNzaW9uX3R5cGUgPT0gQ29tcHJlc3Npb25UeXBlcy5HWklQKToKICAgICAgICAgIGlmIHNlbGYuX2RlY29tcHJlc3Nvci51bnVzZWRfZGF0YSAhPSBiJyc6CiAgICAgICAgICAgIGJ1ZiA9IHNlbGYuX2RlY29tcHJlc3Nvci51bnVzZWRfZGF0YQogICAgICAgICAgICBzZWxmLl9kZWNvbXByZXNzb3IgPSAoCiAgICAgICAgICAgICAgICBiejIuQloyRGVjb21wcmVzc29yKCkKICAgICAgICAgICAgICAgIGlmIHNlbGYuX2NvbXByZXNzaW9uX3R5cGUgPT0gQ29tcHJlc3Npb25UeXBlcy5CWklQMgogICAgICAgICAgICAgICAgZWxzZSB6bGliLmRlY29tcHJlc3NvYmooc2VsZi5fZ3ppcF9tYXNrKSkKICAgICAgICAgICAgZGVjb21wcmVzc2VkID0gc2VsZi5fZGVjb21wcmVzc29yLmRlY29tcHJlc3MoYnVmKQogICAgICAgICAgICBzZWxmLl9yZWFkX2J1ZmZlci53cml0ZShkZWNvbXByZXNzZWQpCiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgZWxzZToKICAgICAgICAgICMgR3ppcCBhbmQgYnppcDIgZm9ybWF0cyBkbyBub3QgcmVxdWlyZSBmbHVzaGluZyByZW1haW5pbmcgZGF0YSBpbiB0aGUKICAgICAgICAgICMgZGVjb21wcmVzc29yIGludG8gdGhlIHJlYWQgYnVmZmVyIHdoZW4gZnVsbHkgZGVjb21wcmVzc2luZyBmaWxlcy4KICAgICAgICAgIHNlbGYuX3JlYWRfYnVmZmVyLndyaXRlKHNlbGYuX2RlY29tcHJlc3Nvci5mbHVzaCgpKQoKICAgICAgICAjIFJlY29yZCB0aGF0IHdlIGhhdmUgaGl0IHRoZSBlbmQgb2YgZmlsZSwgc28gd2Ugd29uJ3QgdW5uZWNlc3NhcmlseQogICAgICAgICMgcmVwZWF0IHRoZSBjb21wbGV0ZW5lc3MgdmVyaWZpY2F0aW9uIHN0ZXAgYWJvdmUuCiAgICAgICAgc2VsZi5fcmVhZF9lb2YgPSBUcnVlCgogIGRlZiBfcmVhZF9mcm9tX2ludGVybmFsX2J1ZmZlcihzZWxmLCByZWFkX2ZuKToKICAgICIiIlJlYWQgZnJvbSB0aGUgaW50ZXJuYWwgYnVmZmVyIGJ5IHVzaW5nIHRoZSBzdXBwbGllZCByZWFkX2ZuLiIiIgogICAgc2VsZi5fcmVhZF9idWZmZXIuc2VlayhzZWxmLl9yZWFkX3Bvc2l0aW9uKQogICAgcmVzdWx0ID0gcmVhZF9mbigpCiAgICBzZWxmLl9yZWFkX3Bvc2l0aW9uICs9IGxlbihyZXN1bHQpCiAgICBzZWxmLl91bmNvbXByZXNzZWRfcG9zaXRpb24gKz0gbGVuKHJlc3VsdCkKICAgIHNlbGYuX3JlYWRfYnVmZmVyLnNlZWsoMCwgb3MuU0VFS19FTkQpICAjIEFsbG93IGZ1dHVyZSB3cml0ZXMuCiAgICByZXR1cm4gcmVzdWx0CgogIGRlZiByZWFkKHNlbGYsIG51bV9ieXRlcyk6CiAgICBpZiBub3Qgc2VsZi5fZGVjb21wcmVzc29yOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdkZWNvbXByZXNzb3Igbm90IGluaXRpYWxpemVkJykKCiAgICBzZWxmLl9mZXRjaF90b19pbnRlcm5hbF9idWZmZXIobnVtX2J5dGVzKQogICAgcmV0dXJuIHNlbGYuX3JlYWRfZnJvbV9pbnRlcm5hbF9idWZmZXIoCiAgICAgICAgbGFtYmRhOiBzZWxmLl9yZWFkX2J1ZmZlci5yZWFkKG51bV9ieXRlcykpCgogIGRlZiByZWFkbGluZShzZWxmKToKICAgICIiIkVxdWl2YWxlbnQgdG8gc3RhbmRhcmQgZmlsZS5yZWFkbGluZSgpLiBTYW1lIHJldHVybiBjb252ZW50aW9ucyBhcHBseS4iIiIKICAgIGlmIG5vdCBzZWxmLl9kZWNvbXByZXNzb3I6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2RlY29tcHJlc3NvciBub3QgaW5pdGlhbGl6ZWQnKQoKICAgIGJ5dGVzX2lvID0gaW8uQnl0ZXNJTygpCiAgICB3aGlsZSBUcnVlOgogICAgICAjIEVuc3VyZSB0aGF0IHRoZSBpbnRlcm5hbCBidWZmZXIgaGFzIGF0IGxlYXN0IGhhbGYgdGhlIHJlYWRfc2l6ZS4gR29pbmcKICAgICAgIyB3aXRoIGhhbGYgdGhlIF9yZWFkX3NpemUgKGFzIG9wcG9zZWQgdG8gYSBmdWxsIF9yZWFkX3NpemUpIHRvIGVuc3VyZQogICAgICAjIHRoYXQgYWN0dWFsIGZldGNoZXMgYXJlIG1vcmUgZXZlbmx5IHNwcmVhZCBvdXQsIGFzIG9wcG9zZWQgdG8gaGF2aW5nIDIKICAgICAgIyBjb25zZWN1dGl2ZSByZWFkcyBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgcmVhZC4KICAgICAgc2VsZi5fZmV0Y2hfdG9faW50ZXJuYWxfYnVmZmVyKHNlbGYuX3JlYWRfc2l6ZSAvLyAyKQogICAgICBsaW5lID0gc2VsZi5fcmVhZF9mcm9tX2ludGVybmFsX2J1ZmZlcigKICAgICAgICAgIGxhbWJkYTogc2VsZi5fcmVhZF9idWZmZXIucmVhZGxpbmUoKSkKICAgICAgYnl0ZXNfaW8ud3JpdGUobGluZSkKICAgICAgaWYgbGluZS5lbmRzd2l0aChiJ1xuJykgb3Igbm90IGxpbmU6CiAgICAgICAgYnJlYWsgICMgTmV3bGluZSBvciBFT0YgcmVhY2hlZC4KCiAgICByZXR1cm4gYnl0ZXNfaW8uZ2V0dmFsdWUoKQoKICBkZWYgY2xvc2VkKHNlbGYpOgogICAgcmV0dXJuIG5vdCBzZWxmLl9maWxlIG9yIHNlbGYuX2ZpbGUuY2xvc2VkKCkKCiAgZGVmIGNsb3NlKHNlbGYpOgogICAgaWYgc2VsZi5yZWFkYWJsZSgpOgogICAgICBzZWxmLl9yZWFkX2J1ZmZlci5jbG9zZSgpCgogICAgaWYgc2VsZi53cml0ZWFibGUoKToKICAgICAgc2VsZi5fZmlsZS53cml0ZShzZWxmLl9jb21wcmVzc29yLmZsdXNoKCkpCgogICAgc2VsZi5fZmlsZS5jbG9zZSgpCgogIGRlZiBmbHVzaChzZWxmKToKICAgIGlmIHNlbGYud3JpdGVhYmxlKCk6CiAgICAgIHNlbGYuX2ZpbGUud3JpdGUoc2VsZi5fY29tcHJlc3Nvci5mbHVzaCgpKQogICAgc2VsZi5fZmlsZS5mbHVzaCgpCgogIEBwcm9wZXJ0eQogIGRlZiBzZWVrYWJsZShzZWxmKToKICAgIHJldHVybiAncicgaW4gc2VsZi5fZmlsZS5tb2RlCgogIGRlZiBfY2xlYXJfcmVhZF9idWZmZXIoc2VsZik6CiAgICAiIiJDbGVhcnMgdGhlIHJlYWQgYnVmZmVyIGJ5IHJlbW92aW5nIGFsbCB0aGUgY29udGVudHMgYW5kCiAgICByZXNldHRpbmcgX3JlYWRfcG9zaXRpb24gdG8gMCIiIgogICAgc2VsZi5fcmVhZF9wb3NpdGlvbiA9IDAKICAgIHNlbGYuX3JlYWRfYnVmZmVyLnNlZWsoMCkKICAgIHNlbGYuX3JlYWRfYnVmZmVyLnRydW5jYXRlKDApCgogIGRlZiBfcmV3aW5kX2ZpbGUoc2VsZik6CiAgICAiIiJTZWVrcyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBpbnB1dCBmaWxlLiBJbnB1dCBmaWxlJ3MgRU9GIG1hcmtlcgogICAgaXMgY2xlYXJlZCBhbmQgX3VuY29tcHJlc3NlZF9wb3NpdGlvbiBpcyByZXNldCB0byB6ZXJvIiIiCiAgICBzZWxmLl9maWxlLnNlZWsoMCwgb3MuU0VFS19TRVQpCiAgICBzZWxmLl9yZWFkX2VvZiA9IEZhbHNlCiAgICBzZWxmLl91bmNvbXByZXNzZWRfcG9zaXRpb24gPSAwCgogIGRlZiBfcmV3aW5kKHNlbGYpOgogICAgIiIiU2Vla3MgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgaW5wdXQgZmlsZSBhbmQgcmVzZXRzIHRoZSBpbnRlcm5hbCByZWFkCiAgICBidWZmZXIuIFRoZSBkZWNvbXByZXNzb3Igb2JqZWN0IGlzIHJlLWluaXRpYWxpemVkIHRvIGVuc3VyZSB0aGF0IG5vIGRhdGEKICAgIGxlZnQgaW4gaXQncyBidWZmZXIuIiIiCiAgICBzZWxmLl9jbGVhcl9yZWFkX2J1ZmZlcigpCiAgICBzZWxmLl9yZXdpbmRfZmlsZSgpCgogICAgIyBSZS1pbml0aWFsaXplIGRlY29tcHJlc3NvciB0byBjbGVhciBhbnkgZGF0YSBidWZmZXJlZCBwcmlvciB0byByZXdpbmQKICAgIHNlbGYuX2luaXRpYWxpemVfZGVjb21wcmVzc29yKCkKCiAgZGVmIHNlZWsoc2VsZiwgb2Zmc2V0LCB3aGVuY2U9b3MuU0VFS19TRVQpOgogICAgIiIiU2V0IHRoZSBmaWxlJ3MgY3VycmVudCBvZmZzZXQuCgogICAgU2Vla2luZyBiZWhhdmlvcjoKCiAgICAgICogc2Vla2luZyBmcm9tIHRoZSBlbmQgOmRhdGE6YG9zLlNFRUtfRU5EYCB0aGUgd2hvbGUgZmlsZSBpcyBkZWNvbXByZXNzZWQKICAgICAgICBvbmNlIHRvIGRldGVybWluZSBpdHMgc2l6ZS4gVGhlcmVmb3JlIGl0IGlzIHByZWZlcnJlZCB0byB1c2UKICAgICAgICA6ZGF0YTpgb3MuU0VFS19TRVRgIG9yIDpkYXRhOmBvcy5TRUVLX0NVUmAgdG8gYXZvaWQgdGhlIHByb2Nlc3NpbmcKICAgICAgICBvdmVyaGVhZAogICAgICAqIHNlZWtpbmcgYmFja3dhcmRzIGZyb20gdGhlIGN1cnJlbnQgcG9zaXRpb24gcmV3aW5kcyB0aGUgZmlsZSB0byBgYDBgYAogICAgICAgIGFuZCBkZWNvbXByZXNzZXMgdGhlIGNodW5rcyB0byB0aGUgcmVxdWVzdGVkIG9mZnNldAogICAgICAqIHNlZWtpbmcgaXMgb25seSBzdXBwb3J0ZWQgaW4gZmlsZXMgb3BlbmVkIGZvciByZWFkaW5nCiAgICAgICogaWYgdGhlIG5ldyBvZmZzZXQgaXMgb3V0IG9mIGJvdW5kLCBpdCBpcyBhZGp1c3RlZCB0byBlaXRoZXIgYGAwYGAgb3IKICAgICAgICBgYEVPRmBgLgoKICAgIEFyZ3M6CiAgICAgIG9mZnNldCAoaW50KTogc2VlayBvZmZzZXQgaW4gdGhlIHVuY29tcHJlc3NlZCBjb250ZW50IHJlcHJlc2VudGVkIGFzCiAgICAgICAgbnVtYmVyCiAgICAgIHdoZW5jZSAoaW50KTogc2VlayBtb2RlLiBTdXBwb3J0ZWQgbW9kZXMgYXJlIDpkYXRhOmBvcy5TRUVLX1NFVGAKICAgICAgICAoYWJzb2x1dGUgc2VlayksIDpkYXRhOmBvcy5TRUVLX0NVUmAgKHNlZWsgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQKICAgICAgICBwb3NpdGlvbiksIGFuZCA6ZGF0YTpgb3MuU0VFS19FTkRgIChzZWVrIHJlbGF0aXZlIHRvIHRoZSBlbmQsIG9mZnNldAogICAgICAgIHNob3VsZCBiZSBuZWdhdGl2ZSkuCgogICAgUmFpc2VzOgogICAgICB+ZXhjZXB0aW9ucy5JT0Vycm9yOiBXaGVuIHRoaXMgYnVmZmVyIGlzIGNsb3NlZC4KICAgICAgfmV4Y2VwdGlvbnMuVmFsdWVFcnJvcjogV2hlbiB3aGVuY2UgaXMgaW52YWxpZCBvciB0aGUgZmlsZSBpcyBub3Qgc2Vla2FibGUKICAgICIiIgogICAgaWYgd2hlbmNlID09IG9zLlNFRUtfU0VUOgogICAgICBhYnNvbHV0ZV9vZmZzZXQgPSBvZmZzZXQKICAgIGVsaWYgd2hlbmNlID09IG9zLlNFRUtfQ1VSOgogICAgICBhYnNvbHV0ZV9vZmZzZXQgPSBzZWxmLl91bmNvbXByZXNzZWRfcG9zaXRpb24gKyBvZmZzZXQKICAgIGVsaWYgd2hlbmNlID09IG9zLlNFRUtfRU5EOgogICAgICAjIERldGVybWluZSBhbmQgY2FjaGUgdGhlIHVuY29tcHJlc3NlZCBzaXplIG9mIHRoZSBmaWxlCiAgICAgIGlmIG5vdCBzZWxmLl91bmNvbXByZXNzZWRfc2l6ZToKICAgICAgICBsb2dnZXIud2FybigiU2Vla2luZyByZWxhdGl2ZSBmcm9tIGVuZCBvZiBmaWxlIGlzIHJlcXVlc3RlZC4gIgogICAgICAgICAgICAgICAgICAgICJOZWVkIHRvIGRlY29tcHJlc3MgdGhlIHdob2xlIGZpbGUgb25jZSB0byBkZXRlcm1pbmUgIgogICAgICAgICAgICAgICAgICAgICJpdHMgc2l6ZS4gVGhpcyBtaWdodCB0YWtlIGEgd2hpbGUuLi4iKQogICAgICAgIHVuY29tcHJlc3Nfc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCiAgICAgICAgd2hpbGUgc2VsZi5yZWFkKHNlbGYuX3JlYWRfc2l6ZSk6CiAgICAgICAgICBwYXNzCiAgICAgICAgdW5jb21wcmVzc19lbmRfdGltZSA9IHRpbWUudGltZSgpCiAgICAgICAgbG9nZ2VyLndhcm4oIkZ1bGwgZmlsZSBkZWNvbXByZXNzaW9uIGZvciBzZWVrIGZyb20gZW5kIHRvb2sgJS4yZiBzZWNzIiwKICAgICAgICAgICAgICAgICAgICAodW5jb21wcmVzc19lbmRfdGltZSAtIHVuY29tcHJlc3Nfc3RhcnRfdGltZSkpCiAgICAgICAgc2VsZi5fdW5jb21wcmVzc2VkX3NpemUgPSBzZWxmLl91bmNvbXByZXNzZWRfcG9zaXRpb24KICAgICAgYWJzb2x1dGVfb2Zmc2V0ID0gc2VsZi5fdW5jb21wcmVzc2VkX3NpemUgKyBvZmZzZXQKICAgIGVsc2U6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIldoZW5jZSBtb2RlICVyIGlzIGludmFsaWQuIiAlIHdoZW5jZSkKCiAgICAjIERldGVybWluZSBob3cgbWFueSBieXRlcyBuZWVkcyB0byBiZSByZWFkIGJlZm9yZSB3ZSByZWFjaAogICAgIyB0aGUgcmVxdWVzdGVkIG9mZnNldC4gUmV3aW5kIGlmIHdlIGFscmVhZHkgcGFzc2VkIHRoZSBwb3NpdGlvbi4KICAgIGlmIGFic29sdXRlX29mZnNldCA8IHNlbGYuX3VuY29tcHJlc3NlZF9wb3NpdGlvbjoKICAgICAgc2VsZi5fcmV3aW5kKCkKICAgIGJ5dGVzX3RvX3NraXAgPSBhYnNvbHV0ZV9vZmZzZXQgLSBzZWxmLl91bmNvbXByZXNzZWRfcG9zaXRpb24KCiAgICAjIFJlYWQgdW50aWwgdGhlIGRlc2lyZWQgcG9zaXRpb24gaXMgcmVhY2hlZCBvciBFT0Ygb2NjdXJzLgogICAgd2hpbGUgYnl0ZXNfdG9fc2tpcDoKICAgICAgZGF0YSA9IHNlbGYucmVhZChtaW4oc2VsZi5fcmVhZF9zaXplLCBieXRlc190b19za2lwKSkKICAgICAgaWYgbm90IGRhdGE6CiAgICAgICAgYnJlYWsKICAgICAgYnl0ZXNfdG9fc2tpcCAtPSBsZW4oZGF0YSkKCiAgZGVmIHRlbGwoc2VsZik6CiAgICAiIiJSZXR1cm5zIGN1cnJlbnQgcG9zaXRpb24gaW4gdW5jb21wcmVzc2VkIGZpbGUuIiIiCiAgICByZXR1cm4gc2VsZi5fdW5jb21wcmVzc2VkX3Bvc2l0aW9uCgogIGRlZiBfX2VudGVyX18oc2VsZik6CiAgICByZXR1cm4gc2VsZgoKICBkZWYgX19leGl0X18oc2VsZiwgZXhjZXB0aW9uX3R5cGUsIGV4Y2VwdGlvbl92YWx1ZSwgdHJhY2ViYWNrKToKICAgIHNlbGYuY2xvc2UoKQoKCmNsYXNzIEZpbGVNZXRhZGF0YShvYmplY3QpOgogICIiIk1ldGFkYXRhIGFib3V0IGEgZmlsZSBwYXRoIHRoYXQgaXMgdGhlIG91dHB1dCBvZiBGaWxlU3lzdGVtLm1hdGNoCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgsIHNpemVfaW5fYnl0ZXMpOgogICAgYXNzZXJ0IGlzaW5zdGFuY2UocGF0aCwgKHN0ciwgdW5pY29kZSkpIGFuZCBwYXRoLCAiUGF0aCBzaG91bGQgYmUgYSBzdHJpbmciCiAgICBhc3NlcnQgaXNpbnN0YW5jZShzaXplX2luX2J5dGVzLCAoaW50LCBsb25nKSkgYW5kIHNpemVfaW5fYnl0ZXMgPj0gMCwgXAogICAgICAgICJJbnZhbGlkIHZhbHVlIGZvciBzaXplX2luX2J5dGVzIHNob3VsZCAlcyAob2YgdHlwZSAlcykiICUgKAogICAgICAgICAgICBzaXplX2luX2J5dGVzLCB0eXBlKHNpemVfaW5fYnl0ZXMpKQogICAgc2VsZi5wYXRoID0gcGF0aAogICAgc2VsZi5zaXplX2luX2J5dGVzID0gc2l6ZV9pbl9ieXRlcwoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgICIiIk5vdGU6IFRoaXMgaXMgb25seSB1c2VkIGluIHRlc3RzIHdoZXJlIHdlIHZlcmlmeSB0aGF0IG1vY2sgb2JqZWN0cyBtYXRjaC4KICAgICIiIgogICAgcmV0dXJuIChpc2luc3RhbmNlKG90aGVyLCBGaWxlTWV0YWRhdGEpIGFuZAogICAgICAgICAgICBzZWxmLnBhdGggPT0gb3RoZXIucGF0aCBhbmQKICAgICAgICAgICAgc2VsZi5zaXplX2luX2J5dGVzID09IG90aGVyLnNpemVfaW5fYnl0ZXMpCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKChzZWxmLnBhdGgsIHNlbGYuc2l6ZV9pbl9ieXRlcykpCgogIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgogICAgIyBUT0RPKEJFQU0tNTk0OSk6IE5lZWRlZCBmb3IgUHl0aG9uIDIgY29tcGF0aWJpbGl0eS4KICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJ0ZpbGVNZXRhZGF0YSglcywgJXMpJyAlIChzZWxmLnBhdGgsIHNlbGYuc2l6ZV9pbl9ieXRlcykKCgpjbGFzcyBNYXRjaFJlc3VsdChvYmplY3QpOgogICIiIlJlc3VsdCBmcm9tIHRoZSBgYEZpbGVTeXN0ZW1gYCBtYXRjaCBvcGVyYXRpb24gd2hpY2ggY29udGFpbnMgdGhlIGxpc3QKICAgb2YgbWF0Y2hlZCBGaWxlTWV0YWRhdGEuCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdHRlcm4sIG1ldGFkYXRhX2xpc3QpOgogICAgc2VsZi5tZXRhZGF0YV9saXN0ID0gbWV0YWRhdGFfbGlzdAogICAgc2VsZi5wYXR0ZXJuID0gcGF0dGVybgoKCmNsYXNzIEJlYW1JT0Vycm9yKElPRXJyb3IpOgogIGRlZiBfX2luaXRfXyhzZWxmLCBtc2csIGV4Y2VwdGlvbl9kZXRhaWxzPU5vbmUpOgogICAgIiIiQ2xhc3MgcmVwcmVzZW50aW5nIHRoZSBlcnJvcnMgdGhyb3duIGluIHRoZSBiYXRjaCBmaWxlIG9wZXJhdGlvbnMuCiAgICBBcmdzOgogICAgICBtc2c6IE1lc3NhZ2Ugc3RyaW5nIGZvciB0aGUgZXhjZXB0aW9uIHRocm93bgogICAgICBleGNlcHRpb25fZGV0YWlsczogT3B0aW9uYWwgbWFwIG9mIGluZGl2aWR1YWwgaW5wdXQgdG8gZXhjZXB0aW9uIGZvcgogICAgICAgIGZhaWxlZCBvcGVyYXRpb25zIGluIGJhdGNoLiBUaGlzIHBhcmFtZXRlciBpcyBvcHRpb25hbCBzbyBpZiBzcGVjaWZpZWQKICAgICAgICB0aGUgdXNlciBjYW4gYXNzdW1lIHRoYXQgdGhlIGFsbCBlcnJvcnMgaW4gdGhlIGZpbGVzeXN0ZW0gb3BlcmF0aW9uCiAgICAgICAgaGF2ZSBiZWVuIHJlcG9ydGVkLiBXaGVuIHRoZSBkZXRhaWxzIGFyZSBtaXNzaW5nIHRoZW4gdGhlIG9wZXJhdGlvbgogICAgICAgIG1heSBoYXZlIGZhaWxlZCBhbnl3aGVyZSBzbyB0aGUgdXNlciBzaG91bGQgdXNlIG1hdGNoIHRvIGRldGVybWluZQogICAgICAgIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBzeXN0ZW0uCiAgICAiIiIKICAgIG1lc3NhZ2UgPSAiJXMgd2l0aCBleGNlcHRpb25zICVzIiAlIChtc2csIGV4Y2VwdGlvbl9kZXRhaWxzKQogICAgc3VwZXIoQmVhbUlPRXJyb3IsIHNlbGYpLl9faW5pdF9fKG1lc3NhZ2UpCiAgICBzZWxmLmV4Y2VwdGlvbl9kZXRhaWxzID0gZXhjZXB0aW9uX2RldGFpbHMKCgpjbGFzcyBGaWxlU3lzdGVtKHdpdGhfbWV0YWNsYXNzKGFiYy5BQkNNZXRhLCBCZWFtUGx1Z2luKSk6CiAgIiIiQSBjbGFzcyB0aGF0IGRlZmluZXMgdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBwZXJmb3JtZWQgb24gYSBmaWxlc3lzdGVtLgoKICBBbGwgbWV0aG9kcyBhcmUgYWJzdHJhY3QgYW5kIHRoZXkgYXJlIGZvciBmaWxlIHN5c3RlbSBwcm92aWRlcnMgdG8KICBpbXBsZW1lbnQuIENsaWVudHMgc2hvdWxkIHVzZSB0aGUgRmlsZVN5c3RlbXMgY2xhc3MgdG8gaW50ZXJhY3Qgd2l0aAogIHRoZSBjb3JyZWN0IGZpbGUgc3lzdGVtIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBmaWxlIHBhdHRlcm4gc2NoZW1lLgogICIiIgogIENIVU5LX1NJWkUgPSAxICAjIENodWNrIHNpemUgaW4gdGhlIGJhdGNoIG9wZXJhdGlvbnMKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHBpcGVsaW5lX29wdGlvbnMpOgogICAgIiIiCiAgICBBcmdzOgogICAgICBwaXBlbGluZV9vcHRpb25zOiBJbnN0YW5jZSBvZiBgYFBpcGVsaW5lT3B0aW9uc2BgIG9yIGRpY3Qgb2Ygb3B0aW9ucyBhbmQKICAgICAgICB2YWx1ZXMgKGxpa2UgYGBSdW50aW1lVmFsdWVQcm92aWRlci5ydW50aW1lX29wdGlvbnNgYCkuCiAgICAiIiIKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBfZ2V0X2NvbXByZXNzaW9uX3R5cGUocGF0aCwgY29tcHJlc3Npb25fdHlwZSk6CiAgICBpZiBjb21wcmVzc2lvbl90eXBlID09IENvbXByZXNzaW9uVHlwZXMuQVVUTzoKICAgICAgY29tcHJlc3Npb25fdHlwZSA9IENvbXByZXNzaW9uVHlwZXMuZGV0ZWN0X2NvbXByZXNzaW9uX3R5cGUocGF0aCkKICAgIGVsaWYgbm90IENvbXByZXNzaW9uVHlwZXMuaXNfdmFsaWRfY29tcHJlc3Npb25fdHlwZShjb21wcmVzc2lvbl90eXBlKToKICAgICAgcmFpc2UgVHlwZUVycm9yKCdjb21wcmVzc2lvbl90eXBlIG11c3QgYmUgQ29tcHJlc3Npb25UeXBlIG9iamVjdCBidXQgJwogICAgICAgICAgICAgICAgICAgICAgJ3dhcyAlcycgJSB0eXBlKGNvbXByZXNzaW9uX3R5cGUpKQogICAgcmV0dXJuIGNvbXByZXNzaW9uX3R5cGUKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIHNjaGVtZShjbHMpOgogICAgIiIiVVJJIHNjaGVtZSBmb3IgdGhlIEZpbGVTeXN0ZW0KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgZGVmIGpvaW4oc2VsZiwgYmFzZXBhdGgsICpwYXRocyk6CiAgICAiIiJKb2luIHR3byBvciBtb3JlIHBhdGhuYW1lIGNvbXBvbmVudHMgZm9yIHRoZSBmaWxlc3lzdGVtCgogICAgQXJnczoKICAgICAgYmFzZXBhdGg6IHN0cmluZyBwYXRoIG9mIHRoZSBmaXJzdCBjb21wb25lbnQgb2YgdGhlIHBhdGgKICAgICAgcGF0aHM6IHBhdGggY29tcG9uZW50cyB0byBiZSBhZGRlZAoKICAgIFJldHVybnM6IGZ1bGwgcGF0aCBhZnRlciBjb21iaW5pbmcgYWxsIHRoZSBwYXNzZWQgY29tcG9uZW50cwogICAgIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIEBhYmMuYWJzdHJhY3RtZXRob2QKICBkZWYgc3BsaXQoc2VsZiwgcGF0aCk6CiAgICAiIiJTcGxpdHMgdGhlIGdpdmVuIHBhdGggaW50byB0d28gcGFydHMuCgogICAgU3BsaXRzIHRoZSBwYXRoIGludG8gYSBwYWlyIChoZWFkLCB0YWlsKSBzdWNoIHRoYXQgdGFpbCBjb250YWlucyB0aGUgbGFzdAogICAgY29tcG9uZW50IG9mIHRoZSBwYXRoIGFuZCBoZWFkIGNvbnRhaW5zIGV2ZXJ5dGhpbmcgdXAgdG8gdGhhdC4KCiAgICBGb3IgZmlsZS1zeXN0ZW1zIG90aGVyIHRoYW4gdGhlIGxvY2FsIGZpbGUtc3lzdGVtLCBoZWFkIHNob3VsZCBpbmNsdWRlIHRoZQogICAgcHJlZml4LgoKICAgIEFyZ3M6CiAgICAgIHBhdGg6IHBhdGggYXMgYSBzdHJpbmcKICAgIFJldHVybnM6CiAgICAgIGEgcGFpciBvZiBwYXRoIGNvbXBvbmVudHMgYXMgc3RyaW5ncy4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgZGVmIG1rZGlycyhzZWxmLCBwYXRoKToKICAgICIiIlJlY3Vyc2l2ZWx5IGNyZWF0ZSBkaXJlY3RvcmllcyBmb3IgdGhlIHByb3ZpZGVkIHBhdGguCgogICAgQXJnczoKICAgICAgcGF0aDogc3RyaW5nIHBhdGggb2YgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgdGhhdCBzaG91bGQgYmUgY3JlYXRlZAoKICAgIFJhaXNlczoKICAgICAgSU9FcnJvciBpZiBsZWFmIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cy4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgZGVmIGhhc19kaXJzKHNlbGYpOgogICAgIiIiV2hldGhlciB0aGlzIEZpbGVTeXN0ZW0gc3VwcG9ydHMgZGlyZWN0b3JpZXMuIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIEBhYmMuYWJzdHJhY3RtZXRob2QKICBkZWYgX2xpc3Qoc2VsZiwgZGlyX29yX3ByZWZpeCk6CiAgICAiIiJMaXN0IGZpbGVzIGluIGEgbG9jYXRpb24uCgogICAgTGlzdGluZyBpcyBub24tcmVjdXJzaXZlIChmb3IgZmlsZXN5c3RlbXMgdGhhdCBzdXBwb3J0IGRpcmVjdG9yaWVzKS4KCiAgICBBcmdzOgogICAgICBkaXJfb3JfcHJlZml4OiAoc3RyaW5nKSBBIGRpcmVjdG9yeSBvciBsb2NhdGlvbiBwcmVmaXggKGZvciBmaWxlc3lzdGVtcwogICAgICAgIHRoYXQgZG9uJ3QgaGF2ZSBkaXJlY3RvcmllcykuCgogICAgUmV0dXJuczoKICAgICAgR2VuZXJhdG9yIG9mIGBgRmlsZU1ldGFkYXRhYGAgb2JqZWN0cy4KCiAgICBSYWlzZXM6CiAgICAgIGBgQmVhbUlPRXJyb3JgYCBpZiBsaXN0aW5nIGZhaWxzLCBidXQgbm90IGlmIG5vIGZpbGVzIHdlcmUgZm91bmQuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBfc3BsaXRfc2NoZW1lKHVybF9vcl9wYXRoKToKICAgIG1hdGNoID0gcmUubWF0Y2gocicoXlthLXpdKyk6Ly8oLiopJywgdXJsX29yX3BhdGgpCiAgICBpZiBtYXRjaCBpcyBub3QgTm9uZToKICAgICAgcmV0dXJuIG1hdGNoLmdyb3VwcygpCiAgICByZXR1cm4gTm9uZSwgdXJsX29yX3BhdGgKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBfY29tYmluZV9zY2hlbWUoc2NoZW1lLCBwYXRoKToKICAgIGlmIHNjaGVtZSBpcyBOb25lOgogICAgICByZXR1cm4gcGF0aAogICAgcmV0dXJuICd7fTovL3t9Jy5mb3JtYXQoc2NoZW1lLCBwYXRoKQoKICBkZWYgX3VybF9kaXJuYW1lKHNlbGYsIHVybF9vcl9wYXRoKToKICAgICIiIkxpa2UgcG9zaXhwYXRoLmRpcm5hbWUsIGJ1dCBwcmVzZXJ2ZXMgc2NoZW1lOi8vIHByZWZpeC4KCiAgICBBcmdzOgogICAgICB1cmxfb3JfcGF0aDogQSBzdHJpbmcgaW4gdGhlIGZvcm0gb2Ygc2NoZW1lOi8vc29tZS9wYXRoIE9SIC9zb21lL3BhdGguCiAgICAiIiIKICAgIHNjaGVtZSwgcGF0aCA9IHNlbGYuX3NwbGl0X3NjaGVtZSh1cmxfb3JfcGF0aCkKICAgIHJldHVybiBzZWxmLl9jb21iaW5lX3NjaGVtZShzY2hlbWUsIHBvc2l4cGF0aC5kaXJuYW1lKHBhdGgpKQoKICBkZWYgbWF0Y2hfZmlsZXMoc2VsZiwgZmlsZV9tZXRhcywgcGF0dGVybik6CiAgICAiIiJGaWx0ZXIgOmNsYXNzOmBGaWxlTWV0YWRhdGFgIG9iamVjdHMgYnkgKnBhdHRlcm4qCgogICAgQXJnczoKICAgICAgZmlsZV9tZXRhcyAobGlzdCBvZiA6Y2xhc3M6YEZpbGVNZXRhZGF0YWApOgogICAgICAgIEZpbGVzIHRvIGNvbnNpZGVyIHdoZW4gbWF0Y2hpbmcKICAgICAgcGF0dGVybiAoc3RyKTogRmlsZSBwYXR0ZXJuCgogICAgU2VlIEFsc286CiAgICAgIDptZXRoOmB0cmFuc2xhdGVfcGF0dGVybmAKCiAgICBSZXR1cm5zOgogICAgICBHZW5lcmF0b3Igb2YgbWF0Y2hpbmcgOmNsYXNzOmBGaWxlTWV0YWRhdGFgCiAgICAiIiIKICAgIHJlX3BhdHRlcm4gPSByZS5jb21waWxlKHNlbGYudHJhbnNsYXRlX3BhdHRlcm4ocGF0dGVybikpCiAgICBtYXRjaCA9IHJlX3BhdHRlcm4ubWF0Y2gKICAgIGZvciBmaWxlX21ldGFkYXRhIGluIGZpbGVfbWV0YXM6CiAgICAgIGlmIG1hdGNoKGZpbGVfbWV0YWRhdGEucGF0aCk6CiAgICAgICAgeWllbGQgZmlsZV9tZXRhZGF0YQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIHRyYW5zbGF0ZV9wYXR0ZXJuKHBhdHRlcm4pOgogICAgIiIiCiAgICBUcmFuc2xhdGUgYSAqcGF0dGVybiogdG8gYSByZWd1bGFyIGV4cHJlc3Npb24uCiAgICBUaGVyZSBpcyBubyB3YXkgdG8gcXVvdGUgbWV0YS1jaGFyYWN0ZXJzLgoKICAgIFBhdHRlcm4gc3ludGF4OgogICAgICBUaGUgcGF0dGVybiBzeW50YXggaXMgYmFzZWQgb24gdGhlIGZubWF0Y2hfIHN5bnRheCwgd2l0aCB0aGUgZm9sbG93aW5nCiAgICAgIGRpZmZlcmVuY2VzOgoKICAgICAgLSAgIGBgKmBgIElzIGVxdWl2YWxlbnQgdG8gYGBbXi9cXF0qYGAgcmF0aGVyIHRoYW4gYGAuKmBgLgogICAgICAtICAgYGAqKmBgIElzIGVxdWl2YWxlbnQgdG8gYGAuKmBgLgoKICAgIFNlZSBhbHNvOgogICAgICA6bWV0aDpgbWF0Y2hgIHVzZXMgdGhpcyBtZXRob2QKCiAgICBUaGlzIG1ldGhvZCBpcyBiYXNlZCBvbiBgUHl0aG9uIDIuNydzIGZubWF0Y2gudHJhbnNsYXRlYF8uCiAgICBUaGUgY29kZSBpbiB0aGlzIG1ldGhvZCBpcyBsaWNlbnNlZCB1bmRlcgogICAgUFlUSE9OIFNPRlRXQVJFIEZPVU5EQVRJT04gTElDRU5TRSBWRVJTSU9OIDIuCgogICAgLi4gX2Bmbm1hdGNoYDogaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZubWF0Y2guaHRtbAoKICAgIC4uIF9gUHl0aG9uIDIuNydzIGZubWF0Y2gudHJhbnNsYXRlYDogaHR0cHM6Ly9naXRodWIuY29tL3B5dGhvbi9jcHl0aG9uXAovYmxvYi8xNzBlYThjY2Q0MjM1ZDI4NTM4YWI3MTMwNDE1MDJkMDdhZDFjYWNkL0xpYi9mbm1hdGNoLnB5I0w4NS1MMTIwCiAgICAiIiIKICAgIGksIG4gPSAwLCBsZW4ocGF0dGVybikKICAgIHJlcyA9ICcnCiAgICB3aGlsZSBpIDwgbjoKICAgICAgYyA9IHBhdHRlcm5baV0KICAgICAgaSA9IGkgKyAxCiAgICAgIGlmIGMgPT0gJyonOgogICAgICAgICMgT25lIGNoYXIgbG9va2FoZWFkIGZvciAiKioiCiAgICAgICAgaWYgaSA8IG4gYW5kIHBhdHRlcm5baV0gPT0gIioiOgogICAgICAgICAgcmVzID0gcmVzICsgJy4qJwogICAgICAgICAgaSA9IGkgKyAxCiAgICAgICAgZWxzZToKICAgICAgICAgIHJlcyA9IHJlcyArIHInW14vXFxdKicKICAgICAgZWxpZiBjID09ICc/JzoKICAgICAgICByZXMgPSByZXMgKyAnLicKICAgICAgZWxpZiBjID09ICdbJzoKICAgICAgICBqID0gaQogICAgICAgIGlmIGogPCBuIGFuZCBwYXR0ZXJuW2pdID09ICchJzoKICAgICAgICAgIGogPSBqICsgMQogICAgICAgIGlmIGogPCBuIGFuZCBwYXR0ZXJuW2pdID09ICddJzoKICAgICAgICAgIGogPSBqICsgMQogICAgICAgIHdoaWxlIGogPCBuIGFuZCBwYXR0ZXJuW2pdICE9ICddJzoKICAgICAgICAgIGogPSBqICsgMQogICAgICAgIGlmIGogPj0gbjoKICAgICAgICAgIHJlcyA9IHJlcyArIHInXFsnCiAgICAgICAgZWxzZToKICAgICAgICAgIHN0dWZmID0gcGF0dGVybltpOmpdLnJlcGxhY2UoJ1xcJywgJ1xcXFwnKQogICAgICAgICAgaSA9IGogKyAxCiAgICAgICAgICBpZiBzdHVmZlswXSA9PSAnISc6CiAgICAgICAgICAgIHN0dWZmID0gJ14nICsgc3R1ZmZbMTpdCiAgICAgICAgICBlbGlmIHN0dWZmWzBdID09ICdeJzoKICAgICAgICAgICAgc3R1ZmYgPSAnXFwnICsgc3R1ZmYKICAgICAgICAgIHJlcyA9ICclc1slc10nICUgKHJlcywgc3R1ZmYpCiAgICAgIGVsc2U6CiAgICAgICAgcmVzID0gcmVzICsgcmUuZXNjYXBlKGMpCgogICAgbG9nZ2VyLmRlYnVnKCd0cmFuc2xhdGVfcGF0dGVybjogJXIgLT4gJXInLCBwYXR0ZXJuLCByZXMpCiAgICByZXR1cm4gcmVzICsgcidcWig/bXMpJwoKICBkZWYgbWF0Y2goc2VsZiwgcGF0dGVybnMsIGxpbWl0cz1Ob25lKToKICAgICIiIkZpbmQgYWxsIG1hdGNoaW5nIHBhdGhzIHRvIHRoZSBwYXR0ZXJucyBwcm92aWRlZC4KCiAgICBTZWUgQWxzbzoKICAgICAgOm1ldGg6YHRyYW5zbGF0ZV9wYXR0ZXJuYAoKICAgIFBhdHRlcm5zIGVuZGluZyB3aXRoICcvJyB3aWxsIGJlIGFwcGVuZGVkIHdpdGggJyonLgoKICAgIEFyZ3M6CiAgICAgIHBhdHRlcm5zOiBsaXN0IG9mIHN0cmluZyBmb3IgdGhlIGZpbGUgcGF0aCBwYXR0ZXJuIHRvIG1hdGNoIGFnYWluc3QKICAgICAgbGltaXRzOiBsaXN0IG9mIG1heGltdW0gbnVtYmVyIG9mIHJlc3BvbnNlcyB0aGF0IG5lZWQgdG8gYmUgZmV0Y2hlZAoKICAgIFJldHVybnM6IGxpc3Qgb2YgYGBNYXRjaFJlc3VsdGBgIG9iamVjdHMuCgogICAgUmFpc2VzOgogICAgICBgYEJlYW1JT0Vycm9yYGAgaWYgYW55IG9mIHRoZSBwYXR0ZXJuIG1hdGNoIG9wZXJhdGlvbnMgZmFpbAogICAgIiIiCiAgICBpZiBsaW1pdHMgaXMgTm9uZToKICAgICAgbGltaXRzID0gW05vbmVdICogbGVuKHBhdHRlcm5zKQogICAgZWxzZToKICAgICAgZXJyX21zZyA9ICJQYXR0ZXJucyBhbmQgbGltaXRzIHNob3VsZCBiZSBlcXVhbCBpbiBsZW5ndGgiCiAgICAgIGFzc2VydCBsZW4ocGF0dGVybnMpID09IGxlbihsaW1pdHMpLCBlcnJfbXNnCgogICAgZGVmIF9tYXRjaChwYXR0ZXJuLCBsaW1pdCk6CiAgICAgICIiIkZpbmQgYWxsIG1hdGNoaW5nIHBhdGhzIHRvIHRoZSBwYXR0ZXJuIHByb3ZpZGVkLiIiIgogICAgICBpZiBwYXR0ZXJuLmVuZHN3aXRoKCcvJyk6CiAgICAgICAgcGF0dGVybiArPSAnKicKICAgICAgIyBHZXQgdGhlIHBhcnQgb2YgdGhlIHBhdHRlcm4gYmVmb3JlIHRoZSBmaXJzdCBnbG9iYmluZyBjaGFyYWN0ZXIuCiAgICAgICMgRm9yIGV4YW1wbGUgc2NoZW1lOi8vcGF0aC9mb28qIHdpbGwgYmVjb21lIHNjaGVtZTovL3BhdGgvZm9vIGZvcgogICAgICAjIGZpbGVzeXN0ZW1zIGxpa2UgR0NTLCBvciBjb252ZXJ0ZWQgdG8gc2NoZW1lOi8vcGF0aCBmb3IgZmlsZXN5c3RlbXMgd2l0aAogICAgICAjIGRpcmVjdG9yaWVzLgogICAgICBwcmVmaXhfb3JfZGlyID0gcmUubWF0Y2goJ15bXlsqP10qJywgcGF0dGVybikuZ3JvdXAoMCkKCiAgICAgIGZpbGVfbWV0YWRhdGFzID0gW10KICAgICAgaWYgcHJlZml4X29yX2RpciA9PSBwYXR0ZXJuOgogICAgICAgICMgU2hvcnQtY2lyY3VpdCBjYWxsaW5nIHNlbGYubGlzdCgpIGlmIHRoZXJlJ3Mgbm8gZ2xvYiBwYXR0ZXJuIHRvIG1hdGNoLgogICAgICAgIGlmIHNlbGYuZXhpc3RzKHBhdHRlcm4pOgogICAgICAgICAgZmlsZV9tZXRhZGF0YXMgPSBbRmlsZU1ldGFkYXRhKHBhdHRlcm4sIHNlbGYuc2l6ZShwYXR0ZXJuKSldCiAgICAgIGVsc2U6CiAgICAgICAgaWYgc2VsZi5oYXNfZGlycygpOgogICAgICAgICAgcHJlZml4X2Rpcm5hbWUgPSBzZWxmLl91cmxfZGlybmFtZShwcmVmaXhfb3JfZGlyKQogICAgICAgICAgaWYgbm90IHByZWZpeF9kaXJuYW1lID09IHByZWZpeF9vcl9kaXI6CiAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiQ2hhbmdlZCBwcmVmaXhfb3JfZGlyICVyIC0+ICVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeF9vcl9kaXIsIHByZWZpeF9kaXJuYW1lKQogICAgICAgICAgICBwcmVmaXhfb3JfZGlyID0gcHJlZml4X2Rpcm5hbWUKCiAgICAgICAgbG9nZ2VyLmRlYnVnKCJMaXN0aW5nIGZpbGVzIGluICVyIiwgcHJlZml4X29yX2RpcikKICAgICAgICBmaWxlX21ldGFkYXRhcyA9IHNlbGYuX2xpc3QocHJlZml4X29yX2RpcikKCiAgICAgIG1ldGFkYXRhX2xpc3QgPSBbXQogICAgICBmb3IgZmlsZV9tZXRhZGF0YSBpbiBzZWxmLm1hdGNoX2ZpbGVzKGZpbGVfbWV0YWRhdGFzLCBwYXR0ZXJuKToKICAgICAgICBpZiBsaW1pdCBpcyBub3QgTm9uZSBhbmQgbGVuKG1ldGFkYXRhX2xpc3QpID49IGxpbWl0OgogICAgICAgICAgYnJlYWsKICAgICAgICBtZXRhZGF0YV9saXN0LmFwcGVuZChmaWxlX21ldGFkYXRhKQoKICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHBhdHRlcm4sIG1ldGFkYXRhX2xpc3QpCgogICAgZXhjZXB0aW9ucyA9IHt9CiAgICByZXN1bHQgPSBbXQogICAgZm9yIHBhdHRlcm4sIGxpbWl0IGluIHppcChwYXR0ZXJucywgbGltaXRzKToKICAgICAgdHJ5OgogICAgICAgIHJlc3VsdC5hcHBlbmQoX21hdGNoKHBhdHRlcm4sIGxpbWl0KSkKICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOiAgIyBweWxpbnQ6IGRpc2FibGU9YnJvYWQtZXhjZXB0CiAgICAgICAgZXhjZXB0aW9uc1twYXR0ZXJuXSA9IGUKCiAgICBpZiBleGNlcHRpb25zOgogICAgICByYWlzZSBCZWFtSU9FcnJvcigiTWF0Y2ggb3BlcmF0aW9uIGZhaWxlZCIsIGV4Y2VwdGlvbnMpCiAgICByZXR1cm4gcmVzdWx0CgogIEBhYmMuYWJzdHJhY3RtZXRob2QKICBkZWYgY3JlYXRlKHNlbGYsIHBhdGgsIG1pbWVfdHlwZT0nYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywKICAgICAgICAgICAgIGNvbXByZXNzaW9uX3R5cGU9Q29tcHJlc3Npb25UeXBlcy5BVVRPKToKICAgICIiIlJldHVybnMgYSB3cml0ZSBjaGFubmVsIGZvciB0aGUgZ2l2ZW4gZmlsZSBwYXRoLgoKICAgIEFyZ3M6CiAgICAgIHBhdGg6IHN0cmluZyBwYXRoIG9mIHRoZSBmaWxlIG9iamVjdCB0byBiZSB3cml0dGVuIHRvIHRoZSBzeXN0ZW0KICAgICAgbWltZV90eXBlOiBNSU1FIHR5cGUgdG8gc3BlY2lmeSB0aGUgdHlwZSBvZiBjb250ZW50IGluIHRoZSBmaWxlIG9iamVjdAogICAgICBjb21wcmVzc2lvbl90eXBlOiBUeXBlIG9mIGNvbXByZXNzaW9uIHRvIGJlIHVzZWQgZm9yIHRoaXMgb2JqZWN0CgogICAgUmV0dXJuczogZmlsZSBoYW5kbGUgd2l0aCBhIGNsb3NlIGZ1bmN0aW9uIGZvciB0aGUgdXNlciB0byB1c2UKICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgZGVmIG9wZW4oc2VsZiwgcGF0aCwgbWltZV90eXBlPSdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICAgICAgIGNvbXByZXNzaW9uX3R5cGU9Q29tcHJlc3Npb25UeXBlcy5BVVRPKToKICAgICIiIlJldHVybnMgYSByZWFkIGNoYW5uZWwgZm9yIHRoZSBnaXZlbiBmaWxlIHBhdGguCgogICAgQXJnczoKICAgICAgcGF0aDogc3RyaW5nIHBhdGggb2YgdGhlIGZpbGUgb2JqZWN0IHRvIGJlIHJlYWQKICAgICAgbWltZV90eXBlOiBNSU1FIHR5cGUgdG8gc3BlY2lmeSB0aGUgdHlwZSBvZiBjb250ZW50IGluIHRoZSBmaWxlIG9iamVjdAogICAgICBjb21wcmVzc2lvbl90eXBlOiBUeXBlIG9mIGNvbXByZXNzaW9uIHRvIGJlIHVzZWQgZm9yIHRoaXMgb2JqZWN0CgogICAgUmV0dXJuczogZmlsZSBoYW5kbGUgd2l0aCBhIGNsb3NlIGZ1bmN0aW9uIGZvciB0aGUgdXNlciB0byB1c2UKICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgZGVmIGNvcHkoc2VsZiwgc291cmNlX2ZpbGVfbmFtZXMsIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXMpOgogICAgIiIiUmVjdXJzaXZlbHkgY29weSB0aGUgZmlsZSB0cmVlIGZyb20gdGhlIHNvdXJjZSB0byB0aGUgZGVzdGluYXRpb24KCiAgICBBcmdzOgogICAgICBzb3VyY2VfZmlsZV9uYW1lczogbGlzdCBvZiBzb3VyY2UgZmlsZSBvYmplY3RzIHRoYXQgbmVlZHMgdG8gYmUgY29waWVkCiAgICAgIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXM6IGxpc3Qgb2YgZGVzdGluYXRpb24gb2YgdGhlIG5ldyBvYmplY3QKCiAgICBSYWlzZXM6CiAgICAgIGBgQmVhbUlPRXJyb3JgYCBpZiBhbnkgb2YgdGhlIGNvcHkgb3BlcmF0aW9ucyBmYWlsCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgQGFiYy5hYnN0cmFjdG1ldGhvZAogIGRlZiByZW5hbWUoc2VsZiwgc291cmNlX2ZpbGVfbmFtZXMsIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXMpOgogICAgIiIiUmVuYW1lIHRoZSBmaWxlcyBhdCB0aGUgc291cmNlIGxpc3QgdG8gdGhlIGRlc3RpbmF0aW9uIGxpc3QuCiAgICBTb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGxpc3RzIHNob3VsZCBiZSBvZiB0aGUgc2FtZSBzaXplLgoKICAgIEFyZ3M6CiAgICAgIHNvdXJjZV9maWxlX25hbWVzOiBMaXN0IG9mIGZpbGUgcGF0aHMgdGhhdCBuZWVkIHRvIGJlIG1vdmVkCiAgICAgIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXM6IExpc3Qgb2YgZGVzdGluYXRpb25fZmlsZV9uYW1lcyBmb3IgdGhlIGZpbGVzCgogICAgUmFpc2VzOgogICAgICBgYEJlYW1JT0Vycm9yYGAgaWYgYW55IG9mIHRoZSByZW5hbWUgb3BlcmF0aW9ucyBmYWlsCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgQGFiYy5hYnN0cmFjdG1ldGhvZAogIGRlZiBleGlzdHMoc2VsZiwgcGF0aCk6CiAgICAiIiJDaGVjayBpZiB0aGUgcHJvdmlkZWQgcGF0aCBleGlzdHMgb24gdGhlIEZpbGVTeXN0ZW0uCgogICAgQXJnczoKICAgICAgcGF0aDogc3RyaW5nIHBhdGggdGhhdCBuZWVkcyB0byBiZSBjaGVja2VkLgoKICAgIFJldHVybnM6IGJvb2xlYW4gZmxhZyBpbmRpY2F0aW5nIGlmIHBhdGggZXhpc3RzCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgQGFiYy5hYnN0cmFjdG1ldGhvZAogIGRlZiBzaXplKHNlbGYsIHBhdGgpOgogICAgIiIiR2V0IHNpemUgaW4gYnl0ZXMgb2YgYSBmaWxlIG9uIHRoZSBGaWxlU3lzdGVtLgoKICAgIEFyZ3M6CiAgICAgIHBhdGg6IHN0cmluZyBmaWxlcGF0aCBvZiBmaWxlLgoKICAgIFJldHVybnM6IGludCBzaXplIG9mIGZpbGUgYWNjb3JkaW5nIHRvIHRoZSBGaWxlU3lzdGVtLgoKICAgIFJhaXNlczoKICAgICAgYGBCZWFtSU9FcnJvcmBgIGlmIHBhdGggZG9lc24ndCBleGlzdC4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgZGVmIGxhc3RfdXBkYXRlZChzZWxmLCBwYXRoKToKICAgICIiIkdldCBVTklYIEVwb2NoIHRpbWUgaW4gc2Vjb25kcyBvbiB0aGUgRmlsZVN5c3RlbS4KCiAgICBBcmdzOgogICAgICBwYXRoOiBzdHJpbmcgcGF0aCBvZiBmaWxlLgoKICAgIFJldHVybnM6IGZsb2F0IFVOSVggRXBvY2ggdGltZQoKICAgIFJhaXNlczoKICAgICAgYGBCZWFtSU9FcnJvcmBgIGlmIHBhdGggZG9lc24ndCBleGlzdC4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgY2hlY2tzdW0oc2VsZiwgcGF0aCk6CiAgICAiIiJGZXRjaCBjaGVja3N1bSBtZXRhZGF0YSBvZiBhIGZpbGUgb24gdGhlCiAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkZpbGVTeXN0ZW1gLgoKICAgIFRoaXMgb3BlcmF0aW9uIHJldHVybnMgY2hlY2tzdW0gbWV0YWRhdGEgYXMgc3RvcmVkIGluIHRoZSB1bmRlcmx5aW5nCiAgICBGaWxlU3lzdGVtLiBJdCBzaG91bGQgbm90IG5lZWQgdG8gcmVhZCBmaWxlIGRhdGEgdG8gb2J0YWluIHRoaXMgdmFsdWUuCiAgICBDaGVja3N1bSB0eXBlIGFuZCBmb3JtYXQgYXJlIEZpbGVTeXN0ZW0gZGVwZW5kZW50IGFuZCBhcmUgbm90IGNvbXBhdGlibGUKICAgIGJldHdlZW4gRmlsZVN5c3RlbXMuCiAgICBGaWxlU3lzdGVtIGltcGxlbWVudGF0aW9ucyBtYXkgcmV0dXJuIGZpbGUgc2l6ZSBpZiBhIGNoZWNrc3VtIGlzbid0CiAgICBhdmFpbGFibGUuCgogICAgQXJnczoKICAgICAgcGF0aDogc3RyaW5nIHBhdGggb2YgYSBmaWxlLgoKICAgIFJldHVybnM6IHN0cmluZyBjb250YWluaW5nIGNoZWNrc3VtCgogICAgUmFpc2VzOgogICAgICBgYEJlYW1JT0Vycm9yYGAgaWYgcGF0aCBpc24ndCBhIGZpbGUgb3IgZG9lc24ndCBleGlzdC4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgZGVmIGRlbGV0ZShzZWxmLCBwYXRocyk6CiAgICAiIiJEZWxldGVzIGZpbGVzIG9yIGRpcmVjdG9yaWVzIGF0IHRoZSBwcm92aWRlZCBwYXRocy4KICAgIERpcmVjdG9yaWVzIHdpbGwgYmUgZGVsZXRlZCByZWN1cnNpdmVseS4KCiAgICBBcmdzOgogICAgICBwYXRoczogbGlzdCBvZiBwYXRocyB0aGF0IGdpdmUgdGhlIGZpbGUgb2JqZWN0cyB0byBiZSBkZWxldGVkCgogICAgUmFpc2VzOgogICAgICBgYEJlYW1JT0Vycm9yYGAgaWYgYW55IG9mIHRoZSBkZWxldGUgb3BlcmF0aW9ucyBmYWlsCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKfXIqgwAAKFgpAAAAQ29tcHJlc3NlZEZpbGUuX3JlYWRfZnJvbV9pbnRlcm5hbF9idWZmZXJYAwAAAGRlZkvmS+6HWBUAAABGaWxlTWV0YWRhdGEuX19oYXNoX19YAwAAAGRlZk2SAU2UAYdYEQAAAEZpbGVTeXN0ZW0ubWtkaXJzWAMAAABkZWZN8wFN/gGHWBoAAABGaWxlU3lzdGVtLl9jb21iaW5lX3NjaGVtZVgDAAAAZGVmTR0CTSICh1gRAAAARmlsZVN5c3RlbS5yZW5hbWVYAwAAAGRlZk3tAk36AodYEQAAAEZpbGVTeXN0ZW0uY3JlYXRlWAMAAABkZWZNxAJN0QKHWCgAAABDb21wcmVzc2VkRmlsZS5fZmV0Y2hfdG9faW50ZXJuYWxfYnVmZmVyWAMAAABkZWZLtkvlh1ggAAAARmlsZVN5c3RlbS5fZ2V0X2NvbXByZXNzaW9uX3R5cGVYAwAAAGRlZk3HAU3PAYdYKgAAAENvbXByZXNzaW9uVHlwZXMuaXNfdmFsaWRfY29tcHJlc3Npb25fdHlwZVgDAAAAZGVmS0lLU4dYDgAAAENvbXByZXNzZWRGaWxlWAUAAABjbGFzc0tnTX4Bh1gYAAAAQ29tcHJlc3NlZEZpbGUud3JpdGVhYmxlWAMAAABkZWZLqUush1gRAAAARmlsZVN5c3RlbS5zY2hlbWVYAwAAAGRlZk3QAU3VAYdYCwAAAEJlYW1JT0Vycm9yWAUAAABjbGFzc02mAU21AYdYDwAAAEZpbGVTeXN0ZW0uY29weVgDAAAAZGVmTeACTewCh1glAAAAQ29tcHJlc3NlZEZpbGUuX2luaXRpYWxpemVfY29tcHJlc3NvclgDAAAAZGVmS51LpIdYGAAAAENvbXByZXNzZWRGaWxlLl9fZW50ZXJfX1gDAAAAZGVmTXkBTXsBh1gWAAAAQ29tcHJlc3NlZEZpbGUuX3Jld2luZFgDAAAAZGVmTS4BTTcBh1gXAAAAQ29tcHJlc3NlZEZpbGUuX19pbml0X19YAwAAAGRlZktvS5WHWBMAAABGaWxlU3lzdGVtLmhhc19kaXJzWAMAAABkZWZN/wFNAwKHWBAAAABGaWxlU3lzdGVtLm1hdGNoWAMAAABkZWZNfwJNwwKHWBcAAABGaWxlU3lzdGVtLm1hdGNoLl9tYXRjaFgDAAAAZGVmTZYCTbcCh1gXAAAAQ29tcHJlc3NlZEZpbGUuX19leGl0X19YAwAAAGRlZk18AU1+AYdYEAAAAENvbXByZXNzaW9uVHlwZXNYBQAAAGNsYXNzSzVLZYdYJwAAAENvbXByZXNzZWRGaWxlLl9pbml0aWFsaXplX2RlY29tcHJlc3NvclgDAAAAZGVmS5ZLnIdYFAAAAE1hdGNoUmVzdWx0Ll9faW5pdF9fWAMAAABkZWZNoQFNpAGHWBQAAABDb21wcmVzc2VkRmlsZS5mbHVzaFgDAAAAZGVmTRcBTRsBh1gVAAAAQ29tcHJlc3NlZEZpbGUuY2xvc2VkWAMAAABkZWZNCwFNDQGHWBUAAABGaWxlTWV0YWRhdGEuX19yZXByX19YAwAAAGRlZk2ZAU2bAYdYEQAAAEZpbGVTeXN0ZW0uZXhpc3RzWAMAAABkZWZN+wJNBQOHWBMAAABGaWxlTWV0YWRhdGEuX19uZV9fWAMAAABkZWZNlQFNmAGHWCgAAABDb21wcmVzc2lvblR5cGVzLmRldGVjdF9jb21wcmVzc2lvbl90eXBlWAMAAABkZWZLXEtlh1gUAAAAQmVhbUlPRXJyb3IuX19pbml0X19YAwAAAGRlZk2nAU21AYdYIQAAAENvbXByZXNzZWRGaWxlLl9jbGVhcl9yZWFkX2J1ZmZlclgDAAAAZGVmTSABTSYBh1gTAAAAQ29tcHJlc3NlZEZpbGUucmVhZFgDAAAAZGVmS+9L9odYDwAAAEZpbGVTeXN0ZW0ub3BlblgDAAAAZGVmTdICTd8Ch1gUAAAAQ29tcHJlc3NlZEZpbGUuY2xvc2VYAwAAAGRlZk0OAU0WAYdYGgAAAENvbXByZXNzaW9uVHlwZXMubWltZV90eXBlWAMAAABkZWZLVEtbh1gTAAAAQ29tcHJlc3NlZEZpbGUuc2Vla1gDAAAAZGVmTTgBTXQBh1gVAAAARmlsZU1ldGFkYXRhLl9faW5pdF9fWAMAAABkZWZNgwFNigGHWBcAAABDb21wcmVzc2VkRmlsZS5yZWFkbGluZVgDAAAAZGVmS/dNCgGHWBMAAABGaWxlU3lzdGVtLmNoZWNrc3VtWAMAAABkZWZNIgNNNgOHWBYAAABGaWxlU3lzdGVtLm1hdGNoX2ZpbGVzWAMAAABkZWZNLAJNPwKHWBMAAABGaWxlTWV0YWRhdGEuX19lcV9fWAMAAABkZWZNiwFNkQGHWBcAAABDb21wcmVzc2VkRmlsZS5yZWFkYWJsZVgDAAAAZGVmS6VLqIdYDAAAAEZpbGVNZXRhZGF0YVgFAAAAY2xhc3NNgAFNmwGHWBQAAABDb21wcmVzc2VkRmlsZS53cml0ZVgDAAAAZGVmS61LtYdYEAAAAEZpbGVTeXN0ZW0uc3BsaXRYAwAAAGRlZk3iAU3yAYdYDwAAAEZpbGVTeXN0ZW0uam9pblgDAAAAZGVmTdYBTeEBh1gRAAAARmlsZVN5c3RlbS5kZWxldGVYAwAAAGRlZk03A01DA4dYFwAAAEZpbGVTeXN0ZW0uX3VybF9kaXJuYW1lWAMAAABkZWZNIwJNKwKHWBAAAABGaWxlU3lzdGVtLl9saXN0WAMAAABkZWZNBAJNFQKHWBMAAABDb21wcmVzc2VkRmlsZS50ZWxsWAMAAABkZWZNdQFNeAGHWBgAAABGaWxlU3lzdGVtLl9zcGxpdF9zY2hlbWVYAwAAAGRlZk0WAk0cAodYCgAAAEZpbGVTeXN0ZW1YBQAAAGNsYXNzTbcBTUMDh1gXAAAAQ29tcHJlc3NlZEZpbGUuc2Vla2FibGVYAwAAAGRlZk0cAU0fAYdYEwAAAEZpbGVTeXN0ZW0uX19pbml0X19YAwAAAGRlZk3AAU3GAYdYHAAAAEZpbGVTeXN0ZW0udHJhbnNsYXRlX3BhdHRlcm5YAwAAAGRlZk1AAk1+AodYGwAAAENvbXByZXNzZWRGaWxlLl9yZXdpbmRfZmlsZVgDAAAAZGVmTScBTS0Bh1gLAAAATWF0Y2hSZXN1bHRYBQAAAGNsYXNzTZ0BTaQBh1gPAAAARmlsZVN5c3RlbS5zaXplWAMAAABkZWZNBgNNEwOHWBcAAABGaWxlU3lzdGVtLmxhc3RfdXBkYXRlZFgDAAAAZGVmTRQDTSEDh3V9ciuDAAAoWBEAAABGaWxlU3lzdGVtLm1rZGlyc2oZXAAAWBEAAABGaWxlU3lzdGVtLnJlbmFtZWoZXAAAWBEAAABGaWxlU3lzdGVtLmNyZWF0ZWoZXAAAWBgAAABDb21wcmVzc2VkRmlsZS53cml0ZWFibGVqGVwAAFgOAAAAQ29tcHJlc3NlZEZpbGVqGVwAAFgqAAAAQ29tcHJlc3Npb25UeXBlcy5pc192YWxpZF9jb21wcmVzc2lvbl90eXBlahlcAABYEQAAAEZpbGVTeXN0ZW0uc2NoZW1lahlcAABYDwAAAEZpbGVTeXN0ZW0uY29weWoZXAAAWBMAAABGaWxlU3lzdGVtLmhhc19kaXJzahlcAABYEAAAAEZpbGVTeXN0ZW0ubWF0Y2hqGVwAAFgTAAAARmlsZVN5c3RlbS5jaGVja3N1bWoZXAAAWBQAAABDb21wcmVzc2VkRmlsZS5mbHVzaGoZXAAAWBUAAABDb21wcmVzc2VkRmlsZS5jbG9zZWRqGVwAAFgPAAAARmlsZVN5c3RlbS5zaXplahlcAABYEQAAAEZpbGVTeXN0ZW0uZXhpc3RzahlcAABYKAAAAENvbXByZXNzaW9uVHlwZXMuZGV0ZWN0X2NvbXByZXNzaW9uX3R5cGVqGVwAAFgTAAAAQ29tcHJlc3NlZEZpbGUucmVhZGoZXAAAWA8AAABGaWxlU3lzdGVtLm9wZW5qGVwAAFgaAAAAQ29tcHJlc3Npb25UeXBlcy5taW1lX3R5cGVqGVwAAFgTAAAAQ29tcHJlc3NlZEZpbGUuc2Vla2oZXAAAWBcAAABDb21wcmVzc2VkRmlsZS5yZWFkbGluZWoZXAAAWBAAAABDb21wcmVzc2lvblR5cGVzahlcAABYFgAAAEZpbGVTeXN0ZW0ubWF0Y2hfZmlsZXNqGVwAAFgXAAAAQ29tcHJlc3NlZEZpbGUucmVhZGFibGVqGVwAAFgMAAAARmlsZU1ldGFkYXRhahlcAABYFAAAAENvbXByZXNzZWRGaWxlLndyaXRlahlcAABYEAAAAEZpbGVTeXN0ZW0uc3BsaXRqGVwAAFgPAAAARmlsZVN5c3RlbS5qb2luahlcAABYEQAAAEZpbGVTeXN0ZW0uZGVsZXRlahlcAABYEwAAAENvbXByZXNzZWRGaWxlLnRlbGxqGVwAAFgKAAAARmlsZVN5c3RlbWoZXAAAWBwAAABGaWxlU3lzdGVtLnRyYW5zbGF0ZV9wYXR0ZXJuahlcAABYCwAAAE1hdGNoUmVzdWx0ahlcAABYFAAAAENvbXByZXNzZWRGaWxlLmNsb3NlahlcAABYFwAAAEZpbGVTeXN0ZW0ubGFzdF91cGRhdGVkahlcAAB1an1pAABYGQAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1yLIMAAIWBci2DAAB9ci6DAABidFUqYXBhY2hlX2JlYW0udG9vbHMuc2lkZWlucHV0X21pY3JvYmVuY2htYXJrKFhQCwAAIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoiIiJBIG1pY3JvYmVuY2htYXJrIGZvciBtZWFzdXJpbmcgcGVyZm9ybWFuY2Ugb2YgU2lkZSBJbnB1dHMgaXRlcmFibGUuCgpSdW5zIHNpZGUgaW5wdXQgaXRlcmFibGUgdGhhdCBmZXRjaGVzIGZyb20gbXVsdGlwbGUgRmFrZVNvdXJjZXMsIGFuZAptZWFzdXJlcyB0aGUgdGltZSB0byBmZXRjaCBhbGwgZWxlbWVudHMgZnJvbSBhbGwgc291cmNlcy4KClJ1biBhcwogIHB5dGhvbiAtbSBhcGFjaGVfYmVhbS50b29scy5zaWRlaW5wdXRfbWljcm9iZW5jaG1hcmsKIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydApmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KCmltcG9ydCB0aW1lCmZyb20gYnVpbHRpbnMgaW1wb3J0IHJhbmdlCgpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMud29ya2VyIGltcG9ydCBvcGNvdW50ZXJzCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy53b3JrZXIgaW1wb3J0IHNpZGVpbnB1dHMKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLndvcmtlciBpbXBvcnQgc3RhdGVzYW1wbGVyCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy53b3JrZXIuc2lkZWlucHV0c190ZXN0IGltcG9ydCBGYWtlU291cmNlCmZyb20gYXBhY2hlX2JlYW0udG9vbHMgaW1wb3J0IHV0aWxzCmZyb20gYXBhY2hlX2JlYW0udXRpbHMuY291bnRlcnMgaW1wb3J0IENvdW50ZXJGYWN0b3J5CgoKZGVmIGxvbmdfZ2VuZXJhdG9yKHZhbHVlLCBlbGVtZW50cyk6CiAgZm9yIF8gaW4gcmFuZ2UoZWxlbWVudHMpOgogICAgeWllbGQgdmFsdWUKCgpkZWYgcnVuX2JlbmNobWFyayhudW1fcnVucz01MCwgaW5wdXRfcGVyX3NvdXJjZT00MDAwLCBudW1fc291cmNlcz00KToKICBwcmludCgiTnVtYmVyIG9mIHJ1bnM6IiwgbnVtX3J1bnMpCiAgcHJpbnQoIklucHV0IHNpemU6IiwgbnVtX3NvdXJjZXMgKiBpbnB1dF9wZXJfc291cmNlKQogIHByaW50KCJTb3VyY2VzOiIsIG51bV9zb3VyY2VzKQoKICB0aW1lcyA9IFtdCiAgZm9yIGkgaW4gcmFuZ2UobnVtX3J1bnMpOgogICAgY291bnRlcl9mYWN0b3J5ID0gQ291bnRlckZhY3RvcnkoKQogICAgc3RhdGVfc2FtcGxlciA9IHN0YXRlc2FtcGxlci5TdGF0ZVNhbXBsZXIoJ2Jhc2ljJywgY291bnRlcl9mYWN0b3J5KQogICAgc3RhdGVfc2FtcGxlci5zdGFydCgpCiAgICB3aXRoIHN0YXRlX3NhbXBsZXIuc2NvcGVkX3N0YXRlKCdzdGVwMScsICdzdGF0ZScpOgogICAgICBzaV9jb3VudGVyID0gb3Bjb3VudGVycy5TaWRlSW5wdXRSZWFkQ291bnRlcigKICAgICAgICAgIGNvdW50ZXJfZmFjdG9yeSwgc3RhdGVfc2FtcGxlciwgJ3N0ZXAxJywgMSkKICAgICAgc2lfY291bnRlciA9IG9wY291bnRlcnMuTm9PcFRyYW5zZm9ybUlPQ291bnRlcigpCiAgICAgIHNvdXJjZXMgPSBbCiAgICAgICAgICBGYWtlU291cmNlKGxvbmdfZ2VuZXJhdG9yKGksIGlucHV0X3Blcl9zb3VyY2UpKQogICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobnVtX3NvdXJjZXMpXQogICAgICBpdGVyYXRvcl9mbiA9IHNpZGVpbnB1dHMuZ2V0X2l0ZXJhdG9yX2ZuX2Zvcl9zb3VyY2VzKAogICAgICAgICAgc291cmNlcywgcmVhZF9jb3VudGVyPXNpX2NvdW50ZXIpCiAgICAgIHN0YXJ0ID0gdGltZS50aW1lKCkKICAgICAgbGlzdChpdGVyYXRvcl9mbigpKQogICAgICB0aW1lX2Nvc3QgPSB0aW1lLnRpbWUoKSAtIHN0YXJ0CiAgICAgIHRpbWVzLmFwcGVuZCh0aW1lX2Nvc3QpCiAgICBzdGF0ZV9zYW1wbGVyLnN0b3AoKQoKICBwcmludCgiUnVudGltZXM6IiwgdGltZXMpCgogIGF2Z19ydW50aW1lID0gc3VtKHRpbWVzKSAvIGxlbih0aW1lcykKICBwcmludCgiQXZlcmFnZSBydW50aW1lOiIsIGF2Z19ydW50aW1lKQogIHByaW50KCJUaW1lIHBlciBlbGVtZW50OiIsIGF2Z19ydW50aW1lIC8gKGlucHV0X3Blcl9zb3VyY2UgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9zb3VyY2VzKSkKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogIHV0aWxzLmNoZWNrX2NvbXBpbGVkKAogICAgICAnYXBhY2hlX2JlYW0ucnVubmVycy53b3JrZXIub3Bjb3VudGVycycpCiAgcnVuX2JlbmNobWFyaygpCn1yL4MAAChYDQAAAHJ1bl9iZW5jaG1hcmtYAwAAAGRlZkstS0yHWA4AAABsb25nX2dlbmVyYXRvclgDAAAAZGVmSyhLK4d1fXIwgwAAKFgNAAAAcnVuX2JlbmNobWFya2pbXQAAWA4AAABsb25nX2dlbmVyYXRvcmpbXQAAdWp9aQAAWCoAAABhcGFjaGVfYmVhbS50b29scy5zaWRlaW5wdXRfbWljcm9iZW5jaG1hcmtyMYMAAIWBcjKDAAB9cjODAABidFU2YXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fYXJ0aWZhY3RfYXBpX3BiMl9ncnBjKFifFAAAZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKIyBHZW5lcmF0ZWQgYnkgdGhlIGdSUEMgUHl0aG9uIHByb3RvY29sIGNvbXBpbGVyIHBsdWdpbi4gRE8gTk9UIEVESVQhCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdAppbXBvcnQgZ3JwYwoKZnJvbSAuIGltcG9ydCBiZWFtX2FydGlmYWN0X2FwaV9wYjIgYXMgYmVhbV9fYXJ0aWZhY3RfX2FwaV9fcGIyCgoKY2xhc3MgQXJ0aWZhY3RTdGFnaW5nU2VydmljZVN0dWIob2JqZWN0KToKICAiIiJBIHNlcnZpY2UgdG8gc3RhZ2UgYXJ0aWZhY3RzIGZvciB1c2UgaW4gYSBKb2IuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBjaGFubmVsKToKICAgICIiIkNvbnN0cnVjdG9yLgoKICAgIEFyZ3M6CiAgICAgIGNoYW5uZWw6IEEgZ3JwYy5DaGFubmVsLgogICAgIiIiCiAgICBzZWxmLlB1dEFydGlmYWN0ID0gY2hhbm5lbC5zdHJlYW1fdW5hcnkoCiAgICAgICAgJy9vcmcuYXBhY2hlLmJlYW0ubW9kZWwuam9iX21hbmFnZW1lbnQudjEuQXJ0aWZhY3RTdGFnaW5nU2VydmljZS9QdXRBcnRpZmFjdCcsCiAgICAgICAgcmVxdWVzdF9zZXJpYWxpemVyPWJlYW1fX2FydGlmYWN0X19hcGlfX3BiMi5QdXRBcnRpZmFjdFJlcXVlc3QuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICAgcmVzcG9uc2VfZGVzZXJpYWxpemVyPWJlYW1fX2FydGlmYWN0X19hcGlfX3BiMi5QdXRBcnRpZmFjdFJlc3BvbnNlLkZyb21TdHJpbmcsCiAgICAgICAgKQogICAgc2VsZi5Db21taXRNYW5pZmVzdCA9IGNoYW5uZWwudW5hcnlfdW5hcnkoCiAgICAgICAgJy9vcmcuYXBhY2hlLmJlYW0ubW9kZWwuam9iX21hbmFnZW1lbnQudjEuQXJ0aWZhY3RTdGFnaW5nU2VydmljZS9Db21taXRNYW5pZmVzdCcsCiAgICAgICAgcmVxdWVzdF9zZXJpYWxpemVyPWJlYW1fX2FydGlmYWN0X19hcGlfX3BiMi5Db21taXRNYW5pZmVzdFJlcXVlc3QuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICAgcmVzcG9uc2VfZGVzZXJpYWxpemVyPWJlYW1fX2FydGlmYWN0X19hcGlfX3BiMi5Db21taXRNYW5pZmVzdFJlc3BvbnNlLkZyb21TdHJpbmcsCiAgICAgICAgKQoKCmNsYXNzIEFydGlmYWN0U3RhZ2luZ1NlcnZpY2VTZXJ2aWNlcihvYmplY3QpOgogICIiIkEgc2VydmljZSB0byBzdGFnZSBhcnRpZmFjdHMgZm9yIHVzZSBpbiBhIEpvYi4KICAiIiIKCiAgZGVmIFB1dEFydGlmYWN0KHNlbGYsIHJlcXVlc3RfaXRlcmF0b3IsIGNvbnRleHQpOgogICAgIiIiU3RhZ2UgYW4gYXJ0aWZhY3QgdG8gYmUgYXZhaWxhYmxlIGR1cmluZyBqb2IgZXhlY3V0aW9uLiBUaGUgZmlyc3QgcmVxdWVzdCBtdXN0IGNvbnRhaW4gdGhlCiAgICBuYW1lIG9mIHRoZSBhcnRpZmFjdC4gQWxsIGZ1dHVyZSByZXF1ZXN0cyBtdXN0IGNvbnRhaW4gc2VxdWVudGlhbCBjaHVua3Mgb2YgdGhlIGNvbnRlbnQgb2YKICAgIHRoZSBhcnRpZmFjdC4KICAgICIiIgogICAgY29udGV4dC5zZXRfY29kZShncnBjLlN0YXR1c0NvZGUuVU5JTVBMRU1FTlRFRCkKICAgIGNvbnRleHQuc2V0X2RldGFpbHMoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKCiAgZGVmIENvbW1pdE1hbmlmZXN0KHNlbGYsIHJlcXVlc3QsIGNvbnRleHQpOgogICAgIiIiQ29tbWl0IHRoZSBtYW5pZmVzdCBmb3IgYSBKb2IuIEFsbCBhcnRpZmFjdHMgbXVzdCBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IHVwbG9hZGVkCiAgICBiZWZvcmUgdGhpcyBjYWxsIGlzIG1hZGUuCgogICAgVGhyb3dzIGVycm9yIElOVkFMSURfQVJHVU1FTlQgaWYgbm90IGFsbCBvZiB0aGUgbWVtYmVycyBvZiB0aGUgbWFuaWZlc3QgYXJlIHByZXNlbnQKICAgICIiIgogICAgY29udGV4dC5zZXRfY29kZShncnBjLlN0YXR1c0NvZGUuVU5JTVBMRU1FTlRFRCkKICAgIGNvbnRleHQuc2V0X2RldGFpbHMoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKCgpkZWYgYWRkX0FydGlmYWN0U3RhZ2luZ1NlcnZpY2VTZXJ2aWNlcl90b19zZXJ2ZXIoc2VydmljZXIsIHNlcnZlcik6CiAgcnBjX21ldGhvZF9oYW5kbGVycyA9IHsKICAgICAgJ1B1dEFydGlmYWN0JzogZ3JwYy5zdHJlYW1fdW5hcnlfcnBjX21ldGhvZF9oYW5kbGVyKAogICAgICAgICAgc2VydmljZXIuUHV0QXJ0aWZhY3QsCiAgICAgICAgICByZXF1ZXN0X2Rlc2VyaWFsaXplcj1iZWFtX19hcnRpZmFjdF9fYXBpX19wYjIuUHV0QXJ0aWZhY3RSZXF1ZXN0LkZyb21TdHJpbmcsCiAgICAgICAgICByZXNwb25zZV9zZXJpYWxpemVyPWJlYW1fX2FydGlmYWN0X19hcGlfX3BiMi5QdXRBcnRpZmFjdFJlc3BvbnNlLlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICApLAogICAgICAnQ29tbWl0TWFuaWZlc3QnOiBncnBjLnVuYXJ5X3VuYXJ5X3JwY19tZXRob2RfaGFuZGxlcigKICAgICAgICAgIHNlcnZpY2VyLkNvbW1pdE1hbmlmZXN0LAogICAgICAgICAgcmVxdWVzdF9kZXNlcmlhbGl6ZXI9YmVhbV9fYXJ0aWZhY3RfX2FwaV9fcGIyLkNvbW1pdE1hbmlmZXN0UmVxdWVzdC5Gcm9tU3RyaW5nLAogICAgICAgICAgcmVzcG9uc2Vfc2VyaWFsaXplcj1iZWFtX19hcnRpZmFjdF9fYXBpX19wYjIuQ29tbWl0TWFuaWZlc3RSZXNwb25zZS5TZXJpYWxpemVUb1N0cmluZywKICAgICAgKSwKICB9CiAgZ2VuZXJpY19oYW5kbGVyID0gZ3JwYy5tZXRob2RfaGFuZGxlcnNfZ2VuZXJpY19oYW5kbGVyKAogICAgICAnb3JnLmFwYWNoZS5iZWFtLm1vZGVsLmpvYl9tYW5hZ2VtZW50LnYxLkFydGlmYWN0U3RhZ2luZ1NlcnZpY2UnLCBycGNfbWV0aG9kX2hhbmRsZXJzKQogIHNlcnZlci5hZGRfZ2VuZXJpY19ycGNfaGFuZGxlcnMoKGdlbmVyaWNfaGFuZGxlciwpKQoKCmNsYXNzIEFydGlmYWN0UmV0cmlldmFsU2VydmljZVN0dWIob2JqZWN0KToKICAiIiJBIHNlcnZpY2UgdG8gcmV0cmlldmUgYXJ0aWZhY3RzIGZvciB1c2UgaW4gYSBKb2IuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBjaGFubmVsKToKICAgICIiIkNvbnN0cnVjdG9yLgoKICAgIEFyZ3M6CiAgICAgIGNoYW5uZWw6IEEgZ3JwYy5DaGFubmVsLgogICAgIiIiCiAgICBzZWxmLkdldE1hbmlmZXN0ID0gY2hhbm5lbC51bmFyeV91bmFyeSgKICAgICAgICAnL29yZy5hcGFjaGUuYmVhbS5tb2RlbC5qb2JfbWFuYWdlbWVudC52MS5BcnRpZmFjdFJldHJpZXZhbFNlcnZpY2UvR2V0TWFuaWZlc3QnLAogICAgICAgIHJlcXVlc3Rfc2VyaWFsaXplcj1iZWFtX19hcnRpZmFjdF9fYXBpX19wYjIuR2V0TWFuaWZlc3RSZXF1ZXN0LlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICAgIHJlc3BvbnNlX2Rlc2VyaWFsaXplcj1iZWFtX19hcnRpZmFjdF9fYXBpX19wYjIuR2V0TWFuaWZlc3RSZXNwb25zZS5Gcm9tU3RyaW5nLAogICAgICAgICkKICAgIHNlbGYuR2V0QXJ0aWZhY3QgPSBjaGFubmVsLnVuYXJ5X3N0cmVhbSgKICAgICAgICAnL29yZy5hcGFjaGUuYmVhbS5tb2RlbC5qb2JfbWFuYWdlbWVudC52MS5BcnRpZmFjdFJldHJpZXZhbFNlcnZpY2UvR2V0QXJ0aWZhY3QnLAogICAgICAgIHJlcXVlc3Rfc2VyaWFsaXplcj1iZWFtX19hcnRpZmFjdF9fYXBpX19wYjIuR2V0QXJ0aWZhY3RSZXF1ZXN0LlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICAgIHJlc3BvbnNlX2Rlc2VyaWFsaXplcj1iZWFtX19hcnRpZmFjdF9fYXBpX19wYjIuQXJ0aWZhY3RDaHVuay5Gcm9tU3RyaW5nLAogICAgICAgICkKCgpjbGFzcyBBcnRpZmFjdFJldHJpZXZhbFNlcnZpY2VTZXJ2aWNlcihvYmplY3QpOgogICIiIkEgc2VydmljZSB0byByZXRyaWV2ZSBhcnRpZmFjdHMgZm9yIHVzZSBpbiBhIEpvYi4KICAiIiIKCiAgZGVmIEdldE1hbmlmZXN0KHNlbGYsIHJlcXVlc3QsIGNvbnRleHQpOgogICAgIiIiR2V0IHRoZSBtYW5pZmVzdCBmb3IgdGhlIGpvYgogICAgIiIiCiAgICBjb250ZXh0LnNldF9jb2RlKGdycGMuU3RhdHVzQ29kZS5VTklNUExFTUVOVEVEKQogICAgY29udGV4dC5zZXRfZGV0YWlscygnTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQoKICBkZWYgR2V0QXJ0aWZhY3Qoc2VsZiwgcmVxdWVzdCwgY29udGV4dCk6CiAgICAiIiJHZXQgYW4gYXJ0aWZhY3Qgc3RhZ2VkIGZvciB0aGUgam9iLiBUaGUgcmVxdWVzdGVkIGFydGlmYWN0IG11c3QgYmUgd2l0aGluIHRoZSBtYW5pZmVzdAogICAgIiIiCiAgICBjb250ZXh0LnNldF9jb2RlKGdycGMuU3RhdHVzQ29kZS5VTklNUExFTUVOVEVEKQogICAgY29udGV4dC5zZXRfZGV0YWlscygnTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQoKCmRlZiBhZGRfQXJ0aWZhY3RSZXRyaWV2YWxTZXJ2aWNlU2VydmljZXJfdG9fc2VydmVyKHNlcnZpY2VyLCBzZXJ2ZXIpOgogIHJwY19tZXRob2RfaGFuZGxlcnMgPSB7CiAgICAgICdHZXRNYW5pZmVzdCc6IGdycGMudW5hcnlfdW5hcnlfcnBjX21ldGhvZF9oYW5kbGVyKAogICAgICAgICAgc2VydmljZXIuR2V0TWFuaWZlc3QsCiAgICAgICAgICByZXF1ZXN0X2Rlc2VyaWFsaXplcj1iZWFtX19hcnRpZmFjdF9fYXBpX19wYjIuR2V0TWFuaWZlc3RSZXF1ZXN0LkZyb21TdHJpbmcsCiAgICAgICAgICByZXNwb25zZV9zZXJpYWxpemVyPWJlYW1fX2FydGlmYWN0X19hcGlfX3BiMi5HZXRNYW5pZmVzdFJlc3BvbnNlLlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICApLAogICAgICAnR2V0QXJ0aWZhY3QnOiBncnBjLnVuYXJ5X3N0cmVhbV9ycGNfbWV0aG9kX2hhbmRsZXIoCiAgICAgICAgICBzZXJ2aWNlci5HZXRBcnRpZmFjdCwKICAgICAgICAgIHJlcXVlc3RfZGVzZXJpYWxpemVyPWJlYW1fX2FydGlmYWN0X19hcGlfX3BiMi5HZXRBcnRpZmFjdFJlcXVlc3QuRnJvbVN0cmluZywKICAgICAgICAgIHJlc3BvbnNlX3NlcmlhbGl6ZXI9YmVhbV9fYXJ0aWZhY3RfX2FwaV9fcGIyLkFydGlmYWN0Q2h1bmsuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICksCiAgfQogIGdlbmVyaWNfaGFuZGxlciA9IGdycGMubWV0aG9kX2hhbmRsZXJzX2dlbmVyaWNfaGFuZGxlcigKICAgICAgJ29yZy5hcGFjaGUuYmVhbS5tb2RlbC5qb2JfbWFuYWdlbWVudC52MS5BcnRpZmFjdFJldHJpZXZhbFNlcnZpY2UnLCBycGNfbWV0aG9kX2hhbmRsZXJzKQogIHNlcnZlci5hZGRfZ2VuZXJpY19ycGNfaGFuZGxlcnMoKGdlbmVyaWNfaGFuZGxlciwpKQp9cjSDAAAoWB4AAABBcnRpZmFjdFN0YWdpbmdTZXJ2aWNlU2VydmljZXJYBQAAAGNsYXNzSx9LNYdYLgAAAGFkZF9BcnRpZmFjdFJldHJpZXZhbFNlcnZpY2VTZXJ2aWNlcl90b19zZXJ2ZXJYAwAAAGRlZktyS4KHWBwAAABBcnRpZmFjdFJldHJpZXZhbFNlcnZpY2VTdHViWAUAAABjbGFzc0tJS12HWCwAAABhZGRfQXJ0aWZhY3RTdGFnaW5nU2VydmljZVNlcnZpY2VyX3RvX3NlcnZlclgDAAAAZGVmSzdLR4dYLAAAAEFydGlmYWN0UmV0cmlldmFsU2VydmljZVNlcnZpY2VyLkdldE1hbmlmZXN0WAMAAABkZWZLY0tph1gtAAAAQXJ0aWZhY3RTdGFnaW5nU2VydmljZVNlcnZpY2VyLkNvbW1pdE1hbmlmZXN0WAMAAABkZWZLLEs1h1ggAAAAQXJ0aWZhY3RSZXRyaWV2YWxTZXJ2aWNlU2VydmljZXJYBQAAAGNsYXNzS19LcIdYJQAAAEFydGlmYWN0UmV0cmlldmFsU2VydmljZVN0dWIuX19pbml0X19YAwAAAGRlZktNS12HWCoAAABBcnRpZmFjdFN0YWdpbmdTZXJ2aWNlU2VydmljZXIuUHV0QXJ0aWZhY3RYAwAAAGRlZksjSyuHWBoAAABBcnRpZmFjdFN0YWdpbmdTZXJ2aWNlU3R1YlgFAAAAY2xhc3NLCUsdh1gsAAAAQXJ0aWZhY3RSZXRyaWV2YWxTZXJ2aWNlU2VydmljZXIuR2V0QXJ0aWZhY3RYAwAAAGRlZktqS3CHWCMAAABBcnRpZmFjdFN0YWdpbmdTZXJ2aWNlU3R1Yi5fX2luaXRfX1gDAAAAZGVmSw1LHYd1fXI1gwAAKFgeAAAAQXJ0aWZhY3RTdGFnaW5nU2VydmljZVNlcnZpY2VyWDYAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9hcnRpZmFjdF9hcGlfcGIyX2dycGNyNoMAAFguAAAAYWRkX0FydGlmYWN0UmV0cmlldmFsU2VydmljZVNlcnZpY2VyX3RvX3NlcnZlcmo2gwAAWBwAAABBcnRpZmFjdFJldHJpZXZhbFNlcnZpY2VTdHViajaDAABYLAAAAGFkZF9BcnRpZmFjdFN0YWdpbmdTZXJ2aWNlU2VydmljZXJfdG9fc2VydmVyajaDAABYLAAAAEFydGlmYWN0UmV0cmlldmFsU2VydmljZVNlcnZpY2VyLkdldE1hbmlmZXN0ajaDAABYLQAAAEFydGlmYWN0U3RhZ2luZ1NlcnZpY2VTZXJ2aWNlci5Db21taXRNYW5pZmVzdGo2gwAAWCwAAABBcnRpZmFjdFJldHJpZXZhbFNlcnZpY2VTZXJ2aWNlci5HZXRBcnRpZmFjdGo2gwAAWCoAAABBcnRpZmFjdFN0YWdpbmdTZXJ2aWNlU2VydmljZXIuUHV0QXJ0aWZhY3RqNoMAAFgaAAAAQXJ0aWZhY3RTdGFnaW5nU2VydmljZVN0dWJqNoMAAFggAAAAQXJ0aWZhY3RSZXRyaWV2YWxTZXJ2aWNlU2VydmljZXJqNoMAAHVqfWkAAFg2AAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fYXJ0aWZhY3RfYXBpX3BiMl9ncnBjcjeDAACFgXI4gwAAfXI5gwAAYnRyOoMAAFUUYXBhY2hlX2JlYW0uaW8udXRpbHMoWFQJAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKIiIiVXRpbHMgZm9yIHRoZSBpbyBsaWJyYXJ5LgoqIENvdW50aW5nU291cmNlOiBTdWJjbGFzcyBvZiBpb2Jhc2UuQm91bmRlZFNvdXJjZS4gVXNlZApvbiB0cmFuc2Zvcm1zLnB0cmFuc2Zvcm1fdGVzdC50ZXN0X3JlYWRfbWV0cmljcy4KIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKZnJvbSBidWlsdGlucyBpbXBvcnQgcmFuZ2UKCmZyb20gYXBhY2hlX2JlYW0uaW8gaW1wb3J0IGlvYmFzZQpmcm9tIGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzIGltcG9ydCBPZmZzZXRSYW5nZVRyYWNrZXIKZnJvbSBhcGFjaGVfYmVhbS5tZXRyaWNzIGltcG9ydCBNZXRyaWNzCgoKY2xhc3MgQ291bnRpbmdTb3VyY2UoaW9iYXNlLkJvdW5kZWRTb3VyY2UpOgoKICBkZWYgX19pbml0X18oc2VsZiwgY291bnQpOgogICAgc2VsZi5yZWNvcmRzX3JlYWQgPSBNZXRyaWNzLmNvdW50ZXIoc2VsZi5fX2NsYXNzX18sICdyZWNvcmRzUmVhZCcpCiAgICBzZWxmLl9jb3VudCA9IGNvdW50CgogIGRlZiBlc3RpbWF0ZV9zaXplKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX2NvdW50CgogIGRlZiBnZXRfcmFuZ2VfdHJhY2tlcihzZWxmLCBzdGFydF9wb3NpdGlvbiwgc3RvcF9wb3NpdGlvbik6CiAgICBpZiBzdGFydF9wb3NpdGlvbiBpcyBOb25lOgogICAgICBzdGFydF9wb3NpdGlvbiA9IDAKICAgIGlmIHN0b3BfcG9zaXRpb24gaXMgTm9uZToKICAgICAgc3RvcF9wb3NpdGlvbiA9IHNlbGYuX2NvdW50CgogICAgcmV0dXJuIE9mZnNldFJhbmdlVHJhY2tlcihzdGFydF9wb3NpdGlvbiwgc3RvcF9wb3NpdGlvbikKCiAgZGVmIHJlYWQoc2VsZiwgcmFuZ2VfdHJhY2tlcik6CiAgICBmb3IgaSBpbiByYW5nZShzZWxmLl9jb3VudCk6CiAgICAgIGlmIG5vdCByYW5nZV90cmFja2VyLnRyeV9jbGFpbShpKToKICAgICAgICByZXR1cm4KICAgICAgc2VsZi5yZWNvcmRzX3JlYWQuaW5jKCkKICAgICAgeWllbGQgaQoKICBkZWYgc3BsaXQoc2VsZiwgZGVzaXJlZF9idW5kbGVfc2l6ZSwgc3RhcnRfcG9zaXRpb249Tm9uZSwKICAgICAgICAgICAgc3RvcF9wb3NpdGlvbj1Ob25lKToKICAgIGlmIHN0YXJ0X3Bvc2l0aW9uIGlzIE5vbmU6CiAgICAgIHN0YXJ0X3Bvc2l0aW9uID0gMAogICAgaWYgc3RvcF9wb3NpdGlvbiBpcyBOb25lOgogICAgICBzdG9wX3Bvc2l0aW9uID0gc2VsZi5fY291bnQKCiAgICBidW5kbGVfc3RhcnQgPSBzdGFydF9wb3NpdGlvbgogICAgd2hpbGUgYnVuZGxlX3N0YXJ0IDwgc2VsZi5fY291bnQ6CiAgICAgIGJ1bmRsZV9zdG9wID0gbWF4KHNlbGYuX2NvdW50LCBidW5kbGVfc3RhcnQgKyBkZXNpcmVkX2J1bmRsZV9zaXplKQogICAgICB5aWVsZCBpb2Jhc2UuU291cmNlQnVuZGxlKHdlaWdodD0oYnVuZGxlX3N0b3AgLSBidW5kbGVfc3RhcnQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZT1zZWxmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X3Bvc2l0aW9uPWJ1bmRsZV9zdGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wX3Bvc2l0aW9uPWJ1bmRsZV9zdG9wKQogICAgICBidW5kbGVfc3RhcnQgPSBidW5kbGVfc3RvcAp9cjuDAAAoWCAAAABDb3VudGluZ1NvdXJjZS5nZXRfcmFuZ2VfdHJhY2tlclgDAAAAZGVmSyhLL4dYHAAAAENvdW50aW5nU291cmNlLmVzdGltYXRlX3NpemVYAwAAAGRlZkslSyeHWBcAAABDb3VudGluZ1NvdXJjZS5fX2luaXRfX1gDAAAAZGVmSyFLJIdYDgAAAENvdW50aW5nU291cmNlWAUAAABjbGFzc0sfS0aHWBQAAABDb3VudGluZ1NvdXJjZS5zcGxpdFgDAAAAZGVmSzdLRodYEwAAAENvdW50aW5nU291cmNlLnJlYWRYAwAAAGRlZkswSzaHdX1yPIMAAChYHAAAAENvdW50aW5nU291cmNlLmVzdGltYXRlX3NpemVqQ1wAAFgOAAAAQ291bnRpbmdTb3VyY2VqQ1wAAFgTAAAAQ291bnRpbmdTb3VyY2UucmVhZGpDXAAAWCAAAABDb3VudGluZ1NvdXJjZS5nZXRfcmFuZ2VfdHJhY2tlcmpDXAAAWBQAAABDb3VudGluZ1NvdXJjZS5zcGxpdGpDXAAAdWp9aQAAWBQAAABhcGFjaGVfYmVhbS5pby51dGlsc3I9gwAAhYFyPoMAAH1yP4MAAGJ0VS5hcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlX3dyaXRlX2l0X3BpcGVsaW5lKFhiHQAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJBIGpvYiB0aGF0IHdyaXRlIEVudHJpZXMgaW50byBEYXRhc3RvcmUuCgpUaGUgcGlwZWxpbmVzIGJlaGF2ZSBpbiB0aGUgc3RlcHMgYmVsb3cuCgogIDEuIENyZWF0ZSBhbmQgd3JpdGUgRW50aXRpZXMgdG8gRGF0YXN0b3JlCiAgMi4gKE9wdGlvbmFsKSBJZiByZWFkIGxpbWl0IHdhcyBwcm92aWRlZCwKICAgICByZWFkIGl0IGFuZCBjb25maXJtIHRoYXQgdGhlIGV4cGVjdGVkIEVudGl0aWVzIHdlcmUgcmVhZC4KICAzLiBRdWVyeSB0aGUgd3JpdHRlbiBFbnRpdGllcyBhbmQgdmVyaWZ5IHJlc3VsdC4KICA0LiBEZWxldGUgRW50cmllcy4KICA1LiBRdWVyeSB0aGUgd3JpdHRlbiBFbnRpdGllcywgdmVyaWZ5IG5vIHJlc3VsdHMuCiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBhcmdwYXJzZQppbXBvcnQgaGFzaGxpYgppbXBvcnQgbG9nZ2luZwppbXBvcnQgdXVpZAoKaW1wb3J0IGFwYWNoZV9iZWFtIGFzIGJlYW0KZnJvbSBhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmRhdGFzdG9yZWlvIGltcG9ydCBEZWxldGVGcm9tRGF0YXN0b3JlCmZyb20gYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5kYXRhc3RvcmVpbyBpbXBvcnQgUmVhZEZyb21EYXRhc3RvcmUKZnJvbSBhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmRhdGFzdG9yZWlvIGltcG9ydCBXcml0ZVRvRGF0YXN0b3JlCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBHb29nbGVDbG91ZE9wdGlvbnMKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IFBpcGVsaW5lT3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgU2V0dXBPcHRpb25zCmZyb20gYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3BpcGVsaW5lIGltcG9ydCBUZXN0UGlwZWxpbmUKZnJvbSBhcGFjaGVfYmVhbS50ZXN0aW5nLnV0aWwgaW1wb3J0IGFzc2VydF90aGF0CmZyb20gYXBhY2hlX2JlYW0udGVzdGluZy51dGlsIGltcG9ydCBlcXVhbF90bwoKIyBQcm90ZWN0IGFnYWluc3QgZW52aXJvbm1lbnRzIHdoZXJlIGFwaXRvb2xzIGxpYnJhcnkgaXMgbm90IGF2YWlsYWJsZS4KIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KdHJ5OgogIGZyb20gZ29vZ2xlLmNsb3VkLnByb3RvLmRhdGFzdG9yZS52MSBpbXBvcnQgZW50aXR5X3BiMgogIGZyb20gZ29vZ2xlLmNsb3VkLnByb3RvLmRhdGFzdG9yZS52MSBpbXBvcnQgcXVlcnlfcGIyCiAgZnJvbSBnb29nbGVkYXRhc3RvcmUgaW1wb3J0IGhlbHBlciBhcyBkYXRhc3RvcmVfaGVscGVyCiAgZnJvbSBnb29nbGVkYXRhc3RvcmUgaW1wb3J0IFByb3BlcnR5RmlsdGVyCmV4Y2VwdCBJbXBvcnRFcnJvcjoKICBwYXNzCiMgcHlsaW50OiBlbmFibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KIyBweWxpbnQ6IGVuYWJsZT11bmdyb3VwZWQtaW1wb3J0cwoKCmRlZiBuZXdfcGlwZWxpbmVfd2l0aF9qb2JfbmFtZShwaXBlbGluZV9vcHRpb25zLCBqb2JfbmFtZSwgc3VmZml4KToKICAiIiJDcmVhdGUgYSBwaXBlbGluZSB3aXRoIHRoZSBnaXZlbiBqb2JfbmFtZSBhbmQgYSBzdWZmaXguIiIiCiAgZ2NwX29wdGlvbnMgPSBwaXBlbGluZV9vcHRpb25zLnZpZXdfYXMoR29vZ2xlQ2xvdWRPcHRpb25zKQogICMgRGlyZWN0UnVubmVyIGRvZXNuJ3QgaGF2ZSBhIGpvYiBuYW1lLgogIGlmIGpvYl9uYW1lOgogICAgZ2NwX29wdGlvbnMuam9iX25hbWUgPSBqb2JfbmFtZSArIHN1ZmZpeAoKICByZXR1cm4gVGVzdFBpcGVsaW5lKG9wdGlvbnM9cGlwZWxpbmVfb3B0aW9ucykKCgpjbGFzcyBFbnRpdHlXcmFwcGVyKG9iamVjdCk6CiAgIiIiQ3JlYXRlIGEgQ2xvdWQgRGF0YXN0b3JlIGVudGl0eSBmcm9tIHRoZSBnaXZlbiBzdHJpbmcuIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBraW5kLCBuYW1lc3BhY2UsIGFuY2VzdG9yKToKICAgIHNlbGYuX2tpbmQgPSBraW5kCiAgICBzZWxmLl9uYW1lc3BhY2UgPSBuYW1lc3BhY2UKICAgIHNlbGYuX2FuY2VzdG9yID0gYW5jZXN0b3IKCiAgZGVmIG1ha2VfZW50aXR5KHNlbGYsIGNvbnRlbnQpOgogICAgIiIiQ3JlYXRlIGVudGl0eSBmcm9tIGdpdmVuIHN0cmluZy4iIiIKICAgIGVudGl0eSA9IGVudGl0eV9wYjIuRW50aXR5KCkKICAgIGlmIHNlbGYuX25hbWVzcGFjZSBpcyBub3QgTm9uZToKICAgICAgZW50aXR5LmtleS5wYXJ0aXRpb25faWQubmFtZXNwYWNlX2lkID0gc2VsZi5fbmFtZXNwYWNlCgogICAgIyBBbGwgZW50aXRpZXMgY3JlYXRlZCB3aWxsIGhhdmUgdGhlIHNhbWUgYW5jZXN0b3IKICAgIGRhdGFzdG9yZV9oZWxwZXIuYWRkX2tleV9wYXRoKGVudGl0eS5rZXksIHNlbGYuX2tpbmQsIHNlbGYuX2FuY2VzdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fa2luZCwgaGFzaGxpYi5zaGExKGNvbnRlbnQpLmhleGRpZ2VzdCgpKQoKICAgIGRhdGFzdG9yZV9oZWxwZXIuYWRkX3Byb3BlcnRpZXMoZW50aXR5LCB7J2NvbnRlbnQnOiBzdHIoY29udGVudCl9KQogICAgcmV0dXJuIGVudGl0eQoKCmRlZiBtYWtlX2FuY2VzdG9yX3F1ZXJ5KGtpbmQsIG5hbWVzcGFjZSwgYW5jZXN0b3IpOgogICIiIkNyZWF0ZXMgYSBDbG91ZCBEYXRhc3RvcmUgYW5jZXN0b3IgcXVlcnkuIiIiCiAgYW5jZXN0b3Jfa2V5ID0gZW50aXR5X3BiMi5LZXkoKQogIGRhdGFzdG9yZV9oZWxwZXIuYWRkX2tleV9wYXRoKGFuY2VzdG9yX2tleSwga2luZCwgYW5jZXN0b3IpCiAgaWYgbmFtZXNwYWNlIGlzIG5vdCBOb25lOgogICAgYW5jZXN0b3Jfa2V5LnBhcnRpdGlvbl9pZC5uYW1lc3BhY2VfaWQgPSBuYW1lc3BhY2UKCiAgcXVlcnkgPSBxdWVyeV9wYjIuUXVlcnkoKQogIHF1ZXJ5LmtpbmQuYWRkKCkubmFtZSA9IGtpbmQKCiAgZGF0YXN0b3JlX2hlbHBlci5zZXRfcHJvcGVydHlfZmlsdGVyKAogICAgICBxdWVyeS5maWx0ZXIsICdfX2tleV9fJywgUHJvcGVydHlGaWx0ZXIuSEFTX0FOQ0VTVE9SLCBhbmNlc3Rvcl9rZXkpCgogIHJldHVybiBxdWVyeQoKCmRlZiBydW4oYXJndj1Ob25lKToKICAiIiJNYWluIGVudHJ5IHBvaW50LiIiIgoKICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCgogIHBhcnNlci5hZGRfYXJndW1lbnQoJy0ta2luZCcsCiAgICAgICAgICAgICAgICAgICAgICBkZXN0PSdraW5kJywKICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9J3dyaXRlcmVhZHRlc3QnLAogICAgICAgICAgICAgICAgICAgICAgaGVscD0nRGF0YXN0b3JlIEtpbmQnKQogIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tbnVtX2VudGl0aWVzJywKICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J251bV9lbnRpdGllcycsCiAgICAgICAgICAgICAgICAgICAgICB0eXBlPWludCwKICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkPVRydWUsCiAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdOdW1iZXIgb2YgZW50aXRpZXMgdG8gd3JpdGUnKQogIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tbGltaXQnLAogICAgICAgICAgICAgICAgICAgICAgZGVzdD0nbGltaXQnLAogICAgICAgICAgICAgICAgICAgICAgdHlwZT1pbnQsCiAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdMaW1pdCBvZiBudW1iZXIgb2YgZW50aXRpZXMgdG8gd3JpdGUnKQoKICBrbm93bl9hcmdzLCBwaXBlbGluZV9hcmdzID0gcGFyc2VyLnBhcnNlX2tub3duX2FyZ3MoYXJndikKICBwaXBlbGluZV9vcHRpb25zID0gUGlwZWxpbmVPcHRpb25zKHBpcGVsaW5lX2FyZ3MpCiAgcGlwZWxpbmVfb3B0aW9ucy52aWV3X2FzKFNldHVwT3B0aW9ucykuc2F2ZV9tYWluX3Nlc3Npb24gPSBUcnVlCiAgZ2Nsb3VkX29wdGlvbnMgPSBwaXBlbGluZV9vcHRpb25zLnZpZXdfYXMoR29vZ2xlQ2xvdWRPcHRpb25zKQogIGpvYl9uYW1lID0gZ2Nsb3VkX29wdGlvbnMuam9iX25hbWUKICBraW5kID0ga25vd25fYXJncy5raW5kCiAgbnVtX2VudGl0aWVzID0ga25vd25fYXJncy5udW1fZW50aXRpZXMKICBwcm9qZWN0ID0gZ2Nsb3VkX29wdGlvbnMucHJvamVjdAogICMgYSByYW5kb20gYW5jZXNvciBrZXkKICBhbmNlc3RvciA9IHN0cih1dWlkLnV1aWQ0KCkpCiAgcXVlcnkgPSBtYWtlX2FuY2VzdG9yX3F1ZXJ5KGtpbmQsIE5vbmUsIGFuY2VzdG9yKQoKICAjIFBpcGVsaW5lIDE6IENyZWF0ZSBhbmQgd3JpdGUgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgRW50aXRpZXMgdG8gdGhlCiAgIyBDbG91ZCBEYXRhc3RvcmUuCiAgbG9nZ2luZy5pbmZvKCdXcml0aW5nICVzIGVudGl0aWVzIHRvICVzJywgbnVtX2VudGl0aWVzLCBwcm9qZWN0KQogIHAgPSBuZXdfcGlwZWxpbmVfd2l0aF9qb2JfbmFtZShwaXBlbGluZV9vcHRpb25zLCBqb2JfbmFtZSwgJy13cml0ZScpCgogICMgcHlsaW50OiBkaXNhYmxlPWV4cHJlc3Npb24tbm90LWFzc2lnbmVkCiAgKHAKICAgfCAnSW5wdXQnID4+IGJlYW0uQ3JlYXRlKGxpc3QocmFuZ2Uoa25vd25fYXJncy5udW1fZW50aXRpZXMpKSkKICAgfCAnVG8gU3RyaW5nJyA+PiBiZWFtLk1hcChzdHIpCiAgIHwgJ1RvIEVudGl0eScgPj4gYmVhbS5NYXAoRW50aXR5V3JhcHBlcihraW5kLCBOb25lLCBhbmNlc3RvcikubWFrZV9lbnRpdHkpCiAgIHwgJ1dyaXRlIHRvIERhdGFzdG9yZScgPj4gV3JpdGVUb0RhdGFzdG9yZShwcm9qZWN0KSkKCiAgcC5ydW4oKQoKICAjIE9wdGlvbmFsIFBpcGVsaW5lIDI6IElmIGEgcmVhZCBsaW1pdCB3YXMgcHJvdmlkZWQsIHJlYWQgaXQgYW5kIGNvbmZpcm0KICAjIHRoYXQgdGhlIGV4cGVjdGVkIGVudGl0aWVzIHdlcmUgcmVhZC4KICBpZiBrbm93bl9hcmdzLmxpbWl0IGlzIG5vdCBOb25lOgogICAgbG9nZ2luZy5pbmZvKCdRdWVyeWluZyBhIGxpbWl0ZWQgc2V0IG9mICVzIGVudGl0aWVzIGFuZCB2ZXJpZnlpbmcgY291bnQuJywKICAgICAgICAgICAgICAgICBrbm93bl9hcmdzLmxpbWl0KQogICAgcCA9IG5ld19waXBlbGluZV93aXRoX2pvYl9uYW1lKHBpcGVsaW5lX29wdGlvbnMsIGpvYl9uYW1lLCAnLXZlcmlmeS1saW1pdCcpCiAgICBxdWVyeV93aXRoX2xpbWl0ID0gcXVlcnlfcGIyLlF1ZXJ5KCkKICAgIHF1ZXJ5X3dpdGhfbGltaXQuQ29weUZyb20ocXVlcnkpCiAgICBxdWVyeV93aXRoX2xpbWl0LmxpbWl0LnZhbHVlID0ga25vd25fYXJncy5saW1pdAogICAgZW50aXRpZXMgPSBwIHwgJ3JlYWQgZnJvbSBkYXRhc3RvcmUnID4+IFJlYWRGcm9tRGF0YXN0b3JlKHByb2plY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlfd2l0aF9saW1pdCkKICAgIGFzc2VydF90aGF0KAogICAgICAgIGVudGl0aWVzIHwgYmVhbS5jb21iaW5lcnMuQ291bnQuR2xvYmFsbHkoKSwKICAgICAgICBlcXVhbF90byhba25vd25fYXJncy5saW1pdF0pKQoKICAgIHAucnVuKCkKCiAgIyBQaXBlbGluZSAzOiBRdWVyeSB0aGUgd3JpdHRlbiBFbnRpdGllcyBhbmQgdmVyaWZ5IHJlc3VsdC4KICBsb2dnaW5nLmluZm8oJ1F1ZXJ5aW5nIGVudGl0aWVzLCBhc3NlcnRpbmcgdGhleSBtYXRjaC4nKQogIHAgPSBuZXdfcGlwZWxpbmVfd2l0aF9qb2JfbmFtZShwaXBlbGluZV9vcHRpb25zLCBqb2JfbmFtZSwgJy12ZXJpZnknKQogIGVudGl0aWVzID0gcCB8ICdyZWFkIGZyb20gZGF0YXN0b3JlJyA+PiBSZWFkRnJvbURhdGFzdG9yZShwcm9qZWN0LCBxdWVyeSkKCiAgYXNzZXJ0X3RoYXQoCiAgICAgIGVudGl0aWVzIHwgYmVhbS5jb21iaW5lcnMuQ291bnQuR2xvYmFsbHkoKSwKICAgICAgZXF1YWxfdG8oW251bV9lbnRpdGllc10pKQoKICBwLnJ1bigpCgogICMgUGlwZWxpbmUgNDogRGVsZXRlIEVudGl0aWVzLgogIGxvZ2dpbmcuaW5mbygnRGVsZXRpbmcgZW50aXRpZXMuJykKICBwID0gbmV3X3BpcGVsaW5lX3dpdGhfam9iX25hbWUocGlwZWxpbmVfb3B0aW9ucywgam9iX25hbWUsICctZGVsZXRlJykKICBlbnRpdGllcyA9IHAgfCAncmVhZCBmcm9tIGRhdGFzdG9yZScgPj4gUmVhZEZyb21EYXRhc3RvcmUocHJvamVjdCwgcXVlcnkpCiAgIyBweWxpbnQ6IGRpc2FibGU9ZXhwcmVzc2lvbi1ub3QtYXNzaWduZWQKICAoZW50aXRpZXMKICAgfCAnVG8gS2V5cycgPj4gYmVhbS5NYXAobGFtYmRhIGVudGl0eTogZW50aXR5LmtleSkKICAgfCAnRGVsZXRlIGtleXMnID4+IERlbGV0ZUZyb21EYXRhc3RvcmUocHJvamVjdCkpCgogIHAucnVuKCkKCiAgIyBQaXBlbGluZSA1OiBRdWVyeSB0aGUgd3JpdHRlbiBFbnRpdGllcywgdmVyaWZ5IG5vIHJlc3VsdHMuCiAgbG9nZ2luZy5pbmZvKCdRdWVyeWluZyBmb3IgdGhlIGVudGl0aWVzIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm9uZSBwcmVzZW50LicpCiAgcCA9IG5ld19waXBlbGluZV93aXRoX2pvYl9uYW1lKHBpcGVsaW5lX29wdGlvbnMsIGpvYl9uYW1lLCAnLXZlcmlmeS1kZWxldGVkJykKICBlbnRpdGllcyA9IHAgfCAncmVhZCBmcm9tIGRhdGFzdG9yZScgPj4gUmVhZEZyb21EYXRhc3RvcmUocHJvamVjdCwgcXVlcnkpCgogIGFzc2VydF90aGF0KAogICAgICBlbnRpdGllcyB8IGJlYW0uY29tYmluZXJzLkNvdW50Lkdsb2JhbGx5KCksCiAgICAgIGVxdWFsX3RvKFswXSkpCgogIHAucnVuKCkKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogIGxvZ2dpbmcuZ2V0TG9nZ2VyKCkuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQogIHJ1bigpCn1yQIMAAChYDQAAAEVudGl0eVdyYXBwZXJYBQAAAGNsYXNzS0dLW4dYAwAAAHJ1blgDAAAAZGVmS21Ly4dYEwAAAG1ha2VfYW5jZXN0b3JfcXVlcnlYAwAAAGRlZktdS2uHWBYAAABFbnRpdHlXcmFwcGVyLl9faW5pdF9fWAMAAABkZWZLSktOh1gaAAAAbmV3X3BpcGVsaW5lX3dpdGhfam9iX25hbWVYAwAAAGRlZks9S0WHWBkAAABFbnRpdHlXcmFwcGVyLm1ha2VfZW50aXR5WAMAAABkZWZLT0tbh3V9ckGDAAAoWAMAAABydW5qWFwAAFgZAAAARW50aXR5V3JhcHBlci5tYWtlX2VudGl0eWpYXAAAWA0AAABFbnRpdHlXcmFwcGVyalhcAABYGgAAAG5ld19waXBlbGluZV93aXRoX2pvYl9uYW1lalhcAABYEwAAAG1ha2VfYW5jZXN0b3JfcXVlcnlqWFwAAHVqfWkAAFguAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZV93cml0ZV9pdF9waXBlbGluZXJCgwAAhYFyQ4MAAH1yRIMAAGJ0VR1hcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlc3JFgwAAKFgSJQAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJEZWZpbmVzIHRoZSBhY3Rpb25zIHZhcmlvdXMgYnl0ZWNvZGVzIGhhdmUgb24gdGhlIGZyYW1lLgoKRWFjaCBmdW5jdGlvbiBoZXJlIGNvcnJlc3BvbmRzIHRvIGEgYnl0ZWNvZGUgZG9jdW1lbnRlZCBpbgpodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvZGlzLmh0bWwuICBUaGUgZmlyc3QgYXJndW1lbnQgaXMgYSAobXV0YWJsZSkKRnJhbWVTdGF0ZSBvYmplY3QsIHRoZSBzZWNvbmQgdGhlIGludGVnZXIgb3Bjb2RlIGFyZ3VtZW50LgoKQnl0ZWNvZGVzIHdpdGggbW9yZSBjb21wbGljYXRlZCBiZWhhdmlvciAoZS5nLiBtb2RpZnlpbmcgdGhlIHByb2dyYW0gY291bnRlcikKYXJlIGhhbmRsZWQgaW5saW5lIHJhdGhlciB0aGFuIGhlcmUuCgpGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCiIiIgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGluc3BlY3QKaW1wb3J0IHN5cwppbXBvcnQgdHlwZXMKZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHJlZHVjZQoKZnJvbSBwYXN0LmJ1aWx0aW5zIGltcG9ydCB1bmljb2RlCgpmcm9tIC4gaW1wb3J0IHR5cGVoaW50cwpmcm9tIC50cml2aWFsX2luZmVyZW5jZSBpbXBvcnQgQm91bmRNZXRob2QKZnJvbSAudHJpdmlhbF9pbmZlcmVuY2UgaW1wb3J0IENvbnN0CmZyb20gLnRyaXZpYWxfaW5mZXJlbmNlIGltcG9ydCBlbGVtZW50X3R5cGUKZnJvbSAudHJpdmlhbF9pbmZlcmVuY2UgaW1wb3J0IHVuaW9uCmZyb20gLnR5cGVoaW50cyBpbXBvcnQgQW55CmZyb20gLnR5cGVoaW50cyBpbXBvcnQgRGljdApmcm9tIC50eXBlaGludHMgaW1wb3J0IEl0ZXJhYmxlCmZyb20gLnR5cGVoaW50cyBpbXBvcnQgTGlzdApmcm9tIC50eXBlaGludHMgaW1wb3J0IFR1cGxlCmZyb20gLnR5cGVoaW50cyBpbXBvcnQgVW5pb24KCgpkZWYgcG9wX29uZShzdGF0ZSwgdW51c2VkX2FyZyk6CiAgZGVsIHN0YXRlLnN0YWNrWy0xOl0KCgpkZWYgcG9wX3R3byhzdGF0ZSwgdW51c2VkX2FyZyk6CiAgZGVsIHN0YXRlLnN0YWNrWy0yOl0KCgpkZWYgcG9wX3RocmVlKHN0YXRlLCB1bnVzZWRfYXJnKToKICBkZWwgc3RhdGUuc3RhY2tbLTM6XQoKCmRlZiBwdXNoX3ZhbHVlKHYpOgoKICBkZWYgcHVzaGVyKHN0YXRlLCB1bnVzZWRfYXJnKToKICAgIHN0YXRlLnN0YWNrLmFwcGVuZCh2KQoKICByZXR1cm4gcHVzaGVyCgoKZGVmIG5vcCh1bnVzZWRfc3RhdGUsIHVudXNlZF9hcmcpOgogIHBhc3MKCgpkZWYgcG9wX3RvcChzdGF0ZSwgdW51c2VkX2FyZyk6CiAgc3RhdGUuc3RhY2sucG9wKCkKCgpkZWYgcm90X24oc3RhdGUsIG4pOgogIHN0YXRlLnN0YWNrWy1uOl0gPSBbc3RhdGUuc3RhY2tbLTFdXSArIHN0YXRlLnN0YWNrWy1uOi0xXQoKCmRlZiByb3RfdHdvKHN0YXRlLCB1bnVzZWRfYXJnKToKICByb3RfbihzdGF0ZSwgMikKCgpkZWYgcm90X3RocmVlKHN0YXRlLCB1bnVzZWRfYXJnKToKICByb3RfbihzdGF0ZSwgMykKCgpkZWYgcm90X2ZvdXIoc3RhdGUsIHVudXNlZF9hcmcpOgogIHJvdF9uKHN0YXRlLCA0KQoKCmRlZiBkdXBfdG9wKHN0YXRlLCB1bnVzZWRfYXJnKToKICBzdGF0ZS5zdGFjay5hcHBlbmQoc3RhdGUuc3RhY2tbLTFdKQoKCmRlZiB1bmFyeShzdGF0ZSwgdW51c2VkX2FyZyk6CiAgc3RhdGUuc3RhY2tbLTFdID0gQ29uc3QudW53cmFwKHN0YXRlLnN0YWNrWy0xXSkKCgp1bmFyeV9wb3NpdGl2ZSA9IHVuYXJ5X25lZ2F0aXZlID0gdW5hcnlfaW52ZXJ0ID0gdW5hcnkKCgpkZWYgdW5hcnlfbm90KHN0YXRlLCB1bnVzZWRfYXJnKToKICBzdGF0ZS5zdGFja1stMV0gPSBib29sCgoKZGVmIHVuYXJ5X2NvbnZlcnQoc3RhdGUsIHVudXNlZF9hcmcpOgogIHN0YXRlLnN0YWNrWy0xXSA9IHN0cgoKCmRlZiBnZXRfaXRlcihzdGF0ZSwgdW51c2VkX2FyZyk6CiAgc3RhdGUuc3RhY2suYXBwZW5kKEl0ZXJhYmxlW2VsZW1lbnRfdHlwZShzdGF0ZS5zdGFjay5wb3AoKSldKQoKCmRlZiBzeW1tZXRyaWNfYmluYXJ5X29wKHN0YXRlLCB1bnVzZWRfYXJnKToKICAjIFRPRE8ocm9iZXJ0d2IpOiBUaGlzIG1heSBub3QgYmUgZW50aXJlbHkgY29ycmVjdC4uLgogIGIsIGEgPSBzdGF0ZS5zdGFjay5wb3AoKSwgc3RhdGUuc3RhY2sucG9wKCkKICBpZiBhID09IGI6CiAgICBzdGF0ZS5zdGFjay5hcHBlbmQoYSkKICBlbGlmIHR5cGUoYSkgPT0gdHlwZShiKSBhbmQgaXNpbnN0YW5jZShhLCB0eXBlaGludHMuU2VxdWVuY2VUeXBlQ29uc3RyYWludCk6CiAgICBzdGF0ZS5zdGFjay5hcHBlbmQodHlwZShhKSh1bmlvbihlbGVtZW50X3R5cGUoYSksIGVsZW1lbnRfdHlwZShiKSkpKQogIGVsc2U6CiAgICBzdGF0ZS5zdGFjay5hcHBlbmQoQW55KQoKCiMgRXhjZXB0IGZvciBpbnQgKiogLWludApiaW5hcnlfcG93ZXIgPSBpbnBsYWNlX3Bvd2VyID0gc3ltbWV0cmljX2JpbmFyeV9vcApiaW5hcnlfbXVsdGlwbHkgPSBpbnBsYWNlX211bHRpcGx5ID0gc3ltbWV0cmljX2JpbmFyeV9vcApiaW5hcnlfZGl2aWRlID0gaW5wbGFjZV9kaXZpZGUgPSBzeW1tZXRyaWNfYmluYXJ5X29wCmJpbmFyeV9mbG9vcl9kaXZpZGUgPSBpbnBsYWNlX2Zsb29yX2RpdmlkZSA9IHN5bW1ldHJpY19iaW5hcnlfb3AKCgpkZWYgYmluYXJ5X3RydWVfZGl2aWRlKHN0YXRlLCB1bnVzZWRfYXJnKToKICB1ID0gdW5pb24oc3RhdGUuc3RhY2sucG9wKCksIHN0YXRlLnN0YWNrLnBvcCkKICBpZiB1ID09IGludDoKICAgIHN0YXRlLnN0YWNrLmFwcGVuZChmbG9hdCkKICBlbHNlOgogICAgc3RhdGUuc3RhY2suYXBwZW5kKHUpCgoKaW5wbGFjZV90cnVlX2RpdmlkZSA9IGJpbmFyeV90cnVlX2RpdmlkZQoKYmluYXJ5X21vZHVsbyA9IGlucGxhY2VfbW9kdWxvID0gc3ltbWV0cmljX2JpbmFyeV9vcAojIFRPRE8ocm9iZXJ0d2IpOiBUdXBsZSBhZGQuCmJpbmFyeV9hZGQgPSBpbnBsYWNlX2FkZCA9IHN5bW1ldHJpY19iaW5hcnlfb3AKYmluYXJ5X3N1YnRyYWN0ID0gaW5wbGFjZV9zdWJ0cmFjdCA9IHN5bW1ldHJpY19iaW5hcnlfb3AKCgpkZWYgYmluYXJ5X3N1YnNjcihzdGF0ZSwgdW51c2VkX2FyZyk6CiAgaW5kZXggPSBzdGF0ZS5zdGFjay5wb3AoKQogIGJhc2UgPSBzdGF0ZS5zdGFjay5wb3AoKQogIGlmIGJhc2UgaW4gKHN0ciwgdW5pY29kZSk6CiAgICBvdXQgPSBiYXNlCiAgZWxpZiAoaXNpbnN0YW5jZShpbmRleCwgQ29uc3QpIGFuZCBpc2luc3RhbmNlKGluZGV4LnZhbHVlLCBpbnQpCiAgICAgICAgYW5kIGlzaW5zdGFuY2UoYmFzZSwgdHlwZWhpbnRzLlR1cGxlSGludC5UdXBsZUNvbnN0cmFpbnQpKToKICAgIGNvbnN0X2luZGV4ID0gaW5kZXgudmFsdWUKICAgIGlmIC1sZW4oYmFzZS50dXBsZV90eXBlcykgPCBjb25zdF9pbmRleCA8IGxlbihiYXNlLnR1cGxlX3R5cGVzKToKICAgICAgb3V0ID0gYmFzZS50dXBsZV90eXBlc1tjb25zdF9pbmRleF0KICAgIGVsc2U6CiAgICAgIG91dCA9IGVsZW1lbnRfdHlwZShiYXNlKQogIGVsaWYgaW5kZXggPT0gc2xpY2U6CiAgICBvdXQgPSB0eXBlaGludHMuTGlzdFtlbGVtZW50X3R5cGUoYmFzZSldCiAgZWxzZToKICAgIG91dCA9IGVsZW1lbnRfdHlwZShiYXNlKQogIHN0YXRlLnN0YWNrLmFwcGVuZChvdXQpCgoKIyBBcyBmYXIgYXMgdHlwZXMgYXJlIGNvbmNlcm5lZC4KYmluYXJ5X2xzaGlmdCA9IGlucGxhY2VfbHNoaWZ0ID0gYmluYXJ5X3JzaGlmdCA9IGlucGxhY2VfcnNoaWZ0ID0gcG9wX3RvcAoKYmluYXJ5X2FuZCA9IGlucGxhY2VfYW5kID0gc3ltbWV0cmljX2JpbmFyeV9vcApiaW5hcnlfeG9yID0gaW5wbGFjZV94b3IgPSBzeW1tZXRyaWNfYmluYXJ5X29wCmJpbmFyeV9vciA9IGlucGFsY2Vfb3IgPSBzeW1tZXRyaWNfYmluYXJ5X29wCgojIEFzIGZhciBhcyB0eXBlcyBhcmUgY29uY2VybmVkLgpzbGljZV8wID0gbm9wCnNsaWNlXzEgPSBzbGljZV8yID0gcG9wX3RvcApzbGljZV8zID0gcG9wX3R3bwpzdG9yZV9zbGljZV8wID0gc3RvcmVfc2xpY2VfMSA9IHN0b3JlX3NsaWNlXzIgPSBzdG9yZV9zbGljZV8zID0gbm9wCmRlbGV0ZV9zbGljZV8wID0gZGVsZXRlX3NsaWNlXzEgPSBkZWxldGVfc2xpY2VfMiA9IGRlbGV0ZV9zbGljZV8zID0gbm9wCgoKZGVmIHN0b3JlX3N1YnNjcih1bnVzZWRfc3RhdGUsIHVudXNlZF9hcmdzKToKICAjIFRPRE8ocm9iZXJ0d2IpOiBVcGRhdGUgZWxlbWVudC92YWx1ZSB0eXBlIG9mIGl0ZXJhYmxlL2RpY3QuCiAgcGFzcwoKCmJpbmFyeV9kaXZpZGUgPSBiaW5hcnlfZmxvb3JfZGl2aWRlID0gYmluYXJ5X21vZHVsbyA9IHN5bW1ldHJpY19iaW5hcnlfb3AKYmluYXJ5X2RpdmlkZSA9IGJpbmFyeV9mbG9vcl9kaXZpZGUgPSBiaW5hcnlfbW9kdWxvID0gc3ltbWV0cmljX2JpbmFyeV9vcApiaW5hcnlfZGl2aWRlID0gYmluYXJ5X2Zsb29yX2RpdmlkZSA9IGJpbmFyeV9tb2R1bG8gPSBzeW1tZXRyaWNfYmluYXJ5X29wCgojIHByaW50X2V4cHIKcHJpbnRfaXRlbSA9IHBvcF90b3AKIyBwcmludF9pdGVtX3RvCnByaW50X25ld2xpbmUgPSBub3AKCiMgcHJpbnRfbmV3bGluZV90bwoKCiMgYnJlYWtfbG9vcAojIGNvbnRpbnVlX2xvb3AKZGVmIGxpc3RfYXBwZW5kKHN0YXRlLCBhcmcpOgogIG5ld19lbGVtZW50X3R5cGUgPSBDb25zdC51bndyYXAoc3RhdGUuc3RhY2sucG9wKCkpCiAgc3RhdGUuc3RhY2tbLWFyZ10gPSBMaXN0W1VuaW9uW2VsZW1lbnRfdHlwZShzdGF0ZS5zdGFja1stYXJnXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19lbGVtZW50X3R5cGVdXQoKCmxvYWRfbG9jYWxzID0gcHVzaF92YWx1ZShEaWN0W3N0ciwgQW55XSkKCiMgcmV0dXJuX3ZhbHVlCiMgeWllbGRfdmFsdWUKIyBpbXBvcnRfc3RhcgpleGVjX3N0bXQgPSBwb3BfdGhyZWUKIyBwb3BfYmxvY2sKIyBlbmRfZmluYWxseQpidWlsZF9jbGFzcyA9IHBvcF90aHJlZQoKIyBzZXR1cF93aXRoCiMgd2l0aF9jbGVhbnVwCgoKIyBzdG9yZV9uYW1lCiMgZGVsZXRlX25hbWUKZGVmIHVucGFja19zZXF1ZW5jZShzdGF0ZSwgYXJnKToKICB0ID0gc3RhdGUuc3RhY2sucG9wKCkKICBpZiBpc2luc3RhbmNlKHQsIENvbnN0KToKICAgIHRyeToKICAgICAgdW5wYWNrZWQgPSBbQ29uc3QodGkpIGZvciB0aSBpbiB0LnZhbHVlXQogICAgICBpZiBsZW4odW5wYWNrZWQpICE9IGFyZzoKICAgICAgICB1bnBhY2tlZCA9IFtBbnldICogYXJnCiAgICBleGNlcHQgVHlwZUVycm9yOgogICAgICB1bnBhY2tlZCA9IFtBbnldICogYXJnCiAgZWxpZiAoaXNpbnN0YW5jZSh0LCB0eXBlaGludHMuVHVwbGVIaW50LlR1cGxlQ29uc3RyYWludCkKICAgICAgICBhbmQgbGVuKHQudHVwbGVfdHlwZXMpID09IGFyZyk6CiAgICB1bnBhY2tlZCA9IGxpc3QodC50dXBsZV90eXBlcykKICBlbHNlOgogICAgdW5wYWNrZWQgPSBbZWxlbWVudF90eXBlKHQpXSAqIGFyZwogIHN0YXRlLnN0YWNrICs9IHJldmVyc2VkKHVucGFja2VkKQoKCmRlZiBkdXBfdG9weChzdGF0ZSwgYXJnKToKICBzdGF0ZS5zdGFjayArPSBzdGF0ZVstYXJnOl0KCgpzdG9yZV9hdHRyID0gcG9wX3RvcApkZWxldGVfYXR0ciA9IG5vcApzdG9yZV9nbG9iYWwgPSBwb3BfdG9wCmRlbGV0ZV9nbG9iYWwgPSBub3AKCgpkZWYgbG9hZF9jb25zdChzdGF0ZSwgYXJnKToKICBzdGF0ZS5zdGFjay5hcHBlbmQoc3RhdGUuY29uc3RfdHlwZShhcmcpKQoKCmxvYWRfbmFtZSA9IHB1c2hfdmFsdWUoQW55KQoKCmRlZiBidWlsZF90dXBsZShzdGF0ZSwgYXJnKToKICBpZiBhcmcgPT0gMDoKICAgIHN0YXRlLnN0YWNrLmFwcGVuZChUdXBsZVsoKV0pCiAgZWxzZToKICAgIHN0YXRlLnN0YWNrWy1hcmc6XSA9IFtUdXBsZVtbQ29uc3QudW53cmFwKHQpIGZvciB0IGluIHN0YXRlLnN0YWNrWy1hcmc6XV1dXQoKCmRlZiBidWlsZF9saXN0KHN0YXRlLCBhcmcpOgogIGlmIGFyZyA9PSAwOgogICAgc3RhdGUuc3RhY2suYXBwZW5kKExpc3RbVW5pb25bKCldXSkKICBlbHNlOgogICAgc3RhdGUuc3RhY2tbLWFyZzpdID0gW0xpc3RbcmVkdWNlKHVuaW9uLCBzdGF0ZS5zdGFja1stYXJnOl0sIFVuaW9uWygpXSldXQoKCmJ1aWxkX21hcCA9IHB1c2hfdmFsdWUoRGljdFtBbnksIEFueV0pCgoKZGVmIGxvYWRfYXR0cihzdGF0ZSwgYXJnKToKICAiIiJSZXBsYWNlcyB0aGUgdG9wIG9mIHRoZSBzdGFjaywgVE9TLCB3aXRoCiAgZ2V0YXR0cihUT1MsIGNvX25hbWVzW2FyZ10pCiAgIiIiCiAgbyA9IHN0YXRlLnN0YWNrLnBvcCgpCiAgbmFtZSA9IHN0YXRlLmdldF9uYW1lKGFyZykKICBpZiBpc2luc3RhbmNlKG8sIENvbnN0KSBhbmQgaGFzYXR0cihvLnZhbHVlLCBuYW1lKToKICAgIHN0YXRlLnN0YWNrLmFwcGVuZChDb25zdChnZXRhdHRyKG8udmFsdWUsIG5hbWUpKSkKICBlbGlmIChpbnNwZWN0LmlzY2xhc3MobykgYW5kCiAgICAgICAgaXNpbnN0YW5jZShnZXRhdHRyKG8sIG5hbWUsIE5vbmUpLAogICAgICAgICAgICAgICAgICAgKHR5cGVzLk1ldGhvZFR5cGUsIHR5cGVzLkZ1bmN0aW9uVHlwZSkpKToKICAgICMgVE9ETyhsdWtlLXpodSk6IFN1cHBvcnQgb3RoZXIgY2FsbGFibGUgb2JqZWN0cwogICAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA9PSAyOgogICAgICBmdW5jID0gZ2V0YXR0cihvLCBuYW1lKS5fX2Z1bmNfXwogICAgZWxzZToKICAgICAgZnVuYyA9IGdldGF0dHIobywgbmFtZSkgIyBQeXRob24gMyBoYXMgbm8gdW5ib3VuZCBtZXRob2RzCiAgICBzdGF0ZS5zdGFjay5hcHBlbmQoQ29uc3QoQm91bmRNZXRob2QoZnVuYywgbykpKQogIGVsc2U6CiAgICBzdGF0ZS5zdGFjay5hcHBlbmQoQW55KQoKCmRlZiBjb21wYXJlX29wKHN0YXRlLCB1bnVzZWRfYXJnKToKICAjIENvdWxkIHJlYWxseSBiZSBhbnl0aGluZy4uLgogIHN0YXRlLnN0YWNrWy0yOl0gPSBbYm9vbF0KCgpkZWYgaW1wb3J0X25hbWUoc3RhdGUsIHVudXNlZF9hcmcpOgogIHN0YXRlLnN0YWNrWy0yOl0gPSBbQW55XQoKCmltcG9ydF9mcm9tID0gcHVzaF92YWx1ZShBbnkpCgojIGp1bXAKCiMgZm9yX2l0ZXIKCgpkZWYgbG9hZF9nbG9iYWwoc3RhdGUsIGFyZyk6CiAgc3RhdGUuc3RhY2suYXBwZW5kKHN0YXRlLmdldF9nbG9iYWwoYXJnKSkKCgojIHNldHVwX2xvb3AKIyBzZXR1cF9leGNlcHQKIyBzZXR1cF9maW5hbGx5CnN0b3JlX21hcCA9IHBvcF90d28KCgpkZWYgbG9hZF9mYXN0KHN0YXRlLCBhcmcpOgogIHN0YXRlLnN0YWNrLmFwcGVuZChzdGF0ZS52YXJzW2FyZ10pCgoKZGVmIHN0b3JlX2Zhc3Qoc3RhdGUsIGFyZyk6CiAgc3RhdGUudmFyc1thcmddID0gc3RhdGUuc3RhY2sucG9wKCkKCgpkZWYgZGVsZXRlX2Zhc3Qoc3RhdGUsIGFyZyk6CiAgc3RhdGUudmFyc1thcmddID0gQW55ICAjIHJlYWxseSBhbiBlcnJvcgoKCmRlZiBsb2FkX2Nsb3N1cmUoc3RhdGUsIHVudXNlZF9hcmcpOgogIHN0YXRlLnN0YWNrLmFwcGVuZChBbnkpICAjIHJlYWxseSBhIENlbGwKCgpkZWYgbG9hZF9kZXJlZihzdGF0ZSwgYXJnKToKICBzdGF0ZS5zdGFjay5hcHBlbmQoc3RhdGUuY2xvc3VyZV90eXBlKGFyZykpCiMgcmFpc2VfdmFyYXJncwoKCmRlZiBjYWxsX2Z1bmN0aW9uKHN0YXRlLCBhcmcsIGhhc192YXI9RmFsc2UsIGhhc19rdz1GYWxzZSk6CiAgIyBUT0RPKHJvYmVydHdiKTogUmVjb2duaXplIGJ1aWx0aW5zIGFuZCBkYXRhZmxvdyBvYmplY3RzCiAgIyAoZXNwZWNpYWxseSBzcGVjaWFsIHJldHVybiB2YWx1ZXMpLgogIHBvcF9jb3VudCA9IChhcmcgJiAweEZGKSArIDIgKiAoYXJnID4+IDgpICsgMSArIGhhc192YXIgKyBoYXNfa3cKICBzdGF0ZS5zdGFja1stcG9wX2NvdW50Ol0gPSBbQW55XQoKCmRlZiBtYWtlX2Z1bmN0aW9uKHN0YXRlLCBhcmcpOgogICIiIkNyZWF0ZXMgYSBmdW5jdGlvbiB3aXRoIHRoZSBhcmd1bWVudHMgYXQgdGhlIHRvcCBvZiB0aGUgc3RhY2suCiAgIiIiCiAgIyBUT0RPKGx1a2Utemh1KTogSGFuZGxlIGRlZmF1bHQgYXJndW1lbnQgdHlwZXMKICBnbG9iYWxzID0gc3RhdGUuZi5fX2dsb2JhbHNfXyAjIEluaGVyaXRzIGdsb2JhbHMgZnJvbSB0aGUgY3VycmVudCBmcmFtZQogIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPT0gMjoKICAgIGZ1bmNfY29kZSA9IHN0YXRlLnN0YWNrWy0xXS52YWx1ZQogICAgZnVuYyA9IHR5cGVzLkZ1bmN0aW9uVHlwZShmdW5jX2NvZGUsIGdsb2JhbHMpCiAgZWxzZToKICAgIGZ1bmNfbmFtZSA9IHN0YXRlLnN0YWNrWy0xXS52YWx1ZQogICAgZnVuY19jb2RlID0gc3RhdGUuc3RhY2tbLTJdLnZhbHVlCiAgICBmdW5jID0gdHlwZXMuRnVuY3Rpb25UeXBlKGZ1bmNfY29kZSwgZ2xvYmFscywgbmFtZT1mdW5jX25hbWUpCiAgc3RhdGUuc3RhY2suYXBwZW5kKENvbnN0KGZ1bmMpKQoKCmRlZiBtYWtlX2Nsb3N1cmUoc3RhdGUsIGFyZyk6CiAgc3RhdGUuc3RhY2tbLWFyZyAtIDI6XSA9IFtBbnldICAjIGEgY2FsbGFibGUKCgpkZWYgYnVpbGRfc2xpY2Uoc3RhdGUsIGFyZyk6CiAgc3RhdGUuc3RhY2tbLWFyZzpdID0gW3NsaWNlXSAgIyBhIHNsaWNlIG9iamVjdAoKCmRlZiBjYWxsX2Z1bmN0aW9uX3ZhcihzdGF0ZSwgYXJnKToKICBjYWxsX2Z1bmN0aW9uKHN0YXRlLCBhcmcsIGhhc192YXI9VHJ1ZSkKCgpkZWYgY2FsbF9mdW5jdGlvbl9rdyhzdGF0ZSwgYXJnKToKICBjYWxsX2Z1bmN0aW9uKHN0YXRlLCBhcmcsIGhhc19rdz1UcnVlKQoKCmRlZiBjYWxsX2Z1bmN0aW9uX3Zhcl93ayhzdGF0ZSwgYXJnKToKICBjYWxsX2Z1bmN0aW9uKHN0YXRlLCBhcmcsIGhhc192YXI9VHJ1ZSwgaGFzX2t3PVRydWUpCn1yRoMAAChYBQAAAHVuYXJ5WAMAAABkZWZLY0tlh1gHAAAAcm90X3R3b1gDAAAAZGVmS1NLVYdYEQAAAHB1c2hfdmFsdWUucHVzaGVyWAMAAABkZWZLQUtDh1gLAAAAaW1wb3J0X25hbWVYAwAAAGRlZk0wAU0yAYdYCQAAAHJvdF90aHJlZVgDAAAAZGVmS1dLWYdYBwAAAHBvcF90d29YAwAAAGRlZks3SzmHWAMAAABub3BYAwAAAGRlZktHS0mHWA8AAAB1bnBhY2tfc2VxdWVuY2VYAwAAAGRlZkvjS/KHWAwAAABzdG9yZV9zdWJzY3JYAwAAAGRlZku6S72HWAkAAABsb2FkX2Zhc3RYAwAAAGRlZk1FAU1HAYdYCQAAAHVuYXJ5X25vdFgDAAAAZGVmS2pLbIdYCgAAAGxvYWRfZGVyZWZYAwAAAGRlZk1VAU1XAYdYCgAAAHN0b3JlX2Zhc3RYAwAAAGRlZk1JAU1LAYdYCQAAAGxvYWRfYXR0clgDAAAAZGVmTRYBTSkBh1gLAAAAYnVpbGRfc2xpY2VYAwAAAGRlZk10AU12AYdYCQAAAHBvcF90aHJlZVgDAAAAZGVmSztLPYdYDQAAAGNhbGxfZnVuY3Rpb25YAwAAAGRlZk1aAU1fAYdYCwAAAGJ1aWxkX3R1cGxlWAMAAABkZWZNBQFNCgGHWAsAAABkZWxldGVfZmFzdFgDAAAAZGVmTU0BTU8Bh1gKAAAAcHVzaF92YWx1ZVgDAAAAZGVmSz9LRYdYDQAAAG1ha2VfZnVuY3Rpb25YAwAAAGRlZk1hAU1uAYdYDQAAAHVuYXJ5X2NvbnZlcnRYAwAAAGRlZktuS3CHWAwAAABtYWtlX2Nsb3N1cmVYAwAAAGRlZk1wAU1yAYdYBwAAAHBvcF9vbmVYAwAAAGRlZkszSzWHWA0AAABiaW5hcnlfc3Vic2NyWAMAAABkZWZLmEuph1gIAAAAZHVwX3RvcHhYAwAAAGRlZkv0S/aHWAoAAABjb21wYXJlX29wWAMAAABkZWZNKwFNLgGHWBIAAABiaW5hcnlfdHJ1ZV9kaXZpZGVYAwAAAGRlZkuIS46HWAoAAABidWlsZF9saXN0WAMAAABkZWZNDAFNEQGHWAcAAABwb3BfdG9wWAMAAABkZWZLS0tNh1gTAAAAc3ltbWV0cmljX2JpbmFyeV9vcFgDAAAAZGVmS3ZLf4dYBQAAAHJvdF9uWAMAAABkZWZLT0tRh1gQAAAAY2FsbF9mdW5jdGlvbl9rd1gDAAAAZGVmTXwBTX4Bh1gHAAAAZHVwX3RvcFgDAAAAZGVmS19LYYdYCAAAAHJvdF9mb3VyWAMAAABkZWZLW0tdh1gLAAAAbG9hZF9nbG9iYWxYAwAAAGRlZk07AU09AYdYEQAAAGNhbGxfZnVuY3Rpb25fdmFyWAMAAABkZWZNeAFNegGHWBQAAABjYWxsX2Z1bmN0aW9uX3Zhcl93a1gDAAAAZGVmTYABTYIBh1gMAAAAbG9hZF9jbG9zdXJlWAMAAABkZWZNUQFNUwGHWAgAAABnZXRfaXRlclgDAAAAZGVmS3JLdIdYCwAAAGxpc3RfYXBwZW5kWAMAAABkZWZLzUvRh1gKAAAAbG9hZF9jb25zdFgDAAAAZGVmS/5NAAGHdX1yR4MAAChYBQAAAHVuYXJ5an1YAABYBwAAAHJvdF90d29qfVgAAFgLAAAAaW1wb3J0X25hbWVqfVgAAFgJAAAAcm90X3RocmVlan1YAABYBwAAAHBvcF90d29qfVgAAFgDAAAAbm9wan1YAABYDwAAAHVucGFja19zZXF1ZW5jZWp9WAAAWAwAAABzdG9yZV9zdWJzY3JqfVgAAFgJAAAAbG9hZF9mYXN0an1YAABYCQAAAHVuYXJ5X25vdGp9WAAAWAoAAABsb2FkX2RlcmVman1YAABYCgAAAHN0b3JlX2Zhc3RqfVgAAFgJAAAAbG9hZF9hdHRyan1YAABYCwAAAGJ1aWxkX3NsaWNlan1YAABYCQAAAHBvcF90aHJlZWp9WAAAWA0AAABjYWxsX2Z1bmN0aW9uan1YAABYCwAAAGJ1aWxkX3R1cGxlan1YAABYCwAAAGRlbGV0ZV9mYXN0an1YAABYCgAAAHB1c2hfdmFsdWVqfVgAAFgNAAAAbWFrZV9mdW5jdGlvbmp9WAAAWA0AAAB1bmFyeV9jb252ZXJ0an1YAABYDAAAAG1ha2VfY2xvc3VyZWp9WAAAWAcAAABwb3Bfb25lan1YAABYDQAAAGJpbmFyeV9zdWJzY3JqfVgAAFgIAAAAZHVwX3RvcHhqfVgAAFgKAAAAY29tcGFyZV9vcGp9WAAAWBIAAABiaW5hcnlfdHJ1ZV9kaXZpZGVqfVgAAFgKAAAAYnVpbGRfbGlzdGp9WAAAWAcAAABwb3BfdG9wan1YAABYEwAAAHN5bW1ldHJpY19iaW5hcnlfb3BqfVgAAFgFAAAAcm90X25qfVgAAFgQAAAAY2FsbF9mdW5jdGlvbl9rd2p9WAAAWAcAAABkdXBfdG9wan1YAABYCAAAAHJvdF9mb3Vyan1YAABYCwAAAGxvYWRfZ2xvYmFsan1YAABYEQAAAGNhbGxfZnVuY3Rpb25fdmFyan1YAABYFAAAAGNhbGxfZnVuY3Rpb25fdmFyX3dran1YAABYDAAAAGxvYWRfY2xvc3VyZWp9WAAAWAgAAABnZXRfaXRlcmp9WAAAWAsAAABsaXN0X2FwcGVuZGp9WAAAWAoAAABsb2FkX2NvbnN0an1YAAB1an1pAABYHQAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzckiDAACFgXJJgwAAfXJKgwAAYnRyS4MAAFUSYXBhY2hlX2JlYW0ucHZhbHVlKFh2SAAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJQVmFsdWUsIFBDb2xsZWN0aW9uOiBvbmUgbm9kZSBvZiBhIGRhdGFmbG93IGdyYXBoLgoKQSBub2RlIG9mIGEgZGF0YWZsb3cgcHJvY2Vzc2luZyBncmFwaCBpcyBhIFBWYWx1ZS4gQ3VycmVudGx5LCB0aGVyZSBpcyBvbmx5Cm9uZSB0eXBlOiBQQ29sbGVjdGlvbiAoYSBwb3RlbnRpYWxseSB2ZXJ5IGxhcmdlIHNldCBvZiBhcmJpdHJhcnkgdmFsdWVzKS4KT25jZSBjcmVhdGVkLCBhIFBWYWx1ZSBiZWxvbmdzIHRvIGEgcGlwZWxpbmUgYW5kIGhhcyBhbiBhc3NvY2lhdGVkCnRyYW5zZm9ybSAob2YgdHlwZSBQVHJhbnNmb3JtKSwgd2hpY2ggZGVzY3JpYmVzIGhvdyB0aGUgdmFsdWUgd2lsbCBiZQpwcm9kdWNlZCB3aGVuIHRoZSBwaXBlbGluZSBnZXRzIGV4ZWN1dGVkLgoiIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgY29sbGVjdGlvbnMKaW1wb3J0IGl0ZXJ0b29scwppbXBvcnQgdHlwaW5nCmZyb20gYnVpbHRpbnMgaW1wb3J0IGhleApmcm9tIGJ1aWx0aW5zIGltcG9ydCBvYmplY3QKCmZyb20gcGFzdC5idWlsdGlucyBpbXBvcnQgdW5pY29kZQoKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgY29kZXJzCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IHR5cGVoaW50cwpmcm9tIGFwYWNoZV9iZWFtLmludGVybmFsIGltcG9ydCBwaWNrbGVyCmZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkgaW1wb3J0IGNvbW1vbl91cm5zCmZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkgaW1wb3J0IHB5dGhvbl91cm5zCmZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpIGltcG9ydCBiZWFtX3J1bm5lcl9hcGlfcGIyCgpfX2FsbF9fID0gWwogICAgJ1BDb2xsZWN0aW9uJywKICAgICdUYWdnZWRPdXRwdXQnLAogICAgJ0FzU2luZ2xldG9uJywKICAgICdBc0l0ZXInLAogICAgJ0FzTGlzdCcsCiAgICAnQXNEaWN0JywKICAgICdFbXB0eVNpZGVJbnB1dCcsCl0KCgpjbGFzcyBQVmFsdWUob2JqZWN0KToKICAiIiJCYXNlIGNsYXNzIGZvciBQQ29sbGVjdGlvbi4KCiAgRGF0YWZsb3cgdXNlcnMgc2hvdWxkIG5vdCBjb25zdHJ1Y3QgUFZhbHVlIG9iamVjdHMgZGlyZWN0bHkgaW4gdGhlaXIKICBwaXBlbGluZXMuCgogIEEgUFZhbHVlIGhhcyB0aGUgZm9sbG93aW5nIG1haW4gY2hhcmFjdGVyaXN0aWNzOgogICAgKDEpIEJlbG9uZ3MgdG8gYSBwaXBlbGluZS4gQWRkZWQgZHVyaW5nIG9iamVjdCBpbml0aWFsaXphdGlvbi4KICAgICgyKSBIYXMgYSB0cmFuc2Zvcm0gdGhhdCBjYW4gY29tcHV0ZSB0aGUgdmFsdWUgaWYgZXhlY3V0ZWQuCiAgICAoMykgSGFzIGEgdmFsdWUgd2hpY2ggaXMgbWVhbmluZ2Z1bCBpZiB0aGUgdHJhbnNmb3JtIHdhcyBleGVjdXRlZC4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHBpcGVsaW5lLCB0YWc9Tm9uZSwgZWxlbWVudF90eXBlPU5vbmUsIHdpbmRvd2luZz1Ob25lKToKICAgICIiIkluaXRpYWxpemVzIGEgUFZhbHVlIHdpdGggYWxsIGFyZ3VtZW50cyBoaWRkZW4gYmVoaW5kIGtleXdvcmQgYXJndW1lbnRzLgoKICAgIEFyZ3M6CiAgICAgIHBpcGVsaW5lOiBQaXBlbGluZSBvYmplY3QgZm9yIHRoaXMgUFZhbHVlLgogICAgICB0YWc6IFRhZyBvZiB0aGlzIFBWYWx1ZS4KICAgICAgZWxlbWVudF90eXBlOiBUaGUgdHlwZSBvZiB0aGlzIFBWYWx1ZS4KICAgICIiIgogICAgc2VsZi5waXBlbGluZSA9IHBpcGVsaW5lCiAgICBzZWxmLnRhZyA9IHRhZwogICAgc2VsZi5lbGVtZW50X3R5cGUgPSBlbGVtZW50X3R5cGUKICAgICMgVGhlIEFwcGxpZWRQVHJhbnNmb3JtIGluc3RhbmNlIGZvciB0aGUgYXBwbGljYXRpb24gb2YgdGhlIFBUcmFuc2Zvcm0KICAgICMgZ2VuZXJhdGluZyB0aGlzIFBWYWx1ZS4gVGhlIGZpZWxkIGdldHMgaW5pdGlhbGl6ZWQgd2hlbiBhIHRyYW5zZm9ybQogICAgIyBnZXRzIGFwcGxpZWQuCiAgICBzZWxmLnByb2R1Y2VyID0gTm9uZQogICAgaWYgd2luZG93aW5nOgogICAgICBzZWxmLl93aW5kb3dpbmcgPSB3aW5kb3dpbmcKCiAgZGVmIF9fc3RyX18oc2VsZik6CiAgICByZXR1cm4gc2VsZi5fc3RyX2ludGVybmFsKCkKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICc8JXMgYXQgJXM+JyAlIChzZWxmLl9zdHJfaW50ZXJuYWwoKSwgaGV4KGlkKHNlbGYpKSkKCiAgZGVmIF9zdHJfaW50ZXJuYWwoc2VsZik6CiAgICByZXR1cm4gIiVzWyVzLiVzXSIgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wcm9kdWNlci5mdWxsX2xhYmVsIGlmIHNlbGYucHJvZHVjZXIgZWxzZSBOb25lLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGFnKQoKICBkZWYgYXBwbHkoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICIiIkFwcGxpZXMgYSB0cmFuc2Zvcm0gb3IgY2FsbGFibGUgdG8gYSBQVmFsdWUuCgogICAgQXJnczoKICAgICAgKmFyZ3M6IHBvc2l0aW9uYWwgYXJndW1lbnRzLgogICAgICAqKmt3YXJnczoga2V5d29yZCBhcmd1bWVudHMuCgogICAgVGhlIG1ldGhvZCB3aWxsIGluc2VydCB0aGUgcHZhbHVlIGFzIHRoZSBuZXh0IGFyZ3VtZW50IGZvbGxvd2luZyBhbgogICAgb3B0aW9uYWwgZmlyc3QgbGFiZWwgYW5kIGEgdHJhbnNmb3JtL2NhbGxhYmxlIG9iamVjdC4gSXQgd2lsbCBjYWxsIHRoZQogICAgcGlwZWxpbmUuYXBwbHkoKSBtZXRob2Qgd2l0aCB0aGlzIG1vZGlmaWVkIGFyZ3VtZW50IGxpc3QuCiAgICAiIiIKICAgIGFyZ2xpc3QgPSBsaXN0KGFyZ3MpCiAgICBhcmdsaXN0Lmluc2VydCgxLCBzZWxmKQogICAgcmV0dXJuIHNlbGYucGlwZWxpbmUuYXBwbHkoKmFyZ2xpc3QsICoqa3dhcmdzKQoKICBkZWYgX19vcl9fKHNlbGYsIHB0cmFuc2Zvcm0pOgogICAgcmV0dXJuIHNlbGYucGlwZWxpbmUuYXBwbHkocHRyYW5zZm9ybSwgc2VsZikKCgpjbGFzcyBQQ29sbGVjdGlvbihQVmFsdWUsIHR5cGluZy5HZW5lcmljW3R5cGluZy5UeXBlVmFyKCdUJyldKToKICAiIiJBIG11bHRpcGxlIHZhbHVlcyAocG90ZW50aWFsbHkgaHVnZSkgY29udGFpbmVyLgoKICBEYXRhZmxvdyB1c2VycyBzaG91bGQgbm90IGNvbnN0cnVjdCBQQ29sbGVjdGlvbiBvYmplY3RzIGRpcmVjdGx5IGluIHRoZWlyCiAgcGlwZWxpbmVzLgogICIiIgoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIFBDb2xsZWN0aW9uKToKICAgICAgcmV0dXJuIHNlbGYudGFnID09IG90aGVyLnRhZyBhbmQgc2VsZi5wcm9kdWNlciA9PSBvdGhlci5wcm9kdWNlcgoKICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKICAgICMgVE9ETyhCRUFNLTU5NDkpOiBOZWVkZWQgZm9yIFB5dGhvbiAyIGNvbXBhdGliaWxpdHkuCiAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKCiAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgcmV0dXJuIGhhc2goKHNlbGYudGFnLCBzZWxmLnByb2R1Y2VyKSkKCiAgQHByb3BlcnR5CiAgZGVmIHdpbmRvd2luZyhzZWxmKToKICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICdfd2luZG93aW5nJyk6CiAgICAgIHNlbGYuX3dpbmRvd2luZyA9IHNlbGYucHJvZHVjZXIudHJhbnNmb3JtLmdldF93aW5kb3dpbmcoCiAgICAgICAgICBzZWxmLnByb2R1Y2VyLmlucHV0cykKICAgIHJldHVybiBzZWxmLl93aW5kb3dpbmcKCiAgZGVmIF9fcmVkdWNlX2V4X18oc2VsZiwgdW51c2VkX3ZlcnNpb24pOgogICAgIyBQaWNrbGluZyBhIFBDb2xsZWN0aW9uIGlzIGFsbW9zdCBhbHdheXMgdGhlIHdyb25nIHRoaW5nIHRvIGRvLCBidXQgd2UKICAgICMgY2FuJ3QgcHJvaGliaXQgaXQgYXMgaXQgb2Z0ZW4gZ2V0cyBpbXBsaWNpdGx5IHBpY2tlZCB1cCAoZS5nLiBhcyBwYXJ0CiAgICAjIG9mIGEgY2xvc3VyZSkuCiAgICByZXR1cm4gX0ludmFsaWRVbnBpY2tsZWRQQ29sbGVjdGlvbiwgKCkKCiAgZGVmIHRvX3J1bm5lcl9hcGkoc2VsZiwgY29udGV4dCk6CiAgICByZXR1cm4gYmVhbV9ydW5uZXJfYXBpX3BiMi5QQ29sbGVjdGlvbigKICAgICAgICB1bmlxdWVfbmFtZT0nJWQlcy4lcycgJSAoCiAgICAgICAgICAgIGxlbihzZWxmLnByb2R1Y2VyLmZ1bGxfbGFiZWwpLCBzZWxmLnByb2R1Y2VyLmZ1bGxfbGFiZWwsIHNlbGYudGFnKSwKICAgICAgICBjb2Rlcl9pZD1jb250ZXh0LmNvZGVyX2lkX2Zyb21fZWxlbWVudF90eXBlKHNlbGYuZWxlbWVudF90eXBlKSwKICAgICAgICBpc19ib3VuZGVkPWJlYW1fcnVubmVyX2FwaV9wYjIuSXNCb3VuZGVkLkJPVU5ERUQsCiAgICAgICAgd2luZG93aW5nX3N0cmF0ZWd5X2lkPWNvbnRleHQud2luZG93aW5nX3N0cmF0ZWdpZXMuZ2V0X2lkKAogICAgICAgICAgICBzZWxmLndpbmRvd2luZykpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZnJvbV9ydW5uZXJfYXBpKHByb3RvLCBjb250ZXh0KToKICAgICMgUHJvZHVjZXIgYW5kIHRhZyB3aWxsIGJlIGZpbGxlZCBpbiBsYXRlciwgdGhlIGtleSBwb2ludCBpcyB0aGF0IHRoZQogICAgIyBzYW1lIG9iamVjdCBpcyByZXR1cm5lZCBmb3IgdGhlIHNhbWUgcGNvbGxlY3Rpb24gaWQuCiAgICByZXR1cm4gUENvbGxlY3Rpb24oCiAgICAgICAgTm9uZSwKICAgICAgICBlbGVtZW50X3R5cGU9cGlja2xlci5sb2Fkcyhwcm90by5jb2Rlcl9pZCksCiAgICAgICAgd2luZG93aW5nPWNvbnRleHQud2luZG93aW5nX3N0cmF0ZWdpZXMuZ2V0X2J5X2lkKAogICAgICAgICAgICBwcm90by53aW5kb3dpbmdfc3RyYXRlZ3lfaWQpKQoKCmNsYXNzIF9JbnZhbGlkVW5waWNrbGVkUENvbGxlY3Rpb24ob2JqZWN0KToKICBwYXNzCgoKY2xhc3MgUEJlZ2luKFBWYWx1ZSk6CiAgIiIiQSBwaXBlbGluZSBiZWdpbiBtYXJrZXIgdXNlZCBhcyBpbnB1dCB0byBjcmVhdGUvcmVhZCB0cmFuc2Zvcm1zLgoKICBUaGUgY2xhc3MgaXMgdXNlZCBpbnRlcm5hbGx5IHRvIHJlcHJlc2VudCBpbnB1dHMgdG8gQ3JlYXRlIGFuZCBSZWFkCiAgdHJhbnNmb3Jtcy4gVGhpcyBhbGxvd3MgdXMgdG8gaGF2ZSB0cmFuc2Zvcm1zIHRoYXQgdW5pZm9ybWx5IHRha2UgUFZhbHVlKHMpCiAgYXMgaW5wdXRzLgogICIiIgogIHBhc3MKCgpjbGFzcyBQRG9uZShQVmFsdWUpOgogICIiIlBEb25lIGlzIHRoZSBvdXRwdXQgb2YgYSB0cmFuc2Zvcm0gdGhhdCBoYXMgYSB0cml2aWFsIHJlc3VsdCBzdWNoIGFzIFdyaXRlLgogICIiIgogIHBhc3MKCgpjbGFzcyBEb091dHB1dHNUdXBsZShvYmplY3QpOgogICIiIkFuIG9iamVjdCBncm91cGluZyB0aGUgbXVsdGlwbGUgb3V0cHV0cyBvZiBhIFBhckRvIG9yIEZsYXRNYXAgdHJhbnNmb3JtLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgcGlwZWxpbmUsIHRyYW5zZm9ybSwgdGFncywgbWFpbl90YWcpOgogICAgc2VsZi5fcGlwZWxpbmUgPSBwaXBlbGluZQogICAgc2VsZi5fdGFncyA9IHRhZ3MKICAgIHNlbGYuX21haW5fdGFnID0gbWFpbl90YWcKICAgIHNlbGYuX3RyYW5zZm9ybSA9IHRyYW5zZm9ybQogICAgIyBUaGUgQXBwbHlQVHJhbnNmb3JtIGluc3RhbmNlIGZvciB0aGUgYXBwbGljYXRpb24gb2YgdGhlIG11bHRpIEZsYXRNYXAKICAgICMgZ2VuZXJhdGluZyB0aGlzIHZhbHVlLiBUaGUgZmllbGQgZ2V0cyBpbml0aWFsaXplZCB3aGVuIGEgdHJhbnNmb3JtCiAgICAjIGdldHMgYXBwbGllZC4KICAgIHNlbGYucHJvZHVjZXIgPSBOb25lCiAgICAjIERpY3Rpb25hcnkgb2YgUENvbGxlY3Rpb25zIGFscmVhZHkgYXNzb2NpYXRlZCB3aXRoIHRhZ3MuCiAgICBzZWxmLl9wY29sbHMgPSB7fQoKICBkZWYgX19zdHJfXyhzZWxmKToKICAgIHJldHVybiAnPCVzPicgJSBzZWxmLl9zdHJfaW50ZXJuYWwoKQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJzwlcyBhdCAlcz4nICUgKHNlbGYuX3N0cl9pbnRlcm5hbCgpLCBoZXgoaWQoc2VsZikpKQoKICBkZWYgX3N0cl9pbnRlcm5hbChzZWxmKToKICAgIHJldHVybiAnJXMgbWFpbl90YWc9JXMgdGFncz0lcyB0cmFuc2Zvcm09JXMnICUgKAogICAgICAgIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBzZWxmLl9tYWluX3RhZywgc2VsZi5fdGFncywgc2VsZi5fdHJhbnNmb3JtKQoKICBkZWYgX19pdGVyX18oc2VsZik6CiAgICAiIiJJdGVyYXRlcyBvdmVyIHRhZ3MgcmV0dXJuaW5nIGZvciBlYWNoIGNhbGwgYSAodGFnLCBwdmFsdWUpIHBhaXIuIiIiCiAgICBpZiBzZWxmLl9tYWluX3RhZyBpcyBub3QgTm9uZToKICAgICAgeWllbGQgc2VsZltzZWxmLl9tYWluX3RhZ10KICAgIGZvciB0YWcgaW4gc2VsZi5fdGFnczoKICAgICAgeWllbGQgc2VsZlt0YWddCgogIGRlZiBfX2dldGF0dHJfXyhzZWxmLCB0YWcpOgogICAgIyBTcGVjaWFsIG1ldGhvZHMgd2hpY2ggbWF5IGJlIGFjY2Vzc2VkIGJlZm9yZSB0aGUgb2JqZWN0IGlzCiAgICAjIGZ1bGx5IGNvbnN0cnVjdGVkIChlLmcuIGluIHVucGlja2xpbmcpLgogICAgaWYgdGFnWzoyXSA9PSB0YWdbLTI6XSA9PSAnX18nOgogICAgICByZXR1cm4gb2JqZWN0Ll9fZ2V0YXR0cl9fKHNlbGYsIHRhZykKICAgIHJldHVybiBzZWxmW3RhZ10KCiAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIHRhZyk6CiAgICAjIEFjY2VwdCBpbnQgdGFncyBzbyB0aGF0IHdlIGNhbiBsb29rIGF0IFBhcnRpdGlvbiB0YWdzIHdpdGggdGhlCiAgICAjIHNhbWUgaW50cyB0aGF0IHdlIHVzZWQgaW4gdGhlIHBhcnRpdGlvbiBmdW5jdGlvbi4KICAgICMgVE9ETyhnaWxkZWEpOiBDb25zaWRlciByZXF1aXJpbmcgc3RyaW5nLWJhc2VkIHRhZ3MgZXZlcnl3aGVyZS4KICAgICMgVGhpcyB3aWxsIHJlcXVpcmUgYSBwYXJ0aXRpb24gZnVuY3Rpb24gdGhhdCBkb2VzIG5vdCByZXR1cm4gaW50cy4KICAgIGlmIGlzaW5zdGFuY2UodGFnLCBpbnQpOgogICAgICB0YWcgPSBzdHIodGFnKQogICAgaWYgdGFnID09IHNlbGYuX21haW5fdGFnOgogICAgICB0YWcgPSBOb25lCiAgICBlbGlmIHNlbGYuX3RhZ3MgYW5kIHRhZyBub3QgaW4gc2VsZi5fdGFnczoKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICJUYWcgJyVzJyBpcyBuZWl0aGVyIHRoZSBtYWluIHRhZyAnJXMnICIKICAgICAgICAgICJub3IgYW55IG9mIHRoZSB0YWdzICVzIiAlICgKICAgICAgICAgICAgICB0YWcsIHNlbGYuX21haW5fdGFnLCBzZWxmLl90YWdzKSkKICAgICMgQ2hlY2sgaWYgd2UgYWNjZXNzZWQgdGhpcyB0YWcgYmVmb3JlLgogICAgaWYgdGFnIGluIHNlbGYuX3Bjb2xsczoKICAgICAgcmV0dXJuIHNlbGYuX3Bjb2xsc1t0YWddCgogICAgaWYgdGFnIGlzIG5vdCBOb25lOgogICAgICBzZWxmLl90cmFuc2Zvcm0ub3V0cHV0X3RhZ3MuYWRkKHRhZykKICAgICAgcGNvbGwgPSBQQ29sbGVjdGlvbihzZWxmLl9waXBlbGluZSwgdGFnPXRhZykKICAgICAgIyBUcmFuc2ZlciB0aGUgcHJvZHVjZXIgZnJvbSB0aGUgRG9PdXRwdXRzVHVwbGUgdG8gdGhlIHJlc3VsdGluZwogICAgICAjIFBDb2xsZWN0aW9uLgogICAgICBwY29sbC5wcm9kdWNlciA9IHNlbGYucHJvZHVjZXIucGFydHNbMF0KICAgICAgIyBBZGQgdGhpcyBhcyBhbiBvdXRwdXQgdG8gYm90aCB0aGUgaW5uZXIgUGFyRG8gYW5kIHRoZSBvdXRlciBfTXVsdGlQYXJEbwogICAgICAjIFBUcmFuc2Zvcm1zLgogICAgICBpZiB0YWcgbm90IGluIHNlbGYucHJvZHVjZXIucGFydHNbMF0ub3V0cHV0czoKICAgICAgICBzZWxmLnByb2R1Y2VyLnBhcnRzWzBdLmFkZF9vdXRwdXQocGNvbGwsIHRhZykKICAgICAgICBzZWxmLnByb2R1Y2VyLmFkZF9vdXRwdXQocGNvbGwsIHRhZykKICAgIGVsc2U6CiAgICAgICMgTWFpbiBvdXRwdXQgaXMgb3V0cHV0IG9mIGlubmVyIFBhckRvLgogICAgICBwY29sbCA9IHNlbGYucHJvZHVjZXIucGFydHNbMF0ub3V0cHV0c1tOb25lXQogICAgc2VsZi5fcGNvbGxzW3RhZ10gPSBwY29sbAogICAgcmV0dXJuIHBjb2xsCgoKY2xhc3MgVGFnZ2VkT3V0cHV0KG9iamVjdCk6CiAgIiIiQW4gb2JqZWN0IHJlcHJlc2VudGluZyBhIHRhZ2dlZCB2YWx1ZS4KCiAgUGFyRG8sIE1hcCwgYW5kIEZsYXRNYXAgdHJhbnNmb3JtcyBjYW4gZW1pdCB2YWx1ZXMgb24gbXVsdGlwbGUgb3V0cHV0cyB3aGljaAogIGFyZSBkaXN0aW5ndWlzaGVkIGJ5IHN0cmluZyB0YWdzLiBUaGUgRG9GbiB3aWxsIHJldHVybiBwbGFpbiB2YWx1ZXMKICBpZiBpdCB3YW50cyB0byBlbWl0IG9uIHRoZSBtYWluIG91dHB1dCBhbmQgVGFnZ2VkT3V0cHV0IG9iamVjdHMKICBpZiBpdCB3YW50cyB0byBlbWl0IGEgdmFsdWUgb24gYSBzcGVjaWZpYyB0YWdnZWQgb3V0cHV0LgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgdGFnLCB2YWx1ZSk6CiAgICBpZiBub3QgaXNpbnN0YW5jZSh0YWcsIChzdHIsIHVuaWNvZGUpKToKICAgICAgcmFpc2UgVHlwZUVycm9yKAogICAgICAgICAgJ0F0dGVtcHRpbmcgdG8gY3JlYXRlIGEgVGFnZ2VkT3V0cHV0IHdpdGggbm9uLXN0cmluZyB0YWcgJXMnICUgKHRhZywpKQogICAgc2VsZi50YWcgPSB0YWcKICAgIHNlbGYudmFsdWUgPSB2YWx1ZQoKCmNsYXNzIEFzU2lkZUlucHV0KG9iamVjdCk6CiAgIiIiTWFya2VyIHNwZWNpZnlpbmcgdGhhdCBhIFBDb2xsZWN0aW9uIHdpbGwgYmUgdXNlZCBhcyBhIHNpZGUgaW5wdXQuCgogIFdoZW4gYSBQQ29sbGVjdGlvbiBpcyBzdXBwbGllZCBhcyBhIHNpZGUgaW5wdXQgdG8gYSBQVHJhbnNmb3JtLCBpdCBpcwogIG5lY2Vzc2FyeSB0byBpbmRpY2F0ZSBob3cgdGhlIFBDb2xsZWN0aW9uIHNob3VsZCBiZSBtYWRlIGF2YWlsYWJsZQogIGFzIGEgUFRyYW5zZm9ybSBzaWRlIGFyZ3VtZW50IChlLmcuIGluIHRoZSBmb3JtIG9mIGFuIGl0ZXJhYmxlLCBtYXBwaW5nLAogIG9yIHNpbmdsZSB2YWx1ZSkuICBUaGlzIGNsYXNzIGlzIHRoZSBzdXBlcmNsYXNzIG9mIGFsbCB0aGUgdmFyaW91cwogIG9wdGlvbnMsIGFuZCBzaG91bGQgbm90IGJlIGluc3RhbnRpYXRlZCBkaXJlY3RseS4gKFNlZSBpbnN0ZWFkIEFzU2luZ2xldG9uLAogIEFzSXRlciwgZXRjLikKICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHBjb2xsKToKICAgIGZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgc2lkZWlucHV0cwogICAgc2VsZi5wdmFsdWUgPSBwY29sbAogICAgc2VsZi5fd2luZG93X21hcHBpbmdfZm4gPSBzaWRlaW5wdXRzLmRlZmF1bHRfd2luZG93X21hcHBpbmdfZm4oCiAgICAgICAgcGNvbGwud2luZG93aW5nLndpbmRvd2ZuKQoKICBkZWYgX3ZpZXdfb3B0aW9ucyhzZWxmKToKICAgICIiIkludGVybmFsIG9wdGlvbnMgY29ycmVzcG9uZGluZyB0byBzcGVjaWZpYyB2aWV3LgoKICAgIEludGVuZGVkIGZvciBpbnRlcm5hbCB1c2UgYnkgcnVubmVyIGltcGxlbWVudGF0aW9ucy4KCiAgICBSZXR1cm5zOgogICAgICBUdXBsZSBvZiBvcHRpb25zIGZvciB0aGUgZ2l2ZW4gdmlldy4KICAgICIiIgogICAgcmV0dXJuIHsnd2luZG93X21hcHBpbmdfZm4nOiBzZWxmLl93aW5kb3dfbWFwcGluZ19mbn0KCiAgQHByb3BlcnR5CiAgZGVmIGVsZW1lbnRfdHlwZShzZWxmKToKICAgIHJldHVybiB0eXBlaGludHMuQW55CgogICMgVE9ETyhyb2JlcnR3Yik6IEdldCByaWQgb2YgX2Zyb21fcnVudGltZV9pdGVyYWJsZSBhbmQgX3ZpZXdfb3B0aW9ucwogICMgaW4gZmF2b3Igb2YgX3NpZGVfaW5wdXRfZGF0YSgpLgogIGRlZiBfc2lkZV9pbnB1dF9kYXRhKHNlbGYpOgogICAgdmlld19vcHRpb25zID0gc2VsZi5fdmlld19vcHRpb25zKCkKICAgIGZyb21fcnVudGltZV9pdGVyYWJsZSA9IHR5cGUoc2VsZikuX2Zyb21fcnVudGltZV9pdGVyYWJsZQogICAgcmV0dXJuIFNpZGVJbnB1dERhdGEoCiAgICAgICAgY29tbW9uX3VybnMuc2lkZV9pbnB1dHMuSVRFUkFCTEUudXJuLAogICAgICAgIHNlbGYuX3dpbmRvd19tYXBwaW5nX2ZuLAogICAgICAgIGxhbWJkYSBpdGVyYWJsZTogZnJvbV9ydW50aW1lX2l0ZXJhYmxlKGl0ZXJhYmxlLCB2aWV3X29wdGlvbnMpKQoKICBkZWYgX2lucHV0X2VsZW1lbnRfY29kZXIoc2VsZik6CiAgICByZXR1cm4gY29kZXJzLldpbmRvd2VkVmFsdWVDb2RlcigKICAgICAgICBjb2RlcnMucmVnaXN0cnkuZ2V0X2NvZGVyKHNlbGYucHZhbHVlLmVsZW1lbnRfdHlwZSksCiAgICAgICAgd2luZG93X2NvZGVyPXNlbGYucHZhbHVlLndpbmRvd2luZy53aW5kb3dmbi5nZXRfd2luZG93X2NvZGVyKCkpCgogIGRlZiB0b19ydW5uZXJfYXBpKHNlbGYsIGNvbnRleHQpOgogICAgcmV0dXJuIHNlbGYuX3NpZGVfaW5wdXRfZGF0YSgpLnRvX3J1bm5lcl9hcGkoY29udGV4dCkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBmcm9tX3J1bm5lcl9hcGkocHJvdG8sIGNvbnRleHQpOgogICAgcmV0dXJuIF9VbnBpY2tsZWRTaWRlSW5wdXQoCiAgICAgICAgU2lkZUlucHV0RGF0YS5mcm9tX3J1bm5lcl9hcGkocHJvdG8sIGNvbnRleHQpKQoKCmNsYXNzIF9VbnBpY2tsZWRTaWRlSW5wdXQoQXNTaWRlSW5wdXQpOgogIGRlZiBfX2luaXRfXyhzZWxmLCBzaWRlX2lucHV0X2RhdGEpOgogICAgc2VsZi5fZGF0YSA9IHNpZGVfaW5wdXRfZGF0YQogICAgc2VsZi5fd2luZG93X21hcHBpbmdfZm4gPSBzaWRlX2lucHV0X2RhdGEud2luZG93X21hcHBpbmdfZm4KCiAgQHN0YXRpY21ldGhvZAogIGRlZiBfZnJvbV9ydW50aW1lX2l0ZXJhYmxlKGl0LCBvcHRpb25zKToKICAgIHJldHVybiBvcHRpb25zWydkYXRhJ10udmlld19mbihpdCkKCiAgZGVmIF92aWV3X29wdGlvbnMoc2VsZik6CiAgICByZXR1cm4gewogICAgICAgICdkYXRhJzogc2VsZi5fZGF0YSwKICAgICAgICAjIEZvciBub24tZm4tYXBpIHJ1bm5lcnMuCiAgICAgICAgJ3dpbmRvd19tYXBwaW5nX2ZuJzogc2VsZi5fZGF0YS53aW5kb3dfbWFwcGluZ19mbiwKICAgIH0KCiAgZGVmIF9zaWRlX2lucHV0X2RhdGEoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fZGF0YQoKCmNsYXNzIFNpZGVJbnB1dERhdGEob2JqZWN0KToKICAiIiJBbGwgb2YgdGhlIGRhdGEgYWJvdXQgYSBzaWRlIGlucHV0IGV4Y2VwdCBmb3IgdGhlIGJvdW5kIFBDb2xsZWN0aW9uLiIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBhY2Nlc3NfcGF0dGVybiwgd2luZG93X21hcHBpbmdfZm4sIHZpZXdfZm4pOgogICAgc2VsZi5hY2Nlc3NfcGF0dGVybiA9IGFjY2Vzc19wYXR0ZXJuCiAgICBzZWxmLndpbmRvd19tYXBwaW5nX2ZuID0gd2luZG93X21hcHBpbmdfZm4KICAgIHNlbGYudmlld19mbiA9IHZpZXdfZm4KCiAgZGVmIHRvX3J1bm5lcl9hcGkoc2VsZiwgY29udGV4dCk6CiAgICByZXR1cm4gYmVhbV9ydW5uZXJfYXBpX3BiMi5TaWRlSW5wdXQoCiAgICAgICAgYWNjZXNzX3BhdHRlcm49YmVhbV9ydW5uZXJfYXBpX3BiMi5GdW5jdGlvblNwZWMoCiAgICAgICAgICAgIHVybj1zZWxmLmFjY2Vzc19wYXR0ZXJuKSwKICAgICAgICB2aWV3X2ZuPWJlYW1fcnVubmVyX2FwaV9wYjIuU2RrRnVuY3Rpb25TcGVjKAogICAgICAgICAgICBlbnZpcm9ubWVudF9pZD1jb250ZXh0LmRlZmF1bHRfZW52aXJvbm1lbnRfaWQoKSwKICAgICAgICAgICAgc3BlYz1iZWFtX3J1bm5lcl9hcGlfcGIyLkZ1bmN0aW9uU3BlYygKICAgICAgICAgICAgICAgIHVybj1weXRob25fdXJucy5QSUNLTEVEX1ZJRVdGTiwKICAgICAgICAgICAgICAgIHBheWxvYWQ9cGlja2xlci5kdW1wcyhzZWxmLnZpZXdfZm4pKSksCiAgICAgICAgd2luZG93X21hcHBpbmdfZm49YmVhbV9ydW5uZXJfYXBpX3BiMi5TZGtGdW5jdGlvblNwZWMoCiAgICAgICAgICAgIGVudmlyb25tZW50X2lkPWNvbnRleHQuZGVmYXVsdF9lbnZpcm9ubWVudF9pZCgpLAogICAgICAgICAgICBzcGVjPWJlYW1fcnVubmVyX2FwaV9wYjIuRnVuY3Rpb25TcGVjKAogICAgICAgICAgICAgICAgdXJuPXB5dGhvbl91cm5zLlBJQ0tMRURfV0lORE9XX01BUFBJTkdfRk4sCiAgICAgICAgICAgICAgICBwYXlsb2FkPXBpY2tsZXIuZHVtcHMoc2VsZi53aW5kb3dfbWFwcGluZ19mbikpKSkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBmcm9tX3J1bm5lcl9hcGkocHJvdG8sIHVudXNlZF9jb250ZXh0KToKICAgIGFzc2VydCBwcm90by52aWV3X2ZuLnNwZWMudXJuID09IHB5dGhvbl91cm5zLlBJQ0tMRURfVklFV0ZOCiAgICBhc3NlcnQgKHByb3RvLndpbmRvd19tYXBwaW5nX2ZuLnNwZWMudXJuID09CiAgICAgICAgICAgIHB5dGhvbl91cm5zLlBJQ0tMRURfV0lORE9XX01BUFBJTkdfRk4pCiAgICByZXR1cm4gU2lkZUlucHV0RGF0YSgKICAgICAgICBwcm90by5hY2Nlc3NfcGF0dGVybi51cm4sCiAgICAgICAgcGlja2xlci5sb2Fkcyhwcm90by53aW5kb3dfbWFwcGluZ19mbi5zcGVjLnBheWxvYWQpLAogICAgICAgIHBpY2tsZXIubG9hZHMocHJvdG8udmlld19mbi5zcGVjLnBheWxvYWQpKQoKCmNsYXNzIEFzU2luZ2xldG9uKEFzU2lkZUlucHV0KToKICAiIiJNYXJrZXIgc3BlY2lmeWluZyB0aGF0IGFuIGVudGlyZSBQQ29sbGVjdGlvbiBpcyB0byBiZSB1c2VkIGFzIGEgc2lkZSBpbnB1dC4KCiAgV2hlbiBhIFBDb2xsZWN0aW9uIGlzIHN1cHBsaWVkIGFzIGEgc2lkZSBpbnB1dCB0byBhIFBUcmFuc2Zvcm0sIGl0IGlzCiAgbmVjZXNzYXJ5IHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIGVudGlyZSBQQ29sbGVjdGlvbiBzaG91bGQgYmUgbWFkZSBhdmFpbGFibGUKICBhcyBhIFBUcmFuc2Zvcm0gc2lkZSBhcmd1bWVudCAoaW4gdGhlIGZvcm0gb2YgYW4gaXRlcmFibGUpLCBvciB3aGV0aGVyIGp1c3QKICBvbmUgdmFsdWUgc2hvdWxkIGJlIHB1bGxlZCBmcm9tIHRoZSBQQ29sbGVjdGlvbiBhbmQgc3VwcGxpZWQgYXMgdGhlIHNpZGUKICBhcmd1bWVudCAoYXMgYW4gb3JkaW5hcnkgdmFsdWUpLgoKICBXcmFwcGluZyBhIFBDb2xsZWN0aW9uIHNpZGUgaW5wdXQgYXJndW1lbnQgdG8gYSBQVHJhbnNmb3JtIGluIHRoaXMgY29udGFpbmVyCiAgKGUuZy4sIGRhdGEuYXBwbHkoJ2xhYmVsJywgTXlQVHJhbnNmb3JtKCksIEFzU2luZ2xldG9uKG15X3NpZGVfaW5wdXQpICkKICBzZWxlY3RzIHRoZSBsYXR0ZXIgYmVoYXZvci4KCiAgVGhlIGlucHV0IFBDb2xsZWN0aW9uIG11c3QgY29udGFpbiBleGFjdGx5IG9uZSAgdmFsdWUgcGVyIHdpbmRvdywgdW5sZXNzIGEKICBkZWZhdWx0IGlzIGdpdmVuLCBpbiB3aGljaCBjYXNlIGl0IG1heSBiZSBlbXB0eS4KICAiIiIKICBfTk9fREVGQVVMVCA9IG9iamVjdCgpCgogIGRlZiBfX2luaXRfXyhzZWxmLCBwY29sbCwgZGVmYXVsdF92YWx1ZT1fTk9fREVGQVVMVCk6CiAgICBzdXBlcihBc1NpbmdsZXRvbiwgc2VsZikuX19pbml0X18ocGNvbGwpCiAgICBzZWxmLmRlZmF1bHRfdmFsdWUgPSBkZWZhdWx0X3ZhbHVlCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnQXNTaW5nbGV0b24oJXMpJyAlIHNlbGYucHZhbHVlCgogIGRlZiBfdmlld19vcHRpb25zKHNlbGYpOgogICAgYmFzZSA9IHN1cGVyKEFzU2luZ2xldG9uLCBzZWxmKS5fdmlld19vcHRpb25zKCkKICAgIGlmIHNlbGYuZGVmYXVsdF92YWx1ZSAhPSBBc1NpbmdsZXRvbi5fTk9fREVGQVVMVDoKICAgICAgcmV0dXJuIGRpY3QoYmFzZSwgZGVmYXVsdD1zZWxmLmRlZmF1bHRfdmFsdWUpCiAgICByZXR1cm4gYmFzZQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIF9mcm9tX3J1bnRpbWVfaXRlcmFibGUoaXQsIG9wdGlvbnMpOgogICAgaGVhZCA9IGxpc3QoaXRlcnRvb2xzLmlzbGljZShpdCwgMikpCiAgICBpZiBub3QgaGVhZDoKICAgICAgcmV0dXJuIG9wdGlvbnMuZ2V0KCdkZWZhdWx0JywgRW1wdHlTaWRlSW5wdXQoKSkKICAgIGVsaWYgbGVuKGhlYWQpID09IDE6CiAgICAgIHJldHVybiBoZWFkWzBdCiAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICdQQ29sbGVjdGlvbiBvZiBzaXplICVkIHdpdGggbW9yZSB0aGFuIG9uZSBlbGVtZW50IGFjY2Vzc2VkIGFzIGEgJwogICAgICAgICdzaW5nbGV0b24gdmlldy4gRmlyc3QgdHdvIGVsZW1lbnRzIGVuY291bnRlcmVkIGFyZSAiJXMiLCAiJXMiLicgJSAoCiAgICAgICAgICAgIGxlbihoZWFkKSwgc3RyKGhlYWRbMF0pLCBzdHIoaGVhZFsxXSkpKQoKICBAcHJvcGVydHkKICBkZWYgZWxlbWVudF90eXBlKHNlbGYpOgogICAgcmV0dXJuIHNlbGYucHZhbHVlLmVsZW1lbnRfdHlwZQoKCmNsYXNzIEFzSXRlcihBc1NpZGVJbnB1dCk6CiAgIiIiTWFya2VyIHNwZWNpZnlpbmcgdGhhdCBhbiBlbnRpcmUgUENvbGxlY3Rpb24gaXMgdG8gYmUgdXNlZCBhcyBhIHNpZGUgaW5wdXQuCgogIFdoZW4gYSBQQ29sbGVjdGlvbiBpcyBzdXBwbGllZCBhcyBhIHNpZGUgaW5wdXQgdG8gYSBQVHJhbnNmb3JtLCBpdCBpcwogIG5lY2Vzc2FyeSB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBlbnRpcmUgUENvbGxlY3Rpb24gc2hvdWxkIGJlIG1hZGUgYXZhaWxhYmxlCiAgYXMgYSBQVHJhbnNmb3JtIHNpZGUgYXJndW1lbnQgKGluIHRoZSBmb3JtIG9mIGFuIGl0ZXJhYmxlKSwgb3Igd2hldGhlciBqdXN0CiAgb25lIHZhbHVlIHNob3VsZCBiZSBwdWxsZWQgZnJvbSB0aGUgUENvbGxlY3Rpb24gYW5kIHN1cHBsaWVkIGFzIHRoZSBzaWRlCiAgYXJndW1lbnQgKGFzIGFuIG9yZGluYXJ5IHZhbHVlKS4KCiAgV3JhcHBpbmcgYSBQQ29sbGVjdGlvbiBzaWRlIGlucHV0IGFyZ3VtZW50IHRvIGEgUFRyYW5zZm9ybSBpbiB0aGlzIGNvbnRhaW5lcgogIChlLmcuLCBkYXRhLmFwcGx5KCdsYWJlbCcsIE15UFRyYW5zZm9ybSgpLCBBc0l0ZXIobXlfc2lkZV9pbnB1dCkgKSBzZWxlY3RzIHRoZQogIGZvcm1lciBiZWhhdm9yLgogICIiIgoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJ0FzSXRlciglcyknICUgc2VsZi5wdmFsdWUKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBfZnJvbV9ydW50aW1lX2l0ZXJhYmxlKGl0LCBvcHRpb25zKToKICAgIHJldHVybiBpdAoKICBkZWYgX3NpZGVfaW5wdXRfZGF0YShzZWxmKToKICAgIHJldHVybiBTaWRlSW5wdXREYXRhKAogICAgICAgIGNvbW1vbl91cm5zLnNpZGVfaW5wdXRzLklURVJBQkxFLnVybiwKICAgICAgICBzZWxmLl93aW5kb3dfbWFwcGluZ19mbiwKICAgICAgICBsYW1iZGEgaXRlcmFibGU6IGl0ZXJhYmxlKQoKICBAcHJvcGVydHkKICBkZWYgZWxlbWVudF90eXBlKHNlbGYpOgogICAgcmV0dXJuIHR5cGVoaW50cy5JdGVyYWJsZVtzZWxmLnB2YWx1ZS5lbGVtZW50X3R5cGVdCgoKY2xhc3MgQXNMaXN0KEFzU2lkZUlucHV0KToKICAiIiJNYXJrZXIgc3BlY2lmeWluZyB0aGF0IGFuIGVudGlyZSBQQ29sbGVjdGlvbiBpcyB0byBiZSB1c2VkIGFzIGEgc2lkZSBpbnB1dC4KCiAgSW50ZW5kZWQgZm9yIHVzZSBpbiBzaWRlLWFyZ3VtZW50IHNwZWNpZmljYXRpb24tLS10aGUgc2FtZSBwbGFjZXMgd2hlcmUKICBBc1NpbmdsZXRvbiBhbmQgQXNJdGVyIGFyZSB1c2VkLCBidXQgZm9yY2VzIG1hdGVyaWFsaXphdGlvbiBvZiB0aGlzCiAgUENvbGxlY3Rpb24gYXMgYSBsaXN0LgoKICBBcmdzOgogICAgcGNvbGw6IElucHV0IHBjb2xsZWN0aW9uLgoKICBSZXR1cm5zOgogICAgQW4gQXNMaXN0LXdyYXBwZXIgYXJvdW5kIGEgUENvbGxlY3Rpb24gd2hvc2Ugb25lIGVsZW1lbnQgaXMgYSBsaXN0CiAgICBjb250YWluaW5nIGFsbCBlbGVtZW50cyBpbiBwY29sbC4KICAiIiIKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBfZnJvbV9ydW50aW1lX2l0ZXJhYmxlKGl0LCBvcHRpb25zKToKICAgIHJldHVybiBsaXN0KGl0KQoKICBkZWYgX3NpZGVfaW5wdXRfZGF0YShzZWxmKToKICAgIHJldHVybiBTaWRlSW5wdXREYXRhKAogICAgICAgIGNvbW1vbl91cm5zLnNpZGVfaW5wdXRzLklURVJBQkxFLnVybiwKICAgICAgICBzZWxmLl93aW5kb3dfbWFwcGluZ19mbiwKICAgICAgICBsaXN0KQoKCmNsYXNzIEFzRGljdChBc1NpZGVJbnB1dCk6CiAgIiIiTWFya2VyIHNwZWNpZnlpbmcgYSBQQ29sbGVjdGlvbiB0byBiZSB1c2VkIGFzIGFuIGluZGV4YWJsZSBzaWRlIGlucHV0LgoKICBJbnRlbmRlZCBmb3IgdXNlIGluIHNpZGUtYXJndW1lbnQgc3BlY2lmaWNhdGlvbi0tLXRoZSBzYW1lIHBsYWNlcyB3aGVyZQogIEFzU2luZ2xldG9uIGFuZCBBc0l0ZXIgYXJlIHVzZWQsIGJ1dCByZXR1cm5zIGFuIGludGVyZmFjZSB0aGF0IGFsbG93cwogIGtleSBsb29rdXAuCgogIEFyZ3M6CiAgICBwY29sbDogSW5wdXQgcGNvbGxlY3Rpb24uIEFsbCBlbGVtZW50cyBzaG91bGQgYmUga2V5LXZhbHVlIHBhaXJzIChpLmUuCiAgICAgICAyLXR1cGxlcykgd2l0aCB1bmlxdWUga2V5cy4KCiAgUmV0dXJuczoKICAgIEFuIEFzRGljdC13cmFwcGVyIGFyb3VuZCBhIFBDb2xsZWN0aW9uIHdob3NlIG9uZSBlbGVtZW50IGlzIGEgZGljdCB3aXRoCiAgICAgIGVudHJpZXMgZm9yIHVuaXF1ZWx5LWtleWVkIHBhaXJzIGluIHBjb2xsLgogICIiIgoKICBAc3RhdGljbWV0aG9kCiAgZGVmIF9mcm9tX3J1bnRpbWVfaXRlcmFibGUoaXQsIG9wdGlvbnMpOgogICAgcmV0dXJuIGRpY3QoaXQpCgogIGRlZiBfc2lkZV9pbnB1dF9kYXRhKHNlbGYpOgogICAgcmV0dXJuIFNpZGVJbnB1dERhdGEoCiAgICAgICAgY29tbW9uX3VybnMuc2lkZV9pbnB1dHMuSVRFUkFCTEUudXJuLAogICAgICAgIHNlbGYuX3dpbmRvd19tYXBwaW5nX2ZuLAogICAgICAgIGRpY3QpCgoKY2xhc3MgQXNNdWx0aU1hcChBc1NpZGVJbnB1dCk6CiAgIiIiTWFya2VyIHNwZWNpZnlpbmcgYSBQQ29sbGVjdGlvbiB0byBiZSB1c2VkIGFzIGFuIGluZGV4YWJsZSBzaWRlIGlucHV0LgoKICBTaW1pbGFyIHRvIEFzRGljdCwgYnV0IG11bHRpcGxlIHZhbHVlcyBtYXkgYmUgYXNzb2NpYXRlZCBwZXIga2V5LCBhbmQKICB0aGUga2V5cyBhcmUgZmV0Y2hlZCBsYXppbHkgcmF0aGVyIHRoYW4gYWxsIGhhdmluZyB0byBmaXQgaW4gbWVtb3J5LgoKICBJbnRlbmRlZCBmb3IgdXNlIGluIHNpZGUtYXJndW1lbnQgc3BlY2lmaWNhdGlvbi0tLXRoZSBzYW1lIHBsYWNlcyB3aGVyZQogIEFzU2luZ2xldG9uIGFuZCBBc0l0ZXIgYXJlIHVzZWQsIGJ1dCByZXR1cm5zIGFuIGludGVyZmFjZSB0aGF0IGFsbG93cwogIGtleSBsb29rdXAuCiAgIiIiCgogIEBzdGF0aWNtZXRob2QKICBkZWYgX2Zyb21fcnVudGltZV9pdGVyYWJsZShpdCwgb3B0aW9ucyk6CiAgICAjIExlZ2FjeSBpbXBsZW1lbnRhdGlvbi4KICAgIHJlc3VsdCA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGxpc3QpCiAgICBmb3IgaywgdiBpbiBpdDoKICAgICAgcmVzdWx0W2tdLmFwcGVuZCh2KQogICAgcmV0dXJuIHJlc3VsdAoKICBkZWYgX3NpZGVfaW5wdXRfZGF0YShzZWxmKToKICAgIHJldHVybiBTaWRlSW5wdXREYXRhKAogICAgICAgIGNvbW1vbl91cm5zLnNpZGVfaW5wdXRzLk1VTFRJTUFQLnVybiwKICAgICAgICBzZWxmLl93aW5kb3dfbWFwcGluZ19mbiwKICAgICAgICBsYW1iZGEgeDogeCkKCgpjbGFzcyBFbXB0eVNpZGVJbnB1dChvYmplY3QpOgogICIiIlZhbHVlIGluZGljYXRpbmcgd2hlbiBhIHNpbmdsZXRvbiBzaWRlIGlucHV0IHdhcyBlbXB0eS4KCiAgSWYgYSBQQ29sbGVjdGlvbiB3YXMgZnVybmlzaGVkIGFzIGEgc2luZ2xldG9uIHNpZGUgaW5wdXQgdG8gYSBQVHJhbnNmb3JtLCBhbmQKICB0aGF0IFBDb2xsZWN0aW9uIHdhcyBlbXB0eSwgdGhlbiB0aGlzIHZhbHVlIGlzIHN1cHBsaWVkIHRvIHRoZSBEb0ZuIGluIHRoZQogIHBsYWNlIHdoZXJlIGEgdmFsdWUgZnJvbSBhIG5vbi1lbXB0eSBQQ29sbGVjdGlvbiB3b3VsZCBoYXZlIGdvbmUuIFRoaXMgYWxlcnRzCiAgdGhlIERvRm4gdGhhdCB0aGUgc2lkZSBpbnB1dCBQQ29sbGVjdGlvbiB3YXMgZW1wdHkuIFVzZXJzIG1heSB3YW50IHRvIGNoZWNrCiAgd2hldGhlciBzaWRlIGlucHV0IHZhbHVlcyBhcmUgRW1wdHlTaWRlSW5wdXQsIGJ1dCB0aGV5IHdpbGwgdmVyeSBsaWtlbHkgbmV2ZXIKICB3YW50IHRvIGNyZWF0ZSBuZXcgaW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgdGhlbXNlbHZlcy4KICAiIiIKICBwYXNzCn1yTIMAAChYCwAAAEFzU2luZ2xldG9uWAUAAABjbGFzc02CAU2wAYdYFwAAAEFzSXRlci5fc2lkZV9pbnB1dF9kYXRhWAMAAABkZWZNxwFNzAGHWAoAAABBc011bHRpTWFwWAUAAABjbGFzc00HAk0fAodYDgAAAEVtcHR5U2lkZUlucHV0WAUAAABjbGFzc00hAk0sAodYHQAAAEFzSXRlci5fZnJvbV9ydW50aW1lX2l0ZXJhYmxlWAMAAABkZWZNwwFNxgGHWCoAAABfVW5waWNrbGVkU2lkZUlucHV0Ll9mcm9tX3J1bnRpbWVfaXRlcmFibGVYAwAAAGRlZk1SAU1VAYdYDQAAAFBWYWx1ZS5fX29yX19YAwAAAGRlZktvS3GHWBwAAABEb091dHB1dHNUdXBsZS5fc3RyX2ludGVybmFsWAMAAABkZWZLz0vSh1gTAAAAQXNJdGVyLmVsZW1lbnRfdHlwZVgDAAAAZGVmTc0BTdABh1gSAAAAUENvbGxlY3Rpb24uX19uZV9fWAMAAABkZWZLfkuBh1gUAAAAUFZhbHVlLl9zdHJfaW50ZXJuYWxYAwAAAGRlZktbS1+HWBcAAABEb091dHB1dHNUdXBsZS5fX2l0ZXJfX1gDAAAAZGVmS9NL2YdYBQAAAFBEb25lWAUAAABjbGFzc0u0S7iHWAYAAABQVmFsdWVYBQAAAGNsYXNzSzdLcYdYGgAAAERvT3V0cHV0c1R1cGxlLl9fZ2V0aXRlbV9fWAMAAABkZWZL4U0DAYdYIAAAAEFzU2lkZUlucHV0Ll9pbnB1dF9lbGVtZW50X2NvZGVyWAMAAABkZWZNPwFNQwGHWBMAAABfVW5waWNrbGVkU2lkZUlucHV0WAUAAABjbGFzc01NAU1fAYdYGQAAAFBDb2xsZWN0aW9uLl9fcmVkdWNlX2V4X19YAwAAAGRlZkuMS5GHWAYAAABBc0RpY3RYBQAAAGNsYXNzTewBTQUCh1gcAAAAX1VucGlja2xlZFNpZGVJbnB1dC5fX2luaXRfX1gDAAAAZGVmTU4BTVEBh1gcAAAAX0ludmFsaWRVbnBpY2tsZWRQQ29sbGVjdGlvblgFAAAAY2xhc3NLpkuoh1gYAAAAQXNTaW5nbGV0b24uZWxlbWVudF90eXBlWAMAAABkZWZNrQFNsAGHWBUAAABUYWdnZWRPdXRwdXQuX19pbml0X19YAwAAAGRlZk0OAU0UAYdYGQAAAEFzU2lkZUlucHV0Ll92aWV3X29wdGlvbnNYAwAAAGRlZk0nAU0wAYdYHAAAAEFzU2lkZUlucHV0Ll9zaWRlX2lucHV0X2RhdGFYAwAAAGRlZk03AU0+AYdYDgAAAFBWYWx1ZS5fX3N0cl9fWAMAAABkZWZLVUtXh1ghAAAAQXNNdWx0aU1hcC5fZnJvbV9ydW50aW1lX2l0ZXJhYmxlWAMAAABkZWZNEgJNGQKHWAYAAABBc0l0ZXJYBQAAAGNsYXNzTbIBTdABh1gWAAAARG9PdXRwdXRzVHVwbGUuX19zdHJfX1gDAAAAZGVmS8lLy4dYGwAAAEFzU2lkZUlucHV0LmZyb21fcnVubmVyX2FwaVgDAAAAZGVmTUcBTUsBh1gXAAAARG9PdXRwdXRzVHVwbGUuX19yZXByX19YAwAAAGRlZkvMS86HWBgAAABBc1NpZGVJbnB1dC5lbGVtZW50X3R5cGVYAwAAAGRlZk0xAU00AYdYFwAAAEFzTGlzdC5fc2lkZV9pbnB1dF9kYXRhWAMAAABkZWZN5QFN6gGHWA8AAABQVmFsdWUuX19yZXByX19YAwAAAGRlZktYS1qHWBcAAABEb091dHB1dHNUdXBsZS5fX2luaXRfX1gDAAAAZGVmS71LyIdYJAAAAF9VbnBpY2tsZWRTaWRlSW5wdXQuX3NpZGVfaW5wdXRfZGF0YVgDAAAAZGVmTV0BTV8Bh1gbAAAAU2lkZUlucHV0RGF0YS50b19ydW5uZXJfYXBpWAMAAABkZWZNaAFNdgGHWA8AAABBc0l0ZXIuX19yZXByX19YAwAAAGRlZk3AAU3CAYdYFAAAAFBDb2xsZWN0aW9uLl9faGFzaF9fWAMAAABkZWZLgkuEh1gGAAAAQXNMaXN0WAUAAABjbGFzc03SAU3qAYdYHQAAAFNpZGVJbnB1dERhdGEuZnJvbV9ydW5uZXJfYXBpWAMAAABkZWZNdwFNgAGHWBYAAABTaWRlSW5wdXREYXRhLl9faW5pdF9fWAMAAABkZWZNYwFNZwGHWB0AAABBc0xpc3QuX2Zyb21fcnVudGltZV9pdGVyYWJsZVgDAAAAZGVmTeEBTeQBh1gUAAAAQXNTaWRlSW5wdXQuX19pbml0X19YAwAAAGRlZk0hAU0mAYdYIgAAAEFzU2luZ2xldG9uLl9mcm9tX3J1bnRpbWVfaXRlcmFibGVYAwAAAGRlZk2hAU2sAYdYFQAAAFBDb2xsZWN0aW9uLndpbmRvd2luZ1gDAAAAZGVmS4VLi4dYHQAAAEFzRGljdC5fZnJvbV9ydW50aW1lX2l0ZXJhYmxlWAMAAABkZWZN/AFN/wGHWAwAAABUYWdnZWRPdXRwdXRYBQAAAGNsYXNzTQUBTRQBh1gGAAAAUEJlZ2luWAUAAABjbGFzc0uqS7KHWBIAAABQQ29sbGVjdGlvbi5fX2VxX19YAwAAAGRlZkt6S32HWBkAAABBc1NpZGVJbnB1dC50b19ydW5uZXJfYXBpWAMAAABkZWZNRAFNRgGHWA4AAABEb091dHB1dHNUdXBsZVgFAAAAY2xhc3NLuk0DAYdYDQAAAFNpZGVJbnB1dERhdGFYBQAAAGNsYXNzTWEBTYABh1gbAAAAUENvbGxlY3Rpb24uZnJvbV9ydW5uZXJfYXBpWAMAAABkZWZLm0ukh1gZAAAAUENvbGxlY3Rpb24udG9fcnVubmVyX2FwaVgDAAAAZGVmS5JLmodYGQAAAEFzU2luZ2xldG9uLl92aWV3X29wdGlvbnNYAwAAAGRlZk2bAU2gAYdYGwAAAEFzTXVsdGlNYXAuX3NpZGVfaW5wdXRfZGF0YVgDAAAAZGVmTRoCTR8Ch1gLAAAAQXNTaWRlSW5wdXRYBQAAAGNsYXNzTRYBTUsBh1gUAAAAQXNTaW5nbGV0b24uX19yZXByX19YAwAAAGRlZk2YAU2aAYdYFwAAAEFzRGljdC5fc2lkZV9pbnB1dF9kYXRhWAMAAABkZWZNAAJNBQKHWAsAAABQQ29sbGVjdGlvblgFAAAAY2xhc3NLc0ukh1gUAAAAQXNTaW5nbGV0b24uX19pbml0X19YAwAAAGRlZk2UAU2XAYdYDAAAAFBWYWx1ZS5hcHBseVgDAAAAZGVmS2BLbodYGgAAAERvT3V0cHV0c1R1cGxlLl9fZ2V0YXR0cl9fWAMAAABkZWZL2kvgh1gPAAAAUFZhbHVlLl9faW5pdF9fWAMAAABkZWZLQ0tUh1ghAAAAX1VucGlja2xlZFNpZGVJbnB1dC5fdmlld19vcHRpb25zWAMAAABkZWZNVgFNXAGHdX1yTYMAAChYCwAAAEFzU2luZ2xldG9uWBIAAABhcGFjaGVfYmVhbS5wdmFsdWVyToMAAFgOAAAARW1wdHlTaWRlSW5wdXRqToMAAFgbAAAAUENvbGxlY3Rpb24uZnJvbV9ydW5uZXJfYXBpak6DAABYGQAAAFBDb2xsZWN0aW9uLnRvX3J1bm5lcl9hcGlqToMAAFgGAAAAQXNMaXN0ak6DAABYBgAAAEFzSXRlcmpOgwAAWAsAAABQQ29sbGVjdGlvbmpOgwAAWAYAAABBc0RpY3RqToMAAFgMAAAAVGFnZ2VkT3V0cHV0ak6DAAB1an1pAABYEgAAAGFwYWNoZV9iZWFtLnB2YWx1ZXJPgwAAhYFyUIMAAH1yUYMAAGJ0clKDAABVHWFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzKFgVNwAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJpb2Jhc2UuUmFuZ2VUcmFja2VyIGltcGxlbWVudGF0aW9ucyBwcm92aWRlZCB3aXRoIEFwYWNoZSBCZWFtLgoiIiIKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgoKaW1wb3J0IGNvZGVjcwppbXBvcnQgbG9nZ2luZwppbXBvcnQgbWF0aAppbXBvcnQgdGhyZWFkaW5nCmZyb20gYnVpbHRpbnMgaW1wb3J0IHppcAoKZnJvbSBwYXN0LmJ1aWx0aW5zIGltcG9ydCBsb25nCgpmcm9tIGFwYWNoZV9iZWFtLmlvIGltcG9ydCBpb2Jhc2UKCl9fYWxsX18gPSBbJ09mZnNldFJhbmdlVHJhY2tlcicsICdMZXhpY29ncmFwaGljS2V5UmFuZ2VUcmFja2VyJywKICAgICAgICAgICAnT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyJywgJ1Vuc3BsaXR0YWJsZVJhbmdlVHJhY2tlciddCgoKY2xhc3MgT2Zmc2V0UmFuZ2VUcmFja2VyKGlvYmFzZS5SYW5nZVRyYWNrZXIpOgogICIiIkEgJ1JhbmdlVHJhY2tlcicgZm9yIG5vbi1uZWdhdGl2ZSBwb3NpdGlvbnMgb2YgdHlwZSAnbG9uZycuIiIiCgogICMgT2Zmc2V0IGNvcnJlc3BvbmRpbmcgdG8gaW5maW5pdHkuIFRoaXMgY2FuIG9ubHkgYmUgdXNlZCBhcyB0aGUgdXBwZXItYm91bmQKICAjIG9mIGEgcmFuZ2UsIGFuZCBpbmRpY2F0ZXMgcmVhZGluZyBhbGwgb2YgdGhlIHJlY29yZHMgdW50aWwgdGhlIGVuZCB3aXRob3V0CiAgIyBzcGVjaWZ5aW5nIGV4YWN0bHkgd2hhdCB0aGUgZW5kIGlzLgogICMgSW5maW5pdGUgcmFuZ2VzIGNhbm5vdCBiZSBzcGxpdCBiZWNhdXNlIGl0IGlzIGltcG9zc2libGUgdG8gZXN0aW1hdGUKICAjIHByb2dyZXNzIHdpdGhpbiB0aGVtLgogIE9GRlNFVF9JTkZJTklUWSA9IGZsb2F0KCdpbmYnKQoKICBkZWYgX19pbml0X18oc2VsZiwgc3RhcnQsIGVuZCk6CiAgICBzdXBlcihPZmZzZXRSYW5nZVRyYWNrZXIsIHNlbGYpLl9faW5pdF9fKCkKCiAgICBpZiBzdGFydCBpcyBOb25lOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdTdGFydCBvZmZzZXQgbXVzdCBub3QgYmUgXCdOb25lXCcnKQogICAgaWYgZW5kIGlzIE5vbmU6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0VuZCBvZmZzZXQgbXVzdCBub3QgYmUgXCdOb25lXCcnKQogICAgYXNzZXJ0IGlzaW5zdGFuY2Uoc3RhcnQsIChpbnQsIGxvbmcpKQogICAgaWYgZW5kICE9IHNlbGYuT0ZGU0VUX0lORklOSVRZOgogICAgICBhc3NlcnQgaXNpbnN0YW5jZShlbmQsIChpbnQsIGxvbmcpKQoKICAgIGFzc2VydCBzdGFydCA8PSBlbmQKCiAgICBzZWxmLl9zdGFydF9vZmZzZXQgPSBzdGFydAogICAgc2VsZi5fc3RvcF9vZmZzZXQgPSBlbmQKCiAgICBzZWxmLl9sYXN0X3JlY29yZF9zdGFydCA9IC0xCiAgICBzZWxmLl9vZmZzZXRfb2ZfbGFzdF9zcGxpdF9wb2ludCA9IC0xCiAgICBzZWxmLl9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQoKICAgIHNlbGYuX3NwbGl0X3BvaW50c19zZWVuID0gMAogICAgc2VsZi5fc3BsaXRfcG9pbnRzX3VuY2xhaW1lZF9jYWxsYmFjayA9IE5vbmUKCiAgZGVmIHN0YXJ0X3Bvc2l0aW9uKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX3N0YXJ0X29mZnNldAoKICBkZWYgc3RvcF9wb3NpdGlvbihzZWxmKToKICAgIHJldHVybiBzZWxmLl9zdG9wX29mZnNldAoKICBAcHJvcGVydHkKICBkZWYgbGFzdF9yZWNvcmRfc3RhcnQoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fbGFzdF9yZWNvcmRfc3RhcnQKCiAgZGVmIF92YWxpZGF0ZV9yZWNvcmRfc3RhcnQoc2VsZiwgcmVjb3JkX3N0YXJ0LCBzcGxpdF9wb2ludCk6CiAgICAjIFRoaXMgZnVuY3Rpb24gbXVzdCBvbmx5IGJlIGNhbGxlZCB1bmRlciB0aGUgbG9jayBzZWxmLmxvY2suCiAgICBpZiBub3Qgc2VsZi5fbG9jay5sb2NrZWQoKToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICdUaGlzIGZ1bmN0aW9uIG11c3Qgb25seSBiZSBjYWxsZWQgdW5kZXIgdGhlIGxvY2sgc2VsZi5sb2NrLicpCgogICAgaWYgcmVjb3JkX3N0YXJ0IDwgc2VsZi5fbGFzdF9yZWNvcmRfc3RhcnQ6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnVHJ5aW5nIHRvIHJldHVybiBhIHJlY29yZCBbc3RhcnRpbmcgYXQgJWRdIHdoaWNoIGlzIGJlZm9yZSB0aGUgJwogICAgICAgICAgJ2xhc3QtcmV0dXJuZWQgcmVjb3JkIFtzdGFydGluZyBhdCAlZF0nICUKICAgICAgICAgIChyZWNvcmRfc3RhcnQsIHNlbGYuX2xhc3RfcmVjb3JkX3N0YXJ0KSkKCiAgICBpZiAoc3BsaXRfcG9pbnQgYW5kIHNlbGYuX29mZnNldF9vZl9sYXN0X3NwbGl0X3BvaW50ICE9IC0xIGFuZAogICAgICAgIHJlY29yZF9zdGFydCA9PSBzZWxmLl9vZmZzZXRfb2ZfbGFzdF9zcGxpdF9wb2ludCk6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnUmVjb3JkIGF0IGEgc3BsaXQgcG9pbnQgaGFzIHNhbWUgb2Zmc2V0IGFzIHRoZSBwcmV2aW91cyBzcGxpdCAnCiAgICAgICAgICAncG9pbnQ6ICVkJyAlIHJlY29yZF9zdGFydCkKCiAgICBpZiBub3Qgc3BsaXRfcG9pbnQgYW5kIHNlbGYuX2xhc3RfcmVjb3JkX3N0YXJ0ID09IC0xOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgJ1RoZSBmaXJzdCByZWNvcmQgW3N0YXJ0aW5nIGF0ICVkXSBtdXN0IGJlIGF0IGEgc3BsaXQgcG9pbnQnICUKICAgICAgICAgIHJlY29yZF9zdGFydCkKCiAgZGVmIHRyeV9jbGFpbShzZWxmLCByZWNvcmRfc3RhcnQpOgogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICBzZWxmLl92YWxpZGF0ZV9yZWNvcmRfc3RhcnQocmVjb3JkX3N0YXJ0LCBUcnVlKQogICAgICBpZiByZWNvcmRfc3RhcnQgPj0gc2VsZi5zdG9wX3Bvc2l0aW9uKCk6CiAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgIHNlbGYuX29mZnNldF9vZl9sYXN0X3NwbGl0X3BvaW50ID0gcmVjb3JkX3N0YXJ0CiAgICAgIHNlbGYuX2xhc3RfcmVjb3JkX3N0YXJ0ID0gcmVjb3JkX3N0YXJ0CiAgICAgIHNlbGYuX3NwbGl0X3BvaW50c19zZWVuICs9IDEKICAgICAgcmV0dXJuIFRydWUKCiAgZGVmIHNldF9jdXJyZW50X3Bvc2l0aW9uKHNlbGYsIHJlY29yZF9zdGFydCk6CiAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgIHNlbGYuX3ZhbGlkYXRlX3JlY29yZF9zdGFydChyZWNvcmRfc3RhcnQsIEZhbHNlKQogICAgICBzZWxmLl9sYXN0X3JlY29yZF9zdGFydCA9IHJlY29yZF9zdGFydAoKICBkZWYgdHJ5X3NwbGl0KHNlbGYsIHNwbGl0X29mZnNldCk6CiAgICBhc3NlcnQgaXNpbnN0YW5jZShzcGxpdF9vZmZzZXQsIChpbnQsIGxvbmcpKQogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICBpZiBzZWxmLl9zdG9wX29mZnNldCA9PSBPZmZzZXRSYW5nZVRyYWNrZXIuT0ZGU0VUX0lORklOSVRZOgogICAgICAgIGxvZ2dpbmcuZGVidWcoJ3JlZnVzaW5nIHRvIHNwbGl0ICVyIGF0ICVkOiBzdG9wIHBvc2l0aW9uIHVuc3BlY2lmaWVkJywKICAgICAgICAgICAgICAgICAgICAgIHNlbGYsIHNwbGl0X29mZnNldCkKICAgICAgICByZXR1cm4KICAgICAgaWYgc2VsZi5fbGFzdF9yZWNvcmRfc3RhcnQgPT0gLTE6CiAgICAgICAgbG9nZ2luZy5kZWJ1ZygnUmVmdXNpbmcgdG8gc3BsaXQgJXIgYXQgJWQ6IHVuc3RhcnRlZCcsIHNlbGYsCiAgICAgICAgICAgICAgICAgICAgICBzcGxpdF9vZmZzZXQpCiAgICAgICAgcmV0dXJuCgogICAgICBpZiBzcGxpdF9vZmZzZXQgPD0gc2VsZi5fbGFzdF9yZWNvcmRfc3RhcnQ6CiAgICAgICAgbG9nZ2luZy5kZWJ1ZygKICAgICAgICAgICAgJ1JlZnVzaW5nIHRvIHNwbGl0ICVyIGF0ICVkOiBhbHJlYWR5IHBhc3QgcHJvcG9zZWQgc3RvcCBvZmZzZXQnLAogICAgICAgICAgICBzZWxmLCBzcGxpdF9vZmZzZXQpCiAgICAgICAgcmV0dXJuCiAgICAgIGlmIChzcGxpdF9vZmZzZXQgPCBzZWxmLnN0YXJ0X3Bvc2l0aW9uKCkKICAgICAgICAgIG9yIHNwbGl0X29mZnNldCA+PSBzZWxmLnN0b3BfcG9zaXRpb24oKSk6CiAgICAgICAgbG9nZ2luZy5kZWJ1ZygKICAgICAgICAgICAgJ1JlZnVzaW5nIHRvIHNwbGl0ICVyIGF0ICVkOiBwcm9wb3NlZCBzcGxpdCBwb3NpdGlvbiBvdXQgb2YgcmFuZ2UnLAogICAgICAgICAgICBzZWxmLCBzcGxpdF9vZmZzZXQpCiAgICAgICAgcmV0dXJuCgogICAgICBsb2dnaW5nLmRlYnVnKCdBZ3JlZWluZyB0byBzcGxpdCAlciBhdCAlZCcsIHNlbGYsIHNwbGl0X29mZnNldCkKCiAgICAgIHNwbGl0X2ZyYWN0aW9uID0gKGZsb2F0KHNwbGl0X29mZnNldCAtIHNlbGYuX3N0YXJ0X29mZnNldCkgLyAoCiAgICAgICAgICBzZWxmLl9zdG9wX29mZnNldCAtIHNlbGYuX3N0YXJ0X29mZnNldCkpCiAgICAgIHNlbGYuX3N0b3Bfb2Zmc2V0ID0gc3BsaXRfb2Zmc2V0CgogICAgICByZXR1cm4gc2VsZi5fc3RvcF9vZmZzZXQsIHNwbGl0X2ZyYWN0aW9uCgogIGRlZiBmcmFjdGlvbl9jb25zdW1lZChzZWxmKToKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgZnJhY3Rpb24gPSAoKDEuMCAqIChzZWxmLl9sYXN0X3JlY29yZF9zdGFydCAtIHNlbGYuc3RhcnRfcG9zaXRpb24oKSkgLwogICAgICAgICAgICAgICAgICAgKHNlbGYuc3RvcF9wb3NpdGlvbigpIC0gc2VsZi5zdGFydF9wb3NpdGlvbigpKSkgaWYKICAgICAgICAgICAgICAgICAgc2VsZi5zdG9wX3Bvc2l0aW9uKCkgIT0gc2VsZi5zdGFydF9wb3NpdGlvbigpIGVsc2UgMC4wKQoKICAgICAgIyBzZWxmLmxhc3RfcmVjb3JkX3N0YXJ0IG1heSBiZWNvbWUgbGFyZ2VyIHRoYW4gc2VsZi5lbmRfb2Zmc2V0IHdoZW4KICAgICAgIyByZWFkaW5nIHRoZSByZWNvcmRzIHNpbmNlIGFueSByZWNvcmQgdGhhdCBzdGFydHMgYmVmb3JlIHRoZSBmaXJzdCAnc3BsaXQKICAgICAgIyBwb2ludCcgYXQgb3IgYWZ0ZXIgdGhlIGRlZmluZWQgJ3N0b3Agb2Zmc2V0JyBpcyBjb25zaWRlcmVkIHRvIGJlIHdpdGhpbgogICAgICAjIHRoZSByYW5nZSBvZiB0aGUgT2Zmc2V0UmFuZ2VUcmFja2VyLiBIZW5jZSBmcmFjdGlvbiBjb3VsZCBiZSA+IDEuCiAgICAgICMgc2VsZi5sYXN0X3JlY29yZF9zdGFydCBpcyBpbml0aWFsaXplZCB0byAtMSwgaGVuY2UgZnJhY3Rpb24gbWF5IGJlIDwgMC4KICAgICAgIyBCb3VuZGluZyB0aGUgdG8gcmFuZ2UgWzAsIDFdLgogICAgICByZXR1cm4gbWF4KDAuMCwgbWluKDEuMCwgZnJhY3Rpb24pKQoKICBkZWYgcG9zaXRpb25fYXRfZnJhY3Rpb24oc2VsZiwgZnJhY3Rpb24pOgogICAgaWYgc2VsZi5zdG9wX3Bvc2l0aW9uKCkgPT0gT2Zmc2V0UmFuZ2VUcmFja2VyLk9GRlNFVF9JTkZJTklUWToKICAgICAgcmFpc2UgRXhjZXB0aW9uKAogICAgICAgICAgJ2dldF9wb3NpdGlvbl9mb3JfZnJhY3Rpb25fY29uc3VtZWQgaXMgbm90IGFwcGxpY2FibGUgZm9yIGFuICcKICAgICAgICAgICd1bmJvdW5kZWQgcmFuZ2UnKQogICAgcmV0dXJuIGludChtYXRoLmNlaWwoc2VsZi5zdGFydF9wb3NpdGlvbigpICsgZnJhY3Rpb24gKiAoCiAgICAgICAgc2VsZi5zdG9wX3Bvc2l0aW9uKCkgLSBzZWxmLnN0YXJ0X3Bvc2l0aW9uKCkpKSkKCiAgZGVmIHNwbGl0X3BvaW50cyhzZWxmKToKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgc3BsaXRfcG9pbnRzX2NvbnN1bWVkID0gKAogICAgICAgICAgMCBpZiBzZWxmLl9zcGxpdF9wb2ludHNfc2VlbiA9PSAwIGVsc2Ugc2VsZi5fc3BsaXRfcG9pbnRzX3NlZW4gLSAxKQogICAgICBzcGxpdF9wb2ludHNfdW5jbGFpbWVkID0gKAogICAgICAgICAgc2VsZi5fc3BsaXRfcG9pbnRzX3VuY2xhaW1lZF9jYWxsYmFjayhzZWxmLnN0b3BfcG9zaXRpb24oKSkKICAgICAgICAgIGlmIHNlbGYuX3NwbGl0X3BvaW50c191bmNsYWltZWRfY2FsbGJhY2sKICAgICAgICAgIGVsc2UgaW9iYXNlLlJhbmdlVHJhY2tlci5TUExJVF9QT0lOVFNfVU5LTk9XTikKICAgICAgc3BsaXRfcG9pbnRzX3JlbWFpbmluZyA9ICgKICAgICAgICAgIGlvYmFzZS5SYW5nZVRyYWNrZXIuU1BMSVRfUE9JTlRTX1VOS05PV04gaWYKICAgICAgICAgIHNwbGl0X3BvaW50c191bmNsYWltZWQgPT0gaW9iYXNlLlJhbmdlVHJhY2tlci5TUExJVF9QT0lOVFNfVU5LTk9XTgogICAgICAgICAgZWxzZSAoc3BsaXRfcG9pbnRzX3VuY2xhaW1lZCArIDEpKQoKICAgICAgcmV0dXJuIChzcGxpdF9wb2ludHNfY29uc3VtZWQsIHNwbGl0X3BvaW50c19yZW1haW5pbmcpCgogIGRlZiBzZXRfc3BsaXRfcG9pbnRzX3VuY2xhaW1lZF9jYWxsYmFjayhzZWxmLCBjYWxsYmFjayk6CiAgICBzZWxmLl9zcGxpdF9wb2ludHNfdW5jbGFpbWVkX2NhbGxiYWNrID0gY2FsbGJhY2sKCgpjbGFzcyBPcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXIoaW9iYXNlLlJhbmdlVHJhY2tlcik6CiAgIiIiCiAgQW4gYWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgcmFuZ2UgdHJhY2tlcnMgd2hvc2UgcG9zaXRpb25zIGFyZSBjb21wYXJhYmxlLgoKICBTdWJjbGFzc2VzIG9ubHkgbmVlZCB0byBpbXBsZW1lbnQgdGhlIG1hcHBpbmcgZnJvbSBwb3NpdGlvbiByYW5nZXMKICB0byBhbmQgZnJvbSB0aGUgY2xvc2VkIGludGVydmFsIFswLCAxXS4KICAiIiIKCiAgVU5TVEFSVEVEID0gb2JqZWN0KCkKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YXJ0X3Bvc2l0aW9uPU5vbmUsIHN0b3BfcG9zaXRpb249Tm9uZSk6CiAgICBzZWxmLl9zdGFydF9wb3NpdGlvbiA9IHN0YXJ0X3Bvc2l0aW9uCiAgICBzZWxmLl9zdG9wX3Bvc2l0aW9uID0gc3RvcF9wb3NpdGlvbgogICAgc2VsZi5fbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKICAgIHNlbGYuX2xhc3RfY2xhaW0gPSBzZWxmLlVOU1RBUlRFRAoKICBkZWYgc3RhcnRfcG9zaXRpb24oc2VsZik6CiAgICByZXR1cm4gc2VsZi5fc3RhcnRfcG9zaXRpb24KCiAgZGVmIHN0b3BfcG9zaXRpb24oc2VsZik6CiAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgIHJldHVybiBzZWxmLl9zdG9wX3Bvc2l0aW9uCgogIGRlZiB0cnlfY2xhaW0oc2VsZiwgcG9zaXRpb24pOgogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICBpZiBzZWxmLl9sYXN0X2NsYWltIGlzIG5vdCBzZWxmLlVOU1RBUlRFRCBhbmQgcG9zaXRpb24gPCBzZWxmLl9sYXN0X2NsYWltOgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAgICJQb3NpdGlvbnMgbXVzdCBiZSBjbGFpbWVkIGluIG9yZGVyOiAiCiAgICAgICAgICAgICJjbGFpbSAnJXMnIGF0dGVtcHRlZCBhZnRlciBjbGFpbSAnJXMnIiAlICgKICAgICAgICAgICAgICAgIHBvc2l0aW9uLCBzZWxmLl9sYXN0X2NsYWltKSkKICAgICAgZWxpZiBzZWxmLl9zdGFydF9wb3NpdGlvbiBpcyBub3QgTm9uZSBhbmQgcG9zaXRpb24gPCBzZWxmLl9zdGFydF9wb3NpdGlvbjoKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDbGFpbSAnJXMnIGlzIGJlZm9yZSBzdGFydCAnJXMnIiAlICgKICAgICAgICAgICAgcG9zaXRpb24sIHNlbGYuX3N0YXJ0X3Bvc2l0aW9uKSkKICAgICAgaWYgc2VsZi5fc3RvcF9wb3NpdGlvbiBpcyBOb25lIG9yIHBvc2l0aW9uIDwgc2VsZi5fc3RvcF9wb3NpdGlvbjoKICAgICAgICBzZWxmLl9sYXN0X2NsYWltID0gcG9zaXRpb24KICAgICAgICByZXR1cm4gVHJ1ZQogICAgICBlbHNlOgogICAgICAgIHJldHVybiBGYWxzZQoKICBkZWYgcG9zaXRpb25fYXRfZnJhY3Rpb24oc2VsZiwgZnJhY3Rpb24pOgogICAgcmV0dXJuIHNlbGYuZnJhY3Rpb25fdG9fcG9zaXRpb24oCiAgICAgICAgZnJhY3Rpb24sIHNlbGYuX3N0YXJ0X3Bvc2l0aW9uLCBzZWxmLl9zdG9wX3Bvc2l0aW9uKQoKICBkZWYgdHJ5X3NwbGl0KHNlbGYsIHBvc2l0aW9uKToKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgaWYgKChzZWxmLl9zdG9wX3Bvc2l0aW9uIGlzIG5vdCBOb25lIGFuZCBwb3NpdGlvbiA+PSBzZWxmLl9zdG9wX3Bvc2l0aW9uKQogICAgICAgICAgb3IgKHNlbGYuX3N0YXJ0X3Bvc2l0aW9uIGlzIG5vdCBOb25lCiAgICAgICAgICAgICAgYW5kIHBvc2l0aW9uIDw9IHNlbGYuX3N0YXJ0X3Bvc2l0aW9uKSk6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiU3BsaXQgYXQgJyVzJyBub3QgaW4gcmFuZ2UgJXMiICUgKAogICAgICAgICAgICBwb3NpdGlvbiwgW3NlbGYuX3N0YXJ0X3Bvc2l0aW9uLCBzZWxmLl9zdG9wX3Bvc2l0aW9uXSkpCiAgICAgIGlmIHNlbGYuX2xhc3RfY2xhaW0gaXMgc2VsZi5VTlNUQVJURUQgb3Igc2VsZi5fbGFzdF9jbGFpbSA8IHBvc2l0aW9uOgogICAgICAgIGZyYWN0aW9uID0gc2VsZi5wb3NpdGlvbl90b19mcmFjdGlvbigKICAgICAgICAgICAgcG9zaXRpb24sIHN0YXJ0PXNlbGYuX3N0YXJ0X3Bvc2l0aW9uLCBlbmQ9c2VsZi5fc3RvcF9wb3NpdGlvbikKICAgICAgICBzZWxmLl9zdG9wX3Bvc2l0aW9uID0gcG9zaXRpb24KICAgICAgICByZXR1cm4gcG9zaXRpb24sIGZyYWN0aW9uCiAgICAgIGVsc2U6CiAgICAgICAgcmV0dXJuIE5vbmUKCiAgZGVmIGZyYWN0aW9uX2NvbnN1bWVkKHNlbGYpOgogICAgaWYgc2VsZi5fbGFzdF9jbGFpbSBpcyBzZWxmLlVOU1RBUlRFRDoKICAgICAgcmV0dXJuIDAKICAgIGVsc2U6CiAgICAgIHJldHVybiBzZWxmLnBvc2l0aW9uX3RvX2ZyYWN0aW9uKAogICAgICAgICAgc2VsZi5fbGFzdF9jbGFpbSwgc2VsZi5fc3RhcnRfcG9zaXRpb24sIHNlbGYuX3N0b3BfcG9zaXRpb24pCgogIGRlZiBwb3NpdGlvbl90b19mcmFjdGlvbihzZWxmLCBwb3MsIHN0YXJ0LCBlbmQpOgogICAgIiIiCiAgICBDb252ZXJ0cyBhIHBvc2l0aW9uIGBwb3NgIGJldHdlZWVuIGBzdGFydGAgYW5kIGBlbmRgIChpbmNsdXNpdmUpIHRvIGEKICAgIGZyYWN0aW9uIGJldHdlZW4gMCBhbmQgMS4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgZnJhY3Rpb25fdG9fcG9zaXRpb24oc2VsZiwgZnJhY3Rpb24sIHN0YXJ0LCBlbmQpOgogICAgIiIiCiAgICBDb252ZXJ0cyBhIGZyYWN0aW9uIGJldHdlZW4gMCBhbmQgMSB0byBhIHBvc2l0aW9uIGJldHdlZW4gc3RhcnQgYW5kIGVuZC4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKCmNsYXNzIFVuc3BsaXR0YWJsZVJhbmdlVHJhY2tlcihpb2Jhc2UuUmFuZ2VUcmFja2VyKToKICAiIiJBIFJhbmdlVHJhY2tlciB0aGF0IGFsd2F5cyBpZ25vcmVzIHNwbGl0IHJlcXVlc3RzLgoKICBUaGlzIGNhbiBiZSB1c2VkIHRvIG1ha2UgYSBnaXZlbgogIDpjbGFzczpgfmFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SYW5nZVRyYWNrZXJgIG9iamVjdCB1bnNwbGl0dGFibGUgYnkKICBpZ25vcmluZyBhbGwgY2FsbHMgdG8gOm1ldGg6YC50cnlfc3BsaXQoKWAuIEFsbCBvdGhlciBjYWxscyB3aWxsIGJlIGRlbGVnYXRlZAogIHRvIHRoZSBnaXZlbiA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmFuZ2VUcmFja2VyYC4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHJhbmdlX3RyYWNrZXIpOgogICAgIiIiSW5pdGlhbGl6ZXMgVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyLgoKICAgIEFyZ3M6CiAgICAgIHJhbmdlX3RyYWNrZXIgKH5hcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmFuZ2VUcmFja2VyKTogYQogICAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SYW5nZVRyYWNrZXJgIHRvIHdoaWNoIGFsbCBtZXRob2QKICAgICAgICBjYWxscyBleHBlY3QgY2FsbHMgdG8gOm1ldGg6YC50cnlfc3BsaXQoKWAgd2lsbCBiZSBkZWxlZ2F0ZWQuCiAgICAiIiIKICAgIGFzc2VydCBpc2luc3RhbmNlKHJhbmdlX3RyYWNrZXIsIGlvYmFzZS5SYW5nZVRyYWNrZXIpCiAgICBzZWxmLl9yYW5nZV90cmFja2VyID0gcmFuZ2VfdHJhY2tlcgoKICBkZWYgc3RhcnRfcG9zaXRpb24oc2VsZik6CiAgICByZXR1cm4gc2VsZi5fcmFuZ2VfdHJhY2tlci5zdGFydF9wb3NpdGlvbigpCgogIGRlZiBzdG9wX3Bvc2l0aW9uKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX3JhbmdlX3RyYWNrZXIuc3RvcF9wb3NpdGlvbigpCgogIGRlZiBwb3NpdGlvbl9hdF9mcmFjdGlvbihzZWxmLCBmcmFjdGlvbik6CiAgICByZXR1cm4gc2VsZi5fcmFuZ2VfdHJhY2tlci5wb3NpdGlvbl9hdF9mcmFjdGlvbihmcmFjdGlvbikKCiAgZGVmIHRyeV9jbGFpbShzZWxmLCBwb3NpdGlvbik6CiAgICByZXR1cm4gc2VsZi5fcmFuZ2VfdHJhY2tlci50cnlfY2xhaW0ocG9zaXRpb24pCgogIGRlZiB0cnlfc3BsaXQoc2VsZiwgcG9zaXRpb24pOgogICAgcmV0dXJuIE5vbmUKCiAgZGVmIHNldF9jdXJyZW50X3Bvc2l0aW9uKHNlbGYsIHBvc2l0aW9uKToKICAgIHNlbGYuX3JhbmdlX3RyYWNrZXIuc2V0X2N1cnJlbnRfcG9zaXRpb24ocG9zaXRpb24pCgogIGRlZiBmcmFjdGlvbl9jb25zdW1lZChzZWxmKToKICAgIHJldHVybiBzZWxmLl9yYW5nZV90cmFja2VyLmZyYWN0aW9uX2NvbnN1bWVkKCkKCiAgZGVmIHNwbGl0X3BvaW50cyhzZWxmKToKICAgICMgQW4gdW5zcGxpdHRhYmxlIHJhbmdlIG9ubHkgY29udGFpbnMgYSBzaW5nbGUgc3BsaXQgcG9pbnQuCiAgICByZXR1cm4gKDAsIDEpCgogIGRlZiBzZXRfc3BsaXRfcG9pbnRzX3VuY2xhaW1lZF9jYWxsYmFjayhzZWxmLCBjYWxsYmFjayk6CiAgICBzZWxmLl9yYW5nZV90cmFja2VyLnNldF9zcGxpdF9wb2ludHNfdW5jbGFpbWVkX2NhbGxiYWNrKGNhbGxiYWNrKQoKCmNsYXNzIExleGljb2dyYXBoaWNLZXlSYW5nZVRyYWNrZXIoT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyKToKICAiIiIKICBBIHJhbmdlIHRyYWNrZXIgdGhhdCB0cmFja3MgcHJvZ3Jlc3MgdGhyb3VnaCBhIGxleGljb2dyYXBoaWNhbGx5CiAgb3JkZXJlZCBrZXlzcGFjZSBvZiBzdHJpbmdzLgogICIiIgoKICBAY2xhc3NtZXRob2QKICBkZWYgZnJhY3Rpb25fdG9fcG9zaXRpb24oY2xzLCBmcmFjdGlvbiwgc3RhcnQ9Tm9uZSwgZW5kPU5vbmUpOgogICAgIiIiCiAgICBMaW5lYXJseSBpbnRlcnBvbGF0ZXMgYSBrZXkgdGhhdCBpcyBsZXhpY29ncmFwaGljYWxseQogICAgZnJhY3Rpb24gb2YgdGhlIHdheSBiZXR3ZWVuIHN0YXJ0IGFuZCBlbmQuCiAgICAiIiIKICAgIGFzc2VydCAwIDw9IGZyYWN0aW9uIDw9IDEsIGZyYWN0aW9uCiAgICBpZiBzdGFydCBpcyBOb25lOgogICAgICBzdGFydCA9IGInJwogICAgaWYgZnJhY3Rpb24gPT0gMToKICAgICAgcmV0dXJuIGVuZAogICAgZWxpZiBmcmFjdGlvbiA9PSAwOgogICAgICByZXR1cm4gc3RhcnQKICAgIGVsc2U6CiAgICAgIGlmIG5vdCBlbmQ6CiAgICAgICAgY29tbW9uX3ByZWZpeF9sZW4gPSBsZW4oc3RhcnQpIC0gbGVuKHN0YXJ0LmxzdHJpcChiJ1x4RkYnKSkKICAgICAgZWxzZToKICAgICAgICBmb3IgaXgsIChzLCBlKSBpbiBlbnVtZXJhdGUoemlwKHN0YXJ0LCBlbmQpKToKICAgICAgICAgIGlmIHMgIT0gZToKICAgICAgICAgICAgY29tbW9uX3ByZWZpeF9sZW4gPSBpeAogICAgICAgICAgICBicmVhawogICAgICAgIGVsc2U6CiAgICAgICAgICBjb21tb25fcHJlZml4X2xlbiA9IG1pbihsZW4oc3RhcnQpLCBsZW4oZW5kKSkKICAgICAgIyBDb252ZXJ0IHRoZSByZWxhdGl2ZSBwcmVjaXNpb24gb2YgZnJhY3Rpb24gKH41MyBiaXRzKSB0byBhbiBhYnNvbHV0ZQogICAgICAjIHByZWNpc2lvbiBuZWVkZWQgdG8gcmVwcmVzZW50IHZhbHVlcyBiZXR3ZWVuIHN0YXJ0IGFuZCBlbmQgZGlzdGluY3RseS4KICAgICAgcHJlYyA9IGNvbW1vbl9wcmVmaXhfbGVuICsgaW50KC1tYXRoLmxvZyhmcmFjdGlvbiwgMjU2KSkgKyA3CiAgICAgIGlzdGFydCA9IGNscy5fYnl0ZXN0cmluZ190b19pbnQoc3RhcnQsIHByZWMpCiAgICAgIGllbmQgPSBjbHMuX2J5dGVzdHJpbmdfdG9faW50KGVuZCwgcHJlYykgaWYgZW5kIGVsc2UgMSA8PCAocHJlYyAqIDgpCiAgICAgIGlrZXkgPSBpc3RhcnQgKyBpbnQoKGllbmQgLSBpc3RhcnQpICogZnJhY3Rpb24pCiAgICAgICMgQ291bGQgYmUgZXF1YWwgZHVlIHRvIHJvdW5kaW5nLgogICAgICAjIEFkanVzdCB0byBlbnN1cmUgd2UgbmV2ZXIgcmV0dXJuIHRoZSBhY3R1YWwgc3RhcnQgYW5kIGVuZAogICAgICAjIHVubGVzcyBmcmFjdGlvbiBpcyBleGF0bHkgMCBvciAxLgogICAgICBpZiBpa2V5ID09IGlzdGFydDoKICAgICAgICBpa2V5ICs9IDEKICAgICAgZWxpZiBpa2V5ID09IGllbmQ6CiAgICAgICAgaWtleSAtPSAxCiAgICAgIHJldHVybiBjbHMuX2J5dGVzdHJpbmdfZnJvbV9pbnQoaWtleSwgcHJlYykucnN0cmlwKGInXDAnKQoKICBAY2xhc3NtZXRob2QKICBkZWYgcG9zaXRpb25fdG9fZnJhY3Rpb24oY2xzLCBrZXksIHN0YXJ0PU5vbmUsIGVuZD1Ob25lKToKICAgICIiIgogICAgUmV0dXJucyB0aGUgZnJhY3Rpb24gb2Yga2V5cyBpbiB0aGUgcmFuZ2UgW3N0YXJ0LCBlbmQpIHRoYXQKICAgIGFyZSBsZXNzIHRoYW4gdGhlIGdpdmVuIGtleS4KICAgICIiIgogICAgaWYgbm90IGtleToKICAgICAgcmV0dXJuIDAKICAgIGlmIHN0YXJ0IGlzIE5vbmU6CiAgICAgIHN0YXJ0ID0gYicnCiAgICBwcmVjID0gbGVuKHN0YXJ0KSArIDcKICAgIGlmIGtleS5zdGFydHN3aXRoKHN0YXJ0KToKICAgICAgIyBIaWdoZXIgYWJzb2x1dGUgcHJlY2lzaW9uIG5lZWRlZCBmb3IgdmVyeSBzbWFsbCB2YWx1ZXMgb2YgZml4ZWQKICAgICAgIyByZWxhdGl2ZSBwb3NpdGlvbi4KICAgICAgcHJlYyA9IG1heChwcmVjLCBsZW4oa2V5KSAtIGxlbihrZXlbbGVuKHN0YXJ0KTpdLnN0cmlwKGInXDAnKSkgKyA3KQogICAgaXN0YXJ0ID0gY2xzLl9ieXRlc3RyaW5nX3RvX2ludChzdGFydCwgcHJlYykKICAgIGlrZXkgPSBjbHMuX2J5dGVzdHJpbmdfdG9faW50KGtleSwgcHJlYykKICAgIGllbmQgPSBjbHMuX2J5dGVzdHJpbmdfdG9faW50KGVuZCwgcHJlYykgaWYgZW5kIGVsc2UgMSA8PCAocHJlYyAqIDgpCiAgICByZXR1cm4gZmxvYXQoaWtleSAtIGlzdGFydCkgLyAoaWVuZCAtIGlzdGFydCkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBfYnl0ZXN0cmluZ190b19pbnQocywgcHJlYyk6CiAgICAiIiIKICAgIFJldHVybnMgaW50KDI1NioqcHJlYyAqIGYpIHdoZXJlIGYgaXMgdGhlIGZyYWN0aW9uCiAgICByZXByZXNlbnRlZCBieSBpbnRlcnByZXRpbmcgJy4nICsgcyBhcyBhIGJhc2UtMjU2CiAgICBmbG9hdGluZyBwb2ludCBudW1iZXIuCiAgICAiIiIKICAgIGlmIG5vdCBzOgogICAgICByZXR1cm4gMAogICAgZWxpZiBsZW4ocykgPCBwcmVjOgogICAgICBzICs9IGInXDAnICogKHByZWMgLSBsZW4ocykpCiAgICBlbHNlOgogICAgICBzID0gc1s6cHJlY10KICAgIHJldHVybiBpbnQoY29kZWNzLmVuY29kZShzLCAnaGV4JyksIDE2KQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIF9ieXRlc3RyaW5nX2Zyb21faW50KGksIHByZWMpOgogICAgIiIiCiAgICBJbnZlcnNlIG9mIF9ieXRlc3RyaW5nX3RvX2ludC4KICAgICIiIgogICAgaCA9ICcleCcgJSBpCiAgICByZXR1cm4gY29kZWNzLmRlY29kZSgnMCcgKiAoMiAqIHByZWMgLSBsZW4oaCkpICsgaCwgJ2hleCcpCn1yU4MAAChYIQAAAFVuc3BsaXR0YWJsZVJhbmdlVHJhY2tlci5fX2luaXRfX1gDAAAAZGVmTRcBTSEBh1glAAAAT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyLnRyeV9zcGxpdFgDAAAAZGVmS+pL+IdYHAAAAExleGljb2dyYXBoaWNLZXlSYW5nZVRyYWNrZXJYBQAAAGNsYXNzTT8BTZUBh1glAAAAVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyLnNwbGl0X3BvaW50c1gDAAAAZGVmTTcBTToBh1gnAAAAT2Zmc2V0UmFuZ2VUcmFja2VyLnBvc2l0aW9uX2F0X2ZyYWN0aW9uWAMAAABkZWZLpEurh1gpAAAAT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyLnN0b3BfcG9zaXRpb25YAwAAAGRlZkvSS9WHWCIAAABVbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIudHJ5X3NwbGl0WAMAAABkZWZNLgFNMAGHWDAAAABPcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXIucG9zaXRpb25fdG9fZnJhY3Rpb25YAwAAAGRlZk0AAU0GAYdYPAAAAFVuc3BsaXR0YWJsZVJhbmdlVHJhY2tlci5zZXRfc3BsaXRfcG9pbnRzX3VuY2xhaW1lZF9jYWxsYmFja1gDAAAAZGVmTTsBTT0Bh1gpAAAAT2Zmc2V0UmFuZ2VUcmFja2VyLl92YWxpZGF0ZV9yZWNvcmRfc3RhcnRYAwAAAGRlZktQS2aHWBwAAABPZmZzZXRSYW5nZVRyYWNrZXIudHJ5X3NwbGl0WAMAAABkZWZLdkuVh1gxAAAATGV4aWNvZ3JhcGhpY0tleVJhbmdlVHJhY2tlci5wb3NpdGlvbl90b19mcmFjdGlvblgDAAAAZGVmTWsBTX4Bh1gkAAAAT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyLl9faW5pdF9fWAMAAABkZWZLyUvOh1gqAAAAT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyLnN0YXJ0X3Bvc2l0aW9uWAMAAABkZWZLz0vRh1gtAAAAVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyLnNldF9jdXJyZW50X3Bvc2l0aW9uWAMAAABkZWZNMQFNMwGHWCAAAABPZmZzZXRSYW5nZVRyYWNrZXIuc3RvcF9wb3NpdGlvblgDAAAAZGVmS0lLS4dYLQAAAFVuc3BsaXR0YWJsZVJhbmdlVHJhY2tlci5wb3NpdGlvbl9hdF9mcmFjdGlvblgDAAAAZGVmTSgBTSoBh1gYAAAAVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyWAUAAABjbGFzc00OAU09AYdYLQAAAE9yZGVyZWRQb3NpdGlvblJhbmdlVHJhY2tlci5mcmFjdGlvbl9jb25zdW1lZFgDAAAAZGVmS/lL/4dYEgAAAE9mZnNldFJhbmdlVHJhY2tlclgFAAAAY2xhc3NLJUu9h1gbAAAAT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyWAUAAABjbGFzc0u/TQwBh1gkAAAAT2Zmc2V0UmFuZ2VUcmFja2VyLmxhc3RfcmVjb3JkX3N0YXJ0WAMAAABkZWZLTEtPh1gcAAAAT2Zmc2V0UmFuZ2VUcmFja2VyLnRyeV9jbGFpbVgDAAAAZGVmS2dLcIdYMQAAAExleGljb2dyYXBoaWNLZXlSYW5nZVRyYWNrZXIuX2J5dGVzdHJpbmdfZnJvbV9pbnRYAwAAAGRlZk2OAU2VAYdYJgAAAFVuc3BsaXR0YWJsZVJhbmdlVHJhY2tlci5zdG9wX3Bvc2l0aW9uWAMAAABkZWZNJQFNJwGHWCcAAABVbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIuc3RhcnRfcG9zaXRpb25YAwAAAGRlZk0iAU0kAYdYJQAAAE9yZGVyZWRQb3NpdGlvblJhbmdlVHJhY2tlci50cnlfY2xhaW1YAwAAAGRlZkvWS+WHWB8AAABPZmZzZXRSYW5nZVRyYWNrZXIuc3BsaXRfcG9pbnRzWAMAAABkZWZLrEu6h1gwAAAAT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyLnBvc2l0aW9uX2F0X2ZyYWN0aW9uWAMAAABkZWZL5kvph1gbAAAAT2Zmc2V0UmFuZ2VUcmFja2VyLl9faW5pdF9fWAMAAABkZWZLL0tFh1gnAAAAT2Zmc2V0UmFuZ2VUcmFja2VyLnNldF9jdXJyZW50X3Bvc2l0aW9uWAMAAABkZWZLcUt1h1g2AAAAT2Zmc2V0UmFuZ2VUcmFja2VyLnNldF9zcGxpdF9wb2ludHNfdW5jbGFpbWVkX2NhbGxiYWNrWAMAAABkZWZLu0u9h1gwAAAAT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyLmZyYWN0aW9uX3RvX3Bvc2l0aW9uWAMAAABkZWZNBwFNDAGHWCQAAABPZmZzZXRSYW5nZVRyYWNrZXIuZnJhY3Rpb25fY29uc3VtZWRYAwAAAGRlZkuWS6OHWCIAAABVbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIudHJ5X2NsYWltWAMAAABkZWZNKwFNLQGHWC8AAABMZXhpY29ncmFwaGljS2V5UmFuZ2VUcmFja2VyLl9ieXRlc3RyaW5nX3RvX2ludFgDAAAAZGVmTX8BTY0Bh1gxAAAATGV4aWNvZ3JhcGhpY0tleVJhbmdlVHJhY2tlci5mcmFjdGlvbl90b19wb3NpdGlvblgDAAAAZGVmTUUBTWoBh1gqAAAAVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyLmZyYWN0aW9uX2NvbnN1bWVkWAMAAABkZWZNNAFNNgGHWCEAAABPZmZzZXRSYW5nZVRyYWNrZXIuc3RhcnRfcG9zaXRpb25YAwAAAGRlZktGS0iHdX1yVIMAAChYJQAAAE9yZGVyZWRQb3NpdGlvblJhbmdlVHJhY2tlci50cnlfc3BsaXRq1FwAAFgcAAAATGV4aWNvZ3JhcGhpY0tleVJhbmdlVHJhY2tlcmrUXAAAWCUAAABVbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIuc3BsaXRfcG9pbnRzatRcAABYJwAAAE9mZnNldFJhbmdlVHJhY2tlci5wb3NpdGlvbl9hdF9mcmFjdGlvbmrUXAAAWCkAAABPcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXIuc3RvcF9wb3NpdGlvbmrUXAAAWCIAAABVbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIudHJ5X3NwbGl0atRcAABYMAAAAE9yZGVyZWRQb3NpdGlvblJhbmdlVHJhY2tlci5wb3NpdGlvbl90b19mcmFjdGlvbmrUXAAAWBwAAABPZmZzZXRSYW5nZVRyYWNrZXIudHJ5X3NwbGl0atRcAABYMQAAAExleGljb2dyYXBoaWNLZXlSYW5nZVRyYWNrZXIucG9zaXRpb25fdG9fZnJhY3Rpb25q1FwAAFgqAAAAT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyLnN0YXJ0X3Bvc2l0aW9uatRcAABYLQAAAFVuc3BsaXR0YWJsZVJhbmdlVHJhY2tlci5zZXRfY3VycmVudF9wb3NpdGlvbmrUXAAAWCAAAABPZmZzZXRSYW5nZVRyYWNrZXIuc3RvcF9wb3NpdGlvbmrUXAAAWC0AAABVbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIucG9zaXRpb25fYXRfZnJhY3Rpb25q1FwAAFgYAAAAVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyatRcAABYLQAAAE9yZGVyZWRQb3NpdGlvblJhbmdlVHJhY2tlci5mcmFjdGlvbl9jb25zdW1lZGrUXAAAWCYAAABVbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIuc3RvcF9wb3NpdGlvbmrUXAAAWBsAAABPcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXJq1FwAAFgcAAAAT2Zmc2V0UmFuZ2VUcmFja2VyLnRyeV9jbGFpbWrUXAAAWDwAAABVbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIuc2V0X3NwbGl0X3BvaW50c191bmNsYWltZWRfY2FsbGJhY2tq1FwAAFgSAAAAT2Zmc2V0UmFuZ2VUcmFja2VyatRcAABYJwAAAFVuc3BsaXR0YWJsZVJhbmdlVHJhY2tlci5zdGFydF9wb3NpdGlvbmrUXAAAWCUAAABPcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXIudHJ5X2NsYWltatRcAABYHwAAAE9mZnNldFJhbmdlVHJhY2tlci5zcGxpdF9wb2ludHNq1FwAAFgwAAAAT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyLnBvc2l0aW9uX2F0X2ZyYWN0aW9uatRcAABYJwAAAE9mZnNldFJhbmdlVHJhY2tlci5zZXRfY3VycmVudF9wb3NpdGlvbmrUXAAAWDYAAABPZmZzZXRSYW5nZVRyYWNrZXIuc2V0X3NwbGl0X3BvaW50c191bmNsYWltZWRfY2FsbGJhY2tq1FwAAFgwAAAAT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyLmZyYWN0aW9uX3RvX3Bvc2l0aW9uatRcAABYJAAAAE9mZnNldFJhbmdlVHJhY2tlci5mcmFjdGlvbl9jb25zdW1lZGrUXAAAWCIAAABVbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIudHJ5X2NsYWltatRcAABYMQAAAExleGljb2dyYXBoaWNLZXlSYW5nZVRyYWNrZXIuZnJhY3Rpb25fdG9fcG9zaXRpb25q1FwAAFgqAAAAVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyLmZyYWN0aW9uX2NvbnN1bWVkatRcAABYIQAAAE9mZnNldFJhbmdlVHJhY2tlci5zdGFydF9wb3NpdGlvbmrUXAAAdWp9aQAAWB0AAABhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vyc3JVgwAAhYFyVoMAAH1yV4MAAGJ0VRhhcGFjaGVfYmVhbS5pby5nY3AuZ2NzaW8oWINdAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKIiIiR29vZ2xlIENsb3VkIFN0b3JhZ2UgY2xpZW50LgoKVGhpcyBsaWJyYXJ5IGV2b2x2ZWQgZnJvbSB0aGUgR29vZ2xlIEFwcCBFbmdpbmUgR0NTIGNsaWVudCBhdmFpbGFibGUgYXQKaHR0cHM6Ly9naXRodWIuY29tL0dvb2dsZUNsb3VkUGxhdGZvcm0vYXBwZW5naW5lLWdjcy1jbGllbnQuCiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBlcnJubwppbXBvcnQgaW8KaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IG11bHRpcHJvY2Vzc2luZwppbXBvcnQgcmUKaW1wb3J0IHN5cwppbXBvcnQgdGhyZWFkaW5nCmltcG9ydCB0aW1lCmltcG9ydCB0cmFjZWJhY2sKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0Cgpmcm9tIGFwYWNoZV9iZWFtLmludGVybmFsLmh0dHBfY2xpZW50IGltcG9ydCBnZXRfbmV3X2h0dHAKZnJvbSBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtaW8gaW1wb3J0IERvd25sb2FkZXIKZnJvbSBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtaW8gaW1wb3J0IERvd25sb2FkZXJTdHJlYW0KZnJvbSBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtaW8gaW1wb3J0IFBpcGVTdHJlYW0KZnJvbSBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtaW8gaW1wb3J0IFVwbG9hZGVyCmZyb20gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbWlvIGltcG9ydCBVcGxvYWRlclN0cmVhbQpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzIGltcG9ydCByZXRyeQoKX19hbGxfXyA9IFsnR2NzSU8nXQoKCiMgSXNzdWUgYSBmcmllbmRsaWVyIGVycm9yIG1lc3NhZ2UgaWYgdGhlIHN0b3JhZ2UgbGlicmFyeSBpcyBub3QgYXZhaWxhYmxlLgojIFRPRE8oc2lsdml1Yyk6IFJlbW92ZSB0aGlzIGd1YXJkIHdoZW4gc3RvcmFnZSBpcyBhdmFpbGFibGUgZXZlcnl3aGVyZS4KdHJ5OgogICMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCiAgIyBweWxpbnQ6IGRpc2FibGU9dW5ncm91cGVkLWltcG9ydHMKICBpbXBvcnQgYXBpdG9vbHMuYmFzZS5weS50cmFuc2ZlciBhcyB0cmFuc2ZlcgogIGZyb20gYXBpdG9vbHMuYmFzZS5weS5iYXRjaCBpbXBvcnQgQmF0Y2hBcGlSZXF1ZXN0CiAgZnJvbSBhcGl0b29scy5iYXNlLnB5LmV4Y2VwdGlvbnMgaW1wb3J0IEh0dHBFcnJvcgogIGZyb20gYXBhY2hlX2JlYW0uaW50ZXJuYWwuZ2NwIGltcG9ydCBhdXRoCiAgZnJvbSBhcGFjaGVfYmVhbS5pby5nY3AuaW50ZXJuYWwuY2xpZW50cyBpbXBvcnQgc3RvcmFnZQpleGNlcHQgSW1wb3J0RXJyb3I6CiAgcmFpc2UgSW1wb3J0RXJyb3IoCiAgICAgICdHb29nbGUgQ2xvdWQgU3RvcmFnZSBJL08gbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBleGVjdXRpb24gZW52aXJvbm1lbnQgJwogICAgICAnKGNvdWxkIG5vdCBpbXBvcnQgc3RvcmFnZSBBUEkgY2xpZW50KS4nKQoKIyBUaGlzIGlzIHRoZSBzaXplIG9mIGVhY2ggcGFydGlhbC1maWxlIHJlYWQgb3BlcmF0aW9uIGZyb20gR0NTLiAgVGhpcwojIHBhcmFtZXRlciB3YXMgY2hvc2VuIHRvIGdpdmUgZ29vZCB0aHJvdWdocHV0IHdoaWxlIGtlZXBpbmcgbWVtb3J5IHVzYWdlIGF0CiMgYSByZWFzb25hYmxlIGxldmVsOyB0aGUgZm9sbG93aW5nIHRhYmxlIHNob3dzIHRocm91Z2hwdXQgcmVhY2hlZCB3aGVuCiMgcmVhZGluZyBmaWxlcyBvZiBhIGdpdmVuIHNpemUgd2l0aCBhIGNob3NlbiBidWZmZXIgc2l6ZSBhbmQgaW5mb3JtZWQgdGhlCiMgY2hvaWNlIG9mIHRoZSB2YWx1ZSwgYXMgb2YgMTEvMjAxNjoKIwojICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKwojIHwgICAgICAgICAgICAgICB8IDUwIE1CIGZpbGUgfCAxMDAgTUIgZmlsZSB8IDIwMCBNQiBmaWxlIHwgNDAwIE1CIGZpbGUgfAojICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKwojIHwgOCBNQiBidWZmZXIgICB8IDE3LjEyIE1CL3MgfCAyMi42NyBNQi9zICB8IDIzLjgxIE1CL3MgIHwgMjYuMDUgTUIvcyAgfAojIHwgMTYgTUIgYnVmZmVyICB8IDI0LjIxIE1CL3MgfCA0Mi43MCBNQi9zICB8IDQyLjg5IE1CL3MgIHwgNDYuOTIgTUIvcyAgfAojIHwgMzIgTUIgYnVmZmVyICB8IDI4LjUzIE1CL3MgfCA0OC4wOCBNQi9zICB8IDU0LjMwIE1CL3MgIHwgNTQuNjUgTUIvcyAgfAojIHwgNDAwIE1CIGJ1ZmZlciB8IDM0LjcyIE1CL3MgfCA3MS4xMyBNQi9zICB8IDc5LjEzIE1CL3MgIHwgODUuMzkgTUIvcyAgfAojICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKwpERUZBVUxUX1JFQURfQlVGRkVSX1NJWkUgPSAxNiAqIDEwMjQgKiAxMDI0CgojIFRoaXMgaXMgdGhlIG51bWJlciBvZiBzZWNvbmRzIHRoZSBsaWJyYXJ5IHdpbGwgd2FpdCBmb3IgYSBwYXJ0aWFsLWZpbGUgcmVhZAojIG9wZXJhdGlvbiBmcm9tIEdDUyB0byBjb21wbGV0ZSBiZWZvcmUgcmV0cnlpbmcuCkRFRkFVTFRfUkVBRF9TRUdNRU5UX1RJTUVPVVRfU0VDT05EUyA9IDYwCgojIFRoaXMgaXMgdGhlIHNpemUgb2YgY2h1bmtzIHVzZWQgd2hlbiB3cml0aW5nIHRvIEdDUy4KV1JJVEVfQ0hVTktfU0laRSA9IDggKiAxMDI0ICogMTAyNAoKCiMgTWF4aW11bSBudW1iZXIgb2Ygb3BlcmF0aW9ucyBwZXJtaXR0ZWQgaW4gR2NzSU8uY29weV9iYXRjaCgpIGFuZAojIEdjc0lPLmRlbGV0ZV9iYXRjaCgpLgpNQVhfQkFUQ0hfT1BFUkFUSU9OX1NJWkUgPSAxMDAKCiMgQmF0Y2ggZW5kcG9pbnQgVVJMIGZvciBHQ1MuCiMgV2UgaGF2ZSB0byBzcGVjaWZ5IGFuIEFQSSBzcGVjaWZpYyBlbmRwb2ludCBoZXJlIHNpbmNlIEdvb2dsZSBBUElzIGdsb2JhbAojIGJhdGNoIGVuZHBvaW50cyB3aWxsIGJlIGRlcHJlY2F0ZWQgb24gMDMvMjUvMjAxOS4KIyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZWJsb2cuY29tLzIwMTgvMDMvZGlzY29udGludWluZy1zdXBwb3J0LWZvci1qc29uLXJwYy1hbmQuaHRtbC4gICMgcHlsaW50OiBkaXNhYmxlPWxpbmUtdG9vLWxvbmcKIyBDdXJyZW50bHkgYXBpdG9vbHMgbGlicmFyeSB1c2VzIGEgZ2xvYmFsIGJhdGNoIGVuZHBvaW50IGJ5IGRlZmF1bHQ6CiMgaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9hcGl0b29scy9ibG9iL21hc3Rlci9hcGl0b29scy9iYXNlL3B5L2JhdGNoLnB5I0wxNTIKIyBUT0RPOiByZW1vdmUgdGhpcyBjb25zdGFudCBhbmQgaXQncyB1c2FnZSBhZnRlciBhcGl0b29scyBtb3ZlIHRvIHVzaW5nIGFuIEFQSQojIHNwZWNpZmljIGJhdGNoIGVuZHBvaW50IG9yIGFmdGVyIEJlYW0gZ2NzaW8gbW9kdWxlIHN0YXJ0IHVzaW5nIGEgR0NTIGNsaWVudAojIGxpYnJhcnkgdGhhdCBkb2VzIG5vdCB1c2UgZ2xvYmFsIGJhdGNoIGVuZHBvaW50cy4KR0NTX0JBVENIX0VORFBPSU5UID0gJ2h0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2JhdGNoL3N0b3JhZ2UvdjEnCgoKZGVmIHBhcnNlX2djc19wYXRoKGdjc19wYXRoLCBvYmplY3Rfb3B0aW9uYWw9RmFsc2UpOgogICIiIlJldHVybiB0aGUgYnVja2V0IGFuZCBvYmplY3QgbmFtZXMgb2YgdGhlIGdpdmVuIGdzOi8vIHBhdGguIiIiCiAgbWF0Y2ggPSByZS5tYXRjaCgnXmdzOi8vKFteL10rKS8oLiopJCcsIGdjc19wYXRoKQogIGlmIG1hdGNoIGlzIE5vbmUgb3IgKG1hdGNoLmdyb3VwKDIpID09ICcnIGFuZCBub3Qgb2JqZWN0X29wdGlvbmFsKToKICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0dDUyBwYXRoIG11c3QgYmUgaW4gdGhlIGZvcm0gZ3M6Ly88YnVja2V0Pi88b2JqZWN0Pi4nKQogIHJldHVybiBtYXRjaC5ncm91cCgxKSwgbWF0Y2guZ3JvdXAoMikKCgpjbGFzcyBHY3NJT0Vycm9yKElPRXJyb3IsIHJldHJ5LlBlcm1hbmVudEV4Y2VwdGlvbik6CiAgIiIiR0NTIElPIGVycm9yIHRoYXQgc2hvdWxkIG5vdCBiZSByZXRyaWVkLiIiIgogIHBhc3MKCgpjbGFzcyBHY3NJTyhvYmplY3QpOgogICIiIkdvb2dsZSBDbG91ZCBTdG9yYWdlIEkvTyBjbGllbnQuIiIiCgogIGRlZiBfX25ld19fKGNscywgc3RvcmFnZV9jbGllbnQ9Tm9uZSk6CiAgICBpZiBzdG9yYWdlX2NsaWVudDoKICAgICAgIyBUaGlzIHBhdGggaXMgb25seSB1c2VkIGZvciB0ZXN0aW5nLgogICAgICByZXR1cm4gc3VwZXIoR2NzSU8sIGNscykuX19uZXdfXyhjbHMpCiAgICBlbHNlOgogICAgICAjIENyZWF0ZSBhIHNpbmdsZSBzdG9yYWdlIGNsaWVudCBmb3IgZWFjaCB0aHJlYWQuICBXZSB3b3VsZCBsaWtlIHRvIGF2b2lkCiAgICAgICMgY3JlYXRpbmcgbW9yZSB0aGFuIG9uZSBzdG9yYWdlIGNsaWVudCBmb3IgZWFjaCB0aHJlYWQsIHNpbmNlIGVhY2gKICAgICAgIyBpbml0aWFsaXphdGlvbiByZXF1aXJlcyB0aGUgcmVsYXRpdmVseSBleHBlbnNpdmUgc3RlcCBvZiBpbml0aWFsaXppbmcKICAgICAgIyBjcmVkZW50YWlhbHMuCiAgICAgIGxvY2FsX3N0YXRlID0gdGhyZWFkaW5nLmxvY2FsKCkKICAgICAgaWYgZ2V0YXR0cihsb2NhbF9zdGF0ZSwgJ2djc2lvX2luc3RhbmNlJywgTm9uZSkgaXMgTm9uZToKICAgICAgICBjcmVkZW50aWFscyA9IGF1dGguZ2V0X3NlcnZpY2VfY3JlZGVudGlhbHMoKQogICAgICAgIHN0b3JhZ2VfY2xpZW50ID0gc3RvcmFnZS5TdG9yYWdlVjEoCiAgICAgICAgICAgIGNyZWRlbnRpYWxzPWNyZWRlbnRpYWxzLAogICAgICAgICAgICBnZXRfY3JlZGVudGlhbHM9RmFsc2UsCiAgICAgICAgICAgIGh0dHA9Z2V0X25ld19odHRwKCksCiAgICAgICAgICAgIHJlc3BvbnNlX2VuY29kaW5nPU5vbmUgaWYgc3lzLnZlcnNpb25faW5mb1swXSA8IDMgZWxzZSAndXRmOCcpCiAgICAgICAgbG9jYWxfc3RhdGUuZ2NzaW9faW5zdGFuY2UgPSBzdXBlcihHY3NJTywgY2xzKS5fX25ld19fKGNscykKICAgICAgICBsb2NhbF9zdGF0ZS5nY3Npb19pbnN0YW5jZS5jbGllbnQgPSBzdG9yYWdlX2NsaWVudAogICAgICByZXR1cm4gbG9jYWxfc3RhdGUuZ2NzaW9faW5zdGFuY2UKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHN0b3JhZ2VfY2xpZW50PU5vbmUpOgogICAgIyBXZSBtdXN0IGRvIHRoaXMgY2hlY2sgb24gc3RvcmFnZV9jbGllbnQgYmVjYXVzZSB0aGUgY2xpZW50IGF0dHJpYnV0ZSBtYXkKICAgICMgaGF2ZSBhbHJlYWR5IGJlZW4gc2V0IGluIF9fbmV3X18gZm9yIHRoZSBzaW5nbGV0b24gY2FzZSB3aGVuCiAgICAjIHN0b3JhZ2VfY2xpZW50IGlzIE5vbmUuCiAgICBpZiBzdG9yYWdlX2NsaWVudCBpcyBub3QgTm9uZToKICAgICAgc2VsZi5jbGllbnQgPSBzdG9yYWdlX2NsaWVudAogICAgc2VsZi5fcmV3cml0ZV9jYiA9IE5vbmUKCiAgZGVmIF9zZXRfcmV3cml0ZV9yZXNwb25zZV9jYWxsYmFjayhzZWxmLCBjYWxsYmFjayk6CiAgICAiIiJGb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LiBObyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogICAgQXJnczoKICAgICAgY2FsbGJhY2s6IEEgZnVuY3Rpb24gdGhhdCByZWNlaXZlcyBgYHN0b3JhZ2UuUmV3cml0ZVJlc3BvbnNlYGAuCiAgICAiIiIKICAgIHNlbGYuX3Jld3JpdGVfY2IgPSBjYWxsYmFjawoKICBkZWYgb3BlbihzZWxmLAogICAgICAgICAgIGZpbGVuYW1lLAogICAgICAgICAgIG1vZGU9J3InLAogICAgICAgICAgIHJlYWRfYnVmZmVyX3NpemU9REVGQVVMVF9SRUFEX0JVRkZFUl9TSVpFLAogICAgICAgICAgIG1pbWVfdHlwZT0nYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyk6CiAgICAiIiJPcGVuIGEgR0NTIGZpbGUgcGF0aCBmb3IgcmVhZGluZyBvciB3cml0aW5nLgoKICAgIEFyZ3M6CiAgICAgIGZpbGVuYW1lIChzdHIpOiBHQ1MgZmlsZSBwYXRoIGluIHRoZSBmb3JtIGBgZ3M6Ly88YnVja2V0Pi88b2JqZWN0PmBgLgogICAgICBtb2RlIChzdHIpOiBgYCdyJ2BgIGZvciByZWFkaW5nIG9yIGBgJ3cnYGAgZm9yIHdyaXRpbmcuCiAgICAgIHJlYWRfYnVmZmVyX3NpemUgKGludCk6IEJ1ZmZlciBzaXplIHRvIHVzZSBkdXJpbmcgcmVhZCBvcGVyYXRpb25zLgogICAgICBtaW1lX3R5cGUgKHN0cik6IE1pbWUgdHlwZSB0byBzZXQgZm9yIHdyaXRlIG9wZXJhdGlvbnMuCgogICAgUmV0dXJuczoKICAgICAgR0NTIGZpbGUgb2JqZWN0LgoKICAgIFJhaXNlczoKICAgICAgfmV4Y2VwdGlvbnMuVmFsdWVFcnJvcjogSW52YWxpZCBvcGVuIGZpbGUgbW9kZS4KICAgICIiIgogICAgaWYgbW9kZSA9PSAncicgb3IgbW9kZSA9PSAncmInOgogICAgICBkb3dubG9hZGVyID0gR2NzRG93bmxvYWRlcihzZWxmLmNsaWVudCwgZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9zaXplPXJlYWRfYnVmZmVyX3NpemUpCiAgICAgIHJldHVybiBpby5CdWZmZXJlZFJlYWRlcihEb3dubG9hZGVyU3RyZWFtKGRvd25sb2FkZXIsIG1vZGU9bW9kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJfc2l6ZT1yZWFkX2J1ZmZlcl9zaXplKQogICAgZWxpZiBtb2RlID09ICd3JyBvciBtb2RlID09ICd3Yic6CiAgICAgIHVwbG9hZGVyID0gR2NzVXBsb2FkZXIoc2VsZi5jbGllbnQsIGZpbGVuYW1lLCBtaW1lX3R5cGUpCiAgICAgIHJldHVybiBpby5CdWZmZXJlZFdyaXRlcihVcGxvYWRlclN0cmVhbSh1cGxvYWRlciwgbW9kZT1tb2RlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9zaXplPTEyOCAqIDEwMjQpCiAgICBlbHNlOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIGZpbGUgb3BlbiBtb2RlOiAlcy4nICUgbW9kZSkKCiAgQHJldHJ5LndpdGhfZXhwb25lbnRpYWxfYmFja29mZigKICAgICAgcmV0cnlfZmlsdGVyPXJldHJ5LnJldHJ5X29uX3NlcnZlcl9lcnJvcnNfYW5kX3RpbWVvdXRfZmlsdGVyKQogIGRlZiBkZWxldGUoc2VsZiwgcGF0aCk6CiAgICAiIiJEZWxldGVzIHRoZSBvYmplY3QgYXQgdGhlIGdpdmVuIEdDUyBwYXRoLgoKICAgIEFyZ3M6CiAgICAgIHBhdGg6IEdDUyBmaWxlIHBhdGggcGF0dGVybiBpbiB0aGUgZm9ybSBnczovLzxidWNrZXQ+LzxuYW1lPi4KICAgICIiIgogICAgYnVja2V0LCBvYmplY3RfcGF0aCA9IHBhcnNlX2djc19wYXRoKHBhdGgpCiAgICByZXF1ZXN0ID0gc3RvcmFnZS5TdG9yYWdlT2JqZWN0c0RlbGV0ZVJlcXVlc3QoCiAgICAgICAgYnVja2V0PWJ1Y2tldCwgb2JqZWN0PW9iamVjdF9wYXRoKQogICAgdHJ5OgogICAgICBzZWxmLmNsaWVudC5vYmplY3RzLkRlbGV0ZShyZXF1ZXN0KQogICAgZXhjZXB0IEh0dHBFcnJvciBhcyBodHRwX2Vycm9yOgogICAgICBpZiBodHRwX2Vycm9yLnN0YXR1c19jb2RlID09IDQwNDoKICAgICAgICAjIFJldHVybiBzdWNjZXNzIHdoZW4gdGhlIGZpbGUgZG9lc24ndCBleGlzdCBhbnltb3JlIGZvciBpZGVtcG90ZW5jeS4KICAgICAgICByZXR1cm4KICAgICAgcmFpc2UKCiAgIyBXZSBpbnRlbnRpb25hbGx5IGRvIG5vdCBkZWNvcmF0ZSB0aGlzIG1ldGhvZCB3aXRoIGEgcmV0cnksIGFzIHJldHJ5aW5nIGlzCiAgIyBoYW5kbGVkIGluIEJhdGNoQXBpUmVxdWVzdC5FeGVjdXRlKCkuCiAgZGVmIGRlbGV0ZV9iYXRjaChzZWxmLCBwYXRocyk6CiAgICAiIiJEZWxldGVzIHRoZSBvYmplY3RzIGF0IHRoZSBnaXZlbiBHQ1MgcGF0aHMuCgogICAgQXJnczoKICAgICAgcGF0aHM6IExpc3Qgb2YgR0NTIGZpbGUgcGF0aCBwYXR0ZXJucyBpbiB0aGUgZm9ybSBnczovLzxidWNrZXQ+LzxuYW1lPiwKICAgICAgICAgICAgIG5vdCB0byBleGNlZWQgTUFYX0JBVENIX09QRVJBVElPTl9TSVpFIGluIGxlbmd0aC4KCiAgICBSZXR1cm5zOiBMaXN0IG9mIHR1cGxlcyBvZiAocGF0aCwgZXhjZXB0aW9uKSBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgcGF0aHMKICAgICAgICAgICAgIGFyZ3VtZW50LCB3aGVyZSBleGNlcHRpb24gaXMgTm9uZSBpZiB0aGUgb3BlcmF0aW9uIHN1Y2NlZWRlZCBvcgogICAgICAgICAgICAgdGhlIHJlbGV2YW50IGV4Y2VwdGlvbiBpZiB0aGUgb3BlcmF0aW9uIGZhaWxlZC4KICAgICIiIgogICAgaWYgbm90IHBhdGhzOgogICAgICByZXR1cm4gW10KICAgIGJhdGNoX3JlcXVlc3QgPSBCYXRjaEFwaVJlcXVlc3QoCiAgICAgICAgYmF0Y2hfdXJsPUdDU19CQVRDSF9FTkRQT0lOVCwKICAgICAgICByZXRyeWFibGVfY29kZXM9cmV0cnkuU0VSVkVSX0VSUk9SX09SX1RJTUVPVVRfQ09ERVMpCiAgICBmb3IgcGF0aCBpbiBwYXRoczoKICAgICAgYnVja2V0LCBvYmplY3RfcGF0aCA9IHBhcnNlX2djc19wYXRoKHBhdGgpCiAgICAgIHJlcXVlc3QgPSBzdG9yYWdlLlN0b3JhZ2VPYmplY3RzRGVsZXRlUmVxdWVzdCgKICAgICAgICAgIGJ1Y2tldD1idWNrZXQsIG9iamVjdD1vYmplY3RfcGF0aCkKICAgICAgYmF0Y2hfcmVxdWVzdC5BZGQoc2VsZi5jbGllbnQub2JqZWN0cywgJ0RlbGV0ZScsIHJlcXVlc3QpCiAgICBhcGlfY2FsbHMgPSBiYXRjaF9yZXF1ZXN0LkV4ZWN1dGUoc2VsZi5jbGllbnQuX2h0dHApICMgcHlsaW50OiBkaXNhYmxlPXByb3RlY3RlZC1hY2Nlc3MKICAgIHJlc3VsdF9zdGF0dXNlcyA9IFtdCiAgICBmb3IgaSwgYXBpX2NhbGwgaW4gZW51bWVyYXRlKGFwaV9jYWxscyk6CiAgICAgIHBhdGggPSBwYXRoc1tpXQogICAgICBleGNlcHRpb24gPSBOb25lCiAgICAgIGlmIGFwaV9jYWxsLmlzX2Vycm9yOgogICAgICAgIGV4Y2VwdGlvbiA9IGFwaV9jYWxsLmV4Y2VwdGlvbgogICAgICAgICMgUmV0dXJuIHN1Y2Nlc3Mgd2hlbiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0IGFueW1vcmUgZm9yIGlkZW1wb3RlbmN5LgogICAgICAgIGlmIGlzaW5zdGFuY2UoZXhjZXB0aW9uLCBIdHRwRXJyb3IpIGFuZCBleGNlcHRpb24uc3RhdHVzX2NvZGUgPT0gNDA0OgogICAgICAgICAgZXhjZXB0aW9uID0gTm9uZQogICAgICByZXN1bHRfc3RhdHVzZXMuYXBwZW5kKChwYXRoLCBleGNlcHRpb24pKQogICAgcmV0dXJuIHJlc3VsdF9zdGF0dXNlcwoKICBAcmV0cnkud2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmKAogICAgICByZXRyeV9maWx0ZXI9cmV0cnkucmV0cnlfb25fc2VydmVyX2Vycm9yc19hbmRfdGltZW91dF9maWx0ZXIpCiAgZGVmIGNvcHkoc2VsZiwgc3JjLCBkZXN0LCBkZXN0X2ttc19rZXlfbmFtZT1Ob25lLAogICAgICAgICAgIG1heF9ieXRlc19yZXdyaXR0ZW5fcGVyX2NhbGw9Tm9uZSk6CiAgICAiIiJDb3BpZXMgdGhlIGdpdmVuIEdDUyBvYmplY3QgZnJvbSBzcmMgdG8gZGVzdC4KCiAgICBBcmdzOgogICAgICBzcmM6IEdDUyBmaWxlIHBhdGggcGF0dGVybiBpbiB0aGUgZm9ybSBnczovLzxidWNrZXQ+LzxuYW1lPi4KICAgICAgZGVzdDogR0NTIGZpbGUgcGF0aCBwYXR0ZXJuIGluIHRoZSBmb3JtIGdzOi8vPGJ1Y2tldD4vPG5hbWU+LgogICAgICBkZXN0X2ttc19rZXlfbmFtZTogRXhwZXJpbWVudGFsLiBObyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgogICAgICAgIEVuY3J5cHQgZGVzdCB3aXRoIHRoaXMgQ2xvdWQgS01TIGtleS4gSWYgTm9uZSwgd2lsbCB1c2UgZGVzdCBidWNrZXQKICAgICAgICBlbmNyeXB0aW9uIGRlZmF1bHRzLgogICAgICBtYXhfYnl0ZXNfcmV3cml0dGVuX3Blcl9jYWxsOiBFeHBlcmltZW50YWwuIE5vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CiAgICAgICAgZ3VhcmFudGVlcy4gRWFjaCByZXdyaXRlIEFQSSBjYWxsIHdpbGwgcmV0dXJuIGFmdGVyIHRoZXNlIG1hbnkgYnl0ZXMuCiAgICAgICAgVXNlZCBmb3IgdGVzdGluZy4KCiAgICBSYWlzZXM6CiAgICAgIFRpbWVvdXRFcnJvciBvbiB0aW1lb3V0LgogICAgIiIiCiAgICBzcmNfYnVja2V0LCBzcmNfcGF0aCA9IHBhcnNlX2djc19wYXRoKHNyYykKICAgIGRlc3RfYnVja2V0LCBkZXN0X3BhdGggPSBwYXJzZV9nY3NfcGF0aChkZXN0KQogICAgcmVxdWVzdCA9IHN0b3JhZ2UuU3RvcmFnZU9iamVjdHNSZXdyaXRlUmVxdWVzdCgKICAgICAgICBzb3VyY2VCdWNrZXQ9c3JjX2J1Y2tldCwKICAgICAgICBzb3VyY2VPYmplY3Q9c3JjX3BhdGgsCiAgICAgICAgZGVzdGluYXRpb25CdWNrZXQ9ZGVzdF9idWNrZXQsCiAgICAgICAgZGVzdGluYXRpb25PYmplY3Q9ZGVzdF9wYXRoLAogICAgICAgIGRlc3RpbmF0aW9uS21zS2V5TmFtZT1kZXN0X2ttc19rZXlfbmFtZSwKICAgICAgICBtYXhCeXRlc1Jld3JpdHRlblBlckNhbGw9bWF4X2J5dGVzX3Jld3JpdHRlbl9wZXJfY2FsbCkKICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQub2JqZWN0cy5SZXdyaXRlKHJlcXVlc3QpCiAgICB3aGlsZSBub3QgcmVzcG9uc2UuZG9uZToKICAgICAgbG9nZ2luZy5kZWJ1ZygKICAgICAgICAgICdSZXdyaXRlIHByb2dyZXNzOiAlZCBvZiAlZCBieXRlcywgJXMgdG8gJXMnLAogICAgICAgICAgcmVzcG9uc2UudG90YWxCeXRlc1Jld3JpdHRlbiwgcmVzcG9uc2Uub2JqZWN0U2l6ZSwgc3JjLCBkZXN0KQogICAgICByZXF1ZXN0LnJld3JpdGVUb2tlbiA9IHJlc3BvbnNlLnJld3JpdGVUb2tlbgogICAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50Lm9iamVjdHMuUmV3cml0ZShyZXF1ZXN0KQogICAgICBpZiBzZWxmLl9yZXdyaXRlX2NiIGlzIG5vdCBOb25lOgogICAgICAgIHNlbGYuX3Jld3JpdGVfY2IocmVzcG9uc2UpCgogICAgbG9nZ2luZy5kZWJ1ZygnUmV3cml0ZSBkb25lOiAlcyB0byAlcycsIHNyYywgZGVzdCkKCiAgIyBXZSBpbnRlbnRpb25hbGx5IGRvIG5vdCBkZWNvcmF0ZSB0aGlzIG1ldGhvZCB3aXRoIGEgcmV0cnksIGFzIHJldHJ5aW5nIGlzCiAgIyBoYW5kbGVkIGluIEJhdGNoQXBpUmVxdWVzdC5FeGVjdXRlKCkuCiAgZGVmIGNvcHlfYmF0Y2goc2VsZiwgc3JjX2Rlc3RfcGFpcnMsIGRlc3Rfa21zX2tleV9uYW1lPU5vbmUsCiAgICAgICAgICAgICAgICAgbWF4X2J5dGVzX3Jld3JpdHRlbl9wZXJfY2FsbD1Ob25lKToKICAgICIiIkNvcGllcyB0aGUgZ2l2ZW4gR0NTIG9iamVjdCBmcm9tIHNyYyB0byBkZXN0LgoKICAgIEFyZ3M6CiAgICAgIHNyY19kZXN0X3BhaXJzOiBsaXN0IG9mIChzcmMsIGRlc3QpIHR1cGxlcyBvZiBnczovLzxidWNrZXQ+LzxuYW1lPiBmaWxlcwogICAgICAgICAgICAgICAgICAgICAgcGF0aHMgdG8gY29weSBmcm9tIHNyYyB0byBkZXN0LCBub3QgdG8gZXhjZWVkCiAgICAgICAgICAgICAgICAgICAgICBNQVhfQkFUQ0hfT1BFUkFUSU9OX1NJWkUgaW4gbGVuZ3RoLgogICAgICBkZXN0X2ttc19rZXlfbmFtZTogRXhwZXJpbWVudGFsLiBObyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgogICAgICAgIEVuY3J5cHQgZGVzdCB3aXRoIHRoaXMgQ2xvdWQgS01TIGtleS4gSWYgTm9uZSwgd2lsbCB1c2UgZGVzdCBidWNrZXQKICAgICAgICBlbmNyeXB0aW9uIGRlZmF1bHRzLgogICAgICBtYXhfYnl0ZXNfcmV3cml0dGVuX3Blcl9jYWxsOiBFeHBlcmltZW50YWwuIE5vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CiAgICAgICAgZ3VhcmFudGVlcy4gRWFjaCByZXdyaXRlIGNhbGwgd2lsbCByZXR1cm4gYWZ0ZXIgdGhlc2UgbWFueSBieXRlcy4gVXNlZAogICAgICAgIHByaW1hcmlseSBmb3IgdGVzdGluZy4KCiAgICBSZXR1cm5zOiBMaXN0IG9mIHR1cGxlcyBvZiAoc3JjLCBkZXN0LCBleGNlcHRpb24pIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZQogICAgICAgICAgICAgc3JjX2Rlc3RfcGFpcnMgYXJndW1lbnQsIHdoZXJlIGV4Y2VwdGlvbiBpcyBOb25lIGlmIHRoZSBvcGVyYXRpb24KICAgICAgICAgICAgIHN1Y2NlZWRlZCBvciB0aGUgcmVsZXZhbnQgZXhjZXB0aW9uIGlmIHRoZSBvcGVyYXRpb24gZmFpbGVkLgogICAgIiIiCiAgICBpZiBub3Qgc3JjX2Rlc3RfcGFpcnM6CiAgICAgIHJldHVybiBbXQogICAgcGFpcl90b19yZXF1ZXN0ID0ge30KICAgIGZvciBwYWlyIGluIHNyY19kZXN0X3BhaXJzOgogICAgICBzcmNfYnVja2V0LCBzcmNfcGF0aCA9IHBhcnNlX2djc19wYXRoKHBhaXJbMF0pCiAgICAgIGRlc3RfYnVja2V0LCBkZXN0X3BhdGggPSBwYXJzZV9nY3NfcGF0aChwYWlyWzFdKQogICAgICByZXF1ZXN0ID0gc3RvcmFnZS5TdG9yYWdlT2JqZWN0c1Jld3JpdGVSZXF1ZXN0KAogICAgICAgICAgc291cmNlQnVja2V0PXNyY19idWNrZXQsCiAgICAgICAgICBzb3VyY2VPYmplY3Q9c3JjX3BhdGgsCiAgICAgICAgICBkZXN0aW5hdGlvbkJ1Y2tldD1kZXN0X2J1Y2tldCwKICAgICAgICAgIGRlc3RpbmF0aW9uT2JqZWN0PWRlc3RfcGF0aCwKICAgICAgICAgIGRlc3RpbmF0aW9uS21zS2V5TmFtZT1kZXN0X2ttc19rZXlfbmFtZSwKICAgICAgICAgIG1heEJ5dGVzUmV3cml0dGVuUGVyQ2FsbD1tYXhfYnl0ZXNfcmV3cml0dGVuX3Blcl9jYWxsKQogICAgICBwYWlyX3RvX3JlcXVlc3RbcGFpcl0gPSByZXF1ZXN0CiAgICBwYWlyX3RvX3N0YXR1cyA9IHt9CiAgICB3aGlsZSBUcnVlOgogICAgICBwYWlyc19pbl9iYXRjaCA9IGxpc3Qoc2V0KHNyY19kZXN0X3BhaXJzKSAtIHNldChwYWlyX3RvX3N0YXR1cykpCiAgICAgIGlmIG5vdCBwYWlyc19pbl9iYXRjaDoKICAgICAgICBicmVhawogICAgICBiYXRjaF9yZXF1ZXN0ID0gQmF0Y2hBcGlSZXF1ZXN0KAogICAgICAgICAgYmF0Y2hfdXJsPUdDU19CQVRDSF9FTkRQT0lOVCwKICAgICAgICAgIHJldHJ5YWJsZV9jb2Rlcz1yZXRyeS5TRVJWRVJfRVJST1JfT1JfVElNRU9VVF9DT0RFUykKICAgICAgZm9yIHBhaXIgaW4gcGFpcnNfaW5fYmF0Y2g6CiAgICAgICAgYmF0Y2hfcmVxdWVzdC5BZGQoc2VsZi5jbGllbnQub2JqZWN0cywgJ1Jld3JpdGUnLCBwYWlyX3RvX3JlcXVlc3RbcGFpcl0pCiAgICAgIGFwaV9jYWxscyA9IGJhdGNoX3JlcXVlc3QuRXhlY3V0ZShzZWxmLmNsaWVudC5faHR0cCkgICMgcHlsaW50OiBkaXNhYmxlPXByb3RlY3RlZC1hY2Nlc3MKICAgICAgZm9yIHBhaXIsIGFwaV9jYWxsIGluIHppcChwYWlyc19pbl9iYXRjaCwgYXBpX2NhbGxzKToKICAgICAgICBzcmMsIGRlc3QgPSBwYWlyCiAgICAgICAgcmVzcG9uc2UgPSBhcGlfY2FsbC5yZXNwb25zZQogICAgICAgIGlmIHNlbGYuX3Jld3JpdGVfY2IgaXMgbm90IE5vbmU6CiAgICAgICAgICBzZWxmLl9yZXdyaXRlX2NiKHJlc3BvbnNlKQogICAgICAgIGlmIGFwaV9jYWxsLmlzX2Vycm9yOgogICAgICAgICAgZXhjZXB0aW9uID0gYXBpX2NhbGwuZXhjZXB0aW9uCiAgICAgICAgICAjIFRyYW5zbGF0ZSA0MDQgdG8gdGhlIGFwcHJvcHJpYXRlIG5vdCBmb3VuZCBleGNlcHRpb24uCiAgICAgICAgICBpZiBpc2luc3RhbmNlKGV4Y2VwdGlvbiwgSHR0cEVycm9yKSBhbmQgZXhjZXB0aW9uLnN0YXR1c19jb2RlID09IDQwNDoKICAgICAgICAgICAgZXhjZXB0aW9uID0gKAogICAgICAgICAgICAgICAgR2NzSU9FcnJvcihlcnJuby5FTk9FTlQsICdTb3VyY2UgZmlsZSBub3QgZm91bmQ6ICVzJyAlIHNyYykpCiAgICAgICAgICBwYWlyX3RvX3N0YXR1c1twYWlyXSA9IGV4Y2VwdGlvbgogICAgICAgIGVsaWYgbm90IHJlc3BvbnNlLmRvbmU6CiAgICAgICAgICBsb2dnaW5nLmRlYnVnKAogICAgICAgICAgICAgICdSZXdyaXRlIHByb2dyZXNzOiAlZCBvZiAlZCBieXRlcywgJXMgdG8gJXMnLAogICAgICAgICAgICAgIHJlc3BvbnNlLnRvdGFsQnl0ZXNSZXdyaXR0ZW4sIHJlc3BvbnNlLm9iamVjdFNpemUsIHNyYywgZGVzdCkKICAgICAgICAgIHBhaXJfdG9fcmVxdWVzdFtwYWlyXS5yZXdyaXRlVG9rZW4gPSByZXNwb25zZS5yZXdyaXRlVG9rZW4KICAgICAgICBlbHNlOgogICAgICAgICAgbG9nZ2luZy5kZWJ1ZygnUmV3cml0ZSBkb25lOiAlcyB0byAlcycsIHNyYywgZGVzdCkKICAgICAgICAgIHBhaXJfdG9fc3RhdHVzW3BhaXJdID0gTm9uZQoKICAgIHJldHVybiBbKHBhaXJbMF0sIHBhaXJbMV0sIHBhaXJfdG9fc3RhdHVzW3BhaXJdKSBmb3IgcGFpciBpbiBzcmNfZGVzdF9wYWlyc10KCiAgIyBXZSBpbnRlbnRpb25hbGx5IGRvIG5vdCBkZWNvcmF0ZSB0aGlzIG1ldGhvZCB3aXRoIGEgcmV0cnksIHNpbmNlIHRoZQogICMgdW5kZXJseWluZyBjb3B5IGFuZCBkZWxldGUgb3BlcmF0aW9ucyBhcmUgYWxyZWFkeSBpZGVtcG90ZW50IG9wZXJhdGlvbnMKICAjIHByb3RlY3RlZCBieSByZXRyeSBkZWNvcmF0b3JzLgogIGRlZiBjb3B5dHJlZShzZWxmLCBzcmMsIGRlc3QpOgogICAgIiIiUmVuYW1lcyB0aGUgZ2l2ZW4gR0NTICJkaXJlY3RvcnkiIHJlY3Vyc2l2ZWx5IGZyb20gc3JjIHRvIGRlc3QuCgogICAgQXJnczoKICAgICAgc3JjOiBHQ1MgZmlsZSBwYXRoIHBhdHRlcm4gaW4gdGhlIGZvcm0gZ3M6Ly88YnVja2V0Pi88bmFtZT4vLgogICAgICBkZXN0OiBHQ1MgZmlsZSBwYXRoIHBhdHRlcm4gaW4gdGhlIGZvcm0gZ3M6Ly88YnVja2V0Pi88bmFtZT4vLgogICAgIiIiCiAgICBhc3NlcnQgc3JjLmVuZHN3aXRoKCcvJykKICAgIGFzc2VydCBkZXN0LmVuZHN3aXRoKCcvJykKICAgIGZvciBlbnRyeSBpbiBzZWxmLmxpc3RfcHJlZml4KHNyYyk6CiAgICAgIHJlbF9wYXRoID0gZW50cnlbbGVuKHNyYyk6XQogICAgICBzZWxmLmNvcHkoZW50cnksIGRlc3QgKyByZWxfcGF0aCkKCiAgIyBXZSBpbnRlbnRpb25hbGx5IGRvIG5vdCBkZWNvcmF0ZSB0aGlzIG1ldGhvZCB3aXRoIGEgcmV0cnksIHNpbmNlIHRoZQogICMgdW5kZXJseWluZyBjb3B5IGFuZCBkZWxldGUgb3BlcmF0aW9ucyBhcmUgYWxyZWFkeSBpZGVtcG90ZW50IG9wZXJhdGlvbnMKICAjIHByb3RlY3RlZCBieSByZXRyeSBkZWNvcmF0b3JzLgogIGRlZiByZW5hbWUoc2VsZiwgc3JjLCBkZXN0KToKICAgICIiIlJlbmFtZXMgdGhlIGdpdmVuIEdDUyBvYmplY3QgZnJvbSBzcmMgdG8gZGVzdC4KCiAgICBBcmdzOgogICAgICBzcmM6IEdDUyBmaWxlIHBhdGggcGF0dGVybiBpbiB0aGUgZm9ybSBnczovLzxidWNrZXQ+LzxuYW1lPi4KICAgICAgZGVzdDogR0NTIGZpbGUgcGF0aCBwYXR0ZXJuIGluIHRoZSBmb3JtIGdzOi8vPGJ1Y2tldD4vPG5hbWU+LgogICAgIiIiCiAgICBzZWxmLmNvcHkoc3JjLCBkZXN0KQogICAgc2VsZi5kZWxldGUoc3JjKQoKICBAcmV0cnkud2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmKAogICAgICByZXRyeV9maWx0ZXI9cmV0cnkucmV0cnlfb25fc2VydmVyX2Vycm9yc19hbmRfdGltZW91dF9maWx0ZXIpCiAgZGVmIGV4aXN0cyhzZWxmLCBwYXRoKToKICAgICIiIlJldHVybnMgd2hldGhlciB0aGUgZ2l2ZW4gR0NTIG9iamVjdCBleGlzdHMuCgogICAgQXJnczoKICAgICAgcGF0aDogR0NTIGZpbGUgcGF0aCBwYXR0ZXJuIGluIHRoZSBmb3JtIGdzOi8vPGJ1Y2tldD4vPG5hbWU+LgogICAgIiIiCiAgICBidWNrZXQsIG9iamVjdF9wYXRoID0gcGFyc2VfZ2NzX3BhdGgocGF0aCkKICAgIHRyeToKICAgICAgcmVxdWVzdCA9IHN0b3JhZ2UuU3RvcmFnZU9iamVjdHNHZXRSZXF1ZXN0KAogICAgICAgICAgYnVja2V0PWJ1Y2tldCwgb2JqZWN0PW9iamVjdF9wYXRoKQogICAgICBzZWxmLmNsaWVudC5vYmplY3RzLkdldChyZXF1ZXN0KSAgIyBtZXRhZGF0YQogICAgICByZXR1cm4gVHJ1ZQogICAgZXhjZXB0IEh0dHBFcnJvciBhcyBodHRwX2Vycm9yOgogICAgICBpZiBodHRwX2Vycm9yLnN0YXR1c19jb2RlID09IDQwNDoKICAgICAgICAjIEhUVFAgNDA0IGluZGljYXRlcyB0aGF0IHRoZSBmaWxlIGRpZCBub3QgZXhpc3QKICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgZWxzZToKICAgICAgICAjIFdlIHJlLXJhaXNlIGFsbCBvdGhlciBleGNlcHRpb25zCiAgICAgICAgcmFpc2UKCiAgQHJldHJ5LndpdGhfZXhwb25lbnRpYWxfYmFja29mZigKICAgICAgcmV0cnlfZmlsdGVyPXJldHJ5LnJldHJ5X29uX3NlcnZlcl9lcnJvcnNfYW5kX3RpbWVvdXRfZmlsdGVyKQogIGRlZiBjaGVja3N1bShzZWxmLCBwYXRoKToKICAgICIiIkxvb2tzIHVwIHRoZSBjaGVja3N1bSBvZiBhIEdDUyBvYmplY3QuCgogICAgQXJnczoKICAgICAgcGF0aDogR0NTIGZpbGUgcGF0aCBwYXR0ZXJuIGluIHRoZSBmb3JtIGdzOi8vPGJ1Y2tldD4vPG5hbWU+LgogICAgIiIiCiAgICBidWNrZXQsIG9iamVjdF9wYXRoID0gcGFyc2VfZ2NzX3BhdGgocGF0aCkKICAgIHJlcXVlc3QgPSBzdG9yYWdlLlN0b3JhZ2VPYmplY3RzR2V0UmVxdWVzdCgKICAgICAgICBidWNrZXQ9YnVja2V0LCBvYmplY3Q9b2JqZWN0X3BhdGgpCiAgICByZXR1cm4gc2VsZi5jbGllbnQub2JqZWN0cy5HZXQocmVxdWVzdCkuY3JjMzJjCgogIEByZXRyeS53aXRoX2V4cG9uZW50aWFsX2JhY2tvZmYoCiAgICAgIHJldHJ5X2ZpbHRlcj1yZXRyeS5yZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2FuZF90aW1lb3V0X2ZpbHRlcikKICBkZWYgc2l6ZShzZWxmLCBwYXRoKToKICAgICIiIlJldHVybnMgdGhlIHNpemUgb2YgYSBzaW5nbGUgR0NTIG9iamVjdC4KCiAgICBUaGlzIG1ldGhvZCBkb2VzIG5vdCBwZXJmb3JtIGdsb2IgZXhwYW5zaW9uLiBIZW5jZSB0aGUgZ2l2ZW4gcGF0aCBtdXN0IGJlCiAgICBmb3IgYSBzaW5nbGUgR0NTIG9iamVjdC4KCiAgICBSZXR1cm5zOiBzaXplIG9mIHRoZSBHQ1Mgb2JqZWN0IGluIGJ5dGVzLgogICAgIiIiCiAgICBidWNrZXQsIG9iamVjdF9wYXRoID0gcGFyc2VfZ2NzX3BhdGgocGF0aCkKICAgIHJlcXVlc3QgPSBzdG9yYWdlLlN0b3JhZ2VPYmplY3RzR2V0UmVxdWVzdCgKICAgICAgICBidWNrZXQ9YnVja2V0LCBvYmplY3Q9b2JqZWN0X3BhdGgpCiAgICByZXR1cm4gc2VsZi5jbGllbnQub2JqZWN0cy5HZXQocmVxdWVzdCkuc2l6ZQoKICBAcmV0cnkud2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmKAogICAgICByZXRyeV9maWx0ZXI9cmV0cnkucmV0cnlfb25fc2VydmVyX2Vycm9yc19hbmRfdGltZW91dF9maWx0ZXIpCiAgZGVmIGttc19rZXkoc2VsZiwgcGF0aCk6CiAgICAiIiJSZXR1cm5zIHRoZSBLTVMga2V5IG9mIGEgc2luZ2xlIEdDUyBvYmplY3QuCgogICAgVGhpcyBtZXRob2QgZG9lcyBub3QgcGVyZm9ybSBnbG9iIGV4cGFuc2lvbi4gSGVuY2UgdGhlIGdpdmVuIHBhdGggbXVzdCBiZQogICAgZm9yIGEgc2luZ2xlIEdDUyBvYmplY3QuCgogICAgUmV0dXJuczogS01TIGtleSBuYW1lIG9mIHRoZSBHQ1Mgb2JqZWN0IGFzIGEgc3RyaW5nLCBvciBOb25lIGlmIGl0IGRvZXNuJ3QKICAgICAgaGF2ZSBvbmUuCiAgICAiIiIKICAgIGJ1Y2tldCwgb2JqZWN0X3BhdGggPSBwYXJzZV9nY3NfcGF0aChwYXRoKQogICAgcmVxdWVzdCA9IHN0b3JhZ2UuU3RvcmFnZU9iamVjdHNHZXRSZXF1ZXN0KAogICAgICAgIGJ1Y2tldD1idWNrZXQsIG9iamVjdD1vYmplY3RfcGF0aCkKICAgIHJldHVybiBzZWxmLmNsaWVudC5vYmplY3RzLkdldChyZXF1ZXN0KS5rbXNLZXlOYW1lCgogIEByZXRyeS53aXRoX2V4cG9uZW50aWFsX2JhY2tvZmYoCiAgICAgIHJldHJ5X2ZpbHRlcj1yZXRyeS5yZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2FuZF90aW1lb3V0X2ZpbHRlcikKICBkZWYgbGFzdF91cGRhdGVkKHNlbGYsIHBhdGgpOgogICAgIiIiUmV0dXJucyB0aGUgbGFzdCB1cGRhdGVkIGVwb2NoIHRpbWUgb2YgYSBzaW5nbGUgR0NTIG9iamVjdC4KCiAgICBUaGlzIG1ldGhvZCBkb2VzIG5vdCBwZXJmb3JtIGdsb2IgZXhwYW5zaW9uLiBIZW5jZSB0aGUgZ2l2ZW4gcGF0aCBtdXN0IGJlCiAgICBmb3IgYSBzaW5nbGUgR0NTIG9iamVjdC4KCiAgICBSZXR1cm5zOiBsYXN0IHVwZGF0ZWQgdGltZSBvZiB0aGUgR0NTIG9iamVjdCBpbiBzZWNvbmQuCiAgICAiIiIKICAgIGJ1Y2tldCwgb2JqZWN0X3BhdGggPSBwYXJzZV9nY3NfcGF0aChwYXRoKQogICAgcmVxdWVzdCA9IHN0b3JhZ2UuU3RvcmFnZU9iamVjdHNHZXRSZXF1ZXN0KAogICAgICAgIGJ1Y2tldD1idWNrZXQsIG9iamVjdD1vYmplY3RfcGF0aCkKICAgIGRhdGV0aW1lID0gc2VsZi5jbGllbnQub2JqZWN0cy5HZXQocmVxdWVzdCkudXBkYXRlZAogICAgcmV0dXJuICh0aW1lLm1rdGltZShkYXRldGltZS50aW1ldHVwbGUoKSkgLSB0aW1lLnRpbWV6b25lCiAgICAgICAgICAgICsgZGF0ZXRpbWUubWljcm9zZWNvbmQgLyAxMDAwMDAwLjApCgogIEByZXRyeS53aXRoX2V4cG9uZW50aWFsX2JhY2tvZmYoCiAgICAgIHJldHJ5X2ZpbHRlcj1yZXRyeS5yZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2FuZF90aW1lb3V0X2ZpbHRlcikKICBkZWYgbGlzdF9wcmVmaXgoc2VsZiwgcGF0aCk6CiAgICAiIiJMaXN0cyBmaWxlcyBtYXRjaGluZyB0aGUgcHJlZml4LgoKICAgIEFyZ3M6CiAgICAgIHBhdGg6IEdDUyBmaWxlIHBhdGggcGF0dGVybiBpbiB0aGUgZm9ybSBnczovLzxidWNrZXQ+L1tuYW1lXS4KCiAgICBSZXR1cm5zOgogICAgICBEaWN0aW9uYXJ5IG9mIGZpbGUgbmFtZSAtPiBzaXplLgogICAgIiIiCiAgICBidWNrZXQsIHByZWZpeCA9IHBhcnNlX2djc19wYXRoKHBhdGgsIG9iamVjdF9vcHRpb25hbD1UcnVlKQogICAgcmVxdWVzdCA9IHN0b3JhZ2UuU3RvcmFnZU9iamVjdHNMaXN0UmVxdWVzdChidWNrZXQ9YnVja2V0LCBwcmVmaXg9cHJlZml4KQogICAgZmlsZV9zaXplcyA9IHt9CiAgICBjb3VudGVyID0gMAogICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCiAgICBsb2dnaW5nLmluZm8oIlN0YXJ0aW5nIHRoZSBzaXplIGVzdGltYXRpb24gb2YgdGhlIGlucHV0IikKICAgIHdoaWxlIFRydWU6CiAgICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQub2JqZWN0cy5MaXN0KHJlcXVlc3QpCiAgICAgIGZvciBpdGVtIGluIHJlc3BvbnNlLml0ZW1zOgogICAgICAgIGZpbGVfbmFtZSA9ICdnczovLyVzLyVzJyAlIChpdGVtLmJ1Y2tldCwgaXRlbS5uYW1lKQogICAgICAgIGZpbGVfc2l6ZXNbZmlsZV9uYW1lXSA9IGl0ZW0uc2l6ZQogICAgICAgIGNvdW50ZXIgKz0gMQogICAgICAgIGlmIGNvdW50ZXIgJSAxMDAwMCA9PSAwOgogICAgICAgICAgbG9nZ2luZy5pbmZvKCJGaW5pc2hlZCBjb21wdXRpbmcgc2l6ZSBvZjogJXMgZmlsZXMiLCBsZW4oZmlsZV9zaXplcykpCiAgICAgIGlmIHJlc3BvbnNlLm5leHRQYWdlVG9rZW46CiAgICAgICAgcmVxdWVzdC5wYWdlVG9rZW4gPSByZXNwb25zZS5uZXh0UGFnZVRva2VuCiAgICAgIGVsc2U6CiAgICAgICAgYnJlYWsKICAgIGxvZ2dpbmcuaW5mbygiRmluaXNoZWQgbGlzdGluZyAlcyBmaWxlcyBpbiAlcyBzZWNvbmRzLiIsCiAgICAgICAgICAgICAgICAgY291bnRlciwgdGltZS50aW1lKCkgLSBzdGFydF90aW1lKQogICAgcmV0dXJuIGZpbGVfc2l6ZXMKCgpjbGFzcyBHY3NEb3dubG9hZGVyKERvd25sb2FkZXIpOgogIGRlZiBfX2luaXRfXyhzZWxmLCBjbGllbnQsIHBhdGgsIGJ1ZmZlcl9zaXplKToKICAgIHNlbGYuX2NsaWVudCA9IGNsaWVudAogICAgc2VsZi5fcGF0aCA9IHBhdGgKICAgIHNlbGYuX2J1Y2tldCwgc2VsZi5fbmFtZSA9IHBhcnNlX2djc19wYXRoKHBhdGgpCiAgICBzZWxmLl9idWZmZXJfc2l6ZSA9IGJ1ZmZlcl9zaXplCgogICAgIyBHZXQgb2JqZWN0IHN0YXRlLgogICAgc2VsZi5fZ2V0X3JlcXVlc3QgPSAoc3RvcmFnZS5TdG9yYWdlT2JqZWN0c0dldFJlcXVlc3QoCiAgICAgICAgYnVja2V0PXNlbGYuX2J1Y2tldCwgb2JqZWN0PXNlbGYuX25hbWUpKQogICAgdHJ5OgogICAgICBtZXRhZGF0YSA9IHNlbGYuX2dldF9vYmplY3RfbWV0YWRhdGEoc2VsZi5fZ2V0X3JlcXVlc3QpCiAgICBleGNlcHQgSHR0cEVycm9yIGFzIGh0dHBfZXJyb3I6CiAgICAgIGlmIGh0dHBfZXJyb3Iuc3RhdHVzX2NvZGUgPT0gNDA0OgogICAgICAgIHJhaXNlIElPRXJyb3IoZXJybm8uRU5PRU5ULCAnTm90IGZvdW5kOiAlcycgJSBzZWxmLl9wYXRoKQogICAgICBlbHNlOgogICAgICAgIGxvZ2dpbmcuZXJyb3IoJ0hUVFAgZXJyb3Igd2hpbGUgcmVxdWVzdGluZyBmaWxlICVzOiAlcycsIHNlbGYuX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICBodHRwX2Vycm9yKQogICAgICAgIHJhaXNlCiAgICBzZWxmLl9zaXplID0gbWV0YWRhdGEuc2l6ZQoKICAgICMgRW5zdXJlIHJlYWQgaXMgZnJvbSBmaWxlIG9mIHRoZSBjb3JyZWN0IGdlbmVyYXRpb24uCiAgICBzZWxmLl9nZXRfcmVxdWVzdC5nZW5lcmF0aW9uID0gbWV0YWRhdGEuZ2VuZXJhdGlvbgoKICAgICMgSW5pdGlhbGl6ZSByZWFkIGJ1ZmZlciBzdGF0ZS4KICAgIHNlbGYuX2Rvd25sb2FkX3N0cmVhbSA9IGlvLkJ5dGVzSU8oKQogICAgc2VsZi5fZG93bmxvYWRlciA9IHRyYW5zZmVyLkRvd25sb2FkKAogICAgICAgIHNlbGYuX2Rvd25sb2FkX3N0cmVhbSwgYXV0b190cmFuc2Zlcj1GYWxzZSwgY2h1bmtzaXplPXNlbGYuX2J1ZmZlcl9zaXplKQogICAgc2VsZi5fY2xpZW50Lm9iamVjdHMuR2V0KHNlbGYuX2dldF9yZXF1ZXN0LCBkb3dubG9hZD1zZWxmLl9kb3dubG9hZGVyKQoKICBAcmV0cnkud2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmKAogICAgICByZXRyeV9maWx0ZXI9cmV0cnkucmV0cnlfb25fc2VydmVyX2Vycm9yc19hbmRfdGltZW91dF9maWx0ZXIpCiAgZGVmIF9nZXRfb2JqZWN0X21ldGFkYXRhKHNlbGYsIGdldF9yZXF1ZXN0KToKICAgIHJldHVybiBzZWxmLl9jbGllbnQub2JqZWN0cy5HZXQoZ2V0X3JlcXVlc3QpCgogIEBwcm9wZXJ0eQogIGRlZiBzaXplKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX3NpemUKCiAgZGVmIGdldF9yYW5nZShzZWxmLCBzdGFydCwgZW5kKToKICAgIHNlbGYuX2Rvd25sb2FkX3N0cmVhbS5zZWVrKDApCiAgICBzZWxmLl9kb3dubG9hZF9zdHJlYW0udHJ1bmNhdGUoMCkKICAgIHNlbGYuX2Rvd25sb2FkZXIuR2V0UmFuZ2Uoc3RhcnQsIGVuZCAtIDEpCiAgICByZXR1cm4gc2VsZi5fZG93bmxvYWRfc3RyZWFtLmdldHZhbHVlKCkKCgpjbGFzcyBHY3NVcGxvYWRlcihVcGxvYWRlcik6CiAgZGVmIF9faW5pdF9fKHNlbGYsIGNsaWVudCwgcGF0aCwgbWltZV90eXBlKToKICAgIHNlbGYuX2NsaWVudCA9IGNsaWVudAogICAgc2VsZi5fcGF0aCA9IHBhdGgKICAgIHNlbGYuX2J1Y2tldCwgc2VsZi5fbmFtZSA9IHBhcnNlX2djc19wYXRoKHBhdGgpCiAgICBzZWxmLl9taW1lX3R5cGUgPSBtaW1lX3R5cGUKCiAgICAjIFNldCB1cCBjb21tdW5pY2F0aW9uIHdpdGggY2hpbGQgdGhyZWFkLgogICAgcGFyZW50X2Nvbm4sIGNoaWxkX2Nvbm4gPSBtdWx0aXByb2Nlc3NpbmcuUGlwZSgpCiAgICBzZWxmLl9jaGlsZF9jb25uID0gY2hpbGRfY29ubgogICAgc2VsZi5fY29ubiA9IHBhcmVudF9jb25uCgogICAgIyBTZXQgdXAgdXBsb2FkZXIuCiAgICBzZWxmLl9pbnNlcnRfcmVxdWVzdCA9IChzdG9yYWdlLlN0b3JhZ2VPYmplY3RzSW5zZXJ0UmVxdWVzdCgKICAgICAgICBidWNrZXQ9c2VsZi5fYnVja2V0LCBuYW1lPXNlbGYuX25hbWUpKQogICAgc2VsZi5fdXBsb2FkID0gdHJhbnNmZXIuVXBsb2FkKAogICAgICAgIFBpcGVTdHJlYW0oc2VsZi5fY2hpbGRfY29ubiksCiAgICAgICAgc2VsZi5fbWltZV90eXBlLAogICAgICAgIGNodW5rc2l6ZT1XUklURV9DSFVOS19TSVpFKQogICAgc2VsZi5fdXBsb2FkLnN0cmF0ZWd5ID0gdHJhbnNmZXIuUkVTVU1BQkxFX1VQTE9BRAoKICAgICMgU3RhcnQgdXBsb2FkaW5nIHRocmVhZC4KICAgIHNlbGYuX3VwbG9hZF90aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZWxmLl9zdGFydF91cGxvYWQpCiAgICBzZWxmLl91cGxvYWRfdGhyZWFkLmRhZW1vbiA9IFRydWUKICAgIHNlbGYuX3VwbG9hZF90aHJlYWQubGFzdF9lcnJvciA9IE5vbmUKICAgIHNlbGYuX3VwbG9hZF90aHJlYWQuc3RhcnQoKQoKICAjIFRPRE8oc2lsdml1Yyk6IFJlZmFjdG9yIHNvIHRoYXQgcmV0cnkgbG9naWMgY2FuIGJlIGFwcGxpZWQuCiAgIyBUaGVyZSBpcyByZXRyeSBsb2dpYyBpbiB0aGUgdW5kZXJseWluZyB0cmFuc2ZlciBsaWJyYXJ5IGJ1dCB3ZSBzaG91bGQgbWFrZQogICMgaXQgbW9yZSBleHBsaWNpdCBzbyB3ZSBjYW4gY29udHJvbCB0aGUgcmV0cnkgcGFyYW1ldGVycy4KICBAcmV0cnkubm9fcmV0cmllcyAgIyBVc2luZyBub19yZXRyaWVzIG1hcmtzIHRoaXMgYXMgYW4gaW50ZWdyYXRpb24gcG9pbnQuCiAgZGVmIF9zdGFydF91cGxvYWQoc2VsZik6CiAgICAjIFRoaXMgc3RhcnRzIHRoZSB1cGxvYWRlciB0aHJlYWQuICBXZSBhcmUgZm9yY2VkIHRvIHJ1biB0aGUgdXBsb2FkZXIgaW4KICAgICMgYW5vdGhlciB0aHJlYWQgYmVjYXVzZSB0aGUgYXBpdG9vbHMgdXBsb2FkZXIgaW5zaXN0cyBvbiB0YWtpbmcgYSBzdHJlYW0KICAgICMgYXMgaW5wdXQuIEhhcHBpbHksIHRoaXMgYWxzbyBtZWFucyB3ZSBnZXQgYXN5bmNocm9ub3VzIEkvTyB0byBHQ1MuCiAgICAjCiAgICAjIFRoZSB1cGxvYWRlciBieSBkZWZhdWx0IHRyYW5zZmVycyBkYXRhIGluIGNodW5rcyBvZiAxMDI0ICogMTAyNCBieXRlcyBhdAogICAgIyBhIHRpbWUsIGJ1ZmZlcmluZyB3cml0ZXMgdW50aWwgdGhhdCBzaXplIGlzIHJlYWNoZWQuCiAgICB0cnk6CiAgICAgIHNlbGYuX2NsaWVudC5vYmplY3RzLkluc2VydChzZWxmLl9pbnNlcnRfcmVxdWVzdCwgdXBsb2FkPXNlbGYuX3VwbG9hZCkKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZTogICMgcHlsaW50OiBkaXNhYmxlPWJyb2FkLWV4Y2VwdAogICAgICBsb2dnaW5nLmVycm9yKCdFcnJvciBpbiBfc3RhcnRfdXBsb2FkIHdoaWxlIGluc2VydGluZyBmaWxlICVzOiAlcycsCiAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGF0aCwgdHJhY2ViYWNrLmZvcm1hdF9leGMoKSkKICAgICAgc2VsZi5fdXBsb2FkX3RocmVhZC5sYXN0X2Vycm9yID0gZQogICAgZmluYWxseToKICAgICAgc2VsZi5fY2hpbGRfY29ubi5jbG9zZSgpCgogIGRlZiBwdXQoc2VsZiwgZGF0YSk6CiAgICB0cnk6CiAgICAgIHNlbGYuX2Nvbm4uc2VuZF9ieXRlcyhkYXRhLnRvYnl0ZXMoKSkKICAgIGV4Y2VwdCBFT0ZFcnJvcjoKICAgICAgaWYgc2VsZi5fdXBsb2FkX3RocmVhZC5sYXN0X2Vycm9yIGlzIG5vdCBOb25lOgogICAgICAgIHJhaXNlIHNlbGYuX3VwbG9hZF90aHJlYWQubGFzdF9lcnJvciAjIHB5bGludDogZGlzYWJsZT1yYWlzaW5nLWJhZC10eXBlCiAgICAgIHJhaXNlCgogIGRlZiBmaW5pc2goc2VsZik6CiAgICBzZWxmLl9jb25uLmNsb3NlKCkKICAgICMgVE9ETyh1ZGltKTogQWRkIHRpbWVvdXQ9REVGQVVMVF9IVFRQX1RJTUVPVVRfU0VDT05EUyAqIDIgYW5kIHJhaXNlIGlmCiAgICAjIGlzQWxpdmUgaXMgVHJ1ZS4KICAgIHNlbGYuX3VwbG9hZF90aHJlYWQuam9pbigpCiAgICAjIENoZWNrIGZvciBleGNlcHRpb24gc2luY2UgdGhlIGxhc3QgcHV0KCkgY2FsbC4KICAgIGlmIHNlbGYuX3VwbG9hZF90aHJlYWQubGFzdF9lcnJvciBpcyBub3QgTm9uZToKICAgICAgcmFpc2Ugc2VsZi5fdXBsb2FkX3RocmVhZC5sYXN0X2Vycm9yICAjIHB5bGludDogZGlzYWJsZT1yYWlzaW5nLWJhZC10eXBlCn1yWIMAAChYDwAAAEdjc1VwbG9hZGVyLnB1dFgDAAAAZGVmTU0CTVQCh1gOAAAAR2NzSU8uY29weXRyZWVYAwAAAGRlZk1hAU1tAYdYDQAAAEdjc0Rvd25sb2FkZXJYBQAAAGNsYXNzTfABTRwCh1gMAAAAR2NzSU8uZXhpc3RzWAMAAABkZWZNewFNkAGHWA0AAABHY3NJTy5fX25ld19fWAMAAABkZWZLdkuKh1gMAAAAR2NzSU8uZGVsZXRlWAMAAABkZWZLukvMh1gKAAAAR2NzSU8uY29weVgDAAAAZGVmS/FNGAGHWA0AAABHY3NJTy5rbXNfa2V5WAMAAABkZWZNrQFNvAGHWBYAAABHY3NEb3dubG9hZGVyLl9faW5pdF9fWAMAAABkZWZN8QFNDQKHWAoAAABHY3NJTy5vcGVuWAMAAABkZWZLm0u5h1gZAAAAR2NzVXBsb2FkZXIuX3N0YXJ0X3VwbG9hZFgDAAAAZGVmTTwCTUwCh1giAAAAR2NzRG93bmxvYWRlci5fZ2V0X29iamVjdF9tZXRhZGF0YVgDAAAAZGVmTQ4CTRICh1gFAAAAR2NzSU9YBQAAAGNsYXNzS3NN7gGHWA4AAABwYXJzZV9nY3NfcGF0aFgDAAAAZGVmS2ZLbIdYEAAAAEdjc0lPLmNvcHlfYmF0Y2hYAwAAAGRlZk0bAU1dAYdYFwAAAEdjc0Rvd25sb2FkZXIuZ2V0X3JhbmdlWAMAAABkZWZNFwJNHAKHWBIAAABHY3NEb3dubG9hZGVyLnNpemVYAwAAAGRlZk0TAk0WAodYEgAAAEdjc0lPLmxhc3RfdXBkYXRlZFgDAAAAZGVmTb0BTc0Bh1gLAAAAR2NzVXBsb2FkZXJYBQAAAGNsYXNzTR4CTV0Ch1gSAAAAR2NzSU8uZGVsZXRlX2JhdGNoWAMAAABkZWZLz0vwh1gkAAAAR2NzSU8uX3NldF9yZXdyaXRlX3Jlc3BvbnNlX2NhbGxiYWNrWAMAAABkZWZLk0uah1gMAAAAR2NzSU8ucmVuYW1lWAMAAABkZWZNcQFNegGHWAoAAABHY3NJTy5zaXplWAMAAABkZWZNngFNrAGHWA4AAABHY3NJTy5jaGVja3N1bVgDAAAAZGVmTZEBTZ0Bh1gKAAAAR2NzSU9FcnJvclgFAAAAY2xhc3NLbktxh1gRAAAAR2NzSU8ubGlzdF9wcmVmaXhYAwAAAGRlZk3OAU3uAYdYEgAAAEdjc1VwbG9hZGVyLmZpbmlzaFgDAAAAZGVmTVUCTV0Ch1gOAAAAR2NzSU8uX19pbml0X19YAwAAAGRlZkuLS5KHWBQAAABHY3NVcGxvYWRlci5fX2luaXRfX1gDAAAAZGVmTR8CTTgCh3V9clmDAAAoWBIAAABHY3NJTy5kZWxldGVfYmF0Y2hqY2YAAFgOAAAAR2NzSU8uY29weXRyZWVqY2YAAFgKAAAAR2NzSU8ub3BlbmpjZgAAWAUAAABHY3NJT2pjZgAAWBAAAABHY3NJTy5jb3B5X2JhdGNoamNmAABYDAAAAEdjc0lPLnJlbmFtZWpjZgAAdWp9aQAAWBgAAABhcGFjaGVfYmVhbS5pby5nY3AuZ2NzaW9yWoMAAIWBcluDAAB9clyDAABidFUkYXBhY2hlX2JlYW0ubWV0cmljcy5tb25pdG9yaW5nX2luZm9zKFjGIgAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgojIGN5dGhvbjogbGFuZ3VhZ2VfbGV2ZWw9MwojIGN5dGhvbjogcHJvZmlsZT1UcnVlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IHRpbWUKCmZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCB0aW1lc3RhbXBfcGIyCgpmcm9tIGFwYWNoZV9iZWFtLm1ldHJpY3MuY2VsbHMgaW1wb3J0IERpc3RyaWJ1dGlvbkRhdGEKZnJvbSBhcGFjaGVfYmVhbS5tZXRyaWNzLmNlbGxzIGltcG9ydCBEaXN0cmlidXRpb25SZXN1bHQKZnJvbSBhcGFjaGVfYmVhbS5tZXRyaWNzLmNlbGxzIGltcG9ydCBHYXVnZURhdGEKZnJvbSBhcGFjaGVfYmVhbS5tZXRyaWNzLmNlbGxzIGltcG9ydCBHYXVnZVJlc3VsdApmcm9tIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5IGltcG9ydCBjb21tb25fdXJucwpmcm9tIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjIgaW1wb3J0IENvdW50ZXJEYXRhCmZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMiBpbXBvcnQgTWV0cmljCmZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMiBpbXBvcnQgTW9uaXRvcmluZ0luZm8KCkVMRU1FTlRfQ09VTlRfVVJOID0gY29tbW9uX3VybnMubW9uaXRvcmluZ19pbmZvcy5FTEVNRU5UX0NPVU5ULnVybgpTVEFSVF9CVU5ETEVfTVNFQ1NfVVJOID0gY29tbW9uX3VybnMubW9uaXRvcmluZ19pbmZvcy5TVEFSVF9CVU5ETEVfTVNFQ1MudXJuClBST0NFU1NfQlVORExFX01TRUNTX1VSTiA9IGNvbW1vbl91cm5zLm1vbml0b3JpbmdfaW5mb3MuUFJPQ0VTU19CVU5ETEVfTVNFQ1MudXJuCkZJTklTSF9CVU5ETEVfTVNFQ1NfVVJOID0gY29tbW9uX3VybnMubW9uaXRvcmluZ19pbmZvcy5GSU5JU0hfQlVORExFX01TRUNTLnVybgpUT1RBTF9NU0VDU19VUk4gPSBjb21tb25fdXJucy5tb25pdG9yaW5nX2luZm9zLlRPVEFMX01TRUNTLnVybgpVU0VSX0NPVU5URVJfVVJOX1BSRUZJWCA9ICgKICAgIGNvbW1vbl91cm5zLm1vbml0b3JpbmdfaW5mb3MuVVNFUl9DT1VOVEVSX1VSTl9QUkVGSVgudXJuKQoKIyBUT0RPKGFqYW1hdG8pOiBJbXBsZW1lbnQgdGhlIHJlbWFpbmluZyB0eXBlcywgaS5lLiBEb3VibGUgdHlwZXMKIyBFeHRyZW1hIHR5cGVzLCBldGMuIFNlZToKIyBodHRwczovL3MuYXBhY2hlLm9yZy9iZWFtLWZuLWFwaS1tZXRyaWNzClNVTV9JTlQ2NF9UWVBFID0gY29tbW9uX3VybnMubW9uaXRvcmluZ19pbmZvX3R5cGVzLlNVTV9JTlQ2NF9UWVBFLnVybgpESVNUUklCVVRJT05fSU5UNjRfVFlQRSA9ICgKICAgIGNvbW1vbl91cm5zLm1vbml0b3JpbmdfaW5mb190eXBlcy5ESVNUUklCVVRJT05fSU5UNjRfVFlQRS51cm4pCkxBVEVTVF9JTlQ2NF9UWVBFID0gY29tbW9uX3VybnMubW9uaXRvcmluZ19pbmZvX3R5cGVzLkxBVEVTVF9JTlQ2NF9UWVBFLnVybgoKQ09VTlRFUl9UWVBFUyA9IHNldChbU1VNX0lOVDY0X1RZUEVdKQpESVNUUklCVVRJT05fVFlQRVMgPSBzZXQoW0RJU1RSSUJVVElPTl9JTlQ2NF9UWVBFXSkKR0FVR0VfVFlQRVMgPSBzZXQoW0xBVEVTVF9JTlQ2NF9UWVBFXSkKCgpkZWYgdG9fdGltZXN0YW1wX3Byb3RvKHRpbWVzdGFtcF9zZWNzKToKICAiIiJDb252ZXJ0cyBzZWNvbmRzIHNpbmNlIGVwb2NoIHRvIGEgZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcC4KCiAgQXJnczoKICAgIHRpbWVzdGFtcF9zZWNzOiBUaGUgdGltZXN0YW1wIGluIHNlY29uZHMgc2luY2UgZXBvY2guCiAgIiIiCiAgc2Vjb25kcyA9IGludCh0aW1lc3RhbXBfc2VjcykKICBuYW5vcyA9IGludCgodGltZXN0YW1wX3NlY3MgLSBzZWNvbmRzKSAqIDEwKio5KQogIHJldHVybiB0aW1lc3RhbXBfcGIyLlRpbWVzdGFtcChzZWNvbmRzPXNlY29uZHMsIG5hbm9zPW5hbm9zKQoKCmRlZiB0b190aW1lc3RhbXBfc2Vjcyh0aW1lc3RhbXBfcHJvdG8pOgogICIiIkNvbnZlcnRzIGEgZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCB0byBzZWNvbmRzIHNpbmNlIGVwb2NoLgoKICBBcmdzOgogICAgdGltZXN0YW1wX3Byb3RvOiBUaGUgZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcC4KICAiIiIKICByZXR1cm4gdGltZXN0YW1wX3Byb3RvLnNlY29uZHMgKyB0aW1lc3RhbXBfcHJvdG8ubmFub3MgKiAxMCoqLTkKCgpkZWYgZXh0cmFjdF9jb3VudGVyX3ZhbHVlKG1vbml0b3JpbmdfaW5mb19wcm90byk6CiAgIiIiUmV0dXJucyB0aGUgaW50IGNvdXRuZXIgdmFsdWUgb2YgdGhlIG1vbml0b3JpbmcgaW5mby4iIiIKICBpZiBpc19jb3VudGVyKG1vbml0b3JpbmdfaW5mb19wcm90bykgb3IgaXNfZ2F1Z2UobW9uaXRvcmluZ19pbmZvX3Byb3RvKToKICAgIHJldHVybiBtb25pdG9yaW5nX2luZm9fcHJvdG8ubWV0cmljLmNvdW50ZXJfZGF0YS5pbnQ2NF92YWx1ZQogIHJldHVybiBOb25lCgoKZGVmIGV4dHJhY3RfZGlzdHJpYnV0aW9uKG1vbml0b3JpbmdfaW5mb19wcm90byk6CiAgIiIiUmV0dXJucyB0aGUgcmVsZXZhbnQgRGlzdHJpYnV0aW9uSW50NjQgb3IgRGlzdHJpYnV0aW9uRG91YmxlLgoKICBBcmdzOgogICAgbW9uaXRvcmluZ19pbmZvX3Byb3RvOiBUaGUgbW9uaXRvcmluZyBpbmZvciBmb3IgdGhlIGRpc3RyaWJ1dGlvbi4KICAiIiIKICBpZiBpc19kaXN0cmlidXRpb24obW9uaXRvcmluZ19pbmZvX3Byb3RvKToKICAgIHJldHVybiBtb25pdG9yaW5nX2luZm9fcHJvdG8ubWV0cmljLmRpc3RyaWJ1dGlvbl9kYXRhLmludF9kaXN0cmlidXRpb25fZGF0YQogIHJldHVybiBOb25lCgoKZGVmIGNyZWF0ZV9sYWJlbHMocHRyYW5zZm9ybT0nJywgdGFnPScnKToKICAiIiJDcmVhdGUgdGhlIGxhYmVsIGRpY3Rpb25hcnkgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHRhZ3MuCgogIEFyZ3M6CiAgICBwdHJhbnNmb3JtOiBUaGUgcHRyYW5zZm9ybS9zdGVwIG5hbWUuCiAgICB0YWc6IGhlIG91dHB1dCB0YWcgbmFtZSwgdXNlZCBhcyBhIGxhYmVsLgogICIiIgogIGxhYmVscyA9IHt9CiAgaWYgdGFnOgogICAgbGFiZWxzWydUQUcnXSA9IHRhZwogIGlmIHB0cmFuc2Zvcm06CiAgICBsYWJlbHNbJ1BUUkFOU0ZPUk0nXSA9IHB0cmFuc2Zvcm0KICByZXR1cm4gbGFiZWxzCgoKZGVmIGludDY0X2NvdW50ZXIodXJuLCBtZXRyaWMsIHB0cmFuc2Zvcm09JycsIHRhZz0nJyk6CiAgIiIiUmV0dXJuIHRoZSBjb3VudGVyIG1vbml0b3JpbmcgaW5mbyBmb3IgdGhlIHNwZWNpZmVkIFVSTiwgbWV0cmljIGFuZCBsYWJlbHMuCgogIEFyZ3M6CiAgICB1cm46IFRoZSBVUk4gb2YgdGhlIG1vbml0b3JpbmcgaW5mby9tZXRyaWMuCiAgICBtZXRyaWM6IFRoZSBtZXRyaWMgcHJvdG8gZmllbGQgdG8gdXNlIGluIHRoZSBtb25pdG9yaW5nIGluZm8uCiAgICAgICAgT3IgYW4gaW50IHZhbHVlLgogICAgcHRyYW5zZm9ybTogVGhlIHB0cmFuc2Zvcm0vc3RlcCBuYW1lIHVzZWQgYXMgYSBsYWJlbC4KICAgIHRhZzogVGhlIG91dHB1dCB0YWcgbmFtZSwgdXNlZCBhcyBhIGxhYmVsLgogICIiIgogIGxhYmVscyA9IGNyZWF0ZV9sYWJlbHMocHRyYW5zZm9ybT1wdHJhbnNmb3JtLCB0YWc9dGFnKQogIGlmIGlzaW5zdGFuY2UobWV0cmljLCBpbnQpOgogICAgbWV0cmljID0gTWV0cmljKAogICAgICAgIGNvdW50ZXJfZGF0YT1Db3VudGVyRGF0YSgKICAgICAgICAgICAgaW50NjRfdmFsdWU9bWV0cmljCiAgICAgICAgKQogICAgKQogIHJldHVybiBjcmVhdGVfbW9uaXRvcmluZ19pbmZvKHVybiwgU1VNX0lOVDY0X1RZUEUsIG1ldHJpYywgbGFiZWxzKQoKCmRlZiBpbnQ2NF9kaXN0cmlidXRpb24odXJuLCBtZXRyaWMsIHB0cmFuc2Zvcm09JycsIHRhZz0nJyk6CiAgIiIiUmV0dXJuIHRoZSBkaXN0cmlidXRpb24gbW9uaXRvcmluZyBpbmZvIGZvciB0aGUgVVJOLCBtZXRyaWMgYW5kIGxhYmVscy4KCiAgQXJnczoKICAgIHVybjogVGhlIFVSTiBvZiB0aGUgbW9uaXRvcmluZyBpbmZvL21ldHJpYy4KICAgIG1ldHJpYzogVGhlIG1ldHJpYyBwcm90byBmaWVsZCB0byB1c2UgaW4gdGhlIG1vbml0b3JpbmcgaW5mby4KICAgICAgICBPciBhbiBpbnQgdmFsdWUuCiAgICBwdHJhbnNmb3JtOiBUaGUgcHRyYW5zZm9ybS9zdGVwIG5hbWUgdXNlZCBhcyBhIGxhYmVsLgogICAgdGFnOiBUaGUgb3V0cHV0IHRhZyBuYW1lLCB1c2VkIGFzIGEgbGFiZWwuCiAgIiIiCiAgbGFiZWxzID0gY3JlYXRlX2xhYmVscyhwdHJhbnNmb3JtPXB0cmFuc2Zvcm0sIHRhZz10YWcpCiAgcmV0dXJuIGNyZWF0ZV9tb25pdG9yaW5nX2luZm8odXJuLCBESVNUUklCVVRJT05fSU5UNjRfVFlQRSwgbWV0cmljLCBsYWJlbHMpCgoKZGVmIGludDY0X2dhdWdlKHVybiwgbWV0cmljLCBwdHJhbnNmb3JtPScnLCB0YWc9JycpOgogICIiIlJldHVybiB0aGUgZ2F1Z2UgbW9uaXRvcmluZyBpbmZvIGZvciB0aGUgVVJOLCBtZXRyaWMgYW5kIGxhYmVscy4KCiAgQXJnczoKICAgIHVybjogVGhlIFVSTiBvZiB0aGUgbW9uaXRvcmluZyBpbmZvL21ldHJpYy4KICAgIG1ldHJpYzogVGhlIG1ldHJpYyBwcm90byBmaWVsZCB0byB1c2UgaW4gdGhlIG1vbml0b3JpbmcgaW5mby4KICAgICAgICBPciBhbiBpbnQgdmFsdWUuCiAgICBwdHJhbnNmb3JtOiBUaGUgcHRyYW5zZm9ybS9zdGVwIG5hbWUgdXNlZCBhcyBhIGxhYmVsLgogICAgdGFnOiBUaGUgb3V0cHV0IHRhZyBuYW1lLCB1c2VkIGFzIGEgbGFiZWwuCiAgIiIiCiAgbGFiZWxzID0gY3JlYXRlX2xhYmVscyhwdHJhbnNmb3JtPXB0cmFuc2Zvcm0sIHRhZz10YWcpCiAgcmV0dXJuIGNyZWF0ZV9tb25pdG9yaW5nX2luZm8odXJuLCBMQVRFU1RfSU5UNjRfVFlQRSwgbWV0cmljLCBsYWJlbHMpCgoKZGVmIGNyZWF0ZV9tb25pdG9yaW5nX2luZm8odXJuLCB0eXBlX3VybiwgbWV0cmljX3Byb3RvLCBsYWJlbHM9Tm9uZSk6CiAgIiIiUmV0dXJuIHRoZSBnYXVnZSBtb25pdG9yaW5nIGluZm8gZm9yIHRoZSBVUk4sIHR5cGUsIG1ldHJpYyBhbmQgbGFiZWxzLgoKICBBcmdzOgogICAgdXJuOiBUaGUgVVJOIG9mIHRoZSBtb25pdG9yaW5nIGluZm8vbWV0cmljLgogICAgdHlwZV91cm46IFRoZSBVUk4gb2YgdGhlIHR5cGUgb2YgdGhlIG1vbml0b3JpbmcgaW5mby9tZXRyaWMuCiAgICAgICAgaS5lLiBiZWFtOm1ldHJpY3M6c3VtX2ludF82NCwgYmVhbTptZXRyaWNzOmxhdGVzdF9pbnRfNjQuCiAgICBtZXRyaWNfcHJvdG86IFRoZSBtZXRyaWMgcHJvdG8gZmllbGQgdG8gdXNlIGluIHRoZSBtb25pdG9yaW5nIGluZm8uCiAgICAgICAgT3IgYW4gaW50IHZhbHVlLgogICAgbGFiZWxzOiBUaGUgbGFiZWwgZGljdGlvbmFyeSB0byB1c2UgaW4gdGhlIE1vbml0b3JpbmdJbmZvLgogICIiIgogIHJldHVybiBNb25pdG9yaW5nSW5mbygKICAgICAgdXJuPXVybiwKICAgICAgdHlwZT10eXBlX3VybiwKICAgICAgbGFiZWxzPWxhYmVscyBvciBkaWN0KCksCiAgICAgIG1ldHJpYz1tZXRyaWNfcHJvdG8sCiAgICAgIHRpbWVzdGFtcD10b190aW1lc3RhbXBfcHJvdG8odGltZS50aW1lKCkpCiAgKQoKCmRlZiB1c2VyX21ldHJpY191cm4obmFtZXNwYWNlLCBuYW1lKToKICAiIiJSZXR1cm5zIHRoZSBtZXRyaWMgVVJOIGZvciBhIHVzZXIgbWV0cmljLCB3aXRoIGEgcHJvcGVyIFVSTiBwcmVmaXguCgogIEFyZ3M6CiAgICBuYW1lc3BhY2U6IFRoZSBuYW1lc3BhY2Ugb2YgdGhlIG1ldHJpYy4KICAgIG5hbWU6IFRoZSBuYW1lIG9mIHRoZSBtZXRyaWMuCiAgIiIiCiAgcmV0dXJuICclcyVzOiVzJyAlIChVU0VSX0NPVU5URVJfVVJOX1BSRUZJWCwgbmFtZXNwYWNlLCBuYW1lKQoKCmRlZiBpc19jb3VudGVyKG1vbml0b3JpbmdfaW5mb19wcm90byk6CiAgIiIiUmV0dXJucyB0cnVlIGlmIHRoZSBtb25pdG9yaW5nIGluZm8gaXMgYSBjb3V0bmVyIG1ldHJpYy4iIiIKICByZXR1cm4gbW9uaXRvcmluZ19pbmZvX3Byb3RvLnR5cGUgaW4gQ09VTlRFUl9UWVBFUwoKCmRlZiBpc19kaXN0cmlidXRpb24obW9uaXRvcmluZ19pbmZvX3Byb3RvKToKICAiIiJSZXR1cm5zIHRydWUgaWYgdGhlIG1vbml0b3JpbmcgaW5mbyBpcyBhIGRpc3RyYnV0aW9uIG1ldHJpYy4iIiIKICByZXR1cm4gbW9uaXRvcmluZ19pbmZvX3Byb3RvLnR5cGUgaW4gRElTVFJJQlVUSU9OX1RZUEVTCgoKZGVmIGlzX2dhdWdlKG1vbml0b3JpbmdfaW5mb19wcm90byk6CiAgIiIiUmV0dXJucyB0cnVlIGlmIHRoZSBtb25pdG9yaW5nIGluZm8gaXMgYSBnYXVnZSBtZXRyaWMuIiIiCiAgcmV0dXJuIG1vbml0b3JpbmdfaW5mb19wcm90by50eXBlIGluIEdBVUdFX1RZUEVTCgoKZGVmIGlzX3VzZXJfbW9uaXRvcmluZ19pbmZvKG1vbml0b3JpbmdfaW5mb19wcm90byk6CiAgIiIiUmV0dXJucyB0cnVlIGlmIHRoZSBtb25pdG9yaW5nIGluZm8gaXMgYSB1c2VyIG1ldHJpYy4iIiIKICByZXR1cm4gbW9uaXRvcmluZ19pbmZvX3Byb3RvLnVybi5zdGFydHN3aXRoKFVTRVJfQ09VTlRFUl9VUk5fUFJFRklYKQoKCmRlZiBleHRyYWN0X21ldHJpY19yZXN1bHRfbWFwX3ZhbHVlKG1vbml0b3JpbmdfaW5mb19wcm90byk6CiAgIiIiUmV0dXJucyB0aGUgcmVsZXZhbnQgR2F1Z2VSZXN1bHQsIERpc3RyaWJ1dGlvblJlc3VsdCBvciBpbnQgdmFsdWUuCgogIFRoZXNlIGFyZSB0aGUgcHJvcGVyIGZvcm1hdCBmb3IgdXNlIGluIHRoZSBNZXRyaWNSZXN1bHQucXVlcnkoKSByZXN1bHQuCiAgIiIiCiAgIyBSZXR1cm5zIGEgbWV0cmljIHJlc3VsdCAoQUtBIHRoZSBsZWdhY3kgZm9ybWF0KS4KICAjIGZyb20gdGhlIE1vbml0b3JpbmdJbmZvCiAgaWYgaXNfY291bnRlcihtb25pdG9yaW5nX2luZm9fcHJvdG8pOgogICAgcmV0dXJuIGV4dHJhY3RfY291bnRlcl92YWx1ZShtb25pdG9yaW5nX2luZm9fcHJvdG8pCiAgaWYgaXNfZGlzdHJpYnV0aW9uKG1vbml0b3JpbmdfaW5mb19wcm90byk6CiAgICBkaXN0cmlidXRpb25fZGF0YSA9IGV4dHJhY3RfZGlzdHJpYnV0aW9uKG1vbml0b3JpbmdfaW5mb19wcm90bykKICAgIHJldHVybiBEaXN0cmlidXRpb25SZXN1bHQoCiAgICAgICAgRGlzdHJpYnV0aW9uRGF0YShkaXN0cmlidXRpb25fZGF0YS5zdW0sIGRpc3RyaWJ1dGlvbl9kYXRhLmNvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uX2RhdGEubWluLCBkaXN0cmlidXRpb25fZGF0YS5tYXgpKQogIGlmIGlzX2dhdWdlKG1vbml0b3JpbmdfaW5mb19wcm90byk6CiAgICB0aW1lc3RhbXBfc2VjcyA9IHRvX3RpbWVzdGFtcF9zZWNzKG1vbml0b3JpbmdfaW5mb19wcm90by50aW1lc3RhbXApCiAgICByZXR1cm4gR2F1Z2VSZXN1bHQoR2F1Z2VEYXRhKAogICAgICAgIGV4dHJhY3RfY291bnRlcl92YWx1ZShtb25pdG9yaW5nX2luZm9fcHJvdG8pLCB0aW1lc3RhbXBfc2VjcykpCgoKZGVmIHBhcnNlX25hbWVzcGFjZV9hbmRfbmFtZShtb25pdG9yaW5nX2luZm9fcHJvdG8pOgogICIiIlJldHVybnMgdGhlIChuYW1lc3BhY2UsIG5hbWUpIHR1cGxlIG9mIHRoZSBVUk4gaW4gdGhlIG1vbml0b3JpbmcgaW5mby4iIiIKICB0b19zcGxpdCA9IG1vbml0b3JpbmdfaW5mb19wcm90by51cm4KICBpZiBpc191c2VyX21vbml0b3JpbmdfaW5mbyhtb25pdG9yaW5nX2luZm9fcHJvdG8pOgogICAgIyBSZW1vdmUgdGhlIFVSTiBwcmVmaXggd2hpY2ggaW5kaWNhdGVzIHRoYXQgaXQgaXMgYSB1c2VyIGNvdW50ZXIuCiAgICB0b19zcGxpdCA9IG1vbml0b3JpbmdfaW5mb19wcm90by51cm5bbGVuKFVTRVJfQ09VTlRFUl9VUk5fUFJFRklYKTpdCiAgIyBJZiBpdCBpcyBub3QgYSB1c2VyIGNvdW50ZXIsIGp1c3QgdXNlIHRoZSBmaXJzdCBwYXJ0IGZvIHRoZSBVUk4sIGkuZS4gJ2JlYW0nCiAgc3BsaXQgPSB0b19zcGxpdC5zcGxpdCgnOicpCiAgcmV0dXJuIHNwbGl0WzBdLCAnOicuam9pbihzcGxpdFsxOl0pCgoKZGVmIHRvX2tleShtb25pdG9yaW5nX2luZm9fcHJvdG8pOgogICIiIlJldHVybnMgYSBrZXkgYmFzZWQgb24gdGhlIFVSTiBhbmQgbGFiZWxzLgoKICBUaGlzIGlzIHVzZWZ1bCBpbiBtYXBzIHRvIHByZXZlbnQgcmVwb3J0aW5nIHRoZSBzYW1lIE1vbml0b3JpbmdJbmZvIHR3aWNlLgogICIiIgogIGtleV9pdGVtcyA9IFtpIGZvciBpIGluIG1vbml0b3JpbmdfaW5mb19wcm90by5sYWJlbHMuaXRlbXMoKV0KICBrZXlfaXRlbXMuYXBwZW5kKG1vbml0b3JpbmdfaW5mb19wcm90by51cm4pCiAgcmV0dXJuIGZyb3plbnNldChrZXlfaXRlbXMpCn1yXYMAAChYCwAAAGludDY0X2dhdWdlWAMAAABkZWZLkEuch1gNAAAAY3JlYXRlX2xhYmVsc1gDAAAAZGVmS19LbIdYFQAAAGV4dHJhY3RfY291bnRlcl92YWx1ZVgDAAAAZGVmS01LUodYEgAAAGludDY0X2Rpc3RyaWJ1dGlvblgDAAAAZGVmS4JLjodYHwAAAGV4dHJhY3RfbWV0cmljX3Jlc3VsdF9tYXBfdmFsdWVYAwAAAGRlZkvQS+KHWBIAAAB0b190aW1lc3RhbXBfcHJvdG9YAwAAAGRlZks5S0KHWA8AAAB1c2VyX21ldHJpY191cm5YAwAAAGRlZkuyS7qHWBYAAABjcmVhdGVfbW9uaXRvcmluZ19pbmZvWAMAAABkZWZLnkuwh1gNAAAAaW50NjRfY291bnRlclgDAAAAZGVmS25LgIdYEQAAAHRvX3RpbWVzdGFtcF9zZWNzWAMAAABkZWZLREtLh1gIAAAAaXNfZ2F1Z2VYAwAAAGRlZkvGS8mHWBgAAABwYXJzZV9uYW1lc3BhY2VfYW5kX25hbWVYAwAAAGRlZkvkS+2HWA8AAABpc19kaXN0cmlidXRpb25YAwAAAGRlZkvBS8SHWAoAAABpc19jb3VudGVyWAMAAABkZWZLvEu/h1gGAAAAdG9fa2V5WAMAAABkZWZL70v3h1gXAAAAaXNfdXNlcl9tb25pdG9yaW5nX2luZm9YAwAAAGRlZkvLS86HWBQAAABleHRyYWN0X2Rpc3RyaWJ1dGlvblgDAAAAZGVmS1RLXYd1fXJegwAAKFgLAAAAaW50NjRfZ2F1Z2VqeGYAAFgNAAAAY3JlYXRlX2xhYmVsc2p4ZgAAWBUAAABleHRyYWN0X2NvdW50ZXJfdmFsdWVqeGYAAFgSAAAAaW50NjRfZGlzdHJpYnV0aW9uanhmAABYHwAAAGV4dHJhY3RfbWV0cmljX3Jlc3VsdF9tYXBfdmFsdWVqeGYAAFgSAAAAdG9fdGltZXN0YW1wX3Byb3RvanhmAABYDwAAAHVzZXJfbWV0cmljX3Vybmp4ZgAAWBYAAABjcmVhdGVfbW9uaXRvcmluZ19pbmZvanhmAABYDQAAAGludDY0X2NvdW50ZXJqeGYAAFgRAAAAdG9fdGltZXN0YW1wX3NlY3NqeGYAAFgIAAAAaXNfZ2F1Z2VqeGYAAFgYAAAAcGFyc2VfbmFtZXNwYWNlX2FuZF9uYW1lanhmAABYDwAAAGlzX2Rpc3RyaWJ1dGlvbmp4ZgAAWAoAAABpc19jb3VudGVyanhmAABYBgAAAHRvX2tleWp4ZgAAWBcAAABpc191c2VyX21vbml0b3JpbmdfaW5mb2p4ZgAAWBQAAABleHRyYWN0X2Rpc3RyaWJ1dGlvbmp4ZgAAdWp9aQAAWCQAAABhcGFjaGVfYmVhbS5tZXRyaWNzLm1vbml0b3JpbmdfaW5mb3NyX4MAAIWBcmCDAAB9cmGDAABidFUhYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3BpcGVsaW5lKFhSHAAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJUZXN0IFBpcGVsaW5lLCBhIHdyYXBwZXIgb2YgUGlwZWxpbmUgZm9yIHRlc3QgcHVycG9zZSIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBhcmdwYXJzZQppbXBvcnQgc2hsZXgKCmZyb20gbm9zZS5wbHVnaW5zLnNraXAgaW1wb3J0IFNraXBUZXN0Cgpmcm9tIGFwYWNoZV9iZWFtLmludGVybmFsIGltcG9ydCBwaWNrbGVyCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBQaXBlbGluZU9wdGlvbnMKZnJvbSBhcGFjaGVfYmVhbS5waXBlbGluZSBpbXBvcnQgUGlwZWxpbmUKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lciBpbXBvcnQgUGlwZWxpbmVTdGF0ZQoKX19hbGxfXyA9IFsKICAgICdUZXN0UGlwZWxpbmUnLAogICAgXQoKCmNsYXNzIFRlc3RQaXBlbGluZShQaXBlbGluZSk6CiAgIiIiOmNsYXNzOmBUZXN0UGlwZWxpbmVgIGNsYXNzIGlzIHVzZWQgaW5zaWRlIG9mIEJlYW0gdGVzdHMgdGhhdCBjYW4gYmUKICBjb25maWd1cmVkIHRvIHJ1biBhZ2FpbnN0IHBpcGVsaW5lIHJ1bm5lci4KCiAgSXQgaGFzIGEgZnVuY3Rpb25hbGl0eSB0byBwYXJzZSBhcmd1bWVudHMgZnJvbSBjb21tYW5kIGxpbmUgYW5kIGJ1aWxkIHBpcGVsaW5lCiAgb3B0aW9ucyBmb3IgdGVzdHMgd2hvIHJ1bnMgYWdhaW5zdCBhIHBpcGVsaW5lIHJ1bm5lciBhbmQgdXRpbGl6ZXMgcmVzb3VyY2VzCiAgb2YgdGhlIHBpcGVsaW5lIHJ1bm5lci4gVGhvc2UgdGVzdCBmdW5jdGlvbnMgYXJlIHJlY29tbWVuZGVkIHRvIGJlIHRhZ2dlZCBieQogIGBgQGF0dHIoIlZhbGlkYXRlc1J1bm5lciIpYGAgYW5ub3RhdGlvbi4KCiAgSW4gb3JkZXIgdG8gY29uZmlndXJlIHRoZSB0ZXN0IHdpdGggY3VzdG9taXplZCBwaXBlbGluZSBvcHRpb25zIGZyb20gY29tbWFuZAogIGxpbmUsIHN5c3RlbSBhcmd1bWVudCBgYC0tdGVzdC1waXBlbGluZS1vcHRpb25zYGAgY2FuIGJlIHVzZWQgdG8gb2J0YWlucyBhCiAgbGlzdCBvZiBwaXBlbGluZSBvcHRpb25zLiBJZiBubyBvcHRpb25zIHNwZWNpZmllZCwgZGVmYXVsdCB2YWx1ZSB3aWxsIGJlIHVzZWQuCgogIEZvciBleGFtcGxlLCB1c2UgZm9sbG93aW5nIGNvbW1hbmQgbGluZSB0byBleGVjdXRlIGFsbCBWYWxpZGF0ZXNSdW5uZXIgdGVzdHM6OgoKICAgIHB5dGhvbiBzZXR1cC5weSBub3NldGVzdHMgLWEgVmFsaWRhdGVzUnVubmVyIFxcCiAgICAgICAgLS10ZXN0LXBpcGVsaW5lLW9wdGlvbnM9Ii0tcnVubmVyPURpcmVjdFJ1bm5lciBcXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWpvYl9uYW1lPW15Sm9iTmFtZSBcXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLW51bV93b3JrZXJzPTEiCgogIEZvciBleGFtcGxlLCB1c2UgYXNzZXJ0X3RoYXQgZm9yIHRlc3QgdmFsaWRhdGlvbjo6CgogICAgcGlwZWxpbmUgPSBUZXN0UGlwZWxpbmUoKQogICAgcGNvbGwgPSAuLi4KICAgIGFzc2VydF90aGF0KHBjb2xsLCBlcXVhbF90byguLi4pKQogICAgcGlwZWxpbmUucnVuKCkKICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgIHJ1bm5lcj1Ob25lLAogICAgICAgICAgICAgICBvcHRpb25zPU5vbmUsCiAgICAgICAgICAgICAgIGFyZ3Y9Tm9uZSwKICAgICAgICAgICAgICAgaXNfaW50ZWdyYXRpb25fdGVzdD1GYWxzZSwKICAgICAgICAgICAgICAgYmxvY2tpbmc9VHJ1ZSk6CiAgICAiIiJJbml0aWFsaXplIGEgcGlwZWxpbmUgb2JqZWN0IGZvciB0ZXN0LgoKICAgIEFyZ3M6CiAgICAgIHJ1bm5lciAofmFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lUnVubmVyKTogQW4gb2JqZWN0IG9mIHR5cGUKICAgICAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVJ1bm5lcmAgdGhhdCB3aWxsIGJlIHVzZWQKICAgICAgICB0byBleGVjdXRlIHRoZSBwaXBlbGluZS4gRm9yIHJlZ2lzdGVyZWQgcnVubmVycywgdGhlIHJ1bm5lciBuYW1lIGNhbiBiZQogICAgICAgIHNwZWNpZmllZCwgb3RoZXJ3aXNlIGEgcnVubmVyIG9iamVjdCBtdXN0IGJlIHN1cHBsaWVkLgogICAgICBvcHRpb25zICh+YXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLlBpcGVsaW5lT3B0aW9ucyk6CiAgICAgICAgQSBjb25maWd1cmVkCiAgICAgICAgOmNsYXNzOmB+YXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLlBpcGVsaW5lT3B0aW9uc2AKICAgICAgICBvYmplY3QgY29udGFpbmluZyBhcmd1bWVudHMgdGhhdCBzaG91bGQgYmUgdXNlZCBmb3IgcnVubmluZyB0aGUKICAgICAgICBwaXBlbGluZSBqb2IuCiAgICAgIGFyZ3YgKExpc3Rbc3RyXSk6IEEgbGlzdCBvZiBhcmd1bWVudHMgKHN1Y2ggYXMgOmRhdGE6YHN5cy5hcmd2YCkgdG8gYmUKICAgICAgICB1c2VkIGZvciBidWlsZGluZyBhCiAgICAgICAgOmNsYXNzOmB+YXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLlBpcGVsaW5lT3B0aW9uc2Agb2JqZWN0LgogICAgICAgIFRoaXMgd2lsbCBvbmx5IGJlIHVzZWQgaWYgYXJndW1lbnQgKipvcHRpb25zKiogaXMgOmRhdGE6YE5vbmVgLgogICAgICBpc19pbnRlZ3JhdGlvbl90ZXN0IChib29sKTogOmRhdGE6YFRydWVgIGlmIHRoZSB0ZXN0IGlzIGFuIGludGVncmF0aW9uCiAgICAgICAgdGVzdCwgOmRhdGE6YEZhbHNlYCBvdGhlcndpc2UuCiAgICAgIGJsb2NraW5nIChib29sKTogUnVuIG1ldGhvZCB3aWxsIHdhaXQgdW50aWwgcGlwZWxpbmUgZXhlY3V0aW9uIGlzCiAgICAgICAgY29tcGxldGVkLgoKICAgIFJhaXNlczoKICAgICAgfmV4Y2VwdGlvbnMuVmFsdWVFcnJvcjogaWYgZWl0aGVyIHRoZSBydW5uZXIgb3Igb3B0aW9ucyBhcmd1bWVudCBpcyBub3QKICAgICAgICBvZiB0aGUgZXhwZWN0ZWQgdHlwZS4KICAgICIiIgogICAgc2VsZi5pc19pbnRlZ3JhdGlvbl90ZXN0ID0gaXNfaW50ZWdyYXRpb25fdGVzdAogICAgc2VsZi5ub3RfdXNlX3Rlc3RfcnVubmVyX2FwaSA9IEZhbHNlCiAgICBzZWxmLm9wdGlvbnNfbGlzdCA9IHNlbGYuX3BhcnNlX3Rlc3Rfb3B0aW9uX2FyZ3MoYXJndikKICAgIHNlbGYuYmxvY2tpbmcgPSBibG9ja2luZwogICAgaWYgb3B0aW9ucyBpcyBOb25lOgogICAgICBvcHRpb25zID0gUGlwZWxpbmVPcHRpb25zKHNlbGYub3B0aW9uc19saXN0KQogICAgc3VwZXIoVGVzdFBpcGVsaW5lLCBzZWxmKS5fX2luaXRfXyhydW5uZXIsIG9wdGlvbnMpCgogIGRlZiBydW4oc2VsZiwgdGVzdF9ydW5uZXJfYXBpPVRydWUpOgogICAgcmVzdWx0ID0gc3VwZXIoVGVzdFBpcGVsaW5lLCBzZWxmKS5ydW4oCiAgICAgICAgdGVzdF9ydW5uZXJfYXBpPShGYWxzZSBpZiBzZWxmLm5vdF91c2VfdGVzdF9ydW5uZXJfYXBpCiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHRlc3RfcnVubmVyX2FwaSkpCiAgICBpZiBzZWxmLmJsb2NraW5nOgogICAgICBzdGF0ZSA9IHJlc3VsdC53YWl0X3VudGlsX2ZpbmlzaCgpCiAgICAgIGFzc2VydCBzdGF0ZSBpbiAoUGlwZWxpbmVTdGF0ZS5ET05FLCBQaXBlbGluZVN0YXRlLkNBTkNFTExFRCksIFwKICAgICAgICAgICJQaXBlbGluZSBleGVjdXRpb24gZmFpbGVkLiIKCiAgICByZXR1cm4gcmVzdWx0CgogIGRlZiBfcGFyc2VfdGVzdF9vcHRpb25fYXJncyhzZWxmLCBhcmd2KToKICAgICIiIlBhcnNlIHZhbHVlIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudDogLS10ZXN0LXBpcGVsaW5lLW9wdGlvbnMgdG8gZ2V0CiAgICBwaXBlbGluZSBvcHRpb25zLgoKICAgIEFyZ3M6CiAgICAgIGFyZ3Y6IEFuIGl0ZXJhYmxlIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgdG8gYmUgdXNlZC4gSWYgbm90IHNwZWNpZmllZAogICAgICAgIHRoZW4gc3lzLmFyZ3Ygd2lsbCBiZSB1c2VkIGFzIGlucHV0IGZvciBwYXJzaW5nIGFyZ3VtZW50cy4KCiAgICBSZXR1cm5zOgogICAgICBBbiBhcmd1bWVudCBsaXN0IG9mIG9wdGlvbnMgdGhhdCBjYW4gYmUgcGFyc2VkIGJ5IGFyZ3BhcnNlciBvciBkaXJlY3RseQogICAgICBidWlsZCBhIHBpcGVsaW5lIG9wdGlvbi4KICAgICIiIgogICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS10ZXN0LXBpcGVsaW5lLW9wdGlvbnMnLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlPXN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZScsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J29ubHkgcnVuIHRlc3RzIHByb3ZpZGluZyBzZXJ2aWNlIG9wdGlvbnMnKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1ub3QtdXNlLXRlc3QtcnVubmVyLWFwaScsCiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3doZXRoZXIgbm90IHRvIHVzZSB0ZXN0LXJ1bm5lci1hcGknKQogICAga25vd24sIHVudXNlZF9hcmd2ID0gcGFyc2VyLnBhcnNlX2tub3duX2FyZ3MoYXJndikKCiAgICBpZiBzZWxmLmlzX2ludGVncmF0aW9uX3Rlc3QgYW5kIG5vdCBrbm93bi50ZXN0X3BpcGVsaW5lX29wdGlvbnM6CiAgICAgICMgU2tpcCBpbnRlZ3JhdGlvbiB0ZXN0IHdoZW4gYXJndW1lbnQgJy0tdGVzdC1waXBlbGluZS1vcHRpb25zJyBpcyBub3QKICAgICAgIyBzcGVjaWZpZWQgc2luY2Ugbm9zZSBjYWxscyBpbnRlZ3JhdGlvbiB0ZXN0cyB3aGVuIHJ1bnMgdW5pdCB0ZXN0IGJ5CiAgICAgICMgJ3NldHVwLnB5IHRlc3QnLgogICAgICByYWlzZSBTa2lwVGVzdCgnSVQgaXMgc2tpcHBlZCBiZWNhdXNlIC0tdGVzdC1waXBlbGluZS1vcHRpb25zICcKICAgICAgICAgICAgICAgICAgICAgJ2lzIG5vdCBzcGVjaWZpZWQnKQoKICAgIHNlbGYubm90X3VzZV90ZXN0X3J1bm5lcl9hcGkgPSBrbm93bi5ub3RfdXNlX3Rlc3RfcnVubmVyX2FwaQogICAgcmV0dXJuIHNobGV4LnNwbGl0KGtub3duLnRlc3RfcGlwZWxpbmVfb3B0aW9ucykgXAogICAgICBpZiBrbm93bi50ZXN0X3BpcGVsaW5lX29wdGlvbnMgZWxzZSBbXQoKICBkZWYgZ2V0X2Z1bGxfb3B0aW9uc19hc19hcmdzKHNlbGYsICoqZXh0cmFfb3B0cyk6CiAgICAiIiJHZXQgZnVsbCBwaXBlbGluZSBvcHRpb25zIGFzIGFuIGFyZ3VtZW50IGxpc3QuCgogICAgQXBwZW5kIGV4dHJhIHBpcGVsaW5lIG9wdGlvbnMgdG8gZXhpc3Rpbmcgb3B0aW9uIGxpc3QgaWYgcHJvdmlkZWQuCiAgICBUZXN0IHZlcmlmaWVyIChpZiBjb250YWlucyBpbiBleHRyYSBvcHRpb25zKSBzaG91bGQgYmUgcGlja2xlZCBiZWZvcmUKICAgIGFwcGVuZGluZywgYW5kIHdpbGwgYmUgdW5waWNrbGVkIGxhdGVyIGluIHRoZSBUZXN0UnVubmVyLgogICAgIiIiCiAgICBvcHRpb25zID0gbGlzdChzZWxmLm9wdGlvbnNfbGlzdCkKICAgIGZvciBrLCB2IGluIGV4dHJhX29wdHMuaXRlbXMoKToKICAgICAgaWYgbm90IHY6CiAgICAgICAgY29udGludWUKICAgICAgZWxpZiBpc2luc3RhbmNlKHYsIGJvb2wpIGFuZCB2OgogICAgICAgIG9wdGlvbnMuYXBwZW5kKCctLSVzJyAlIGspCiAgICAgIGVsaWYgJ21hdGNoZXInIGluIGs6CiAgICAgICAgb3B0aW9ucy5hcHBlbmQoJy0tJXM9JXMnICUgKGssIHBpY2tsZXIuZHVtcHModikuZGVjb2RlKCkpKQogICAgICBlbHNlOgogICAgICAgIG9wdGlvbnMuYXBwZW5kKCctLSVzPSVzJyAlIChrLCB2KSkKICAgIHJldHVybiBvcHRpb25zCgogIGRlZiBnZXRfb3B0aW9uKHNlbGYsIG9wdF9uYW1lKToKICAgICIiIkdldCBhIHBpcGVsaW5lIG9wdGlvbiB2YWx1ZSBieSBuYW1lCgogICAgQXJnczoKICAgICAgb3B0X25hbWU6IFRoZSBuYW1lIG9mIHRoZSBwaXBlbGluZSBvcHRpb24uCgogICAgUmV0dXJuczoKICAgICAgTm9uZSBpZiBvcHRpb24gaXMgbm90IGZvdW5kIGluIGV4aXN0aW5nIG9wdGlvbiBsaXN0IHdoaWNoIGlzIGdlbmVyYXRlZAogICAgICBieSBwYXJzaW5nIHZhbHVlIG9mIGFyZ3VtZW50IGB0ZXN0LXBpcGVsaW5lLW9wdGlvbnNgLgogICAgIiIiCiAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCiAgICBvcHRfbmFtZSA9IG9wdF9uYW1lWzoyXSBpZiBvcHRfbmFtZVs6Ml0gPT0gJy0tJyBlbHNlIG9wdF9uYW1lCiAgICAjIE9wdGlvbiBuYW1lIHNob3VsZCBzdGFydCB3aXRoICctLScgd2hlbiBpdCdzIHVzZWQgZm9yIHBhcnNpbmcuCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLScgKyBvcHRfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1zdHIsCiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmUnKQogICAga25vd24sIF8gPSBwYXJzZXIucGFyc2Vfa25vd25fYXJncyhzZWxmLm9wdGlvbnNfbGlzdCkKICAgIHJldHVybiBnZXRhdHRyKGtub3duLCBvcHRfbmFtZSkgaWYgaGFzYXR0cihrbm93biwgb3B0X25hbWUpIGVsc2UgTm9uZQp9cmKDAAAoWBUAAABUZXN0UGlwZWxpbmUuX19pbml0X19YAwAAAGRlZktBS2eHWBcAAABUZXN0UGlwZWxpbmUuZ2V0X29wdGlvblgDAAAAZGVmS6hLuodYEAAAAFRlc3RQaXBlbGluZS5ydW5YAwAAAGRlZktoS3KHWCQAAABUZXN0UGlwZWxpbmUuX3BhcnNlX3Rlc3Rfb3B0aW9uX2FyZ3NYAwAAAGRlZktzS5SHWCUAAABUZXN0UGlwZWxpbmUuZ2V0X2Z1bGxfb3B0aW9uc19hc19hcmdzWAMAAABkZWZLlUunh1gMAAAAVGVzdFBpcGVsaW5lWAUAAABjbGFzc0slS7qHdX1yY4MAAChYJQAAAFRlc3RQaXBlbGluZS5nZXRfZnVsbF9vcHRpb25zX2FzX2FyZ3NqxWcAAFgMAAAAVGVzdFBpcGVsaW5lasVnAABYFwAAAFRlc3RQaXBlbGluZS5nZXRfb3B0aW9uasVnAABYEAAAAFRlc3RQaXBlbGluZS5ydW5qxWcAAHVqfWkAAFghAAAAYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3BpcGVsaW5lcmSDAACFgXJlgwAAfXJmgwAAYnRVI2FwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmNvbW1vbl91cm5zKFiqCwAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiIgQWNjZXNzb3JzIGZvciBVUk5zIG9mIGNvbW1vbiBCZWFtIGVudGl0aWVzLiAiIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0Cgpmcm9tIGJ1aWx0aW5zIGltcG9ydCBvYmplY3QKCmZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpIGltcG9ydCBiZWFtX2ZuX2FwaV9wYjIKZnJvbSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkgaW1wb3J0IGJlYW1fcnVubmVyX2FwaV9wYjIKZnJvbSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkgaW1wb3J0IHN0YW5kYXJkX3dpbmRvd19mbnNfcGIyCgoKY2xhc3MgUHJvcGVydGllc0Zyb21FbnVtVmFsdWUob2JqZWN0KToKICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWVfZGVzY3JpcHRvcik6CiAgICBzZWxmLnVybiA9ICgKICAgICAgICB2YWx1ZV9kZXNjcmlwdG9yLkdldE9wdGlvbnMoKS5FeHRlbnNpb25zW2JlYW1fcnVubmVyX2FwaV9wYjIuYmVhbV91cm5dKQogICAgc2VsZi5jb25zdGFudCA9ICgKICAgICAgICB2YWx1ZV9kZXNjcmlwdG9yLkdldE9wdGlvbnMoKS5FeHRlbnNpb25zWwogICAgICAgICAgICBiZWFtX3J1bm5lcl9hcGlfcGIyLmJlYW1fY29uc3RhbnRdKQoKCmNsYXNzIFByb3BlcnRpZXNGcm9tRW51bVR5cGUob2JqZWN0KToKICBkZWYgX19pbml0X18oc2VsZiwgZW51bV90eXBlKToKICAgIGZvciB2IGluIGVudW1fdHlwZS5ERVNDUklQVE9SLnZhbHVlczoKICAgICAgc2V0YXR0cihzZWxmLCB2Lm5hbWUsIFByb3BlcnRpZXNGcm9tRW51bVZhbHVlKHYpKQoKCnByaW1pdGl2ZXMgPSBQcm9wZXJ0aWVzRnJvbUVudW1UeXBlKAogICAgYmVhbV9ydW5uZXJfYXBpX3BiMi5TdGFuZGFyZFBUcmFuc2Zvcm1zLlByaW1pdGl2ZXMpCmRlcHJlY2F0ZWRfcHJpbWl0aXZlcyA9IFByb3BlcnRpZXNGcm9tRW51bVR5cGUoCiAgICBiZWFtX3J1bm5lcl9hcGlfcGIyLlN0YW5kYXJkUFRyYW5zZm9ybXMuRGVwcmVjYXRlZFByaW1pdGl2ZXMpCmNvbXBvc2l0ZXMgPSBQcm9wZXJ0aWVzRnJvbUVudW1UeXBlKAogICAgYmVhbV9ydW5uZXJfYXBpX3BiMi5TdGFuZGFyZFBUcmFuc2Zvcm1zLkNvbXBvc2l0ZXMpCmNvbWJpbmVfY29tcG9uZW50cyA9IFByb3BlcnRpZXNGcm9tRW51bVR5cGUoCiAgICBiZWFtX3J1bm5lcl9hcGlfcGIyLlN0YW5kYXJkUFRyYW5zZm9ybXMuQ29tYmluZUNvbXBvbmVudHMpCgpzaWRlX2lucHV0cyA9IFByb3BlcnRpZXNGcm9tRW51bVR5cGUoCiAgICBiZWFtX3J1bm5lcl9hcGlfcGIyLlN0YW5kYXJkU2lkZUlucHV0VHlwZXMuRW51bSkKCmNvZGVycyA9IFByb3BlcnRpZXNGcm9tRW51bVR5cGUoYmVhbV9ydW5uZXJfYXBpX3BiMi5TdGFuZGFyZENvZGVycy5FbnVtKQoKY29uc3RhbnRzID0gUHJvcGVydGllc0Zyb21FbnVtVHlwZSgKICAgIGJlYW1fcnVubmVyX2FwaV9wYjIuQmVhbUNvbnN0YW50cy5Db25zdGFudHMpCgplbnZpcm9ubWVudHMgPSBQcm9wZXJ0aWVzRnJvbUVudW1UeXBlKAogICAgYmVhbV9ydW5uZXJfYXBpX3BiMi5TdGFuZGFyZEVudmlyb25tZW50cy5FbnZpcm9ubWVudHMpCgoKZGVmIFByb3BlcnRpZXNGcm9tUGF5bG9hZFR5cGUocGF5bG9hZF90eXBlKToKICByZXR1cm4gUHJvcGVydGllc0Zyb21FbnVtVHlwZShwYXlsb2FkX3R5cGUuRW51bSkuUFJPUEVSVElFUwoKCmdsb2JhbF93aW5kb3dzID0gUHJvcGVydGllc0Zyb21QYXlsb2FkVHlwZSgKICAgIHN0YW5kYXJkX3dpbmRvd19mbnNfcGIyLkdsb2JhbFdpbmRvd3NQYXlsb2FkKQpmaXhlZF93aW5kb3dzID0gUHJvcGVydGllc0Zyb21QYXlsb2FkVHlwZSgKICAgIHN0YW5kYXJkX3dpbmRvd19mbnNfcGIyLkZpeGVkV2luZG93c1BheWxvYWQpCnNsaWRpbmdfd2luZG93cyA9IFByb3BlcnRpZXNGcm9tUGF5bG9hZFR5cGUoCiAgICBzdGFuZGFyZF93aW5kb3dfZm5zX3BiMi5TbGlkaW5nV2luZG93c1BheWxvYWQpCnNlc3Npb25fd2luZG93cyA9IFByb3BlcnRpZXNGcm9tUGF5bG9hZFR5cGUoCiAgICBzdGFuZGFyZF93aW5kb3dfZm5zX3BiMi5TZXNzaW9uc1BheWxvYWQpCgptb25pdG9yaW5nX2luZm9zID0gUHJvcGVydGllc0Zyb21FbnVtVHlwZSgKICAgIGJlYW1fZm5fYXBpX3BiMi5Nb25pdG9yaW5nSW5mb1VybnMuRW51bSkKbW9uaXRvcmluZ19pbmZvX3R5cGVzID0gUHJvcGVydGllc0Zyb21FbnVtVHlwZSgKICAgIGJlYW1fZm5fYXBpX3BiMi5Nb25pdG9yaW5nSW5mb1R5cGVVcm5zLkVudW0pCn1yZ4MAAChYGQAAAFByb3BlcnRpZXNGcm9tUGF5bG9hZFR5cGVYAwAAAGRlZktBS0OHWCAAAABQcm9wZXJ0aWVzRnJvbUVudW1WYWx1ZS5fX2luaXRfX1gDAAAAZGVmSx5LJIdYFwAAAFByb3BlcnRpZXNGcm9tRW51bVZhbHVlWAUAAABjbGFzc0sdSySHWBYAAABQcm9wZXJ0aWVzRnJvbUVudW1UeXBlWAUAAABjbGFzc0smSyqHWB8AAABQcm9wZXJ0aWVzRnJvbUVudW1UeXBlLl9faW5pdF9fWAMAAABkZWZLJ0sqh3V9cmiDAAAoWBkAAABQcm9wZXJ0aWVzRnJvbVBheWxvYWRUeXBlWCMAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5jb21tb25fdXJuc3JpgwAAWBcAAABQcm9wZXJ0aWVzRnJvbUVudW1WYWx1ZWppgwAAWBYAAABQcm9wZXJ0aWVzRnJvbUVudW1UeXBlammDAAB1an1pAABYIwAAAGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmNvbW1vbl91cm5zcmqDAACFgXJrgwAAfXJsgwAAYnRybYMAAFUYYXBhY2hlX2JlYW0uaW8ucGFycXVldGlvKFg4RAAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCiIiImBgUFRyYW5zZm9ybXNgYCBmb3IgcmVhZGluZyBmcm9tIGFuZCB3cml0aW5nIHRvIFBhcnF1ZXQgZmlsZXMuCgpQcm92aWRlcyB0d28gcmVhZCBgYFBUcmFuc2Zvcm1gYFxccywgYGBSZWFkRnJvbVBhcnF1ZXRgYCBhbmQKYGBSZWFkQWxsRnJvbVBhcnF1ZXRgYCwgdGhhdCBwcm9kdWNlcyBhIGBgUENvbGxlY3Rpb25gYCBvZiByZWNvcmRzLgpFYWNoIHJlY29yZCBvZiB0aGlzIGBgUENvbGxlY3Rpb25gYCB3aWxsIGNvbnRhaW4gYSBzaW5nbGUgcmVjb3JkIHJlYWQgZnJvbQphIFBhcnF1ZXQgZmlsZS4gUmVjb3JkcyB0aGF0IGFyZSBvZiBzaW1wbGUgdHlwZXMgd2lsbCBiZSBtYXBwZWQgaW50bwpjb3JyZXNwb25kaW5nIFB5dGhvbiB0eXBlcy4gVGhlIGFjdHVhbCBwYXJxdWV0IGZpbGUgb3BlcmF0aW9ucyBhcmUgZG9uZSBieQpweWFycm93LiBTb3VyY2Ugc3BsaXR0aW5nIGlzIHN1cHBvcnRlZCBhdCByb3cgZ3JvdXAgZ3JhbnVsYXJpdHkuCgpBZGRpdGlvbmFsbHksIHRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgd3JpdGUgYGBQVHJhbnNmb3JtYGAgYGBXcml0ZVRvUGFycXVldGBgCnRoYXQgY2FuIGJlIHVzZWQgdG8gd3JpdGUgYSBnaXZlbiBgYFBDb2xsZWN0aW9uYGAgb2YgUHl0aG9uIG9iamVjdHMgdG8gYQpQYXJxdWV0IGZpbGUuCiIiIgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IHBsYXRmb3JtCmltcG9ydCBzeXMKZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHBhcnRpYWwKCmZyb20gYXBhY2hlX2JlYW0uaW8gaW1wb3J0IGZpbGViYXNlZHNpbmsKZnJvbSBhcGFjaGVfYmVhbS5pbyBpbXBvcnQgZmlsZWJhc2Vkc291cmNlCmZyb20gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbSBpbXBvcnQgQ29tcHJlc3Npb25UeXBlcwpmcm9tIGFwYWNoZV9iZWFtLmlvLmlvYmFzZSBpbXBvcnQgUmFuZ2VUcmFja2VyCmZyb20gYXBhY2hlX2JlYW0uaW8uaW9iYXNlIGltcG9ydCBSZWFkCmZyb20gYXBhY2hlX2JlYW0uaW8uaW9iYXNlIGltcG9ydCBXcml0ZQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IFBUcmFuc2Zvcm0KCmlmIG5vdCAocGxhdGZvcm0uc3lzdGVtKCkgPT0gJ1dpbmRvd3MnIGFuZCBzeXMudmVyc2lvbl9pbmZvWzBdID09IDIpOgogIGltcG9ydCBweWFycm93IGFzIHBhCiAgaW1wb3J0IHB5YXJyb3cucGFycXVldCBhcyBwcQoKX19hbGxfXyA9IFsnUmVhZEZyb21QYXJxdWV0JywgJ1JlYWRBbGxGcm9tUGFycXVldCcsICdXcml0ZVRvUGFycXVldCddCgoKY2xhc3MgUmVhZEZyb21QYXJxdWV0KFBUcmFuc2Zvcm0pOgogICIiIkEgOmNsYXNzOmB+YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm1gIGZvciByZWFkaW5nCiAgICAgUGFycXVldCBmaWxlcy4gVGhpcyBgUFRyYW5zZm9ybWAgaXMgY3VycmVudGx5IGV4cGVyaW1lbnRhbC4gTm8KICAgICBiYWNrd2FyZC1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlX3BhdHRlcm49Tm9uZSwgbWluX2J1bmRsZV9zaXplPTAsCiAgICAgICAgICAgICAgIHZhbGlkYXRlPVRydWUsIGNvbHVtbnM9Tm9uZSk6CiAgICAiIiJJbml0aWFsaXplcyA6Y2xhc3M6YFJlYWRGcm9tUGFycXVldGAuCgogICAgVXNlcyBzb3VyY2UgYGBfUGFycXVldFNvdXJjZWBgIHRvIHJlYWQgYSBzZXQgb2YgUGFycXVldCBmaWxlcyBkZWZpbmVkIGJ5CiAgICBhIGdpdmVuIGZpbGUgcGF0dGVybi4KCiAgICBJZiBgYC9teXBhdGgvbXlwYXJxdWV0ZmlsZXMqYGAgaXMgYSBmaWxlLXBhdHRlcm4gdGhhdCBwb2ludHMgdG8gYSBzZXQgb2YKICAgIFBhcnF1ZXQgZmlsZXMsIGEgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uYCBmb3IgdGhlIHJlY29yZHMgaW4KICAgIHRoZXNlIFBhcnF1ZXQgZmlsZXMgY2FuIGJlIGNyZWF0ZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuCgogICAgLi4gdGVzdGNvZGU6OgoKICAgICAgd2l0aCBiZWFtLlBpcGVsaW5lKCkgYXMgcDoKICAgICAgICByZWNvcmRzID0gcCB8ICdSZWFkJyA+PiBiZWFtLmlvLlJlYWRGcm9tUGFycXVldCgnL215cGF0aC9teXBxZmlsZXMqJykKCiAgICAuLiBOT1RFOiBXZSdyZSBub3QgYWN0dWFsbHkgaW50ZXJlc3RlZCBpbiB0aGlzIGVycm9yOyBidXQgaWYgd2UgZ2V0IGhlcmUsCiAgICAgICBpdCBtZWFucyB0aGF0IHRoZSB3YXkgb2YgY2FsbGluZyB0aGlzIHRyYW5zZm9ybSBoYXNuJ3QgY2hhbmdlZC4KCiAgICAuLiB0ZXN0b3V0cHV0OjoKICAgICAgOmhpZGU6CgogICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICAgICAuLi4KICAgICAgSU9FcnJvcjogTm8gZmlsZXMgZm91bmQgYmFzZWQgb24gdGhlIGZpbGUgcGF0dGVybgoKICAgIEVhY2ggZWxlbWVudCBvZiB0aGlzIDpjbGFzczpgfmFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbmAgd2lsbCBjb250YWluCiAgICBhIFB5dGhvbiBkaWN0aW9uYXJ5IHJlcHJlc2VudGluZyBhIHNpbmdsZSByZWNvcmQuIFRoZSBrZXlzIHdpbGwgYmUgb2YgdHlwZQogICAgOmNsYXNzOmBzdHJgIGFuZCBuYW1lZCBhZnRlciB0aGVpciBjb3JyZXNwb25kaW5nIGNvbHVtbiBuYW1lcy4gVGhlIHZhbHVlcwogICAgd2lsbCBiZSBvZiB0aGUgdHlwZSBkZWZpbmVkIGluIHRoZSBjb3JyZXNwb25kaW5nIFBhcnF1ZXQgc2NoZW1hLiBSZWNvcmRzCiAgICB0aGF0IGFyZSBvZiBzaW1wbGUgdHlwZXMgd2lsbCBiZSBtYXBwZWQgaW50byBjb3JyZXNwb25kaW5nIFB5dGhvbiB0eXBlcy4KICAgIFJlY29yZHMgdGhhdCBhcmUgb2YgY29tcGxleCB0eXBlcyBsaWtlIGxpc3QgYW5kIHN0cnVjdCB3aWxsIGJlIG1hcHBlZCB0bwogICAgUHl0aG9uIGxpc3QgYW5kIGRpY3Rpb25hcnkgcmVzcGVjdGl2ZWx5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBzdXBwb3J0ZWQKICAgIHR5cGVzIGFuZCBzY2hlbWEsIHBsZWFzZSBzZWUgdGhlIHB5YXJyb3cgZG9jdW1lbnQuCgoKICAgIEFyZ3M6CiAgICAgIGZpbGVfcGF0dGVybiAoc3RyKTogdGhlIGZpbGUgZ2xvYiB0byByZWFkCiAgICAgIG1pbl9idW5kbGVfc2l6ZSAoaW50KTogdGhlIG1pbmltdW0gc2l6ZSBpbiBieXRlcywgdG8gYmUgY29uc2lkZXJlZCB3aGVuCiAgICAgICAgc3BsaXR0aW5nIHRoZSBpbnB1dCBpbnRvIGJ1bmRsZXMuCiAgICAgIHZhbGlkYXRlIChib29sKTogZmxhZyB0byB2ZXJpZnkgdGhhdCB0aGUgZmlsZXMgZXhpc3QgZHVyaW5nIHRoZSBwaXBlbGluZQogICAgICAgIGNyZWF0aW9uIHRpbWUuCiAgICAgIGNvbHVtbnMgKExpc3Rbc3RyXSk6IGxpc3Qgb2YgY29sdW1ucyB0aGF0IHdpbGwgYmUgcmVhZCBmcm9tIGZpbGVzLgogICAgICAgIEEgY29sdW1uIG5hbWUgbWF5IGJlIGEgcHJlZml4IG9mIGEgbmVzdGVkIGZpZWxkLCBlLmcuICdhJyB3aWxsIHNlbGVjdAogICAgICAgICdhLmInLCAnYS5jJywgYW5kICdhLmQuZScKIiIiCiAgICBzdXBlcihSZWFkRnJvbVBhcnF1ZXQsIHNlbGYpLl9faW5pdF9fKCkKICAgIHNlbGYuX3NvdXJjZSA9IF9jcmVhdGVfcGFycXVldF9zb3VyY2UoCiAgICAgICAgZmlsZV9wYXR0ZXJuLAogICAgICAgIG1pbl9idW5kbGVfc2l6ZSwKICAgICAgICB2YWxpZGF0ZT12YWxpZGF0ZSwKICAgICAgICBjb2x1bW5zPWNvbHVtbnMKICAgICkKCiAgZGVmIGV4cGFuZChzZWxmLCBwdmFsdWUpOgogICAgcmV0dXJuIHB2YWx1ZS5waXBlbGluZSB8IFJlYWQoc2VsZi5fc291cmNlKQoKICBkZWYgZGlzcGxheV9kYXRhKHNlbGYpOgogICAgcmV0dXJuIHsnc291cmNlX2RkJzogc2VsZi5fc291cmNlfQoKCmNsYXNzIFJlYWRBbGxGcm9tUGFycXVldChQVHJhbnNmb3JtKToKICAiIiJBIGBgUFRyYW5zZm9ybWBgIGZvciByZWFkaW5nIGBgUENvbGxlY3Rpb25gYCBvZiBQYXJxdWV0IGZpbGVzLgoKICAgVXNlcyBzb3VyY2UgYGBfUGFycXVldFNvdXJjZWBgIHRvIHJlYWQgYSBgYFBDb2xsZWN0aW9uYGAgb2YgUGFycXVldCBmaWxlcyBvcgogICBmaWxlIHBhdHRlcm5zIGFuZCBwcm9kdWNlIGEgYGBQQ29sbGVjdGlvbmBgIG9mIFBhcnF1ZXQgcmVjb3Jkcy4gVGhpcwogICBgYFBUcmFuc2Zvcm1gYCBpcyBjdXJyZW50bHkgZXhwZXJpbWVudGFsLiBObyBiYWNrd2FyZC1jb21wYXRpYmlsaXR5CiAgIGd1YXJhbnRlZXMuCiAgIiIiCgogIERFRkFVTFRfREVTSVJFRF9CVU5ETEVfU0laRSA9IDY0ICogMTAyNCAqIDEwMjQgICMgNjRNQgoKICBkZWYgX19pbml0X18oc2VsZiwgbWluX2J1bmRsZV9zaXplPTAsCiAgICAgICAgICAgICAgIGRlc2lyZWRfYnVuZGxlX3NpemU9REVGQVVMVF9ERVNJUkVEX0JVTkRMRV9TSVpFLAogICAgICAgICAgICAgICBjb2x1bW5zPU5vbmUsCiAgICAgICAgICAgICAgIGxhYmVsPSdSZWFkQWxsRmlsZXMnKToKICAgICIiIkluaXRpYWxpemVzIGBgUmVhZEFsbEZyb21QYXJxdWV0YGAuCgogICAgQXJnczoKICAgICAgbWluX2J1bmRsZV9zaXplOiB0aGUgbWluaW11bSBzaXplIGluIGJ5dGVzLCB0byBiZSBjb25zaWRlcmVkIHdoZW4KICAgICAgICAgICAgICAgICAgICAgICBzcGxpdHRpbmcgdGhlIGlucHV0IGludG8gYnVuZGxlcy4KICAgICAgZGVzaXJlZF9idW5kbGVfc2l6ZTogdGhlIGRlc2lyZWQgc2l6ZSBpbiBieXRlcywgdG8gYmUgY29uc2lkZXJlZCB3aGVuCiAgICAgICAgICAgICAgICAgICAgICAgc3BsaXR0aW5nIHRoZSBpbnB1dCBpbnRvIGJ1bmRsZXMuCiAgICAgIGNvbHVtbnM6IGxpc3Qgb2YgY29sdW1ucyB0aGF0IHdpbGwgYmUgcmVhZCBmcm9tIGZpbGVzLiBBIGNvbHVtbiBuYW1lCiAgICAgICAgICAgICAgICAgICAgICAgbWF5IGJlIGEgcHJlZml4IG9mIGEgbmVzdGVkIGZpZWxkLCBlLmcuICdhJyB3aWxsIHNlbGVjdAogICAgICAgICAgICAgICAgICAgICAgICdhLmInLCAnYS5jJywgYW5kICdhLmQuZScKICAgICIiIgogICAgc3VwZXIoUmVhZEFsbEZyb21QYXJxdWV0LCBzZWxmKS5fX2luaXRfXygpCiAgICBzb3VyY2VfZnJvbV9maWxlID0gcGFydGlhbCgKICAgICAgICBfY3JlYXRlX3BhcnF1ZXRfc291cmNlLAogICAgICAgIG1pbl9idW5kbGVfc2l6ZT1taW5fYnVuZGxlX3NpemUsCiAgICAgICAgY29sdW1ucz1jb2x1bW5zCiAgICApCiAgICBzZWxmLl9yZWFkX2FsbF9maWxlcyA9IGZpbGViYXNlZHNvdXJjZS5SZWFkQWxsRmlsZXMoCiAgICAgICAgVHJ1ZSwgQ29tcHJlc3Npb25UeXBlcy5VTkNPTVBSRVNTRUQsIGRlc2lyZWRfYnVuZGxlX3NpemUsCiAgICAgICAgbWluX2J1bmRsZV9zaXplLCBzb3VyY2VfZnJvbV9maWxlKQoKICAgIHNlbGYubGFiZWwgPSBsYWJlbAoKICBkZWYgZXhwYW5kKHNlbGYsIHB2YWx1ZSk6CiAgICByZXR1cm4gcHZhbHVlIHwgc2VsZi5sYWJlbCA+PiBzZWxmLl9yZWFkX2FsbF9maWxlcwoKCmRlZiBfY3JlYXRlX3BhcnF1ZXRfc291cmNlKGZpbGVfcGF0dGVybj1Ob25lLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5fYnVuZGxlX3NpemU9MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGU9RmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnM9Tm9uZSk6CiAgcmV0dXJuIFwKICAgIF9QYXJxdWV0U291cmNlKAogICAgICAgIGZpbGVfcGF0dGVybj1maWxlX3BhdHRlcm4sCiAgICAgICAgbWluX2J1bmRsZV9zaXplPW1pbl9idW5kbGVfc2l6ZSwKICAgICAgICB2YWxpZGF0ZT12YWxpZGF0ZSwKICAgICAgICBjb2x1bW5zPWNvbHVtbnMKICAgICkKCgpjbGFzcyBfUGFycXVldFV0aWxzKG9iamVjdCk6CiAgQHN0YXRpY21ldGhvZAogIGRlZiBmaW5kX2ZpcnN0X3Jvd19ncm91cF9pbmRleChwZiwgc3RhcnRfb2Zmc2V0KToKICAgIGZvciBpIGluIHJhbmdlKF9QYXJxdWV0VXRpbHMuZ2V0X251bWJlcl9vZl9yb3dfZ3JvdXBzKHBmKSk6CiAgICAgIHJvd19ncm91cF9zdGFydF9vZmZzZXQgPSBfUGFycXVldFV0aWxzLmdldF9vZmZzZXQocGYsIGkpCiAgICAgIGlmIHJvd19ncm91cF9zdGFydF9vZmZzZXQgPj0gc3RhcnRfb2Zmc2V0OgogICAgICAgIHJldHVybiBpCiAgICByZXR1cm4gLTEKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBnZXRfb2Zmc2V0KHBmLCByb3dfZ3JvdXBfaW5kZXgpOgogICAgZmlyc3RfY29sdW1uX21ldGFkYXRhID1cCiAgICAgIHBmLm1ldGFkYXRhLnJvd19ncm91cChyb3dfZ3JvdXBfaW5kZXgpLmNvbHVtbigwKQogICAgaWYgZmlyc3RfY29sdW1uX21ldGFkYXRhLmhhc19kaWN0aW9uYXJ5X3BhZ2U6CiAgICAgIHJldHVybiBmaXJzdF9jb2x1bW5fbWV0YWRhdGEuZGljdGlvbmFyeV9wYWdlX29mZnNldAogICAgZWxzZToKICAgICAgcmV0dXJuIGZpcnN0X2NvbHVtbl9tZXRhZGF0YS5kYXRhX3BhZ2Vfb2Zmc2V0CgogIEBzdGF0aWNtZXRob2QKICBkZWYgZ2V0X251bWJlcl9vZl9yb3dfZ3JvdXBzKHBmKToKICAgIHJldHVybiBwZi5tZXRhZGF0YS5udW1fcm93X2dyb3VwcwoKCmNsYXNzIF9QYXJxdWV0U291cmNlKGZpbGViYXNlZHNvdXJjZS5GaWxlQmFzZWRTb3VyY2UpOgogICIiIkEgc291cmNlIGZvciByZWFkaW5nIFBhcnF1ZXQgZmlsZXMuCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVfcGF0dGVybiwgbWluX2J1bmRsZV9zaXplLCB2YWxpZGF0ZSwgY29sdW1ucyk6CiAgICBzdXBlcihfUGFycXVldFNvdXJjZSwgc2VsZikuX19pbml0X18oCiAgICAgICAgZmlsZV9wYXR0ZXJuPWZpbGVfcGF0dGVybiwKICAgICAgICBtaW5fYnVuZGxlX3NpemU9bWluX2J1bmRsZV9zaXplLAogICAgICAgIHZhbGlkYXRlPXZhbGlkYXRlCiAgICApCiAgICBzZWxmLl9jb2x1bW5zID0gY29sdW1ucwoKICBkZWYgcmVhZF9yZWNvcmRzKHNlbGYsIGZpbGVfbmFtZSwgcmFuZ2VfdHJhY2tlcik6CiAgICBuZXh0X2Jsb2NrX3N0YXJ0ID0gLTEKCiAgICBkZWYgc3BsaXRfcG9pbnRzX3VuY2xhaW1lZChzdG9wX3Bvc2l0aW9uKToKICAgICAgaWYgbmV4dF9ibG9ja19zdGFydCA+PSBzdG9wX3Bvc2l0aW9uOgogICAgICAgICMgTmV4dCBibG9jayBzdGFydHMgYXQgb3IgYWZ0ZXIgdGhlIHN1Z2dlc3RlZCBzdG9wIHBvc2l0aW9uLiBIZW5jZQogICAgICAgICMgdGhlcmUgd2lsbCBub3QgYmUgc3BsaXQgcG9pbnRzIHRvIGJlIGNsYWltZWQgZm9yIHRoZSByYW5nZSBlbmRpbmcgYXQKICAgICAgICAjIHN1Z2dlc3RlZCBzdG9wIHBvc2l0aW9uLgogICAgICAgIHJldHVybiAwCiAgICAgIHJldHVybiBSYW5nZVRyYWNrZXIuU1BMSVRfUE9JTlRTX1VOS05PV04KCiAgICByYW5nZV90cmFja2VyLnNldF9zcGxpdF9wb2ludHNfdW5jbGFpbWVkX2NhbGxiYWNrKHNwbGl0X3BvaW50c191bmNsYWltZWQpCgogICAgc3RhcnRfb2Zmc2V0ID0gcmFuZ2VfdHJhY2tlci5zdGFydF9wb3NpdGlvbigpCiAgICBpZiBzdGFydF9vZmZzZXQgaXMgTm9uZToKICAgICAgc3RhcnRfb2Zmc2V0ID0gMAoKICAgIHdpdGggc2VsZi5vcGVuX2ZpbGUoZmlsZV9uYW1lKSBhcyBmOgogICAgICBwZiA9IHBxLlBhcnF1ZXRGaWxlKGYpCgogICAgICAjIGZpbmQgdGhlIGZpcnN0IGRpY3Rpb25hcnkgcGFnZSAob3IgZGF0YSBwYWdlIGlmIHRoZXJlJ3Mgbm8gZGljdGlvbmFyeQogICAgICAjIHBhZ2UgYXZhaWxhYmxlKSBvZmZzZXQgYWZ0ZXIgdGhlIGdpdmVuIHN0YXJ0X29mZnNldC4gVGhpcyBvZmZzZXQgaXMgYWxzbwogICAgICAjIHRoZSBzdGFydGluZyBvZmZzZXQgb2YgYW55IHJvdyBncm91cCBzaW5jZSB0aGUgUGFycXVldCBzcGVjaWZpY2F0aW9uCiAgICAgICMgZGVzY3JpYmVzIHRoYXQgdGhlIGRhdGEgcGFnZXMgYWx3YXlzIGNvbWUgZmlyc3QgYmVmb3JlIHRoZSBtZXRhIGRhdGEgaW4KICAgICAgIyBlYWNoIHJvdyBncm91cC4KICAgICAgaW5kZXggPSBfUGFycXVldFV0aWxzLmZpbmRfZmlyc3Rfcm93X2dyb3VwX2luZGV4KHBmLCBzdGFydF9vZmZzZXQpCiAgICAgIGlmIGluZGV4ICE9IC0xOgogICAgICAgIG5leHRfYmxvY2tfc3RhcnQgPSBfUGFycXVldFV0aWxzLmdldF9vZmZzZXQocGYsIGluZGV4KQogICAgICBlbHNlOgogICAgICAgIG5leHRfYmxvY2tfc3RhcnQgPSByYW5nZV90cmFja2VyLnN0b3BfcG9zaXRpb24oKQogICAgICBudW1iZXJfb2Zfcm93X2dyb3VwcyA9IF9QYXJxdWV0VXRpbHMuZ2V0X251bWJlcl9vZl9yb3dfZ3JvdXBzKHBmKQoKICAgICAgd2hpbGUgcmFuZ2VfdHJhY2tlci50cnlfY2xhaW0obmV4dF9ibG9ja19zdGFydCk6CiAgICAgICAgdGFibGUgPSBwZi5yZWFkX3Jvd19ncm91cChpbmRleCwgc2VsZi5fY29sdW1ucykKCiAgICAgICAgaWYgaW5kZXggKyAxIDwgbnVtYmVyX29mX3Jvd19ncm91cHM6CiAgICAgICAgICBpbmRleCA9IGluZGV4ICsgMQogICAgICAgICAgbmV4dF9ibG9ja19zdGFydCA9IF9QYXJxdWV0VXRpbHMuZ2V0X29mZnNldChwZiwgaW5kZXgpCiAgICAgICAgZWxzZToKICAgICAgICAgIG5leHRfYmxvY2tfc3RhcnQgPSByYW5nZV90cmFja2VyLnN0b3BfcG9zaXRpb24oKQoKICAgICAgICBudW1fcm93cyA9IHRhYmxlLm51bV9yb3dzCiAgICAgICAgZGF0YV9pdGVtcyA9IHRhYmxlLnRvX3B5ZGljdCgpLml0ZW1zKCkKICAgICAgICBmb3IgbiBpbiByYW5nZShudW1fcm93cyk6CiAgICAgICAgICByb3cgPSB7fQogICAgICAgICAgZm9yIGNvbHVtbiwgdmFsdWVzIGluIGRhdGFfaXRlbXM6CiAgICAgICAgICAgIHJvd1tjb2x1bW5dID0gdmFsdWVzW25dCiAgICAgICAgICB5aWVsZCByb3cKCgpjbGFzcyBXcml0ZVRvUGFycXVldChQVHJhbnNmb3JtKToKICAiIiJBIGBgUFRyYW5zZm9ybWBgIGZvciB3cml0aW5nIHBhcnF1ZXQgZmlsZXMuCgogICAgVGhpcyBgYFBUcmFuc2Zvcm1gYCBpcyBjdXJyZW50bHkgZXhwZXJpbWVudGFsLiBObyBiYWNrd2FyZC1jb21wYXRpYmlsaXR5CiAgICBndWFyYW50ZWVzLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgZmlsZV9wYXRoX3ByZWZpeCwKICAgICAgICAgICAgICAgc2NoZW1hLAogICAgICAgICAgICAgICByb3dfZ3JvdXBfYnVmZmVyX3NpemU9NjQqMTAyNCoxMDI0LAogICAgICAgICAgICAgICByZWNvcmRfYmF0Y2hfc2l6ZT0xMDAwLAogICAgICAgICAgICAgICBjb2RlYz0nbm9uZScsCiAgICAgICAgICAgICAgIHVzZV9kZXByZWNhdGVkX2ludDk2X3RpbWVzdGFtcHM9RmFsc2UsCiAgICAgICAgICAgICAgIGZpbGVfbmFtZV9zdWZmaXg9JycsCiAgICAgICAgICAgICAgIG51bV9zaGFyZHM9MCwKICAgICAgICAgICAgICAgc2hhcmRfbmFtZV90ZW1wbGF0ZT1Ob25lLAogICAgICAgICAgICAgICBtaW1lX3R5cGU9J2FwcGxpY2F0aW9uL3gtcGFycXVldCcpOgogICAgIiIiSW5pdGlhbGl6ZSBhIFdyaXRlVG9QYXJxdWV0IHRyYW5zZm9ybS4KCiAgICBXcml0ZXMgcGFycXVldCBmaWxlcyBmcm9tIGEgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uYCBvZgogICAgcmVjb3Jkcy4gRWFjaCByZWNvcmQgaXMgYSBkaWN0aW9uYXJ5IHdpdGgga2V5cyBvZiBhIHN0cmluZyB0eXBlIHRoYXQKICAgIHJlcHJlc2VudCBjb2x1bW4gbmFtZXMuIFNjaGVtYSBtdXN0IGJlIHNwZWNpZmllZCBsaWtlIHRoZSBleGFtcGxlIGJlbG93LgoKICAgIC4uIHRlc3RzZXR1cDo6CgogICAgICBpbXBvcnQgcHlhcnJvdwoKICAgIC4uIHRlc3Rjb2RlOjoKCiAgICAgIHdpdGggYmVhbS5QaXBlbGluZSgpIGFzIHA6CiAgICAgICAgcmVjb3JkcyA9IHAgfCAnUmVhZCcgPj4gYmVhbS5DcmVhdGUoCiAgICAgICAgICAgIFt7J25hbWUnOiAnZm9vJywgJ2FnZSc6IDEwfSwgeyduYW1lJzogJ2JhcicsICdhZ2UnOiAyMH1dCiAgICAgICAgKQogICAgICAgIF8gPSByZWNvcmRzIHwgJ1dyaXRlJyA+PiBiZWFtLmlvLldyaXRlVG9QYXJxdWV0KCdteW91dHB1dCcsCiAgICAgICAgICAgIHB5YXJyb3cuc2NoZW1hKAogICAgICAgICAgICAgICAgWygnbmFtZScsIHB5YXJyb3cuYmluYXJ5KCkpLCAoJ2FnZScsIHB5YXJyb3cuaW50NjQoKSldCiAgICAgICAgICAgICkKICAgICAgICApCgogICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gc3VwcG9ydGVkIHR5cGVzIGFuZCBzY2hlbWEsIHBsZWFzZSBzZWUgdGhlIHB5YXJyb3cKICAgIGRvY3VtZW50LgoKICAgIEFyZ3M6CiAgICAgIGZpbGVfcGF0aF9wcmVmaXg6IFRoZSBmaWxlIHBhdGggdG8gd3JpdGUgdG8uIFRoZSBmaWxlcyB3cml0dGVuIHdpbGwgYmVnaW4KICAgICAgICB3aXRoIHRoaXMgcHJlZml4LCBmb2xsb3dlZCBieSBhIHNoYXJkIGlkZW50aWZpZXIgKHNlZSBudW1fc2hhcmRzKSwgYW5kCiAgICAgICAgZW5kIGluIGEgY29tbW9uIGV4dGVuc2lvbiwgaWYgZ2l2ZW4gYnkgZmlsZV9uYW1lX3N1ZmZpeC4gSW4gbW9zdCBjYXNlcywKICAgICAgICBvbmx5IHRoaXMgYXJndW1lbnQgaXMgc3BlY2lmaWVkIGFuZCBudW1fc2hhcmRzLCBzaGFyZF9uYW1lX3RlbXBsYXRlLCBhbmQKICAgICAgICBmaWxlX25hbWVfc3VmZml4IHVzZSBkZWZhdWx0IHZhbHVlcy4KICAgICAgc2NoZW1hOiBUaGUgc2NoZW1hIHRvIHVzZSwgYXMgdHlwZSBvZiBgYHB5YXJyb3cuU2NoZW1hYGAuCiAgICAgIHJvd19ncm91cF9idWZmZXJfc2l6ZTogVGhlIGJ5dGUgc2l6ZSBvZiB0aGUgcm93IGdyb3VwIGJ1ZmZlci4gTm90ZSB0aGF0CiAgICAgICAgdGhpcyBzaXplIGlzIGZvciB1bmNvbXByZXNzZWQgZGF0YSBvbiB0aGUgbWVtb3J5IGFuZCBub3JtYWxseSBtdWNoCiAgICAgICAgYmlnZ2VyIHRoYW4gdGhlIGFjdHVhbCByb3cgZ3JvdXAgc2l6ZSB3cml0dGVuIHRvIGEgZmlsZS4KICAgICAgcmVjb3JkX2JhdGNoX3NpemU6IFRoZSBudW1iZXIgb2YgcmVjb3JkcyBpbiBlYWNoIHJlY29yZCBiYXRjaC4gUmVjb3JkCiAgICAgICAgYmF0Y2ggaXMgYSBiYXNpYyB1bml0IHVzZWQgZm9yIHN0b3JpbmcgZGF0YSBpbiB0aGUgcm93IGdyb3VwIGJ1ZmZlci4KICAgICAgICBBIGhpZ2hlciByZWNvcmQgYmF0Y2ggc2l6ZSBpbXBsaWVzIGxvdyBncmFudWxhcml0eSBvbiBhIHJvdyBncm91cCBidWZmZXIKICAgICAgICBzaXplLiBGb3IgY29uZmlndXJpbmcgYSByb3cgZ3JvdXAgc2l6ZSBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIHJlY29yZHMsCiAgICAgICAgc2V0IGBgcm93X2dyb3VwX2J1ZmZlcl9zaXplYGAgdG8gMSBhbmQgdXNlIGBgcmVjb3JkX2JhdGNoX3NpemVgYCB0bwogICAgICAgIGFkanVzdCB0aGUgdmFsdWUuCiAgICAgIGNvZGVjOiBUaGUgY29kZWMgdG8gdXNlIGZvciBibG9jay1sZXZlbCBjb21wcmVzc2lvbi4gQW55IHN0cmluZyBzdXBwb3J0ZWQKICAgICAgICBieSB0aGUgcHlhcnJvdyBzcGVjaWZpY2F0aW9uIGlzIGFjY2VwdGVkLgogICAgICB1c2VfZGVwcmVjYXRlZF9pbnQ5Nl90aW1lc3RhbXBzOiBXcml0ZSBuYW5vc2Vjb25kIHJlc29sdXRpb24gdGltZXN0YW1wcyB0bwogICAgICAgIElOVDk2IFBhcnF1ZXQgZm9ybWF0LiBEZWZhdWx0cyB0byBGYWxzZS4KICAgICAgZmlsZV9uYW1lX3N1ZmZpeDogU3VmZml4IGZvciB0aGUgZmlsZXMgd3JpdHRlbi4KICAgICAgbnVtX3NoYXJkczogVGhlIG51bWJlciBvZiBmaWxlcyAoc2hhcmRzKSB1c2VkIGZvciBvdXRwdXQuIElmIG5vdCBzZXQsIHRoZQogICAgICAgIHNlcnZpY2Ugd2lsbCBkZWNpZGUgb24gdGhlIG9wdGltYWwgbnVtYmVyIG9mIHNoYXJkcy4KICAgICAgICBDb25zdHJhaW5pbmcgdGhlIG51bWJlciBvZiBzaGFyZHMgaXMgbGlrZWx5IHRvIHJlZHVjZQogICAgICAgIHRoZSBwZXJmb3JtYW5jZSBvZiBhIHBpcGVsaW5lLiAgU2V0dGluZyB0aGlzIHZhbHVlIGlzIG5vdCByZWNvbW1lbmRlZAogICAgICAgIHVubGVzcyB5b3UgcmVxdWlyZSBhIHNwZWNpZmljIG51bWJlciBvZiBvdXRwdXQgZmlsZXMuCiAgICAgIHNoYXJkX25hbWVfdGVtcGxhdGU6IEEgdGVtcGxhdGUgc3RyaW5nIGNvbnRhaW5pbmcgcGxhY2Vob2xkZXJzIGZvcgogICAgICAgIHRoZSBzaGFyZCBudW1iZXIgYW5kIHNoYXJkIGNvdW50LiBXaGVuIGNvbnN0cnVjdGluZyBhIGZpbGVuYW1lIGZvciBhCiAgICAgICAgcGFydGljdWxhciBzaGFyZCBudW1iZXIsIHRoZSB1cHBlci1jYXNlIGxldHRlcnMgJ1MnIGFuZCAnTicgYXJlCiAgICAgICAgcmVwbGFjZWQgd2l0aCB0aGUgMC1wYWRkZWQgc2hhcmQgbnVtYmVyIGFuZCBzaGFyZCBjb3VudCByZXNwZWN0aXZlbHkuCiAgICAgICAgVGhpcyBhcmd1bWVudCBjYW4gYmUgJycgaW4gd2hpY2ggY2FzZSBpdCBiZWhhdmVzIGFzIGlmIG51bV9zaGFyZHMgd2FzCiAgICAgICAgc2V0IHRvIDEgYW5kIG9ubHkgb25lIGZpbGUgd2lsbCBiZSBnZW5lcmF0ZWQuIFRoZSBkZWZhdWx0IHBhdHRlcm4gdXNlZAogICAgICAgIGlzICctU1NTU1Mtb2YtTk5OTk4nIGlmIE5vbmUgaXMgcGFzc2VkIGFzIHRoZSBzaGFyZF9uYW1lX3RlbXBsYXRlLgogICAgICBtaW1lX3R5cGU6IFRoZSBNSU1FIHR5cGUgdG8gdXNlIGZvciB0aGUgcHJvZHVjZWQgZmlsZXMsIGlmIHRoZSBmaWxlc3lzdGVtCiAgICAgICAgc3VwcG9ydHMgc3BlY2lmeWluZyBNSU1FIHR5cGVzLgoKICAgIFJldHVybnM6CiAgICAgIEEgV3JpdGVUb1BhcnF1ZXQgdHJhbnNmb3JtIHVzYWJsZSBmb3Igd3JpdGluZy4KICAgICIiIgogICAgc3VwZXIoV3JpdGVUb1BhcnF1ZXQsIHNlbGYpLl9faW5pdF9fKCkKICAgIHNlbGYuX3NpbmsgPSBcCiAgICAgIF9jcmVhdGVfcGFycXVldF9zaW5rKAogICAgICAgICAgZmlsZV9wYXRoX3ByZWZpeCwKICAgICAgICAgIHNjaGVtYSwKICAgICAgICAgIGNvZGVjLAogICAgICAgICAgcm93X2dyb3VwX2J1ZmZlcl9zaXplLAogICAgICAgICAgcmVjb3JkX2JhdGNoX3NpemUsCiAgICAgICAgICB1c2VfZGVwcmVjYXRlZF9pbnQ5Nl90aW1lc3RhbXBzLAogICAgICAgICAgZmlsZV9uYW1lX3N1ZmZpeCwKICAgICAgICAgIG51bV9zaGFyZHMsCiAgICAgICAgICBzaGFyZF9uYW1lX3RlbXBsYXRlLAogICAgICAgICAgbWltZV90eXBlCiAgICAgICkKCiAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICByZXR1cm4gcGNvbGwgfCBXcml0ZShzZWxmLl9zaW5rKQoKICBkZWYgZGlzcGxheV9kYXRhKHNlbGYpOgogICAgcmV0dXJuIHsnc2lua19kZCc6IHNlbGYuX3Npbmt9CgoKZGVmIF9jcmVhdGVfcGFycXVldF9zaW5rKGZpbGVfcGF0aF9wcmVmaXgsCiAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWEsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlYywKICAgICAgICAgICAgICAgICAgICAgICAgIHJvd19ncm91cF9idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZF9iYXRjaF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgdXNlX2RlcHJlY2F0ZWRfaW50OTZfdGltZXN0YW1wcywKICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZV9zdWZmaXgsCiAgICAgICAgICAgICAgICAgICAgICAgICBudW1fc2hhcmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmRfbmFtZV90ZW1wbGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIG1pbWVfdHlwZSk6CiAgcmV0dXJuIFwKICAgIF9QYXJxdWV0U2luaygKICAgICAgICBmaWxlX3BhdGhfcHJlZml4LAogICAgICAgIHNjaGVtYSwKICAgICAgICBjb2RlYywKICAgICAgICByb3dfZ3JvdXBfYnVmZmVyX3NpemUsCiAgICAgICAgcmVjb3JkX2JhdGNoX3NpemUsCiAgICAgICAgdXNlX2RlcHJlY2F0ZWRfaW50OTZfdGltZXN0YW1wcywKICAgICAgICBmaWxlX25hbWVfc3VmZml4LAogICAgICAgIG51bV9zaGFyZHMsCiAgICAgICAgc2hhcmRfbmFtZV90ZW1wbGF0ZSwKICAgICAgICBtaW1lX3R5cGUKICAgICkKCgpjbGFzcyBfUGFycXVldFNpbmsoZmlsZWJhc2Vkc2luay5GaWxlQmFzZWRTaW5rKToKICAiIiJBIHNpbmsgZm9yIHBhcnF1ZXQgZmlsZXMuIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLAogICAgICAgICAgICAgICBmaWxlX3BhdGhfcHJlZml4LAogICAgICAgICAgICAgICBzY2hlbWEsCiAgICAgICAgICAgICAgIGNvZGVjLAogICAgICAgICAgICAgICByb3dfZ3JvdXBfYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgIHJlY29yZF9iYXRjaF9zaXplLAogICAgICAgICAgICAgICB1c2VfZGVwcmVjYXRlZF9pbnQ5Nl90aW1lc3RhbXBzLAogICAgICAgICAgICAgICBmaWxlX25hbWVfc3VmZml4LAogICAgICAgICAgICAgICBudW1fc2hhcmRzLAogICAgICAgICAgICAgICBzaGFyZF9uYW1lX3RlbXBsYXRlLAogICAgICAgICAgICAgICBtaW1lX3R5cGUpOgogICAgc3VwZXIoX1BhcnF1ZXRTaW5rLCBzZWxmKS5fX2luaXRfXygKICAgICAgICBmaWxlX3BhdGhfcHJlZml4LAogICAgICAgIGZpbGVfbmFtZV9zdWZmaXg9ZmlsZV9uYW1lX3N1ZmZpeCwKICAgICAgICBudW1fc2hhcmRzPW51bV9zaGFyZHMsCiAgICAgICAgc2hhcmRfbmFtZV90ZW1wbGF0ZT1zaGFyZF9uYW1lX3RlbXBsYXRlLAogICAgICAgIGNvZGVyPU5vbmUsCiAgICAgICAgbWltZV90eXBlPW1pbWVfdHlwZSwKICAgICAgICAjIENvbXByZXNzaW9uIGhhcHBlbnMgYXQgdGhlIGJsb2NrIGxldmVsIHVzaW5nIHRoZSBzdXBwbGllZCBjb2RlYywgYW5kCiAgICAgICAgIyBub3QgYXQgdGhlIGZpbGUgbGV2ZWwuCiAgICAgICAgY29tcHJlc3Npb25fdHlwZT1Db21wcmVzc2lvblR5cGVzLlVOQ09NUFJFU1NFRCkKICAgIHNlbGYuX3NjaGVtYSA9IHNjaGVtYQogICAgc2VsZi5fY29kZWMgPSBjb2RlYwogICAgc2VsZi5fcm93X2dyb3VwX2J1ZmZlcl9zaXplID0gcm93X2dyb3VwX2J1ZmZlcl9zaXplCiAgICBzZWxmLl91c2VfZGVwcmVjYXRlZF9pbnQ5Nl90aW1lc3RhbXBzID0gdXNlX2RlcHJlY2F0ZWRfaW50OTZfdGltZXN0YW1wcwogICAgc2VsZi5fYnVmZmVyID0gW1tdIGZvciBfIGluIHJhbmdlKGxlbihzY2hlbWEubmFtZXMpKV0KICAgIHNlbGYuX2J1ZmZlcl9zaXplID0gcmVjb3JkX2JhdGNoX3NpemUKICAgIHNlbGYuX3JlY29yZF9iYXRjaGVzID0gW10KICAgIHNlbGYuX3JlY29yZF9iYXRjaGVzX2J5dGVfc2l6ZSA9IDAKICAgIHNlbGYuX2ZpbGVfaGFuZGxlID0gTm9uZQoKICBkZWYgb3BlbihzZWxmLCB0ZW1wX3BhdGgpOgogICAgc2VsZi5fZmlsZV9oYW5kbGUgPSBzdXBlcihfUGFycXVldFNpbmssIHNlbGYpLm9wZW4odGVtcF9wYXRoKQogICAgcmV0dXJuIHBxLlBhcnF1ZXRXcml0ZXIoCiAgICAgICAgc2VsZi5fZmlsZV9oYW5kbGUsIHNlbGYuX3NjaGVtYSwgY29tcHJlc3Npb249c2VsZi5fY29kZWMsCiAgICAgICAgdXNlX2RlcHJlY2F0ZWRfaW50OTZfdGltZXN0YW1wcz1zZWxmLl91c2VfZGVwcmVjYXRlZF9pbnQ5Nl90aW1lc3RhbXBzCiAgICApCgogIGRlZiB3cml0ZV9yZWNvcmQoc2VsZiwgd3JpdGVyLCB2YWx1ZSk6CiAgICBpZiBsZW4oc2VsZi5fYnVmZmVyWzBdKSA+PSBzZWxmLl9idWZmZXJfc2l6ZToKICAgICAgc2VsZi5fZmx1c2hfYnVmZmVyKCkKCiAgICBpZiBzZWxmLl9yZWNvcmRfYmF0Y2hlc19ieXRlX3NpemUgPj0gc2VsZi5fcm93X2dyb3VwX2J1ZmZlcl9zaXplOgogICAgICBzZWxmLl93cml0ZV9iYXRjaGVzKHdyaXRlcikKCiAgICAjIHJlb3JkZXIgdGhlIGRhdGEgaW4gY29sdW1uYXIgZm9ybWF0LgogICAgZm9yIGksIG4gaW4gZW51bWVyYXRlKHNlbGYuX3NjaGVtYS5uYW1lcyk6CiAgICAgIHNlbGYuX2J1ZmZlcltpXS5hcHBlbmQodmFsdWVbbl0pCgogIGRlZiBjbG9zZShzZWxmLCB3cml0ZXIpOgogICAgaWYgbGVuKHNlbGYuX2J1ZmZlclswXSkgPiAwOgogICAgICBzZWxmLl9mbHVzaF9idWZmZXIoKQogICAgaWYgc2VsZi5fcmVjb3JkX2JhdGNoZXNfYnl0ZV9zaXplID4gMDoKICAgICAgc2VsZi5fd3JpdGVfYmF0Y2hlcyh3cml0ZXIpCgogICAgd3JpdGVyLmNsb3NlKCkKICAgIGlmIHNlbGYuX2ZpbGVfaGFuZGxlOgogICAgICBzZWxmLl9maWxlX2hhbmRsZS5jbG9zZSgpCiAgICAgIHNlbGYuX2ZpbGVfaGFuZGxlID0gTm9uZQoKICBkZWYgZGlzcGxheV9kYXRhKHNlbGYpOgogICAgcmVzID0gc3VwZXIoX1BhcnF1ZXRTaW5rLCBzZWxmKS5kaXNwbGF5X2RhdGEoKQogICAgcmVzWydjb2RlYyddID0gc3RyKHNlbGYuX2NvZGVjKQogICAgcmVzWydzY2hlbWEnXSA9IHN0cihzZWxmLl9zY2hlbWEpCiAgICByZXNbJ3Jvd19ncm91cF9idWZmZXJfc2l6ZSddID0gc3RyKHNlbGYuX3Jvd19ncm91cF9idWZmZXJfc2l6ZSkKICAgIHJldHVybiByZXMKCiAgZGVmIF93cml0ZV9iYXRjaGVzKHNlbGYsIHdyaXRlcik6CiAgICB0YWJsZSA9IHBhLlRhYmxlLmZyb21fYmF0Y2hlcyhzZWxmLl9yZWNvcmRfYmF0Y2hlcykKICAgIHNlbGYuX3JlY29yZF9iYXRjaGVzID0gW10KICAgIHNlbGYuX3JlY29yZF9iYXRjaGVzX2J5dGVfc2l6ZSA9IDAKICAgIHdyaXRlci53cml0ZV90YWJsZSh0YWJsZSkKCiAgZGVmIF9mbHVzaF9idWZmZXIoc2VsZik6CiAgICBhcnJheXMgPSBbW10gZm9yIF8gaW4gcmFuZ2UobGVuKHNlbGYuX3NjaGVtYS5uYW1lcykpXQogICAgZm9yIHgsIHkgaW4gZW51bWVyYXRlKHNlbGYuX2J1ZmZlcik6CiAgICAgIGFycmF5c1t4XSA9IHBhLmFycmF5KHksIHR5cGU9c2VsZi5fc2NoZW1hLnR5cGVzW3hdKQogICAgICBzZWxmLl9idWZmZXJbeF0gPSBbXQogICAgcmIgPSBwYS5SZWNvcmRCYXRjaC5mcm9tX2FycmF5cyhhcnJheXMsIHNlbGYuX3NjaGVtYS5uYW1lcykKICAgIHNlbGYuX3JlY29yZF9iYXRjaGVzLmFwcGVuZChyYikKICAgIHNpemUgPSAwCiAgICBmb3IgeCBpbiBhcnJheXM6CiAgICAgIGZvciBiIGluIHguYnVmZmVycygpOgogICAgICAgIHNpemUgPSBzaXplICsgYi5zaXplCiAgICBzZWxmLl9yZWNvcmRfYmF0Y2hlc19ieXRlX3NpemUgPSBzZWxmLl9yZWNvcmRfYmF0Y2hlc19ieXRlX3NpemUgKyBzaXplCn1yboMAAChYEgAAAFJlYWRBbGxGcm9tUGFycXVldFgFAAAAY2xhc3NLdUudh1gXAAAAV3JpdGVUb1BhcnF1ZXQuX19pbml0X19YAwAAAGRlZk0HAU1gAYdYFgAAAFJlYWRGcm9tUGFycXVldC5leHBhbmRYAwAAAGRlZktuS3CHWBkAAABSZWFkQWxsRnJvbVBhcnF1ZXQuZXhwYW5kWAMAAABkZWZLm0udh1gNAAAAX1BhcnF1ZXRVdGlsc1gFAAAAY2xhc3NLrEvBh1gZAAAAX1BhcnF1ZXRTaW5rLndyaXRlX3JlY29yZFgDAAAAZGVmTaoBTbQBh1gUAAAAX2NyZWF0ZV9wYXJxdWV0X3NpbmtYAwAAAGRlZk1oAU1/AYdYGgAAAF9QYXJxdWV0U2luay5fZmx1c2hfYnVmZmVyWAMAAABkZWZNzQFN2QGHWBcAAABfUGFycXVldFNvdXJjZS5fX2luaXRfX1gDAAAAZGVmS8ZLzYdYHAAAAFJlYWRGcm9tUGFycXVldC5kaXNwbGF5X2RhdGFYAwAAAGRlZktxS3OHWBgAAABSZWFkRnJvbVBhcnF1ZXQuX19pbml0X19YAwAAAGRlZks4S22HWBEAAABfUGFycXVldFNpbmsub3BlblgDAAAAZGVmTaMBTakBh1goAAAAX1BhcnF1ZXRVdGlscy5maW5kX2ZpcnN0X3Jvd19ncm91cF9pbmRleFgDAAAAZGVmS61LtIdYGAAAAF9QYXJxdWV0VXRpbHMuZ2V0X29mZnNldFgDAAAAZGVmS7VLvYdYGwAAAFJlYWRBbGxGcm9tUGFycXVldC5fX2luaXRfX1gDAAAAZGVmS4BLmodYFQAAAF9QYXJxdWV0U2luay5fX2luaXRfX1gDAAAAZGVmTYQBTaIBh1gOAAAAV3JpdGVUb1BhcnF1ZXRYBQAAAGNsYXNzTQABTWYBh1gbAAAAX1BhcnF1ZXRTaW5rLl93cml0ZV9iYXRjaGVzWAMAAABkZWZNxwFNzAGHWBsAAABXcml0ZVRvUGFycXVldC5kaXNwbGF5X2RhdGFYAwAAAGRlZk1kAU1mAYdYMgAAAF9QYXJxdWV0U291cmNlLnJlYWRfcmVjb3Jkcy5zcGxpdF9wb2ludHNfdW5jbGFpbWVkWAMAAABkZWZL0UvYh1gZAAAAX1BhcnF1ZXRTaW5rLmRpc3BsYXlfZGF0YVgDAAAAZGVmTcABTcYBh1gMAAAAX1BhcnF1ZXRTaW5rWAUAAABjbGFzc02BAU3ZAYdYEgAAAF9QYXJxdWV0U2luay5jbG9zZVgDAAAAZGVmTbUBTb8Bh1gOAAAAX1BhcnF1ZXRTb3VyY2VYBQAAAGNsYXNzS8NL/odYDwAAAFJlYWRGcm9tUGFycXVldFgFAAAAY2xhc3NLM0tzh1gVAAAAV3JpdGVUb1BhcnF1ZXQuZXhwYW5kWAMAAABkZWZNYQFNYwGHWCYAAABfUGFycXVldFV0aWxzLmdldF9udW1iZXJfb2Zfcm93X2dyb3Vwc1gDAAAAZGVmS75LwYdYGwAAAF9QYXJxdWV0U291cmNlLnJlYWRfcmVjb3Jkc1gDAAAAZGVmS85L/odYFgAAAF9jcmVhdGVfcGFycXVldF9zb3VyY2VYAwAAAGRlZkufS6qHdX1yb4MAAChYDgAAAFdyaXRlVG9QYXJxdWV0aulcAABYDwAAAFJlYWRGcm9tUGFycXVldGrpXAAAWBYAAABSZWFkRnJvbVBhcnF1ZXQuZXhwYW5kaulcAABYEgAAAFJlYWRBbGxGcm9tUGFycXVldGrpXAAAWBkAAABSZWFkQWxsRnJvbVBhcnF1ZXQuZXhwYW5kaulcAABYHAAAAFJlYWRGcm9tUGFycXVldC5kaXNwbGF5X2RhdGFq6VwAAFgbAAAAV3JpdGVUb1BhcnF1ZXQuZGlzcGxheV9kYXRhaulcAABYFQAAAFdyaXRlVG9QYXJxdWV0LmV4cGFuZGrpXAAAdWp9aQAAWBgAAABhcGFjaGVfYmVhbS5pby5wYXJxdWV0aW9ycIMAAIWBcnGDAAB9cnKDAABidFUeYXBhY2hlX2JlYW0ucnVubmVycy5zZGZfY29tbW9uKFgLFwAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJUaGlzIG1vZHVsZSBjb250YWlucyBTcGxpdHRhYmxlIERvRm4gbG9naWMgdGhhdCdzIGNvbW1vbiB0byBhbGwgcnVubmVycy4iIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgdXVpZApmcm9tIGJ1aWx0aW5zIGltcG9ydCBvYmplY3QKCmltcG9ydCBhcGFjaGVfYmVhbSBhcyBiZWFtCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IHB2YWx1ZQpmcm9tIGFwYWNoZV9iZWFtLmNvZGVycyBpbXBvcnQgdHlwZWNvZGVycwpmcm9tIGFwYWNoZV9iZWFtLnBpcGVsaW5lIGltcG9ydCBBcHBsaWVkUFRyYW5zZm9ybQpmcm9tIGFwYWNoZV9iZWFtLnBpcGVsaW5lIGltcG9ydCBQVHJhbnNmb3JtT3ZlcnJpZGUKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmNvbW1vbiBpbXBvcnQgRG9Gbkludm9rZXIKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmNvbW1vbiBpbXBvcnQgRG9GblNpZ25hdHVyZQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSBpbXBvcnQgUGFyRG8KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0gaW1wb3J0IFBUcmFuc2Zvcm0KCgpjbGFzcyBTcGxpdHRhYmxlUGFyRG9PdmVycmlkZShQVHJhbnNmb3JtT3ZlcnJpZGUpOgogICIiIkEgdHJhbnNmb3JtIG92ZXJyaWRlIGZvciBQYXJEbyB0cmFuc2Zvcm1zcyBvZiBTcGxpdHRhYmxlRG9GbnMuCgogIFJlcGxhY2VzIHRoZSBQYXJEbyB0cmFuc2Zvcm0gd2l0aCBhIFNwbGl0dGFibGVQYXJEbyB0cmFuc2Zvcm0gdGhhdCBwZXJmb3JtcwogIFNERiBzcGVjaWZpYyBsb2dpYy4KICAiIiIKCiAgZGVmIG1hdGNoZXMoc2VsZiwgYXBwbGllZF9wdHJhbnNmb3JtKToKICAgIGFzc2VydCBpc2luc3RhbmNlKGFwcGxpZWRfcHRyYW5zZm9ybSwgQXBwbGllZFBUcmFuc2Zvcm0pCiAgICB0cmFuc2Zvcm0gPSBhcHBsaWVkX3B0cmFuc2Zvcm0udHJhbnNmb3JtCiAgICBpZiBpc2luc3RhbmNlKHRyYW5zZm9ybSwgUGFyRG8pOgogICAgICBzaWduYXR1cmUgPSBEb0ZuU2lnbmF0dXJlKHRyYW5zZm9ybS5mbikKICAgICAgcmV0dXJuIHNpZ25hdHVyZS5pc19zcGxpdHRhYmxlX2RvZm4oKQoKICBkZWYgZ2V0X3JlcGxhY2VtZW50X3RyYW5zZm9ybShzZWxmLCBwdHJhbnNmb3JtKToKICAgIGFzc2VydCBpc2luc3RhbmNlKHB0cmFuc2Zvcm0sIFBhckRvKQogICAgZG9fZm4gPSBwdHJhbnNmb3JtLmZuCiAgICBzaWduYXR1cmUgPSBEb0ZuU2lnbmF0dXJlKGRvX2ZuKQogICAgaWYgc2lnbmF0dXJlLmlzX3NwbGl0dGFibGVfZG9mbigpOgogICAgICByZXR1cm4gU3BsaXR0YWJsZVBhckRvKHB0cmFuc2Zvcm0pCiAgICBlbHNlOgogICAgICByZXR1cm4gcHRyYW5zZm9ybQoKCmNsYXNzIFNwbGl0dGFibGVQYXJEbyhQVHJhbnNmb3JtKToKICAiIiJBIHRyYW5zZm9ybSB0aGF0IHByb2Nlc3NlcyBhIFBDb2xsZWN0aW9uIHVzaW5nIGEgU3BsaXR0YWJsZSBEb0ZuLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgcHRyYW5zZm9ybSk6CiAgICBhc3NlcnQgaXNpbnN0YW5jZShwdHJhbnNmb3JtLCBQYXJEbykKICAgIHNlbGYuX3B0cmFuc2Zvcm0gPSBwdHJhbnNmb3JtCgogIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgc2RmID0gc2VsZi5fcHRyYW5zZm9ybS5mbgogICAgc2lnbmF0dXJlID0gRG9GblNpZ25hdHVyZShzZGYpCiAgICBpbnZva2VyID0gRG9Gbkludm9rZXIuY3JlYXRlX2ludm9rZXIoc2lnbmF0dXJlLCBwcm9jZXNzX2ludm9jYXRpb249RmFsc2UpCgogICAgZWxlbWVudF9jb2RlciA9IHR5cGVjb2RlcnMucmVnaXN0cnkuZ2V0X2NvZGVyKHBjb2xsLmVsZW1lbnRfdHlwZSkKICAgIHJlc3RyaWN0aW9uX2NvZGVyID0gaW52b2tlci5pbnZva2VfcmVzdHJpY3Rpb25fY29kZXIoKQoKICAgIGtleWVkX2VsZW1lbnRzID0gKHBjb2xsCiAgICAgICAgICAgICAgICAgICAgICB8ICdwYWlyJyA+PiBQYXJEbyhQYWlyV2l0aFJlc3RyaWN0aW9uRm4oc2RmKSkKICAgICAgICAgICAgICAgICAgICAgIHwgJ3NwbGl0JyA+PiBQYXJEbyhTcGxpdFJlc3RyaWN0aW9uRm4oc2RmKSkKICAgICAgICAgICAgICAgICAgICAgIHwgJ2V4cGxvZGUnID4+IFBhckRvKEV4cGxvZGVXaW5kb3dzRm4oKSkKICAgICAgICAgICAgICAgICAgICAgIHwgJ3JhbmRvbScgPj4gUGFyRG8oUmFuZG9tVW5pcXVlS2V5Rm4oKSkpCgogICAgcmV0dXJuIGtleWVkX2VsZW1lbnRzIHwgUHJvY2Vzc0tleWVkRWxlbWVudHMoCiAgICAgICAgc2RmLCBlbGVtZW50X2NvZGVyLCByZXN0cmljdGlvbl9jb2RlciwKICAgICAgICBwY29sbC53aW5kb3dpbmcsIHNlbGYuX3B0cmFuc2Zvcm0uYXJncywgc2VsZi5fcHRyYW5zZm9ybS5rd2FyZ3MsCiAgICAgICAgc2VsZi5fcHRyYW5zZm9ybS5zaWRlX2lucHV0cykKCgpjbGFzcyBFbGVtZW50QW5kUmVzdHJpY3Rpb24ob2JqZWN0KToKICAiIiJBIGhvbGRlciBmb3IgYW4gZWxlbWVudCBhbmQgYSByZXN0cmljdGlvbi4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGVsZW1lbnQsIHJlc3RyaWN0aW9uKToKICAgIHNlbGYuZWxlbWVudCA9IGVsZW1lbnQKICAgIHNlbGYucmVzdHJpY3Rpb24gPSByZXN0cmljdGlvbgoKCmNsYXNzIFBhaXJXaXRoUmVzdHJpY3Rpb25GbihiZWFtLkRvRm4pOgogICIiIkEgdHJhbnNmb3JtIHRoYXQgcGFpcnMgZWFjaCBlbGVtZW50IHdpdGggYSByZXN0cmljdGlvbi4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGRvX2ZuKToKICAgIHNlbGYuX2RvX2ZuID0gZG9fZm4KCiAgZGVmIHN0YXJ0X2J1bmRsZShzZWxmKToKICAgIHNpZ25hdHVyZSA9IERvRm5TaWduYXR1cmUoc2VsZi5fZG9fZm4pCiAgICBzZWxmLl9pbnZva2VyID0gRG9Gbkludm9rZXIuY3JlYXRlX2ludm9rZXIoCiAgICAgICAgc2lnbmF0dXJlLCBwcm9jZXNzX2ludm9jYXRpb249RmFsc2UpCgogIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQsIHdpbmRvdz1iZWFtLkRvRm4uV2luZG93UGFyYW0sICphcmdzLCAqKmt3YXJncyk6CiAgICBpbml0aWFsX3Jlc3RyaWN0aW9uID0gc2VsZi5faW52b2tlci5pbnZva2VfaW5pdGlhbF9yZXN0cmljdGlvbihlbGVtZW50KQogICAgeWllbGQgRWxlbWVudEFuZFJlc3RyaWN0aW9uKGVsZW1lbnQsIGluaXRpYWxfcmVzdHJpY3Rpb24pCgoKY2xhc3MgU3BsaXRSZXN0cmljdGlvbkZuKGJlYW0uRG9Gbik6CiAgIiIiQSB0cmFuc2Zvcm0gdGhhdCBwZXJmb3JtIGluaXRpYWwgc3BsaXR0aW5nIG9mIFNwbGl0dGFibGUgRG9GbiBpbnB1dHMuIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBkb19mbik6CiAgICBzZWxmLl9kb19mbiA9IGRvX2ZuCgogIGRlZiBzdGFydF9idW5kbGUoc2VsZik6CiAgICBzaWduYXR1cmUgPSBEb0ZuU2lnbmF0dXJlKHNlbGYuX2RvX2ZuKQogICAgc2VsZi5faW52b2tlciA9IERvRm5JbnZva2VyLmNyZWF0ZV9pbnZva2VyKAogICAgICAgIHNpZ25hdHVyZSwgcHJvY2Vzc19pbnZvY2F0aW9uPUZhbHNlKQoKICBkZWYgcHJvY2VzcyhzZWxmLCBlbGVtZW50X2FuZF9yZXN0cmljdGlvbiwgKmFyZ3MsICoqa3dhcmdzKToKICAgIGVsZW1lbnQgPSBlbGVtZW50X2FuZF9yZXN0cmljdGlvbi5lbGVtZW50CiAgICByZXN0cmljdGlvbiA9IGVsZW1lbnRfYW5kX3Jlc3RyaWN0aW9uLnJlc3RyaWN0aW9uCiAgICByZXN0cmljdGlvbl9wYXJ0cyA9IHNlbGYuX2ludm9rZXIuaW52b2tlX3NwbGl0KAogICAgICAgIGVsZW1lbnQsCiAgICAgICAgcmVzdHJpY3Rpb24pCiAgICBmb3IgcGFydCBpbiByZXN0cmljdGlvbl9wYXJ0czoKICAgICAgeWllbGQgRWxlbWVudEFuZFJlc3RyaWN0aW9uKGVsZW1lbnQsIHBhcnQpCgoKY2xhc3MgRXhwbG9kZVdpbmRvd3NGbihiZWFtLkRvRm4pOgogICIiIkEgdHJhbnNmb3JtIHRoYXQgZm9yY2VzIHRoZSBydW5uZXIgdG8gZXhwbG9kZSB3aW5kb3dzLgoKICBUaGlzIGlzIGRvbmUgdG8gbWFrZSBzdXJlIHRoYXQgU3BsaXR0YWJsZSBEb0ZuIHByb2Nlc2VzIGFuIGVsZW1lbnQgZm9yIGVhY2ggb2YKICB0aGUgd2luZG93cyB0aGF0IGVsZW1lbnQgYmVsb25ncyB0by4KICAiIiIKCiAgZGVmIHByb2Nlc3Moc2VsZiwgZWxlbWVudCwgd2luZG93PWJlYW0uRG9Gbi5XaW5kb3dQYXJhbSwgKmFyZ3MsICoqa3dhcmdzKToKICAgIHlpZWxkIGVsZW1lbnQKCgpjbGFzcyBSYW5kb21VbmlxdWVLZXlGbihiZWFtLkRvRm4pOgogICIiIkEgdHJhbnNmb3JtIHRoYXQgYXNzaWducyBhIHVuaXF1ZSBrZXkgdG8gZWFjaCBlbGVtZW50LiIiIgoKICBkZWYgcHJvY2VzcyhzZWxmLCBlbGVtZW50LCB3aW5kb3c9YmVhbS5Eb0ZuLldpbmRvd1BhcmFtLCAqYXJncywgKiprd2FyZ3MpOgogICAgIyBXZSBpZ25vcmUgVVVJRCBjb2xsaXNpb25zIGhlcmUgc2luY2UgdGhleSBhcmUgZXh0cmVtZWx5IHJhcmUuCiAgICB5aWVsZCAodXVpZC51dWlkNCgpLmJ5dGVzLCBlbGVtZW50KQoKCmNsYXNzIFByb2Nlc3NLZXllZEVsZW1lbnRzKFBUcmFuc2Zvcm0pOgogICIiIkEgcHJpbWl0aXZlIHRyYW5zZm9ybSB0aGF0IHBlcmZvcm1zIFNwbGl0dGFibGVEb0ZuIG1hZ2ljLgoKICBJbnB1dCB0byB0aGlzIHRyYW5zZm9ybSBzaG91bGQgYmUgYSBQQ29sbGVjdGlvbiBvZiBrZXllZCBFbGVtZW50QW5kUmVzdHJpY3Rpb24KICBvYmplY3RzLgogICIiIgoKICBkZWYgX19pbml0X18oCiAgICAgIHNlbGYsIHNkZiwgZWxlbWVudF9jb2RlciwgcmVzdHJpY3Rpb25fY29kZXIsIHdpbmRvd2luZ19zdHJhdGVneSwKICAgICAgcHRyYW5zZm9ybV9hcmdzLCBwdHJhbnNmb3JtX2t3YXJncywgcHRyYW5zZm9ybV9zaWRlX2lucHV0cyk6CiAgICBzZWxmLnNkZiA9IHNkZgogICAgc2VsZi5lbGVtZW50X2NvZGVyID0gZWxlbWVudF9jb2RlcgogICAgc2VsZi5yZXN0cmljdGlvbl9jb2RlciA9IHJlc3RyaWN0aW9uX2NvZGVyCiAgICBzZWxmLndpbmRvd2luZ19zdHJhdGVneSA9IHdpbmRvd2luZ19zdHJhdGVneQogICAgc2VsZi5wdHJhbnNmb3JtX2FyZ3MgPSBwdHJhbnNmb3JtX2FyZ3MKICAgIHNlbGYucHRyYW5zZm9ybV9rd2FyZ3MgPSBwdHJhbnNmb3JtX2t3YXJncwogICAgc2VsZi5wdHJhbnNmb3JtX3NpZGVfaW5wdXRzID0gcHRyYW5zZm9ybV9zaWRlX2lucHV0cwoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgIHJldHVybiBwdmFsdWUuUENvbGxlY3Rpb24ocGNvbGwucGlwZWxpbmUpCn1yc4MAAChYFAAAAFByb2Nlc3NLZXllZEVsZW1lbnRzWAUAAABjbGFzc0uXS6uHWBAAAABFeHBsb2RlV2luZG93c0ZuWAUAAABjbGFzc0uES42HWCIAAABQYWlyV2l0aFJlc3RyaWN0aW9uRm4uc3RhcnRfYnVuZGxlWAMAAABkZWZLZUtph1gVAAAARWxlbWVudEFuZFJlc3RyaWN0aW9uWAUAAABjbGFzc0tXS12HWBcAAABTcGxpdHRhYmxlUGFyRG9PdmVycmlkZVgFAAAAY2xhc3NLJEs6h1gPAAAAU3BsaXR0YWJsZVBhckRvWAUAAABjbGFzc0s8S1WHWBYAAABTcGxpdHRhYmxlUGFyRG8uZXhwYW5kWAMAAABkZWZLQ0tVh1gSAAAAU3BsaXRSZXN0cmljdGlvbkZuWAUAAABjbGFzc0tvS4KHWBkAAABSYW5kb21VbmlxdWVLZXlGbi5wcm9jZXNzWAMAAABkZWZLkkuVh1gdAAAAUHJvY2Vzc0tleWVkRWxlbWVudHMuX19pbml0X19YAwAAAGRlZkueS6iHWBoAAABTcGxpdFJlc3RyaWN0aW9uRm4ucHJvY2Vzc1gDAAAAZGVmS3pLgodYEQAAAFJhbmRvbVVuaXF1ZUtleUZuWAUAAABjbGFzc0uPS5WHWB8AAABTcGxpdFJlc3RyaWN0aW9uRm4uc3RhcnRfYnVuZGxlWAMAAABkZWZLdUt5h1gdAAAAUGFpcldpdGhSZXN0cmljdGlvbkZuLnByb2Nlc3NYAwAAAGRlZktqS22HWBgAAABFeHBsb2RlV2luZG93c0ZuLnByb2Nlc3NYAwAAAGRlZkuLS42HWB4AAABQYWlyV2l0aFJlc3RyaWN0aW9uRm4uX19pbml0X19YAwAAAGRlZktiS2SHWBUAAABQYWlyV2l0aFJlc3RyaWN0aW9uRm5YBQAAAGNsYXNzS19LbYdYHwAAAFNwbGl0dGFibGVQYXJEb092ZXJyaWRlLm1hdGNoZXNYAwAAAGRlZksrSzGHWBsAAABTcGxpdFJlc3RyaWN0aW9uRm4uX19pbml0X19YAwAAAGRlZktyS3SHWDEAAABTcGxpdHRhYmxlUGFyRG9PdmVycmlkZS5nZXRfcmVwbGFjZW1lbnRfdHJhbnNmb3JtWAMAAABkZWZLMks6h1gbAAAAUHJvY2Vzc0tleWVkRWxlbWVudHMuZXhwYW5kWAMAAABkZWZLqUurh1gYAAAAU3BsaXR0YWJsZVBhckRvLl9faW5pdF9fWAMAAABkZWZLP0tCh1geAAAARWxlbWVudEFuZFJlc3RyaWN0aW9uLl9faW5pdF9fWAMAAABkZWZLWktdh3V9cnSDAAAoWBQAAABQcm9jZXNzS2V5ZWRFbGVtZW50c2r+XAAAWA8AAABTcGxpdHRhYmxlUGFyRG9q/lwAAFgWAAAAU3BsaXR0YWJsZVBhckRvLmV4cGFuZGr+XAAAWBcAAABTcGxpdHRhYmxlUGFyRG9PdmVycmlkZWr+XAAAWBUAAABFbGVtZW50QW5kUmVzdHJpY3Rpb25q/lwAAFgfAAAAU3BsaXR0YWJsZVBhckRvT3ZlcnJpZGUubWF0Y2hlc2r+XAAAWBkAAABSYW5kb21VbmlxdWVLZXlGbi5wcm9jZXNzav5cAABYEAAAAEV4cGxvZGVXaW5kb3dzRm5q/lwAAFgVAAAAUGFpcldpdGhSZXN0cmljdGlvbkZuav5cAABYIgAAAFBhaXJXaXRoUmVzdHJpY3Rpb25Gbi5zdGFydF9idW5kbGVq/lwAAFgxAAAAU3BsaXR0YWJsZVBhckRvT3ZlcnJpZGUuZ2V0X3JlcGxhY2VtZW50X3RyYW5zZm9ybWr+XAAAWBEAAABSYW5kb21VbmlxdWVLZXlGbmr+XAAAWB8AAABTcGxpdFJlc3RyaWN0aW9uRm4uc3RhcnRfYnVuZGxlav5cAABYGwAAAFByb2Nlc3NLZXllZEVsZW1lbnRzLmV4cGFuZGr+XAAAWB0AAABQYWlyV2l0aFJlc3RyaWN0aW9uRm4ucHJvY2Vzc2r+XAAAWBgAAABFeHBsb2RlV2luZG93c0ZuLnByb2Nlc3Nq/lwAAFgSAAAAU3BsaXRSZXN0cmljdGlvbkZuav5cAABYGgAAAFNwbGl0UmVzdHJpY3Rpb25Gbi5wcm9jZXNzav5cAAB1an1pAABYHgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX2NvbW1vbnJ1gwAAhYFydoMAAH1yd4MAAGJ0VRRhcGFjaGVfYmVhbS5pby52Y2ZpbyhY1UwAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiQSBzb3VyY2UgZm9yIHJlYWRpbmcgZnJvbSBWQ0YgZmlsZXMgKHZlcnNpb24gNC54KS4KClRoZSA0LjIgc3BlYyBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9zYW10b29scy5naXRodWIuaW8vaHRzLXNwZWNzL1ZDRnY0LjIucGRmLgoiIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgbG9nZ2luZwppbXBvcnQgdHJhY2ViYWNrCmZyb20gYnVpbHRpbnMgaW1wb3J0IG5leHQKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0CmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IG5hbWVkdHVwbGUKCmZyb20gZnV0dXJlLnV0aWxzIGltcG9ydCBpdGVyaXRlbXMKZnJvbSBwYXN0LmJ1aWx0aW5zIGltcG9ydCBsb25nCmZyb20gcGFzdC5idWlsdGlucyBpbXBvcnQgdW5pY29kZQoKaW1wb3J0IHZjZgoKZnJvbSBhcGFjaGVfYmVhbS5jb2RlcnMgaW1wb3J0IGNvZGVycwpmcm9tIGFwYWNoZV9iZWFtLmlvIGltcG9ydCBmaWxlYmFzZWRzb3VyY2UKZnJvbSBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtIGltcG9ydCBDb21wcmVzc2lvblR5cGVzCmZyb20gYXBhY2hlX2JlYW0uaW8uaW9iYXNlIGltcG9ydCBSZWFkCmZyb20gYXBhY2hlX2JlYW0uaW8udGV4dGlvIGltcG9ydCBfVGV4dFNvdXJjZSBhcyBUZXh0U291cmNlCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgUFRyYW5zZm9ybQoKCl9fYWxsX18gPSBbJ1JlYWRGcm9tVmNmJywgJ1ZhcmlhbnQnLCAnVmFyaWFudENhbGwnLCAnVmFyaWFudEluZm8nLAogICAgICAgICAgICdNYWxmb3JtZWRWY2ZSZWNvcmQnXQoKIyBTdG9yZXMgZGF0YSBhYm91dCB2YXJpYW50IElORk8gZmllbGRzLiBUaGUgdHlwZSBvZiAnZGF0YScgaXMgc3BlY2lmaWVkIGluIHRoZQojIFZDRiBoZWFkZXJzLiAnZmllbGRfY291bnQnIGlzIGEgc3RyaW5nIHRoYXQgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgZmllbGRzCiMgdGhhdCB0aGUgZGF0YSB0eXBlIGNvbnRhaW5zLiBJdHMgdmFsdWUgY2FuIGVpdGhlciBiZSBhIG51bWJlciByZXByZXNlbnRpbmcgYQojIGNvbnN0YW50IG51bWJlciBvZiBmaWVsZHMsIGBOb25lYCBpbmRpY2F0aW5nIHRoYXQgdGhlIHZhbHVlIGlzIG5vdCBzZXQKIyAoZXF1aXZhbGVudCB0byAnLicgaW4gdGhlIFZDRiBmaWxlKSBvciBvbmUgb2Y6CiMgICAtICdBJzogb25lIHZhbHVlIHBlciBhbHRlcm5hdGUgYWxsZWxlLgojICAgLSAnRyc6IG9uZSB2YWx1ZSBmb3IgZWFjaCBwb3NzaWJsZSBnZW5vdHlwZS4KIyAgIC0gJ1InOiBvbmUgdmFsdWUgZm9yIGVhY2ggcG9zc2libGUgYWxsZWxlIChpbmNsdWRpbmcgdGhlIHJlZmVyZW5jZSkuClZhcmlhbnRJbmZvID0gbmFtZWR0dXBsZSgnVmFyaWFudEluZm8nLCBbJ2RhdGEnLCAnZmllbGRfY291bnQnXSkKIyBTdG9yZXMgZGF0YSBhYm91dCBmYWlsZWQgVkNGIHJlY29yZCByZWFkcy4gYGxpbmVgIGlzIHRoZSB0ZXh0IGxpbmUgdGhhdAojIGNhdXNlZCB0aGUgZmFpbGVkIHJlYWQgYW5kIGBmaWxlX25hbWVgIGlzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRoYXQgdGhlIHJlYWQKIyBmYWlsZWQgaW4uCk1hbGZvcm1lZFZjZlJlY29yZCA9IG5hbWVkdHVwbGUoJ01hbGZvcm1lZFZjZlJlY29yZCcsIFsnZmlsZV9uYW1lJywgJ2xpbmUnXSkKTUlTU0lOR19GSUVMRF9WQUxVRSA9ICcuJyAgIyBJbmRpY2F0ZXMgZmllbGQgaXMgbWlzc2luZyBpbiBWQ0YgcmVjb3JkLgpQQVNTX0ZJTFRFUiA9ICdQQVNTJyAgIyBJbmRpY2F0ZXMgdGhhdCBhbGwgZmlsdGVycyBoYXZlIGJlZW4gcGFzc2VkLgpFTkRfSU5GT19LRVkgPSAnRU5EJyAgIyBUaGUgaW5mbyBrZXkgdGhhdCBleHBsaWNpdGx5IHNwZWNpZmllcyBlbmQgb2YgYSByZWNvcmQuCkdFTk9UWVBFX0ZPUk1BVF9LRVkgPSAnR1QnICAjIFRoZSBnZW5vdHlwZSBmb3JtYXQga2V5IGluIGEgY2FsbC4KUEhBU0VTRVRfRk9STUFUX0tFWSA9ICdQUycgICMgVGhlIHBoYXNlc2V0IGZvcm1hdCBrZXkuCkRFRkFVTFRfUEhBU0VTRVRfVkFMVUUgPSAnKicgICMgRGVmYXVsdCBwaGFzZXNldCB2YWx1ZSBpZiBjYWxsIGlzIHBoYXNlZCwgYnV0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbm8gJ1BTJyBpcyBwcmVzZW50LgpNSVNTSU5HX0dFTk9UWVBFX1ZBTFVFID0gLTEgICMgR2Vub3R5cGUgdG8gdXNlIHdoZW4gJy4nIGlzIHVzZWQgaW4gR1QgZmllbGQuCgoKY2xhc3MgVmFyaWFudChvYmplY3QpOgogICIiIkEgY2xhc3MgdG8gc3RvcmUgaW5mbyBhYm91dCBhIGdlbm9taWMgdmFyaWFudC4KCiAgRWFjaCBvYmplY3QgY29ycmVzcG9uZHMgdG8gYSBzaW5nbGUgcmVjb3JkIGluIGEgVkNGIGZpbGUuCiAgIiIiCiAgX19oYXNoX18gPSBOb25lCgogIGRlZiBfX2luaXRfXyhzZWxmLAogICAgICAgICAgICAgICByZWZlcmVuY2VfbmFtZT1Ob25lLAogICAgICAgICAgICAgICBzdGFydD1Ob25lLAogICAgICAgICAgICAgICBlbmQ9Tm9uZSwKICAgICAgICAgICAgICAgcmVmZXJlbmNlX2Jhc2VzPU5vbmUsCiAgICAgICAgICAgICAgIGFsdGVybmF0ZV9iYXNlcz1Ob25lLAogICAgICAgICAgICAgICBuYW1lcz1Ob25lLAogICAgICAgICAgICAgICBxdWFsaXR5PU5vbmUsCiAgICAgICAgICAgICAgIGZpbHRlcnM9Tm9uZSwKICAgICAgICAgICAgICAgaW5mbz1Ob25lLAogICAgICAgICAgICAgICBjYWxscz1Ob25lKToKICAgICIiIkluaXRpYWxpemUgdGhlIDpjbGFzczpgVmFyaWFudGAgb2JqZWN0LgoKICAgIEFyZ3M6CiAgICAgIHJlZmVyZW5jZV9uYW1lIChzdHIpOiBUaGUgcmVmZXJlbmNlIG9uIHdoaWNoIHRoaXMgdmFyaWFudCBvY2N1cnMKICAgICAgICAoc3VjaCBhcyBgY2hyMjBgIG9yIGBYYCkuIC4KICAgICAgc3RhcnQgKGludCk6IFRoZSBwb3NpdGlvbiBhdCB3aGljaCB0aGlzIHZhcmlhbnQgb2NjdXJzICgwLWJhc2VkKS4KICAgICAgICBDb3JyZXNwb25kcyB0byB0aGUgZmlyc3QgYmFzZSBvZiB0aGUgc3RyaW5nIG9mIHJlZmVyZW5jZSBiYXNlcy4KICAgICAgZW5kIChpbnQpOiBUaGUgZW5kIHBvc2l0aW9uICgwLWJhc2VkKSBvZiB0aGlzIHZhcmlhbnQuIENvcnJlc3BvbmRzIHRvIHRoZQogICAgICAgIGZpcnN0IGJhc2UgYWZ0ZXIgdGhlIGxhc3QgYmFzZSBpbiB0aGUgcmVmZXJlbmNlIGFsbGVsZS4KICAgICAgcmVmZXJlbmNlX2Jhc2VzIChzdHIpOiBUaGUgcmVmZXJlbmNlIGJhc2VzIGZvciB0aGlzIHZhcmlhbnQuCiAgICAgIGFsdGVybmF0ZV9iYXNlcyAoTGlzdFtzdHJdKTogVGhlIGJhc2VzIHRoYXQgYXBwZWFyIGluc3RlYWQgb2YgdGhlCiAgICAgICAgcmVmZXJlbmNlIGJhc2VzLgogICAgICBuYW1lcyAoTGlzdFtzdHJdKTogTmFtZXMgZm9yIHRoZSB2YXJpYW50LCBmb3IgZXhhbXBsZSBhIFJlZlNOUCBJRC4KICAgICAgcXVhbGl0eSAoZmxvYXQpOiBQaHJlZC1zY2FsZWQgcXVhbGl0eSBzY29yZSAoLTEwbG9nMTAgcHJvYihjYWxsIGlzIHdyb25nKSkKICAgICAgICBIaWdoZXIgdmFsdWVzIGltcGx5IGJldHRlciBxdWFsaXR5LgogICAgICBmaWx0ZXJzIChMaXN0W3N0cl0pOiBBIGxpc3Qgb2YgZmlsdGVycyAobm9ybWFsbHkgcXVhbGl0eSBmaWx0ZXJzKSB0aGlzCiAgICAgICAgdmFyaWFudCBoYXMgZmFpbGVkLiBgUEFTU2AgaW5kaWNhdGVzIHRoaXMgdmFyaWFudCBoYXMgcGFzc2VkIGFsbAogICAgICAgIGZpbHRlcnMuCiAgICAgIGluZm8gKGRpY3QpOiBBIG1hcCBvZiBhZGRpdGlvbmFsIHZhcmlhbnQgaW5mb3JtYXRpb24uIFRoZSBrZXkgaXMgc3BlY2lmaWVkCiAgICAgICAgaW4gdGhlIFZDRiByZWNvcmQgYW5kIHRoZSB2YWx1ZSBpcyBvZiB0eXBlIGBgVmFyaWFudEluZm9gYC4KICAgICAgY2FsbHMgKGxpc3Qgb2YgOmNsYXNzOmBWYXJpYW50Q2FsbGApOiBUaGUgdmFyaWFudCBjYWxscyBmb3IgdGhpcyB2YXJpYW50LgogICAgICAgIEVhY2ggb25lIHJlcHJlc2VudHMgdGhlIGRldGVybWluYXRpb24gb2YgZ2Vub3R5cGUgd2l0aCByZXNwZWN0IHRvIHRoaXMKICAgICAgICB2YXJpYW50LgogICAgIiIiCiAgICBzZWxmLnJlZmVyZW5jZV9uYW1lID0gcmVmZXJlbmNlX25hbWUKICAgIHNlbGYuc3RhcnQgPSBzdGFydAogICAgc2VsZi5lbmQgPSBlbmQKICAgIHNlbGYucmVmZXJlbmNlX2Jhc2VzID0gcmVmZXJlbmNlX2Jhc2VzCiAgICBzZWxmLmFsdGVybmF0ZV9iYXNlcyA9IGFsdGVybmF0ZV9iYXNlcyBvciBbXQogICAgc2VsZi5uYW1lcyA9IG5hbWVzIG9yIFtdCiAgICBzZWxmLnF1YWxpdHkgPSBxdWFsaXR5CiAgICBzZWxmLmZpbHRlcnMgPSBmaWx0ZXJzIG9yIFtdCiAgICBzZWxmLmluZm8gPSBpbmZvIG9yIHt9CiAgICBzZWxmLmNhbGxzID0gY2FsbHMgb3IgW10KCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gKGlzaW5zdGFuY2Uob3RoZXIsIFZhcmlhbnQpIGFuZAogICAgICAgICAgICB2YXJzKHNlbGYpID09IHZhcnMob3RoZXIpKQoKICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKICAgICMgVE9ETyhCRUFNLTU5NDkpOiBOZWVkZWQgZm9yIFB5dGhvbiAyIGNvbXBhdGliaWxpdHkuCiAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICcsICcuam9pbigKICAgICAgICBbc3RyKHMpIGZvciBzIGluIFtzZWxmLnJlZmVyZW5jZV9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZWZlcmVuY2VfYmFzZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hbHRlcm5hdGVfYmFzZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5uYW1lcywKICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnF1YWxpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5maWx0ZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNhbGxzXV0pCgogIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgogICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFZhcmlhbnQpOgogICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKCiAgICAjIEVsZW1lbnRzIHNob3VsZCBmaXJzdCBiZSBzb3J0ZWQgYnkgcmVmZXJlbmNlX25hbWUsIHN0YXJ0LCBlbmQuCiAgICAjIE9yZGVyaW5nIG9mIG90aGVyIG1lbWJlcnMgaXMgbm90IGltcG9ydGFudCwgYnV0IG11c3QgYmUKICAgICMgZGV0ZXJtaW5pc3RpYy4KICAgIGlmIHNlbGYucmVmZXJlbmNlX25hbWUgIT0gb3RoZXIucmVmZXJlbmNlX25hbWU6CiAgICAgIHJldHVybiBzZWxmLnJlZmVyZW5jZV9uYW1lIDwgb3RoZXIucmVmZXJlbmNlX25hbWUKICAgIGVsaWYgc2VsZi5zdGFydCAhPSBvdGhlci5zdGFydDoKICAgICAgcmV0dXJuIHNlbGYuc3RhcnQgPCBvdGhlci5zdGFydAogICAgZWxpZiBzZWxmLmVuZCAhPSBvdGhlci5lbmQ6CiAgICAgIHJldHVybiBzZWxmLmVuZCA8IG90aGVyLmVuZAoKICAgIHNlbGZfdmFycyA9IHZhcnMoc2VsZikKICAgIG90aGVyX3ZhcnMgPSB2YXJzKG90aGVyKQogICAgZm9yIGtleSBpbiBzb3J0ZWQoc2VsZl92YXJzKToKICAgICAgaWYgc2VsZl92YXJzW2tleV0gIT0gb3RoZXJfdmFyc1trZXldOgogICAgICAgIHJldHVybiBzZWxmX3ZhcnNba2V5XSA8IG90aGVyX3ZhcnNba2V5XQoKICAgIHJldHVybiBGYWxzZQoKICBkZWYgX19sZV9fKHNlbGYsIG90aGVyKToKICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBWYXJpYW50KToKICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCgogICAgcmV0dXJuIHNlbGYgPCBvdGhlciBvciBzZWxmID09IG90aGVyCgogIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuIG5vdCBzZWxmID09IG90aGVyCgogIGRlZiBfX2d0X18oc2VsZiwgb3RoZXIpOgogICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFZhcmlhbnQpOgogICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKCiAgICByZXR1cm4gb3RoZXIgPCBzZWxmCgogIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgogICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFZhcmlhbnQpOgogICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKCiAgICByZXR1cm4gb3RoZXIgPD0gc2VsZgoKCmNsYXNzIFZhcmlhbnRDYWxsKG9iamVjdCk6CiAgIiIiQSBjbGFzcyB0byBzdG9yZSBpbmZvIGFib3V0IGEgdmFyaWFudCBjYWxsLgoKICBBIGNhbGwgcmVwcmVzZW50cyB0aGUgZGV0ZXJtaW5hdGlvbiBvZiBnZW5vdHlwZSB3aXRoIHJlc3BlY3QgdG8gYSBwYXJ0aWN1bGFyCiAgdmFyaWFudC4gSXQgbWF5IGluY2x1ZGUgYXNzb2NpYXRlZCBpbmZvcm1hdGlvbiBzdWNoIGFzIHF1YWxpdHkgYW5kIHBoYXNpbmcuCiAgIiIiCgogIF9faGFzaF9fID0gTm9uZQoKICBkZWYgX19pbml0X18oc2VsZiwgbmFtZT1Ob25lLCBnZW5vdHlwZT1Ob25lLCBwaGFzZXNldD1Ob25lLCBpbmZvPU5vbmUpOgogICAgIiIiSW5pdGlhbGl6ZSB0aGUgOmNsYXNzOmBWYXJpYW50Q2FsbGAgb2JqZWN0LgoKICAgIEFyZ3M6CiAgICAgIG5hbWUgKHN0cik6IFRoZSBuYW1lIG9mIHRoZSBjYWxsLgogICAgICBnZW5vdHlwZSAoTGlzdFtpbnRdKTogVGhlIGdlbm90eXBlIG9mIHRoaXMgdmFyaWFudCBjYWxsIGFzIHNwZWNpZmllZCBieQogICAgICAgIHRoZSBWQ0Ygc2NoZW1hLiBUaGUgdmFsdWVzIGFyZSBlaXRoZXIgYDBgIHJlcHJlc2VudGluZyB0aGUgcmVmZXJlbmNlLAogICAgICAgIG9yIGEgMS1iYXNlZCBpbmRleCBpbnRvIGFsdGVybmF0ZSBiYXNlcy4gT3JkZXJpbmcgaXMgb25seSBpbXBvcnRhbnQgaWYKICAgICAgICBgcGhhc2VzZXRgIGlzIHByZXNlbnQuIElmIGEgZ2Vub3R5cGUgaXMgbm90IGNhbGxlZCAodGhhdCBpcywgYSBgLmAgaXMKICAgICAgICBwcmVzZW50IGluIHRoZSBHVCBzdHJpbmcpLCAtMSBpcyB1c2VkCiAgICAgIHBoYXNlc2V0IChzdHIpOiBJZiB0aGlzIGZpZWxkIGlzIHByZXNlbnQsIHRoaXMgdmFyaWFudCBjYWxsJ3MgZ2Vub3R5cGUKICAgICAgICBvcmRlcmluZyBpbXBsaWVzIHRoZSBwaGFzZSBvZiB0aGUgYmFzZXMgYW5kIGlzIGNvbnNpc3RlbnQgd2l0aCBhbnkgb3RoZXIKICAgICAgICB2YXJpYW50IGNhbGxzIGluIHRoZSBzYW1lIHJlZmVyZW5jZSBzZXF1ZW5jZSB3aGljaCBoYXZlIHRoZSBzYW1lCiAgICAgICAgcGhhc2VzZXQgdmFsdWUuIElmIHRoZSBnZW5vdHlwZSBkYXRhIHdhcyBwaGFzZWQgYnV0IG5vIHBoYXNlIHNldCB3YXMKICAgICAgICBzcGVjaWZpZWQsIHRoaXMgZmllbGQgd2lsbCBiZSBzZXQgdG8gYCpgLgogICAgICBpbmZvIChkaWN0KTogQSBtYXAgb2YgYWRkaXRpb25hbCB2YXJpYW50IGNhbGwgaW5mb3JtYXRpb24uIFRoZSBrZXkgaXMKICAgICAgICBzcGVjaWZpZWQgaW4gdGhlIFZDRiByZWNvcmQgYW5kIHRoZSB0eXBlIG9mIHRoZSB2YWx1ZSBpcyBzcGVjaWZpZWQgYnkKICAgICAgICB0aGUgVkNGIGhlYWRlciBGT1JNQVQuCiAgICAiIiIKICAgIHNlbGYubmFtZSA9IG5hbWUKICAgIHNlbGYuZ2Vub3R5cGUgPSBnZW5vdHlwZSBvciBbXQogICAgc2VsZi5waGFzZXNldCA9IHBoYXNlc2V0CiAgICBzZWxmLmluZm8gPSBpbmZvIG9yIHt9CgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuICgoc2VsZi5uYW1lLCBzZWxmLmdlbm90eXBlLCBzZWxmLnBoYXNlc2V0LCBzZWxmLmluZm8pID09CiAgICAgICAgICAgIChvdGhlci5uYW1lLCBvdGhlci5nZW5vdHlwZSwgb3RoZXIucGhhc2VzZXQsIG90aGVyLmluZm8pKQoKICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKICAgICMgVE9ETyhCRUFNLTU5NDkpOiBOZWVkZWQgZm9yIFB5dGhvbiAyIGNvbXBhdGliaWxpdHkuCiAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICcsICcuam9pbigKICAgICAgICBbc3RyKHMpIGZvciBzIGluIFtzZWxmLm5hbWUsIHNlbGYuZ2Vub3R5cGUsIHNlbGYucGhhc2VzZXQsIHNlbGYuaW5mb11dKQoKCmNsYXNzIF9WY2ZTb3VyY2UoZmlsZWJhc2Vkc291cmNlLkZpbGVCYXNlZFNvdXJjZSk6CiAgIiIiQSBzb3VyY2UgZm9yIHJlYWRpbmcgVkNGIGZpbGVzLgoKICBQYXJzZXMgVkNGIGZpbGVzICh2ZXJzaW9uIDQpIHVzaW5nIFB5VkNGIGxpYnJhcnkuIElmIGZpbGVfcGF0dGVybiBzcGVjaWZpZXMKICBtdWx0aXBsZSBmaWxlcywgdGhlbiB0aGUgaGVhZGVyIGZyb20gZWFjaCBmaWxlIGlzIHVzZWQgc2VwYXJhdGVseSB0byBwYXJzZQogIHRoZSBjb250ZW50LiBIb3dldmVyLCB0aGUgb3V0cHV0IHdpbGwgYmUgYSB1bmlmb3JtIFBDb2xsZWN0aW9uIG9mCiAgOmNsYXNzOmBWYXJpYW50YCBvYmplY3RzLgogICIiIgoKICBERUZBVUxUX1ZDRl9SRUFEX0JVRkZFUl9TSVpFID0gNjU1MzYgICMgNjRrQgoKICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgZmlsZV9wYXR0ZXJuLAogICAgICAgICAgICAgICBjb21wcmVzc2lvbl90eXBlPUNvbXByZXNzaW9uVHlwZXMuQVVUTywKICAgICAgICAgICAgICAgYnVmZmVyX3NpemU9REVGQVVMVF9WQ0ZfUkVBRF9CVUZGRVJfU0laRSwKICAgICAgICAgICAgICAgdmFsaWRhdGU9VHJ1ZSwKICAgICAgICAgICAgICAgYWxsb3dfbWFsZm9ybWVkX3JlY29yZHM9RmFsc2UpOgogICAgc3VwZXIoX1ZjZlNvdXJjZSwgc2VsZikuX19pbml0X18oZmlsZV9wYXR0ZXJuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3Npb25fdHlwZT1jb21wcmVzc2lvbl90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGU9dmFsaWRhdGUpCgogICAgc2VsZi5faGVhZGVyX2xpbmVzX3Blcl9maWxlID0ge30KICAgIHNlbGYuX2NvbXByZXNzaW9uX3R5cGUgPSBjb21wcmVzc2lvbl90eXBlCiAgICBzZWxmLl9idWZmZXJfc2l6ZSA9IGJ1ZmZlcl9zaXplCiAgICBzZWxmLl9hbGxvd19tYWxmb3JtZWRfcmVjb3JkcyA9IGFsbG93X21hbGZvcm1lZF9yZWNvcmRzCgogIGRlZiByZWFkX3JlY29yZHMoc2VsZiwgZmlsZV9uYW1lLCByYW5nZV90cmFja2VyKToKICAgIHJlY29yZF9pdGVyYXRvciA9IF9WY2ZTb3VyY2UuX1ZjZlJlY29yZEl0ZXJhdG9yKAogICAgICAgIGZpbGVfbmFtZSwKICAgICAgICByYW5nZV90cmFja2VyLAogICAgICAgIHNlbGYuX3BhdHRlcm4sCiAgICAgICAgc2VsZi5fY29tcHJlc3Npb25fdHlwZSwKICAgICAgICBzZWxmLl9hbGxvd19tYWxmb3JtZWRfcmVjb3JkcywKICAgICAgICBidWZmZXJfc2l6ZT1zZWxmLl9idWZmZXJfc2l6ZSwKICAgICAgICBza2lwX2hlYWRlcl9saW5lcz0wKQoKICAgICMgQ29udmVydCBpdGVyYXRvciB0byBnZW5lcmF0b3IgdG8gYWJzdHJhY3QgYmVoYXZpb3IKICAgIGZvciBsaW5lIGluIHJlY29yZF9pdGVyYXRvcjoKICAgICAgeWllbGQgbGluZQoKICBjbGFzcyBfVmNmUmVjb3JkSXRlcmF0b3Iob2JqZWN0KToKICAgICIiIkFuIEl0ZXJhdG9yIGZvciBwcm9jZXNzaW5nIGEgc2luZ2xlIFZDRiBmaWxlLiIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLAogICAgICAgICAgICAgICAgIGZpbGVfbmFtZSwKICAgICAgICAgICAgICAgICByYW5nZV90cmFja2VyLAogICAgICAgICAgICAgICAgIGZpbGVfcGF0dGVybiwKICAgICAgICAgICAgICAgICBjb21wcmVzc2lvbl90eXBlLAogICAgICAgICAgICAgICAgIGFsbG93X21hbGZvcm1lZF9yZWNvcmRzLAogICAgICAgICAgICAgICAgICoqa3dhcmdzKToKICAgICAgc2VsZi5faGVhZGVyX2xpbmVzID0gW10KICAgICAgc2VsZi5fbGFzdF9yZWNvcmQgPSBOb25lCiAgICAgIHNlbGYuX2ZpbGVfbmFtZSA9IGZpbGVfbmFtZQogICAgICBzZWxmLl9hbGxvd19tYWxmb3JtZWRfcmVjb3JkcyA9IGFsbG93X21hbGZvcm1lZF9yZWNvcmRzCgogICAgICB0ZXh0X3NvdXJjZSA9IFRleHRTb3VyY2UoCiAgICAgICAgICBmaWxlX3BhdHRlcm4sCiAgICAgICAgICAwLCAgIyBtaW5fYnVuZGxlX3NpemUKICAgICAgICAgIGNvbXByZXNzaW9uX3R5cGUsCiAgICAgICAgICBUcnVlLCAgIyBzdHJpcF90cmFpbGluZ19uZXdsaW5lcwogICAgICAgICAgY29kZXJzLlN0clV0ZjhDb2RlcigpLCAgIyBjb2RlcgogICAgICAgICAgdmFsaWRhdGU9RmFsc2UsCiAgICAgICAgICBoZWFkZXJfcHJvY2Vzc29yX2Zucz0obGFtYmRhIHg6IHguc3RhcnRzd2l0aCgnIycpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0b3JlX2hlYWRlcl9saW5lcyksCiAgICAgICAgICAqKmt3YXJncykKCiAgICAgIHNlbGYuX3RleHRfbGluZXMgPSB0ZXh0X3NvdXJjZS5yZWFkX3JlY29yZHMoc2VsZi5fZmlsZV9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlX3RyYWNrZXIpCiAgICAgIHRyeToKICAgICAgICBzZWxmLl92Y2ZfcmVhZGVyID0gdmNmLlJlYWRlcihmc29jaz1zZWxmLl9jcmVhdGVfZ2VuZXJhdG9yKCkpCiAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyBlOgogICAgICAgICMgVGhyb3cgdGhlIGV4Y2VwdGlvbiBpbnNpZGUgdGhlIGdlbmVyYXRvciB0byBlbnN1cmUgZmlsZSBpcyBwcm9wZXJseQogICAgICAgICMgY2xvc2VkIChpdCdzIG9wZW5lZCBpbnNpZGUgVGV4dFNvdXJjZS5yZWFkX3JlY29yZHMpLgogICAgICAgIHNlbGYuX3RleHRfbGluZXMudGhyb3coCiAgICAgICAgICAgIFZhbHVlRXJyb3IoJ0FuIGV4Y2VwdGlvbiB3YXMgcmFpc2VkIHdoZW4gcmVhZGluZyBoZWFkZXIgZnJvbSBWQ0YgJwogICAgICAgICAgICAgICAgICAgICAgICdmaWxlICVzOiAlcycgJSAoc2VsZi5fZmlsZV9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2ViYWNrLmZvcm1hdF9leGMoZSkpKSkKCiAgICBkZWYgX3N0b3JlX2hlYWRlcl9saW5lcyhzZWxmLCBoZWFkZXJfbGluZXMpOgogICAgICBzZWxmLl9oZWFkZXJfbGluZXMgPSBoZWFkZXJfbGluZXMKCiAgICBkZWYgX2NyZWF0ZV9nZW5lcmF0b3Ioc2VsZik6CiAgICAgIGhlYWRlcl9wcm9jZXNzZWQgPSBGYWxzZQogICAgICBmb3IgdGV4dF9saW5lIGluIHNlbGYuX3RleHRfbGluZXM6CiAgICAgICAgaWYgbm90IGhlYWRlcl9wcm9jZXNzZWQgYW5kIHNlbGYuX2hlYWRlcl9saW5lczoKICAgICAgICAgIGZvciBoZWFkZXIgaW4gc2VsZi5faGVhZGVyX2xpbmVzOgogICAgICAgICAgICBzZWxmLl9sYXN0X3JlY29yZCA9IGhlYWRlcgogICAgICAgICAgICB5aWVsZCBzZWxmLl9sYXN0X3JlY29yZAogICAgICAgICAgaGVhZGVyX3Byb2Nlc3NlZCA9IFRydWUKICAgICAgICAjIFB5VkNGIGhhcyBleHBsaWNpdCBzdHIoKSBjYWxscyB3aGVuIHBhcnNpbmcgSU5GTyBmaWVsZHMsIHdoaWNoIGZhaWxzCiAgICAgICAgIyB3aXRoIFVURi04IGRlY29kZWQgc3RyaW5ncy4gRW5jb2RlIHRoZSBsaW5lIGJhY2sgdG8gVVRGLTguCiAgICAgICAgc2VsZi5fbGFzdF9yZWNvcmQgPSB0ZXh0X2xpbmUuZW5jb2RlKCd1dGYtOCcpCiAgICAgICAgeWllbGQgc2VsZi5fbGFzdF9yZWNvcmQKCiAgICBkZWYgX19pdGVyX18oc2VsZik6CiAgICAgIHJldHVybiBzZWxmCgogICAgIyBweWxpbnQ6IGRpc2FibGU9bmV4dC1tZXRob2QtZGVmaW5lZAogICAgZGVmIG5leHQoc2VsZik6CiAgICAgIHJldHVybiBzZWxmLl9fbmV4dF9fKCkKCiAgICBkZWYgX19uZXh0X18oc2VsZik6CiAgICAgIHRyeToKICAgICAgICByZWNvcmQgPSBuZXh0KHNlbGYuX3ZjZl9yZWFkZXIpCiAgICAgICAgcmV0dXJuIHNlbGYuX2NvbnZlcnRfdG9fdmFyaWFudF9yZWNvcmQocmVjb3JkLCBzZWxmLl92Y2ZfcmVhZGVyLmluZm9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3ZjZl9yZWFkZXIuZm9ybWF0cykKICAgICAgZXhjZXB0IChMb29rdXBFcnJvciwgVmFsdWVFcnJvcikgYXMgZToKICAgICAgICBpZiBzZWxmLl9hbGxvd19tYWxmb3JtZWRfcmVjb3JkczoKICAgICAgICAgIGxvZ2dpbmcud2FybmluZygKICAgICAgICAgICAgICAnQW4gZXhjZXB0aW9uIHdhcyByYWlzZWQgd2hlbiByZWFkaW5nIHJlY29yZCBmcm9tIFZDRiBmaWxlICcKICAgICAgICAgICAgICAnJXMuIEludmFsaWQgcmVjb3JkIHdhcyAlczogJXMnLAogICAgICAgICAgICAgIHNlbGYuX2ZpbGVfbmFtZSwgc2VsZi5fbGFzdF9yZWNvcmQsIHRyYWNlYmFjay5mb3JtYXRfZXhjKGUpKQogICAgICAgICAgcmV0dXJuIE1hbGZvcm1lZFZjZlJlY29yZChzZWxmLl9maWxlX25hbWUsIHNlbGYuX2xhc3RfcmVjb3JkKQoKICAgICAgICAjIFRocm93IHRoZSBleGNlcHRpb24gaW5zaWRlIHRoZSBnZW5lcmF0b3IgdG8gZW5zdXJlIGZpbGUgaXMgcHJvcGVybHkKICAgICAgICAjIGNsb3NlZCAoaXQncyBvcGVuZWQgaW5zaWRlIFRleHRTb3VyY2UucmVhZF9yZWNvcmRzKS4KICAgICAgICBzZWxmLl90ZXh0X2xpbmVzLnRocm93KAogICAgICAgICAgICBWYWx1ZUVycm9yKCdBbiBleGNlcHRpb24gd2FzIHJhaXNlZCB3aGVuIHJlYWRpbmcgcmVjb3JkIGZyb20gVkNGICcKICAgICAgICAgICAgICAgICAgICAgICAnZmlsZSAlcy4gSW52YWxpZCByZWNvcmQgd2FzICVzOiAlcycgJSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbGFzdF9yZWNvcmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlYmFjay5mb3JtYXRfZXhjKGUpKSkpCgogICAgZGVmIF9jb252ZXJ0X3RvX3ZhcmlhbnRfcmVjb3JkKHNlbGYsIHJlY29yZCwgaW5mb3MsIGZvcm1hdHMpOgogICAgICAiIiJDb252ZXJ0cyB0aGUgUHlWQ0YgcmVjb3JkIHRvIGEgOmNsYXNzOmBWYXJpYW50YCBvYmplY3QuCgogICAgICBBcmdzOgogICAgICAgIHJlY29yZCAoOmNsYXNzOmB+dmNmLm1vZGVsLl9SZWNvcmRgKTogQW4gb2JqZWN0IGNvbnRhaW5pbmcgaW5mbyBhYm91dCBhCiAgICAgICAgICB2YXJpYW50LgogICAgICAgIGluZm9zIChkaWN0KTogVGhlIFB5VkNGIGRpY3Qgc3RvcmluZyBJTkZPIGV4dHJhY3RlZCBmcm9tIHRoZSBWQ0YgaGVhZGVyLgogICAgICAgICAgVGhlIGtleSBpcyB0aGUgaW5mbyBrZXkgYW5kIHRoZSB2YWx1ZSBpcyA6Y2xhc3M6YH52Y2YucGFyc2VyLl9JbmZvYC4KICAgICAgICBmb3JtYXRzIChkaWN0KTogVGhlIFB5VkNGIGRpY3Qgc3RvcmluZyBGT1JNQVQgZXh0cmFjdGVkIGZyb20gdGhlIFZDRgogICAgICAgICAgaGVhZGVyLiBUaGUga2V5IGlzIHRoZSBGT1JNQVQga2V5IGFuZCB0aGUgdmFsdWUgaXMKICAgICAgICAgIDpjbGFzczpgfnZjZi5wYXJzZXIuX0Zvcm1hdGAuCiAgICAgIFJldHVybnM6CiAgICAgICAgQSA6Y2xhc3M6YFZhcmlhbnRgIG9iamVjdCBmcm9tIHRoZSBnaXZlbiByZWNvcmQuCiAgICAgICIiIgogICAgICB2YXJpYW50ID0gVmFyaWFudCgpCiAgICAgIHZhcmlhbnQucmVmZXJlbmNlX25hbWUgPSByZWNvcmQuQ0hST00KICAgICAgdmFyaWFudC5zdGFydCA9IHJlY29yZC5zdGFydAogICAgICB2YXJpYW50LmVuZCA9IHJlY29yZC5lbmQKICAgICAgdmFyaWFudC5yZWZlcmVuY2VfYmFzZXMgPSAoCiAgICAgICAgICByZWNvcmQuUkVGIGlmIHJlY29yZC5SRUYgIT0gTUlTU0lOR19GSUVMRF9WQUxVRSBlbHNlIE5vbmUpCiAgICAgICMgQUxUIGZpZWxkcyBhcmUgY2xhc3NlcyBpbiBQeVZDRiAoZS5nLiBTdWJzdGl0dXRpb24pLCBzbyBuZWVkIGNvbnZlcnQKICAgICAgIyB0aGVtIHRvIHRoZWlyIHN0cmluZyByZXByZXNlbnRhdGlvbnMuCiAgICAgIHZhcmlhbnQuYWx0ZXJuYXRlX2Jhc2VzLmV4dGVuZCgKICAgICAgICAgIFtzdHIocikgZm9yIHIgaW4gcmVjb3JkLkFMVCBpZiByXSBpZiByZWNvcmQuQUxUIGVsc2UgW10pCiAgICAgIHZhcmlhbnQubmFtZXMuZXh0ZW5kKHJlY29yZC5JRC5zcGxpdCgnOycpIGlmIHJlY29yZC5JRCBlbHNlIFtdKQogICAgICB2YXJpYW50LnF1YWxpdHkgPSByZWNvcmQuUVVBTAogICAgICAjIFB5VkNGIHVzZXMgTm9uZSBmb3IgJy4nIGFuZCBhbiBlbXB0eSBsaXN0IGZvciAnUEFTUycuCiAgICAgIGlmIHJlY29yZC5GSUxURVIgaXMgbm90IE5vbmU6CiAgICAgICAgdmFyaWFudC5maWx0ZXJzLmV4dGVuZCgKICAgICAgICAgICAgcmVjb3JkLkZJTFRFUiBpZiByZWNvcmQuRklMVEVSIGVsc2UgW1BBU1NfRklMVEVSXSkKICAgICAgZm9yIGssIHYgaW4gaXRlcml0ZW1zKHJlY29yZC5JTkZPKToKICAgICAgICAjIFNwZWNpYWwgY2FzZTogRU5EIGluZm8gdmFsdWUgc3BlY2lmaWVzIGVuZCBvZiB0aGUgcmVjb3JkLCBzbyBhZGp1c3QKICAgICAgICAjIHZhcmlhbnQuZW5kIGFuZCBkbyBub3QgaW5jbHVkZSBpdCBhcyBwYXJ0IG9mIHZhcmlhbnQuaW5mby4KICAgICAgICBpZiBrID09IEVORF9JTkZPX0tFWToKICAgICAgICAgIHZhcmlhbnQuZW5kID0gdgogICAgICAgICAgY29udGludWUKICAgICAgICBmaWVsZF9jb3VudCA9IE5vbmUKICAgICAgICBpZiBrIGluIGluZm9zOgogICAgICAgICAgZmllbGRfY291bnQgPSBzZWxmLl9nZXRfZmllbGRfY291bnRfYXNfc3RyaW5nKGluZm9zW2tdLm51bSkKICAgICAgICB2YXJpYW50LmluZm9ba10gPSBWYXJpYW50SW5mbyhkYXRhPXYsIGZpZWxkX2NvdW50PWZpZWxkX2NvdW50KQogICAgICBmb3Igc2FtcGxlIGluIHJlY29yZC5zYW1wbGVzOgogICAgICAgIGNhbGwgPSBWYXJpYW50Q2FsbCgpCiAgICAgICAgY2FsbC5uYW1lID0gc2FtcGxlLnNhbXBsZQogICAgICAgIGZvciBhbGxlbGUgaW4gc2FtcGxlLmd0X2FsbGVsZXMgb3IgW01JU1NJTkdfR0VOT1RZUEVfVkFMVUVdOgogICAgICAgICAgaWYgYWxsZWxlIGlzIE5vbmU6CiAgICAgICAgICAgIGFsbGVsZSA9IE1JU1NJTkdfR0VOT1RZUEVfVkFMVUUKICAgICAgICAgIGNhbGwuZ2Vub3R5cGUuYXBwZW5kKGludChhbGxlbGUpKQogICAgICAgIHBoYXNlc2V0X2Zyb21fZm9ybWF0ID0gKGdldGF0dHIoc2FtcGxlLmRhdGEsIFBIQVNFU0VUX0ZPUk1BVF9LRVkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgUEhBU0VTRVRfRk9STUFUX0tFWSBpbiBzYW1wbGUuZGF0YS5fZmllbGRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBOb25lKQogICAgICAgICMgTm90ZTogQ2FsbCBpcyBjb25zaWRlcmVkIHBoYXNlZCBpZiBpdCBjb250YWlucyB0aGUgJ1BTJyBrZXkgcmVnYXJkbGVzcwogICAgICAgICMgb2Ygd2hldGhlciBpdCB1c2VzICd8Jy4KICAgICAgICBpZiBwaGFzZXNldF9mcm9tX2Zvcm1hdCBvciBzYW1wbGUucGhhc2VkOgogICAgICAgICAgY2FsbC5waGFzZXNldCA9IChzdHIocGhhc2VzZXRfZnJvbV9mb3JtYXQpIGlmIHBoYXNlc2V0X2Zyb21fZm9ybWF0CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgREVGQVVMVF9QSEFTRVNFVF9WQUxVRSkKICAgICAgICBmb3IgZmllbGQgaW4gc2FtcGxlLmRhdGEuX2ZpZWxkczoKICAgICAgICAgICMgR2Vub3R5cGUgYW5kIHBoYXNlc2V0IChpZiBwcmVzZW50KSBhcmUgYWxyZWFkeSBpbmNsdWRlZC4KICAgICAgICAgIGlmIGZpZWxkIGluIChHRU5PVFlQRV9GT1JNQVRfS0VZLCBQSEFTRVNFVF9GT1JNQVRfS0VZKToKICAgICAgICAgICAgY29udGludWUKICAgICAgICAgIGRhdGEgPSBnZXRhdHRyKHNhbXBsZS5kYXRhLCBmaWVsZCkKICAgICAgICAgICMgQ29udmVydCBzaW5nbGUgdmFsdWVzIHRvIGEgbGlzdCBmb3IgY2FzZXMgd2hlcmUgdGhlIG51bWJlciBvZiBmaWVsZHMKICAgICAgICAgICMgaXMgdW5rbm93bi4gVGhpcyBpcyB0byBlbnN1cmUgY29uc2lzdGVudCB0eXBlcyBhY3Jvc3MgYWxsIHJlY29yZHMuCiAgICAgICAgICAjIE5vdGU6IHRoaXMgaXMgYWxyZWFkeSBkb25lIGZvciBJTkZPIGZpZWxkcyBpbiBQeVZDRi4KICAgICAgICAgIGlmIChmaWVsZCBpbiBmb3JtYXRzIGFuZAogICAgICAgICAgICAgIGZvcm1hdHNbZmllbGRdLm51bSBpcyBOb25lIGFuZAogICAgICAgICAgICAgIGlzaW5zdGFuY2UoZGF0YSwgKGludCwgZmxvYXQsIGxvbmcsIHN0ciwgdW5pY29kZSwgYm9vbCkpKToKICAgICAgICAgICAgZGF0YSA9IFtkYXRhXQogICAgICAgICAgY2FsbC5pbmZvW2ZpZWxkXSA9IGRhdGEKICAgICAgICB2YXJpYW50LmNhbGxzLmFwcGVuZChjYWxsKQogICAgICByZXR1cm4gdmFyaWFudAoKICAgIGRlZiBfZ2V0X2ZpZWxkX2NvdW50X2FzX3N0cmluZyhzZWxmLCBmaWVsZF9jb3VudCk6CiAgICAgICIiIlJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBmaWVsZF9jb3VudCBmcm9tIFB5VkNGLgoKICAgICAgUHlWQ0YgY29udmVydHMgZmllbGQgY291bnRzIHRvIGFuIGludGVnZXIgd2l0aCBzb21lIHByZWRlZmluZWQgY29uc3RhbnRzCiAgICAgIGFzIHNwZWNpZmllZCBpbiB0aGUgdmNmLnBhcnNlci5maWVsZF9jb3VudHMgZGljdCAoZS5nLiAnQScgaXMgLTEpLiBUaGlzCiAgICAgIG1ldGhvZCBjb252ZXJ0cyB0aGVtIGJhY2sgdG8gdGhlaXIgc3RyaW5nIHJlcHJlc2VudGF0aW9uIHRvIGF2b2lkIGhhdmluZwogICAgICBkaXJlY3QgZGVwZW5kZW5jeSBvbiB0aGUgYXJiaXRyYXJ5IFB5VkNGIGNvbnN0YW50cy4KICAgICAgQXJnczoKICAgICAgICBmaWVsZF9jb3VudCAoaW50KTogQW4gaW50ZWdlciByZXByZXNlbnRpbmcgdGhlIG51bWJlciBvZiBmaWVsZHMgaW4gSU5GTwogICAgICAgICAgYXMgc3BlY2lmaWVkIGJ5IFB5VkNGLgogICAgICBSZXR1cm5zOgogICAgICAgIEEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGZpZWxkX2NvdW50IChlLmcuICctMScgYmVjb21lcyAnQScpLgogICAgICBSYWlzZXM6CiAgICAgICAgVmFsdWVFcnJvcjogaWYgdGhlIGZpZWxkX2NvdW50IGlzIG5vdCB2YWxpZC4KICAgICAgIiIiCiAgICAgIGlmIGZpZWxkX2NvdW50IGlzIE5vbmU6CiAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgZWxpZiBmaWVsZF9jb3VudCA+PSAwOgogICAgICAgIHJldHVybiBzdHIoZmllbGRfY291bnQpCiAgICAgIGZpZWxkX2NvdW50X3RvX3N0cmluZyA9IHt2OiBrIGZvciBrLCB2IGluIHZjZi5wYXJzZXIuZmllbGRfY291bnRzLml0ZW1zKCl9CiAgICAgIGlmIGZpZWxkX2NvdW50IGluIGZpZWxkX2NvdW50X3RvX3N0cmluZzoKICAgICAgICByZXR1cm4gZmllbGRfY291bnRfdG9fc3RyaW5nW2ZpZWxkX2NvdW50XQogICAgICBlbHNlOgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgdmFsdWUgZm9yIGZpZWxkX2NvdW50OiAlZCcgJSBmaWVsZF9jb3VudCkKCgpjbGFzcyBSZWFkRnJvbVZjZihQVHJhbnNmb3JtKToKICAiIiJBIDpjbGFzczpgfmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtYCBmb3IgcmVhZGluZyBWQ0YKICBmaWxlcy4KCiAgUGFyc2VzIFZDRiBmaWxlcyAodmVyc2lvbiA0KSB1c2luZyBQeVZDRiBsaWJyYXJ5LiBJZiBmaWxlX3BhdHRlcm4gc3BlY2lmaWVzCiAgbXVsdGlwbGUgZmlsZXMsIHRoZW4gdGhlIGhlYWRlciBmcm9tIGVhY2ggZmlsZSBpcyB1c2VkIHNlcGFyYXRlbHkgdG8gcGFyc2UKICB0aGUgY29udGVudC4gSG93ZXZlciwgdGhlIG91dHB1dCB3aWxsIGJlIGEgUENvbGxlY3Rpb24gb2YKICA6Y2xhc3M6YFZhcmlhbnRgIChvciA6Y2xhc3M6YE1hbGZvcm1lZFZjZlJlY29yZGAgZm9yIGZhaWxlZCByZWFkcykgb2JqZWN0cy4KICAiIiIKCiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLAogICAgICBmaWxlX3BhdHRlcm49Tm9uZSwKICAgICAgY29tcHJlc3Npb25fdHlwZT1Db21wcmVzc2lvblR5cGVzLkFVVE8sCiAgICAgIHZhbGlkYXRlPVRydWUsCiAgICAgIGFsbG93X21hbGZvcm1lZF9yZWNvcmRzPUZhbHNlLAogICAgICAqKmt3YXJncyk6CiAgICAiIiJJbml0aWFsaXplIHRoZSA6Y2xhc3M6YFJlYWRGcm9tVmNmYCB0cmFuc2Zvcm0uCgogICAgQXJnczoKICAgICAgZmlsZV9wYXR0ZXJuIChzdHIpOiBUaGUgZmlsZSBwYXRoIHRvIHJlYWQgZnJvbSBlaXRoZXIgYXMgYSBzaW5nbGUgZmlsZSBvcgogICAgICAgIGEgZ2xvYiBwYXR0ZXJuLgogICAgICBjb21wcmVzc2lvbl90eXBlIChzdHIpOiBVc2VkIHRvIGhhbmRsZSBjb21wcmVzc2VkIGlucHV0IGZpbGVzLgogICAgICAgIFR5cGljYWwgdmFsdWUgaXMgOmF0dHI6YENvbXByZXNzaW9uVHlwZXMuQVVUTwogICAgICAgIDxhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzaW9uVHlwZXMuQVVUTz5gLCBpbiB3aGljaCBjYXNlIHRoZQogICAgICAgIHVuZGVybHlpbmcgZmlsZV9wYXRoJ3MgZXh0ZW5zaW9uIHdpbGwgYmUgdXNlZCB0byBkZXRlY3QgdGhlIGNvbXByZXNzaW9uLgogICAgICB2YWxpZGF0ZSAoYm9vbCk6IGZsYWcgdG8gdmVyaWZ5IHRoYXQgdGhlIGZpbGVzIGV4aXN0IGR1cmluZyB0aGUgcGlwZWxpbmUKICAgICAgICBjcmVhdGlvbiB0aW1lLgogICAgICBhbGxvd19tYWxmb3JtZWRfcmVjb3JkcyAoYm9vbCk6IGRldGVybWluZXMgaWYgZmFpbGVkIFZDRgogICAgICAgIHJlY29yZCByZWFkcyB3aWxsIGJlIHRvbGVyYXRlZC4gRmFpbGVkIHJlY29yZCByZWFkcyB3aWxsIHJlc3VsdCBpbiBhCiAgICAgICAgOmNsYXNzOmBNYWxmb3JtZWRWY2ZSZWNvcmRgIGJlaW5nIHJldHVybmVkIGZyb20gdGhlIHJlYWQgb2YgdGhlIHJlY29yZAogICAgICAgIHJhdGhlciB0aGFuIGEgOmNsYXNzOmBWYXJpYW50YC4KICAgICIiIgogICAgc3VwZXIoUmVhZEZyb21WY2YsIHNlbGYpLl9faW5pdF9fKCoqa3dhcmdzKQogICAgc2VsZi5fc291cmNlID0gX1ZjZlNvdXJjZSgKICAgICAgICBmaWxlX3BhdHRlcm4sCiAgICAgICAgY29tcHJlc3Npb25fdHlwZSwKICAgICAgICB2YWxpZGF0ZT12YWxpZGF0ZSwKICAgICAgICBhbGxvd19tYWxmb3JtZWRfcmVjb3Jkcz1hbGxvd19tYWxmb3JtZWRfcmVjb3JkcykKCiAgZGVmIGV4cGFuZChzZWxmLCBwdmFsdWUpOgogICAgcmV0dXJuIHB2YWx1ZS5waXBlbGluZSB8IFJlYWQoc2VsZi5fc291cmNlKQp9cniDAAAoWAoAAABfVmNmU291cmNlWAUAAABjbGFzc0vrTcUBh1gSAAAAVmFyaWFudENhbGwuX19uZV9fWAMAAABkZWZL4kvlh1gUAAAAVmFyaWFudENhbGwuX19pbml0X19YAwAAAGRlZkvGS92HWAcAAABWYXJpYW50WAUAAABjbGFzc0tHS7uHWCYAAABfVmNmU291cmNlLl9WY2ZSZWNvcmRJdGVyYXRvci5fX2luaXRfX1gDAAAAZGVmTRYBTTgBh1gXAAAAX1ZjZlNvdXJjZS5yZWFkX3JlY29yZHNYAwAAAGRlZk0FAU0SAYdYEgAAAFJlYWRGcm9tVmNmLmV4cGFuZFgDAAAAZGVmTe8BTfEBh1giAAAAX1ZjZlNvdXJjZS5fVmNmUmVjb3JkSXRlcmF0b3IubmV4dFgDAAAAZGVmTU0BTU8Bh1g4AAAAX1ZjZlNvdXJjZS5fVmNmUmVjb3JkSXRlcmF0b3IuX2NvbnZlcnRfdG9fdmFyaWFudF9yZWNvcmRYAwAAAGRlZk1mAU2sAYdYEwAAAF9WY2ZTb3VyY2UuX19pbml0X19YAwAAAGRlZkv2TQQBh1gSAAAAVmFyaWFudENhbGwuX19lcV9fWAMAAABkZWZL3kvhh1gdAAAAX1ZjZlNvdXJjZS5fVmNmUmVjb3JkSXRlcmF0b3JYBQAAAGNsYXNzTRMBTcUBh1gxAAAAX1ZjZlNvdXJjZS5fVmNmUmVjb3JkSXRlcmF0b3IuX3N0b3JlX2hlYWRlcl9saW5lc1gDAAAAZGVmTTkBTTsBh1gOAAAAVmFyaWFudC5fX2d0X19YAwAAAGRlZkuwS7WHWCYAAABfVmNmU291cmNlLl9WY2ZSZWNvcmRJdGVyYXRvci5fX2l0ZXJfX1gDAAAAZGVmTUkBTUsBh1gOAAAAVmFyaWFudC5fX2dlX19YAwAAAGRlZku2S7uHWA4AAABWYXJpYW50Ll9fZXFfX1gDAAAAZGVmS3xLf4dYDgAAAFZhcmlhbnQuX19sdF9fWAMAAABkZWZLkUumh1gQAAAAVmFyaWFudC5fX3JlcHJfX1gDAAAAZGVmS4RLkIdYFAAAAFJlYWRGcm9tVmNmLl9faW5pdF9fWAMAAABkZWZN0QFN7gGHWBQAAABWYXJpYW50Q2FsbC5fX3JlcHJfX1gDAAAAZGVmS+ZL6YdYOAAAAF9WY2ZTb3VyY2UuX1ZjZlJlY29yZEl0ZXJhdG9yLl9nZXRfZmllbGRfY291bnRfYXNfc3RyaW5nWAMAAABkZWZNrQFNxQGHWAsAAABWYXJpYW50Q2FsbFgFAAAAY2xhc3NLvUvph1gOAAAAVmFyaWFudC5fX25lX19YAwAAAGRlZkutS6+HWC8AAABfVmNmU291cmNlLl9WY2ZSZWNvcmRJdGVyYXRvci5fY3JlYXRlX2dlbmVyYXRvclgDAAAAZGVmTTwBTUgBh1gQAAAAVmFyaWFudC5fX2luaXRfX1gDAAAAZGVmS05Le4dYDgAAAFZhcmlhbnQuX19sZV9fWAMAAABkZWZLp0ush1gmAAAAX1ZjZlNvdXJjZS5fVmNmUmVjb3JkSXRlcmF0b3IuX19uZXh0X19YAwAAAGRlZk1QAU1lAYdYCwAAAFJlYWRGcm9tVmNmWAUAAABjbGFzc03HAU3xAYd1fXJ5gwAAKFgHAAAAVmFyaWFudGpGXQAAWAsAAABSZWFkRnJvbVZjZmpGXQAAWAsAAABWYXJpYW50Q2FsbGpGXQAAWBIAAABSZWFkRnJvbVZjZi5leHBhbmRqRl0AAHVqfWkAAFgUAAAAYXBhY2hlX2JlYW0uaW8udmNmaW9yeoMAAIWBcnuDAAB9cnyDAABidFUWZnV0dXJlLnR5cGVzLm5ld29iamVjdChYCw0AACIiIgpBbiBvYmplY3Qgc3ViY2xhc3MgZm9yIFB5dGhvbiAyIHRoYXQgZ2l2ZXMgbmV3LXN0eWxlIGNsYXNzZXMgd3JpdHRlbiBpbiB0aGUKc3R5bGUgb2YgUHl0aG9uIDMgKHdpdGggYGBfX25leHRfX2BgIGFuZCB1bmljb2RlLXJldHVybmluZyBgYF9fc3RyX19gYCBtZXRob2RzKQp0aGUgYXBwcm9wcmlhdGUgUHl0aG9uIDItc3R5bGUgYGBuZXh0YGAgYW5kIGBgX191bmljb2RlX19gYCBtZXRob2RzIGZvciBjb21wYXRpYmxlLgoKRXhhbXBsZSB1c2U6OgoKICAgIGZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdAoKICAgIG15X3VuaWNvZGVfc3RyID0gdSdVbmljb2RlIHN0cmluZzogXHU1YjU0XHU1YjUwJwoKICAgIGNsYXNzIEEob2JqZWN0KToKICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICAgICAgcmV0dXJuIG15X3VuaWNvZGVfc3RyCgogICAgYSA9IEEoKQogICAgcHJpbnQoc3RyKGEpKQoKICAgICMgT24gUHl0aG9uIDIsIHRoZXNlIHJlbGF0aW9ucyBob2xkOgogICAgYXNzZXJ0IHVuaWNvZGUoYSkgPT0gbXlfdW5pY29kZV9zdHJpbmcKICAgIGFzc2VydCBzdHIoYSkgPT0gbXlfdW5pY29kZV9zdHJpbmcuZW5jb2RlKCd1dGYtOCcpCgoKQW5vdGhlciBleGFtcGxlOjoKCiAgICBmcm9tIGJ1aWx0aW5zIGltcG9ydCBvYmplY3QKCiAgICBjbGFzcyBVcHBlcihvYmplY3QpOgogICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpdGVyYWJsZSk6CiAgICAgICAgICAgIHNlbGYuX2l0ZXIgPSBpdGVyKGl0ZXJhYmxlKQogICAgICAgIGRlZiBfX25leHRfXyhzZWxmKTogICAgICAgICAgICAgICAgICMgbm90ZSB0aGUgUHkzIGludGVyZmFjZQogICAgICAgICAgICByZXR1cm4gbmV4dChzZWxmLl9pdGVyKS51cHBlcigpCiAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgogICAgICAgICAgICByZXR1cm4gc2VsZgoKICAgIGFzc2VydCBsaXN0KFVwcGVyKCdoZWxsbycpKSA9PSBsaXN0KCdIRUxMTycpCgoiIiIKCgpjbGFzcyBuZXdvYmplY3Qob2JqZWN0KToKICAgICIiIgogICAgQSBtYWdpY2FsIG9iamVjdCBjbGFzcyB0aGF0IHByb3ZpZGVzIFB5dGhvbiAyIGNvbXBhdGliaWxpdHkgbWV0aG9kczo6CiAgICAgICAgbmV4dAogICAgICAgIF9fdW5pY29kZV9fCiAgICAgICAgX19ub256ZXJvX18KCiAgICBTdWJjbGFzc2VzIG9mIHRoaXMgY2xhc3MgY2FuIG1lcmVseSBkZWZpbmUgdGhlIFB5dGhvbiAzIG1ldGhvZHMgKF9fbmV4dF9fLAogICAgX19zdHJfXywgYW5kIF9fYm9vbF9fKS4KICAgICIiIgogICAgZGVmIG5leHQoc2VsZik6CiAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAnX19uZXh0X18nKToKICAgICAgICAgICAgcmV0dXJuIHR5cGUoc2VsZikuX19uZXh0X18oc2VsZikKICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ25ld29iamVjdCBpcyBub3QgYW4gaXRlcmF0b3InKQoKICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKICAgICAgICAjIEFsbCBzdWJjbGFzc2VzIG9mIHRoZSBidWlsdGluIG9iamVjdCBzaG91bGQgaGF2ZSBfX3N0cl9fIGRlZmluZWQuCiAgICAgICAgIyBOb3RlIHRoYXQgb2xkLXN0eWxlIGNsYXNzZXMgZG8gbm90IGhhdmUgX19zdHJfXyBkZWZpbmVkLgogICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgJ19fc3RyX18nKToKICAgICAgICAgICAgcyA9IHR5cGUoc2VsZikuX19zdHJfXyhzZWxmKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHMgPSBzdHIoc2VsZikKICAgICAgICBpZiBpc2luc3RhbmNlKHMsIHVuaWNvZGUpOgogICAgICAgICAgICByZXR1cm4gcwogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiBzLmRlY29kZSgndXRmLTgnKQoKICAgIGRlZiBfX25vbnplcm9fXyhzZWxmKToKICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICdfX2Jvb2xfXycpOgogICAgICAgICAgICByZXR1cm4gdHlwZShzZWxmKS5fX2Jvb2xfXyhzZWxmKQogICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgJ19fbGVuX18nKToKICAgICAgICAgICAgcmV0dXJuIHR5cGUoc2VsZikuX19sZW5fXyhzZWxmKQogICAgICAgICMgb2JqZWN0IGhhcyBubyBfX25vbnplcm9fXyBtZXRob2QKICAgICAgICByZXR1cm4gVHJ1ZQoKICAgICMgQXJlIHRoZXNlIGV2ZXIgbmVlZGVkPwogICAgIyBkZWYgX19kaXZfXyhzZWxmKToKICAgICMgICAgIHJldHVybiBzZWxmLl9fdHJ1ZWRpdl9fKCkKCiAgICAjIGRlZiBfX2lkaXZfXyhzZWxmLCBvdGhlcik6CiAgICAjICAgICByZXR1cm4gc2VsZi5fX2l0cnVlZGl2X18ob3RoZXIpCgogICAgZGVmIF9fbG9uZ19fKHNlbGYpOgogICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICdfX2ludF9fJyk6CiAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAogICAgICAgIHJldHVybiBzZWxmLl9faW50X18oKSAgIyBub3QgdHlwZShzZWxmKS5fX2ludF9fKHNlbGYpCgogICAgIyBkZWYgX19uZXdfXyhjbHMsICphcmdzLCAqKmt3YXJncyk6CiAgICAjICAgICAiIiIKICAgICMgICAgIGRpY3QoKSAtPiBuZXcgZW1wdHkgZGljdGlvbmFyeQogICAgIyAgICAgZGljdChtYXBwaW5nKSAtPiBuZXcgZGljdGlvbmFyeSBpbml0aWFsaXplZCBmcm9tIGEgbWFwcGluZyBvYmplY3QncwogICAgIyAgICAgICAgIChrZXksIHZhbHVlKSBwYWlycwogICAgIyAgICAgZGljdChpdGVyYWJsZSkgLT4gbmV3IGRpY3Rpb25hcnkgaW5pdGlhbGl6ZWQgYXMgaWYgdmlhOgogICAgIyAgICAgICAgIGQgPSB7fQogICAgIyAgICAgICAgIGZvciBrLCB2IGluIGl0ZXJhYmxlOgogICAgIyAgICAgICAgICAgICBkW2tdID0gdgogICAgIyAgICAgZGljdCgqKmt3YXJncykgLT4gbmV3IGRpY3Rpb25hcnkgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgbmFtZT12YWx1ZSBwYWlycwogICAgIyAgICAgICAgIGluIHRoZSBrZXl3b3JkIGFyZ3VtZW50IGxpc3QuICBGb3IgZXhhbXBsZTogIGRpY3Qob25lPTEsIHR3bz0yKQogICAgIyAgICAgIiIiCgogICAgIyAgICAgaWYgbGVuKGFyZ3MpID09IDA6CiAgICAjICAgICAgICAgcmV0dXJuIHN1cGVyKG5ld2RpY3QsIGNscykuX19uZXdfXyhjbHMpCiAgICAjICAgICBlbGlmIHR5cGUoYXJnc1swXSkgPT0gbmV3ZGljdDoKICAgICMgICAgICAgICByZXR1cm4gYXJnc1swXQogICAgIyAgICAgZWxzZToKICAgICMgICAgICAgICB2YWx1ZSA9IGFyZ3NbMF0KICAgICMgICAgIHJldHVybiBzdXBlcihuZXdkaWN0LCBjbHMpLl9fbmV3X18oY2xzLCB2YWx1ZSkKCiAgICBkZWYgX19uYXRpdmVfXyhzZWxmKToKICAgICAgICAiIiIKICAgICAgICBIb29rIGZvciB0aGUgZnV0dXJlLnV0aWxzLm5hdGl2ZSgpIGZ1bmN0aW9uCiAgICAgICAgIiIiCiAgICAgICAgcmV0dXJuIG9iamVjdChzZWxmKQoKCl9fYWxsX18gPSBbJ25ld29iamVjdCddCn1yfYMAAChYDgAAAG5ld29iamVjdC5uZXh0WAMAAABkZWZLM0s3h1gSAAAAbmV3b2JqZWN0Ll9fbG9uZ19fWAMAAABkZWZLU0tXh1gJAAAAbmV3b2JqZWN0WAUAAABjbGFzc0spS3KHWBQAAABuZXdvYmplY3QuX19uYXRpdmVfX1gDAAAAZGVmS21LcodYFQAAAG5ld29iamVjdC5fX3VuaWNvZGVfX1gDAAAAZGVmSzhLQ4dYFQAAAG5ld29iamVjdC5fX25vbnplcm9fX1gDAAAAZGVmS0RLS4d1fWp9aQAAWBUAAABhcGFjaGVfYmVhbS5pby5pb2Jhc2VyfoMAAIWBcn+DAAB9coCDAABidFU2YXBhY2hlX2JlYW0udGVzdGluZy5sb2FkX3Rlc3RzLmxvYWRfdGVzdF9tZXRyaWNzX3V0aWxzKFjMFwAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiIKVXRpbGl0eSBmdW5jdGlvbnMgdXNlZCBmb3IgaW50ZWdyYXRpbmcgTWV0cmljcyBBUEkgaW50byBsb2FkIHRlc3RzIHBpcGVsaW5lcy4KIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHRpbWUKCmltcG9ydCBhcGFjaGVfYmVhbSBhcyBiZWFtCmZyb20gYXBhY2hlX2JlYW0ubWV0cmljcyBpbXBvcnQgTWV0cmljcwoKdHJ5OgogIGZyb20gZ29vZ2xlLmNsb3VkIGltcG9ydCBiaWdxdWVyeQogIGZyb20gZ29vZ2xlLmNsb3VkLmJpZ3F1ZXJ5LnNjaGVtYSBpbXBvcnQgU2NoZW1hRmllbGQKICBmcm9tIGdvb2dsZS5jbG91ZC5leGNlcHRpb25zIGltcG9ydCBOb3RGb3VuZApleGNlcHQgSW1wb3J0RXJyb3I6CiAgYmlncXVlcnkgPSBOb25lCiAgU2NoZW1hRmllbGQgPSBOb25lCiAgTm90Rm91bmQgPSBOb25lCgpSVU5USU1FX0xBQkVMID0gJ3J1bnRpbWUnClNVQk1JVF9USU1FU1RBTVBfTEFCRUwgPSAnc3VibWl0X3RpbWVzdGFtcCcKCgpkZWYgX2dldF9zY2hlbWFfZmllbGQoc2NoZW1hX2ZpZWxkKToKICByZXR1cm4gU2NoZW1hRmllbGQoCiAgICAgIG5hbWU9c2NoZW1hX2ZpZWxkWyduYW1lJ10sCiAgICAgIGZpZWxkX3R5cGU9c2NoZW1hX2ZpZWxkWyd0eXBlJ10sCiAgICAgIG1vZGU9c2NoZW1hX2ZpZWxkWydtb2RlJ10pCgoKY2xhc3MgQmlnUXVlcnlDbGllbnQob2JqZWN0KToKICBkZWYgX19pbml0X18oc2VsZiwgcHJvamVjdF9uYW1lLCB0YWJsZSwgZGF0YXNldCwgc2NoZW1hX21hcCk6CiAgICBzZWxmLl9uYW1lc3BhY2UgPSB0YWJsZQoKICAgIHNlbGYuX2JxX2NsaWVudCA9IGJpZ3F1ZXJ5LkNsaWVudChwcm9qZWN0PXByb2plY3RfbmFtZSkKCiAgICBzY2hlbWEgPSBzZWxmLl9wYXJzZV9zY2hlbWEoc2NoZW1hX21hcCkKICAgIHNlbGYuX3NjaGVtYV9uYW1lcyA9IHNlbGYuX2dldF9zY2hlbWFfbmFtZXMoc2NoZW1hKQogICAgc2NoZW1hID0gc2VsZi5fcHJlcGFyZV9zY2hlbWEoc2NoZW1hKQoKICAgIHNlbGYuX2dldF9vcl9jcmVhdGVfdGFibGUoc2NoZW1hLCBkYXRhc2V0KQoKICBkZWYgbWF0Y2hfYW5kX3NhdmUoc2VsZiwgcmVzdWx0X2xpc3QpOgogICAgcm93c190dXBsZSA9IHR1cGxlKHNlbGYuX21hdGNoX2luc2VydHNfYnlfc2NoZW1hKHJlc3VsdF9saXN0KSkKICAgIHNlbGYuX2luc2VydF9kYXRhKHJvd3NfdHVwbGUpCgogIGRlZiBfbWF0Y2hfaW5zZXJ0c19ieV9zY2hlbWEoc2VsZiwgaW5zZXJ0X2xpc3QpOgogICAgZm9yIG5hbWUgaW4gc2VsZi5fc2NoZW1hX25hbWVzOgogICAgICB5aWVsZCBzZWxmLl9nZXRfZWxlbWVudF9ieV9zY2hlbWEobmFtZSwgaW5zZXJ0X2xpc3QpCgogIGRlZiBfZ2V0X2VsZW1lbnRfYnlfc2NoZW1hKHNlbGYsIHNjaGVtYV9uYW1lLCBpbnNlcnRfbGlzdCk6CiAgICBmb3IgbWV0cmljIGluIGluc2VydF9saXN0OgogICAgICBpZiBtZXRyaWNbJ2xhYmVsJ10gPT0gc2NoZW1hX25hbWU6CiAgICAgICAgcmV0dXJuIG1ldHJpY1sndmFsdWUnXQogICAgcmV0dXJuIE5vbmUKCiAgZGVmIF9pbnNlcnRfZGF0YShzZWxmLCByb3dzX3R1cGxlKToKICAgIGVycm9ycyA9IHNlbGYuX2JxX2NsaWVudC5pbnNlcnRfcm93cyhzZWxmLl9icV90YWJsZSwgcm93cz1bcm93c190dXBsZV0pCiAgICBpZiBsZW4oZXJyb3JzKSA+IDA6CiAgICAgIGZvciBlcnIgaW4gZXJyb3JzOgogICAgICAgIGxvZ2dpbmcuZXJyb3IoZXJyWydtZXNzYWdlJ10pCiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5hYmxlIHNhdmUgcm93cyBpbiBCaWdRdWVyeS4nKQoKICBkZWYgX2dldF9kYXRhc2V0KHNlbGYsIGRhdGFzZXRfbmFtZSk6CiAgICBicV9kYXRhc2V0X3JlZiA9IHNlbGYuX2JxX2NsaWVudC5kYXRhc2V0KGRhdGFzZXRfbmFtZSkKICAgIHRyeToKICAgICAgYnFfZGF0YXNldCA9IHNlbGYuX2JxX2NsaWVudC5nZXRfZGF0YXNldChicV9kYXRhc2V0X3JlZikKICAgIGV4Y2VwdCBOb3RGb3VuZDoKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICdEYXRhc2V0IHt9IGRvZXMgbm90IGV4aXN0IGluIHlvdXIgcHJvamVjdC4gJwogICAgICAgICAgJ1lvdSBoYXZlIHRvIGNyZWF0ZSB0YWJsZSBmaXJzdC4nCiAgICAgICAgICAuZm9ybWF0KGRhdGFzZXRfbmFtZSkpCiAgICByZXR1cm4gYnFfZGF0YXNldAoKICBkZWYgX2dldF9vcl9jcmVhdGVfdGFibGUoc2VsZiwgYnFfc2NoZW1hcywgZGF0YXNldCk6CiAgICBpZiBzZWxmLl9uYW1lc3BhY2UgPT0gJyc6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ05hbWVzcGFjZSBjYW5ub3QgYmUgZW1wdHkuJykKCiAgICBkYXRhc2V0ID0gc2VsZi5fZ2V0X2RhdGFzZXQoZGF0YXNldCkKICAgIHRhYmxlX3JlZiA9IGRhdGFzZXQudGFibGUoc2VsZi5fbmFtZXNwYWNlKQoKICAgIHRyeToKICAgICAgc2VsZi5fYnFfdGFibGUgPSBzZWxmLl9icV9jbGllbnQuZ2V0X3RhYmxlKHRhYmxlX3JlZikKICAgIGV4Y2VwdCBOb3RGb3VuZDoKICAgICAgdGFibGUgPSBiaWdxdWVyeS5UYWJsZSh0YWJsZV9yZWYsIHNjaGVtYT1icV9zY2hlbWFzKQogICAgICBzZWxmLl9icV90YWJsZSA9IHNlbGYuX2JxX2NsaWVudC5jcmVhdGVfdGFibGUodGFibGUpCgogIGRlZiBfcGFyc2Vfc2NoZW1hKHNlbGYsIHNjaGVtYV9tYXApOgogICAgcmV0dXJuIFt7J25hbWUnOiBTVUJNSVRfVElNRVNUQU1QX0xBQkVMLAogICAgICAgICAgICAgJ3R5cGUnOiAnVElNRVNUQU1QJywKICAgICAgICAgICAgICdtb2RlJzogJ1JFUVVJUkVEJ31dICsgc2NoZW1hX21hcAoKICBkZWYgX3ByZXBhcmVfc2NoZW1hKHNlbGYsIHNjaGVtYXMpOgogICAgcmV0dXJuIFtfZ2V0X3NjaGVtYV9maWVsZChzY2hlbWEpIGZvciBzY2hlbWEgaW4gc2NoZW1hc10KCiAgZGVmIF9nZXRfc2NoZW1hX25hbWVzKHNlbGYsIHNjaGVtYXMpOgogICAgcmV0dXJuIFtzY2hlbWFbJ25hbWUnXSBmb3Igc2NoZW1hIGluIHNjaGVtYXNdCgoKY2xhc3MgTWV0cmljc01vbml0b3Iob2JqZWN0KToKICBkZWYgX19pbml0X18oc2VsZiwgcHJvamVjdF9uYW1lLCB0YWJsZSwgZGF0YXNldCwgc2NoZW1hX21hcCk6CiAgICBpZiBwcm9qZWN0X25hbWUgaXMgbm90IE5vbmU6CiAgICAgIHNlbGYuYnEgPSBCaWdRdWVyeUNsaWVudChwcm9qZWN0X25hbWUsIHRhYmxlLCBkYXRhc2V0LCBzY2hlbWFfbWFwKQoKICBkZWYgc2VuZF9tZXRyaWNzKHNlbGYsIHJlc3VsdCk6CiAgICBtZXRyaWNzID0gcmVzdWx0Lm1ldHJpY3MoKS5xdWVyeSgpCiAgICBjb3VudGVycyA9IG1ldHJpY3NbJ2NvdW50ZXJzJ10KICAgIGNvdW50ZXJzX2xpc3QgPSBbXQogICAgaWYgbGVuKGNvdW50ZXJzKSA+IDA6CiAgICAgIGNvdW50ZXJzX2xpc3QgPSBzZWxmLl9wcmVwYXJlX2NvdW50ZXJfbWV0cmljcyhjb3VudGVycykKCiAgICBkaXN0cmlidXRpb25zID0gbWV0cmljc1snZGlzdHJpYnV0aW9ucyddCiAgICBkaXN0X2xpc3QgPSBbXQogICAgaWYgbGVuKGRpc3RyaWJ1dGlvbnMpID4gMDoKICAgICAgZGlzdF9saXN0ID0gc2VsZi5fcHJlcGFyZV9ydW50aW1lX21ldHJpY3MoZGlzdHJpYnV0aW9ucykKCiAgICB0aW1lc3RhbXAgPSB7J2xhYmVsJzogU1VCTUlUX1RJTUVTVEFNUF9MQUJFTCwgJ3ZhbHVlJzogdGltZS50aW1lKCl9CgogICAgaW5zZXJ0X2xpc3QgPSBbdGltZXN0YW1wXSArIGRpc3RfbGlzdCArIGNvdW50ZXJzX2xpc3QKICAgIHNlbGYuYnEubWF0Y2hfYW5kX3NhdmUoaW5zZXJ0X2xpc3QpCgogIGRlZiBfcHJlcGFyZV9jb3VudGVyX21ldHJpY3Moc2VsZiwgY291bnRlcnMpOgogICAgZm9yIGNvdW50ZXIgaW4gY291bnRlcnM6CiAgICAgIGxvZ2dpbmcuaW5mbygiQ291bnRlcjogICVzIiwgY291bnRlcikKICAgIGNvdW50ZXJzX2xpc3QgPSBbXQogICAgZm9yIGNvdW50ZXIgaW4gY291bnRlcnM6CiAgICAgIGNvdW50ZXJfY29tbWl0ZWQgPSBjb3VudGVyLmNvbW1pdHRlZAogICAgICBjb3VudGVyX2xhYmVsID0gc3RyKGNvdW50ZXIua2V5Lm1ldHJpYy5uYW1lKQogICAgICBjb3VudGVyc19saXN0LmFwcGVuZCgKICAgICAgICAgIHsnbGFiZWwnOiBjb3VudGVyX2xhYmVsLCAndmFsdWUnOiBjb3VudGVyX2NvbW1pdGVkfSkKCiAgICByZXR1cm4gY291bnRlcnNfbGlzdAoKICBkZWYgX3ByZXBhcmVfcnVudGltZV9tZXRyaWNzKHNlbGYsIGRpc3RyaWJ1dGlvbnMpOgogICAgbWluX3ZhbHVlcyA9IFtdCiAgICBtYXhfdmFsdWVzID0gW10KICAgIGZvciBkaXN0IGluIGRpc3RyaWJ1dGlvbnM6CiAgICAgIGxvZ2dpbmcuaW5mbygiRGlzdHJpYnV0aW9uOiAlcyIsIGRpc3QpCiAgICAgIG1pbl92YWx1ZXMuYXBwZW5kKGRpc3QuY29tbWl0dGVkLm1pbikKICAgICAgbWF4X3ZhbHVlcy5hcHBlbmQoZGlzdC5jb21taXR0ZWQubWF4KQogICAgIyBmaW5kaW5nIHJlYWwgc3RhcnQKICAgIG1pbl92YWx1ZSA9IG1pbihtaW5fdmFsdWVzKQogICAgIyBmaW5kaW5nIHJlYWwgZW5kCiAgICBtYXhfdmFsdWUgPSBtYXgobWF4X3ZhbHVlcykKCiAgICBydW50aW1lX2luX3MgPSBtYXhfdmFsdWUgLSBtaW5fdmFsdWUKICAgIGxvZ2dpbmcuaW5mbygiUnVudGltZTogJXMiLCBydW50aW1lX2luX3MpCiAgICBydW50aW1lX2luX3MgPSBmbG9hdChydW50aW1lX2luX3MpCiAgICByZXR1cm4gW3snbGFiZWwnOiBSVU5USU1FX0xBQkVMLCAndmFsdWUnOiBydW50aW1lX2luX3N9XQoKCmNsYXNzIE1lYXN1cmVUaW1lKGJlYW0uRG9Gbik6CiAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWVzcGFjZSk6CiAgICBzZWxmLm5hbWVzcGFjZSA9IG5hbWVzcGFjZQogICAgc2VsZi5ydW50aW1lID0gTWV0cmljcy5kaXN0cmlidXRpb24oc2VsZi5uYW1lc3BhY2UsIFJVTlRJTUVfTEFCRUwpCgogIGRlZiBzdGFydF9idW5kbGUoc2VsZik6CiAgICBzZWxmLnJ1bnRpbWUudXBkYXRlKHRpbWUudGltZSgpKQoKICBkZWYgZmluaXNoX2J1bmRsZShzZWxmKToKICAgIHNlbGYucnVudGltZS51cGRhdGUodGltZS50aW1lKCkpCgogIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQpOgogICAgeWllbGQgZWxlbWVudAoKCmRlZiBjb3VudF9ieXRlcyhjb3VudGVyX25hbWUpOgogIGRlZiBsYXllcihmKToKICAgIGRlZiByZXBsKCphcmdzKToKICAgICAgbmFtZXNwYWNlID0gYXJnc1syXQogICAgICBjb3VudGVyID0gTWV0cmljcy5jb3VudGVyKG5hbWVzcGFjZSwgY291bnRlcl9uYW1lKQogICAgICBlbGVtZW50ID0gYXJnc1sxXQogICAgICBfLCB2YWx1ZSA9IGVsZW1lbnQKICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHZhbHVlKSk6CiAgICAgICAgY291bnRlci5pbmMoaSkKICAgICAgcmV0dXJuIGYoKmFyZ3MpCiAgICByZXR1cm4gcmVwbAogIHJldHVybiBsYXllcgp9coGDAAAoWBwAAABCaWdRdWVyeUNsaWVudC5fcGFyc2Vfc2NoZW1hWAMAAABkZWZLa0tvh1gLAAAATWVhc3VyZVRpbWVYBQAAAGNsYXNzS6tLuIdYIwAAAEJpZ1F1ZXJ5Q2xpZW50Ll9nZXRfb3JfY3JlYXRlX3RhYmxlWAMAAABkZWZLXktqh1gnAAAATWV0cmljc01vbml0b3IuX3ByZXBhcmVfY291bnRlcl9tZXRyaWNzWAMAAABkZWZLjUuYh1gZAAAATWVhc3VyZVRpbWUuZmluaXNoX2J1bmRsZVgDAAAAZGVmS7NLtYdYDgAAAEJpZ1F1ZXJ5Q2xpZW50WAUAAABjbGFzc0syS3WHWA4AAABNZXRyaWNzTW9uaXRvclgFAAAAY2xhc3NLd0uph1gRAAAAY291bnRfYnl0ZXMubGF5ZXJYAwAAAGRlZku7S8WHWCAAAABCaWdRdWVyeUNsaWVudC5fZ2V0X3NjaGVtYV9uYW1lc1gDAAAAZGVmS3NLdYdYJwAAAE1ldHJpY3NNb25pdG9yLl9wcmVwYXJlX3J1bnRpbWVfbWV0cmljc1gDAAAAZGVmS5lLqYdYGwAAAE1ldHJpY3NNb25pdG9yLnNlbmRfbWV0cmljc1gDAAAAZGVmS3xLjIdYEwAAAE1lYXN1cmVUaW1lLnByb2Nlc3NYAwAAAGRlZku2S7iHWBQAAABNZWFzdXJlVGltZS5fX2luaXRfX1gDAAAAZGVmS6xLr4dYFwAAAE1ldHJpY3NNb25pdG9yLl9faW5pdF9fWAMAAABkZWZLeEt7h1glAAAAQmlnUXVlcnlDbGllbnQuX2dldF9lbGVtZW50X2J5X3NjaGVtYVgDAAAAZGVmS0ZLS4dYEQAAAF9nZXRfc2NoZW1hX2ZpZWxkWAMAAABkZWZLK0swh1gYAAAATWVhc3VyZVRpbWUuc3RhcnRfYnVuZGxlWAMAAABkZWZLsEuyh1geAAAAQmlnUXVlcnlDbGllbnQuX3ByZXBhcmVfc2NoZW1hWAMAAABkZWZLcEtyh1gbAAAAQmlnUXVlcnlDbGllbnQuX2dldF9kYXRhc2V0WAMAAABkZWZLU0tdh1gWAAAAY291bnRfYnl0ZXMubGF5ZXIucmVwbFgDAAAAZGVmS7xLxIdYGwAAAEJpZ1F1ZXJ5Q2xpZW50Ll9pbnNlcnRfZGF0YVgDAAAAZGVmS0xLUodYCwAAAGNvdW50X2J5dGVzWAMAAABkZWZLukvGh1gnAAAAQmlnUXVlcnlDbGllbnQuX21hdGNoX2luc2VydHNfYnlfc2NoZW1hWAMAAABkZWZLQktFh1gXAAAAQmlnUXVlcnlDbGllbnQuX19pbml0X19YAwAAAGRlZkszSz2HWB0AAABCaWdRdWVyeUNsaWVudC5tYXRjaF9hbmRfc2F2ZVgDAAAAZGVmSz5LQYd1fXKCgwAAKFgdAAAAQmlnUXVlcnlDbGllbnQubWF0Y2hfYW5kX3NhdmVqFGcAAFgYAAAATWVhc3VyZVRpbWUuc3RhcnRfYnVuZGxlahRnAABYGQAAAE1lYXN1cmVUaW1lLmZpbmlzaF9idW5kbGVqFGcAAFgbAAAATWV0cmljc01vbml0b3Iuc2VuZF9tZXRyaWNzahRnAABYDgAAAEJpZ1F1ZXJ5Q2xpZW50ahRnAABYDgAAAE1ldHJpY3NNb25pdG9yahRnAABYCwAAAGNvdW50X2J5dGVzahRnAABYCwAAAE1lYXN1cmVUaW1lahRnAABYEwAAAE1lYXN1cmVUaW1lLnByb2Nlc3NqFGcAAHVqfWkAAFg2AAAAYXBhY2hlX2JlYW0udGVzdGluZy5sb2FkX3Rlc3RzLmxvYWRfdGVzdF9tZXRyaWNzX3V0aWxzcoODAACFgXKEgwAAfXKFgwAAYnRVGWFwYWNoZV9iZWFtLm1ldHJpY3MuY2VsbHMoWBM/AAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIgpUaGlzIGZpbGUgY29udGFpbnMgbWV0cmljIGNlbGwgY2xhc3Nlcy4gQSBtZXRyaWMgY2VsbCBpcyB1c2VkIHRvIGFjY3VtdWxhdGUKaW4tbWVtb3J5IGNoYW5nZXMgdG8gYSBtZXRyaWMuIEl0IHJlcHJlc2VudHMgYSBzcGVjaWZpYyBtZXRyaWMgaW4gYSBzaW5nbGUKY29udGV4dC4KCkNlbGxzIGRlcGVuZCBvbiBhICdkaXJ0eS1iaXQnIGluIHRoZSBDZWxsQ29tbWl0U3RhdGUgY2xhc3MgdGhhdCB0cmFja3Mgd2hldGhlcgphIGNlbGwncyB1cGRhdGVzIGhhdmUgYmVlbiBjb21taXR0ZWQuCiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgoKaW1wb3J0IHRocmVhZGluZwppbXBvcnQgdGltZQpmcm9tIGJ1aWx0aW5zIGltcG9ydCBvYmplY3QKCmZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCB0aW1lc3RhbXBfcGIyCgpmcm9tIGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZSBpbXBvcnQgQ291bnRlcgpmcm9tIGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZSBpbXBvcnQgRGlzdHJpYnV0aW9uCmZyb20gYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWNiYXNlIGltcG9ydCBHYXVnZQpmcm9tIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaSBpbXBvcnQgYmVhbV9mbl9hcGlfcGIyCgpfX2FsbF9fID0gWydEaXN0cmlidXRpb25SZXN1bHQnLCAnR2F1Z2VSZXN1bHQnXQoKCmNsYXNzIENlbGxDb21taXRTdGF0ZShvYmplY3QpOgogICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgQXRvbWljYWxseSB0cmFja3MgYSBjZWxsJ3MgZGlydHkvY2xlYW4gY29tbWl0IHN0YXR1cy4KCiAgUmVwb3J0aW5nIGEgbWV0cmljIHVwZGF0ZSB3b3JrcyBpbiBhIHR3by1zdGVwIHByb2Nlc3M6IEZpcnN0LCB1cGRhdGVzIHRvIHRoZQogIG1ldHJpYyBhcmUgcmVjZWl2ZWQsIGFuZCB0aGUgbWV0cmljIGlzIG1hcmtlZCBhcyAnZGlydHknLiBMYXRlciwgdXBkYXRlcyBhcmUKICBjb21taXR0ZWQsIGFuZCB0aGVuIHRoZSBjZWxsIG1heSBiZSBtYXJrZWQgYXMgJ2NsZWFuJy4KCiAgVGhlIHRyYWNraW5nIG9mIGEgY2VsbCdzIHN0YXRlIGlzIGRvbmUgY29uc2VydmF0aXZlbHk6IEEgbWV0cmljIG1heSBiZQogIHJlcG9ydGVkIERJUlRZIGV2ZW4gaWYgdXBkYXRlcyBoYXZlIG5vdCBvY2N1cnJlZC4KCiAgVGhpcyBjbGFzcyBpcyB0aHJlYWQtc2FmZS4KICAiIiIKCiAgIyBJbmRpY2F0ZXMgdGhhdCB0aGVyZSBoYXZlIGJlZW4gY2hhbmdlcyB0byB0aGUgY2VsbCBzaW5jZSB0aGUgbGFzdCBjb21taXQuCiAgRElSVFkgPSAwCiAgIyBJbmRpY2F0ZXMgdGhhdCB0aGVyZSBoYXZlIE5PVCBiZWVuIGNoYW5nZXMgdG8gdGhlIGNlbGwgc2luY2UgbGFzdCBjb21taXQuCiAgQ0xFQU4gPSAxCiAgIyBJbmRpY2F0ZXMgdGhhdCBhIGNvbW1pdCBvZiB0aGUgY3VycmVudCB2YWx1ZSBpcyBpbiBwcm9ncmVzcy4KICBDT01NSVRUSU5HID0gMgoKICBkZWYgX19pbml0X18oc2VsZik6CiAgICAiIiJJbml0aWFsaXplcyBgYENlbGxDb21taXRTdGF0ZWBgLgoKICAgIEEgY2VsbCBpcyBpbml0aWFsaXplZCBhcyBkaXJ0eS4KICAgICIiIgogICAgc2VsZi5fbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKICAgIHNlbGYuX3N0YXRlID0gQ2VsbENvbW1pdFN0YXRlLkRJUlRZCgogIEBwcm9wZXJ0eQogIGRlZiBzdGF0ZShzZWxmKToKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgcmV0dXJuIHNlbGYuX3N0YXRlCgogIGRlZiBhZnRlcl9tb2RpZmljYXRpb24oc2VsZik6CiAgICAiIiJJbmRpY2F0ZSB0aGF0IGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgdG8gdGhlIG1ldHJpYyBiZWluZyB0cmFja2VkLgoKICAgIFNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgbW9kaWZpY2F0aW9uIG9mIHRoZSBtZXRyaWMgdmFsdWUuCiAgICAiIiIKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgc2VsZi5fc3RhdGUgPSBDZWxsQ29tbWl0U3RhdGUuRElSVFkKCiAgZGVmIGFmdGVyX2NvbW1pdChzZWxmKToKICAgICIiIk1hcmsgY2hhbmdlcyBtYWRlIHVwIHRvIHRoZSBsYXN0IGNhbGwgdG8gYGBiZWZvcmVfY29tbWl0YGAgYXMgY29tbWl0dGVkLgoKICAgIFRoZSBuZXh0IGNhbGwgdG8gYGBiZWZvcmVfY29tbWl0YGAgd2lsbCByZXR1cm4gYGBGYWxzZWBgIHVubGVzcyB0aGVyZSBoYXZlCiAgICBiZWVuIGNoYW5nZXMgbWFkZS4KICAgICIiIgogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICBpZiBzZWxmLl9zdGF0ZSA9PSBDZWxsQ29tbWl0U3RhdGUuQ09NTUlUVElORzoKICAgICAgICBzZWxmLl9zdGF0ZSA9IENlbGxDb21taXRTdGF0ZS5DTEVBTgoKICBkZWYgYmVmb3JlX2NvbW1pdChzZWxmKToKICAgICIiIkNoZWNrIHRoZSBkaXJ0eSBzdGF0ZSwgYW5kIG1hcmsgdGhlIG1ldHJpYyBhcyBjb21taXR0aW5nLgoKICAgIEFmdGVyIHRoaXMgY2FsbCwgdGhlIHN0YXRlIGlzIGVpdGhlciBDTEVBTiwgb3IgQ09NTUlUVElORy4gSWYgdGhlIHN0YXRlCiAgICB3YXMgYWxyZWFkeSBDTEVBTiwgdGhlbiB3ZSBzaW1wbHkgcmV0dXJuLiBJZiBpdCB3YXMgZWl0aGVyIERJUlRZIG9yCiAgICBDT01NSVRUSU5HLCB0aGVuIHdlIHNldCB0aGUgY2VsbCBhcyBDT01NSVRUSU5HIChlLmcuIGluIHRoZSBtaWRkbGUgb2YKICAgIGEgY29tbWl0KS4KCiAgICBBZnRlciBhIGNvbW1pdCBpcyBzdWNjZXNzZnVsLCBgYGFmdGVyX2NvbW1pdGBgIHNob3VsZCBiZSBjYWxsZWQuCgogICAgUmV0dXJuczoKICAgICAgQSBib29sZWFuLCB3aGljaCBpcyBmYWxzZSBpZiB0aGUgY2VsbCBpcyBDTEVBTiwgYW5kIHRydWUgb3RoZXJ3aXNlLgogICAgIiIiCiAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgIGlmIHNlbGYuX3N0YXRlID09IENlbGxDb21taXRTdGF0ZS5DTEVBTjoKICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgc2VsZi5fc3RhdGUgPSBDZWxsQ29tbWl0U3RhdGUuQ09NTUlUVElORwogICAgICByZXR1cm4gVHJ1ZQoKCmNsYXNzIE1ldHJpY0NlbGwob2JqZWN0KToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIEFjY3VtdWxhdGVzIGluLW1lbW9yeSBjaGFuZ2VzIHRvIGEgbWV0cmljLgoKICBBIE1ldHJpY0NlbGwgcmVwcmVzZW50cyBhIHNwZWNpZmljIG1ldHJpYyBpbiBhIHNpbmdsZSBjb250ZXh0IGFuZCBidW5kbGUuCiAgQWxsIHN1YmNsYXNzZXMgbXVzdCBiZSB0aHJlYWQgc2FmZSwgYXMgdGhlc2UgYXJlIHVzZWQgaW4gdGhlIHBpcGVsaW5lIHJ1bm5lcnMsCiAgYW5kIG1heSBiZSBzdWJqZWN0IHRvIHBhcmFsbGVsL2NvbmN1cnJlbnQgdXBkYXRlcy4gQ2VsbHMgc2hvdWxkIG9ubHkgYmUgdXNlZAogIGRpcmVjdGx5IHdpdGhpbiBhIHJ1bm5lci4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZik6CiAgICBzZWxmLmNvbW1pdCA9IENlbGxDb21taXRTdGF0ZSgpCiAgICBzZWxmLl9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQoKICBkZWYgZ2V0X2N1bXVsYXRpdmUoc2VsZik6CiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgoKY2xhc3MgQ291bnRlckNlbGwoQ291bnRlciwgTWV0cmljQ2VsbCk6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBUcmFja3MgdGhlIGN1cnJlbnQgdmFsdWUgYW5kIGRlbHRhIG9mIGEgY291bnRlciBtZXRyaWMuCgogIEVhY2ggY2VsbCB0cmFja3MgdGhlIHN0YXRlIG9mIGEgbWV0cmljIGluZGVwZW5kZW50bHkgcGVyIGNvbnRleHQgcGVyIGJ1bmRsZS4KICBUaGVyZWZvcmUsIGVhY2ggbWV0cmljIGhhcyBhIGRpZmZlcmVudCBjZWxsIGluIGVhY2ggYnVuZGxlLCBjZWxscyBhcmUKICBhZ2dyZWdhdGVkIGJ5IHRoZSBydW5uZXIuCgogIFRoaXMgY2xhc3MgaXMgdGhyZWFkIHNhZmUuCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzKToKICAgIHN1cGVyKENvdW50ZXJDZWxsLCBzZWxmKS5fX2luaXRfXygqYXJncykKICAgIHNlbGYudmFsdWUgPSBDb3VudGVyQWdncmVnYXRvci5pZGVudGl0eV9lbGVtZW50KCkKCiAgZGVmIHJlc2V0KHNlbGYpOgogICAgc2VsZi5jb21taXQgPSBDZWxsQ29tbWl0U3RhdGUoKQogICAgc2VsZi52YWx1ZSA9IENvdW50ZXJBZ2dyZWdhdG9yLmlkZW50aXR5X2VsZW1lbnQoKQoKICBkZWYgY29tYmluZShzZWxmLCBvdGhlcik6CiAgICByZXN1bHQgPSBDb3VudGVyQ2VsbCgpCiAgICByZXN1bHQuaW5jKHNlbGYudmFsdWUgKyBvdGhlci52YWx1ZSkKICAgIHJldHVybiByZXN1bHQKCiAgZGVmIGluYyhzZWxmLCBuPTEpOgogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICBzZWxmLnZhbHVlICs9IG4KICAgICAgc2VsZi5jb21taXQuYWZ0ZXJfbW9kaWZpY2F0aW9uKCkKCiAgZGVmIGdldF9jdW11bGF0aXZlKHNlbGYpOgogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICByZXR1cm4gc2VsZi52YWx1ZQoKICBkZWYgdG9fcnVubmVyX2FwaV9tb25pdG9yaW5nX2luZm8oc2VsZik6CiAgICAiIiJSZXR1cm5zIGEgTWV0cmljIHdpdGggdGhpcyBjb3VudGVyIHZhbHVlIGZvciB1c2UgaW4gYSBNb25pdG9yaW5nSW5mby4iIiIKICAgICMgVE9ETyhhamFtYXRvKTogVXBkYXRlIHRoaXMgY29kZSB0byBiZSBjb25zaXN0ZW4gd2l0aCBHYXVnZXMKICAgICMgYW5kIERpc3RyaWJ1dGlvbnMuIFNpbmNlIHRoZXJlIGlzIG5vIENvdW50ZXJEYXRhIGNsYXNzIHRoaXMgbWV0aG9kCiAgICAjIHdhcyBhZGRlZCB0byBDb3VudGVyQ2VsbC4gQ29uc2lkZXIgYWRkaW5nIGEgQ291bnRlckRhdGEgY2xhc3Mgb3IKICAgICMgcmVtb3ZpbmcgdGhlIEdhdWdlRGF0YSBhbmQgRGlzdHJpYnV0aW9uRGF0YSBjbGFzc2VzLgogICAgcmV0dXJuIGJlYW1fZm5fYXBpX3BiMi5NZXRyaWMoCiAgICAgICAgY291bnRlcl9kYXRhPWJlYW1fZm5fYXBpX3BiMi5Db3VudGVyRGF0YSgKICAgICAgICAgICAgaW50NjRfdmFsdWU9c2VsZi5nZXRfY3VtdWxhdGl2ZSgpCiAgICAgICAgKQogICAgKQoKCmNsYXNzIERpc3RyaWJ1dGlvbkNlbGwoRGlzdHJpYnV0aW9uLCBNZXRyaWNDZWxsKToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIFRyYWNrcyB0aGUgY3VycmVudCB2YWx1ZSBhbmQgZGVsdGEgZm9yIGEgZGlzdHJpYnV0aW9uIG1ldHJpYy4KCiAgRWFjaCBjZWxsIHRyYWNrcyB0aGUgc3RhdGUgb2YgYSBtZXRyaWMgaW5kZXBlbmRlbnRseSBwZXIgY29udGV4dCBwZXIgYnVuZGxlLgogIFRoZXJlZm9yZSwgZWFjaCBtZXRyaWMgaGFzIGEgZGlmZmVyZW50IGNlbGwgaW4gZWFjaCBidW5kbGUsIHRoYXQgaXMgbGF0ZXIKICBhZ2dyZWdhdGVkLgoKICBUaGlzIGNsYXNzIGlzIHRocmVhZCBzYWZlLgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncyk6CiAgICBzdXBlcihEaXN0cmlidXRpb25DZWxsLCBzZWxmKS5fX2luaXRfXygqYXJncykKICAgIHNlbGYuZGF0YSA9IERpc3RyaWJ1dGlvbkFnZ3JlZ2F0b3IuaWRlbnRpdHlfZWxlbWVudCgpCgogIGRlZiByZXNldChzZWxmKToKICAgIHNlbGYuY29tbWl0ID0gQ2VsbENvbW1pdFN0YXRlKCkKICAgIHNlbGYuZGF0YSA9IERpc3RyaWJ1dGlvbkFnZ3JlZ2F0b3IuaWRlbnRpdHlfZWxlbWVudCgpCgogIGRlZiBjb21iaW5lKHNlbGYsIG90aGVyKToKICAgIHJlc3VsdCA9IERpc3RyaWJ1dGlvbkNlbGwoKQogICAgcmVzdWx0LmRhdGEgPSBzZWxmLmRhdGEuY29tYmluZShvdGhlci5kYXRhKQogICAgcmV0dXJuIHJlc3VsdAoKICBkZWYgdXBkYXRlKHNlbGYsIHZhbHVlKToKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgc2VsZi5jb21taXQuYWZ0ZXJfbW9kaWZpY2F0aW9uKCkKICAgICAgc2VsZi5fdXBkYXRlKHZhbHVlKQoKICBkZWYgX3VwZGF0ZShzZWxmLCB2YWx1ZSk6CiAgICB2YWx1ZSA9IGludCh2YWx1ZSkKICAgIHNlbGYuZGF0YS5jb3VudCArPSAxCiAgICBzZWxmLmRhdGEuc3VtICs9IHZhbHVlCiAgICBzZWxmLmRhdGEubWluID0gKHZhbHVlCiAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZGF0YS5taW4gaXMgTm9uZSBvciBzZWxmLmRhdGEubWluID4gdmFsdWUKICAgICAgICAgICAgICAgICAgICAgZWxzZSBzZWxmLmRhdGEubWluKQogICAgc2VsZi5kYXRhLm1heCA9ICh2YWx1ZQogICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmRhdGEubWF4IGlzIE5vbmUgb3Igc2VsZi5kYXRhLm1heCA8IHZhbHVlCiAgICAgICAgICAgICAgICAgICAgIGVsc2Ugc2VsZi5kYXRhLm1heCkKCiAgZGVmIGdldF9jdW11bGF0aXZlKHNlbGYpOgogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICByZXR1cm4gc2VsZi5kYXRhLmdldF9jdW11bGF0aXZlKCkKCgpjbGFzcyBHYXVnZUNlbGwoR2F1Z2UsIE1ldHJpY0NlbGwpOgogICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgVHJhY2tzIHRoZSBjdXJyZW50IHZhbHVlIGFuZCBkZWx0YSBmb3IgYSBnYXVnZSBtZXRyaWMuCgogIEVhY2ggY2VsbCB0cmFja3MgdGhlIHN0YXRlIG9mIGEgbWV0cmljIGluZGVwZW5kZW50bHkgcGVyIGNvbnRleHQgcGVyIGJ1bmRsZS4KICBUaGVyZWZvcmUsIGVhY2ggbWV0cmljIGhhcyBhIGRpZmZlcmVudCBjZWxsIGluIGVhY2ggYnVuZGxlLCB0aGF0IGlzIGxhdGVyCiAgYWdncmVnYXRlZC4KCiAgVGhpcyBjbGFzcyBpcyB0aHJlYWQgc2FmZS4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MpOgogICAgc3VwZXIoR2F1Z2VDZWxsLCBzZWxmKS5fX2luaXRfXygqYXJncykKICAgIHNlbGYuZGF0YSA9IEdhdWdlQWdncmVnYXRvci5pZGVudGl0eV9lbGVtZW50KCkKCiAgZGVmIHJlc2V0KHNlbGYpOgogICAgc2VsZi5jb21taXQgPSBDZWxsQ29tbWl0U3RhdGUoKQogICAgc2VsZi5kYXRhID0gR2F1Z2VBZ2dyZWdhdG9yLmlkZW50aXR5X2VsZW1lbnQoKQoKICBkZWYgY29tYmluZShzZWxmLCBvdGhlcik6CiAgICByZXN1bHQgPSBHYXVnZUNlbGwoKQogICAgcmVzdWx0LmRhdGEgPSBzZWxmLmRhdGEuY29tYmluZShvdGhlci5kYXRhKQogICAgcmV0dXJuIHJlc3VsdAoKICBkZWYgc2V0KHNlbGYsIHZhbHVlKToKICAgIHZhbHVlID0gaW50KHZhbHVlKQogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICBzZWxmLmNvbW1pdC5hZnRlcl9tb2RpZmljYXRpb24oKQogICAgICAjIFNldCB0aGUgdmFsdWUgZGlyZWN0bHkgd2l0aG91dCBjaGVja2luZyB0aW1lc3RhbXAsIGJlY2F1c2UKICAgICAgIyB0aGlzIHZhbHVlIGlzIG5hdHVyYWxseSB0aGUgbGF0ZXN0IHZhbHVlLgogICAgICBzZWxmLmRhdGEudmFsdWUgPSB2YWx1ZQogICAgICBzZWxmLmRhdGEudGltZXN0YW1wID0gdGltZS50aW1lKCkKCiAgZGVmIGdldF9jdW11bGF0aXZlKHNlbGYpOgogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICByZXR1cm4gc2VsZi5kYXRhLmdldF9jdW11bGF0aXZlKCkKCgpjbGFzcyBEaXN0cmlidXRpb25SZXN1bHQob2JqZWN0KToKICAiIiJUaGUgcmVzdWx0IG9mIGEgRGlzdHJpYnV0aW9uIG1ldHJpYy4iIiIKICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6CiAgICBzZWxmLmRhdGEgPSBkYXRhCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgaWYgaXNpbnN0YW5jZShvdGhlciwgRGlzdHJpYnV0aW9uUmVzdWx0KToKICAgICAgcmV0dXJuIHNlbGYuZGF0YSA9PSBvdGhlci5kYXRhCiAgICBlbHNlOgogICAgICByZXR1cm4gRmFsc2UKCiAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgcmV0dXJuIGhhc2goc2VsZi5kYXRhKQoKICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKICAgICMgVE9ETyhCRUFNLTU5NDkpOiBOZWVkZWQgZm9yIFB5dGhvbiAyIGNvbXBhdGliaWxpdHkuCiAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICc8RGlzdHJpYnV0aW9uUmVzdWx0KHN1bT17fSwgY291bnQ9e30sIG1pbj17fSwgbWF4PXt9KT4nLmZvcm1hdCgKICAgICAgICBzZWxmLnN1bSwKICAgICAgICBzZWxmLmNvdW50LAogICAgICAgIHNlbGYubWluLAogICAgICAgIHNlbGYubWF4KQoKICBAcHJvcGVydHkKICBkZWYgbWF4KHNlbGYpOgogICAgcmV0dXJuIHNlbGYuZGF0YS5tYXgKCiAgQHByb3BlcnR5CiAgZGVmIG1pbihzZWxmKToKICAgIHJldHVybiBzZWxmLmRhdGEubWluCgogIEBwcm9wZXJ0eQogIGRlZiBjb3VudChzZWxmKToKICAgIHJldHVybiBzZWxmLmRhdGEuY291bnQKCiAgQHByb3BlcnR5CiAgZGVmIHN1bShzZWxmKToKICAgIHJldHVybiBzZWxmLmRhdGEuc3VtCgogIEBwcm9wZXJ0eQogIGRlZiBtZWFuKHNlbGYpOgogICAgIiIiUmV0dXJucyB0aGUgZmxvYXQgbWVhbiBvZiB0aGUgZGlzdHJpYnV0aW9uLgoKICAgIElmIHRoZSBkaXN0cmlidXRpb24gY29udGFpbnMgbm8gZWxlbWVudHMsIGl0IHJldHVybnMgTm9uZS4KICAgICIiIgogICAgaWYgc2VsZi5kYXRhLmNvdW50ID09IDA6CiAgICAgIHJldHVybiBOb25lCiAgICByZXR1cm4gc2VsZi5kYXRhLnN1bSAvIHNlbGYuZGF0YS5jb3VudAoKCmNsYXNzIEdhdWdlUmVzdWx0KG9iamVjdCk6CiAgZGVmIF9faW5pdF9fKHNlbGYsIGRhdGEpOgogICAgc2VsZi5kYXRhID0gZGF0YQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIEdhdWdlUmVzdWx0KToKICAgICAgcmV0dXJuIHNlbGYuZGF0YSA9PSBvdGhlci5kYXRhCiAgICBlbHNlOgogICAgICByZXR1cm4gRmFsc2UKCiAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgcmV0dXJuIGhhc2goc2VsZi5kYXRhKQoKICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKICAgICMgVE9ETyhCRUFNLTU5NDkpOiBOZWVkZWQgZm9yIFB5dGhvbiAyIGNvbXBhdGliaWxpdHkuCiAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICc8R2F1Z2VSZXN1bHQodmFsdWU9e30sIHRpbWVzdGFtcD17fSk+Jy5mb3JtYXQoCiAgICAgICAgc2VsZi52YWx1ZSwKICAgICAgICBzZWxmLnRpbWVzdGFtcCkKCiAgQHByb3BlcnR5CiAgZGVmIHZhbHVlKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuZGF0YS52YWx1ZQoKICBAcHJvcGVydHkKICBkZWYgdGltZXN0YW1wKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuZGF0YS50aW1lc3RhbXAKCgpjbGFzcyBHYXVnZURhdGEob2JqZWN0KToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIFRoZSBkYXRhIHN0cnVjdHVyZSB0aGF0IGhvbGRzIGRhdGEgYWJvdXQgYSBnYXVnZSBtZXRyaWMuCgogIEdhdWdlIG1ldHJpY3MgYXJlIHJlc3RyaWN0ZWQgdG8gaW50ZWdlcnMgb25seS4KCiAgVGhpcyBvYmplY3QgaXMgbm90IHRocmVhZCBzYWZlLCBzbyBpdCdzIG5vdCBzdXBwb3NlZCB0byBiZSBtb2RpZmllZAogIGJ5IG90aGVyIHRoYW4gdGhlIEdhdWdlQ2VsbCB0aGF0IGNvbnRhaW5zIGl0LgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSwgdGltZXN0YW1wPU5vbmUpOgogICAgc2VsZi52YWx1ZSA9IHZhbHVlCiAgICBzZWxmLnRpbWVzdGFtcCA9IHRpbWVzdGFtcCBpZiB0aW1lc3RhbXAgaXMgbm90IE5vbmUgZWxzZSAwCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuIHNlbGYudmFsdWUgPT0gb3RoZXIudmFsdWUgYW5kIHNlbGYudGltZXN0YW1wID09IG90aGVyLnRpbWVzdGFtcAoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaCgoc2VsZi52YWx1ZSwgc2VsZi50aW1lc3RhbXApKQoKICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKICAgICMgVE9ETyhCRUFNLTU5NDkpOiBOZWVkZWQgZm9yIFB5dGhvbiAyIGNvbXBhdGliaWxpdHkuCiAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICc8R2F1Z2VEYXRhKHZhbHVlPXt9LCB0aW1lc3RhbXA9e30pPicuZm9ybWF0KAogICAgICAgIHNlbGYudmFsdWUsCiAgICAgICAgc2VsZi50aW1lc3RhbXApCgogIGRlZiBnZXRfY3VtdWxhdGl2ZShzZWxmKToKICAgIHJldHVybiBHYXVnZURhdGEoc2VsZi52YWx1ZSwgdGltZXN0YW1wPXNlbGYudGltZXN0YW1wKQoKICBkZWYgY29tYmluZShzZWxmLCBvdGhlcik6CiAgICBpZiBvdGhlciBpcyBOb25lOgogICAgICByZXR1cm4gc2VsZgoKICAgIGlmIG90aGVyLnRpbWVzdGFtcCA+IHNlbGYudGltZXN0YW1wOgogICAgICByZXR1cm4gb3RoZXIKICAgIGVsc2U6CiAgICAgIHJldHVybiBzZWxmCgogIEBzdGF0aWNtZXRob2QKICBkZWYgc2luZ2xldG9uKHZhbHVlLCB0aW1lc3RhbXA9Tm9uZSk6CiAgICByZXR1cm4gR2F1Z2VEYXRhKHZhbHVlLCB0aW1lc3RhbXA9dGltZXN0YW1wKQoKICBkZWYgdG9fcnVubmVyX2FwaShzZWxmKToKICAgIHNlY29uZHMgPSBpbnQoc2VsZi50aW1lc3RhbXApCiAgICBuYW5vcyA9IGludCgoc2VsZi50aW1lc3RhbXAgLSBzZWNvbmRzKSAqIDEwKio5KQogICAgZ2F1Z2VfdGltZXN0YW1wID0gdGltZXN0YW1wX3BiMi5UaW1lc3RhbXAoc2Vjb25kcz1zZWNvbmRzLCBuYW5vcz1uYW5vcykKICAgIHJldHVybiBiZWFtX2ZuX2FwaV9wYjIuTWV0cmljcy5Vc2VyLkdhdWdlRGF0YSgKICAgICAgICB2YWx1ZT1zZWxmLnZhbHVlLCB0aW1lc3RhbXA9Z2F1Z2VfdGltZXN0YW1wKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGZyb21fcnVubmVyX2FwaShwcm90byk6CiAgICBnYXVnZV90aW1lc3RhbXAgPSAocHJvdG8udGltZXN0YW1wLnNlY29uZHMgKwogICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KHByb3RvLnRpbWVzdGFtcC5uYW5vcykgLyAxMCoqOSkKICAgIHJldHVybiBHYXVnZURhdGEocHJvdG8udmFsdWUsIHRpbWVzdGFtcD1nYXVnZV90aW1lc3RhbXApCgogIGRlZiB0b19ydW5uZXJfYXBpX21vbml0b3JpbmdfaW5mbyhzZWxmKToKICAgICIiIlJldHVybnMgYSBNZXRyaWMgd2l0aCB0aGlzIHZhbHVlIGZvciB1c2UgaW4gYSBNb25pdG9yaW5nSW5mby4iIiIKICAgIHJldHVybiBiZWFtX2ZuX2FwaV9wYjIuTWV0cmljKAogICAgICAgIGNvdW50ZXJfZGF0YT1iZWFtX2ZuX2FwaV9wYjIuQ291bnRlckRhdGEoCiAgICAgICAgICAgIGludDY0X3ZhbHVlPXNlbGYudmFsdWUKICAgICAgICApCiAgICApCgoKY2xhc3MgRGlzdHJpYnV0aW9uRGF0YShvYmplY3QpOgogICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgVGhlIGRhdGEgc3RydWN0dXJlIHRoYXQgaG9sZHMgZGF0YSBhYm91dCBhIGRpc3RyaWJ1dGlvbiBtZXRyaWMuCgogIERpc3RyaWJ1dGlvbiBtZXRyaWNzIGFyZSByZXN0cmljdGVkIHRvIGRpc3RyaWJ1dGlvbnMgb2YgaW50ZWdlcnMgb25seS4KCiAgVGhpcyBvYmplY3QgaXMgbm90IHRocmVhZCBzYWZlLCBzbyBpdCdzIG5vdCBzdXBwb3NlZCB0byBiZSBtb2RpZmllZAogIGJ5IG90aGVyIHRoYW4gdGhlIERpc3RyaWJ1dGlvbkNlbGwgdGhhdCBjb250YWlucyBpdC4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgc3VtLCBjb3VudCwgbWluLCBtYXgpOgogICAgc2VsZi5zdW0gPSBzdW0KICAgIHNlbGYuY291bnQgPSBjb3VudAogICAgc2VsZi5taW4gPSBtaW4KICAgIHNlbGYubWF4ID0gbWF4CgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuIChzZWxmLnN1bSA9PSBvdGhlci5zdW0gYW5kCiAgICAgICAgICAgIHNlbGYuY291bnQgPT0gb3RoZXIuY291bnQgYW5kCiAgICAgICAgICAgIHNlbGYubWluID09IG90aGVyLm1pbiBhbmQKICAgICAgICAgICAgc2VsZi5tYXggPT0gb3RoZXIubWF4KQoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaCgoc2VsZi5zdW0sIHNlbGYuY291bnQsIHNlbGYubWluLCBzZWxmLm1heCkpCgogIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgogICAgIyBUT0RPKEJFQU0tNTk0OSk6IE5lZWRlZCBmb3IgUHl0aG9uIDIgY29tcGF0aWJpbGl0eS4KICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJzxEaXN0cmlidXRpb25EYXRhKHN1bT17fSwgY291bnQ9e30sIG1pbj17fSwgbWF4PXt9KT4nLmZvcm1hdCgKICAgICAgICBzZWxmLnN1bSwKICAgICAgICBzZWxmLmNvdW50LAogICAgICAgIHNlbGYubWluLAogICAgICAgIHNlbGYubWF4KQoKICBkZWYgZ2V0X2N1bXVsYXRpdmUoc2VsZik6CiAgICByZXR1cm4gRGlzdHJpYnV0aW9uRGF0YShzZWxmLnN1bSwgc2VsZi5jb3VudCwgc2VsZi5taW4sIHNlbGYubWF4KQoKICBkZWYgY29tYmluZShzZWxmLCBvdGhlcik6CiAgICBpZiBvdGhlciBpcyBOb25lOgogICAgICByZXR1cm4gc2VsZgoKICAgIG5ld19taW4gPSAoTm9uZSBpZiBzZWxmLm1pbiBpcyBOb25lIGFuZCBvdGhlci5taW4gaXMgTm9uZSBlbHNlCiAgICAgICAgICAgICAgIG1pbih4IGZvciB4IGluIChzZWxmLm1pbiwgb3RoZXIubWluKSBpZiB4IGlzIG5vdCBOb25lKSkKICAgIG5ld19tYXggPSAoTm9uZSBpZiBzZWxmLm1heCBpcyBOb25lIGFuZCBvdGhlci5tYXggaXMgTm9uZSBlbHNlCiAgICAgICAgICAgICAgIG1heCh4IGZvciB4IGluIChzZWxmLm1heCwgb3RoZXIubWF4KSBpZiB4IGlzIG5vdCBOb25lKSkKICAgIHJldHVybiBEaXN0cmlidXRpb25EYXRhKAogICAgICAgIHNlbGYuc3VtICsgb3RoZXIuc3VtLAogICAgICAgIHNlbGYuY291bnQgKyBvdGhlci5jb3VudCwKICAgICAgICBuZXdfbWluLAogICAgICAgIG5ld19tYXgpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgc2luZ2xldG9uKHZhbHVlKToKICAgIHJldHVybiBEaXN0cmlidXRpb25EYXRhKHZhbHVlLCAxLCB2YWx1ZSwgdmFsdWUpCgogIGRlZiB0b19ydW5uZXJfYXBpKHNlbGYpOgogICAgcmV0dXJuIGJlYW1fZm5fYXBpX3BiMi5NZXRyaWNzLlVzZXIuRGlzdHJpYnV0aW9uRGF0YSgKICAgICAgICBjb3VudD1zZWxmLmNvdW50LCBzdW09c2VsZi5zdW0sIG1pbj1zZWxmLm1pbiwgbWF4PXNlbGYubWF4KQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGZyb21fcnVubmVyX2FwaShwcm90byk6CiAgICByZXR1cm4gRGlzdHJpYnV0aW9uRGF0YShwcm90by5zdW0sIHByb3RvLmNvdW50LCBwcm90by5taW4sIHByb3RvLm1heCkKCiAgZGVmIHRvX3J1bm5lcl9hcGlfbW9uaXRvcmluZ19pbmZvKHNlbGYpOgogICAgIiIiUmV0dXJucyBhIE1ldHJpYyB3aXRoIHRoaXMgdmFsdWUgZm9yIHVzZSBpbiBhIE1vbml0b3JpbmdJbmZvLiIiIgogICAgcmV0dXJuIGJlYW1fZm5fYXBpX3BiMi5NZXRyaWMoCiAgICAgICAgZGlzdHJpYnV0aW9uX2RhdGE9YmVhbV9mbl9hcGlfcGIyLkRpc3RyaWJ1dGlvbkRhdGEoCiAgICAgICAgICAgIGludF9kaXN0cmlidXRpb25fZGF0YT1iZWFtX2ZuX2FwaV9wYjIuSW50RGlzdHJpYnV0aW9uRGF0YSgKICAgICAgICAgICAgICAgIGNvdW50PXNlbGYuY291bnQsIHN1bT1zZWxmLnN1bSwgbWluPXNlbGYubWluLCBtYXg9c2VsZi5tYXgpKSkKCgpjbGFzcyBNZXRyaWNBZ2dyZWdhdG9yKG9iamVjdCk6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBCYXNlIGludGVyZmFjZSBmb3IgYWdncmVnYXRpbmcgbWV0cmljIGRhdGEgZHVyaW5nIHBpcGVsaW5lIGV4ZWN1dGlvbi4iIiIKCiAgZGVmIGlkZW50aXR5X2VsZW1lbnQoc2VsZik6CiAgICAiIiJSZXR1cm5zIHRoZSBpZGVudGljYWwgZWxlbWVudCBvZiBhbiBBZ2dyZWdhdGlvbi4KCiAgICBGb3IgdGhlIGlkZW50aXR5IGVsZW1lbnQsIGl0IG11c3QgaG9sZCB0aGF0CiAgICAgQWdncmVnYXRvci5jb21iaW5lKGFueV9lbGVtZW50LCBpZGVudGl0eV9lbGVtZW50KSA9PSBhbnlfZWxlbWVudC4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgY29tYmluZShzZWxmLCB1cGRhdGVzKToKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIHJlc3VsdChzZWxmLCB4KToKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCgpjbGFzcyBDb3VudGVyQWdncmVnYXRvcihNZXRyaWNBZ2dyZWdhdG9yKToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIEFnZ3JlZ2F0b3IgZm9yIENvdW50ZXIgbWV0cmljIGRhdGEgZHVyaW5nIHBpcGVsaW5lIGV4ZWN1dGlvbi4KCiAgVmFsdWVzIGFnZ3JlZ2F0ZWQgc2hvdWxkIGJlIGBgaW50YGAgb2JqZWN0cy4KICAiIiIKICBAc3RhdGljbWV0aG9kCiAgZGVmIGlkZW50aXR5X2VsZW1lbnQoKToKICAgIHJldHVybiAwCgogIGRlZiBjb21iaW5lKHNlbGYsIHgsIHkpOgogICAgcmV0dXJuIGludCh4KSArIGludCh5KQoKICBkZWYgcmVzdWx0KHNlbGYsIHgpOgogICAgcmV0dXJuIGludCh4KQoKCmNsYXNzIERpc3RyaWJ1dGlvbkFnZ3JlZ2F0b3IoTWV0cmljQWdncmVnYXRvcik6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBBZ2dyZWdhdG9yIGZvciBEaXN0cmlidXRpb24gbWV0cmljIGRhdGEgZHVyaW5nIHBpcGVsaW5lIGV4ZWN1dGlvbi4KCiAgVmFsdWVzIGFnZ3JlZ2F0ZWQgc2hvdWxkIGJlIGBgRGlzdHJpYnV0aW9uRGF0YWBgIG9iamVjdHMuCiAgIiIiCiAgQHN0YXRpY21ldGhvZAogIGRlZiBpZGVudGl0eV9lbGVtZW50KCk6CiAgICByZXR1cm4gRGlzdHJpYnV0aW9uRGF0YSgwLCAwLCBOb25lLCBOb25lKQoKICBkZWYgY29tYmluZShzZWxmLCB4LCB5KToKICAgIHJldHVybiB4LmNvbWJpbmUoeSkKCiAgZGVmIHJlc3VsdChzZWxmLCB4KToKICAgIHJldHVybiBEaXN0cmlidXRpb25SZXN1bHQoeC5nZXRfY3VtdWxhdGl2ZSgpKQoKCmNsYXNzIEdhdWdlQWdncmVnYXRvcihNZXRyaWNBZ2dyZWdhdG9yKToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIEFnZ3JlZ2F0b3IgZm9yIEdhdWdlIG1ldHJpYyBkYXRhIGR1cmluZyBwaXBlbGluZSBleGVjdXRpb24uCgogIFZhbHVlcyBhZ2dyZWdhdGVkIHNob3VsZCBiZSBgYEdhdWdlRGF0YWBgIG9iamVjdHMuCiAgIiIiCiAgQHN0YXRpY21ldGhvZAogIGRlZiBpZGVudGl0eV9lbGVtZW50KCk6CiAgICByZXR1cm4gR2F1Z2VEYXRhKE5vbmUsIHRpbWVzdGFtcD0wKQoKICBkZWYgY29tYmluZShzZWxmLCB4LCB5KToKICAgIHJlc3VsdCA9IHguY29tYmluZSh5KQogICAgcmV0dXJuIHJlc3VsdAoKICBkZWYgcmVzdWx0KHNlbGYsIHgpOgogICAgcmV0dXJuIEdhdWdlUmVzdWx0KHguZ2V0X2N1bXVsYXRpdmUoKSkKfXKGgwAAKFgfAAAARGlzdHJpYnV0aW9uRGF0YS5nZXRfY3VtdWxhdGl2ZVgDAAAAZGVmTcIBTcQBh1gRAAAAQ291bnRlckNlbGwucmVzZXRYAwAAAGRlZkuWS5mHWBAAAABEaXN0cmlidXRpb25EYXRhWAUAAABjbGFzc02eAU3lAYdYHgAAAERpc3RyaWJ1dGlvbkRhdGEudG9fcnVubmVyX2FwaVgDAAAAZGVmTdcBTdoBh1gYAAAATWV0cmljQWdncmVnYXRvci5jb21iaW5lWAMAAABkZWZN9AFN9gGHWBIAAABEaXN0cmlidXRpb25SZXN1bHRYBQAAAGNsYXNzTQgBTToBh1gUAAAAQ291bnRlckNlbGwuX19pbml0X19YAwAAAGRlZkuSS5WHWBIAAABHYXVnZURhdGEuX19yZXByX19YAwAAAGRlZk1zAU13AYdYEgAAAEdhdWdlUmVzdWx0Ll9fbmVfX1gDAAAAZGVmTUkBTUwBh1gSAAAAR2F1Z2VSZXN1bHQuX19lcV9fWAMAAABkZWZNQAFNRQGHWBIAAABHYXVnZURhdGEuX19oYXNoX19YAwAAAGRlZk1sAU1uAYdYGAAAAERpc3RyaWJ1dGlvbkRhdGEuY29tYmluZVgDAAAAZGVmTcUBTdIBh1gXAAAAR2F1Z2VBZ2dyZWdhdG9yLmNvbWJpbmVYAwAAAGRlZk0qAk0tAodYDwAAAEdhdWdlQWdncmVnYXRvclgFAAAAY2xhc3NNHwJNMAKHWCcAAABEaXN0cmlidXRpb25BZ2dyZWdhdG9yLmlkZW50aXR5X2VsZW1lbnRYAwAAAGRlZk0UAk0XAodYFwAAAERpc3RyaWJ1dGlvblJlc3VsdC5tZWFuWAMAAABkZWZNMQFNOgGHWB8AAABEaXN0cmlidXRpb25DZWxsLmdldF9jdW11bGF0aXZlWAMAAABkZWZL3Uvgh1gRAAAAQ291bnRlckFnZ3JlZ2F0b3JYBQAAAGNsYXNzTfsBTQsCh1gTAAAATWV0cmljQ2VsbC5fX2luaXRfX1gDAAAAZGVmS39LgodYEAAAAEdhdWdlRGF0YS5fX2VxX19YAwAAAGRlZk1pAU1rAYdYGQAAAERpc3RyaWJ1dGlvblJlc3VsdC5fX2VxX19YAwAAAGRlZk0NAU0SAYdYEgAAAEdhdWdlRGF0YS5fX2luaXRfX1gDAAAAZGVmTWUBTWgBh1gXAAAARGlzdHJpYnV0aW9uRGF0YS5fX2VxX19YAwAAAGRlZk2uAU2zAYdYEAAAAEdhdWdlRGF0YS5fX25lX19YAwAAAGRlZk1vAU1yAYdYDwAAAENvdW50ZXJDZWxsLmluY1gDAAAAZGVmS59Lo4dYCwAAAEdhdWdlUmVzdWx0WAUAAABjbGFzc008AU1ZAYdYFgAAAERpc3RyaWJ1dGlvbkFnZ3JlZ2F0b3JYBQAAAGNsYXNzTQ0CTR0Ch1gWAAAAR2F1Z2VBZ2dyZWdhdG9yLnJlc3VsdFgDAAAAZGVmTS4CTTACh1geAAAARGlzdHJpYnV0aW9uQWdncmVnYXRvci5jb21iaW5lWAMAAABkZWZNGAJNGgKHWBgAAABEaXN0cmlidXRpb25DZWxsLl91cGRhdGVYAwAAAGRlZkvSS9yHWBAAAABEaXN0cmlidXRpb25DZWxsWAUAAABjbGFzc0u1S+CHWBcAAABNZXRyaWNBZ2dyZWdhdG9yLnJlc3VsdFgDAAAAZGVmTfcBTfkBh1ghAAAATWV0cmljQWdncmVnYXRvci5pZGVudGl0eV9lbGVtZW50WAMAAABkZWZN7AFN8wGHWBgAAABHYXVnZUNlbGwuZ2V0X2N1bXVsYXRpdmVYAwAAAGRlZk0DAU0GAYdYEQAAAEdhdWdlQ2VsbC5jb21iaW5lWAMAAABkZWZL9Uv5h1gSAAAAR2F1Z2VDZWxsLl9faW5pdF9fWAMAAABkZWZL7Uvwh1guAAAARGlzdHJpYnV0aW9uRGF0YS50b19ydW5uZXJfYXBpX21vbml0b3JpbmdfaW5mb1gDAAAAZGVmTd8BTeUBh1gUAAAAR2F1Z2VSZXN1bHQuX19oYXNoX19YAwAAAGRlZk1GAU1IAYdYDwAAAEdhdWdlQ2VsbC5yZXNldFgDAAAAZGVmS/FL9IdYHAAAAENlbGxDb21taXRTdGF0ZS5hZnRlcl9jb21taXRYAwAAAGRlZktXS2CHWBUAAABDZWxsQ29tbWl0U3RhdGUuc3RhdGVYAwAAAGRlZktKS06HWBgAAABEaXN0cmlidXRpb25DZWxsLmNvbWJpbmVYAwAAAGRlZkvIS8yHWAoAAABNZXRyaWNDZWxsWAUAAABjbGFzc0t1S4WHWBoAAABEaXN0cmlidXRpb25EYXRhLnNpbmdsZXRvblgDAAAAZGVmTdMBTdYBh1gbAAAARGlzdHJpYnV0aW9uUmVzdWx0Ll9faGFzaF9fWAMAAABkZWZNEwFNFQGHWBkAAABDb3VudGVyQWdncmVnYXRvci5jb21iaW5lWAMAAABkZWZNBgJNCAKHWCAAAABEaXN0cmlidXRpb25EYXRhLmZyb21fcnVubmVyX2FwaVgDAAAAZGVmTdsBTd4Bh1gTAAAAR2F1Z2VEYXRhLnNpbmdsZXRvblgDAAAAZGVmTYQBTYcBh1gYAAAARGlzdHJpYnV0aW9uUmVzdWx0LmNvdW50WAMAAABkZWZNKQFNLAGHWBMAAABDb3VudGVyQ2VsbC5jb21iaW5lWAMAAABkZWZLmkueh1gWAAAARGlzdHJpYnV0aW9uUmVzdWx0LnN1bVgDAAAAZGVmTS0BTTABh1giAAAAQ2VsbENvbW1pdFN0YXRlLmFmdGVyX21vZGlmaWNhdGlvblgDAAAAZGVmS09LVodYGQAAAERpc3RyaWJ1dGlvbkRhdGEuX19pbml0X19YAwAAAGRlZk2oAU2tAYdYGwAAAERpc3RyaWJ1dGlvblJlc3VsdC5fX2luaXRfX1gDAAAAZGVmTQoBTQwBh1gPAAAAQ2VsbENvbW1pdFN0YXRlWAUAAABjbGFzc0ssS3OHWBQAAABHYXVnZVJlc3VsdC5fX3JlcHJfX1gDAAAAZGVmTU0BTVEBh1gaAAAAQ291bnRlckNlbGwuZ2V0X2N1bXVsYXRpdmVYAwAAAGRlZkukS6eHWBEAAABHYXVnZURhdGEuY29tYmluZVgDAAAAZGVmTXsBTYMBh1gUAAAAR2F1Z2VSZXN1bHQuX19pbml0X19YAwAAAGRlZk09AU0/AYdYGQAAAE1ldHJpY0NlbGwuZ2V0X2N1bXVsYXRpdmVYAwAAAGRlZkuDS4WHWBgAAABDb3VudGVyQWdncmVnYXRvci5yZXN1bHRYAwAAAGRlZk0JAk0LAodYGQAAAERpc3RyaWJ1dGlvbkRhdGEuX19yZXByX19YAwAAAGRlZk27AU3BAYdYFgAAAERpc3RyaWJ1dGlvblJlc3VsdC5tYXhYAwAAAGRlZk0hAU0kAYdYFgAAAERpc3RyaWJ1dGlvblJlc3VsdC5taW5YAwAAAGRlZk0lAU0oAYdYKQAAAENvdW50ZXJDZWxsLnRvX3J1bm5lcl9hcGlfbW9uaXRvcmluZ19pbmZvWAMAAABkZWZLqEuzh1gdAAAARGlzdHJpYnV0aW9uQWdncmVnYXRvci5yZXN1bHRYAwAAAGRlZk0bAk0dAodYEQAAAEdhdWdlUmVzdWx0LnZhbHVlWAMAAABkZWZNUgFNVQGHWAkAAABHYXVnZUNlbGxYBQAAAGNsYXNzS+JNBgGHWCAAAABHYXVnZUFnZ3JlZ2F0b3IuaWRlbnRpdHlfZWxlbWVudFgDAAAAZGVmTSYCTSkCh1gYAAAAQ2VsbENvbW1pdFN0YXRlLl9faW5pdF9fWAMAAABkZWZLQktJh1gZAAAAR2F1Z2VEYXRhLmZyb21fcnVubmVyX2FwaVgDAAAAZGVmTY8BTZQBh1gXAAAARGlzdHJpYnV0aW9uRGF0YS5fX25lX19YAwAAAGRlZk23AU26AYdYIgAAAENvdW50ZXJBZ2dyZWdhdG9yLmlkZW50aXR5X2VsZW1lbnRYAwAAAGRlZk0CAk0FAodYGAAAAEdhdWdlRGF0YS5nZXRfY3VtdWxhdGl2ZVgDAAAAZGVmTXgBTXoBh1gXAAAAR2F1Z2VEYXRhLnRvX3J1bm5lcl9hcGlYAwAAAGRlZk2IAU2OAYdYGQAAAERpc3RyaWJ1dGlvblJlc3VsdC5fX25lX19YAwAAAGRlZk0WAU0ZAYdYDQAAAEdhdWdlQ2VsbC5zZXRYAwAAAGRlZkv6TQIBh1gnAAAAR2F1Z2VEYXRhLnRvX3J1bm5lcl9hcGlfbW9uaXRvcmluZ19pbmZvWAMAAABkZWZNlQFNnAGHWBkAAABEaXN0cmlidXRpb25DZWxsLl9faW5pdF9fWAMAAABkZWZLwEvDh1gXAAAARGlzdHJpYnV0aW9uQ2VsbC51cGRhdGVYAwAAAGRlZkvNS9GHWBUAAABHYXVnZVJlc3VsdC50aW1lc3RhbXBYAwAAAGRlZk1WAU1ZAYdYCwAAAENvdW50ZXJDZWxsWAUAAABjbGFzc0uHS7OHWBsAAABEaXN0cmlidXRpb25SZXN1bHQuX19yZXByX19YAwAAAGRlZk0aAU0gAYdYGQAAAERpc3RyaWJ1dGlvbkRhdGEuX19oYXNoX19YAwAAAGRlZk20AU22AYdYCQAAAEdhdWdlRGF0YVgFAAAAY2xhc3NNWwFNnAGHWBAAAABNZXRyaWNBZ2dyZWdhdG9yWAUAAABjbGFzc03nAU35AYdYHQAAAENlbGxDb21taXRTdGF0ZS5iZWZvcmVfY29tbWl0WAMAAABkZWZLYUtzh1gWAAAARGlzdHJpYnV0aW9uQ2VsbC5yZXNldFgDAAAAZGVmS8RLx4d1fXKHgwAAKFgSAAAARGlzdHJpYnV0aW9uUmVzdWx0anBdAABYCwAAAEdhdWdlUmVzdWx0anBdAAB1an1pAABYGQAAAGFwYWNoZV9iZWFtLm1ldHJpY3MuY2VsbHNyiIMAAIWBcomDAAB9coqDAABidFUmYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5oZWxwZXIoWJopAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkNsb3VkIERhdGFzdG9yZSBoZWxwZXIgZnVuY3Rpb25zLgoKRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoiIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgZXJybm8KaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHN5cwppbXBvcnQgdGltZQpmcm9tIGJ1aWx0aW5zIGltcG9ydCBvYmplY3QKZnJvbSBzb2NrZXQgaW1wb3J0IGVycm9yIGFzIFNvY2tldEVycm9yCgpmcm9tIGZ1dHVyZS5idWlsdGlucyBpbXBvcnQgbmV4dApmcm9tIHBhc3QuYnVpbHRpbnMgaW1wb3J0IHVuaWNvZGUKCiMgcHlsaW50OiBkaXNhYmxlPXVuZ3JvdXBlZC1pbXBvcnRzCmZyb20gYXBhY2hlX2JlYW0uaW50ZXJuYWwuZ2NwIGltcG9ydCBhdXRoCmZyb20gYXBhY2hlX2JlYW0udXRpbHMgaW1wb3J0IHJldHJ5CgojIFByb3RlY3QgYWdhaW5zdCBlbnZpcm9ubWVudHMgd2hlcmUgZGF0YXN0b3JlIGxpYnJhcnkgaXMgbm90IGF2YWlsYWJsZS4KIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KdHJ5OgogIGZyb20gZ29vZ2xlLmNsb3VkLnByb3RvLmRhdGFzdG9yZS52MSBpbXBvcnQgZGF0YXN0b3JlX3BiMgogIGZyb20gZ29vZ2xlLmNsb3VkLnByb3RvLmRhdGFzdG9yZS52MSBpbXBvcnQgZW50aXR5X3BiMgogIGZyb20gZ29vZ2xlLmNsb3VkLnByb3RvLmRhdGFzdG9yZS52MSBpbXBvcnQgcXVlcnlfcGIyCiAgZnJvbSBnb29nbGUucnBjIGltcG9ydCBjb2RlX3BiMgogIGZyb20gZ29vZ2xlZGF0YXN0b3JlIGltcG9ydCBQcm9wZXJ0eUZpbHRlciwgQ29tcG9zaXRlRmlsdGVyCiAgZnJvbSBnb29nbGVkYXRhc3RvcmUgaW1wb3J0IGhlbHBlciBhcyBkYXRhc3RvcmVfaGVscGVyCiAgZnJvbSBnb29nbGVkYXRhc3RvcmUuY29ubmVjdGlvbiBpbXBvcnQgRGF0YXN0b3JlCiAgZnJvbSBnb29nbGVkYXRhc3RvcmUuY29ubmVjdGlvbiBpbXBvcnQgUlBDRXJyb3IKZXhjZXB0IEltcG9ydEVycm9yOgogIHBhc3MKIyBweWxpbnQ6IGVuYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbgoKIyBweWxpbnQ6IGVuYWJsZT11bmdyb3VwZWQtaW1wb3J0cwoKCmRlZiBrZXlfY29tcGFyYXRvcihrMSwgazIpOgogICIiIkEgY29tcGFyYXRvciBmb3IgRGF0YXN0b3JlIGtleXMuCgogIENvbXBhcmlzb24gaXMgb25seSB2YWxpZCBmb3Iga2V5cyBpbiB0aGUgc2FtZSBwYXJ0aXRpb24uIFRoZSBjb21wYXJpc29uIGhlcmUKICBpcyBiZXR3ZWVuIHRoZSBsaXN0IG9mIHBhdGhzIGZvciBlYWNoIGtleS4KICAiIiIKCiAgaWYgazEucGFydGl0aW9uX2lkICE9IGsyLnBhcnRpdGlvbl9pZDoKICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0Nhbm5vdCBjb21wYXJlIGtleXMgd2l0aCBkaWZmZXJlbnQgcGFydGl0aW9uIGlkcy4nKQoKICBrMl9pdGVyID0gaXRlcihrMi5wYXRoKQoKICBmb3IgazFfcGF0aCBpbiBrMS5wYXRoOgogICAgazJfcGF0aCA9IG5leHQoazJfaXRlciwgTm9uZSkKICAgIGlmIG5vdCBrMl9wYXRoOgogICAgICByZXR1cm4gMQoKICAgIHJlc3VsdCA9IGNvbXBhcmVfcGF0aChrMV9wYXRoLCBrMl9wYXRoKQoKICAgIGlmIHJlc3VsdCAhPSAwOgogICAgICByZXR1cm4gcmVzdWx0CgogIGsyX3BhdGggPSBuZXh0KGsyX2l0ZXIsIE5vbmUpCiAgaWYgazJfcGF0aDoKICAgIHJldHVybiAtMQogIHJldHVybiAwCgoKZGVmIGNvbXBhcmVfcGF0aChwMSwgcDIpOgogICIiIkEgY29tcGFyYXRvciBmb3Iga2V5IHBhdGguCgogIEEgcGF0aCBoYXMgZWl0aGVyIGFuIGBpZGAgb3IgYSBgbmFtZWAgZmllbGQgZGVmaW5lZC4gVGhlCiAgY29tcGFyaXNvbiB3b3JrcyB3aXRoIHRoZSBmb2xsb3dpbmcgcnVsZXM6CgogIDEuIElmIG9uZSBwYXRoIGhhcyBgaWRgIGRlZmluZWQgd2hpbGUgdGhlIG90aGVyIGRvZXNuJ3QsIHRoZW4gdGhlCiAgb25lIHdpdGggYGlkYCBkZWZpbmVkIGlzIGNvbnNpZGVyZWQgc21hbGxlci4KICAyLiBJZiBib3RoIHBhdGhzIGhhdmUgYGlkYCBkZWZpbmVkLCB0aGVuIHRoZWlyIGlkcyBhcmUgY29tcGFyZWQuCiAgMy4gSWYgbm8gYGlkYCBpcyBkZWZpbmVkIGZvciBib3RoIHBhdGhzLCB0aGVuIHRoZWlyIGBuYW1lc2AgYXJlIGNvbXBhcmVkLgogICIiIgoKICByZXN1bHQgPSAocDEua2luZCA+IHAyLmtpbmQpIC0gKHAxLmtpbmQgPCBwMi5raW5kKQogIGlmIHJlc3VsdCAhPSAwOgogICAgcmV0dXJuIHJlc3VsdAoKICBpZiBwMS5IYXNGaWVsZCgnaWQnKToKICAgIGlmIG5vdCBwMi5IYXNGaWVsZCgnaWQnKToKICAgICAgcmV0dXJuIC0xCgogICAgcmV0dXJuIChwMS5pZCA+IHAyLmlkKSAtIChwMS5pZCA8IHAyLmlkKQoKICBpZiBwMi5IYXNGaWVsZCgnaWQnKToKICAgIHJldHVybiAxCgogIHJldHVybiAocDEubmFtZSA+IHAyLm5hbWUpIC0gKHAxLm5hbWUgPCBwMi5uYW1lKQoKCmRlZiBnZXRfZGF0YXN0b3JlKHByb2plY3QpOgogICIiIlJldHVybnMgYSBDbG91ZCBEYXRhc3RvcmUgY2xpZW50LiIiIgogIGNyZWRlbnRpYWxzID0gYXV0aC5nZXRfc2VydmljZV9jcmVkZW50aWFscygpCiAgcmV0dXJuIERhdGFzdG9yZShwcm9qZWN0LCBjcmVkZW50aWFscywgaG9zdD0nYmF0Y2gtZGF0YXN0b3JlLmdvb2dsZWFwaXMuY29tJykKCgpkZWYgbWFrZV9yZXF1ZXN0KHByb2plY3QsIG5hbWVzcGFjZSwgcXVlcnkpOgogICIiIk1ha2UgYSBDbG91ZCBEYXRhc3RvcmUgcmVxdWVzdCBmb3IgdGhlIGdpdmVuIHF1ZXJ5LiIiIgogIHJlcSA9IGRhdGFzdG9yZV9wYjIuUnVuUXVlcnlSZXF1ZXN0KCkKICByZXEucGFydGl0aW9uX2lkLkNvcHlGcm9tKG1ha2VfcGFydGl0aW9uKHByb2plY3QsIG5hbWVzcGFjZSkpCgogIHJlcS5xdWVyeS5Db3B5RnJvbShxdWVyeSkKICByZXR1cm4gcmVxCgoKZGVmIG1ha2VfcGFydGl0aW9uKHByb2plY3QsIG5hbWVzcGFjZSk6CiAgIiIiTWFrZSBhIFBhcnRpdGlvbklkIGZvciB0aGUgZ2l2ZW4gcHJvamVjdCBhbmQgbmFtZXNwYWNlLiIiIgogIHBhcnRpdGlvbiA9IGVudGl0eV9wYjIuUGFydGl0aW9uSWQoKQogIHBhcnRpdGlvbi5wcm9qZWN0X2lkID0gcHJvamVjdAogIGlmIG5hbWVzcGFjZSBpcyBub3QgTm9uZToKICAgIHBhcnRpdGlvbi5uYW1lc3BhY2VfaWQgPSBuYW1lc3BhY2UKCiAgcmV0dXJuIHBhcnRpdGlvbgoKCmRlZiByZXRyeV9vbl9ycGNfZXJyb3IoZXhjZXB0aW9uKToKICAiIiJBIHJldHJ5IGZpbHRlciBmb3IgQ2xvdWQgRGF0YXN0b3JlIFJQQ0Vycm9ycy4iIiIKICBpZiBpc2luc3RhbmNlKGV4Y2VwdGlvbiwgUlBDRXJyb3IpOgogICAgZXJyX2NvZGUgPSBleGNlcHRpb24uY29kZQogICAgIyBUT0RPKEJFQU0tMjE1Nik6IHB1dCB0aGVzZSBjb2RlcyBpbiBhIGdsb2JhbCBsaXN0IGFuZCB1c2UgdGhhdCBpbnN0ZWFkLgogICAgIyBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vZGF0YXN0b3JlL2RvY3MvY29uY2VwdHMvZXJyb3JzI2Vycm9yX2NvZGVzCiAgICByZXR1cm4gZXJyX2NvZGUgaW4gWwogICAgICAgIGNvZGVfcGIyLkFCT1JURUQsCiAgICAgICAgY29kZV9wYjIuREVBRExJTkVfRVhDRUVERUQsCiAgICAgICAgY29kZV9wYjIuSU5URVJOQUwsCiAgICAgICAgY29kZV9wYjIuVU5BVkFJTEFCTEUsCiAgICAgICAgY29kZV9wYjIuVU5LTk9XTiwKICAgIF0KCiAgaWYgaXNpbnN0YW5jZShleGNlcHRpb24sIFNvY2tldEVycm9yKToKICAgIHJldHVybiAoZXhjZXB0aW9uLmVycm5vID09IGVycm5vLkVDT05OUkVTRVQgb3IKICAgICAgICAgICAgZXhjZXB0aW9uLmVycm5vID09IGVycm5vLkVUSU1FRE9VVCkKCiAgcmV0dXJuIEZhbHNlCgoKZGVmIGZldGNoX2VudGl0aWVzKHByb2plY3QsIG5hbWVzcGFjZSwgcXVlcnksIGRhdGFzdG9yZSk6CiAgIiIiQSBoZWxwZXIgbWV0aG9kIHRvIGZldGNoIGVudGl0aWVzIGZyb20gQ2xvdWQgRGF0YXN0b3JlLgoKICBBcmdzOgogICAgcHJvamVjdDogUHJvamVjdCBJRAogICAgbmFtZXNwYWNlOiBDbG91ZCBEYXRhc3RvcmUgbmFtZXNwYWNlCiAgICBxdWVyeTogUXVlcnkgdG8gYmUgcmVhZCBmcm9tCiAgICBkYXRhc3RvcmU6IENsb3VkIERhdGFzdG9yZSBDbGllbnQKCiAgUmV0dXJuczoKICAgIEFuIGl0ZXJhdG9yIG9mIGVudGl0aWVzLgogICIiIgogIHJldHVybiBRdWVyeUl0ZXJhdG9yKHByb2plY3QsIG5hbWVzcGFjZSwgcXVlcnksIGRhdGFzdG9yZSkKCgpkZWYgaXNfa2V5X3ZhbGlkKGtleSk6CiAgIiIiUmV0dXJucyBUcnVlIGlmIGEgQ2xvdWQgRGF0YXN0b3JlIGtleSBpcyBjb21wbGV0ZS4KCiAgQSBrZXkgaXMgY29tcGxldGUgaWYgaXRzIGxhc3QgZWxlbWVudCBoYXMgZWl0aGVyIGFuIGlkIG9yIGEgbmFtZS4KICAiIiIKICBpZiBub3Qga2V5LnBhdGg6CiAgICByZXR1cm4gRmFsc2UKICByZXR1cm4ga2V5LnBhdGhbLTFdLkhhc0ZpZWxkKCdpZCcpIG9yIGtleS5wYXRoWy0xXS5IYXNGaWVsZCgnbmFtZScpCgoKZGVmIHdyaXRlX211dGF0aW9ucyhkYXRhc3RvcmUsIHByb2plY3QsIG11dGF0aW9ucywgdGhyb3R0bGVyLAogICAgICAgICAgICAgICAgICAgIHJwY19zdGF0c19jYWxsYmFjaz1Ob25lLCB0aHJvdHRsZV9kZWxheT0xKToKICAiIiJBIGhlbHBlciBmdW5jdGlvbiB0byB3cml0ZSBhIGJhdGNoIG9mIG11dGF0aW9ucyB0byBDbG91ZCBEYXRhc3RvcmUuCgogIElmIGEgY29tbWl0IGZhaWxzLCBpdCB3aWxsIGJlIHJldHJpZWQgdXB0byA1IHRpbWVzLiBBbGwgbXV0YXRpb25zIGluIHRoZQogIGJhdGNoIHdpbGwgYmUgY29tbWl0dGVkIGFnYWluLCBldmVuIGlmIHRoZSBjb21taXQgd2FzIHBhcnRpYWxseSBzdWNjZXNzZnVsLgogIElmIHRoZSByZXRyeSBsaW1pdCBpcyBleGNlZWRlZCwgdGhlIGxhc3QgZXhjZXB0aW9uIGZyb20gQ2xvdWQgRGF0YXN0b3JlIHdpbGwKICBiZSByYWlzZWQuCgogIEFyZ3M6CiAgICBkYXRhc3RvcmU6IGdvb2dsZWRhdGFzdG9yZS5jb25uZWN0aW9uLkRhdGFzdG9yZQogICAgcHJvamVjdDogc3RyLCBwcm9qZWN0IGlkCiAgICBtdXRhdGlvbnM6IGxpc3Qgb2YgZ29vZ2xlLmNsb3VkLnByb3RvLmRhdGFzdG9yZS52MS5kYXRhc3RvcmVfcGIyLk11dGF0aW9uCiAgICBycGNfc3RhdHNfY2FsbGJhY2s6IGEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGFyZ3VtZW50cyBgc3VjY2Vzc2VzYCBhbmQKICAgICAgICBgZmFpbHVyZXNgIGFuZCBgdGhyb3R0bGVkX3NlY3NgOyB0aGlzIGlzIGNhbGxlZCB0byByZWNvcmQgc3VjY2Vzc2Z1bAogICAgICAgIGFuZCBmYWlsZWQgUlBDcyB0byBEYXRhc3RvcmUgYW5kIHRpbWUgc3BlbnQgd2FpdGluZyBmb3IgdGhyb3R0bGluZy4KICAgIHRocm90dGxlcjogQWRhcHRpdmVUaHJvdHRsZXIsIHRvIHVzZSB0byBzZWxlY3QgcmVxdWVzdHMgdG8gYmUgdGhyb3R0bGVkLgogICAgdGhyb3R0bGVfZGVsYXk6IGZsb2F0LCB0aW1lIGluIHNlY29uZHMgdG8gc2xlZXAgd2hlbiB0aHJvdHRsZWQuCgogIFJldHVybnMgYSB0dXBsZSBvZjoKICAgIENvbW1pdFJlc3BvbnNlLCB0aGUgcmVzcG9uc2UgZnJvbSBEYXRhc3RvcmU7CiAgICBpbnQsIHRoZSBsYXRlbmN5IG9mIHRoZSBzdWNjZXNzZnVsIFJQQyBpbiBtaWxsaXNlY29uZHMuCiAgIiIiCiAgY29tbWl0X3JlcXVlc3QgPSBkYXRhc3RvcmVfcGIyLkNvbW1pdFJlcXVlc3QoKQogIGNvbW1pdF9yZXF1ZXN0Lm1vZGUgPSBkYXRhc3RvcmVfcGIyLkNvbW1pdFJlcXVlc3QuTk9OX1RSQU5TQUNUSU9OQUwKICBjb21taXRfcmVxdWVzdC5wcm9qZWN0X2lkID0gcHJvamVjdAogIGZvciBtdXRhdGlvbiBpbiBtdXRhdGlvbnM6CiAgICBjb21taXRfcmVxdWVzdC5tdXRhdGlvbnMuYWRkKCkuQ29weUZyb20obXV0YXRpb24pCgogIEByZXRyeS53aXRoX2V4cG9uZW50aWFsX2JhY2tvZmYobnVtX3JldHJpZXM9NSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHJ5X2ZpbHRlcj1yZXRyeV9vbl9ycGNfZXJyb3IpCiAgZGVmIGNvbW1pdChyZXF1ZXN0KToKICAgICMgQ2xpZW50LXNpZGUgdGhyb3R0bGluZy4KICAgIHdoaWxlIHRocm90dGxlci50aHJvdHRsZV9yZXF1ZXN0KHRpbWUudGltZSgpKjEwMDApOgogICAgICBsb2dnaW5nLmluZm8oIkRlbGF5aW5nIHJlcXVlc3QgZm9yICVkcyBkdWUgdG8gcHJldmlvdXMgZmFpbHVyZXMiLAogICAgICAgICAgICAgICAgICAgdGhyb3R0bGVfZGVsYXkpCiAgICAgIHRpbWUuc2xlZXAodGhyb3R0bGVfZGVsYXkpCiAgICAgIHJwY19zdGF0c19jYWxsYmFjayh0aHJvdHRsZWRfc2Vjcz10aHJvdHRsZV9kZWxheSkKCiAgICB0cnk6CiAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQogICAgICByZXNwb25zZSA9IGRhdGFzdG9yZS5jb21taXQocmVxdWVzdCkKICAgICAgZW5kX3RpbWUgPSB0aW1lLnRpbWUoKQoKICAgICAgcnBjX3N0YXRzX2NhbGxiYWNrKHN1Y2Nlc3Nlcz0xKQogICAgICB0aHJvdHRsZXIuc3VjY2Vzc2Z1bF9yZXF1ZXN0KHN0YXJ0X3RpbWUqMTAwMCkKICAgICAgY29tbWl0X3RpbWVfbXMgPSBpbnQoKGVuZF90aW1lLXN0YXJ0X3RpbWUpKjEwMDApCiAgICAgIHJldHVybiByZXNwb25zZSwgY29tbWl0X3RpbWVfbXMKICAgIGV4Y2VwdCAoUlBDRXJyb3IsIFNvY2tldEVycm9yKToKICAgICAgaWYgcnBjX3N0YXRzX2NhbGxiYWNrOgogICAgICAgIHJwY19zdGF0c19jYWxsYmFjayhlcnJvcnM9MSkKICAgICAgcmFpc2UKCiAgcmVzcG9uc2UsIGNvbW1pdF90aW1lX21zID0gY29tbWl0KGNvbW1pdF9yZXF1ZXN0KQogIHJldHVybiByZXNwb25zZSwgY29tbWl0X3RpbWVfbXMKCgpkZWYgbWFrZV9sYXRlc3RfdGltZXN0YW1wX3F1ZXJ5KG5hbWVzcGFjZSk6CiAgIiIiTWFrZSBhIFF1ZXJ5IHRvIGZldGNoIHRoZSBsYXRlc3QgdGltZXN0YW1wIHN0YXRpc3RpY3MuIiIiCiAgcXVlcnkgPSBxdWVyeV9wYjIuUXVlcnkoKQogIGlmIG5hbWVzcGFjZSBpcyBOb25lOgogICAgcXVlcnkua2luZC5hZGQoKS5uYW1lID0gJ19fU3RhdF9Ub3RhbF9fJwogIGVsc2U6CiAgICBxdWVyeS5raW5kLmFkZCgpLm5hbWUgPSAnX19TdGF0X05zX1RvdGFsX18nCgogICMgRGVzY2VuZGluZyBvcmRlciBvZiBgdGltZXN0YW1wYAogIGRhdGFzdG9yZV9oZWxwZXIuYWRkX3Byb3BlcnR5X29yZGVycyhxdWVyeSwgIi10aW1lc3RhbXAiKQogICMgT25seSBnZXQgdGhlIGxhdGVzdCBlbnRpdHkKICBxdWVyeS5saW1pdC52YWx1ZSA9IDEKICByZXR1cm4gcXVlcnkKCgpkZWYgbWFrZV9raW5kX3N0YXRzX3F1ZXJ5KG5hbWVzcGFjZSwga2luZCwgbGF0ZXN0X3RpbWVzdGFtcCk6CiAgIiIiTWFrZSBhIFF1ZXJ5IHRvIGZldGNoIHRoZSBsYXRlc3Qga2luZCBzdGF0aXN0aWNzLiIiIgogIGtpbmRfc3RhdF9xdWVyeSA9IHF1ZXJ5X3BiMi5RdWVyeSgpCiAgaWYgbmFtZXNwYWNlIGlzIE5vbmU6CiAgICBraW5kX3N0YXRfcXVlcnkua2luZC5hZGQoKS5uYW1lID0gJ19fU3RhdF9LaW5kX18nCiAgZWxzZToKICAgIGtpbmRfc3RhdF9xdWVyeS5raW5kLmFkZCgpLm5hbWUgPSAnX19TdGF0X05zX0tpbmRfXycKCiAga2luZF9maWx0ZXIgPSBkYXRhc3RvcmVfaGVscGVyLnNldF9wcm9wZXJ0eV9maWx0ZXIoCiAgICAgIHF1ZXJ5X3BiMi5GaWx0ZXIoKSwgJ2tpbmRfbmFtZScsIFByb3BlcnR5RmlsdGVyLkVRVUFMLAogICAgICB1bmljb2RlKGtpbmQpKQogIHRpbWVzdGFtcF9maWx0ZXIgPSBkYXRhc3RvcmVfaGVscGVyLnNldF9wcm9wZXJ0eV9maWx0ZXIoCiAgICAgIHF1ZXJ5X3BiMi5GaWx0ZXIoKSwgJ3RpbWVzdGFtcCcsIFByb3BlcnR5RmlsdGVyLkVRVUFMLAogICAgICBsYXRlc3RfdGltZXN0YW1wKQoKICBkYXRhc3RvcmVfaGVscGVyLnNldF9jb21wb3NpdGVfZmlsdGVyKGtpbmRfc3RhdF9xdWVyeS5maWx0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wb3NpdGVGaWx0ZXIuQU5ELCBraW5kX2ZpbHRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcF9maWx0ZXIpCiAgcmV0dXJuIGtpbmRfc3RhdF9xdWVyeQoKCmNsYXNzIFF1ZXJ5SXRlcmF0b3Iob2JqZWN0KToKICAiIiJBIGl0ZXJhdG9yIGNsYXNzIGZvciBlbnRpdGllcyBvZiBhIGdpdmVuIHF1ZXJ5LgoKICBFbnRpdGllcyBhcmUgcmVhZCBpbiBiYXRjaGVzLiBSZXRyaWVzIG9uIGZhaWx1cmVzLgogICIiIgogICMgTWF4aW11bSBudW1iZXIgb2YgcmVzdWx0cyB0byByZXF1ZXN0IHBlciBxdWVyeS4KICBfQkFUQ0hfU0laRSA9IDUwMAoKICBkZWYgX19pbml0X18oc2VsZiwgcHJvamVjdCwgbmFtZXNwYWNlLCBxdWVyeSwgZGF0YXN0b3JlKToKICAgIHNlbGYuX3F1ZXJ5ID0gcXVlcnkKICAgIHNlbGYuX2RhdGFzdG9yZSA9IGRhdGFzdG9yZQogICAgc2VsZi5fcHJvamVjdCA9IHByb2plY3QKICAgIHNlbGYuX25hbWVzcGFjZSA9IG5hbWVzcGFjZQogICAgc2VsZi5fc3RhcnRfY3Vyc29yID0gTm9uZQogICAgc2VsZi5fbGltaXQgPSBzZWxmLl9xdWVyeS5saW1pdC52YWx1ZSBvciBzeXMubWF4c2l6ZQogICAgc2VsZi5fcmVxID0gbWFrZV9yZXF1ZXN0KHByb2plY3QsIG5hbWVzcGFjZSwgcXVlcnkpCgogIEByZXRyeS53aXRoX2V4cG9uZW50aWFsX2JhY2tvZmYobnVtX3JldHJpZXM9NSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHJ5X2ZpbHRlcj1yZXRyeV9vbl9ycGNfZXJyb3IpCiAgZGVmIF9uZXh0X2JhdGNoKHNlbGYpOgogICAgIiIiRmV0Y2hlcyB0aGUgbmV4dCBiYXRjaCBvZiBlbnRpdGllcy4iIiIKICAgIGlmIHNlbGYuX3N0YXJ0X2N1cnNvciBpcyBub3QgTm9uZToKICAgICAgc2VsZi5fcmVxLnF1ZXJ5LnN0YXJ0X2N1cnNvciA9IHNlbGYuX3N0YXJ0X2N1cnNvcgoKICAgICMgc2V0IGJhdGNoIHNpemUKICAgIHNlbGYuX3JlcS5xdWVyeS5saW1pdC52YWx1ZSA9IG1pbihzZWxmLl9CQVRDSF9TSVpFLCBzZWxmLl9saW1pdCkKICAgIHJlc3AgPSBzZWxmLl9kYXRhc3RvcmUucnVuX3F1ZXJ5KHNlbGYuX3JlcSkKICAgIHJldHVybiByZXNwCgogIGRlZiBfX2l0ZXJfXyhzZWxmKToKICAgIG1vcmVfcmVzdWx0cyA9IFRydWUKICAgIHdoaWxlIG1vcmVfcmVzdWx0czoKICAgICAgcmVzcCA9IHNlbGYuX25leHRfYmF0Y2goKQogICAgICBmb3IgZW50aXR5X3Jlc3VsdCBpbiByZXNwLmJhdGNoLmVudGl0eV9yZXN1bHRzOgogICAgICAgIHlpZWxkIGVudGl0eV9yZXN1bHQuZW50aXR5CgogICAgICBzZWxmLl9zdGFydF9jdXJzb3IgPSByZXNwLmJhdGNoLmVuZF9jdXJzb3IKICAgICAgbnVtX3Jlc3VsdHMgPSBsZW4ocmVzcC5iYXRjaC5lbnRpdHlfcmVzdWx0cykKICAgICAgc2VsZi5fbGltaXQgLT0gbnVtX3Jlc3VsdHMKCiAgICAgICMgQ2hlY2sgaWYgd2UgbmVlZCB0byByZWFkIG1vcmUgZW50aXRpZXMuCiAgICAgICMgVHJ1ZSB3aGVuIHF1ZXJ5IGxpbWl0IGhhc24ndCBiZWVuIHNhdGlzZmllZCBhbmQgdGhlcmUgYXJlIG1vcmUgZW50aXRpZXMKICAgICAgIyB0byBiZSByZWFkLiBUaGUgbGF0dGVyIGlzIHRydWUgaWYgdGhlIHJlc3BvbnNlIGhhcyBhIHN0YXR1cwogICAgICAjIGBOT1RfRklOSVNIRURgIG9yIGlmIHRoZSBudW1iZXIgb2YgcmVzdWx0cyByZWFkIGluIHRoZSBwcmV2aW91cyBiYXRjaAogICAgICAjIGlzIGVxdWFsIHRvIGBfQkFUQ0hfU0laRWAgKGFsbCBpbmRpY2F0aW9ucyB0aGF0IHRoZXJlIGlzIG1vcmUgZGF0YSBiZQogICAgICAjIHJlYWQpLgogICAgICBtb3JlX3Jlc3VsdHMgPSAoKHNlbGYuX2xpbWl0ID4gMCkgYW5kCiAgICAgICAgICAgICAgICAgICAgICAoKG51bV9yZXN1bHRzID09IHNlbGYuX0JBVENIX1NJWkUpIG9yCiAgICAgICAgICAgICAgICAgICAgICAgKHJlc3AuYmF0Y2gubW9yZV9yZXN1bHRzID09CiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5X3BiMi5RdWVyeVJlc3VsdEJhdGNoLk5PVF9GSU5JU0hFRCkpKQp9couDAAAoWA4AAABtYWtlX3BhcnRpdGlvblgDAAAAZGVmS4BLiIdYDgAAAGZldGNoX2VudGl0aWVzWAMAAABkZWZLn0ush1gMAAAAY29tcGFyZV9wYXRoWAMAAABkZWZLVUtvh1gMAAAAaXNfa2V5X3ZhbGlkWAMAAABkZWZLrku2h1gWAAAAd3JpdGVfbXV0YXRpb25zLmNvbW1pdFgDAAAAZGVmS9VL7IdYDAAAAG1ha2VfcmVxdWVzdFgDAAAAZGVmS3dLfodYDQAAAGdldF9kYXRhc3RvcmVYAwAAAGRlZktxS3WHWBUAAABtYWtlX2tpbmRfc3RhdHNfcXVlcnlYAwAAAGRlZk0AAU0TAYdYDgAAAGtleV9jb21wYXJhdG9yWAMAAABkZWZLOUtTh1gbAAAAbWFrZV9sYXRlc3RfdGltZXN0YW1wX3F1ZXJ5WAMAAABkZWZL8Uv+h1gWAAAAUXVlcnlJdGVyYXRvci5fX2luaXRfX1gDAAAAZGVmTR0BTSUBh1gNAAAAUXVlcnlJdGVyYXRvclgFAAAAY2xhc3NNFQFNRwGHWBkAAABRdWVyeUl0ZXJhdG9yLl9uZXh0X2JhdGNoWAMAAABkZWZNJgFNMQGHWBYAAABRdWVyeUl0ZXJhdG9yLl9faXRlcl9fWAMAAABkZWZNMgFNRwGHWA8AAAB3cml0ZV9tdXRhdGlvbnNYAwAAAGRlZku4S++HWBIAAAByZXRyeV9vbl9ycGNfZXJyb3JYAwAAAGRlZkuKS52HdX1yjIMAAChYDgAAAG1ha2VfcGFydGl0aW9uaoVdAABYDgAAAGZldGNoX2VudGl0aWVzaoVdAABYDAAAAGNvbXBhcmVfcGF0aGqFXQAAWAwAAABpc19rZXlfdmFsaWRqhV0AAFgMAAAAbWFrZV9yZXF1ZXN0aoVdAABYDQAAAGdldF9kYXRhc3RvcmVqhV0AAFgVAAAAbWFrZV9raW5kX3N0YXRzX3F1ZXJ5aoVdAABYDgAAAGtleV9jb21wYXJhdG9yaoVdAABYGwAAAG1ha2VfbGF0ZXN0X3RpbWVzdGFtcF9xdWVyeWqFXQAAWA0AAABRdWVyeUl0ZXJhdG9yaoVdAABYDwAAAHdyaXRlX211dGF0aW9uc2qFXQAAWBIAAAByZXRyeV9vbl9ycGNfZXJyb3JqhV0AAHVqfWkAAFgmAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS5oZWxwZXJyjYMAAIWBco6DAAB9co+DAABidFUUYXBhY2hlX2JlYW0ucGlwZWxpbmUoWA+XAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIlBpcGVsaW5lLCB0aGUgdG9wLWxldmVsIEJlYW0gb2JqZWN0LgoKQSBwaXBlbGluZSBob2xkcyBhIERBRyBvZiBkYXRhIHRyYW5zZm9ybXMuIENvbmNlcHR1YWxseSB0aGUgbm9kZXMgb2YgdGhlIERBRwphcmUgdHJhbnNmb3JtcyAoOmNsYXNzOmB+YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm1gIG9iamVjdHMpCmFuZCB0aGUgZWRnZXMgYXJlIHZhbHVlcyAobW9zdGx5IDpjbGFzczpgfmFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbmAKb2JqZWN0cykuIFRoZSB0cmFuc2Zvcm1zIHRha2UgYXMgaW5wdXRzIG9uZSBvciBtb3JlIFBWYWx1ZXMgYW5kIG91dHB1dCBvbmUgb3IKbW9yZSA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5wdmFsdWUuUFZhbHVlYCBzLgoKVGhlIHBpcGVsaW5lIG9mZmVycyBmdW5jdGlvbmFsaXR5IHRvIHRyYXZlcnNlIHRoZSBncmFwaC4gIFRoZSBhY3R1YWwgb3BlcmF0aW9uCnRvIGJlIGV4ZWN1dGVkIGZvciBlYWNoIG5vZGUgdmlzaXRlZCBpcyBzcGVjaWZpZWQgdGhyb3VnaCBhIHJ1bm5lciBvYmplY3QuCgpUeXBpY2FsIHVzYWdlOjoKCiAgIyBDcmVhdGUgYSBwaXBlbGluZSBvYmplY3QgdXNpbmcgYSBsb2NhbCBydW5uZXIgZm9yIGV4ZWN1dGlvbi4KICB3aXRoIGJlYW0uUGlwZWxpbmUoJ0RpcmVjdFJ1bm5lcicpIGFzIHA6CgogICAgIyBBZGQgdG8gdGhlIHBpcGVsaW5lIGEgIkNyZWF0ZSIgdHJhbnNmb3JtLiBXaGVuIGV4ZWN1dGVkIHRoaXMKICAgICMgdHJhbnNmb3JtIHdpbGwgcHJvZHVjZSBhIFBDb2xsZWN0aW9uIG9iamVjdCB3aXRoIHRoZSBzcGVjaWZpZWQgdmFsdWVzLgogICAgcGNvbGwgPSBwIHwgJ0NyZWF0ZScgPj4gYmVhbS5DcmVhdGUoWzEsIDIsIDNdKQoKICAgICMgQW5vdGhlciB0cmFuc2Zvcm0gY291bGQgYmUgYXBwbGllZCB0byBwY29sbCwgZS5nLiwgd3JpdGluZyB0byBhIHRleHQgZmlsZS4KICAgICMgRm9yIG90aGVyIHRyYW5zZm9ybXMsIHJlZmVyIHRvIHRyYW5zZm9ybXMvIGRpcmVjdG9yeS4KICAgIHBjb2xsIHwgJ1dyaXRlJyA+PiBiZWFtLmlvLldyaXRlVG9UZXh0KCcuL291dHB1dCcpCgogICAgIyBydW4oKSB3aWxsIGV4ZWN1dGUgdGhlIERBRyBzdG9yZWQgaW4gdGhlIHBpcGVsaW5lLiAgVGhlIGV4ZWN1dGlvbiBvZiB0aGUKICAgICMgbm9kZXMgdmlzaXRlZCBpcyBkb25lIHVzaW5nIHRoZSBzcGVjaWZpZWQgbG9jYWwgcnVubmVyLgoKIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGFiYwppbXBvcnQgbG9nZ2luZwppbXBvcnQgb3MKaW1wb3J0IHJlCmltcG9ydCBzaHV0aWwKaW1wb3J0IHRlbXBmaWxlCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdApmcm9tIGJ1aWx0aW5zIGltcG9ydCB6aXAKCmZyb20gZnV0dXJlLnV0aWxzIGltcG9ydCB3aXRoX21ldGFjbGFzcwoKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgcHZhbHVlCmZyb20gYXBhY2hlX2JlYW0uaW50ZXJuYWwgaW1wb3J0IHBpY2tsZXIKZnJvbSBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtcyBpbXBvcnQgRmlsZVN5c3RlbXMKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IERlYnVnT3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgUGlwZWxpbmVPcHRpb25zCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBTZXR1cE9wdGlvbnMKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IFN0YW5kYXJkT3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgVHlwZU9wdGlvbnMKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yIGltcG9ydCBQaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IKZnJvbSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eSBpbXBvcnQgY29tbW9uX3VybnMKZnJvbSBhcGFjaGVfYmVhbS5wdmFsdWUgaW1wb3J0IFBDb2xsZWN0aW9uCmZyb20gYXBhY2hlX2JlYW0ucHZhbHVlIGltcG9ydCBQRG9uZQpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMgaW1wb3J0IFBpcGVsaW5lUnVubmVyCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycyBpbXBvcnQgY3JlYXRlX3J1bm5lcgpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IHB0cmFuc2Zvcm0KZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMgaW1wb3J0IFR5cGVDaGVja0Vycm9yCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzIGltcG9ydCB0eXBlaGludHMKZnJvbSBhcGFjaGVfYmVhbS51dGlscy5hbm5vdGF0aW9ucyBpbXBvcnQgZGVwcmVjYXRlZAoKX19hbGxfXyA9IFsnUGlwZWxpbmUnLCAnUFRyYW5zZm9ybU92ZXJyaWRlJ10KCgpjbGFzcyBQaXBlbGluZShvYmplY3QpOgogICIiIkEgcGlwZWxpbmUgb2JqZWN0IHRoYXQgbWFuYWdlcyBhIERBRyBvZgogIDpjbGFzczpgfmFwYWNoZV9iZWFtLnB2YWx1ZS5QVmFsdWVgIHMgYW5kIHRoZWlyCiAgOmNsYXNzOmB+YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm1gIHMuCgogIENvbmNlcHR1YWxseSB0aGUgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucHZhbHVlLlBWYWx1ZWAgcyBhcmUgdGhlIERBRydzIG5vZGVzIGFuZAogIHRoZSA6Y2xhc3M6YH5hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybWAgcyBjb21wdXRpbmcKICB0aGUgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucHZhbHVlLlBWYWx1ZWAgcyBhcmUgdGhlIGVkZ2VzLgoKICBBbGwgdGhlIHRyYW5zZm9ybXMgYXBwbGllZCB0byB0aGUgcGlwZWxpbmUgbXVzdCBoYXZlIGRpc3RpbmN0IGZ1bGwgbGFiZWxzLgogIElmIHNhbWUgdHJhbnNmb3JtIGluc3RhbmNlIG5lZWRzIHRvIGJlIGFwcGxpZWQgdGhlbiB0aGUgcmlnaHQgc2hpZnQgb3BlcmF0b3IKICBzaG91bGQgYmUgdXNlZCB0byBkZXNpZ25hdGUgbmV3IG5hbWVzCiAgKGUuZy4gYGBpbnB1dCB8ICJsYWJlbCIgPj4gbXlfdHJhbmZvcm1gYCkuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBydW5uZXI9Tm9uZSwgb3B0aW9ucz1Ob25lLCBhcmd2PU5vbmUpOgogICAgIiIiSW5pdGlhbGl6ZSBhIHBpcGVsaW5lIG9iamVjdC4KCiAgICBBcmdzOgogICAgICBydW5uZXIgKH5hcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVJ1bm5lcik6IEFuIG9iamVjdCBvZgogICAgICAgIHR5cGUgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVSdW5uZXJgIHRoYXQgd2lsbCBiZQogICAgICAgIHVzZWQgdG8gZXhlY3V0ZSB0aGUgcGlwZWxpbmUuIEZvciByZWdpc3RlcmVkIHJ1bm5lcnMsIHRoZSBydW5uZXIgbmFtZQogICAgICAgIGNhbiBiZSBzcGVjaWZpZWQsIG90aGVyd2lzZSBhIHJ1bm5lciBvYmplY3QgbXVzdCBiZSBzdXBwbGllZC4KICAgICAgb3B0aW9ucyAofmFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5QaXBlbGluZU9wdGlvbnMpOgogICAgICAgIEEgY29uZmlndXJlZAogICAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5QaXBlbGluZU9wdGlvbnNgIG9iamVjdAogICAgICAgIGNvbnRhaW5pbmcgYXJndW1lbnRzIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIHJ1bm5pbmcgdGhlIEJlYW0gam9iLgogICAgICBhcmd2IChMaXN0W3N0cl0pOiBhIGxpc3Qgb2YgYXJndW1lbnRzIChzdWNoIGFzIDpkYXRhOmBzeXMuYXJndmApCiAgICAgICAgdG8gYmUgdXNlZCBmb3IgYnVpbGRpbmcgYQogICAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5QaXBlbGluZU9wdGlvbnNgIG9iamVjdC4KICAgICAgICBUaGlzIHdpbGwgb25seSBiZSB1c2VkIGlmIGFyZ3VtZW50ICoqb3B0aW9ucyoqIGlzIDpkYXRhOmBOb25lYC4KCiAgICBSYWlzZXM6CiAgICAgIH5leGNlcHRpb25zLlZhbHVlRXJyb3I6IGlmIGVpdGhlciB0aGUgcnVubmVyIG9yIG9wdGlvbnMgYXJndW1lbnQgaXMgbm90CiAgICAgICAgb2YgdGhlIGV4cGVjdGVkIHR5cGUuCiAgICAiIiIKICAgIGlmIG9wdGlvbnMgaXMgbm90IE5vbmU6CiAgICAgIGlmIGlzaW5zdGFuY2Uob3B0aW9ucywgUGlwZWxpbmVPcHRpb25zKToKICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwogICAgICBlbHNlOgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAgICdQYXJhbWV0ZXIgb3B0aW9ucywgaWYgc3BlY2lmaWVkLCBtdXN0IGJlIG9mIHR5cGUgUGlwZWxpbmVPcHRpb25zLiAnCiAgICAgICAgICAgICdSZWNlaXZlZCA6ICVyJyAlIG9wdGlvbnMpCiAgICBlbGlmIGFyZ3YgaXMgbm90IE5vbmU6CiAgICAgIGlmIGlzaW5zdGFuY2UoYXJndiwgbGlzdCk6CiAgICAgICAgc2VsZi5fb3B0aW9ucyA9IFBpcGVsaW5lT3B0aW9ucyhhcmd2KQogICAgICBlbHNlOgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAgICdQYXJhbWV0ZXIgYXJndiwgaWYgc3BlY2lmaWVkLCBtdXN0IGJlIGEgbGlzdC4gUmVjZWl2ZWQgOiAlcicKICAgICAgICAgICAgJSBhcmd2KQogICAgZWxzZToKICAgICAgc2VsZi5fb3B0aW9ucyA9IFBpcGVsaW5lT3B0aW9ucyhbXSkKCiAgICBGaWxlU3lzdGVtcy5zZXRfb3B0aW9ucyhzZWxmLl9vcHRpb25zKQoKICAgIGlmIHJ1bm5lciBpcyBOb25lOgogICAgICBydW5uZXIgPSBzZWxmLl9vcHRpb25zLnZpZXdfYXMoU3RhbmRhcmRPcHRpb25zKS5ydW5uZXIKICAgICAgaWYgcnVubmVyIGlzIE5vbmU6CiAgICAgICAgcnVubmVyID0gU3RhbmRhcmRPcHRpb25zLkRFRkFVTFRfUlVOTkVSCiAgICAgICAgbG9nZ2luZy5pbmZvKCgnTWlzc2luZyBwaXBlbGluZSBvcHRpb24gKHJ1bm5lcikuIEV4ZWN1dGluZyBwaXBlbGluZSAnCiAgICAgICAgICAgICAgICAgICAgICAndXNpbmcgdGhlIGRlZmF1bHQgcnVubmVyOiAlcy4nKSwgcnVubmVyKQoKICAgIGlmIGlzaW5zdGFuY2UocnVubmVyLCBzdHIpOgogICAgICBydW5uZXIgPSBjcmVhdGVfcnVubmVyKHJ1bm5lcikKICAgIGVsaWYgbm90IGlzaW5zdGFuY2UocnVubmVyLCBQaXBlbGluZVJ1bm5lcik6CiAgICAgIHJhaXNlIFR5cGVFcnJvcignUnVubmVyIG11c3QgYmUgYSBQaXBlbGluZVJ1bm5lciBvYmplY3Qgb3IgdGhlICcKICAgICAgICAgICAgICAgICAgICAgICduYW1lIG9mIGEgcmVnaXN0ZXJlZCBydW5uZXIuJykKCiAgICAjIFZhbGlkYXRlIHBpcGVsaW5lIG9wdGlvbnMKICAgIGVycm9ycyA9IFBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvcihzZWxmLl9vcHRpb25zLCBydW5uZXIpLnZhbGlkYXRlKCkKICAgIGlmIGVycm9yczoKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICdQaXBlbGluZSBoYXMgdmFsaWRhdGlvbnMgZXJyb3JzOiBcbicgKyAnXG4nLmpvaW4oZXJyb3JzKSkKCiAgICAjIHNldCBkZWZhdWx0IGV4cGVyaW1lbnRzIGZvciBwb3J0YWJsZSBydW5uZXIKICAgICMgKG5lZWRzIHRvIG9jY3VyIHByaW9yIHRvIHBpcGVsaW5lIGNvbnN0cnVjdGlvbikKICAgIGlmIHNlbGYuX29wdGlvbnMudmlld19hcyhTdGFuZGFyZE9wdGlvbnMpLnJ1bm5lciA9PSAnUG9ydGFibGVSdW5uZXInOgogICAgICBleHBlcmltZW50cyA9IChzZWxmLl9vcHRpb25zLnZpZXdfYXMoRGVidWdPcHRpb25zKS5leHBlcmltZW50cyBvciBbXSkKICAgICAgaWYgbm90ICdiZWFtX2ZuX2FwaScgaW4gZXhwZXJpbWVudHM6CiAgICAgICAgZXhwZXJpbWVudHMuYXBwZW5kKCdiZWFtX2ZuX2FwaScpCiAgICAgICAgc2VsZi5fb3B0aW9ucy52aWV3X2FzKERlYnVnT3B0aW9ucykuZXhwZXJpbWVudHMgPSBleHBlcmltZW50cwoKICAgICMgRGVmYXVsdCBydW5uZXIgdG8gYmUgdXNlZC4KICAgIHNlbGYucnVubmVyID0gcnVubmVyCiAgICAjIFN0YWNrIG9mIHRyYW5zZm9ybXMgZ2VuZXJhdGVkIGJ5IG5lc3RlZCBhcHBseSgpIGNhbGxzLiBUaGUgc3RhY2sgd2lsbAogICAgIyBjb250YWluIGEgcm9vdCBub2RlIGFzIGFuIGVuY2xvc2luZyAocGFyZW50KSBub2RlIGZvciB0b3AgdHJhbnNmb3Jtcy4KICAgIHNlbGYudHJhbnNmb3Jtc19zdGFjayA9IFtBcHBsaWVkUFRyYW5zZm9ybShOb25lLCBOb25lLCAnJywgTm9uZSldCiAgICAjIFNldCBvZiB0cmFuc2Zvcm0gbGFiZWxzIChmdWxsIGxhYmVscykgYXBwbGllZCB0byB0aGUgcGlwZWxpbmUuCiAgICAjIElmIGEgdHJhbnNmb3JtIGlzIGFwcGxpZWQgYW5kIHRoZSBmdWxsIGxhYmVsIGlzIGFscmVhZHkgaW4gdGhlIHNldAogICAgIyB0aGVuIHRoZSB0cmFuc2Zvcm0gd2lsbCBoYXZlIHRvIGJlIGNsb25lZCB3aXRoIGEgbmV3IGxhYmVsLgogICAgc2VsZi5hcHBsaWVkX2xhYmVscyA9IHNldCgpCgogIEBwcm9wZXJ0eQogIEBkZXByZWNhdGVkKHNpbmNlPSdGaXJzdCBzdGFibGUgcmVsZWFzZScsCiAgICAgICAgICAgICAgZXh0cmFfbWVzc2FnZT0nUmVmZXJlbmNlcyB0byA8cGlwZWxpbmU+Lm9wdGlvbnMnCiAgICAgICAgICAgICAgJyB3aWxsIG5vdCBiZSBzdXBwb3J0ZWQnKQogIGRlZiBvcHRpb25zKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX29wdGlvbnMKCiAgZGVmIF9jdXJyZW50X3RyYW5zZm9ybShzZWxmKToKICAgICIiIlJldHVybnMgdGhlIHRyYW5zZm9ybSBjdXJyZW50bHkgb24gdGhlIHRvcCBvZiB0aGUgc3RhY2suIiIiCiAgICByZXR1cm4gc2VsZi50cmFuc2Zvcm1zX3N0YWNrWy0xXQoKICBkZWYgX3Jvb3RfdHJhbnNmb3JtKHNlbGYpOgogICAgIiIiUmV0dXJucyB0aGUgcm9vdCB0cmFuc2Zvcm0gb2YgdGhlIHRyYW5zZm9ybSBzdGFjay4iIiIKICAgIHJldHVybiBzZWxmLnRyYW5zZm9ybXNfc3RhY2tbMF0KCiAgZGVmIF9yZW1vdmVfbGFiZWxzX3JlY3Vyc2l2ZWx5KHNlbGYsIGFwcGxpZWRfdHJhbnNmb3JtKToKICAgIGZvciBwYXJ0IGluIGFwcGxpZWRfdHJhbnNmb3JtLnBhcnRzOgogICAgICBpZiBwYXJ0LmZ1bGxfbGFiZWwgaW4gc2VsZi5hcHBsaWVkX2xhYmVsczoKICAgICAgICBzZWxmLmFwcGxpZWRfbGFiZWxzLnJlbW92ZShwYXJ0LmZ1bGxfbGFiZWwpCiAgICAgICAgc2VsZi5fcmVtb3ZlX2xhYmVsc19yZWN1cnNpdmVseShwYXJ0KQoKICBkZWYgX3JlcGxhY2Uoc2VsZiwgb3ZlcnJpZGUpOgoKICAgIGFzc2VydCBpc2luc3RhbmNlKG92ZXJyaWRlLCBQVHJhbnNmb3JtT3ZlcnJpZGUpCgogICAgb3V0cHV0X21hcCA9IHt9CiAgICBvdXRwdXRfcmVwbGFjZW1lbnRzID0ge30KICAgIGlucHV0X3JlcGxhY2VtZW50cyA9IHt9CiAgICBzaWRlX2lucHV0X3JlcGxhY2VtZW50cyA9IHt9CgogICAgY2xhc3MgVHJhbnNmb3JtVXBkYXRlcihQaXBlbGluZVZpc2l0b3IpOiAjIHB5bGludDogZGlzYWJsZT11c2VkLWJlZm9yZS1hc3NpZ25tZW50CiAgICAgICIiIiJBIHZpc2l0b3IgdGhhdCByZXBsYWNlcyB0aGUgbWF0Y2hpbmcgUFRyYW5zZm9ybXMuIiIiCgogICAgICBkZWYgX19pbml0X18oc2VsZiwgcGlwZWxpbmUpOgogICAgICAgIHNlbGYucGlwZWxpbmUgPSBwaXBlbGluZQoKICAgICAgZGVmIF9yZXBsYWNlX2lmX25lZWRlZChzZWxmLCBvcmlnaW5hbF90cmFuc2Zvcm1fbm9kZSk6CiAgICAgICAgaWYgb3ZlcnJpZGUubWF0Y2hlcyhvcmlnaW5hbF90cmFuc2Zvcm1fbm9kZSk6CiAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShvcmlnaW5hbF90cmFuc2Zvcm1fbm9kZSwgQXBwbGllZFBUcmFuc2Zvcm0pCiAgICAgICAgICByZXBsYWNlbWVudF90cmFuc2Zvcm0gPSBvdmVycmlkZS5nZXRfcmVwbGFjZW1lbnRfdHJhbnNmb3JtKAogICAgICAgICAgICAgIG9yaWdpbmFsX3RyYW5zZm9ybV9ub2RlLnRyYW5zZm9ybSkKICAgICAgICAgIGlmIHJlcGxhY2VtZW50X3RyYW5zZm9ybSBpcyBvcmlnaW5hbF90cmFuc2Zvcm1fbm9kZS50cmFuc2Zvcm06CiAgICAgICAgICAgIHJldHVybgoKICAgICAgICAgIHJlcGxhY2VtZW50X3RyYW5zZm9ybV9ub2RlID0gQXBwbGllZFBUcmFuc2Zvcm0oCiAgICAgICAgICAgICAgb3JpZ2luYWxfdHJhbnNmb3JtX25vZGUucGFyZW50LCByZXBsYWNlbWVudF90cmFuc2Zvcm0sCiAgICAgICAgICAgICAgb3JpZ2luYWxfdHJhbnNmb3JtX25vZGUuZnVsbF9sYWJlbCwKICAgICAgICAgICAgICBvcmlnaW5hbF90cmFuc2Zvcm1fbm9kZS5pbnB1dHMpCgogICAgICAgICAgIyBUcmFuc2Zvcm0gZXhlY3V0aW9uIGNvdWxkIGRlcGVuZCBvbiBvcmRlciBpbiB3aGljaCBub2RlcyBhcmUKICAgICAgICAgICMgY29uc2lkZXJlZC4gSGVuY2Ugd2UgaW5zZXJ0IHRoZSByZXBsYWNlbWVudCB0cmFuc2Zvcm0gbm9kZSB0byBzYW1lCiAgICAgICAgICAjIGluZGV4IGFzIHRoZSBvcmlnaW5hbCB0cmFuc2Zvcm0gbm9kZS4gTm90ZSB0aGF0IHRoaXMgb3BlcmF0aW9uCiAgICAgICAgICAjIHJlbW92ZXMgdGhlIG9yaWdpbmFsIHRyYW5zZm9ybSBub2RlLgogICAgICAgICAgaWYgb3JpZ2luYWxfdHJhbnNmb3JtX25vZGUucGFyZW50OgogICAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShvcmlnaW5hbF90cmFuc2Zvcm1fbm9kZS5wYXJlbnQsIEFwcGxpZWRQVHJhbnNmb3JtKQogICAgICAgICAgICBwYXJlbnRfcGFydHMgPSBvcmlnaW5hbF90cmFuc2Zvcm1fbm9kZS5wYXJlbnQucGFydHMKICAgICAgICAgICAgcGFyZW50X3BhcnRzW3BhcmVudF9wYXJ0cy5pbmRleChvcmlnaW5hbF90cmFuc2Zvcm1fbm9kZSldID0gKAogICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRfdHJhbnNmb3JtX25vZGUpCiAgICAgICAgICBlbHNlOgogICAgICAgICAgICAjIE9yaWdpbmFsIHRyYW5zZm9ybSBoYXMgdG8gYmUgYSByb290LgogICAgICAgICAgICByb290cyA9IHNlbGYucGlwZWxpbmUudHJhbnNmb3Jtc19zdGFja1swXS5wYXJ0cwogICAgICAgICAgICBhc3NlcnQgb3JpZ2luYWxfdHJhbnNmb3JtX25vZGUgaW4gcm9vdHMKICAgICAgICAgICAgcm9vdHNbcm9vdHMuaW5kZXgob3JpZ2luYWxfdHJhbnNmb3JtX25vZGUpXSA9ICgKICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50X3RyYW5zZm9ybV9ub2RlKQoKICAgICAgICAgIGlucHV0cyA9IHJlcGxhY2VtZW50X3RyYW5zZm9ybV9ub2RlLmlucHV0cwogICAgICAgICAgIyBUT0RPOiAgU3VwcG9ydCByZXBsYWNpbmcgUFRyYW5zZm9ybXMgd2l0aCBtdWx0aXBsZSBpbnB1dHMuCiAgICAgICAgICBpZiBsZW4oaW5wdXRzKSA+IDE6CiAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoCiAgICAgICAgICAgICAgICAnUFRyYW5zZm9ybSBvdmVycmlkaW5nIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBQVHJhbnNmb3JtcyB0aGF0ICcKICAgICAgICAgICAgICAgICdoYXZlIGEgc2luZ2xlIGlucHV0LiBUcmllZCB0byByZXBsYWNlIGlucHV0IG9mICcKICAgICAgICAgICAgICAgICdBcHBsaWVkUFRyYW5zZm9ybSAlciB0aGF0IGhhcyAlZCBpbnB1dHMnCiAgICAgICAgICAgICAgICAlIG9yaWdpbmFsX3RyYW5zZm9ybV9ub2RlLCBsZW4oaW5wdXRzKSkKICAgICAgICAgIGVsaWYgbGVuKGlucHV0cykgPT0gMToKICAgICAgICAgICAgaW5wdXRfbm9kZSA9IGlucHV0c1swXQogICAgICAgICAgZWxpZiBsZW4oaW5wdXRzKSA9PSAwOgogICAgICAgICAgICBpbnB1dF9ub2RlID0gcHZhbHVlLlBCZWdpbihzZWxmKQoKICAgICAgICAgICMgV2UgaGF2ZSB0byBhZGQgdGhlIG5ldyBBcHBsaWVkVHJhbnNmb3JtIHRvIHRoZSBzdGFjayBiZWZvcmUgZXhwYW5kKCkKICAgICAgICAgICMgYW5kIHBvcCBpdCBvdXQgbGF0ZXIgdG8gbWFrZSBzdXJlIHRoYXQgcGFydHMgZ2V0IGFkZGVkIGNvcnJlY3RseS4KICAgICAgICAgIHNlbGYucGlwZWxpbmUudHJhbnNmb3Jtc19zdGFjay5hcHBlbmQocmVwbGFjZW1lbnRfdHJhbnNmb3JtX25vZGUpCgogICAgICAgICAgIyBLZWVwaW5nIHRoZSBzYW1lIGxhYmVsIGZvciB0aGUgcmVwbGFjZWQgbm9kZSBidXQgcmVjdXJzaXZlbHkKICAgICAgICAgICMgcmVtb3ZpbmcgbGFiZWxzIG9mIGNoaWxkIHRyYW5zZm9ybXMgb2Ygb3JpZ2luYWwgdHJhbnNmb3JtIHNpbmNlIHRoZXkKICAgICAgICAgICMgd2lsbCBiZSByZXBsYWNlZCBkdXJpbmcgdGhlIGV4cGFuZCBiZWxvdy4gVGhpcyBpcyBuZWVkZWQgaW4gY2FzZQogICAgICAgICAgIyB0aGUgcmVwbGFjZW1lbnQgY29udGFpbnMgY2hpbGRyZW4gdGhhdCBoYXZlIGxhYmVscyB0aGF0IGNvbmZsaWN0cwogICAgICAgICAgIyB3aXRoIGxhYmVscyBvZiB0aGUgY2hpbGRyZW4gb2YgdGhlIG9yaWdpbmFsLgogICAgICAgICAgc2VsZi5waXBlbGluZS5fcmVtb3ZlX2xhYmVsc19yZWN1cnNpdmVseShvcmlnaW5hbF90cmFuc2Zvcm1fbm9kZSkKCiAgICAgICAgICBuZXdfb3V0cHV0ID0gcmVwbGFjZW1lbnRfdHJhbnNmb3JtLmV4cGFuZChpbnB1dF9ub2RlKQoKICAgICAgICAgIG5ld19vdXRwdXQuZWxlbWVudF90eXBlID0gTm9uZQogICAgICAgICAgc2VsZi5waXBlbGluZS5faW5mZXJfcmVzdWx0X3R5cGUocmVwbGFjZW1lbnRfdHJhbnNmb3JtLCBpbnB1dHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfb3V0cHV0KQoKICAgICAgICAgIHJlcGxhY2VtZW50X3RyYW5zZm9ybV9ub2RlLmFkZF9vdXRwdXQobmV3X291dHB1dCkKICAgICAgICAgIGlmIG5vdCBuZXdfb3V0cHV0LnByb2R1Y2VyOgogICAgICAgICAgICBuZXdfb3V0cHV0LnByb2R1Y2VyID0gcmVwbGFjZW1lbnRfdHJhbnNmb3JtX25vZGUKCiAgICAgICAgICAjIFdlIG9ubHkgc3VwcG9ydCByZXBsYWNpbmcgdHJhbnNmb3JtcyB3aXRoIGEgc2luZ2xlIG91dHB1dCB3aXRoCiAgICAgICAgICAjIGFub3RoZXIgdHJhbnNmb3JtIHRoYXQgcHJvZHVjZXMgYSBzaW5nbGUgb3V0cHV0LgogICAgICAgICAgIyBUT0RPOiBTdXBwb3J0IHJlcGxhY2luZyBQVHJhbnNmb3JtcyB3aXRoIG11bHRpcGxlIG91dHB1dHMuCiAgICAgICAgICBpZiAobGVuKG9yaWdpbmFsX3RyYW5zZm9ybV9ub2RlLm91dHB1dHMpID4gMSBvcgogICAgICAgICAgICAgIG5vdCBpc2luc3RhbmNlKG9yaWdpbmFsX3RyYW5zZm9ybV9ub2RlLm91dHB1dHNbTm9uZV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFBDb2xsZWN0aW9uLCBQRG9uZSkpIG9yCiAgICAgICAgICAgICAgbm90IGlzaW5zdGFuY2UobmV3X291dHB1dCwgKFBDb2xsZWN0aW9uLCBQRG9uZSkpKToKICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigKICAgICAgICAgICAgICAgICdQVHJhbnNmb3JtIG92ZXJyaWRpbmcgaXMgb25seSBzdXBwb3J0ZWQgZm9yIFBUcmFuc2Zvcm1zIHRoYXQgJwogICAgICAgICAgICAgICAgJ2hhdmUgYSBzaW5nbGUgb3V0cHV0LiBUcmllZCB0byByZXBsYWNlIG91dHB1dCBvZiAnCiAgICAgICAgICAgICAgICAnQXBwbGllZFBUcmFuc2Zvcm0gJXIgd2l0aCAlci4nCiAgICAgICAgICAgICAgICAlIChvcmlnaW5hbF90cmFuc2Zvcm1fbm9kZSwgbmV3X291dHB1dCkpCgogICAgICAgICAgIyBSZWNvcmRpbmcgdXBkYXRlZCBvdXRwdXRzLiBUaGlzIGNhbm5vdCBiZSBkb25lIGluIHRoZSBzYW1lIHZpc2l0b3IKICAgICAgICAgICMgc2luY2UgaWYgd2UgZHluYW1pY2FsbHkgdXBkYXRlIG91dHB1dCB0eXBlIGhlcmUsIHdlJ2xsIHJ1biBpbnRvCiAgICAgICAgICAjIGVycm9ycyB3aGVuIHZpc2l0aW5nIGNoaWxkIG5vZGVzLgogICAgICAgICAgb3V0cHV0X21hcFtvcmlnaW5hbF90cmFuc2Zvcm1fbm9kZS5vdXRwdXRzW05vbmVdXSA9IG5ld19vdXRwdXQKCiAgICAgICAgICBzZWxmLnBpcGVsaW5lLnRyYW5zZm9ybXNfc3RhY2sucG9wKCkKCiAgICAgIGRlZiBlbnRlcl9jb21wb3NpdGVfdHJhbnNmb3JtKHNlbGYsIHRyYW5zZm9ybV9ub2RlKToKICAgICAgICBzZWxmLl9yZXBsYWNlX2lmX25lZWRlZCh0cmFuc2Zvcm1fbm9kZSkKCiAgICAgIGRlZiB2aXNpdF90cmFuc2Zvcm0oc2VsZiwgdHJhbnNmb3JtX25vZGUpOgogICAgICAgIHNlbGYuX3JlcGxhY2VfaWZfbmVlZGVkKHRyYW5zZm9ybV9ub2RlKQoKICAgIHNlbGYudmlzaXQoVHJhbnNmb3JtVXBkYXRlcihzZWxmKSkKCiAgICAjIEFkanVzdGluZyBpbnB1dHMgYW5kIG91dHB1dHMKICAgIGNsYXNzIElucHV0T3V0cHV0VXBkYXRlcihQaXBlbGluZVZpc2l0b3IpOiAjIHB5bGludDogZGlzYWJsZT11c2VkLWJlZm9yZS1hc3NpZ25tZW50CiAgICAgICIiIiJBIHZpc2l0b3IgdGhhdCByZWNvcmRzIGlucHV0IGFuZCBvdXRwdXQgdmFsdWVzIHRvIGJlIHJlcGxhY2VkLgoKICAgICAgSW5wdXQgYW5kIG91dHB1dCB2YWx1ZXMgdGhhdCBzaG91bGQgYmUgdXBkYXRlZCBhcmUgcmVjb3JkZWQgaW4gbWFwcwogICAgICBpbnB1dF9yZXBsYWNlbWVudHMgYW5kIG91dHB1dF9yZXBsYWNlbWVudHMgcmVzcGVjdGl2ZWx5LgoKICAgICAgV2UgY2Fubm90IHVwZGF0ZSBpbnB1dCBhbmQgb3V0cHV0IHZhbHVlcyB3aGlsZSB2aXNpdGluZyBzaW5jZSB0aGF0IHJlc3VsdHMKICAgICAgaW4gdmFsaWRhdGlvbiBlcnJvcnMuCiAgICAgICIiIgoKICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBpcGVsaW5lKToKICAgICAgICBzZWxmLnBpcGVsaW5lID0gcGlwZWxpbmUKCiAgICAgIGRlZiBlbnRlcl9jb21wb3NpdGVfdHJhbnNmb3JtKHNlbGYsIHRyYW5zZm9ybV9ub2RlKToKICAgICAgICBzZWxmLnZpc2l0X3RyYW5zZm9ybSh0cmFuc2Zvcm1fbm9kZSkKCiAgICAgIGRlZiB2aXNpdF90cmFuc2Zvcm0oc2VsZiwgdHJhbnNmb3JtX25vZGUpOgogICAgICAgIGlmIChOb25lIGluIHRyYW5zZm9ybV9ub2RlLm91dHB1dHMgYW5kCiAgICAgICAgICAgIHRyYW5zZm9ybV9ub2RlLm91dHB1dHNbTm9uZV0gaW4gb3V0cHV0X21hcCk6CiAgICAgICAgICBvdXRwdXRfcmVwbGFjZW1lbnRzW3RyYW5zZm9ybV9ub2RlXSA9ICgKICAgICAgICAgICAgICBvdXRwdXRfbWFwW3RyYW5zZm9ybV9ub2RlLm91dHB1dHNbTm9uZV1dKQoKICAgICAgICByZXBsYWNlX2lucHV0ID0gRmFsc2UKICAgICAgICBmb3IgaW5wdXQgaW4gdHJhbnNmb3JtX25vZGUuaW5wdXRzOgogICAgICAgICAgaWYgaW5wdXQgaW4gb3V0cHV0X21hcDoKICAgICAgICAgICAgcmVwbGFjZV9pbnB1dCA9IFRydWUKICAgICAgICAgICAgYnJlYWsKCiAgICAgICAgcmVwbGFjZV9zaWRlX2lucHV0cyA9IEZhbHNlCiAgICAgICAgZm9yIHNpZGVfaW5wdXQgaW4gdHJhbnNmb3JtX25vZGUuc2lkZV9pbnB1dHM6CiAgICAgICAgICBpZiBzaWRlX2lucHV0LnB2YWx1ZSBpbiBvdXRwdXRfbWFwOgogICAgICAgICAgICByZXBsYWNlX3NpZGVfaW5wdXRzID0gVHJ1ZQogICAgICAgICAgICBicmVhawoKICAgICAgICBpZiByZXBsYWNlX2lucHV0OgogICAgICAgICAgbmV3X2lucHV0ID0gWwogICAgICAgICAgICAgIGlucHV0IGlmIG5vdCBpbnB1dCBpbiBvdXRwdXRfbWFwIGVsc2Ugb3V0cHV0X21hcFtpbnB1dF0KICAgICAgICAgICAgICBmb3IgaW5wdXQgaW4gdHJhbnNmb3JtX25vZGUuaW5wdXRzXQogICAgICAgICAgaW5wdXRfcmVwbGFjZW1lbnRzW3RyYW5zZm9ybV9ub2RlXSA9IG5ld19pbnB1dAoKICAgICAgICBpZiByZXBsYWNlX3NpZGVfaW5wdXRzOgogICAgICAgICAgbmV3X3NpZGVfaW5wdXRzID0gW10KICAgICAgICAgIGZvciBzaWRlX2lucHV0IGluIHRyYW5zZm9ybV9ub2RlLnNpZGVfaW5wdXRzOgogICAgICAgICAgICBpZiBzaWRlX2lucHV0LnB2YWx1ZSBpbiBvdXRwdXRfbWFwOgogICAgICAgICAgICAgIHNpZGVfaW5wdXQucHZhbHVlID0gb3V0cHV0X21hcFtzaWRlX2lucHV0LnB2YWx1ZV0KICAgICAgICAgICAgICBuZXdfc2lkZV9pbnB1dHMuYXBwZW5kKHNpZGVfaW5wdXQpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgbmV3X3NpZGVfaW5wdXRzLmFwcGVuZChzaWRlX2lucHV0KQogICAgICAgICAgc2lkZV9pbnB1dF9yZXBsYWNlbWVudHNbdHJhbnNmb3JtX25vZGVdID0gbmV3X3NpZGVfaW5wdXRzCgogICAgc2VsZi52aXNpdChJbnB1dE91dHB1dFVwZGF0ZXIoc2VsZikpCgogICAgZm9yIHRyYW5zZm9ybSBpbiBvdXRwdXRfcmVwbGFjZW1lbnRzOgogICAgICB0cmFuc2Zvcm0ucmVwbGFjZV9vdXRwdXQob3V0cHV0X3JlcGxhY2VtZW50c1t0cmFuc2Zvcm1dKQoKICAgIGZvciB0cmFuc2Zvcm0gaW4gaW5wdXRfcmVwbGFjZW1lbnRzOgogICAgICB0cmFuc2Zvcm0uaW5wdXRzID0gaW5wdXRfcmVwbGFjZW1lbnRzW3RyYW5zZm9ybV0KCiAgICBmb3IgdHJhbnNmb3JtIGluIHNpZGVfaW5wdXRfcmVwbGFjZW1lbnRzOgogICAgICB0cmFuc2Zvcm0uc2lkZV9pbnB1dHMgPSBzaWRlX2lucHV0X3JlcGxhY2VtZW50c1t0cmFuc2Zvcm1dCgogIGRlZiBfY2hlY2tfcmVwbGFjZW1lbnQoc2VsZiwgb3ZlcnJpZGUpOgoKICAgIGNsYXNzIFJlcGxhY2VtZW50VmFsaWRhdG9yKFBpcGVsaW5lVmlzaXRvcik6CiAgICAgIGRlZiB2aXNpdF90cmFuc2Zvcm0oc2VsZiwgdHJhbnNmb3JtX25vZGUpOgogICAgICAgIGlmIG92ZXJyaWRlLm1hdGNoZXModHJhbnNmb3JtX25vZGUpOgogICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdUcmFuc2Zvcm0gbm9kZSAlciB3YXMgbm90IHJlcGxhY2VkIGFzIGV4cGVjdGVkLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIHRyYW5zZm9ybV9ub2RlKQoKICAgIHNlbGYudmlzaXQoUmVwbGFjZW1lbnRWYWxpZGF0b3IoKSkKCiAgZGVmIHJlcGxhY2VfYWxsKHNlbGYsIHJlcGxhY2VtZW50cyk6CiAgICAiIiIgRHluYW1pY2FsbHkgcmVwbGFjZXMgUFRyYW5zZm9ybXMgaW4gdGhlIGN1cnJlbnRseSBwb3B1bGF0ZWQgaGllcmFyY2h5LgoKICAgIEN1cnJlbnRseSB0aGlzIG9ubHkgd29ya3MgZm9yIHJlcGxhY2VtZW50cyB3aGVyZSBpbnB1dCBhbmQgb3V0cHV0IHR5cGVzCiAgICBhcmUgZXhhY3RseSB0aGUgc2FtZS4KCiAgICBUT0RPOiBVcGRhdGUgdGhpcyB0byBhbHNvIHdvcmsgZm9yIHRyYW5zZm9ybSBvdmVycmlkZXMgd2hlcmUgaW5wdXQgYW5kCiAgICBvdXRwdXQgdHlwZXMgYXJlIGRpZmZlcmVudC4KCiAgICBBcmdzOgogICAgICByZXBsYWNlbWVudHMgKExpc3RbfmFwYWNoZV9iZWFtLnBpcGVsaW5lLlBUcmFuc2Zvcm1PdmVycmlkZV0pOiBhIGxpc3Qgb2YKICAgICAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5waXBlbGluZS5QVHJhbnNmb3JtT3ZlcnJpZGVgIG9iamVjdHMuCiAgICAiIiIKICAgIGZvciBvdmVycmlkZSBpbiByZXBsYWNlbWVudHM6CiAgICAgIGFzc2VydCBpc2luc3RhbmNlKG92ZXJyaWRlLCBQVHJhbnNmb3JtT3ZlcnJpZGUpCiAgICAgIHNlbGYuX3JlcGxhY2Uob3ZlcnJpZGUpCgogICAgIyBDaGVja2luZyBpZiB0aGUgUFRyYW5zZm9ybXMgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSByZXBsYWNlZC4gVGhpcyB3aWxsCiAgICAjIHJlc3VsdCBpbiBhIGZhaWx1cmUgaWYgYSBQVHJhbnNmb3JtIHRoYXQgd2FzIHJlcGxhY2VkIGluIGEgZ2l2ZW4gb3ZlcnJpZGUKICAgICMgZ2V0cyByZS1hZGRlZCBpbiBhIHN1YnNlcXVlbnQgb3ZlcnJpZGUuIFRoaXMgaXMgbm90IGFsbG93ZWQgYW5kIG9yZGVyaW5nCiAgICAjIG9mIFBUcmFuc2Zvcm1PdmVycmlkZSBvYmplY3RzIGluICdyZXBsYWNlbWVudHMnIGlzIGltcG9ydGFudC4KICAgIGZvciBvdmVycmlkZSBpbiByZXBsYWNlbWVudHM6CiAgICAgIHNlbGYuX2NoZWNrX3JlcGxhY2VtZW50KG92ZXJyaWRlKQoKICBkZWYgcnVuKHNlbGYsIHRlc3RfcnVubmVyX2FwaT1UcnVlKToKICAgICIiIlJ1bnMgdGhlIHBpcGVsaW5lLiBSZXR1cm5zIHdoYXRldmVyIG91ciBydW5uZXIgcmV0dXJucyBhZnRlciBydW5uaW5nLiIiIgoKICAgICMgV2hlbiBwb3NzaWJsZSwgaW52b2tlIGEgcm91bmQgdHJpcCB0aHJvdWdoIHRoZSBydW5uZXIgQVBJLgogICAgaWYgdGVzdF9ydW5uZXJfYXBpIGFuZCBzZWxmLl92ZXJpZnlfcnVubmVyX2FwaV9jb21wYXRpYmxlKCk6CiAgICAgIHJldHVybiBQaXBlbGluZS5mcm9tX3J1bm5lcl9hcGkoCiAgICAgICAgICBzZWxmLnRvX3J1bm5lcl9hcGkodXNlX2Zha2VfY29kZXJzPVRydWUpLAogICAgICAgICAgc2VsZi5ydW5uZXIsCiAgICAgICAgICBzZWxmLl9vcHRpb25zKS5ydW4oRmFsc2UpCgogICAgaWYgc2VsZi5fb3B0aW9ucy52aWV3X2FzKFR5cGVPcHRpb25zKS5ydW50aW1lX3R5cGVfY2hlY2s6CiAgICAgIGZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzIGltcG9ydCB0eXBlY2hlY2sKICAgICAgc2VsZi52aXNpdCh0eXBlY2hlY2suVHlwZUNoZWNrVmlzaXRvcigpKQoKICAgIGlmIHNlbGYuX29wdGlvbnMudmlld19hcyhTZXR1cE9wdGlvbnMpLnNhdmVfbWFpbl9zZXNzaW9uOgogICAgICAjIElmIHRoaXMgb3B0aW9uIGlzIGNob3NlbiwgdmVyaWZ5IHdlIGNhbiBwaWNrbGUgdGhlIG1haW4gc2Vzc2lvbiBlYXJseS4KICAgICAgdG1wZGlyID0gdGVtcGZpbGUubWtkdGVtcCgpCiAgICAgIHRyeToKICAgICAgICBwaWNrbGVyLmR1bXBfc2Vzc2lvbihvcy5wYXRoLmpvaW4odG1wZGlyLCAnbWFpbl9zZXNzaW9uLnBpY2tsZScpKQogICAgICBmaW5hbGx5OgogICAgICAgIHNodXRpbC5ybXRyZWUodG1wZGlyKQogICAgcmV0dXJuIHNlbGYucnVubmVyLnJ1bl9waXBlbGluZShzZWxmLCBzZWxmLl9vcHRpb25zKQoKICBkZWYgX19lbnRlcl9fKHNlbGYpOgogICAgcmV0dXJuIHNlbGYKCiAgZGVmIF9fZXhpdF9fKHNlbGYsIGV4Y190eXBlLCBleGNfdmFsLCBleGNfdGIpOgogICAgaWYgbm90IGV4Y190eXBlOgogICAgICBzZWxmLnJ1bigpLndhaXRfdW50aWxfZmluaXNoKCkKCiAgZGVmIHZpc2l0KHNlbGYsIHZpc2l0b3IpOgogICAgIiIiVmlzaXRzIGRlcHRoLWZpcnN0IGV2ZXJ5IG5vZGUgb2YgYSBwaXBlbGluZSdzIERBRy4KCiAgICBSdW5uZXItaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlsOyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzCgogICAgQXJnczoKICAgICAgdmlzaXRvciAofmFwYWNoZV9iZWFtLnBpcGVsaW5lLlBpcGVsaW5lVmlzaXRvcik6CiAgICAgICAgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucGlwZWxpbmUuUGlwZWxpbmVWaXNpdG9yYCBvYmplY3Qgd2hvc2UgY2FsbGJhY2tzCiAgICAgICAgd2lsbCBiZSBjYWxsZWQgZm9yIGVhY2ggbm9kZSB2aXNpdGVkLiBTZWUKICAgICAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5waXBlbGluZS5QaXBlbGluZVZpc2l0b3JgIGNvbW1lbnRzLgoKICAgIFJhaXNlczoKICAgICAgfmV4Y2VwdGlvbnMuVHlwZUVycm9yOiBpZiBub2RlIGlzIHNwZWNpZmllZCBhbmQgaXMgbm90IGEKICAgICAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5wdmFsdWUuUFZhbHVlYC4KICAgICAgfmFwYWNoZV9iZWFtLmVycm9yLlBpcGVsaW5lRXJyb3I6IGlmIG5vZGUgaXMgc3BlY2lmaWVkIGFuZCBkb2VzIG5vdAogICAgICAgIGJlbG9uZyB0byB0aGlzIHBpcGVsaW5lIGluc3RhbmNlLgogICAgIiIiCgogICAgdmlzaXRlZCA9IHNldCgpCiAgICBzZWxmLl9yb290X3RyYW5zZm9ybSgpLnZpc2l0KHZpc2l0b3IsIHNlbGYsIHZpc2l0ZWQpCgogIGRlZiBhcHBseShzZWxmLCB0cmFuc2Zvcm0sIHB2YWx1ZWlzaD1Ob25lLCBsYWJlbD1Ob25lKToKICAgICIiIkFwcGxpZXMgYSBjdXN0b20gdHJhbnNmb3JtIHVzaW5nIHRoZSBwdmFsdWVpc2ggc3BlY2lmaWVkLgoKICAgIEFyZ3M6CiAgICAgIHRyYW5zZm9ybSAofmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtKTogdGhlCiAgICAgICAgOmNsYXNzOmB+YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm1gIHRvIGFwcGx5LgogICAgICBwdmFsdWVpc2ggKH5hcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb24pOiB0aGUgaW5wdXQgZm9yIHRoZQogICAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtYCAodHlwaWNhbGx5IGEKICAgICAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb25gKS4KICAgICAgbGFiZWwgKHN0cik6IGxhYmVsIG9mIHRoZQogICAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtYC4KCiAgICBSYWlzZXM6CiAgICAgIH5leGNlcHRpb25zLlR5cGVFcnJvcjogaWYgdGhlIHRyYW5zZm9ybSBvYmplY3QgZXh0cmFjdGVkIGZyb20gdGhlCiAgICAgICAgYXJndW1lbnQgbGlzdCBpcyBub3QgYQogICAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtYC4KICAgICAgfmV4Y2VwdGlvbnMuUnVudGltZUVycm9yOiBpZiB0aGUgdHJhbnNmb3JtIG9iamVjdCB3YXMgYWxyZWFkeSBhcHBsaWVkIHRvCiAgICAgICAgdGhpcyBwaXBlbGluZSBhbmQgbmVlZHMgdG8gYmUgY2xvbmVkIGluIG9yZGVyIHRvIGFwcGx5IGFnYWluLgogICAgIiIiCiAgICBpZiBpc2luc3RhbmNlKHRyYW5zZm9ybSwgcHRyYW5zZm9ybS5fTmFtZWRQVHJhbnNmb3JtKToKICAgICAgcmV0dXJuIHNlbGYuYXBwbHkodHJhbnNmb3JtLnRyYW5zZm9ybSwgcHZhbHVlaXNoLAogICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCBvciB0cmFuc2Zvcm0ubGFiZWwpCgogICAgaWYgbm90IGlzaW5zdGFuY2UodHJhbnNmb3JtLCBwdHJhbnNmb3JtLlBUcmFuc2Zvcm0pOgogICAgICByYWlzZSBUeXBlRXJyb3IoIkV4cGVjdGVkIGEgUFRyYW5zZm9ybSBvYmplY3QsIGdvdCAlcyIgJSB0cmFuc2Zvcm0pCgogICAgaWYgbGFiZWw6CiAgICAgICMgRml4IHNlbGYubGFiZWwgYXMgaXQgaXMgaW5zcGVjdGVkIGJ5IHNvbWUgUFRyYW5zZm9ybSBvcGVyYXRpb25zCiAgICAgICMgKGUuZy4gdG8gcHJvZHVjZSBlcnJvciBtZXNzYWdlcyBmb3IgdHlwZSBoaW50IHZpb2xhdGlvbnMpLgogICAgICB0cnk6CiAgICAgICAgb2xkX2xhYmVsLCB0cmFuc2Zvcm0ubGFiZWwgPSB0cmFuc2Zvcm0ubGFiZWwsIGxhYmVsCiAgICAgICAgcmV0dXJuIHNlbGYuYXBwbHkodHJhbnNmb3JtLCBwdmFsdWVpc2gpCiAgICAgIGZpbmFsbHk6CiAgICAgICAgdHJhbnNmb3JtLmxhYmVsID0gb2xkX2xhYmVsCgogICAgZnVsbF9sYWJlbCA9ICcvJy5qb2luKFtzZWxmLl9jdXJyZW50X3RyYW5zZm9ybSgpLmZ1bGxfbGFiZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsIG9yIHRyYW5zZm9ybS5sYWJlbF0pLmxzdHJpcCgnLycpCiAgICBpZiBmdWxsX2xhYmVsIGluIHNlbGYuYXBwbGllZF9sYWJlbHM6CiAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKICAgICAgICAgICdUcmFuc2Zvcm0gIiVzIiBkb2VzIG5vdCBoYXZlIGEgc3RhYmxlIHVuaXF1ZSBsYWJlbC4gJwogICAgICAgICAgJ1RoaXMgd2lsbCBwcmV2ZW50IHVwZGF0aW5nIG9mIHBpcGVsaW5lcy4gJwogICAgICAgICAgJ1RvIGFwcGx5IGEgdHJhbnNmb3JtIHdpdGggYSBzcGVjaWZpZWQgbGFiZWwgd3JpdGUgJwogICAgICAgICAgJ3B2YWx1ZSB8ICJsYWJlbCIgPj4gdHJhbnNmb3JtJwogICAgICAgICAgJSBmdWxsX2xhYmVsKQogICAgc2VsZi5hcHBsaWVkX2xhYmVscy5hZGQoZnVsbF9sYWJlbCkKCiAgICBwdmFsdWVpc2gsIGlucHV0cyA9IHRyYW5zZm9ybS5fZXh0cmFjdF9pbnB1dF9wdmFsdWVzKHB2YWx1ZWlzaCkKICAgIHRyeToKICAgICAgaW5wdXRzID0gdHVwbGUoaW5wdXRzKQogICAgICBmb3IgbGVhZl9pbnB1dCBpbiBpbnB1dHM6CiAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UobGVhZl9pbnB1dCwgcHZhbHVlLlBWYWx1ZSk6CiAgICAgICAgICByYWlzZSBUeXBlRXJyb3IKICAgIGV4Y2VwdCBUeXBlRXJyb3I6CiAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoCiAgICAgICAgICAnVW5hYmxlIHRvIGV4dHJhY3QgUFZhbHVlIGlucHV0cyBmcm9tICVzOyBlaXRoZXIgJXMgZG9lcyBub3QgYWNjZXB0ICcKICAgICAgICAgICdpbnB1dHMgb2YgdGhpcyBmb3JtYXQsIG9yIGl0IGRvZXMgbm90IHByb3Blcmx5IG92ZXJyaWRlICcKICAgICAgICAgICdfZXh0cmFjdF9pbnB1dF9wdmFsdWVzJyAlIChwdmFsdWVpc2gsIHRyYW5zZm9ybSkpCgogICAgY3VycmVudCA9IEFwcGxpZWRQVHJhbnNmb3JtKAogICAgICAgIHNlbGYuX2N1cnJlbnRfdHJhbnNmb3JtKCksIHRyYW5zZm9ybSwgZnVsbF9sYWJlbCwgaW5wdXRzKQogICAgc2VsZi5fY3VycmVudF90cmFuc2Zvcm0oKS5hZGRfcGFydChjdXJyZW50KQogICAgc2VsZi50cmFuc2Zvcm1zX3N0YWNrLmFwcGVuZChjdXJyZW50KQoKICAgIHR5cGVfb3B0aW9ucyA9IHNlbGYuX29wdGlvbnMudmlld19hcyhUeXBlT3B0aW9ucykKICAgIGlmIHR5cGVfb3B0aW9ucy5waXBlbGluZV90eXBlX2NoZWNrOgogICAgICB0cmFuc2Zvcm0udHlwZV9jaGVja19pbnB1dHMocHZhbHVlaXNoKQoKICAgIHB2YWx1ZWlzaF9yZXN1bHQgPSBzZWxmLnJ1bm5lci5hcHBseSh0cmFuc2Zvcm0sIHB2YWx1ZWlzaCwgc2VsZi5fb3B0aW9ucykKCiAgICBpZiB0eXBlX29wdGlvbnMgaXMgbm90IE5vbmUgYW5kIHR5cGVfb3B0aW9ucy5waXBlbGluZV90eXBlX2NoZWNrOgogICAgICB0cmFuc2Zvcm0udHlwZV9jaGVja19vdXRwdXRzKHB2YWx1ZWlzaF9yZXN1bHQpCgogICAgZm9yIHJlc3VsdCBpbiBwdHJhbnNmb3JtLmdldF9uZXN0ZWRfcHZhbHVlcyhwdmFsdWVpc2hfcmVzdWx0KToKICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UocmVzdWx0LCAocHZhbHVlLlBWYWx1ZSwgcHZhbHVlLkRvT3V0cHV0c1R1cGxlKSkKCiAgICAgICMgTWFrZSBzdXJlIHdlIHNldCB0aGUgcHJvZHVjZXIgb25seSBmb3IgYSBsZWFmIG5vZGUgaW4gdGhlIHRyYW5zZm9ybSBEQUcuCiAgICAgICMgVGhpcyB3YXkgd2UgcHJlc2VydmUgdGhlIGxhc3QgdHJhbnNmb3JtIG9mIGEgY29tcG9zaXRlIHRyYW5zZm9ybSBhcwogICAgICAjIGJlaW5nIHRoZSByZWFsIHByb2R1Y2VyIG9mIHRoZSByZXN1bHQuCiAgICAgIGlmIHJlc3VsdC5wcm9kdWNlciBpcyBOb25lOgogICAgICAgIHJlc3VsdC5wcm9kdWNlciA9IGN1cnJlbnQKCiAgICAgIHNlbGYuX2luZmVyX3Jlc3VsdF90eXBlKHRyYW5zZm9ybSwgaW5wdXRzLCByZXN1bHQpCgogICAgICBhc3NlcnQgaXNpbnN0YW5jZShyZXN1bHQucHJvZHVjZXIuaW5wdXRzLCB0dXBsZSkKICAgICAgY3VycmVudC5hZGRfb3V0cHV0KHJlc3VsdCkKCiAgICBpZiAodHlwZV9vcHRpb25zIGlzIG5vdCBOb25lIGFuZAogICAgICAgIHR5cGVfb3B0aW9ucy50eXBlX2NoZWNrX3N0cmljdG5lc3MgPT0gJ0FMTF9SRVFVSVJFRCcgYW5kCiAgICAgICAgdHJhbnNmb3JtLmdldF90eXBlX2hpbnRzKCkub3V0cHV0X3R5cGVzIGlzIE5vbmUpOgogICAgICBwdHJhbnNmb3JtX25hbWUgPSAnJXMoJXMpJyAlICh0cmFuc2Zvcm0uX19jbGFzc19fLl9fbmFtZV9fLCBmdWxsX2xhYmVsKQogICAgICByYWlzZSBUeXBlQ2hlY2tFcnJvcignUGlwZWxpbmUgdHlwZSBjaGVja2luZyBpcyBlbmFibGVkLCBob3dldmVyIG5vICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ291dHB1dCB0eXBlLWhpbnQgd2FzIGZvdW5kIGZvciB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnUFRyYW5zZm9ybSAlcycgJSBwdHJhbnNmb3JtX25hbWUpCgogICAgc2VsZi50cmFuc2Zvcm1zX3N0YWNrLnBvcCgpCiAgICByZXR1cm4gcHZhbHVlaXNoX3Jlc3VsdAoKICBkZWYgX2luZmVyX3Jlc3VsdF90eXBlKHNlbGYsIHRyYW5zZm9ybSwgaW5wdXRzLCByZXN1bHRfcGNvbGxlY3Rpb24pOgogICAgIyBUT0RPKHJvYmVydHdiKTogTXVsdGktaW5wdXQsIG11bHRpLW91dHB1dCBpbmZlcmVuY2UuCiAgICB0eXBlX29wdGlvbnMgPSBzZWxmLl9vcHRpb25zLnZpZXdfYXMoVHlwZU9wdGlvbnMpCiAgICBpZiAodHlwZV9vcHRpb25zIGlzIG5vdCBOb25lIGFuZCB0eXBlX29wdGlvbnMucGlwZWxpbmVfdHlwZV9jaGVjawogICAgICAgIGFuZCBpc2luc3RhbmNlKHJlc3VsdF9wY29sbGVjdGlvbiwgcHZhbHVlLlBDb2xsZWN0aW9uKQogICAgICAgIGFuZCAobm90IHJlc3VsdF9wY29sbGVjdGlvbi5lbGVtZW50X3R5cGUKICAgICAgICAgICAgICMgVE9ETyhyb2JlcnR3Yik6IElkZWFsbHkgd2UnZCBkbyBpbnRlcnNlY3Rpb24gaGVyZS4KICAgICAgICAgICAgIG9yIHJlc3VsdF9wY29sbGVjdGlvbi5lbGVtZW50X3R5cGUgPT0gdHlwZWhpbnRzLkFueSkpOgogICAgICBpbnB1dF9lbGVtZW50X3R5cGUgPSAoCiAgICAgICAgICBpbnB1dHNbMF0uZWxlbWVudF90eXBlCiAgICAgICAgICBpZiBsZW4oaW5wdXRzKSA9PSAxCiAgICAgICAgICBlbHNlIHR5cGVoaW50cy5BbnkpCiAgICAgIHR5cGVfaGludHMgPSB0cmFuc2Zvcm0uZ2V0X3R5cGVfaGludHMoKQogICAgICBkZWNsYXJlZF9vdXRwdXRfdHlwZSA9IHR5cGVfaGludHMuc2ltcGxlX291dHB1dF90eXBlKHRyYW5zZm9ybS5sYWJlbCkKICAgICAgaWYgZGVjbGFyZWRfb3V0cHV0X3R5cGU6CiAgICAgICAgaW5wdXRfdHlwZXMgPSB0eXBlX2hpbnRzLmlucHV0X3R5cGVzCiAgICAgICAgaWYgaW5wdXRfdHlwZXMgYW5kIGlucHV0X3R5cGVzWzBdOgogICAgICAgICAgZGVjbGFyZWRfaW5wdXRfdHlwZSA9IGlucHV0X3R5cGVzWzBdWzBdCiAgICAgICAgICByZXN1bHRfcGNvbGxlY3Rpb24uZWxlbWVudF90eXBlID0gdHlwZWhpbnRzLmJpbmRfdHlwZV92YXJpYWJsZXMoCiAgICAgICAgICAgICAgZGVjbGFyZWRfb3V0cHV0X3R5cGUsCiAgICAgICAgICAgICAgdHlwZWhpbnRzLm1hdGNoX3R5cGVfdmFyaWFibGVzKGRlY2xhcmVkX2lucHV0X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2VsZW1lbnRfdHlwZSkpCiAgICAgICAgZWxzZToKICAgICAgICAgIHJlc3VsdF9wY29sbGVjdGlvbi5lbGVtZW50X3R5cGUgPSBkZWNsYXJlZF9vdXRwdXRfdHlwZQogICAgICBlbHNlOgogICAgICAgIHJlc3VsdF9wY29sbGVjdGlvbi5lbGVtZW50X3R5cGUgPSB0cmFuc2Zvcm0uaW5mZXJfb3V0cHV0X3R5cGUoCiAgICAgICAgICAgIGlucHV0X2VsZW1lbnRfdHlwZSkKCiAgZGVmIF9fcmVkdWNlX18oc2VsZik6CiAgICAjIFNvbWUgdHJhbnNmb3JtcyBjb250YWluIGEgcmVmZXJlbmNlIHRvIHRoZWlyIGVuY2xvc2luZyBwaXBlbGluZSwKICAgICMgd2hpY2ggaW4gdHVybiByZWZlcmVuY2UgYWxsIG90aGVyIHRyYW5zZm9ybXMgKHJlc3VsdGluZyBpbiBxdWFkcmF0aWMKICAgICMgdGltZS9zcGFjZSB0byBwaWNrbGUgZWFjaCB0cmFuc2Zvcm0gaW5kaXZpZHVhbGx5KS4gIEFzIHdlIGRvbid0CiAgICAjIHJlcXVpcmUgcGlja2xlZCBwaXBlbGluZXMgdG8gYmUgZXhlY3V0YWJsZSwgYnJlYWsgdGhlIGNoYWluIGhlcmUuCiAgICByZXR1cm4gc3RyLCAoJ1BpY2tsZWQgcGlwZWxpbmUgc3R1Yi4nLCkKCiAgZGVmIF92ZXJpZnlfcnVubmVyX2FwaV9jb21wYXRpYmxlKHNlbGYpOgogICAgaWYgc2VsZi5fb3B0aW9ucy52aWV3X2FzKFR5cGVPcHRpb25zKS5ydW50aW1lX3R5cGVfY2hlY2s6CiAgICAgICMgVGhpcyBvcHRpb24gaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlIHJ1bm5lciBBUEkgYXMgaXQgcmVxdWlyZXMKICAgICAgIyB0aGUgcnVubmVyIHRvIGluc3BlY3Qgbm9uLXNlcmlhbGl6ZWQgaGludHMgb24gdGhlIHRyYW5zZm9ybQogICAgICAjIGl0c2VsZi4KICAgICAgcmV0dXJuIEZhbHNlCgogICAgY2xhc3MgVmlzaXRvcihQaXBlbGluZVZpc2l0b3IpOiAgIyBweWxpbnQ6IGRpc2FibGU9dXNlZC1iZWZvcmUtYXNzaWdubWVudAogICAgICBvayA9IFRydWUgICMgUmVhbGx5IGEgbm9ubG9jYWwuCgogICAgICBkZWYgZW50ZXJfY29tcG9zaXRlX3RyYW5zZm9ybShzZWxmLCB0cmFuc2Zvcm1fbm9kZSk6CiAgICAgICAgcGFzcwoKICAgICAgZGVmIHZpc2l0X3RyYW5zZm9ybShzZWxmLCB0cmFuc2Zvcm1fbm9kZSk6CiAgICAgICAgdHJ5OgogICAgICAgICAgIyBUcmFuc2Zvcm1zIG11c3QgYmUgcGlja2xhYmxlLgogICAgICAgICAgcGlja2xlci5sb2FkcyhwaWNrbGVyLmR1bXBzKHRyYW5zZm9ybV9ub2RlLnRyYW5zZm9ybSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVfdHJhY2U9RmFsc2UpLAogICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVfdHJhY2U9RmFsc2UpCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgIFZpc2l0b3Iub2sgPSBGYWxzZQoKICAgICAgZGVmIHZpc2l0X3ZhbHVlKHNlbGYsIHZhbHVlLCBfKToKICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBwdmFsdWUuUERvbmUpOgogICAgICAgICAgVmlzaXRvci5vayA9IEZhbHNlCgogICAgc2VsZi52aXNpdChWaXNpdG9yKCkpCiAgICByZXR1cm4gVmlzaXRvci5vawoKICBkZWYgdG9fcnVubmVyX2FwaSgKICAgICAgc2VsZiwgcmV0dXJuX2NvbnRleHQ9RmFsc2UsIGNvbnRleHQ9Tm9uZSwgdXNlX2Zha2VfY29kZXJzPUZhbHNlLAogICAgICBkZWZhdWx0X2Vudmlyb25tZW50PU5vbmUpOgogICAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLiIiIgogICAgZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzIGltcG9ydCBwaXBlbGluZV9jb250ZXh0CiAgICBmcm9tIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaSBpbXBvcnQgYmVhbV9ydW5uZXJfYXBpX3BiMgogICAgaWYgY29udGV4dCBpcyBOb25lOgogICAgICBjb250ZXh0ID0gcGlwZWxpbmVfY29udGV4dC5QaXBlbGluZUNvbnRleHQoCiAgICAgICAgICB1c2VfZmFrZV9jb2RlcnM9dXNlX2Zha2VfY29kZXJzLAogICAgICAgICAgZGVmYXVsdF9lbnZpcm9ubWVudD1kZWZhdWx0X2Vudmlyb25tZW50KQogICAgZWxpZiBkZWZhdWx0X2Vudmlyb25tZW50IGlzIG5vdCBOb25lOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgJ09ubHkgb25lIG9mIGNvbnRleHQgb3IgZGVmYXVsdF9lbnZpcm9ubWVudCBtYXkgYmUgc3BlY2lmaWNlZC4nKQoKICAgICMgVGhlIFJ1bm5lckFQSSBzcGVjIHJlcXVpcmVzIGNlcnRhaW4gdHJhbnNmb3JtcyB0byBoYXZlIEtWIGlucHV0cwogICAgIyAoYW5kIGNvcnJlc3BvbmRpbmcgb3V0cHV0cykuCiAgICAjIEN1cnJlbnRseSB3ZSBvbmx5IHVwZ3JhZGUgdG8gS1YgcGFpcnMuICBJZiB0aGVyZSBpcyBhIG5lZWQgZm9yIG1vcmUKICAgICMgZ2VuZXJhbCBzaGFwZXMsIHBvdGVudGlhbCBjb25mbGljdHMgd2lsbCBoYXZlIHRvIGJlIHJlc29sdmVkLgogICAgIyBXZSBhbHNvIG9ubHkgaGFuZGxlIHNpbmdsZS1pbnB1dCwgYW5kIChmb3IgZml4aW5nIHRoZSBvdXRwdXQpIHNpbmdsZQogICAgIyBvdXRwdXQsIHdoaWNoIGlzIHN1ZmZpY2llbnQuCiAgICBjbGFzcyBGb3JjZUt2SW5wdXRUeXBlcyhQaXBlbGluZVZpc2l0b3IpOgogICAgICBkZWYgZW50ZXJfY29tcG9zaXRlX3RyYW5zZm9ybShzZWxmLCB0cmFuc2Zvcm1fbm9kZSk6CiAgICAgICAgc2VsZi52aXNpdF90cmFuc2Zvcm0odHJhbnNmb3JtX25vZGUpCgogICAgICBkZWYgdmlzaXRfdHJhbnNmb3JtKHNlbGYsIHRyYW5zZm9ybV9ub2RlKToKICAgICAgICBpZiAodHJhbnNmb3JtX25vZGUudHJhbnNmb3JtCiAgICAgICAgICAgIGFuZCB0cmFuc2Zvcm1fbm9kZS50cmFuc2Zvcm0ucnVubmVyX2FwaV9yZXF1aXJlc19rZXllZF9pbnB1dCgpKToKICAgICAgICAgIHBjb2xsID0gdHJhbnNmb3JtX25vZGUuaW5wdXRzWzBdCiAgICAgICAgICBwY29sbC5lbGVtZW50X3R5cGUgPSB0eXBlaGludHMuY29lcmNlX3RvX2t2X3R5cGUoCiAgICAgICAgICAgICAgcGNvbGwuZWxlbWVudF90eXBlLCB0cmFuc2Zvcm1fbm9kZS5mdWxsX2xhYmVsKQogICAgICAgICAgaWYgbGVuKHRyYW5zZm9ybV9ub2RlLm91dHB1dHMpID09IDE6CiAgICAgICAgICAgICMgVGhlIHJ1bm5lciBvZnRlbiBoYXMgZXhwZWN0YXRpb25zIGFib3V0IHRoZSBvdXRwdXQgdHlwZXMgYXMgd2VsbC4KICAgICAgICAgICAgb3V0cHV0LCA9IHRyYW5zZm9ybV9ub2RlLm91dHB1dHMudmFsdWVzKCkKICAgICAgICAgICAgb3V0cHV0LmVsZW1lbnRfdHlwZSA9IHRyYW5zZm9ybV9ub2RlLnRyYW5zZm9ybS5pbmZlcl9vdXRwdXRfdHlwZSgKICAgICAgICAgICAgICAgIHBjb2xsLmVsZW1lbnRfdHlwZSkKCiAgICBzZWxmLnZpc2l0KEZvcmNlS3ZJbnB1dFR5cGVzKCkpCgogICAgIyBNdXRhdGVzIGNvbnRleHQ7IHBsYWNpbmcgaW5saW5lIHdvdWxkIGZvcmNlIGRlcGVuZGVuY2Ugb24KICAgICMgYXJndW1lbnQgZXZhbHVhdGlvbiBvcmRlci4KICAgIHJvb3RfdHJhbnNmb3JtX2lkID0gY29udGV4dC50cmFuc2Zvcm1zLmdldF9pZChzZWxmLl9yb290X3RyYW5zZm9ybSgpKQogICAgcHJvdG8gPSBiZWFtX3J1bm5lcl9hcGlfcGIyLlBpcGVsaW5lKAogICAgICAgIHJvb3RfdHJhbnNmb3JtX2lkcz1bcm9vdF90cmFuc2Zvcm1faWRdLAogICAgICAgIGNvbXBvbmVudHM9Y29udGV4dC50b19ydW5uZXJfYXBpKCkpCiAgICBwcm90by5jb21wb25lbnRzLnRyYW5zZm9ybXNbcm9vdF90cmFuc2Zvcm1faWRdLnVuaXF1ZV9uYW1lID0gKAogICAgICAgIHJvb3RfdHJhbnNmb3JtX2lkKQogICAgaWYgcmV0dXJuX2NvbnRleHQ6CiAgICAgIHJldHVybiBwcm90bywgY29udGV4dAogICAgZWxzZToKICAgICAgcmV0dXJuIHByb3RvCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZnJvbV9ydW5uZXJfYXBpKHByb3RvLCBydW5uZXIsIG9wdGlvbnMsIHJldHVybl9jb250ZXh0PUZhbHNlKToKICAgICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4iIiIKICAgIHAgPSBQaXBlbGluZShydW5uZXI9cnVubmVyLCBvcHRpb25zPW9wdGlvbnMpCiAgICBmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMgaW1wb3J0IHBpcGVsaW5lX2NvbnRleHQKICAgIGNvbnRleHQgPSBwaXBlbGluZV9jb250ZXh0LlBpcGVsaW5lQ29udGV4dChwcm90by5jb21wb25lbnRzKQogICAgcm9vdF90cmFuc2Zvcm1faWQsID0gcHJvdG8ucm9vdF90cmFuc2Zvcm1faWRzCiAgICBwLnRyYW5zZm9ybXNfc3RhY2sgPSBbCiAgICAgICAgY29udGV4dC50cmFuc2Zvcm1zLmdldF9ieV9pZChyb290X3RyYW5zZm9ybV9pZCldCiAgICAjIFRPRE8ocm9iZXJ0d2IpOiBUaGVzZSBhcmUgb25seSBuZWVkZWQgdG8gY29udGludWUgY29uc3RydWN0aW9uLiBPbWl0PwogICAgcC5hcHBsaWVkX2xhYmVscyA9IHNldChbCiAgICAgICAgdC51bmlxdWVfbmFtZSBmb3IgdCBpbiBwcm90by5jb21wb25lbnRzLnRyYW5zZm9ybXMudmFsdWVzKCldKQogICAgZm9yIGlkIGluIHByb3RvLmNvbXBvbmVudHMucGNvbGxlY3Rpb25zOgogICAgICBwY29sbGVjdGlvbiA9IGNvbnRleHQucGNvbGxlY3Rpb25zLmdldF9ieV9pZChpZCkKICAgICAgcGNvbGxlY3Rpb24ucGlwZWxpbmUgPSBwCiAgICAgIGlmIG5vdCBwY29sbGVjdGlvbi5wcm9kdWNlcjoKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdObyBwcm9kdWNlciBmb3IgJXMnICUgaWQpCgogICAgIyBJbmplY3QgUEJlZ2luIGlucHV0IHdoZXJlIG5lY2Vzc2FyeS4KICAgIGZyb20gYXBhY2hlX2JlYW0uaW8uaW9iYXNlIGltcG9ydCBSZWFkCiAgICBmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSBpbXBvcnQgQ3JlYXRlCiAgICBoYXNfcGJlZ2luID0gW1JlYWQsIENyZWF0ZV0KICAgIGZvciBpZCBpbiBwcm90by5jb21wb25lbnRzLnRyYW5zZm9ybXM6CiAgICAgIHRyYW5zZm9ybSA9IGNvbnRleHQudHJhbnNmb3Jtcy5nZXRfYnlfaWQoaWQpCiAgICAgIGlmIG5vdCB0cmFuc2Zvcm0uaW5wdXRzIGFuZCB0cmFuc2Zvcm0udHJhbnNmb3JtLl9fY2xhc3NfXyBpbiBoYXNfcGJlZ2luOgogICAgICAgIHRyYW5zZm9ybS5pbnB1dHMgPSAocHZhbHVlLlBCZWdpbihwKSwpCgogICAgaWYgcmV0dXJuX2NvbnRleHQ6CiAgICAgIHJldHVybiBwLCBjb250ZXh0CiAgICBlbHNlOgogICAgICByZXR1cm4gcAoKCmNsYXNzIFBpcGVsaW5lVmlzaXRvcihvYmplY3QpOgogICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgVmlzaXRvciBwYXR0ZXJuIGNsYXNzIHVzZWQgdG8gdHJhdmVyc2UgYSBEQUcgb2YgdHJhbnNmb3JtcwogICh1c2VkIGludGVybmFsbHkgYnkgUGlwZWxpbmUgZm9yIGJvb2tlZXBpbmcgcHVycG9zZXMpLgogICIiIgoKICBkZWYgdmlzaXRfdmFsdWUoc2VsZiwgdmFsdWUsIHByb2R1Y2VyX25vZGUpOgogICAgIiIiQ2FsbGJhY2sgZm9yIHZpc2l0aW5nIGEgUFZhbHVlIGluIHRoZSBwaXBlbGluZSBEQUcuCgogICAgQXJnczoKICAgICAgdmFsdWU6IFBWYWx1ZSB2aXNpdGVkICh0eXBpY2FsbHkgYSBQQ29sbGVjdGlvbiBpbnN0YW5jZSkuCiAgICAgIHByb2R1Y2VyX25vZGU6IEFwcGxpZWRQVHJhbnNmb3JtIG9iamVjdCB3aG9zZSB0cmFuc2Zvcm0gcHJvZHVjZWQgdGhlCiAgICAgICAgcHZhbHVlLgogICAgIiIiCiAgICBwYXNzCgogIGRlZiB2aXNpdF90cmFuc2Zvcm0oc2VsZiwgdHJhbnNmb3JtX25vZGUpOgogICAgIiIiQ2FsbGJhY2sgZm9yIHZpc2l0aW5nIGEgdHJhbnNmb3JtIGxlYWYgbm9kZSBpbiB0aGUgcGlwZWxpbmUgREFHLiIiIgogICAgcGFzcwoKICBkZWYgZW50ZXJfY29tcG9zaXRlX3RyYW5zZm9ybShzZWxmLCB0cmFuc2Zvcm1fbm9kZSk6CiAgICAiIiJDYWxsYmFjayBmb3IgZW50ZXJpbmcgdHJhdmVyc2FsIG9mIGEgY29tcG9zaXRlIHRyYW5zZm9ybSBub2RlLiIiIgogICAgcGFzcwoKICBkZWYgbGVhdmVfY29tcG9zaXRlX3RyYW5zZm9ybShzZWxmLCB0cmFuc2Zvcm1fbm9kZSk6CiAgICAiIiJDYWxsYmFjayBmb3IgbGVhdmluZyB0cmF2ZXJzYWwgb2YgYSBjb21wb3NpdGUgdHJhbnNmb3JtIG5vZGUuIiIiCiAgICBwYXNzCgoKY2xhc3MgQXBwbGllZFBUcmFuc2Zvcm0ob2JqZWN0KToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIEEgdHJhbnNmb3JtIG5vZGUgcmVwcmVzZW50aW5nIGFuIGluc3RhbmNlIG9mIGFwcGx5aW5nIGEgUFRyYW5zZm9ybQogICh1c2VkIGludGVybmFsbHkgYnkgUGlwZWxpbmUgZm9yIGJvb2tlZXBpbmcgcHVycG9zZXMpLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgcGFyZW50LCB0cmFuc2Zvcm0sIGZ1bGxfbGFiZWwsIGlucHV0cyk6CiAgICBzZWxmLnBhcmVudCA9IHBhcmVudAogICAgc2VsZi50cmFuc2Zvcm0gPSB0cmFuc2Zvcm0KICAgICMgTm90ZSB0aGF0IHdlIHdhbnQgdGhlIFBpcGVsaW5lVmlzaXRvciBjbGFzc2VzIHRvIHVzZSB0aGUgZnVsbF9sYWJlbCwKICAgICMgaW5wdXRzLCBzaWRlX2lucHV0cywgYW5kIG91dHB1dHMgZmllbGRzIGZyb20gdGhpcyBpbnN0YW5jZSBpbnN0ZWFkIG9mIHRoZQogICAgIyBvbmVzIG9mIHRoZSBQVHJhbnNmb3JtIGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCBpdC4gRG9pbmcgdGhpcyBwZXJtaXRzCiAgICAjIHJldXNpbmcgUFRyYW5zZm9ybSBpbnN0YW5jZXMgaW4gZGlmZmVyZW50IGNvbnRleHRzIChhcHBseSgpIGNhbGxzKSB3aXRob3V0CiAgICAjIGFueSBpbnRlcmZlcmVuY2UuIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgY29tcG9zaXRlIHRyYW5zZm9ybXMuCiAgICBzZWxmLmZ1bGxfbGFiZWwgPSBmdWxsX2xhYmVsCiAgICBzZWxmLmlucHV0cyA9IGlucHV0cyBvciAoKQogICAgc2VsZi5zaWRlX2lucHV0cyA9ICgpIGlmIHRyYW5zZm9ybSBpcyBOb25lIGVsc2UgdHVwbGUodHJhbnNmb3JtLnNpZGVfaW5wdXRzKQogICAgc2VsZi5vdXRwdXRzID0ge30KICAgIHNlbGYucGFydHMgPSBbXQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gIiVzKCVzLCAlcykiICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBzZWxmLmZ1bGxfbGFiZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUoc2VsZi50cmFuc2Zvcm0pLl9fbmFtZV9fKQoKICBkZWYgcmVwbGFjZV9vdXRwdXQoc2VsZiwgb3V0cHV0LCB0YWc9Tm9uZSk6CiAgICAiIiJSZXBsYWNlcyB0aGUgb3V0cHV0IGRlZmluZWQgYnkgdGhlIGdpdmVuIHRhZyB3aXRoIHRoZSBnaXZlbiBvdXRwdXQuCgogICAgQXJnczoKICAgICAgb3V0cHV0OiByZXBsYWNlbWVudCBvdXRwdXQKICAgICAgdGFnOiB0YWcgb2YgdGhlIG91dHB1dCB0byBiZSByZXBsYWNlZC4KICAgICIiIgogICAgaWYgaXNpbnN0YW5jZShvdXRwdXQsIHB2YWx1ZS5Eb091dHB1dHNUdXBsZSk6CiAgICAgIHNlbGYucmVwbGFjZV9vdXRwdXQob3V0cHV0W291dHB1dC5fbWFpbl90YWddKQogICAgZWxpZiBpc2luc3RhbmNlKG91dHB1dCwgcHZhbHVlLlBWYWx1ZSk6CiAgICAgIHNlbGYub3V0cHV0c1t0YWddID0gb3V0cHV0CiAgICBlbHNlOgogICAgICByYWlzZSBUeXBlRXJyb3IoIlVuZXhwZWN0ZWQgb3V0cHV0IHR5cGU6ICVzIiAlIG91dHB1dCkKCiAgZGVmIGFkZF9vdXRwdXQoc2VsZiwgb3V0cHV0LCB0YWc9Tm9uZSk6CiAgICBpZiBpc2luc3RhbmNlKG91dHB1dCwgcHZhbHVlLkRvT3V0cHV0c1R1cGxlKToKICAgICAgc2VsZi5hZGRfb3V0cHV0KG91dHB1dFtvdXRwdXQuX21haW5fdGFnXSkKICAgIGVsaWYgaXNpbnN0YW5jZShvdXRwdXQsIHB2YWx1ZS5QVmFsdWUpOgogICAgICAjIFRPRE8oQkVBTS0xODMzKTogUmVxdWlyZSB0YWdzIHdoZW4gY2FsbGluZyB0aGlzIG1ldGhvZC4KICAgICAgaWYgdGFnIGlzIE5vbmUgYW5kIE5vbmUgaW4gc2VsZi5vdXRwdXRzOgogICAgICAgIHRhZyA9IGxlbihzZWxmLm91dHB1dHMpCiAgICAgIGFzc2VydCB0YWcgbm90IGluIHNlbGYub3V0cHV0cwogICAgICBzZWxmLm91dHB1dHNbdGFnXSA9IG91dHB1dAogICAgZWxzZToKICAgICAgcmFpc2UgVHlwZUVycm9yKCJVbmV4cGVjdGVkIG91dHB1dCB0eXBlOiAlcyIgJSBvdXRwdXQpCgogIGRlZiBhZGRfcGFydChzZWxmLCBwYXJ0KToKICAgIGFzc2VydCBpc2luc3RhbmNlKHBhcnQsIEFwcGxpZWRQVHJhbnNmb3JtKQogICAgc2VsZi5wYXJ0cy5hcHBlbmQocGFydCkKCiAgZGVmIGlzX2NvbXBvc2l0ZShzZWxmKToKICAgICIiIlJldHVybnMgd2hldGhlciB0aGlzIGlzIGEgY29tcG9zaXRlIHRyYW5zZm9ybS4KCiAgICBBIGNvbXBvc2l0ZSB0cmFuc2Zvcm0gaGFzIHBhcnRzIChpbm5lciB0cmFuc2Zvcm1zKSBvciBpc24ndCB0aGUKICAgIHByb2R1Y2VyIGZvciBhbnkgb2YgaXRzIG91dHB1dHMuIChBbiBleGFtcGxlIG9mIGEgdHJhbnNmb3JtIHRoYXQKICAgIGlzIG5vdCBhIHByb2R1Y2VyIGlzIG9uZSB0aGF0IHJldHVybnMgaXRzIGlucHV0cyBpbnN0ZWFkLikKICAgICIiIgogICAgcmV0dXJuIGJvb2woc2VsZi5wYXJ0cykgb3IgYWxsKAogICAgICAgIHB2YWwucHJvZHVjZXIgaXMgbm90IHNlbGYgZm9yIHB2YWwgaW4gc2VsZi5vdXRwdXRzLnZhbHVlcygpKQoKICBkZWYgdmlzaXQoc2VsZiwgdmlzaXRvciwgcGlwZWxpbmUsIHZpc2l0ZWQpOgogICAgIiIiVmlzaXRzIGFsbCBub2RlcyByZWFjaGFibGUgZnJvbSB0aGUgY3VycmVudCBub2RlLiIiIgoKICAgIGZvciBwdmFsIGluIHNlbGYuaW5wdXRzOgogICAgICBpZiBwdmFsIG5vdCBpbiB2aXNpdGVkIGFuZCBub3QgaXNpbnN0YW5jZShwdmFsLCBwdmFsdWUuUEJlZ2luKToKICAgICAgICBhc3NlcnQgcHZhbC5wcm9kdWNlciBpcyBub3QgTm9uZQogICAgICAgIHB2YWwucHJvZHVjZXIudmlzaXQodmlzaXRvciwgcGlwZWxpbmUsIHZpc2l0ZWQpCiAgICAgICAgIyBUaGUgdmFsdWUgc2hvdWxkIGJlIHZpc2l0ZWQgbm93IHNpbmNlIHdlIHZpc2l0IG91dHB1dHMgdG9vLgogICAgICAgIGFzc2VydCBwdmFsIGluIHZpc2l0ZWQsIHB2YWwKCiAgICAjIFZpc2l0IHNpZGUgaW5wdXRzLgogICAgZm9yIHB2YWwgaW4gc2VsZi5zaWRlX2lucHV0czoKICAgICAgaWYgaXNpbnN0YW5jZShwdmFsLCBwdmFsdWUuQXNTaWRlSW5wdXQpIGFuZCBwdmFsLnB2YWx1ZSBub3QgaW4gdmlzaXRlZDoKICAgICAgICBwdmFsID0gcHZhbC5wdmFsdWUgICMgVW5wYWNrIG1hcmtlci1vYmplY3Qtd3JhcHBlZCBwdmFsdWUuCiAgICAgICAgYXNzZXJ0IHB2YWwucHJvZHVjZXIgaXMgbm90IE5vbmUKICAgICAgICBwdmFsLnByb2R1Y2VyLnZpc2l0KHZpc2l0b3IsIHBpcGVsaW5lLCB2aXNpdGVkKQogICAgICAgICMgVGhlIHZhbHVlIHNob3VsZCBiZSB2aXNpdGVkIG5vdyBzaW5jZSB3ZSB2aXNpdCBvdXRwdXRzIHRvby4KICAgICAgICBhc3NlcnQgcHZhbCBpbiB2aXNpdGVkCiAgICAgICAgIyBUT0RPKHNpbHZpdWMpOiBJcyB0aGVyZSBhIHdheSB0byBzaWduYWwgdGhhdCB3ZSBhcmUgdmlzaXRpbmcgYSBzaWRlCiAgICAgICAgIyB2YWx1ZT8gVGhlIGlzc3VlIGlzIHRoYXQgdGhlIHNhbWUgUFZhbHVlIGNhbiBiZSByZWFjaGFibGUgdGhyb3VnaAogICAgICAgICMgbXVsdGlwbGUgcGF0aHMgYW5kIHRoZXJlZm9yZSBpdCBpcyBub3QgZ3VhcmFudGVlZCB0aGF0IHRoZSB2YWx1ZQogICAgICAgICMgd2lsbCBiZSB2aXNpdGVkIGFzIGEgc2lkZSB2YWx1ZS4KCiAgICAjIFZpc2l0IGEgY29tcG9zaXRlIG9yIHByaW1pdGl2ZSB0cmFuc2Zvcm0uCiAgICBpZiBzZWxmLmlzX2NvbXBvc2l0ZSgpOgogICAgICB2aXNpdG9yLmVudGVyX2NvbXBvc2l0ZV90cmFuc2Zvcm0oc2VsZikKICAgICAgZm9yIHBhcnQgaW4gc2VsZi5wYXJ0czoKICAgICAgICBwYXJ0LnZpc2l0KHZpc2l0b3IsIHBpcGVsaW5lLCB2aXNpdGVkKQogICAgICB2aXNpdG9yLmxlYXZlX2NvbXBvc2l0ZV90cmFuc2Zvcm0oc2VsZikKICAgIGVsc2U6CiAgICAgIHZpc2l0b3IudmlzaXRfdHJhbnNmb3JtKHNlbGYpCgogICAgIyBWaXNpdCB0aGUgb3V0cHV0cyAob25lIG9yIG1vcmUpLiBJdCBpcyBlc3NlbnRpYWwgdG8gbWFyayBhcyB2aXNpdGVkIHRoZQogICAgIyB0YWdnZWQgUENvbGxlY3Rpb25zIG9mIHRoZSBEb091dHB1dHNUdXBsZSBvYmplY3QuIEEgdGFnZ2VkIFBDb2xsZWN0aW9uIGlzCiAgICAjIGNvbm5lY3RlZCBkaXJlY3RseSB3aXRoIGl0cyBwcm9kdWNlciAoYSBtdWx0aS1vdXRwdXQgUGFyRG8pLCBidXQgdGhlCiAgICAjIG91dHB1dCBvZiBzdWNoIGEgdHJhbnNmb3JtIGlzIHRoZSBjb250YWluaW5nIERvT3V0cHV0c1R1cGxlLCBub3QgdGhlCiAgICAjIFBDb2xsZWN0aW9uIGluc2lkZSBpdC4gV2l0aG91dCB0aGUgY29kZSBiZWxvdyBhIHRhZ2dlZCBQQ29sbGVjdGlvbiB3aWxsCiAgICAjIG5vdCBiZSBtYXJrZWQgYXMgdmlzaXRlZCB3aGlsZSB2aXNpdGluZyBpdHMgcHJvZHVjZXIuCiAgICBmb3IgcHZhbCBpbiBzZWxmLm91dHB1dHMudmFsdWVzKCk6CiAgICAgIGlmIGlzaW5zdGFuY2UocHZhbCwgcHZhbHVlLkRvT3V0cHV0c1R1cGxlKToKICAgICAgICBwdmFscyA9ICh2IGZvciB2IGluIHB2YWwpCiAgICAgIGVsc2U6CiAgICAgICAgcHZhbHMgPSAocHZhbCwpCiAgICAgIGZvciB2IGluIHB2YWxzOgogICAgICAgIGlmIHYgbm90IGluIHZpc2l0ZWQ6CiAgICAgICAgICB2aXNpdGVkLmFkZCh2KQogICAgICAgICAgdmlzaXRvci52aXNpdF92YWx1ZSh2LCBzZWxmKQoKICBkZWYgbmFtZWRfaW5wdXRzKHNlbGYpOgogICAgIyBUT0RPKEJFQU0tMTgzMyk6IFB1c2ggbmFtZXMgdXAgaW50byB0aGUgc2RrIGNvbnN0cnVjdGlvbi4KICAgIG1haW5faW5wdXRzID0ge3N0cihpeCk6IGlucHV0CiAgICAgICAgICAgICAgICAgICBmb3IgaXgsIGlucHV0IGluIGVudW1lcmF0ZShzZWxmLmlucHV0cykKICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoaW5wdXQsIHB2YWx1ZS5QQ29sbGVjdGlvbil9CiAgICBzaWRlX2lucHV0cyA9IHsnc2lkZSVzJyAlIGl4OiBzaS5wdmFsdWUKICAgICAgICAgICAgICAgICAgIGZvciBpeCwgc2kgaW4gZW51bWVyYXRlKHNlbGYuc2lkZV9pbnB1dHMpfQogICAgcmV0dXJuIGRpY3QobWFpbl9pbnB1dHMsICoqc2lkZV9pbnB1dHMpCgogIGRlZiBuYW1lZF9vdXRwdXRzKHNlbGYpOgogICAgcmV0dXJuIHtzdHIodGFnKTogb3V0cHV0IGZvciB0YWcsIG91dHB1dCBpbiBzZWxmLm91dHB1dHMuaXRlbXMoKQogICAgICAgICAgICBpZiBpc2luc3RhbmNlKG91dHB1dCwgcHZhbHVlLlBDb2xsZWN0aW9uKX0KCiAgZGVmIHRvX3J1bm5lcl9hcGkoc2VsZiwgY29udGV4dCk6CiAgICBmcm9tIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaSBpbXBvcnQgYmVhbV9ydW5uZXJfYXBpX3BiMgoKICAgIGRlZiB0cmFuc2Zvcm1fdG9fcnVubmVyX2FwaSh0cmFuc2Zvcm0sIGNvbnRleHQpOgogICAgICBpZiB0cmFuc2Zvcm0gaXMgTm9uZToKICAgICAgICByZXR1cm4gTm9uZQogICAgICBlbHNlOgogICAgICAgIHJldHVybiB0cmFuc2Zvcm0udG9fcnVubmVyX2FwaShjb250ZXh0LCBoYXNfcGFydHM9Ym9vbChzZWxmLnBhcnRzKSkKICAgIHJldHVybiBiZWFtX3J1bm5lcl9hcGlfcGIyLlBUcmFuc2Zvcm0oCiAgICAgICAgdW5pcXVlX25hbWU9c2VsZi5mdWxsX2xhYmVsLAogICAgICAgIHNwZWM9dHJhbnNmb3JtX3RvX3J1bm5lcl9hcGkoc2VsZi50cmFuc2Zvcm0sIGNvbnRleHQpLAogICAgICAgIHN1YnRyYW5zZm9ybXM9W2NvbnRleHQudHJhbnNmb3Jtcy5nZXRfaWQocGFydCwgbGFiZWw9cGFydC5mdWxsX2xhYmVsKQogICAgICAgICAgICAgICAgICAgICAgIGZvciBwYXJ0IGluIHNlbGYucGFydHNdLAogICAgICAgIGlucHV0cz17dGFnOiBjb250ZXh0LnBjb2xsZWN0aW9ucy5nZXRfaWQocGMpCiAgICAgICAgICAgICAgICBmb3IgdGFnLCBwYyBpbiBzZWxmLm5hbWVkX2lucHV0cygpLml0ZW1zKCl9LAogICAgICAgIG91dHB1dHM9e3N0cih0YWcpOiBjb250ZXh0LnBjb2xsZWN0aW9ucy5nZXRfaWQob3V0KQogICAgICAgICAgICAgICAgIGZvciB0YWcsIG91dCBpbiBzZWxmLm5hbWVkX291dHB1dHMoKS5pdGVtcygpfSwKICAgICAgICAjIFRPRE8oQkVBTS0xMTUpOiBkaXNwbGF5X2RhdGEKICAgICAgICBkaXNwbGF5X2RhdGE9Tm9uZSkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBmcm9tX3J1bm5lcl9hcGkocHJvdG8sIGNvbnRleHQpOgogICAgZGVmIGlzX3NpZGVfaW5wdXQodGFnKToKICAgICAgIyBBcyBwZXIgbmFtZWRfaW5wdXRzKCkgYWJvdmUuCiAgICAgIHJldHVybiB0YWcuc3RhcnRzd2l0aCgnc2lkZScpCiAgICBtYWluX2lucHV0cyA9IFtjb250ZXh0LnBjb2xsZWN0aW9ucy5nZXRfYnlfaWQoaWQpCiAgICAgICAgICAgICAgICAgICBmb3IgdGFnLCBpZCBpbiBwcm90by5pbnB1dHMuaXRlbXMoKQogICAgICAgICAgICAgICAgICAgaWYgbm90IGlzX3NpZGVfaW5wdXQodGFnKV0KICAgICMgT3JkZXJpbmcgaXMgaW1wb3J0YW50IGhlcmUuCiAgICBpbmRleGVkX3NpZGVfaW5wdXRzID0gWyhpbnQocmUubWF0Y2goJ3NpZGUoWzAtOV0rKSgtLiopPyQnLCB0YWcpLmdyb3VwKDEpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucGNvbGxlY3Rpb25zLmdldF9ieV9pZChpZCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0YWcsIGlkIGluIHByb3RvLmlucHV0cy5pdGVtcygpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlzX3NpZGVfaW5wdXQodGFnKV0KICAgIHNpZGVfaW5wdXRzID0gW3NpIGZvciBfLCBzaSBpbiBzb3J0ZWQoaW5kZXhlZF9zaWRlX2lucHV0cyldCiAgICByZXN1bHQgPSBBcHBsaWVkUFRyYW5zZm9ybSgKICAgICAgICBwYXJlbnQ9Tm9uZSwKICAgICAgICB0cmFuc2Zvcm09cHRyYW5zZm9ybS5QVHJhbnNmb3JtLmZyb21fcnVubmVyX2FwaShwcm90by5zcGVjLCBjb250ZXh0KSwKICAgICAgICBmdWxsX2xhYmVsPXByb3RvLnVuaXF1ZV9uYW1lLAogICAgICAgIGlucHV0cz1tYWluX2lucHV0cykKICAgIGlmIHJlc3VsdC50cmFuc2Zvcm0gYW5kIHJlc3VsdC50cmFuc2Zvcm0uc2lkZV9pbnB1dHM6CiAgICAgIGZvciBzaSwgcGNvbGwgaW4gemlwKHJlc3VsdC50cmFuc2Zvcm0uc2lkZV9pbnB1dHMsIHNpZGVfaW5wdXRzKToKICAgICAgICBzaS5wdmFsdWUgPSBwY29sbAogICAgICByZXN1bHQuc2lkZV9pbnB1dHMgPSB0dXBsZShyZXN1bHQudHJhbnNmb3JtLnNpZGVfaW5wdXRzKQogICAgcmVzdWx0LnBhcnRzID0gW10KICAgIGZvciB0cmFuc2Zvcm1faWQgaW4gcHJvdG8uc3VidHJhbnNmb3JtczoKICAgICAgcGFydCA9IGNvbnRleHQudHJhbnNmb3Jtcy5nZXRfYnlfaWQodHJhbnNmb3JtX2lkKQogICAgICBwYXJ0LnBhcmVudCA9IHJlc3VsdAogICAgICByZXN1bHQucGFydHMuYXBwZW5kKHBhcnQpCiAgICByZXN1bHQub3V0cHV0cyA9IHsKICAgICAgICBOb25lIGlmIHRhZyA9PSAnTm9uZScgZWxzZSB0YWc6IGNvbnRleHQucGNvbGxlY3Rpb25zLmdldF9ieV9pZChpZCkKICAgICAgICBmb3IgdGFnLCBpZCBpbiBwcm90by5vdXRwdXRzLml0ZW1zKCl9CiAgICAjIFRoaXMgYW5ub3RhdGlvbiBpcyBleHBlY3RlZCBieSBzb21lIHJ1bm5lcnMuCiAgICBpZiBwcm90by5zcGVjLnVybiA9PSBjb21tb25fdXJucy5wcmltaXRpdmVzLlBBUl9ETy51cm46CiAgICAgIHJlc3VsdC50cmFuc2Zvcm0ub3V0cHV0X3RhZ3MgPSBzZXQocHJvdG8ub3V0cHV0cy5rZXlzKCkpLmRpZmZlcmVuY2UoCiAgICAgICAgICB7J05vbmUnfSkKICAgIGlmIG5vdCByZXN1bHQucGFydHM6CiAgICAgIGZvciB0YWcsIHBjb2xsX2lkIGluIHByb3RvLm91dHB1dHMuaXRlbXMoKToKICAgICAgICBpZiBwY29sbF9pZCBub3QgaW4gcHJvdG8uaW5wdXRzLnZhbHVlcygpOgogICAgICAgICAgcGMgPSBjb250ZXh0LnBjb2xsZWN0aW9ucy5nZXRfYnlfaWQocGNvbGxfaWQpCiAgICAgICAgICBwYy5wcm9kdWNlciA9IHJlc3VsdAogICAgICAgICAgcGMudGFnID0gTm9uZSBpZiB0YWcgPT0gJ05vbmUnIGVsc2UgdGFnCiAgICByZXR1cm4gcmVzdWx0CgoKY2xhc3MgUFRyYW5zZm9ybU92ZXJyaWRlKHdpdGhfbWV0YWNsYXNzKGFiYy5BQkNNZXRhLCBvYmplY3QpKToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIEdpdmVzIGEgbWF0Y2hlciBhbmQgcmVwbGFjZW1lbnRzIGZvciBtYXRjaGluZyBQVHJhbnNmb3Jtcy4KCiAgVE9ETzogVXBkYXRlIHRoaXMgdG8gc3VwcG9ydCBjYXNlcyB3aGVyZSBpbnB1dCBhbmQvb3VyIG91dHB1dCB0eXBlcyBhcmUKICBkaWZmZXJlbnQuCiAgIiIiCgogIEBhYmMuYWJzdHJhY3RtZXRob2QKICBkZWYgbWF0Y2hlcyhzZWxmLCBhcHBsaWVkX3B0cmFuc2Zvcm0pOgogICAgIiIiRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBnaXZlbiBBcHBsaWVkUFRyYW5zZm9ybSBtYXRjaGVzLgoKICAgIE5vdGUgdGhhdCB0aGUgbWF0Y2hpbmcgd2lsbCBoYXBwZW4gKmFmdGVyKiBSdW5uZXIgQVBJIHByb3RvIHRyYW5zbGF0aW9uLgogICAgSWYgbWF0Y2hpbmcgaXMgZG9uZSB2aWEgdHlwZSBjaGVja3MsIHRvL2Zyb21fcnVubmVyX2FwaVtfcGFyYW1ldGVyXSBtZXRob2RzCiAgICBtdXN0IGJlIGltcGxlbWVudGVkIHRvIHByZXNlcnZlIHRoZSB0eXBlIChhbmQgb3RoZXIgZGF0YSkgdGhyb3VnaCBwcm90bwogICAgc2VyaWFsaXphdGlvbi4KCiAgICBDb25zaWRlciBVUk4tYmFzZWQgdHJhbnNsYXRpb24gaW5zdGVhZC4KCiAgICBBcmdzOgogICAgICBhcHBsaWVkX3B0cmFuc2Zvcm06IEFwcGxpZWRQVHJhbnNmb3JtIHRvIGJlIG1hdGNoZWQuCgogICAgUmV0dXJuczoKICAgICAgYSBib29sIGluZGljYXRpbmcgd2hldGhlciB0aGUgZ2l2ZW4gQXBwbGllZFBUcmFuc2Zvcm0gaXMgYSBtYXRjaC4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgZGVmIGdldF9yZXBsYWNlbWVudF90cmFuc2Zvcm0oc2VsZiwgcHRyYW5zZm9ybSk6CiAgICAiIiJQcm92aWRlcyBhIHJ1bm5lciBzcGVjaWZpYyBvdmVycmlkZSBmb3IgYSBnaXZlbiBQVHJhbnNmb3JtLgoKICAgIEFyZ3M6CiAgICAgIHB0cmFuc2Zvcm06IFBUcmFuc2Zvcm0gdG8gYmUgcmVwbGFjZWQuCgogICAgUmV0dXJuczoKICAgICAgQSBQVHJhbnNmb3JtIHRoYXQgd2lsbCBiZSB0aGUgcmVwbGFjZW1lbnQgZm9yIHRoZSBQVHJhbnNmb3JtIGdpdmVuIGFzIGFuCiAgICAgIGFyZ3VtZW50LgogICAgIiIiCiAgICAjIFJldHVybnMgYSBQVHJhbnNmb3JtUmVwbGFjZW1lbnQKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKfXKQgwAAKFgaAAAAQXBwbGllZFBUcmFuc2Zvcm0uX19pbml0X19YAwAAAGRlZk3aAk3nAodYEQAAAFBpcGVsaW5lLl9fZXhpdF9fWAMAAABkZWZNpwFNqgGHWCgAAABQaXBlbGluZS50b19ydW5uZXJfYXBpLkZvcmNlS3ZJbnB1dFR5cGVzWAUAAABjbGFzc011Ak2EAodYLAAAAFBUcmFuc2Zvcm1PdmVycmlkZS5nZXRfcmVwbGFjZW1lbnRfdHJhbnNmb3JtWAMAAABkZWZNrQNNugOHWCsAAABQaXBlbGluZS5fcmVwbGFjZS5UcmFuc2Zvcm1VcGRhdGVyLl9faW5pdF9fWAMAAABkZWZLz0vRh1gbAAAAUGlwZWxpbmVWaXNpdG9yLnZpc2l0X3ZhbHVlWAMAAABkZWZNvAJNxQKHWBMAAABQaXBlbGluZS5fX3JlZHVjZV9fWAMAAABkZWZNPQJNQwKHWEgAAABQaXBlbGluZS5fdmVyaWZ5X3J1bm5lcl9hcGlfY29tcGF0aWJsZS5WaXNpdG9yLmVudGVyX2NvbXBvc2l0ZV90cmFuc2Zvcm1YAwAAAGRlZk1OAk1QAodYPgAAAFBpcGVsaW5lLl92ZXJpZnlfcnVubmVyX2FwaV9jb21wYXRpYmxlLlZpc2l0b3IudmlzaXRfdHJhbnNmb3JtWAMAAABkZWZNUQJNWQKHWA8AAABQaXBlbGluZVZpc2l0b3JYBQAAAGNsYXNzTbUCTdECh1hAAAAAUGlwZWxpbmUuX2NoZWNrX3JlcGxhY2VtZW50LlJlcGxhY2VtZW50VmFsaWRhdG9yLnZpc2l0X3RyYW5zZm9ybVgDAAAAZGVmTW4BTXIBh1g6AAAAUGlwZWxpbmUuX3ZlcmlmeV9ydW5uZXJfYXBpX2NvbXBhdGlibGUuVmlzaXRvci52aXNpdF92YWx1ZVgDAAAAZGVmTVoCTV0Ch1gRAAAAQXBwbGllZFBUcmFuc2Zvcm1YBQAAAGNsYXNzTdMCTY8Dh1g3AAAAQXBwbGllZFBUcmFuc2Zvcm0udG9fcnVubmVyX2FwaS50cmFuc2Zvcm1fdG9fcnVubmVyX2FwaVgDAAAAZGVmTVQDTVkDh1gkAAAAUGlwZWxpbmUuX3JlcGxhY2UuSW5wdXRPdXRwdXRVcGRhdGVyWAUAAABjbGFzc00uAU1fAYdYQgAAAFBpcGVsaW5lLnRvX3J1bm5lcl9hcGkuRm9yY2VLdklucHV0VHlwZXMuZW50ZXJfY29tcG9zaXRlX3RyYW5zZm9ybVgDAAAAZGVmTXYCTXgCh1gOAAAAUGlwZWxpbmUudmlzaXRYAwAAAGRlZk2rAU2/AYdYEgAAAFBpcGVsaW5lLl9fZW50ZXJfX1gDAAAAZGVmTaQBTaYBh1gIAAAAUGlwZWxpbmVYBQAAAGNsYXNzS1JNswKHWB8AAABBcHBsaWVkUFRyYW5zZm9ybS50b19ydW5uZXJfYXBpWAMAAABkZWZNUQNNZAOHWCkAAABQaXBlbGluZVZpc2l0b3IuZW50ZXJfY29tcG9zaXRlX3RyYW5zZm9ybVgDAAAAZGVmTcoCTc0Ch1gpAAAAUGlwZWxpbmVWaXNpdG9yLmxlYXZlX2NvbXBvc2l0ZV90cmFuc2Zvcm1YAwAAAGRlZk3OAk3RAodYMgAAAFBpcGVsaW5lLl9yZXBsYWNlLlRyYW5zZm9ybVVwZGF0ZXIudmlzaXRfdHJhbnNmb3JtWAMAAABkZWZNKAFNKgGHWBQAAABQaXBlbGluZS5yZXBsYWNlX2FsbFgDAAAAZGVmTXUBTYwBh1gMAAAAUGlwZWxpbmUucnVuWAMAAABkZWZNjQFNowGHWD4AAABQaXBlbGluZS5fcmVwbGFjZS5JbnB1dE91dHB1dFVwZGF0ZXIuZW50ZXJfY29tcG9zaXRlX3RyYW5zZm9ybVgDAAAAZGVmTTsBTT0Bh1guAAAAUGlwZWxpbmUuX3ZlcmlmeV9ydW5uZXJfYXBpX2NvbXBhdGlibGUuVmlzaXRvclgFAAAAY2xhc3NNSwJNXQKHWBAAAABQaXBlbGluZS5vcHRpb25zWAMAAABkZWZLrku0h1gtAAAAUGlwZWxpbmUuX3JlcGxhY2UuSW5wdXRPdXRwdXRVcGRhdGVyLl9faW5pdF9fWAMAAABkZWZNOAFNOgGHWBYAAABQaXBlbGluZS50b19ydW5uZXJfYXBpWAMAAABkZWZNYQJNkwKHWA4AAABQaXBlbGluZS5hcHBseVgDAAAAZGVmTcABTSACh1gYAAAAUGlwZWxpbmUuZnJvbV9ydW5uZXJfYXBpWAMAAABkZWZNlAJNswKHWBEAAABQaXBlbGluZS5fX2luaXRfX1gDAAAAZGVmS2FLrYdYGAAAAFBpcGVsaW5lLl9yb290X3RyYW5zZm9ybVgDAAAAZGVmS7lLvIdYGgAAAFBUcmFuc2Zvcm1PdmVycmlkZS5tYXRjaGVzWAMAAABkZWZNmgNNrAOHWDUAAABQaXBlbGluZS5fcmVwbGFjZS5UcmFuc2Zvcm1VcGRhdGVyLl9yZXBsYWNlX2lmX25lZWRlZFgDAAAAZGVmS9JNJAGHWCAAAABBcHBsaWVkUFRyYW5zZm9ybS5yZXBsYWNlX291dHB1dFgDAAAAZGVmTewCTfkCh1gbAAAAUGlwZWxpbmUuX2N1cnJlbnRfdHJhbnNmb3JtWAMAAABkZWZLtUu4h1gbAAAAUGlwZWxpbmUuX2NoZWNrX3JlcGxhY2VtZW50WAMAAABkZWZNawFNdAGHWCMAAABQaXBlbGluZS5fcmVtb3ZlX2xhYmVsc19yZWN1cnNpdmVseVgDAAAAZGVmS71LwodYPAAAAFBpcGVsaW5lLl9yZXBsYWNlLlRyYW5zZm9ybVVwZGF0ZXIuZW50ZXJfY29tcG9zaXRlX3RyYW5zZm9ybVgDAAAAZGVmTSUBTScBh1geAAAAQXBwbGllZFBUcmFuc2Zvcm0uaXNfY29tcG9zaXRlWAMAAABkZWZNCgNNEwOHWB8AAABBcHBsaWVkUFRyYW5zZm9ybS5uYW1lZF9vdXRwdXRzWAMAAABkZWZNTQNNUAOHWBwAAABBcHBsaWVkUFRyYW5zZm9ybS5hZGRfb3V0cHV0WAMAAABkZWZN+gJNBQOHWDQAAABQaXBlbGluZS5fcmVwbGFjZS5JbnB1dE91dHB1dFVwZGF0ZXIudmlzaXRfdHJhbnNmb3JtWAMAAABkZWZNPgFNXwGHWCYAAABQaXBlbGluZS5fdmVyaWZ5X3J1bm5lcl9hcGlfY29tcGF0aWJsZVgDAAAAZGVmTUQCTWACh1gaAAAAQXBwbGllZFBUcmFuc2Zvcm0uX19yZXByX19YAwAAAGRlZk3oAk3rAodYIgAAAFBpcGVsaW5lLl9yZXBsYWNlLlRyYW5zZm9ybVVwZGF0ZXJYBQAAAGNsYXNzS8xNKgGHWCEAAABBcHBsaWVkUFRyYW5zZm9ybS5mcm9tX3J1bm5lcl9hcGlYAwAAAGRlZk1lA02PA4dYGwAAAFBpcGVsaW5lLl9pbmZlcl9yZXN1bHRfdHlwZVgDAAAAZGVmTSECTTwCh1gwAAAAUGlwZWxpbmUuX2NoZWNrX3JlcGxhY2VtZW50LlJlcGxhY2VtZW50VmFsaWRhdG9yWAUAAABjbGFzc01tAU1yAYdYGgAAAEFwcGxpZWRQVHJhbnNmb3JtLmFkZF9wYXJ0WAMAAABkZWZNBgNNCQOHWB4AAABBcHBsaWVkUFRyYW5zZm9ybS5uYW1lZF9pbnB1dHNYAwAAAGRlZk1EA01MA4dYHwAAAFBpcGVsaW5lVmlzaXRvci52aXNpdF90cmFuc2Zvcm1YAwAAAGRlZk3GAk3JAodYEQAAAFBpcGVsaW5lLl9yZXBsYWNlWAMAAABkZWZLw01qAYdYFwAAAEFwcGxpZWRQVHJhbnNmb3JtLnZpc2l0WAMAAABkZWZNFANNQwOHWDgAAABQaXBlbGluZS50b19ydW5uZXJfYXBpLkZvcmNlS3ZJbnB1dFR5cGVzLnZpc2l0X3RyYW5zZm9ybVgDAAAAZGVmTXkCTYQCh1gvAAAAQXBwbGllZFBUcmFuc2Zvcm0uZnJvbV9ydW5uZXJfYXBpLmlzX3NpZGVfaW5wdXRYAwAAAGRlZk1nA01qA4dYEgAAAFBUcmFuc2Zvcm1PdmVycmlkZVgFAAAAY2xhc3NNkQNNugOHdX1ykYMAAChYFgAAAFBpcGVsaW5lLnRvX3J1bm5lcl9hcGlYFAAAAGFwYWNoZV9iZWFtLnBpcGVsaW5lcpKDAABYDgAAAFBpcGVsaW5lLmFwcGx5apKDAABYDgAAAFBpcGVsaW5lLnZpc2l0apKDAABYGAAAAFBpcGVsaW5lLmZyb21fcnVubmVyX2FwaWqSgwAAWAgAAABQaXBlbGluZWqSgwAAWBoAAABQVHJhbnNmb3JtT3ZlcnJpZGUubWF0Y2hlc2qSgwAAWCwAAABQVHJhbnNmb3JtT3ZlcnJpZGUuZ2V0X3JlcGxhY2VtZW50X3RyYW5zZm9ybWqSgwAAWBQAAABQaXBlbGluZS5yZXBsYWNlX2FsbGqSgwAAWAwAAABQaXBlbGluZS5ydW5qkoMAAFgSAAAAUFRyYW5zZm9ybU92ZXJyaWRlapKDAAB1an1pAABYFAAAAGFwYWNoZV9iZWFtLnBpcGVsaW5lcpODAACFgXKUgwAAfXKVgwAAYnRyloMAAFUeYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3V0aWxzKFhAFwAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJVdGlsaXR5IG1ldGhvZHMgZm9yIHRlc3RpbmcKCkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGhhc2hsaWIKaW1wb3J0IGltcAppbXBvcnQgb3MKaW1wb3J0IHNodXRpbAppbXBvcnQgdGVtcGZpbGUKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0Cgpmcm9tIG1vY2sgaW1wb3J0IE1vY2sKZnJvbSBtb2NrIGltcG9ydCBwYXRjaAoKZnJvbSBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtcyBpbXBvcnQgRmlsZVN5c3RlbXMKZnJvbSBhcGFjaGVfYmVhbS51dGlscyBpbXBvcnQgcmV0cnkKCkRFRkFVTFRfSEFTSElOR19BTEcgPSAnc2hhMScKCgpjbGFzcyBUZW1wRGlyKG9iamVjdCk6CiAgIiIiQ29udGV4dCBNYW5hZ2VyIHRvIGNyZWF0ZSBhbmQgY2xlYW4tdXAgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5LiIiIgoKICBkZWYgX19pbml0X18oc2VsZik6CiAgICBzZWxmLl90ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcCgpCgogIGRlZiBfX2VudGVyX18oc2VsZik6CiAgICByZXR1cm4gc2VsZgoKICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgogICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5fdGVtcGRpcik6CiAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5fdGVtcGRpcikKCiAgZGVmIGdldF9wYXRoKHNlbGYpOgogICAgIiIiUmV0dXJucyB0aGUgcGF0aCB0byB0aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeS4iIiIKICAgIHJldHVybiBzZWxmLl90ZW1wZGlyCgogIGRlZiBjcmVhdGVfdGVtcF9maWxlKHNlbGYsIHN1ZmZpeD0nJywgbGluZXM9Tm9uZSk6CiAgICAiIiJDcmVhdGVzIGEgdGVtcG9yYXJ5IGZpbGUgaW4gdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkuCgogICAgQXJnczoKICAgICAgc3VmZml4IChzdHIpOiBUaGUgZmlsZW5hbWUgc3VmZml4IG9mIHRoZSB0ZW1wb3JhcnkgZmlsZSAoZS5nLiAnLnR4dCcpCiAgICAgIGxpbmVzIChMaXN0W3N0cl0pOiBBIGxpc3Qgb2YgbGluZXMgdGhhdCB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIHRlbXBvcmFyeQogICAgICAgIGZpbGUuCiAgICBSZXR1cm5zOgogICAgICBUaGUgbmFtZSBvZiB0aGUgdGVtcG9yYXJ5IGZpbGUgY3JlYXRlZC4KICAgICIiIgogICAgd2l0aCB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoCiAgICAgICAgZGVsZXRlPUZhbHNlLCBkaXI9c2VsZi5fdGVtcGRpciwgc3VmZml4PXN1ZmZpeCkgYXMgZjoKICAgICAgaWYgbGluZXM6CiAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CiAgICAgICAgICBmLndyaXRlKGxpbmUpCgogICAgICByZXR1cm4gZi5uYW1lCgoKZGVmIGNvbXB1dGVfaGFzaChjb250ZW50LCBoYXNoaW5nX2FsZz1ERUZBVUxUX0hBU0hJTkdfQUxHKToKICAiIiJDb21wdXRlIGEgaGFzaCB2YWx1ZSBvZiBhIGxpc3Qgb2Ygb2JqZWN0cyBieSBoYXNoaW5nIHRoZWlyIHN0cmluZwogIHJlcHJlc2VudGF0aW9ucy4iIiIKICBjb250ZW50ID0gW3N0cih4KS5lbmNvZGUoJ3V0Zi04JykgaWYgbm90IGlzaW5zdGFuY2UoeCwgYnl0ZXMpIGVsc2UgeAogICAgICAgICAgICAgZm9yIHggaW4gY29udGVudF0KICBjb250ZW50LnNvcnQoKQogIG0gPSBoYXNobGliLm5ldyhoYXNoaW5nX2FsZykKICBmb3IgZWxlbSBpbiBjb250ZW50OgogICAgbS51cGRhdGUoZWxlbSkKICByZXR1cm4gbS5oZXhkaWdlc3QoKQoKCmRlZiBwYXRjaF9yZXRyeSh0ZXN0Y2FzZSwgbW9kdWxlKToKICAiIiJBIGZ1bmN0aW9uIHRvIHBhdGNoIHJldHJ5IG1vZHVsZSB0byB1c2UgbW9jayBjbG9jayBhbmQgbG9nZ2VyLgoKICBDbG9jayBhbmQgbG9nZ2VyIHRoYXQgZGVmaW5lZCBpbiByZXRyeSBkZWNvcmF0b3Igd2lsbCBiZSByZXBsYWNlZCBpbiB0ZXN0CiAgaW4gb3JkZXIgdG8gc2tpcCBzbGVlcCBwaGFzZSB3aGVuIHJldHJ5IGhhcHBlbnMuCgogIEFyZ3M6CiAgICB0ZXN0Y2FzZTogQW4gaW5zdGFuY2Ugb2YgdW5pdHRlc3QuVGVzdENhc2UgdGhhdCBjYWxscyB0aGlzIGZ1bmN0aW9uIHRvCiAgICAgIHBhdGNoIHJldHJ5IG1vZHVsZS4KICAgIG1vZHVsZTogVGhlIG1vZHVsZSB0aGF0IHVzZXMgcmV0cnkgYW5kIG5lZWQgdG8gYmUgcmVwbGFjZWQgd2l0aCBtb2NrCiAgICAgIGNsb2NrIGFuZCBsb2dnZXIgaW4gdGVzdC4KICAiIiIKICByZWFsX3JldHJ5X3dpdGhfZXhwb25lbnRpYWxfYmFja29mZiA9IHJldHJ5LndpdGhfZXhwb25lbnRpYWxfYmFja29mZgoKICBkZWYgcGF0Y2hlZF9yZXRyeV93aXRoX2V4cG9uZW50aWFsX2JhY2tvZmYobnVtX3JldHJpZXMsIHJldHJ5X2ZpbHRlcik6CiAgICAiIiJBIHBhdGNoIGZvciByZXRyeSBkZWNvcmF0b3IgdG8gdXNlIGEgbW9jayBkdW1teSBjbG9jayBhbmQgbG9nZ2VyLiIiIgogICAgcmV0dXJuIHJlYWxfcmV0cnlfd2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmKAogICAgICAgIG51bV9yZXRyaWVzPW51bV9yZXRyaWVzLCByZXRyeV9maWx0ZXI9cmV0cnlfZmlsdGVyLCBsb2dnZXI9TW9jaygpLAogICAgICAgIGNsb2NrPU1vY2soKSkKCiAgcGF0Y2gub2JqZWN0KHJldHJ5LCAnd2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmJywKICAgICAgICAgICAgICAgc2lkZV9lZmZlY3Q9cGF0Y2hlZF9yZXRyeV93aXRoX2V4cG9uZW50aWFsX2JhY2tvZmYpLnN0YXJ0KCkKCiAgIyBSZWxvYWQgbW9kdWxlIGFmdGVyIHBhdGNoaW5nLgogIGltcC5yZWxvYWQobW9kdWxlKQoKICBkZWYgcmVtb3ZlX3BhdGNoZXMoKToKICAgIHBhdGNoLnN0b3BhbGwoKQogICAgIyBSZWxvYWQgbW9kdWxlIGFnYWluIGFmdGVyIHJlbW92aW5nIHBhdGNoLgogICAgaW1wLnJlbG9hZChtb2R1bGUpCgogIHRlc3RjYXNlLmFkZENsZWFudXAocmVtb3ZlX3BhdGNoZXMpCgoKQHJldHJ5LndpdGhfZXhwb25lbnRpYWxfYmFja29mZigKICAgIG51bV9yZXRyaWVzPTMsCiAgICByZXRyeV9maWx0ZXI9cmV0cnkucmV0cnlfb25fYmVhbV9pb19lcnJvcl9maWx0ZXIpCmRlZiBkZWxldGVfZmlsZXMoZmlsZV9wYXRocyk6CiAgIiIiQSBmdW5jdGlvbiB0byBjbGVhbiB1cCBmaWxlcyBvciBkaXJlY3RvcmllcyB1c2luZyBgYEZpbGVTeXN0ZW1zYGAuCgogIEdsb2IgaXMgc3VwcG9ydGVkIGluIGZpbGUgcGF0aCBhbmQgZGlyZWN0b3JpZXMgd2lsbCBiZSBkZWxldGVkIHJlY3Vyc2l2ZWx5LgoKICBBcmdzOgogICAgZmlsZV9wYXRoczogQSBsaXN0IG9mIHN0cmluZ3MgY29udGFpbnMgZmlsZSBwYXRocyBvciBkaXJlY3Rvcmllcy4KICAiIiIKICBpZiBsZW4oZmlsZV9wYXRocykgPT0gMDoKICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignQ2xlYW4gdXAgZmFpbGVkLiBJbnZhbGlkIGZpbGUgcGF0aDogJXMuJyAlCiAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9wYXRocykKICBGaWxlU3lzdGVtcy5kZWxldGUoZmlsZV9wYXRocykKCgpkZWYgY2xlYW51cF9zdWJzY3JpcHRpb25zKHN1Yl9jbGllbnQsIHN1YnMpOgogICIiIkNsZWFudXAgUHViU3ViIHN1YnNjcmlwdGlvbnMgaWYgZXhpc3QuIiIiCiAgZm9yIHN1YiBpbiBzdWJzOgogICAgc3ViX2NsaWVudC5kZWxldGVfc3Vic2NyaXB0aW9uKHN1Yi5uYW1lKQoKCmRlZiBjbGVhbnVwX3RvcGljcyhwdWJfY2xpZW50LCB0b3BpY3MpOgogICIiIkNsZWFudXAgUHViU3ViIHRvcGljcyBpZiBleGlzdC4iIiIKICBmb3IgdG9waWMgaW4gdG9waWNzOgogICAgcHViX2NsaWVudC5kZWxldGVfdG9waWModG9waWMubmFtZSkKCgpjbGFzcyBQdWxsUmVzcG9uc2VNZXNzYWdlKG9iamVjdCk6CiAgIiIiRGF0YSByZXByZXNlbnRpbmcgYSBwdWxsIHJlcXVlc3QgcmVzcG9uc2UuCgogIFV0aWxpdHkgY2xhc3MgZm9yIGBgY3JlYXRlX3B1bGxfcmVzcG9uc2VgYC4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSwgYXR0cmlidXRlcz1Ob25lLAogICAgICAgICAgICAgICBwdWJsaXNoX3RpbWVfc2Vjcz1Ob25lLCBwdWJsaXNoX3RpbWVfbmFub3M9Tm9uZSwgYWNrX2lkPU5vbmUpOgogICAgc2VsZi5kYXRhID0gZGF0YQogICAgc2VsZi5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcwogICAgc2VsZi5wdWJsaXNoX3RpbWVfc2VjcyA9IHB1Ymxpc2hfdGltZV9zZWNzCiAgICBzZWxmLnB1Ymxpc2hfdGltZV9uYW5vcyA9IHB1Ymxpc2hfdGltZV9uYW5vcwogICAgc2VsZi5hY2tfaWQgPSBhY2tfaWQKCgpkZWYgY3JlYXRlX3B1bGxfcmVzcG9uc2UocmVzcG9uc2VzKToKICAiIiJDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgYGBnb29nbGUuY2xvdWQucHVic3ViLnR5cGVzLlJlY2VpdmVkTWVzc2FnZWBgLgoKICBVc2VkIHRvIHNpbXVsYXRlIHRoZSByZXNwb25zZSBmcm9tIHB1YnN1Yi5TdWJzY3JpYmVyQ2xpZW50KCkucHVsbCgpLgoKICBBcmdzOgogICAgcmVzcG9uc2VzOiBsaXN0IG9mIGBgUHVsbFJlc3BvbnNlTWVzc2FnZWBgCgogIFJldHVybnM6CiAgICBBbiBpbnN0YW5jZSBvZiBgYGdvb2dsZS5jbG91ZC5wdWJzdWIudHlwZXMuUHVsbFJlc3BvbnNlYGAgcG9wdWxhdGVkIHdpdGgKICAgIHJlc3BvbnNlcy4KICAiIiIKICBmcm9tIGdvb2dsZS5jbG91ZCBpbXBvcnQgcHVic3ViCgogIHJlcyA9IHB1YnN1Yi50eXBlcy5QdWxsUmVzcG9uc2UoKQogIGZvciByZXNwb25zZSBpbiByZXNwb25zZXM6CiAgICByZWNlaXZlZF9tZXNzYWdlID0gcmVzLnJlY2VpdmVkX21lc3NhZ2VzLmFkZCgpCgogICAgbWVzc2FnZSA9IHJlY2VpdmVkX21lc3NhZ2UubWVzc2FnZQogICAgbWVzc2FnZS5kYXRhID0gcmVzcG9uc2UuZGF0YQogICAgaWYgcmVzcG9uc2UuYXR0cmlidXRlcyBpcyBub3QgTm9uZToKICAgICAgZm9yIGssIHYgaW4gcmVzcG9uc2UuYXR0cmlidXRlcy5pdGVtcygpOgogICAgICAgIG1lc3NhZ2UuYXR0cmlidXRlc1trXSA9IHYKICAgIGlmIHJlc3BvbnNlLnB1Ymxpc2hfdGltZV9zZWNzIGlzIG5vdCBOb25lOgogICAgICBtZXNzYWdlLnB1Ymxpc2hfdGltZS5zZWNvbmRzID0gcmVzcG9uc2UucHVibGlzaF90aW1lX3NlY3MKICAgIGlmIHJlc3BvbnNlLnB1Ymxpc2hfdGltZV9uYW5vcyBpcyBub3QgTm9uZToKICAgICAgbWVzc2FnZS5wdWJsaXNoX3RpbWUubmFub3MgPSByZXNwb25zZS5wdWJsaXNoX3RpbWVfbmFub3MKCiAgICBpZiByZXNwb25zZS5hY2tfaWQgaXMgbm90IE5vbmU6CiAgICAgIHJlY2VpdmVkX21lc3NhZ2UuYWNrX2lkID0gcmVzcG9uc2UuYWNrX2lkCgogIHJldHVybiByZXMKfXKXgwAAKFgaAAAAcGF0Y2hfcmV0cnkucmVtb3ZlX3BhdGNoZXNYAwAAAGRlZktzS3eHWBAAAABUZW1wRGlyLmdldF9wYXRoWAMAAABkZWZLNks5h1gyAAAAcGF0Y2hfcmV0cnkucGF0Y2hlZF9yZXRyeV93aXRoX2V4cG9uZW50aWFsX2JhY2tvZmZYAwAAAGRlZktnS2yHWBgAAABUZW1wRGlyLmNyZWF0ZV90ZW1wX2ZpbGVYAwAAAGRlZks6S0uHWBwAAABQdWxsUmVzcG9uc2VNZXNzYWdlLl9faW5pdF9fWAMAAABkZWZLnUukh1gTAAAAUHVsbFJlc3BvbnNlTWVzc2FnZVgFAAAAY2xhc3NLmEukh1gMAAAAY29tcHV0ZV9oYXNoWAMAAABkZWZLTUtXh1gRAAAAVGVtcERpci5fX2VudGVyX19YAwAAAGRlZksvSzGHWA4AAABjbGVhbnVwX3RvcGljc1gDAAAAZGVmS5JLlodYBwAAAFRlbXBEaXJYBQAAAGNsYXNzSylLS4dYEAAAAFRlbXBEaXIuX19leGl0X19YAwAAAGRlZksySzWHWAsAAABwYXRjaF9yZXRyeVgDAAAAZGVmS1lLeYdYEAAAAFRlbXBEaXIuX19pbml0X19YAwAAAGRlZkssSy6HWBQAAABjcmVhdGVfcHVsbF9yZXNwb25zZVgDAAAAZGVmS6ZLxodYDAAAAGRlbGV0ZV9maWxlc1gDAAAAZGVmS3tLiodYFQAAAGNsZWFudXBfc3Vic2NyaXB0aW9uc1gDAAAAZGVmS4xLkId1fXKYgwAAKFgVAAAAY2xlYW51cF9zdWJzY3JpcHRpb25zauphAABYGAAAAFRlbXBEaXIuY3JlYXRlX3RlbXBfZmlsZWrqYQAAWBMAAABQdWxsUmVzcG9uc2VNZXNzYWdlauphAABYDAAAAGNvbXB1dGVfaGFzaGrqYQAAWA4AAABjbGVhbnVwX3RvcGljc2rqYQAAWAcAAABUZW1wRGlyauphAABYFAAAAGNyZWF0ZV9wdWxsX3Jlc3BvbnNlauphAABYEAAAAFRlbXBEaXIuZ2V0X3BhdGhq6mEAAFgLAAAAcGF0Y2hfcmV0cnlq6mEAAHVqfWkAAFgeAAAAYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3V0aWxzcpmDAACFgXKagwAAfXKbgwAAYnRVMWFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfYW5hbHl6ZXIoWH5EAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkFuYWx5emVzIGFuZCBtb2RpZmllcyB0aGUgcGlwZWxpbmUgdGhhdCB1dGlsaXplIHRoZSBQQ29sbGVjdGlvbiBjYWNoZS4KClRoaXMgbW9kdWxlIGlzIGV4cGVyaW1lbnRhbC4gTm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydApmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KCmltcG9ydCBjb2xsZWN0aW9ucwoKaW1wb3J0IGFwYWNoZV9iZWFtIGFzIGJlYW0KZnJvbSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkgaW1wb3J0IGJlYW1fcnVubmVyX2FwaV9wYjIKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlIGltcG9ydCBjYWNoZV9tYW5hZ2VyIGFzIGNhY2hlCgoKY2xhc3MgUGlwZWxpbmVBbmFseXplcihvYmplY3QpOgogIGRlZiBfX2luaXRfXyhzZWxmLCBjYWNoZV9tYW5hZ2VyLCBwaXBlbGluZV9wcm90bywgdW5kZXJseWluZ19ydW5uZXIsCiAgICAgICAgICAgICAgIG9wdGlvbnM9Tm9uZSwgZGVzaXJlZF9jYWNoZV9sYWJlbHM9Tm9uZSk6CiAgICAiIiJDb25zdHJ1Y3RvciBvZiBQaXBlbGluZUFuYW5seXplci4KCiAgICBBcmdzOgogICAgICBjYWNoZV9tYW5hZ2VyOiAoQ2FjaGVNYW5hZ2VyKQogICAgICBwaXBlbGluZV9wcm90bzogKFBpcGVsaW5lIHByb3RvKQogICAgICB1bmRlcmx5aW5nX3J1bm5lcjogKFBpcGVsaW5lUnVubmVyKQogICAgICBvcHRpb25zOiAoUGlwZWxpbmVPcHRpb25zKQogICAgICBkZXNpcmVkX2NhY2hlX2xhYmVsczogKFNldFtzdHJdKSBhIHNldCBvZiBsYWJlbHMgb2YgdGhlIFBDb2xsZWN0aW9uCiAgICAgICAgcXVlcmllZCBieSB0aGUgdXNlci4KICAgICIiIgogICAgc2VsZi5fY2FjaGVfbWFuYWdlciA9IGNhY2hlX21hbmFnZXIKICAgIHNlbGYuX3BpcGVsaW5lX3Byb3RvID0gcGlwZWxpbmVfcHJvdG8KICAgIHNlbGYuX2Rlc2lyZWRfY2FjaGVfbGFiZWxzID0gZGVzaXJlZF9jYWNoZV9sYWJlbHMgb3IgW10KCiAgICBzZWxmLl9waXBlbGluZSA9IGJlYW0ucGlwZWxpbmUuUGlwZWxpbmUuZnJvbV9ydW5uZXJfYXBpKAogICAgICAgIHNlbGYuX3BpcGVsaW5lX3Byb3RvLAogICAgICAgIHJ1bm5lcj11bmRlcmx5aW5nX3J1bm5lciwKICAgICAgICBvcHRpb25zPW9wdGlvbnMpCiAgICAjIGNvbnRleHQgcmV0dXJuZWQgZnJvbSB0b19ydW5uZXJfYXBpIGlzIG1vcmUgaW5mb3JtYXRpdmUgdGhhbiB0aGF0IHJldHVybmVkCiAgICAjIGZyb20gZnJvbV9ydW5uZXJfYXBpLgogICAgXywgc2VsZi5fY29udGV4dCA9IHNlbGYuX3BpcGVsaW5lLnRvX3J1bm5lcl9hcGkoCiAgICAgICAgcmV0dXJuX2NvbnRleHQ9VHJ1ZSwgdXNlX2Zha2VfY29kZXJzPVRydWUpCiAgICBzZWxmLl9waXBlbGluZV9pbmZvID0gUGlwZWxpbmVJbmZvKHNlbGYuX3BpcGVsaW5lX3Byb3RvLmNvbXBvbmVudHMpCgogICAgIyBSZXN1bHQgb2YgdGhlIGFuYWx5c2lzIHRoYXQgY2FuIGJlIHF1ZXJpZWQgYnkgdGhlIHVzZXIuCiAgICBzZWxmLl9waXBlbGluZV9wcm90b190b19leGVjdXRlID0gTm9uZQogICAgc2VsZi5fdG9wX2xldmVsX3JlZmVyZW5jZWRfcGNvbGxfaWRzID0gTm9uZQogICAgc2VsZi5fdG9wX2xldmVsX3JlcXVpcmVkX3RyYW5zZm9ybXMgPSBOb25lCgogICAgc2VsZi5fY2FjaGVzX3VzZWQgPSBzZXQoKQogICAgc2VsZi5fcmVhZF9jYWNoZV9pZHMgPSBzZXQoKQogICAgc2VsZi5fd3JpdGVfY2FjaGVfaWRzID0gc2V0KCkKCiAgICAjIHVzZWQgZm9yIF9pbnNlcnRfcHJvZHVjaW5nX3RyYW5zZm9ybXMoKQogICAgc2VsZi5fYW5hbHl6ZWRfcGNvbGxfaWRzID0gc2V0KCkKCiAgICBzZWxmLl9hbmFseXplX3BpcGVsaW5lKCkKCiAgZGVmIF9hbmFseXplX3BpcGVsaW5lKHNlbGYpOgogICAgIiIiQW5hbHl6ZXMgdGhlIHBpcGVsaW5lIGFuZCBzZXRzIHRoZSB2YXJpYWJsZXMgdGhhdCBjYW4gYmUgcXVlcmllZC4KCiAgICBUaGlzIGZ1bmN0aW9uIGNvbnN0cnVjdCBQaXBlbGluZSBwcm90byB0byBleGVjdXRlIGJ5CiAgICAgIDEuIFN0YXJ0IGZyb20gdGFyZ2V0IFBDb2xsZWN0aW9ucyBhbmQgcmVjdXJzaXZlbHkgaW5zZXJ0IHRoZSBwcm9kdWNpbmcKICAgICAgICAgUFRyYW5zZm9ybXMgb2YgdGhvc2UgUENvbGxlY3Rpb25zLCB3aGVyZSB0aGUgcHJvZHVjaW5nIFBUcmFuc2Zvcm1zIGFyZQogICAgICAgICBlaXRoZXIgUmVhZENhY2hlIG9yIFBUcmFuc2Zvcm1zIGluIHRoZSBvcmlnaW5hbCBwaXBlbGluZS4KICAgICAgMi4gQXBwZW5kIFdyaXRlQ2FjaGUgUFRyYW5zZm9yc20gaW4gdGhlIHBpcGVsaW5lLgoKICAgIEFmdGVyIHJ1bm5pbmcgdGhpcyBmdW5jdGlvbiwgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgd2lsbCBiZSBzZXQ6CiAgICAgIHNlbGYuX3BpcGVsaW5lX3Byb3RvX3RvX2V4ZWN1dGUKICAgICAgc2VsZi5fdG9wX2xldmVsX3JlZmVyZW5jZWRfcGNvbGxfaWRzCiAgICAgIHNlbGYuX3RvcF9sZXZlbF9yZXF1aXJlZF90cmFuc2Zvcm1zCiAgICAgIHNlbGYuX2NhY2hlc191c2VkCiAgICAgIHNlbGYuX3JlYWRfY2FjaGVfaWRzCiAgICAgIHNlbGYuX3dyaXRlX2NhY2hlX2lkcwogICAgIiIiCiAgICAjIFdlIGZpbHRlciBQVHJhbnNmb3JtcyB0byBiZSBleGVjdXRlZCBib3R0b20tdXAgZnJvbSB0aGVzZSBQQ29sbGVjdGlvbnMuCiAgICBkZXNpcmVkX3Bjb2xsZWN0aW9ucyA9IHNlbGYuX2Rlc2lyZWRfcGNvbGxlY3Rpb25zKHNlbGYuX3BpcGVsaW5lX2luZm8pCgogICAgcmVxdWlyZWRfdHJhbnNmb3JtcyA9IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCkKICAgIHRvcF9sZXZlbF9yZXF1aXJlZF90cmFuc2Zvcm1zID0gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKQoKICAgIGZvciBwY29sbF9pZCBpbiBkZXNpcmVkX3Bjb2xsZWN0aW9uczoKICAgICAgIyBUT0RPKHFpbnllbGkpOiBDb2xsZWN0aW9ucyBjb25zdW1lZCBieSBuby1vdXRwdXQgdHJhbnNmb3Jtcy4KICAgICAgc2VsZi5faW5zZXJ0X3Byb2R1Y2luZ190cmFuc2Zvcm1zKHBjb2xsX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRfdHJhbnNmb3JtcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcF9sZXZlbF9yZXF1aXJlZF90cmFuc2Zvcm1zKQoKICAgIHRvcF9sZXZlbF9yZWZlcmVuY2VkX3Bjb2xsX2lkcyA9IHNlbGYuX3JlZmVyZW5jZWRfcGNvbGxfaWRzKAogICAgICAgIHRvcF9sZXZlbF9yZXF1aXJlZF90cmFuc2Zvcm1zKQoKICAgIGZvciBwY29sbF9pZCBpbiBzZWxmLl9waXBlbGluZV9pbmZvLmFsbF9wY29sbGVjdGlvbnMoKToKICAgICAgaWYgbm90IHBjb2xsX2lkIGluIHRvcF9sZXZlbF9yZWZlcmVuY2VkX3Bjb2xsX2lkczoKICAgICAgICBjb250aW51ZQoKICAgICAgaWYgKHBjb2xsX2lkIGluIGRlc2lyZWRfcGNvbGxlY3Rpb25zCiAgICAgICAgICBhbmQgbm90IHBjb2xsX2lkIGluIHNlbGYuX2NhY2hlc191c2VkKToKICAgICAgICBzZWxmLl9pbnNlcnRfY2FjaGluZ190cmFuc2Zvcm1zKHBjb2xsX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRfdHJhbnNmb3JtcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcF9sZXZlbF9yZXF1aXJlZF90cmFuc2Zvcm1zKQoKICAgICAgaWYgbm90IHNlbGYuX2NhY2hlX21hbmFnZXIuZXhpc3RzKAogICAgICAgICAgJ3NhbXBsZScsIHNlbGYuX3BpcGVsaW5lX2luZm8uY2FjaGVfbGFiZWwocGNvbGxfaWQpKToKICAgICAgICBzZWxmLl9pbnNlcnRfY2FjaGluZ190cmFuc2Zvcm1zKHBjb2xsX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRfdHJhbnNmb3JtcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcF9sZXZlbF9yZXF1aXJlZF90cmFuc2Zvcm1zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlPVRydWUpCgogICAgcmVxdWlyZWRfdHJhbnNmb3Jtc1snX3Jvb3QnXSA9IGJlYW1fcnVubmVyX2FwaV9wYjIuUFRyYW5zZm9ybSgKICAgICAgICBzdWJ0cmFuc2Zvcm1zPWxpc3QodG9wX2xldmVsX3JlcXVpcmVkX3RyYW5zZm9ybXMpKQoKICAgIHJlZmVyZW5jZWRfcGNvbGxfaWRzID0gc2VsZi5fcmVmZXJlbmNlZF9wY29sbF9pZHMoCiAgICAgICAgcmVxdWlyZWRfdHJhbnNmb3JtcykKICAgIHJlZmVyZW5jZWRfcGNvbGxlY3Rpb25zID0ge30KICAgIGZvciBwY29sbF9pZCBpbiByZWZlcmVuY2VkX3Bjb2xsX2lkczoKICAgICAgb2JqID0gc2VsZi5fY29udGV4dC5wY29sbGVjdGlvbnMuZ2V0X2J5X2lkKHBjb2xsX2lkKQogICAgICBwcm90byA9IHNlbGYuX2NvbnRleHQucGNvbGxlY3Rpb25zLmdldF9wcm90byhvYmopCiAgICAgIHJlZmVyZW5jZWRfcGNvbGxlY3Rpb25zW3Bjb2xsX2lkXSA9IHByb3RvCgogICAgcGlwZWxpbmVfdG9fZXhlY3V0ZSA9IGJlYW1fcnVubmVyX2FwaV9wYjIuUGlwZWxpbmUoKQogICAgcGlwZWxpbmVfdG9fZXhlY3V0ZS5yb290X3RyYW5zZm9ybV9pZHNbOl0gPSBbJ19yb290J10KICAgIHNldF9wcm90b19tYXAocGlwZWxpbmVfdG9fZXhlY3V0ZS5jb21wb25lbnRzLnRyYW5zZm9ybXMsCiAgICAgICAgICAgICAgICAgIHJlcXVpcmVkX3RyYW5zZm9ybXMpCiAgICBzZXRfcHJvdG9fbWFwKHBpcGVsaW5lX3RvX2V4ZWN1dGUuY29tcG9uZW50cy5wY29sbGVjdGlvbnMsCiAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZWRfcGNvbGxlY3Rpb25zKQogICAgc2V0X3Byb3RvX21hcChwaXBlbGluZV90b19leGVjdXRlLmNvbXBvbmVudHMuY29kZXJzLAogICAgICAgICAgICAgICAgICBzZWxmLl9jb250ZXh0LnRvX3J1bm5lcl9hcGkoKS5jb2RlcnMpCiAgICBzZXRfcHJvdG9fbWFwKHBpcGVsaW5lX3RvX2V4ZWN1dGUuY29tcG9uZW50cy53aW5kb3dpbmdfc3RyYXRlZ2llcywKICAgICAgICAgICAgICAgICAgc2VsZi5fY29udGV4dC50b19ydW5uZXJfYXBpKCkud2luZG93aW5nX3N0cmF0ZWdpZXMpCgogICAgc2VsZi5fcGlwZWxpbmVfcHJvdG9fdG9fZXhlY3V0ZSA9IHBpcGVsaW5lX3RvX2V4ZWN1dGUKICAgIHNlbGYuX3RvcF9sZXZlbF9yZWZlcmVuY2VkX3Bjb2xsX2lkcyA9IHRvcF9sZXZlbF9yZWZlcmVuY2VkX3Bjb2xsX2lkcwogICAgc2VsZi5fdG9wX2xldmVsX3JlcXVpcmVkX3RyYW5zZm9ybXMgPSB0b3BfbGV2ZWxfcmVxdWlyZWRfdHJhbnNmb3JtcwoKICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAjIEdldHRlcnMKICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiAgZGVmIHBpcGVsaW5lX2luZm8oc2VsZik6CiAgICAiIiJSZXR1cm4gUGlwZWxpbmVJbmZvIG9mIHRoZSBvcmlnaW5hbCBwaXBlbGluZS4KICAgICIiIgogICAgcmV0dXJuIHNlbGYuX3BpcGVsaW5lX2luZm8KCiAgZGVmIHBpcGVsaW5lX3Byb3RvX3RvX2V4ZWN1dGUoc2VsZik6CiAgICAiIiJSZXR1cm5zIFBpcGVsaW5lIHByb3RvIHRvIGJlIGV4ZWN1dGVkLgogICAgIiIiCiAgICByZXR1cm4gc2VsZi5fcGlwZWxpbmVfcHJvdG9fdG9fZXhlY3V0ZQoKICBkZWYgdGxfcmVmZXJlbmNlZF9wY29sbF9pZHMoc2VsZik6CiAgICAiIiJSZXR1cm5zIGEgc2V0IG9mIFBDb2xsZWN0aW9uIElEcyByZWZlcmVuY2VkIGJ5IHRvcCBsZXZlbCBQVHJhbnNmb3Jtcy4KICAgICIiIgogICAgcmV0dXJuIHNlbGYuX3RvcF9sZXZlbF9yZWZlcmVuY2VkX3Bjb2xsX2lkcwoKICBkZWYgdGxfcmVxdWlyZWRfdHJhbnNfaWRzKHNlbGYpOgogICAgIiIiUmV0dXJucyBhIHNldCBvZiByZXF1aXJlZCB0b3AgbGV2ZWwgUFRyYW5zZm9ybSBJRHMuCiAgICAiIiIKICAgIHJldHVybiBsaXN0KHNlbGYuX3RvcF9sZXZlbF9yZXF1aXJlZF90cmFuc2Zvcm1zKQoKICBkZWYgY2FjaGVzX3VzZWQoc2VsZik6CiAgICAiIiJSZXR1cm5zIGEgc2V0IG9mIFBDb2xsZWN0aW9uIElEcyB0byByZWFkIGZyb20gY2FjaGUuCiAgICAiIiIKICAgIHJldHVybiBzZWxmLl9jYWNoZXNfdXNlZAoKICBkZWYgcmVhZF9jYWNoZV9pZHMoc2VsZik6CiAgICAiIiJSZXR1cm4gYSBzZXQgb2YgUmVhZENhY2hlIFBUcmFuc2Zvcm0gSURzIGluc2VydGVkLgogICAgIiIiCiAgICByZXR1cm4gc2VsZi5fcmVhZF9jYWNoZV9pZHMKCiAgZGVmIHdyaXRlX2NhY2hlX2lkcyhzZWxmKToKICAgICIiIlJldHVybiBhIHNldCBvZiBXcml0ZUNhY2hlIFBUcmFuc2Zvcm0gSURzIGluc2VydGVkLgogICAgIiIiCiAgICByZXR1cm4gc2VsZi5fd3JpdGVfY2FjaGVfaWRzCgogICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICMgSGVscGVyIG1ldGhvZHMgZm9yIF9hbmFseXplX3BpcGVsaW5lKCkKICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiAgZGVmIF9pbnNlcnRfcHJvZHVjaW5nX3RyYW5zZm9ybXMoc2VsZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY29sbF9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZF90cmFuc2Zvcm1zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcF9sZXZlbF9yZXF1aXJlZF90cmFuc2Zvcm1zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlYWY9RmFsc2UpOgogICAgIiIiSW5zZXJ0cyBQVHJhbnNmb3JtcyBwcm9kdWNpbmcgdGhlIGdpdmVuIFBDb2xsZWN0aW9uIGludG8gdGhlIGRpY3RzLgoKICAgIEFyZ3M6CiAgICAgIHBjb2xsX2lkOiAoc3RyKQogICAgICByZXF1aXJlZF90cmFuc2Zvcm1zOiAoRGljdFtzdHIsIFBUcmFuc2Zvcm0gcHJvdG9dKQogICAgICB0b3BfbGV2ZWxfcmVxdWlyZWRfdHJhbnNmb3JtczogKERpY3Rbc3RyLCBQVHJhbnNmb3JtIHByb3RvXSkKICAgICAgbGVhZjogKGJvb2wpIHdoZXRoZXIgdGhlIFBDb2xsZWN0aW9uIHNob3VsZCBiZSByZWFkIGZyb20gY2FjaGUgaWYgdGhlCiAgICAgICAgY2FjaGUgZXhpc3RzLgoKICAgIE1vZGlmaWVzOgogICAgICByZXF1aXJlZF90cmFuc2Zvcm1zCiAgICAgIHRvcF9sZXZlbF9yZXF1aXJlZF90cmFuc2Zvcm1zCiAgICAgIHNlbGYuX3JlYWRfY2FjaGVfaWRzCiAgICAiIiIKICAgIGlmIHBjb2xsX2lkIGluIHNlbGYuX2FuYWx5emVkX3Bjb2xsX2lkczoKICAgICAgcmV0dXJuCiAgICBlbHNlOgogICAgICBzZWxmLl9hbmFseXplZF9wY29sbF9pZHMuYWRkKHBjb2xsX2lkKQoKICAgIGNhY2hlX2xhYmVsID0gc2VsZi5fcGlwZWxpbmVfaW5mby5jYWNoZV9sYWJlbChwY29sbF9pZCkKICAgIGlmIHNlbGYuX2NhY2hlX21hbmFnZXIuZXhpc3RzKCdmdWxsJywgY2FjaGVfbGFiZWwpIGFuZCBub3QgbGVhZjoKICAgICAgc2VsZi5fY2FjaGVzX3VzZWQuYWRkKHBjb2xsX2lkKQoKICAgICAgY2FjaGVfbGFiZWwgPSBzZWxmLl9waXBlbGluZV9pbmZvLmNhY2hlX2xhYmVsKHBjb2xsX2lkKQogICAgICBkdW1teV9wY29sbCA9IChzZWxmLl9waXBlbGluZQogICAgICAgICAgICAgICAgICAgICB8ICdMb2FkJXMnICUgY2FjaGVfbGFiZWwgPj4gY2FjaGUuUmVhZENhY2hlKAogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2FjaGVfbWFuYWdlciwgY2FjaGVfbGFiZWwpKQoKICAgICAgcmVhZF9jYWNoZSA9IHNlbGYuX3RvcF9sZXZlbF9wcm9kdWNlcihkdW1teV9wY29sbCkKICAgICAgcmVhZF9jYWNoZV9pZCA9IHNlbGYuX2NvbnRleHQudHJhbnNmb3Jtcy5nZXRfaWQocmVhZF9jYWNoZSkKICAgICAgcmVhZF9jYWNoZV9wcm90byA9IHJlYWRfY2FjaGUudG9fcnVubmVyX2FwaShzZWxmLl9jb250ZXh0KQogICAgICByZWFkX2NhY2hlX3Byb3RvLm91dHB1dHNbJ05vbmUnXSA9IHBjb2xsX2lkCiAgICAgIHRvcF9sZXZlbF9yZXF1aXJlZF90cmFuc2Zvcm1zW3JlYWRfY2FjaGVfaWRdID0gcmVhZF9jYWNoZV9wcm90bwogICAgICBzZWxmLl9yZWFkX2NhY2hlX2lkcy5hZGQocmVhZF9jYWNoZV9pZCkKCiAgICAgIGZvciB0cmFuc2Zvcm0gaW4gc2VsZi5faW5jbHVkZV9zdWJ0cmFuc2Zvcm1zKHJlYWRfY2FjaGUpOgogICAgICAgIHRyYW5zZm9ybV9pZCA9IHNlbGYuX2NvbnRleHQudHJhbnNmb3Jtcy5nZXRfaWQodHJhbnNmb3JtKQogICAgICAgIHRyYW5zZm9ybV9wcm90byA9IHRyYW5zZm9ybS50b19ydW5uZXJfYXBpKHNlbGYuX2NvbnRleHQpCiAgICAgICAgaWYgZHVtbXlfcGNvbGwgaW4gdHJhbnNmb3JtLm91dHB1dHMudmFsdWVzKCk6CiAgICAgICAgICB0cmFuc2Zvcm1fcHJvdG8ub3V0cHV0c1snTm9uZSddID0gcGNvbGxfaWQKICAgICAgICByZXF1aXJlZF90cmFuc2Zvcm1zW3RyYW5zZm9ybV9pZF0gPSB0cmFuc2Zvcm1fcHJvdG8KCiAgICBlbHNlOgogICAgICBwY29sbCA9IHNlbGYuX2NvbnRleHQucGNvbGxlY3Rpb25zLmdldF9ieV9pZChwY29sbF9pZCkKCiAgICAgIHRvcF9sZXZlbF90cmFuc2Zvcm0gPSBzZWxmLl90b3BfbGV2ZWxfcHJvZHVjZXIocGNvbGwpCiAgICAgIGZvciB0cmFuc2Zvcm0gaW4gc2VsZi5faW5jbHVkZV9zdWJ0cmFuc2Zvcm1zKHRvcF9sZXZlbF90cmFuc2Zvcm0pOgogICAgICAgIHRyYW5zZm9ybV9pZCA9IHNlbGYuX2NvbnRleHQudHJhbnNmb3Jtcy5nZXRfaWQodHJhbnNmb3JtKQogICAgICAgIHRyYW5zZm9ybV9wcm90byA9IHNlbGYuX2NvbnRleHQudHJhbnNmb3Jtcy5nZXRfcHJvdG8odHJhbnNmb3JtKQoKICAgICAgICAjIEluc2VydGluZyBhbmNlc3RvciBQVHJhbnNmb3Jtcy4KICAgICAgICBmb3IgaW5wdXRfaWQgaW4gdHJhbnNmb3JtX3Byb3RvLmlucHV0cy52YWx1ZXMoKToKICAgICAgICAgIHNlbGYuX2luc2VydF9wcm9kdWNpbmdfdHJhbnNmb3JtcyhpbnB1dF9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZF90cmFuc2Zvcm1zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcF9sZXZlbF9yZXF1aXJlZF90cmFuc2Zvcm1zKQogICAgICAgIHJlcXVpcmVkX3RyYW5zZm9ybXNbdHJhbnNmb3JtX2lkXSA9IHRyYW5zZm9ybV9wcm90bwoKICAgICAgIyBNdXN0IGJlIGluc2VydGVkIGFmdGVyIGluc2VydGluZyBhbmNlc3RvciBQVHJhbnNmb3Jtcy4KICAgICAgdG9wX2xldmVsX2lkID0gc2VsZi5fY29udGV4dC50cmFuc2Zvcm1zLmdldF9pZCh0b3BfbGV2ZWxfdHJhbnNmb3JtKQogICAgICB0b3BfbGV2ZWxfcHJvdG8gPSBzZWxmLl9jb250ZXh0LnRyYW5zZm9ybXMuZ2V0X3Byb3RvKHRvcF9sZXZlbF90cmFuc2Zvcm0pCiAgICAgIHRvcF9sZXZlbF9yZXF1aXJlZF90cmFuc2Zvcm1zW3RvcF9sZXZlbF9pZF0gPSB0b3BfbGV2ZWxfcHJvdG8KCiAgZGVmIF9pbnNlcnRfY2FjaGluZ190cmFuc2Zvcm1zKHNlbGYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjb2xsX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZF90cmFuc2Zvcm1zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BfbGV2ZWxfcmVxdWlyZWRfdHJhbnNmb3JtcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlPUZhbHNlKToKICAgICIiIkluc2VydHMgUFRyYW5zZm9ybXMgY2FjaGluZyB0aGUgZ2l2ZW4gUENvbGxlY3Rpb24gaW50byB0aGUgZGljdHMuCgogICAgQXJnczoKICAgICAgcGNvbGxfaWQ6IChzdHIpCiAgICAgIHJlcXVpcmVkX3RyYW5zZm9ybXM6IChEaWN0W3N0ciwgUFRyYW5zZm9ybSBwcm90b10pCiAgICAgIHRvcF9sZXZlbF9yZXF1aXJlZF90cmFuc2Zvcm1zOiAoRGljdFtzdHIsIFBUcmFuc2Zvcm0gcHJvdG9dKQogICAgICBzYW1wbGU6IChib29sKSB3aGV0aGVyIHRvIGNhY2hlIHNhbXBsZSBvciBjYWNoZSBmdWxsLgoKICAgIE1vZGlmaWVzOgogICAgICByZXF1aXJlZF90cmFuc2Zvcm1zCiAgICAgIHRvcF9sZXZlbF9yZXF1aXJlZF90cmFuc2Zvcm1zCiAgICAgIHNlbGYuX3dyaXRlX2NhY2hlX2lkcwogICAgIiIiCiAgICBjYWNoZV9sYWJlbCA9IHNlbGYuX3BpcGVsaW5lX2luZm8uY2FjaGVfbGFiZWwocGNvbGxfaWQpCiAgICBwY29sbCA9IHNlbGYuX2NvbnRleHQucGNvbGxlY3Rpb25zLmdldF9ieV9pZChwY29sbF9pZCkKCiAgICBpZiBub3Qgc2FtcGxlOgogICAgICBwZG9uZSA9IHBjb2xsIHwgJ0NhY2hlRnVsbCVzJyAlIGNhY2hlX2xhYmVsID4+IGNhY2hlLldyaXRlQ2FjaGUoCiAgICAgICAgICBzZWxmLl9jYWNoZV9tYW5hZ2VyLCBjYWNoZV9sYWJlbCkKICAgIGVsc2U6CiAgICAgIHBkb25lID0gcGNvbGwgfCAnQ2FjaGVTYW1wbGUlcycgJSBjYWNoZV9sYWJlbCA+PiBjYWNoZS5Xcml0ZUNhY2hlKAogICAgICAgICAgc2VsZi5fY2FjaGVfbWFuYWdlciwgY2FjaGVfbGFiZWwsIHNhbXBsZT1UcnVlLAogICAgICAgICAgc2FtcGxlX3NpemU9MTApCgogICAgd3JpdGVfY2FjaGUgPSBzZWxmLl90b3BfbGV2ZWxfcHJvZHVjZXIocGRvbmUpCiAgICB3cml0ZV9jYWNoZV9pZCA9IHNlbGYuX2NvbnRleHQudHJhbnNmb3Jtcy5nZXRfaWQod3JpdGVfY2FjaGUpCiAgICB3cml0ZV9jYWNoZV9wcm90byA9IHdyaXRlX2NhY2hlLnRvX3J1bm5lcl9hcGkoc2VsZi5fY29udGV4dCkKICAgIHRvcF9sZXZlbF9yZXF1aXJlZF90cmFuc2Zvcm1zW3dyaXRlX2NhY2hlX2lkXSA9IHdyaXRlX2NhY2hlX3Byb3RvCiAgICBzZWxmLl93cml0ZV9jYWNoZV9pZHMuYWRkKHdyaXRlX2NhY2hlX2lkKQoKICAgIGZvciB0cmFuc2Zvcm0gaW4gc2VsZi5faW5jbHVkZV9zdWJ0cmFuc2Zvcm1zKHdyaXRlX2NhY2hlKToKICAgICAgdHJhbnNmb3JtX2lkID0gc2VsZi5fY29udGV4dC50cmFuc2Zvcm1zLmdldF9pZCh0cmFuc2Zvcm0pCiAgICAgIHRyYW5zZm9ybV9wcm90byA9IHRyYW5zZm9ybS50b19ydW5uZXJfYXBpKHNlbGYuX2NvbnRleHQpCiAgICAgIHJlcXVpcmVkX3RyYW5zZm9ybXNbdHJhbnNmb3JtX2lkXSA9IHRyYW5zZm9ybV9wcm90bwoKICBkZWYgX2Rlc2lyZWRfcGNvbGxlY3Rpb25zKHNlbGYsIHBpcGVsaW5lX2luZm8pOgogICAgIiIiUmV0dXJucyBJRHMgb2YgZGVzaXJlZCAocXVlcmllZCBvciBsZWFmKSBQQ29sbGVjdGlvbnMuCgogICAgQXJnczoKICAgICAgcGlwZWxpbmVfaW5mbzogKFBpcGVsaW5lSW5mbykgaW5mbyBvZiB0aGUgb3JpZ2luYWwgcGlwZWxpbmUuCgogICAgUmV0dXJuczoKICAgICAgKFNldFtzdHJdKSBhIHNldCBvZiBQQ29sbGVjdGlvbnMgSURzIG9mIGVpdGhlciBsZWFmIFBDb2xsZWN0aW9ucyBvcgogICAgICBQQ29sbGVjdGlvbnMgcmVmZXJlbmNlZCBieSB0aGUgdXNlci4gVGhlc2UgUENvbGxlY3Rpb25zIHNob3VsZCBiZSBjYWNoZWQKICAgICAgYXQgdGhlIGVuZCBvZiBwaXBlbGluZSBleGVjdXRpb24uCiAgICAiIiIKICAgIGRlc2lyZWRfcGNvbGxlY3Rpb25zID0gc2V0KHBpcGVsaW5lX2luZm8ubGVhZl9wY29sbGVjdGlvbnMoKSkKICAgIGZvciBwY29sbF9pZCBpbiBwaXBlbGluZV9pbmZvLmFsbF9wY29sbGVjdGlvbnMoKToKICAgICAgY2FjaGVfbGFiZWwgPSBwaXBlbGluZV9pbmZvLmNhY2hlX2xhYmVsKHBjb2xsX2lkKQoKICAgICAgaWYgY2FjaGVfbGFiZWwgaW4gc2VsZi5fZGVzaXJlZF9jYWNoZV9sYWJlbHM6CiAgICAgICAgZGVzaXJlZF9wY29sbGVjdGlvbnMuYWRkKHBjb2xsX2lkKQogICAgcmV0dXJuIGRlc2lyZWRfcGNvbGxlY3Rpb25zCgogIGRlZiBfcmVmZXJlbmNlZF9wY29sbF9pZHMoc2VsZiwgcmVxdWlyZWRfdHJhbnNmb3Jtcyk6CiAgICAiIiJSZXR1cm5zIFBDb2xsZWN0aW9uIElEcyByZWZlcmVuY2VkIGluIHRoZSBnaXZlbiB0cmFuc2Zvcm1zLgoKICAgIEFyZ3M6CiAgICAgIHRyYW5zZm9ybXM6IChEaWN0W3N0ciwgUFRyYW5zZm9ybSBwcm90b10pIG1hcHBpbmcgSUQgdG8gcHJvdG9zLgoKICAgIFJldHVybnM6CiAgICAgIChTZXRbc3RyXSkgUENvbGxlY3Rpb24gSURzIHJlZmVyZW5jZWQgYXMgZWl0aGVyIGlucHV0IG9yIG91dHB1dCBpbiB0aGUKICAgICAgICBnaXZlbiB0cmFuc2Zvcm1zLgogICAgIiIiCiAgICByZWZlcmVuY2VkX3Bjb2xsX2lkcyA9IHNldCgpCiAgICBmb3IgdHJhbnNmb3JtX3Byb3RvIGluIHJlcXVpcmVkX3RyYW5zZm9ybXMudmFsdWVzKCk6CiAgICAgIGZvciBwY29sbF9pZCBpbiB0cmFuc2Zvcm1fcHJvdG8uaW5wdXRzLnZhbHVlcygpOgogICAgICAgIHJlZmVyZW5jZWRfcGNvbGxfaWRzLmFkZChwY29sbF9pZCkKCiAgICAgIGZvciBwY29sbF9pZCBpbiB0cmFuc2Zvcm1fcHJvdG8ub3V0cHV0cy52YWx1ZXMoKToKICAgICAgICByZWZlcmVuY2VkX3Bjb2xsX2lkcy5hZGQocGNvbGxfaWQpCgogICAgcmV0dXJuIHJlZmVyZW5jZWRfcGNvbGxfaWRzCgogIGRlZiBfdG9wX2xldmVsX3Byb2R1Y2VyKHNlbGYsIHBjb2xsKToKICAgICIiIkdpdmVuIGEgUENvbGxlY3Rpb24sIHJldHVybnMgdGhlIHRvcCBsZXZlbCBwcm9kdWNpbmcgUFRyYW5zZm9ybS4KCiAgICBBcmdzOgogICAgICBwY29sbDogKFBDb2xsZWN0aW9uKQoKICAgIFJldHVybnM6CiAgICAgIChQVHJhbnNmb3JtKSB0b3AgbGV2ZWwgcHJvZHVjaW5nIFBUcmFuc2Zvcm0gb2YgcGNvbGwuCiAgICAiIiIKICAgIHRvcF9sZXZlbF90cmFuc2Zvcm0gPSBwY29sbC5wcm9kdWNlcgogICAgd2hpbGUgdG9wX2xldmVsX3RyYW5zZm9ybS5wYXJlbnQucGFyZW50OgogICAgICB0b3BfbGV2ZWxfdHJhbnNmb3JtID0gdG9wX2xldmVsX3RyYW5zZm9ybS5wYXJlbnQKICAgIHJldHVybiB0b3BfbGV2ZWxfdHJhbnNmb3JtCgogIGRlZiBfaW5jbHVkZV9zdWJ0cmFuc2Zvcm1zKHNlbGYsIHRyYW5zZm9ybSk6CiAgICAiIiJEZXB0aC1maXJzdCB5aWVsZCB0aGUgUFRyYW5zZm9ybSBpdHNlbGYgYW5kIGl0cyBzdWIgdHJhbnNmb3Jtcy4KCiAgICBBcmdzOgogICAgICB0cmFuc2Zvcm06IChQVHJhbnNmb3JtKQoKICAgIFlpZWxkczoKICAgICAgVGhlIGlucHV0IFBUcmFuc2Zvcm0gaXRzZWxmIGFuZCBhbGwgaXRzIHN1YiB0cmFuc2Zvcm1zLgogICAgIiIiCiAgICB5aWVsZCB0cmFuc2Zvcm0KICAgIGZvciBzdWJ0cmFuc2Zvcm0gaW4gdHJhbnNmb3JtLnBhcnRzWzo6LTFdOgogICAgICBmb3IgeWllbGRlZCBpbiBzZWxmLl9pbmNsdWRlX3N1YnRyYW5zZm9ybXMoc3VidHJhbnNmb3JtKToKICAgICAgICB5aWVsZCB5aWVsZGVkCgoKY2xhc3MgUGlwZWxpbmVJbmZvKG9iamVjdCk6CiAgIiIiUHJvdmlkZXMgYWNjZXNzIHRvIHBpcGVsaW5lIG1ldGFkYXRhLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgcHJvdG8pOgogICAgc2VsZi5fcHJvdG8gPSBwcm90bwogICAgc2VsZi5fcHJvZHVjZXJzID0ge30KICAgIHNlbGYuX2NvbnN1bWVycyA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGxpc3QpCiAgICBmb3IgdHJhbnNmb3JtX2lkLCB0cmFuc2Zvcm1fcHJvdG8gaW4gc2VsZi5fcHJvdG8udHJhbnNmb3Jtcy5pdGVtcygpOgogICAgICBpZiB0cmFuc2Zvcm1fcHJvdG8uc3VidHJhbnNmb3JtczoKICAgICAgICBjb250aW51ZQogICAgICBmb3IgdGFnLCBwY29sbF9pZCBpbiB0cmFuc2Zvcm1fcHJvdG8ub3V0cHV0cy5pdGVtcygpOgogICAgICAgIHNlbGYuX3Byb2R1Y2Vyc1twY29sbF9pZF0gPSB0cmFuc2Zvcm1faWQsIHRhZwogICAgICBmb3IgcGNvbGxfaWQgaW4gdHJhbnNmb3JtX3Byb3RvLmlucHV0cy52YWx1ZXMoKToKICAgICAgICBzZWxmLl9jb25zdW1lcnNbcGNvbGxfaWRdLmFwcGVuZCh0cmFuc2Zvcm1faWQpCiAgICBzZWxmLl9kZXJpdmF0aW9ucyA9IHt9CgogIGRlZiBhbGxfcGNvbGxlY3Rpb25zKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX3Byb3RvLnBjb2xsZWN0aW9ucy5rZXlzKCkKCiAgZGVmIGxlYWZfcGNvbGxlY3Rpb25zKHNlbGYpOgogICAgZm9yIHBjb2xsX2lkIGluIHNlbGYuX3Byb3RvLnBjb2xsZWN0aW9uczoKICAgICAgaWYgbm90IHNlbGYuX2NvbnN1bWVyc1twY29sbF9pZF06CiAgICAgICAgeWllbGQgcGNvbGxfaWQKCiAgZGVmIHByb2R1Y2VyKHNlbGYsIHBjb2xsX2lkKToKICAgIHJldHVybiBzZWxmLl9wcm9kdWNlcnNbcGNvbGxfaWRdCgogIGRlZiBjYWNoZV9sYWJlbChzZWxmLCBwY29sbF9pZCk6CiAgICAiIiJSZXR1cm5zIHRoZSBjYWNoZSBsYWJlbCBnaXZlbiB0aGUgUENvbGxlY3Rpb24gSUQuIiIiCiAgICByZXR1cm4gc2VsZi5fZGVyaXZhdGlvbihwY29sbF9pZCkuY2FjaGVfbGFiZWwoKQoKICBkZWYgX2Rlcml2YXRpb24oc2VsZiwgcGNvbGxfaWQpOgogICAgaWYgcGNvbGxfaWQgbm90IGluIHNlbGYuX2Rlcml2YXRpb25zOgogICAgICB0cmFuc2Zvcm1faWQsIG91dHB1dF90YWcgPSBzZWxmLl9wcm9kdWNlcnNbcGNvbGxfaWRdCiAgICAgIHRyYW5zZm9ybV9wcm90byA9IHNlbGYuX3Byb3RvLnRyYW5zZm9ybXNbdHJhbnNmb3JtX2lkXQogICAgICBzZWxmLl9kZXJpdmF0aW9uc1twY29sbF9pZF0gPSBzZWxmLkRlcml2YXRpb24oewogICAgICAgICAgaW5wdXRfdGFnOiBzZWxmLl9kZXJpdmF0aW9uKGlucHV0X2lkKQogICAgICAgICAgZm9yIGlucHV0X3RhZywgaW5wdXRfaWQgaW4gdHJhbnNmb3JtX3Byb3RvLmlucHV0cy5pdGVtcygpCiAgICAgIH0sIHRyYW5zZm9ybV9wcm90bywgb3V0cHV0X3RhZykKICAgIHJldHVybiBzZWxmLl9kZXJpdmF0aW9uc1twY29sbF9pZF0KCiAgY2xhc3MgRGVyaXZhdGlvbihvYmplY3QpOgogICAgIiIiUmVjb3JkcyBkZXJpdmF0aW9uIGluZm8gb2YgYSBQQ29sbGVjdGlvbi4gSGVscGVyIGZvciBQaXBlbGluZUluZm8uIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGlucHV0cywgdHJhbnNmb3JtX3Byb3RvLCBvdXRwdXRfdGFnKToKICAgICAgIiIiQ29uc3RydWN0b3Igb2YgRGVyaXZhdGlvbi4KCiAgICAgIEFyZ3M6CiAgICAgICAgaW5wdXRzOiAoRGljdFtzdHIsIERlcml2YXRpb25dKSBtYXBzIFBDb2xsZWN0aW9uIG5hbWVzIHRvIERlcml2YXRpb25zLgogICAgICAgIHRyYW5zZm9ybV9wcm90bzogKFRyYW5zZm9ybSBwcm90bykgdGhlIHByb2R1Y2luZyBQVHJhbnNmb3JtLgogICAgICAgIG91dHB1dF90YWc6IChzdHIpIGxvY2FsIG5hbWUgb2YgdGhlIFBDb2xsZWN0aW9uIGluIGFuYWx5c2lzLgogICAgICAiIiIKICAgICAgc2VsZi5faW5wdXRzID0gaW5wdXRzCiAgICAgIHNlbGYuX3RyYW5zZm9ybV9pbmZvID0gewogICAgICAgICAgIyBUT0RPKHFpbnllbGkpOiByZW1vdmUgbmFtZSBmaWVsZCB3aGVuIGNvbGxpc2lvbiBpcyByZXNvbHZlZC4KICAgICAgICAgICduYW1lJzogdHJhbnNmb3JtX3Byb3RvLnVuaXF1ZV9uYW1lLAogICAgICAgICAgJ3Vybic6IHRyYW5zZm9ybV9wcm90by5zcGVjLnVybiwKICAgICAgICAgICdwYXlsb2FkJzogdHJhbnNmb3JtX3Byb3RvLnNwZWMucGF5bG9hZC5kZWNvZGUoJ2xhdGluMScpCiAgICAgIH0KICAgICAgc2VsZi5fb3V0cHV0X3RhZyA9IG91dHB1dF90YWcKICAgICAgc2VsZi5faGFzaCA9IE5vbmUKCiAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgc2VsZi5EZXJpdmF0aW9uKToKICAgICAgICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCiAgICAgICAgcmV0dXJuIChzZWxmLl9pbnB1dHMgPT0gb3RoZXIuX2lucHV0cyBhbmQKICAgICAgICAgICAgICAgIHNlbGYuX3RyYW5zZm9ybV9pbmZvID09IG90aGVyLl90cmFuc2Zvcm1faW5mbykKCiAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKICAgICAgIyBUT0RPKEJFQU0tNTk0OSk6IE5lZWRlZCBmb3IgUHl0aG9uIDIgY29tcGF0aWJpbGl0eS4KICAgICAgcmV0dXJuIG5vdCBzZWxmID09IG90aGVyCgogICAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgICBpZiBzZWxmLl9oYXNoIGlzIE5vbmU6CiAgICAgICAgc2VsZi5faGFzaCA9IChoYXNoKHR1cGxlKHNvcnRlZChzZWxmLl90cmFuc2Zvcm1faW5mby5pdGVtcygpKSkpCiAgICAgICAgICAgICAgICAgICAgICArIHN1bShoYXNoKHRhZykgKiBoYXNoKGlucHV0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRhZywgaW5wdXQgaW4gc2VsZi5faW5wdXRzLml0ZW1zKCkpCiAgICAgICAgICAgICAgICAgICAgICArIGhhc2goc2VsZi5fb3V0cHV0X3RhZykpCiAgICAgIHJldHVybiBzZWxmLl9oYXNoCgogICAgZGVmIGNhY2hlX2xhYmVsKHNlbGYpOgogICAgICAjIFRPRE8ocWlueWVsaSk6IENvbGxpc2lvbiByZXNpc3RhbmNlPwogICAgICByZXR1cm4gJ1Bjb2xsLSV4JyAlIGFicyhoYXNoKHNlbGYpKQoKICAgIGRlZiBqc29uKHNlbGYpOgogICAgICByZXR1cm4gewogICAgICAgICAgJ2lucHV0cyc6IHNlbGYuX2lucHV0cywKICAgICAgICAgICd0cmFuc2Zvcm0nOiBzZWxmLl90cmFuc2Zvcm1faW5mbywKICAgICAgICAgICdvdXRwdXRfdGFnJzogc2VsZi5fb3V0cHV0X3RhZwogICAgICB9CgogICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICByZXR1cm4gc3RyKHNlbGYuanNvbigpKQoKCiMgVE9ETyhxaW55ZWxpKSBtb3ZlIHRvIHByb3RvX3V0aWxzCmRlZiBzZXRfcHJvdG9fbWFwKHByb3RvX21hcCwgbmV3X3ZhbHVlKToKICBwcm90b19tYXAuY2xlYXIoKQogIGZvciBrZXksIHZhbHVlIGluIG5ld192YWx1ZS5pdGVtcygpOgogICAgcHJvdG9fbWFwW2tleV0uQ29weUZyb20odmFsdWUpCn1ynIMAAChYJgAAAFBpcGVsaW5lQW5hbHl6ZXIuX3JlZmVyZW5jZWRfcGNvbGxfaWRzWAMAAABkZWZNPwFNUgGHWAwAAABQaXBlbGluZUluZm9YBQAAAGNsYXNzTXABTc0Bh1geAAAAUGlwZWxpbmVJbmZvLkRlcml2YXRpb24uX19lcV9fWAMAAABkZWZNrgFNswGHWBwAAABQaXBlbGluZUFuYWx5emVyLmNhY2hlc191c2VkWAMAAABkZWZLrkuyh1gmAAAAUGlwZWxpbmVBbmFseXplci50bF9yZXF1aXJlZF90cmFuc19pZHNYAwAAAGRlZkupS62HWBgAAABQaXBlbGluZUluZm8uY2FjaGVfbGFiZWxYAwAAAGRlZk2LAU2OAYdYHgAAAFBpcGVsaW5lSW5mby5sZWFmX3Bjb2xsZWN0aW9uc1gDAAAAZGVmTYMBTYcBh1ggAAAAUGlwZWxpbmVJbmZvLkRlcml2YXRpb24uX19pbml0X19YAwAAAGRlZk2cAU2tAYdYIAAAAFBpcGVsaW5lSW5mby5EZXJpdmF0aW9uLl9faGFzaF9fWAMAAABkZWZNuAFNvwGHWCsAAABQaXBlbGluZUFuYWx5emVyLl9pbnNlcnRfY2FjaGluZ190cmFuc2Zvcm1zWAMAAABkZWZNBAFNKwGHWCoAAABQaXBlbGluZUFuYWx5emVyLnBpcGVsaW5lX3Byb3RvX3RvX2V4ZWN1dGVYAwAAAGRlZkufS6OHWBcAAABQaXBlbGluZUluZm8uRGVyaXZhdGlvblgFAAAAY2xhc3NNmQFNzQGHWBgAAABQaXBlbGluZUluZm8uX2Rlcml2YXRpb25YAwAAAGRlZk2PAU2YAYdYJwAAAFBpcGVsaW5lQW5hbHl6ZXIuX2luY2x1ZGVfc3VidHJhbnNmb3Jtc1gDAAAAZGVmTWEBTW4Bh1gdAAAAUGlwZWxpbmVJbmZvLmFsbF9wY29sbGVjdGlvbnNYAwAAAGRlZk2AAU2CAYdYHgAAAFBpcGVsaW5lQW5hbHl6ZXIucGlwZWxpbmVfaW5mb1gDAAAAZGVmS5pLnodYEAAAAFBpcGVsaW5lQW5hbHl6ZXJYBQAAAGNsYXNzSyJNbgGHWB4AAABQaXBlbGluZUluZm8uRGVyaXZhdGlvbi5fX25lX19YAwAAAGRlZk20AU23AYdYGQAAAFBpcGVsaW5lQW5hbHl6ZXIuX19pbml0X19YAwAAAGRlZksjS0qHWCAAAABQaXBlbGluZUFuYWx5emVyLndyaXRlX2NhY2hlX2lkc1gDAAAAZGVmS7hLvIdYHwAAAFBpcGVsaW5lQW5hbHl6ZXIucmVhZF9jYWNoZV9pZHNYAwAAAGRlZkuzS7eHWBUAAABQaXBlbGluZUluZm8ucHJvZHVjZXJYAwAAAGRlZk2IAU2KAYdYHAAAAFBpcGVsaW5lSW5mby5EZXJpdmF0aW9uLmpzb25YAwAAAGRlZk3EAU3KAYdYKAAAAFBpcGVsaW5lQW5hbHl6ZXIudGxfcmVmZXJlbmNlZF9wY29sbF9pZHNYAwAAAGRlZkukS6iHWBUAAABQaXBlbGluZUluZm8uX19pbml0X19YAwAAAGRlZk1zAU1/AYdYIAAAAFBpcGVsaW5lSW5mby5EZXJpdmF0aW9uLl9fcmVwcl9fWAMAAABkZWZNywFNzQGHWCMAAABQaXBlbGluZUluZm8uRGVyaXZhdGlvbi5jYWNoZV9sYWJlbFgDAAAAZGVmTcABTcMBh1giAAAAUGlwZWxpbmVBbmFseXplci5fYW5hbHl6ZV9waXBlbGluZVgDAAAAZGVmS0tLlYdYLQAAAFBpcGVsaW5lQW5hbHl6ZXIuX2luc2VydF9wcm9kdWNpbmdfdHJhbnNmb3Jtc1gDAAAAZGVmS8FNAwGHWA0AAABzZXRfcHJvdG9fbWFwWAMAAABkZWZN0AFN1AGHWCQAAABQaXBlbGluZUFuYWx5emVyLl90b3BfbGV2ZWxfcHJvZHVjZXJYAwAAAGRlZk1TAU1gAYdYJgAAAFBpcGVsaW5lQW5hbHl6ZXIuX2Rlc2lyZWRfcGNvbGxlY3Rpb25zWAMAAABkZWZNLAFNPgGHdX1ynYMAAChYKAAAAFBpcGVsaW5lQW5hbHl6ZXIudGxfcmVmZXJlbmNlZF9wY29sbF9pZHNYMQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfYW5hbHl6ZXJynoMAAFgeAAAAUGlwZWxpbmVBbmFseXplci5waXBlbGluZV9pbmZvap6DAABYDAAAAFBpcGVsaW5lSW5mb2qegwAAWBAAAABQaXBlbGluZUFuYWx5emVyap6DAABYIwAAAFBpcGVsaW5lSW5mby5EZXJpdmF0aW9uLmNhY2hlX2xhYmVsap6DAABYDQAAAHNldF9wcm90b19tYXBqnoMAAFggAAAAUGlwZWxpbmVBbmFseXplci53cml0ZV9jYWNoZV9pZHNqnoMAAFgcAAAAUGlwZWxpbmVBbmFseXplci5jYWNoZXNfdXNlZGqegwAAWB8AAABQaXBlbGluZUFuYWx5emVyLnJlYWRfY2FjaGVfaWRzap6DAABYJgAAAFBpcGVsaW5lQW5hbHl6ZXIudGxfcmVxdWlyZWRfdHJhbnNfaWRzap6DAABYGAAAAFBpcGVsaW5lSW5mby5jYWNoZV9sYWJlbGqegwAAWB4AAABQaXBlbGluZUluZm8ubGVhZl9wY29sbGVjdGlvbnNqnoMAAFgcAAAAUGlwZWxpbmVJbmZvLkRlcml2YXRpb24uanNvbmqegwAAWB0AAABQaXBlbGluZUluZm8uYWxsX3Bjb2xsZWN0aW9uc2qegwAAWBcAAABQaXBlbGluZUluZm8uRGVyaXZhdGlvbmqegwAAWCoAAABQaXBlbGluZUFuYWx5emVyLnBpcGVsaW5lX3Byb3RvX3RvX2V4ZWN1dGVqnoMAAFgVAAAAUGlwZWxpbmVJbmZvLnByb2R1Y2Vyap6DAAB1an1pAABYMQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfYW5hbHl6ZXJyn4MAAIWBcqCDAAB9cqGDAABidHKigwAAVT1hcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jb25zdW1lcl90cmFja2luZ19waXBlbGluZV92aXNpdG9yKFhUCQAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJDb25zdW1lclRyYWNraW5nUGlwZWxpbmVWaXNpdG9yLCBhIFBpcGVsaW5lVmlzaXRvciBvYmplY3QuIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgcHZhbHVlCmZyb20gYXBhY2hlX2JlYW0ucGlwZWxpbmUgaW1wb3J0IFBpcGVsaW5lVmlzaXRvcgoKCmNsYXNzIENvbnN1bWVyVHJhY2tpbmdQaXBlbGluZVZpc2l0b3IoUGlwZWxpbmVWaXNpdG9yKToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIFZpc2l0b3IgZm9yIGV4dHJhY3RpbmcgdmFsdWUtY29uc3VtZXIgcmVsYXRpb25zIGZyb20gdGhlIGdyYXBoLgoKICBUcmFja3MgdGhlIEFwcGxpZWRQVHJhbnNmb3JtcyB0aGF0IGNvbnN1bWUgZWFjaCBQVmFsdWUgaW4gdGhlIFBpcGVsaW5lLiBUaGlzCiAgaXMgdXNlZCB0byBzY2hlZHVsZSBjb25zdW1pbmcgUFRyYW5zZm9ybXMgdG8gY29uc3VtZSBpbnB1dCBhZnRlciB0aGUgdXBzdHJlYW0KICB0cmFuc2Zvcm0gaGFzIHByb2R1Y2VkIGFuZCBjb21taXR0ZWQgb3V0cHV0LgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZik6CiAgICBzZWxmLnZhbHVlX3RvX2NvbnN1bWVycyA9IHt9ICAjIE1hcCBmcm9tIFBWYWx1ZSB0byBbQXBwbGllZFBUcmFuc2Zvcm1dLgogICAgc2VsZi5yb290X3RyYW5zZm9ybXMgPSBzZXQoKSAgIyBzZXQgb2YgKHJvb3QpIEFwcGxpZWRQVHJhbnNmb3Jtcy4KICAgIHNlbGYudmlld3MgPSBbXSAgICAgICAgICAgICAgICMgbGlzdCBvZiBzaWRlIGlucHV0cy4KICAgIHNlbGYuc3RlcF9uYW1lcyA9IHt9ICAgICAgICAgICMgTWFwIGZyb20gQXBwbGllZFBUcmFuc2Zvcm0gdG8gU3RyaW5nLgoKICAgIHNlbGYuX251bV90cmFuc2Zvcm1zID0gMAoKICBkZWYgdmlzaXRfdHJhbnNmb3JtKHNlbGYsIGFwcGxpZWRfcHRyYW5zZm9ybSk6CiAgICBpbnB1dHMgPSBsaXN0KGFwcGxpZWRfcHRyYW5zZm9ybS5pbnB1dHMpCiAgICBpZiBpbnB1dHM6CiAgICAgIGZvciBpbnB1dF92YWx1ZSBpbiBpbnB1dHM6CiAgICAgICAgaWYgaXNpbnN0YW5jZShpbnB1dF92YWx1ZSwgcHZhbHVlLlBCZWdpbik6CiAgICAgICAgICBzZWxmLnJvb3RfdHJhbnNmb3Jtcy5hZGQoYXBwbGllZF9wdHJhbnNmb3JtKQogICAgICAgIGlmIGlucHV0X3ZhbHVlIG5vdCBpbiBzZWxmLnZhbHVlX3RvX2NvbnN1bWVyczoKICAgICAgICAgIHNlbGYudmFsdWVfdG9fY29uc3VtZXJzW2lucHV0X3ZhbHVlXSA9IFtdCiAgICAgICAgc2VsZi52YWx1ZV90b19jb25zdW1lcnNbaW5wdXRfdmFsdWVdLmFwcGVuZChhcHBsaWVkX3B0cmFuc2Zvcm0pCiAgICBlbHNlOgogICAgICBzZWxmLnJvb3RfdHJhbnNmb3Jtcy5hZGQoYXBwbGllZF9wdHJhbnNmb3JtKQogICAgc2VsZi5zdGVwX25hbWVzW2FwcGxpZWRfcHRyYW5zZm9ybV0gPSAncyVkJyAlIChzZWxmLl9udW1fdHJhbnNmb3JtcykKICAgIHNlbGYuX251bV90cmFuc2Zvcm1zICs9IDEKICAgIGZvciBzaWRlX2lucHV0IGluIGFwcGxpZWRfcHRyYW5zZm9ybS5zaWRlX2lucHV0czoKICAgICAgc2VsZi52aWV3cy5hcHBlbmQoc2lkZV9pbnB1dCkKfXKjgwAAKFgvAAAAQ29uc3VtZXJUcmFja2luZ1BpcGVsaW5lVmlzaXRvci52aXNpdF90cmFuc2Zvcm1YAwAAAGRlZkssSzuHWCgAAABDb25zdW1lclRyYWNraW5nUGlwZWxpbmVWaXNpdG9yLl9faW5pdF9fWAMAAABkZWZLJEsrh1gfAAAAQ29uc3VtZXJUcmFja2luZ1BpcGVsaW5lVmlzaXRvclgFAAAAY2xhc3NLGks7h3V9cqSDAAAoWC8AAABDb25zdW1lclRyYWNraW5nUGlwZWxpbmVWaXNpdG9yLnZpc2l0X3RyYW5zZm9ybWoQXgAAWB8AAABDb25zdW1lclRyYWNraW5nUGlwZWxpbmVWaXNpdG9yahBeAAB1an1pAABYPQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmNvbnN1bWVyX3RyYWNraW5nX3BpcGVsaW5lX3Zpc2l0b3JypYMAAIWBcqaDAAB9cqeDAABidFUeYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWNiYXNlKFiXDgAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiIKVGhlIGNsYXNzZXMgaW4gdGhpcyBmaWxlIGFyZSBpbnRlcmZhY2VzIGZvciBtZXRyaWNzLiBUaGV5IGFyZSBub3QgaW50ZW5kZWQKdG8gYmUgc3ViY2xhc3NlZCBvciBjcmVhdGVkIGRpcmVjdGx5IGJ5IHVzZXJzLiBUbyB3b3JrIHdpdGggYW5kIGFjY2VzcyBtZXRyaWNzLAp1c2VycyBzaG91bGQgdXNlIHRoZSBjbGFzc2VzIGFuZCBtZXRob2RzIGV4cG9zZWQgaW4gbWV0cmljLnB5LgoKQXZhaWxhYmxlIGNsYXNzZXM6CgotIE1ldHJpYyAtIEJhc2UgaW50ZXJmYWNlIG9mIGEgbWV0cmljcyBvYmplY3QuCi0gQ291bnRlciAtIENvdW50ZXIgbWV0cmljIGludGVyZmFjZS4gQWxsb3dzIGEgY291bnQgdG8gYmUgaW5jcmVtZW50ZWQgb3IKICAgIGRlY3JlbWVudGVkIGR1cmluZyBwaXBlbGluZSBleGVjdXRpb24uCi0gRGlzdHJpYnV0aW9uIC0gRGlzdHJpYnV0aW9uIE1ldHJpYyBpbnRlcmZhY2UuIEFsbG93cyBzdGF0aXN0aWNzIGFib3V0IHRoZQogICAgZGlzdHJpYnV0aW9uIG9mIGEgdmFyaWFibGUgdG8gYmUgY29sbGVjdGVkIGR1cmluZyBwaXBlbGluZSBleGVjdXRpb24uCi0gR2F1Z2UgLSBHYXVnZSBNZXRyaWMgaW50ZXJmYWNlLiBBbGxvd3MgdG8gdHJhY2sgdGhlIGxhdGVzdCB2YWx1ZSBvZiBhCiAgICB2YXJpYWJsZSBkdXJpbmcgcGlwZWxpbmUgZXhlY3V0aW9uLgotIE1ldHJpY05hbWUgLSBOYW1lc3BhY2UgYW5kIG5hbWUgdXNlZCB0byByZWZlciB0byBhIE1ldHJpYy4KIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0Cgpmcm9tIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaSBpbXBvcnQgYmVhbV9mbl9hcGlfcGIyCgpfX2FsbF9fID0gWydNZXRyaWMnLCAnQ291bnRlcicsICdEaXN0cmlidXRpb24nLCAnR2F1Z2UnLCAnTWV0cmljTmFtZSddCgoKY2xhc3MgTWV0cmljTmFtZShvYmplY3QpOgogICIiIlRoZSBuYW1lIG9mIGEgbWV0cmljLgoKICBUaGUgbmFtZSBvZiBhIG1ldHJpYyBjb25zaXN0cyBvZiBhIG5hbWVzcGFjZSBhbmQgYSBuYW1lLiBUaGUgbmFtZXNwYWNlCiAgYWxsb3dzIGdyb3VwaW5nIHJlbGF0ZWQgbWV0cmljcyB0b2dldGhlciBhbmQgYWxzbyBwcmV2ZW50cyBjb2xsaXNpb25zCiAgYmV0d2VlbiBtdWx0aXBsZSBtZXRyaWNzIG9mIHRoZSBzYW1lIG5hbWUuCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWVzcGFjZSwgbmFtZSk6CiAgICAiIiJJbml0aWFsaXplcyBgYE1ldHJpY05hbWVgYC4KCiAgICBBcmdzOgogICAgICBuYW1lc3BhY2U6IEEgc3RyaW5nIHdpdGggdGhlIG5hbWVzcGFjZSBvZiBhIG1ldHJpYy4KICAgICAgbmFtZTogQSBzdHJpbmcgd2l0aCB0aGUgbmFtZSBvZiBhIG1ldHJpYy4KICAgICIiIgogICAgaWYgbm90IG5hbWVzcGFjZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignTWV0cmljIG5hbWVzcGFjZSBtdXN0IGJlIG5vbi1lbXB0eScpCiAgICBpZiBub3QgbmFtZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignTWV0cmljIG5hbWUgbXVzdCBiZSBub24tZW1wdHknKQogICAgc2VsZi5uYW1lc3BhY2UgPSBuYW1lc3BhY2UKICAgIHNlbGYubmFtZSA9IG5hbWUKCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gKHNlbGYubmFtZXNwYWNlID09IG90aGVyLm5hbWVzcGFjZSBhbmQKICAgICAgICAgICAgc2VsZi5uYW1lID09IG90aGVyLm5hbWUpCgogIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgogICAgIyBUT0RPKEJFQU0tNTk0OSk6IE5lZWRlZCBmb3IgUHl0aG9uIDIgY29tcGF0aWJpbGl0eS4KICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgoKICBkZWYgX19zdHJfXyhzZWxmKToKICAgIHJldHVybiAnTWV0cmljTmFtZShuYW1lc3BhY2U9e30sIG5hbWU9e30pJy5mb3JtYXQoCiAgICAgICAgc2VsZi5uYW1lc3BhY2UsIHNlbGYubmFtZSkKCiAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgcmV0dXJuIGhhc2goKHNlbGYubmFtZXNwYWNlLCBzZWxmLm5hbWUpKQoKICBkZWYgdG9fcnVubmVyX2FwaShzZWxmKToKICAgIHJldHVybiBiZWFtX2ZuX2FwaV9wYjIuTWV0cmljcy5Vc2VyLk1ldHJpY05hbWUoCiAgICAgICAgbmFtZXNwYWNlPXNlbGYubmFtZXNwYWNlLCBuYW1lPXNlbGYubmFtZSkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBmcm9tX3J1bm5lcl9hcGkocHJvdG8pOgogICAgcmV0dXJuIE1ldHJpY05hbWUocHJvdG8ubmFtZXNwYWNlLCBwcm90by5uYW1lKQoKCmNsYXNzIE1ldHJpYyhvYmplY3QpOgogICIiIkJhc2UgaW50ZXJmYWNlIG9mIGEgbWV0cmljIG9iamVjdC4iIiIKICBwYXNzCgoKY2xhc3MgQ291bnRlcihNZXRyaWMpOgogICIiIkNvdW50ZXIgbWV0cmljIGludGVyZmFjZS4gQWxsb3dzIGEgY291bnQgdG8gYmUgaW5jcmVtZW50ZWQvZGVjcmVtZW50ZWQKICBkdXJpbmcgcGlwZWxpbmUgZXhlY3V0aW9uLiIiIgogIGRlZiBpbmMoc2VsZiwgbj0xKToKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIGRlYyhzZWxmLCBuPTEpOgogICAgc2VsZi5pbmMoLW4pCgoKY2xhc3MgRGlzdHJpYnV0aW9uKE1ldHJpYyk6CiAgIiIiRGlzdHJpYnV0aW9uIE1ldHJpYyBpbnRlcmZhY2UuCgogIEFsbG93cyBzdGF0aXN0aWNzIGFib3V0IHRoZSBkaXN0cmlidXRpb24gb2YgYSB2YXJpYWJsZSB0byBiZSBjb2xsZWN0ZWQgZHVyaW5nCiAgcGlwZWxpbmUgZXhlY3V0aW9uLiIiIgoKICBkZWYgdXBkYXRlKHNlbGYsIHZhbHVlKToKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCgpjbGFzcyBHYXVnZShNZXRyaWMpOgogICIiIkdhdWdlIE1ldHJpYyBpbnRlcmZhY2UuCgogIEFsbG93cyB0cmFja2luZyBvZiB0aGUgbGF0ZXN0IHZhbHVlIG9mIGEgdmFyaWFibGUgZHVyaW5nIHBpcGVsaW5lCiAgZXhlY3V0aW9uLiIiIgoKICBkZWYgc2V0KHNlbGYsIHZhbHVlKToKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKfXKogwAAKFgTAAAATWV0cmljTmFtZS5fX2hhc2hfX1gDAAAAZGVmS01LT4dYBwAAAENvdW50ZXJYBQAAAGNsYXNzS15LZodYBQAAAEdhdWdlWAUAAABjbGFzc0tyS3qHWAoAAABNZXRyaWNOYW1lWAUAAABjbGFzc0ssS1eHWBIAAABNZXRyaWNOYW1lLl9fc3RyX19YAwAAAGRlZktJS0yHWBoAAABNZXRyaWNOYW1lLmZyb21fcnVubmVyX2FwaVgDAAAAZGVmS1RLV4dYGAAAAE1ldHJpY05hbWUudG9fcnVubmVyX2FwaVgDAAAAZGVmS1BLU4dYEwAAAE1ldHJpY05hbWUuX19pbml0X19YAwAAAGRlZkszS0CHWBEAAABNZXRyaWNOYW1lLl9fZXFfX1gDAAAAZGVmS0FLRIdYDAAAAERpc3RyaWJ1dGlvblgFAAAAY2xhc3NLaEtwh1gLAAAAQ291bnRlci5pbmNYAwAAAGRlZkthS2OHWAkAAABHYXVnZS5zZXRYAwAAAGRlZkt4S3qHWAYAAABNZXRyaWNYBQAAAGNsYXNzS1lLXIdYCwAAAENvdW50ZXIuZGVjWAMAAABkZWZLZEtmh1gRAAAATWV0cmljTmFtZS5fX25lX19YAwAAAGRlZktFS0iHWBMAAABEaXN0cmlidXRpb24udXBkYXRlWAMAAABkZWZLbktwh3V9cqmDAAAoWAcAAABDb3VudGVyaptnAABYBQAAAEdhdWdlaptnAABYCgAAAE1ldHJpY05hbWVqm2cAAFgaAAAATWV0cmljTmFtZS5mcm9tX3J1bm5lcl9hcGlqm2cAAFgYAAAATWV0cmljTmFtZS50b19ydW5uZXJfYXBpaptnAABYCQAAAEdhdWdlLnNldGqbZwAAWAwAAABEaXN0cmlidXRpb25qm2cAAFgLAAAAQ291bnRlci5pbmNqm2cAAFgGAAAATWV0cmljaptnAABYCwAAAENvdW50ZXIuZGVjaptnAABYEwAAAERpc3RyaWJ1dGlvbi51cGRhdGVqm2cAAHVqfWkAAFgeAAAAYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWNiYXNlcqqDAACFgXKrgwAAfXKsgwAAYnRVJGFwYWNoZV9iZWFtLnJ1bm5lcnMucGlwZWxpbmVfY29udGV4dChYxBQAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiVXRpbGl0eSBjbGFzcyBmb3Igc2VyaWFsaXppbmcgcGlwZWxpbmVzIHZpYSB0aGUgcnVubmVyIEFQSS4KCkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0Cgpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBjb2RlcnMKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgcGlwZWxpbmUKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgcHZhbHVlCmZyb20gYXBhY2hlX2JlYW0uaW50ZXJuYWwgaW1wb3J0IHBpY2tsZXIKZnJvbSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkgaW1wb3J0IGJlYW1fZm5fYXBpX3BiMgpmcm9tIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaSBpbXBvcnQgYmVhbV9ydW5uZXJfYXBpX3BiMgpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IGNvcmUKCgpjbGFzcyBFbnZpcm9ubWVudChvYmplY3QpOgogICIiIkEgd3JhcHBlciBhcm91bmQgdGhlIGVudmlyb25tZW50IHByb3RvLgoKICBQcm92aWRlcyBjb25zaXN0ZW5jeSB3aXRoIGhvdyB0aGUgb3RoZXIgY29tcG9uZW50ZXMgYXJlIGFjY2Vzc2VkLgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBwcm90byk6CiAgICBzZWxmLl9wcm90byA9IHByb3RvCgogIGRlZiB0b19ydW5uZXJfYXBpKHNlbGYsIGNvbnRleHQpOgogICAgcmV0dXJuIHNlbGYuX3Byb3RvCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZnJvbV9ydW5uZXJfYXBpKHByb3RvLCBjb250ZXh0KToKICAgIHJldHVybiBFbnZpcm9ubWVudChwcm90bykKCgpjbGFzcyBfUGlwZWxpbmVDb250ZXh0TWFwKG9iamVjdCk6CiAgIiIiVGhpcyBpcyBhIGJpLWRpcmVjdGlvbmFsIG1hcCBiZXR3ZWVuIG9iamVjdHMgYW5kIGlkcy4KCiAgVW5kZXIgdGhlIGhvb2QgaXQgZW5jb2RlcyBhbmQgZGVjb2RlcyB0aGVzZSBvYmplY3RzIGludG8gcnVubmVyIEFQSQogIHJlcHJlc2VudGF0aW9ucy4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgY29udGV4dCwgb2JqX3R5cGUsIHByb3RvX21hcD1Ob25lKToKICAgIHNlbGYuX3BpcGVsaW5lX2NvbnRleHQgPSBjb250ZXh0CiAgICBzZWxmLl9vYmpfdHlwZSA9IG9ial90eXBlCiAgICBzZWxmLl9vYmpfdG9faWQgPSB7fQogICAgc2VsZi5faWRfdG9fb2JqID0ge30KICAgIHNlbGYuX2lkX3RvX3Byb3RvID0gZGljdChwcm90b19tYXApIGlmIHByb3RvX21hcCBlbHNlIHt9CiAgICBzZWxmLl9jb3VudGVyID0gMAoKICBkZWYgX3VuaXF1ZV9yZWYoc2VsZiwgb2JqPU5vbmUsIGxhYmVsPU5vbmUpOgogICAgc2VsZi5fY291bnRlciArPSAxCiAgICByZXR1cm4gInJlZl8lc18lc18lcyIgJSAoCiAgICAgICAgc2VsZi5fb2JqX3R5cGUuX19uYW1lX18sIGxhYmVsIG9yIHR5cGUob2JqKS5fX25hbWVfXywgc2VsZi5fY291bnRlcikKCiAgZGVmIHBvcHVsYXRlX21hcChzZWxmLCBwcm90b19tYXApOgogICAgZm9yIGlkLCBwcm90byBpbiBzZWxmLl9pZF90b19wcm90by5pdGVtcygpOgogICAgICBwcm90b19tYXBbaWRdLkNvcHlGcm9tKHByb3RvKQoKICBkZWYgZ2V0X2lkKHNlbGYsIG9iaiwgbGFiZWw9Tm9uZSk6CiAgICBpZiBvYmogbm90IGluIHNlbGYuX29ial90b19pZDoKICAgICAgaWQgPSBzZWxmLl91bmlxdWVfcmVmKG9iaiwgbGFiZWwpCiAgICAgIHNlbGYuX2lkX3RvX29ialtpZF0gPSBvYmoKICAgICAgc2VsZi5fb2JqX3RvX2lkW29ial0gPSBpZAogICAgICBzZWxmLl9pZF90b19wcm90b1tpZF0gPSBvYmoudG9fcnVubmVyX2FwaShzZWxmLl9waXBlbGluZV9jb250ZXh0KQogICAgcmV0dXJuIHNlbGYuX29ial90b19pZFtvYmpdCgogIGRlZiBnZXRfcHJvdG8oc2VsZiwgb2JqLCBsYWJlbD1Ob25lKToKICAgIHJldHVybiBzZWxmLl9pZF90b19wcm90b1tzZWxmLmdldF9pZChvYmosIGxhYmVsKV0KCiAgZGVmIGdldF9ieV9pZChzZWxmLCBpZCk6CiAgICBpZiBpZCBub3QgaW4gc2VsZi5faWRfdG9fb2JqOgogICAgICBzZWxmLl9pZF90b19vYmpbaWRdID0gc2VsZi5fb2JqX3R5cGUuZnJvbV9ydW5uZXJfYXBpKAogICAgICAgICAgc2VsZi5faWRfdG9fcHJvdG9baWRdLCBzZWxmLl9waXBlbGluZV9jb250ZXh0KQogICAgcmV0dXJuIHNlbGYuX2lkX3RvX29ialtpZF0KCiAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGlkKToKICAgIHJldHVybiBzZWxmLmdldF9ieV9pZChpZCkKCiAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBpZCk6CiAgICByZXR1cm4gaWQgaW4gc2VsZi5faWRfdG9fcHJvdG8KCgpjbGFzcyBQaXBlbGluZUNvbnRleHQob2JqZWN0KToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIFVzZWQgZm9yIGFjY2Vzc2luZyBhbmQgY29uc3RydWN0aW5nIHRoZSByZWZlcmVuY2VkIG9iamVjdHMgb2YgYSBQaXBlbGluZS4KICAiIiIKCiAgX0NPTVBPTkVOVF9UWVBFUyA9IHsKICAgICAgJ3RyYW5zZm9ybXMnOiBwaXBlbGluZS5BcHBsaWVkUFRyYW5zZm9ybSwKICAgICAgJ3Bjb2xsZWN0aW9ucyc6IHB2YWx1ZS5QQ29sbGVjdGlvbiwKICAgICAgJ2NvZGVycyc6IGNvZGVycy5Db2RlciwKICAgICAgJ3dpbmRvd2luZ19zdHJhdGVnaWVzJzogY29yZS5XaW5kb3dpbmcsCiAgICAgICdlbnZpcm9ubWVudHMnOiBFbnZpcm9ubWVudCwKICB9CgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwgcHJvdG89Tm9uZSwgZGVmYXVsdF9lbnZpcm9ubWVudD1Ob25lLCB1c2VfZmFrZV9jb2RlcnM9RmFsc2UsCiAgICAgIGl0ZXJhYmxlX3N0YXRlX3JlYWQ9Tm9uZSwgaXRlcmFibGVfc3RhdGVfd3JpdGU9Tm9uZSk6CiAgICBpZiBpc2luc3RhbmNlKHByb3RvLCBiZWFtX2ZuX2FwaV9wYjIuUHJvY2Vzc0J1bmRsZURlc2NyaXB0b3IpOgogICAgICBwcm90byA9IGJlYW1fcnVubmVyX2FwaV9wYjIuQ29tcG9uZW50cygKICAgICAgICAgIGNvZGVycz1kaWN0KHByb3RvLmNvZGVycy5pdGVtcygpKSwKICAgICAgICAgIHdpbmRvd2luZ19zdHJhdGVnaWVzPWRpY3QocHJvdG8ud2luZG93aW5nX3N0cmF0ZWdpZXMuaXRlbXMoKSksCiAgICAgICAgICBlbnZpcm9ubWVudHM9ZGljdChwcm90by5lbnZpcm9ubWVudHMuaXRlbXMoKSkpCiAgICBmb3IgbmFtZSwgY2xzIGluIHNlbGYuX0NPTVBPTkVOVF9UWVBFUy5pdGVtcygpOgogICAgICBzZXRhdHRyKAogICAgICAgICAgc2VsZiwgbmFtZSwgX1BpcGVsaW5lQ29udGV4dE1hcCgKICAgICAgICAgICAgICBzZWxmLCBjbHMsIGdldGF0dHIocHJvdG8sIG5hbWUsIE5vbmUpKSkKICAgIGlmIGRlZmF1bHRfZW52aXJvbm1lbnQ6CiAgICAgIHNlbGYuX2RlZmF1bHRfZW52aXJvbm1lbnRfaWQgPSBzZWxmLmVudmlyb25tZW50cy5nZXRfaWQoCiAgICAgICAgICBFbnZpcm9ubWVudChkZWZhdWx0X2Vudmlyb25tZW50KSwgbGFiZWw9J2RlZmF1bHRfZW52aXJvbm1lbnQnKQogICAgZWxzZToKICAgICAgc2VsZi5fZGVmYXVsdF9lbnZpcm9ubWVudF9pZCA9IE5vbmUKICAgIHNlbGYudXNlX2Zha2VfY29kZXJzID0gdXNlX2Zha2VfY29kZXJzCiAgICBzZWxmLml0ZXJhYmxlX3N0YXRlX3JlYWQgPSBpdGVyYWJsZV9zdGF0ZV9yZWFkCiAgICBzZWxmLml0ZXJhYmxlX3N0YXRlX3dyaXRlID0gaXRlcmFibGVfc3RhdGVfd3JpdGUKCiAgIyBJZiBmYWtlIGNvZGVycyBhcmUgcmVxdWVzdGVkLCByZXR1cm4gYSBwaWNrbGVkIHZlcnNpb24gb2YgdGhlIGVsZW1lbnQgdHlwZQogICMgcmF0aGVyIHRoYW4gYW4gYWN0dWFsIGNvZGVyLiBUaGUgZWxlbWVudCB0eXBlIGlzIHJlcXVpcmVkIGZvciBzb21lIHJ1bm5lcnMsCiAgIyBhcyB3ZWxsIGFzIHBlcmZvcm1pbmcgYSByb3VuZC10cmlwIHRocm91Z2ggcHJvdG9zLgogICMgVE9ETyhCRUFNLTI3MTcpOiBSZW1vdmUgb25jZSB0aGlzIGlzIG5vIGxvbmdlciBuZWVkZWQuCiAgZGVmIGNvZGVyX2lkX2Zyb21fZWxlbWVudF90eXBlKHNlbGYsIGVsZW1lbnRfdHlwZSk6CiAgICBpZiBzZWxmLnVzZV9mYWtlX2NvZGVyczoKICAgICAgcmV0dXJuIHBpY2tsZXIuZHVtcHMoZWxlbWVudF90eXBlKQogICAgZWxzZToKICAgICAgcmV0dXJuIHNlbGYuY29kZXJzLmdldF9pZChjb2RlcnMucmVnaXN0cnkuZ2V0X2NvZGVyKGVsZW1lbnRfdHlwZSkpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZnJvbV9ydW5uZXJfYXBpKHByb3RvKToKICAgIHJldHVybiBQaXBlbGluZUNvbnRleHQocHJvdG8pCgogIGRlZiB0b19ydW5uZXJfYXBpKHNlbGYpOgogICAgY29udGV4dF9wcm90byA9IGJlYW1fcnVubmVyX2FwaV9wYjIuQ29tcG9uZW50cygpCiAgICBmb3IgbmFtZSBpbiBzZWxmLl9DT01QT05FTlRfVFlQRVM6CiAgICAgIGdldGF0dHIoc2VsZiwgbmFtZSkucG9wdWxhdGVfbWFwKGdldGF0dHIoY29udGV4dF9wcm90bywgbmFtZSkpCiAgICByZXR1cm4gY29udGV4dF9wcm90bwoKICBkZWYgZGVmYXVsdF9lbnZpcm9ubWVudF9pZChzZWxmKToKICAgIHJldHVybiBzZWxmLl9kZWZhdWx0X2Vudmlyb25tZW50X2lkCn1yrYMAAChYHwAAAFBpcGVsaW5lQ29udGV4dC5mcm9tX3J1bm5lcl9hcGlYAwAAAGRlZkuQS5OHWAsAAABFbnZpcm9ubWVudFgFAAAAY2xhc3NLJEsyh1gbAAAARW52aXJvbm1lbnQuZnJvbV9ydW5uZXJfYXBpWAMAAABkZWZLL0syh1ggAAAAX1BpcGVsaW5lQ29udGV4dE1hcC5fX2NvbnRhaW5zX19YAwAAAGRlZktfS2GHWCYAAABQaXBlbGluZUNvbnRleHQuZGVmYXVsdF9lbnZpcm9ubWVudF9pZFgDAAAAZGVmS5pLnIdYHQAAAF9QaXBlbGluZUNvbnRleHRNYXAuZ2V0X3Byb3RvWAMAAABkZWZLU0tVh1gaAAAAX1BpcGVsaW5lQ29udGV4dE1hcC5nZXRfaWRYAwAAAGRlZktLS1KHWBQAAABFbnZpcm9ubWVudC5fX2luaXRfX1gDAAAAZGVmSylLK4dYIAAAAF9QaXBlbGluZUNvbnRleHRNYXAucG9wdWxhdGVfbWFwWAMAAABkZWZLR0tKh1gYAAAAUGlwZWxpbmVDb250ZXh0Ll9faW5pdF9fWAMAAABkZWZLcUuFh1gfAAAAX1BpcGVsaW5lQ29udGV4dE1hcC5fX2dldGl0ZW1fX1gDAAAAZGVmS1xLXodYDwAAAFBpcGVsaW5lQ29udGV4dFgFAAAAY2xhc3NLY0uch1gqAAAAUGlwZWxpbmVDb250ZXh0LmNvZGVyX2lkX2Zyb21fZWxlbWVudF90eXBlWAMAAABkZWZLikuPh1gdAAAAX1BpcGVsaW5lQ29udGV4dE1hcC5nZXRfYnlfaWRYAwAAAGRlZktWS1uHWBkAAABFbnZpcm9ubWVudC50b19ydW5uZXJfYXBpWAMAAABkZWZLLEsuh1gdAAAAUGlwZWxpbmVDb250ZXh0LnRvX3J1bm5lcl9hcGlYAwAAAGRlZkuUS5mHWBwAAABfUGlwZWxpbmVDb250ZXh0TWFwLl9faW5pdF9fWAMAAABkZWZLOktBh1gTAAAAX1BpcGVsaW5lQ29udGV4dE1hcFgFAAAAY2xhc3NLNEthh1gfAAAAX1BpcGVsaW5lQ29udGV4dE1hcC5fdW5pcXVlX3JlZlgDAAAAZGVmS0JLRod1fXKugwAAKFgfAAAAUGlwZWxpbmVDb250ZXh0LmZyb21fcnVubmVyX2FwaVgkAAAAYXBhY2hlX2JlYW0ucnVubmVycy5waXBlbGluZV9jb250ZXh0cq+DAABYCwAAAEVudmlyb25tZW50aq+DAABYGwAAAEVudmlyb25tZW50LmZyb21fcnVubmVyX2FwaWqvgwAAWCYAAABQaXBlbGluZUNvbnRleHQuZGVmYXVsdF9lbnZpcm9ubWVudF9pZGqvgwAAWA8AAABQaXBlbGluZUNvbnRleHRqr4MAAFgqAAAAUGlwZWxpbmVDb250ZXh0LmNvZGVyX2lkX2Zyb21fZWxlbWVudF90eXBlaq+DAABYGQAAAEVudmlyb25tZW50LnRvX3J1bm5lcl9hcGlqr4MAAFgdAAAAUGlwZWxpbmVDb250ZXh0LnRvX3J1bm5lcl9hcGlqr4MAAHVqfWkAAFgkAAAAYXBhY2hlX2JlYW0ucnVubmVycy5waXBlbGluZV9jb250ZXh0crCDAACFgXKxgwAAfXKygwAAYnRys4MAAFUkYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS51dGlsKFjNDgAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgojIFV0aWxpdHkgZnVuY3Rpb25zICYgY2xhc3NlcyB0aGF0IGFyZSBfbm90XyBzcGVjaWZpYyB0byB0aGUgZGF0YXN0b3JlIGNsaWVudC4KIwojIEZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CmZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KCmltcG9ydCBtYXRoCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdApmcm9tIGJ1aWx0aW5zIGltcG9ydCByYW5nZQoKCmNsYXNzIE1vdmluZ1N1bShvYmplY3QpOgogICIiIkNsYXNzIHRoYXQga2VlcHMgdHJhY2sgb2YgYSByb2xsaW5nIHdpbmRvdyBzdW0uCgogIEZvciB1c2UgaW4gdHJhY2tpbmcgcmVjZW50IHBlcmZvcm1hbmNlIG9mIHRoZSBjb25uZWN0b3IuCgogIEludGVuZGVkIHRvIGJlIHNpbWlsYXIgdG8KICBvcmcuYXBhY2hlLmJlYW0uc2RrLnV0aWwuTW92aW5nRnVuY3Rpb24oLi4uLCBTdW0ub2ZMb25ncygpKSwgYnV0IGZvcgogIGNvbnZlbmllbmNlIHdlIGV4cG9zZSB0aGUgY291bnQgb2YgZW50cmllcyBhcyB3ZWxsIHNvIHRoaXMgZG91YmxlcyBhcyBhCiAgbW92aW5nIGF2ZXJhZ2UgdHJhY2tlci4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHdpbmRvd19tcywgYnVja2V0X21zKToKICAgIGlmIHdpbmRvd19tcyA8PSBidWNrZXRfbXMgb3IgYnVja2V0X21zIDw9IDA6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIndpbmRvd19tcyA+IGJ1Y2tldF9tcyA+IDAgcGxlYXNlIikKICAgIHNlbGYuX251bV9idWNrZXRzID0gaW50KG1hdGguY2VpbCh3aW5kb3dfbXMgLyBidWNrZXRfbXMpKQogICAgc2VsZi5fYnVja2V0X21zID0gYnVja2V0X21zCiAgICBzZWxmLl9SZXNldChub3c9MCkgICMgaW5pdGlhbGl6ZSB0aGUgbW92aW5nIHdpbmRvdyBtZW1iZXJzCgogIGRlZiBfUmVzZXQoc2VsZiwgbm93KToKICAgIHNlbGYuX2N1cnJlbnRfaW5kZXggPSAwICAjIHBvaW50ZXIgaW50byBzZWxmLl9idWNrZXRzCiAgICBzZWxmLl9jdXJyZW50X21zX3NpbmNlX2Vwb2NoID0gbWF0aC5mbG9vcigKICAgICAgICBub3cgLyBzZWxmLl9idWNrZXRfbXMpICogc2VsZi5fYnVja2V0X21zCgogICAgIyBfYnVja2V0cyBpcyBhIGxpc3Qgd2hlcmUgZWFjaCBlbGVtZW50IGlzIGEgbGlzdCBbc3VtLCBudW1fc2FtcGxlc10KICAgICMgVGhpcyBpcyBhIGNpcmN1bGFyIGJ1ZmZlciB3aGVyZQogICAgIyBbX2N1cnJlbnRfaW5kZXhdIHJlcHJlc2VudHMgdGhlIHRpbWUgcmFuZ2UKICAgICMgICAgIFtfY3VycmVudF9tc19zaW5jZV9lcG9jaCwgX2N1cnJlbnRfbXNfc2luY2VfZXBvY2grX2J1Y2tldF9tcykKICAgICMgW19jdXJyZW50X2luZGV4LTFdIHJlcHJlc2VudHMgaW1tZWRpYXRseSBwcmlvciB0aW1lIHJhbmdlCiAgICAjICAgICBbX2N1cnJlbnRfbXNfc2luY2VfZXBvY2gtX2J1Y2tldF9tcywgX2N1cnJlbnRfbXNfc2luY2VfZXBvY2gpCiAgICAjIGV0Yywgd3JhcHBpbmcgYXJvdW5kIGZyb20gdGhlIHN0YXJ0IHRvIHRoZSBlbmQgb2YgdGhlIGFycmF5LCBzbwogICAgIyBbX2N1cnJlbnRfaW5kZXgrMV0gaXMgdGhlIGVsZW1lbnQgcmVwcmVzZW50aW5nIHRoZSBvbGRlc3QgYnVja2V0LgogICAgc2VsZi5fYnVja2V0cyA9IFtbMCwgMF0gZm9yIF8gaW4gcmFuZ2UoMCwgc2VsZi5fbnVtX2J1Y2tldHMpXQoKICBkZWYgX0ZsdXNoKHNlbGYsIG5vdyk6CiAgICAiIiIKCiAgICBBcmdzOgogICAgICBub3c6IGludCwgbWlsbGlzZWNvbmRzIHNpbmNlIGVwb2NoCiAgICAiIiIKICAgIGlmIG5vdyA+PSAoc2VsZi5fY3VycmVudF9tc19zaW5jZV9lcG9jaAogICAgICAgICAgICAgICArIHNlbGYuX2J1Y2tldF9tcyAqIHNlbGYuX251bV9idWNrZXRzKToKICAgICAgIyBUaW1lIG1vdmVkIGZvcndhcmQgc28gZmFyIHRoYXQgYWxsIGN1cnJlbnRseSBoZWxkIGRhdGEgaXMgb3V0c2lkZSBvZgogICAgICAjIHRoZSB3aW5kb3cuICBJdCBpcyBmYXN0ZXIgdG8gc2ltcGx5IHJlc2V0IG91ciBkYXRhLgogICAgICBzZWxmLl9SZXNldChub3cpCiAgICAgIHJldHVybgoKICAgIHdoaWxlIG5vdyA+IHNlbGYuX2N1cnJlbnRfbXNfc2luY2VfZXBvY2ggKyBzZWxmLl9idWNrZXRfbXM6CiAgICAgICMgQWR2YW5jZSB0aW1lIGJ5IG9uZSBfYnVja2V0X21zLCBzZXR0aW5nIHRoZSBuZXcgYnVja2V0J3MgY291bnRzIHRvIDAuCiAgICAgIHNlbGYuX2N1cnJlbnRfbXNfc2luY2VfZXBvY2ggKz0gc2VsZi5fYnVja2V0X21zCiAgICAgIHNlbGYuX2N1cnJlbnRfaW5kZXggPSAoc2VsZi5fY3VycmVudF9pbmRleCsxKSAlIHNlbGYuX251bV9idWNrZXRzCiAgICAgIHNlbGYuX2J1Y2tldHNbc2VsZi5fY3VycmVudF9pbmRleF0gPSBbMCwgMF0KICAgICAgIyBJbnRlbnRpb25hbCBkZWFkIHJlY2tvbmluZyBoZXJlOyB3ZSBkb24ndCBjYXJlIGFib3V0IHN0YXlpbmcgcHJlY2lzZWx5CiAgICAgICMgYWxpZ25lZCB3aXRoIG11bHRpcGxlcyBvZiBfYnVja2V0X21zIHNpbmNlIHRoZSBlcG9jaCwgd2UganVzdCBuZWVkIG91cgogICAgICAjIGJ1Y2tldHMgdG8gcmVwcmVzZW50IHRoZSBtb3N0IHJlY2VudCBfd2luZG93X21zIHRpbWUgd2luZG93LgoKICBkZWYgc3VtKHNlbGYsIG5vdyk6CiAgICBzZWxmLl9GbHVzaChub3cpCiAgICByZXR1cm4gc3VtKGJ1Y2tldFswXSBmb3IgYnVja2V0IGluIHNlbGYuX2J1Y2tldHMpCgogIGRlZiBhZGQoc2VsZiwgbm93LCBpbmMpOgogICAgc2VsZi5fRmx1c2gobm93KQogICAgYnVja2V0ID0gc2VsZi5fYnVja2V0c1tzZWxmLl9jdXJyZW50X2luZGV4XQogICAgYnVja2V0WzBdICs9IGluYwogICAgYnVja2V0WzFdICs9IDEKCiAgZGVmIGNvdW50KHNlbGYsIG5vdyk6CiAgICBzZWxmLl9GbHVzaChub3cpCiAgICByZXR1cm4gc3VtKGJ1Y2tldFsxXSBmb3IgYnVja2V0IGluIHNlbGYuX2J1Y2tldHMpCgogIGRlZiBoYXNfZGF0YShzZWxmLCBub3cpOgogICAgcmV0dXJuIHNlbGYuY291bnQobm93KSA+IDAKfXK0gwAAKFgQAAAATW92aW5nU3VtLl9SZXNldFgDAAAAZGVmSzBLPodYCQAAAE1vdmluZ1N1bVgFAAAAY2xhc3NLHktlh1gNAAAATW92aW5nU3VtLnN1bVgDAAAAZGVmS1VLWIdYEgAAAE1vdmluZ1N1bS5oYXNfZGF0YVgDAAAAZGVmS2NLZYdYDQAAAE1vdmluZ1N1bS5hZGRYAwAAAGRlZktZS16HWA8AAABNb3ZpbmdTdW0uY291bnRYAwAAAGRlZktfS2KHWBAAAABNb3ZpbmdTdW0uX0ZsdXNoWAMAAABkZWZLP0tRh1gSAAAATW92aW5nU3VtLl9faW5pdF9fWAMAAABkZWZLKUsvh3V9crWDAAAoWAkAAABNb3ZpbmdTdW1qOl4AAFgPAAAATW92aW5nU3VtLmNvdW50ajpeAABYDQAAAE1vdmluZ1N1bS5zdW1qOl4AAFgSAAAATW92aW5nU3VtLmhhc19kYXRhajpeAABYDQAAAE1vdmluZ1N1bS5hZGRqOl4AAHVqfWkAAFgkAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MS51dGlscraDAACFgXK3gwAAfXK4gwAAYnRVG2FwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pbyhYDBwAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoiIiJVdGlsaXRpZXMgZm9yIGBgRmlsZVN5c3RlbWBgIGltcGxlbWVudGF0aW9ucy4iIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgYWJjCmltcG9ydCBpbwppbXBvcnQgb3MKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0Cgpmcm9tIGZ1dHVyZS51dGlscyBpbXBvcnQgd2l0aF9tZXRhY2xhc3MKCl9fYWxsX18gPSBbJ0Rvd25sb2FkZXInLCAnVXBsb2FkZXInLCAnRG93bmxvYWRlclN0cmVhbScsICdVcGxvYWRlclN0cmVhbScsCiAgICAgICAgICAgJ1BpcGVTdHJlYW0nXQoKCmNsYXNzIERvd25sb2FkZXIod2l0aF9tZXRhY2xhc3MoYWJjLkFCQ01ldGEsIG9iamVjdCkpOgogICIiIkRvd25sb2FkIGludGVyZmFjZSBmb3IgYSBzaW5nbGUgZmlsZS4KCiAgSW1wbGVtZW50YXRpb25zIHNob3VsZCBzdXBwb3J0IHJhbmRvbSBhY2Nlc3MgcmVhZHMuCiAgIiIiCgogIEBhYmMuYWJzdHJhY3Rwcm9wZXJ0eQogIGRlZiBzaXplKHNlbGYpOgogICAgIiIiU2l6ZSBvZiBmaWxlIHRvIGRvd25sb2FkLiIiIgoKICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgZGVmIGdldF9yYW5nZShzZWxmLCBzdGFydCwgZW5kKToKICAgICIiIlJldHJpZXZlIGEgZ2l2ZW4gYnl0ZSByYW5nZSBbc3RhcnQsIGVuZCkgZnJvbSB0aGlzIGRvd25sb2FkLgoKICAgIFJhbmdlIG11c3QgYmUgaW4gdGhpcyBmb3JtOgogICAgICAwIDw9IHN0YXJ0IDwgZW5kOiBGZXRjaCB0aGUgYnl0ZXMgZnJvbSBzdGFydCB0byBlbmQuCgogICAgQXJnczoKICAgICAgc3RhcnQ6IChpbnQpIEluaXRpYWwgYnl0ZSBvZmZzZXQuCiAgICAgIGVuZDogKGludCkgRmluYWwgYnl0ZSBvZmZzZXQsIGV4Y2x1c2l2ZS4KCiAgICBSZXR1cm5zOgogICAgICAoc3RyaW5nKSBBIGJ1ZmZlciBjb250YWluaW5nIHRoZSByZXF1ZXN0ZWQgZGF0YS4KICAgICIiIgoKCmNsYXNzIFVwbG9hZGVyKHdpdGhfbWV0YWNsYXNzKGFiYy5BQkNNZXRhLCBvYmplY3QpKToKICAiIiJVcGxvYWQgaW50ZXJmYWNlIGZvciBhIHNpbmdsZSBmaWxlLiIiIgoKICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgZGVmIHB1dChzZWxmLCBkYXRhKToKICAgICIiIldyaXRlIGRhdGEgdG8gZmlsZSBzZXF1ZW50aWFsbHkuCgogICAgQXJnczoKICAgICAgZGF0YTogKG1lbW9yeXZpZXcpIERhdGEgdG8gd3JpdGUuCiAgICAiIiIKCiAgQGFiYy5hYnN0cmFjdG1ldGhvZAogIGRlZiBmaW5pc2goc2VsZik6CiAgICAiIiJTaWduYWwgdG8gdXBsb2FkIGFueSByZW1haW5pbmcgZGF0YSBhbmQgY2xvc2UgdGhlIGZpbGUuCgogICAgRmlsZSBzaG91bGQgYmUgZnVsbHkgd3JpdHRlbiB1cG9uIHJldHVybiBmcm9tIHRoaXMgbWV0aG9kLgoKICAgIFJhaXNlczoKICAgICAgQW55IGVycm9yIGVuY291bnRlcmVkIGR1cmluZyB0aGUgdXBsb2FkLgogICAgIiIiCgoKY2xhc3MgRG93bmxvYWRlclN0cmVhbShpby5SYXdJT0Jhc2UpOgogICIiIlByb3ZpZGVzIGEgc3RyZWFtIGludGVyZmFjZSBmb3IgRG93bmxvYWRlciBvYmplY3RzLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgZG93bmxvYWRlciwgbW9kZT0ncmInKToKICAgICIiIkluaXRpYWxpemVzIHRoZSBzdHJlYW0uCgogICAgQXJnczoKICAgICAgZG93bmxvYWRlcjogKERvd25sb2FkZXIpIEZpbGVzeXN0ZW0gZGVwZW5kZW50IGltcGxlbWVudGF0aW9uLgogICAgICBtb2RlOiAoc3RyaW5nKSBQeXRob24gbW9kZSBhdHRyaWJ1dGUgZm9yIHRoaXMgc3RyZWFtLgogICAgIiIiCiAgICBzZWxmLl9kb3dubG9hZGVyID0gZG93bmxvYWRlcgogICAgc2VsZi5tb2RlID0gbW9kZQogICAgc2VsZi5fcG9zaXRpb24gPSAwCgogIGRlZiByZWFkaW50byhzZWxmLCBiKToKICAgICIiIlJlYWQgdXAgdG8gbGVuKGIpIGJ5dGVzIGludG8gYi4KCiAgICBSZXR1cm5zIG51bWJlciBvZiBieXRlcyByZWFkICgwIGZvciBFT0YpLgoKICAgIEFyZ3M6CiAgICAgIGI6IChieXRlYXJyYXkvbWVtb3J5dmlldykgQnVmZmVyIHRvIHJlYWQgaW50by4KICAgICIiIgogICAgc2VsZi5fY2hlY2tDbG9zZWQoKQogICAgaWYgc2VsZi5fcG9zaXRpb24gPj0gc2VsZi5fZG93bmxvYWRlci5zaXplOgogICAgICByZXR1cm4gMAoKICAgIHN0YXJ0ID0gc2VsZi5fcG9zaXRpb24KICAgIGVuZCA9IG1pbihzZWxmLl9wb3NpdGlvbiArIGxlbihiKSwgc2VsZi5fZG93bmxvYWRlci5zaXplKQogICAgZGF0YSA9IHNlbGYuX2Rvd25sb2FkZXIuZ2V0X3JhbmdlKHN0YXJ0LCBlbmQpCiAgICBzZWxmLl9wb3NpdGlvbiArPSBsZW4oZGF0YSkKICAgIGJbOmxlbihkYXRhKV0gPSBkYXRhCiAgICByZXR1cm4gbGVuKGRhdGEpCgogIGRlZiBzZWVrKHNlbGYsIG9mZnNldCwgd2hlbmNlPW9zLlNFRUtfU0VUKToKICAgICIiIlNldCB0aGUgc3RyZWFtJ3MgY3VycmVudCBvZmZzZXQuCgogICAgTm90ZSBpZiB0aGUgbmV3IG9mZnNldCBpcyBvdXQgb2YgYm91bmQsIGl0IGlzIGFkanVzdGVkIHRvIGVpdGhlciAwIG9yIEVPRi4KCiAgICBBcmdzOgogICAgICBvZmZzZXQ6IHNlZWsgb2Zmc2V0IGFzIG51bWJlci4KICAgICAgd2hlbmNlOiBzZWVrIG1vZGUuIFN1cHBvcnRlZCBtb2RlcyBhcmUgb3MuU0VFS19TRVQgKGFic29sdXRlIHNlZWspLAogICAgICAgIG9zLlNFRUtfQ1VSIChzZWVrIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHBvc2l0aW9uKSwgYW5kIG9zLlNFRUtfRU5ECiAgICAgICAgKHNlZWsgcmVsYXRpdmUgdG8gdGhlIGVuZCwgb2Zmc2V0IHNob3VsZCBiZSBuZWdhdGl2ZSkuCgogICAgUmFpc2VzOgogICAgICBgYFZhbHVlRXJyb3JgYDogV2hlbiB0aGlzIHN0cmVhbSBpcyBjbG9zZWQgb3IgaWYgd2hlbmNlIGlzIGludmFsaWQuCiAgICAiIiIKICAgIHNlbGYuX2NoZWNrQ2xvc2VkKCkKCiAgICBpZiB3aGVuY2UgPT0gb3MuU0VFS19TRVQ6CiAgICAgIHNlbGYuX3Bvc2l0aW9uID0gb2Zmc2V0CiAgICBlbGlmIHdoZW5jZSA9PSBvcy5TRUVLX0NVUjoKICAgICAgc2VsZi5fcG9zaXRpb24gKz0gb2Zmc2V0CiAgICBlbGlmIHdoZW5jZSA9PSBvcy5TRUVLX0VORDoKICAgICAgc2VsZi5fcG9zaXRpb24gPSBzZWxmLl9kb3dubG9hZGVyLnNpemUgKyBvZmZzZXQKICAgIGVsc2U6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1doZW5jZSBtb2RlICVyIGlzIGludmFsaWQuJyAlIHdoZW5jZSkKCiAgICBzZWxmLl9wb3NpdGlvbiA9IG1pbihzZWxmLl9wb3NpdGlvbiwgc2VsZi5fZG93bmxvYWRlci5zaXplKQogICAgc2VsZi5fcG9zaXRpb24gPSBtYXgoc2VsZi5fcG9zaXRpb24sIDApCiAgICByZXR1cm4gc2VsZi5fcG9zaXRpb24KCiAgZGVmIHRlbGwoc2VsZik6CiAgICAiIiJUZWxsIHRoZSBzdHJlYW0ncyBjdXJyZW50IG9mZnNldC4KCiAgICBSZXR1cm5zOgogICAgICBjdXJyZW50IG9mZnNldCBpbiByZWFkaW5nIHRoaXMgc3RyZWFtLgoKICAgIFJhaXNlczoKICAgICAgYGBWYWx1ZUVycm9yYGA6IFdoZW4gdGhpcyBzdHJlYW0gaXMgY2xvc2VkLgogICAgIiIiCiAgICBzZWxmLl9jaGVja0Nsb3NlZCgpCiAgICByZXR1cm4gc2VsZi5fcG9zaXRpb24KCiAgZGVmIHNlZWthYmxlKHNlbGYpOgogICAgcmV0dXJuIFRydWUKCiAgZGVmIHJlYWRhYmxlKHNlbGYpOgogICAgcmV0dXJuIFRydWUKCgpjbGFzcyBVcGxvYWRlclN0cmVhbShpby5SYXdJT0Jhc2UpOgogICIiIlByb3ZpZGVzIGEgc3RyZWFtIGludGVyZmFjZSBmb3IgVXBsb2FkZXIgb2JqZWN0cy4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHVwbG9hZGVyLCBtb2RlPSd3YicpOgogICAgIiIiSW5pdGlhbGl6ZXMgdGhlIHN0cmVhbS4KCiAgICBBcmdzOgogICAgICB1cGxvYWRlcjogKFVwbG9hZGVyKSBGaWxlc3lzdGVtIGRlcGVuZGVudCBpbXBsZW1lbnRhdGlvbi4KICAgICAgbW9kZTogKHN0cmluZykgUHl0aG9uIG1vZGUgYXR0cmlidXRlIGZvciB0aGlzIHN0cmVhbS4KICAgICIiIgogICAgc2VsZi5fdXBsb2FkZXIgPSB1cGxvYWRlcgogICAgc2VsZi5tb2RlID0gbW9kZQogICAgc2VsZi5fcG9zaXRpb24gPSAwCgogIGRlZiB0ZWxsKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX3Bvc2l0aW9uCgogIGRlZiB3cml0ZShzZWxmLCBiKToKICAgICIiIldyaXRlIGJ5dGVzIGZyb20gYi4KCiAgICBSZXR1cm5zIG51bWJlciBvZiBieXRlcyB3cml0dGVuICg8PSBsZW4oYikpLgoKICAgIEFyZ3M6CiAgICAgIGI6IChtZW1vcnl2aWV3KSBCdWZmZXIgd2l0aCBkYXRhIHRvIHdyaXRlLgogICAgIiIiCiAgICBzZWxmLl9jaGVja0Nsb3NlZCgpCiAgICBzZWxmLl91cGxvYWRlci5wdXQoYikKCiAgICBieXRlc193cml0dGVuID0gbGVuKGIpCiAgICBzZWxmLl9wb3NpdGlvbiArPSBieXRlc193cml0dGVuCiAgICByZXR1cm4gYnl0ZXNfd3JpdHRlbgoKICBkZWYgY2xvc2Uoc2VsZik6CiAgICAiIiJDb21wbGV0ZSB0aGUgdXBsb2FkIGFuZCBjbG9zZSB0aGlzIHN0cmVhbS4KCiAgICBUaGlzIG1ldGhvZCBoYXMgbm8gZWZmZWN0IGlmIHRoZSBzdHJlYW0gaXMgYWxyZWFkeSBjbG9zZWQuCgogICAgUmFpc2VzOgogICAgICBBbnkgZXJyb3IgZW5jb3VudGVyZWQgYnkgdGhlIHVwbG9hZGVyLgogICAgIiIiCiAgICBpZiBub3Qgc2VsZi5jbG9zZWQ6CiAgICAgIHNlbGYuX3VwbG9hZGVyLmZpbmlzaCgpCgogICAgc3VwZXIoVXBsb2FkZXJTdHJlYW0sIHNlbGYpLmNsb3NlKCkKCiAgZGVmIHdyaXRhYmxlKHNlbGYpOgogICAgcmV0dXJuIFRydWUKCgpjbGFzcyBQaXBlU3RyZWFtKG9iamVjdCk6CiAgIiIiQSBjbGFzcyB0aGF0IHByZXNlbnRzIGEgcGlwZSBjb25uZWN0aW9uIGFzIGEgcmVhZGFibGUgc3RyZWFtLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgcmVjdl9waXBlKToKICAgIHNlbGYuY29ubiA9IHJlY3ZfcGlwZQogICAgc2VsZi5jbG9zZWQgPSBGYWxzZQogICAgc2VsZi5wb3NpdGlvbiA9IDAKICAgIHNlbGYucmVtYWluaW5nID0gYicnCgogIGRlZiByZWFkKHNlbGYsIHNpemUpOgogICAgIiIiUmVhZCBkYXRhIGZyb20gdGhlIHdyYXBwZWQgcGlwZSBjb25uZWN0aW9uLgoKICAgIEFyZ3M6CiAgICAgIHNpemU6IE51bWJlciBvZiBieXRlcyB0byByZWFkLiBBY3R1YWwgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgaXMgYWx3YXlzCiAgICAgICAgICAgIGVxdWFsIHRvIHNpemUgdW5sZXNzIEVPRiBpcyByZWFjaGVkLgoKICAgIFJldHVybnM6CiAgICAgIGRhdGEgcmVhZCBhcyBzdHIuCiAgICAiIiIKICAgIGRhdGFfbGlzdCA9IFtdCiAgICBieXRlc19yZWFkID0gMAogICAgd2hpbGUgYnl0ZXNfcmVhZCA8IHNpemU6CiAgICAgIGJ5dGVzX2Zyb21fcmVtYWluaW5nID0gbWluKHNpemUgLSBieXRlc19yZWFkLCBsZW4oc2VsZi5yZW1haW5pbmcpKQogICAgICBkYXRhX2xpc3QuYXBwZW5kKHNlbGYucmVtYWluaW5nWzA6Ynl0ZXNfZnJvbV9yZW1haW5pbmddKQogICAgICBzZWxmLnJlbWFpbmluZyA9IHNlbGYucmVtYWluaW5nW2J5dGVzX2Zyb21fcmVtYWluaW5nOl0KICAgICAgc2VsZi5wb3NpdGlvbiArPSBieXRlc19mcm9tX3JlbWFpbmluZwogICAgICBieXRlc19yZWFkICs9IGJ5dGVzX2Zyb21fcmVtYWluaW5nCiAgICAgIGlmIG5vdCBzZWxmLnJlbWFpbmluZzoKICAgICAgICB0cnk6CiAgICAgICAgICBzZWxmLnJlbWFpbmluZyA9IHNlbGYuY29ubi5yZWN2X2J5dGVzKCkKICAgICAgICBleGNlcHQgRU9GRXJyb3I6CiAgICAgICAgICBicmVhawogICAgcmV0dXJuIGInJy5qb2luKGRhdGFfbGlzdCkKCiAgZGVmIHRlbGwoc2VsZik6CiAgICAiIiJUZWxsIHRoZSBmaWxlJ3MgY3VycmVudCBvZmZzZXQuCgogICAgUmV0dXJuczoKICAgICAgY3VycmVudCBvZmZzZXQgaW4gcmVhZGluZyB0aGlzIGZpbGUuCgogICAgUmFpc2VzOgogICAgICBgYFZhbHVlRXJyb3JgYDogV2hlbiB0aGlzIHN0cmVhbSBpcyBjbG9zZWQuCiAgICAiIiIKICAgIHNlbGYuX2NoZWNrX29wZW4oKQogICAgcmV0dXJuIHNlbGYucG9zaXRpb24KCiAgZGVmIHNlZWsoc2VsZiwgb2Zmc2V0LCB3aGVuY2U9b3MuU0VFS19TRVQpOgogICAgIyBUaGUgYXBpdG9vbHMgbGlicmFyeSB1c2VkIGJ5IHRoZSBnY3Npby5VcGxvYWRlciBjbGFzcyBpbnNpc3RzIG9uIHNlZWtpbmcKICAgICMgdG8gdGhlIGVuZCBvZiBhIHN0cmVhbSB0byBkbyBhIGNoZWNrIGJlZm9yZSBjb21wbGV0aW5nIGFuIHVwbG9hZCwgc28gd2UKICAgICMgbXVzdCBoYXZlIHRoaXMgbm8tb3AgbWV0aG9kIGhlcmUgaW4gdGhhdCBjYXNlLgogICAgaWYgd2hlbmNlID09IG9zLlNFRUtfRU5EIGFuZCBvZmZzZXQgPT0gMDoKICAgICAgcmV0dXJuCiAgICBlbGlmIHdoZW5jZSA9PSBvcy5TRUVLX1NFVCBhbmQgb2Zmc2V0ID09IHNlbGYucG9zaXRpb246CiAgICAgIHJldHVybgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgX2NoZWNrX29wZW4oc2VsZik6CiAgICBpZiBzZWxmLmNsb3NlZDoKICAgICAgcmFpc2UgSU9FcnJvcignU3RyZWFtIGlzIGNsb3NlZC4nKQp9crmDAAAoWBkAAABEb3dubG9hZGVyU3RyZWFtLnNlZWthYmxlWAMAAABkZWZLmkuch1gTAAAAVXBsb2FkZXJTdHJlYW0udGVsbFgDAAAAZGVmS69LsYdYCgAAAFBpcGVTdHJlYW1YBQAAAGNsYXNzS9JNDQGHWA8AAABQaXBlU3RyZWFtLnJlYWRYAwAAAGRlZkvbS/OHWA4AAABVcGxvYWRlclN0cmVhbVgFAAAAY2xhc3NLoUvQh1gWAAAAUGlwZVN0cmVhbS5fY2hlY2tfb3BlblgDAAAAZGVmTQoBTQ0Bh1gVAAAARG93bmxvYWRlclN0cmVhbS5zZWVrWAMAAABkZWZLcUuNh1gQAAAARG93bmxvYWRlclN0cmVhbVgFAAAAY2xhc3NLUEufh1gUAAAARG93bmxvYWRlci5nZXRfcmFuZ2VYAwAAAGRlZksqSziHWBkAAABEb3dubG9hZGVyU3RyZWFtLl9faW5pdF9fWAMAAABkZWZLU0tdh1gXAAAAVXBsb2FkZXJTdHJlYW0uX19pbml0X19YAwAAAGRlZkukS66HWBQAAABVcGxvYWRlclN0cmVhbS5jbG9zZVgDAAAAZGVmS8FLzYdYFwAAAFVwbG9hZGVyU3RyZWFtLndyaXRhYmxlWAMAAABkZWZLzkvQh1gZAAAARG93bmxvYWRlclN0cmVhbS5yZWFkaW50b1gDAAAAZGVmS15LcIdYEwAAAFBpcGVTdHJlYW0uX19pbml0X19YAwAAAGRlZkvVS9qHWBkAAABEb3dubG9hZGVyU3RyZWFtLnJlYWRhYmxlWAMAAABkZWZLnUufh1gPAAAARG93bmxvYWRlci5zaXplWAMAAABkZWZLJksph1gVAAAARG93bmxvYWRlclN0cmVhbS50ZWxsWAMAAABkZWZLjkuZh1gPAAAAVXBsb2FkZXIuZmluaXNoWAMAAABkZWZLRUtOh1gPAAAAUGlwZVN0cmVhbS50ZWxsWAMAAABkZWZL9Ev/h1gKAAAARG93bmxvYWRlclgFAAAAY2xhc3NLIEs4h1gUAAAAVXBsb2FkZXJTdHJlYW0ud3JpdGVYAwAAAGRlZkuyS8CHWAgAAABVcGxvYWRlclgFAAAAY2xhc3NLOktOh1gMAAAAVXBsb2FkZXIucHV0WAMAAABkZWZLPUtEh1gPAAAAUGlwZVN0cmVhbS5zZWVrWAMAAABkZWZNAAFNCQGHdX1yuoMAAChYDwAAAFVwbG9hZGVyLmZpbmlzaGraZwAAWAgAAABVcGxvYWRlcmraZwAAWA8AAABQaXBlU3RyZWFtLnRlbGxq2mcAAFgPAAAAUGlwZVN0cmVhbS5yZWFkatpnAABYDgAAAFVwbG9hZGVyU3RyZWFtatpnAABYGQAAAERvd25sb2FkZXJTdHJlYW0uc2Vla2FibGVq2mcAAFgKAAAARG93bmxvYWRlcmraZwAAWBQAAABVcGxvYWRlclN0cmVhbS5jbG9zZWraZwAAWBQAAABVcGxvYWRlclN0cmVhbS53cml0ZWraZwAAWBUAAABEb3dubG9hZGVyU3RyZWFtLnNlZWtq2mcAAFgXAAAAVXBsb2FkZXJTdHJlYW0ud3JpdGFibGVq2mcAAFgZAAAARG93bmxvYWRlclN0cmVhbS5yZWFkaW50b2raZwAAWBMAAABVcGxvYWRlclN0cmVhbS50ZWxsatpnAABYGQAAAERvd25sb2FkZXJTdHJlYW0ucmVhZGFibGVq2mcAAFgMAAAAVXBsb2FkZXIucHV0atpnAABYEAAAAERvd25sb2FkZXJTdHJlYW1q2mcAAFgPAAAAUGlwZVN0cmVhbS5zZWVratpnAABYFAAAAERvd25sb2FkZXIuZ2V0X3JhbmdlatpnAABYCgAAAFBpcGVTdHJlYW1q2mcAAFgVAAAARG93bmxvYWRlclN0cmVhbS50ZWxsatpnAAB1an1pAABYGwAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pb3K7gwAAhYFyvIMAAH1yvYMAAGJ0VR5hcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0oWDMUAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkEgcHVyZSBQeXRob24gaW1wbGVtZW50YXRpb24gb2Ygc3RyZWFtLnB5eC4KCkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KIiIiCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgc3RydWN0CmltcG9ydCBzeXMKZnJvbSBidWlsdGlucyBpbXBvcnQgY2hyCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdAoKCmNsYXNzIE91dHB1dFN0cmVhbShvYmplY3QpOgogICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgQSBwdXJlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiBzdHJlYW0uT3V0cHV0U3RyZWFtLiIiIgoKICBkZWYgX19pbml0X18oc2VsZik6CiAgICBzZWxmLmRhdGEgPSBbXQogICAgc2VsZi5ieXRlX2NvdW50ID0gMAoKICBkZWYgd3JpdGUoc2VsZiwgYiwgbmVzdGVkPUZhbHNlKToKICAgIGFzc2VydCBpc2luc3RhbmNlKGIsIGJ5dGVzKQogICAgaWYgbmVzdGVkOgogICAgICBzZWxmLndyaXRlX3Zhcl9pbnQ2NChsZW4oYikpCiAgICBzZWxmLmRhdGEuYXBwZW5kKGIpCiAgICBzZWxmLmJ5dGVfY291bnQgKz0gbGVuKGIpCgogIGRlZiB3cml0ZV9ieXRlKHNlbGYsIHZhbCk6CiAgICBzZWxmLmRhdGEuYXBwZW5kKGNocih2YWwpLmVuY29kZSgnbGF0aW4tMScpKQogICAgc2VsZi5ieXRlX2NvdW50ICs9IDEKCiAgZGVmIHdyaXRlX3Zhcl9pbnQ2NChzZWxmLCB2KToKICAgIGlmIHYgPCAwOgogICAgICB2ICs9IDEgPDwgNjQKICAgICAgaWYgdiA8PSAwOgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1ZhbHVlIHRvbyBsYXJnZSAobmVnYXRpdmUpLicpCiAgICB3aGlsZSBUcnVlOgogICAgICBiaXRzID0gdiAmIDB4N0YKICAgICAgdiA+Pj0gNwogICAgICBpZiB2OgogICAgICAgIGJpdHMgfD0gMHg4MAogICAgICBzZWxmLndyaXRlX2J5dGUoYml0cykKICAgICAgaWYgbm90IHY6CiAgICAgICAgYnJlYWsKCiAgZGVmIHdyaXRlX2JpZ2VuZGlhbl9pbnQ2NChzZWxmLCB2KToKICAgIHNlbGYud3JpdGUoc3RydWN0LnBhY2soJz5xJywgdikpCgogIGRlZiB3cml0ZV9iaWdlbmRpYW5fdWludDY0KHNlbGYsIHYpOgogICAgc2VsZi53cml0ZShzdHJ1Y3QucGFjaygnPlEnLCB2KSkKCiAgZGVmIHdyaXRlX2JpZ2VuZGlhbl9pbnQzMihzZWxmLCB2KToKICAgIHNlbGYud3JpdGUoc3RydWN0LnBhY2soJz5pJywgdikpCgogIGRlZiB3cml0ZV9iaWdlbmRpYW5fZG91YmxlKHNlbGYsIHYpOgogICAgc2VsZi53cml0ZShzdHJ1Y3QucGFjaygnPmQnLCB2KSkKCiAgZGVmIGdldChzZWxmKToKICAgIHJldHVybiBiJycuam9pbihzZWxmLmRhdGEpCgogIGRlZiBzaXplKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuYnl0ZV9jb3VudAoKICBkZWYgX2NsZWFyKHNlbGYpOgogICAgc2VsZi5kYXRhID0gW10KICAgIHNlbGYuYnl0ZV9jb3VudCA9IDAKCgpjbGFzcyBCeXRlQ291bnRpbmdPdXRwdXRTdHJlYW0oT3V0cHV0U3RyZWFtKToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIEEgcHVyZSBQeXRob24gaW1wbGVtZW50YXRpb24gb2Ygc3RyZWFtLkJ5dGVDb3VudGluZ091dHB1dFN0cmVhbS4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgIyBOb3RlIHRoYXQgd2UgZG9uJ3QgYWN0dWFsbHkgdXNlIGFueSBvZiB0aGUgZGF0YSBpbml0aWFsaXplZCBieSBvdXIgc3VwZXIuCiAgICBzdXBlcihCeXRlQ291bnRpbmdPdXRwdXRTdHJlYW0sIHNlbGYpLl9faW5pdF9fKCkKICAgIHNlbGYuY291bnQgPSAwCgogIGRlZiB3cml0ZShzZWxmLCBieXRlX2FycmF5LCBuZXN0ZWQ9RmFsc2UpOgogICAgYmxlbiA9IGxlbihieXRlX2FycmF5KQogICAgaWYgbmVzdGVkOgogICAgICBzZWxmLndyaXRlX3Zhcl9pbnQ2NChibGVuKQogICAgc2VsZi5jb3VudCArPSBibGVuCgogIGRlZiB3cml0ZV9ieXRlKHNlbGYsIF8pOgogICAgc2VsZi5jb3VudCArPSAxCgogIGRlZiBnZXRfY291bnQoc2VsZik6CiAgICByZXR1cm4gc2VsZi5jb3VudAoKICBkZWYgZ2V0KHNlbGYpOgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgX19zdHJfXyhzZWxmKToKICAgIHJldHVybiAnPCVzICVzPicgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHNlbGYuY291bnQpCgoKY2xhc3MgSW5wdXRTdHJlYW0ob2JqZWN0KToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIEEgcHVyZSBQeXRob24gaW1wbGVtZW50YXRpb24gb2Ygc3RyZWFtLklucHV0U3RyZWFtLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6CiAgICBzZWxmLmRhdGEgPSBkYXRhCiAgICBzZWxmLnBvcyA9IDAKCiAgICAjIFRoZSBiZWhhdmlvciBvZiBsb29waW5nIG92ZXIgYSBieXRlLXN0cmluZyBhbmQgb2J0YWluaW5nIGJ5dGUgY2hhcmFjdGVycwogICAgIyBoYXMgYmVlbiBjaGFuZ2VkIGJldHdlZW4gcHl0aG9uIDIgYW5kIDMuCiAgICAjIGIgPSBiJ1x4ZmZceDAxJwogICAgIyBQeXRob24gMjoKICAgICMgYlswXSA9ICdceGZmJwogICAgIyBvcmQoYlswXSkgPSAyNTUKICAgICMgUHl0aG9uIDM6CiAgICAjIGJbMF0gPSAyNTUKICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPj0gMzoKICAgICAgc2VsZi5yZWFkX2J5dGUgPSBzZWxmLnJlYWRfYnl0ZV9weTMKICAgIGVsc2U6CiAgICAgIHNlbGYucmVhZF9ieXRlID0gc2VsZi5yZWFkX2J5dGVfcHkyCgogIGRlZiBzaXplKHNlbGYpOgogICAgcmV0dXJuIGxlbihzZWxmLmRhdGEpIC0gc2VsZi5wb3MKCiAgZGVmIHJlYWQoc2VsZiwgc2l6ZSk6CiAgICBzZWxmLnBvcyArPSBzaXplCiAgICByZXR1cm4gc2VsZi5kYXRhW3NlbGYucG9zIC0gc2l6ZSA6IHNlbGYucG9zXQoKICBkZWYgcmVhZF9hbGwoc2VsZiwgbmVzdGVkKToKICAgIHJldHVybiBzZWxmLnJlYWQoc2VsZi5yZWFkX3Zhcl9pbnQ2NCgpIGlmIG5lc3RlZCBlbHNlIHNlbGYuc2l6ZSgpKQoKICBkZWYgcmVhZF9ieXRlX3B5MihzZWxmKToKICAgIHNlbGYucG9zICs9IDEKICAgIHJldHVybiBvcmQoc2VsZi5kYXRhW3NlbGYucG9zIC0gMV0pCgogIGRlZiByZWFkX2J5dGVfcHkzKHNlbGYpOgogICAgc2VsZi5wb3MgKz0gMQogICAgcmV0dXJuIHNlbGYuZGF0YVtzZWxmLnBvcyAtIDFdCgogIGRlZiByZWFkX3Zhcl9pbnQ2NChzZWxmKToKICAgIHNoaWZ0ID0gMAogICAgcmVzdWx0ID0gMAogICAgd2hpbGUgVHJ1ZToKICAgICAgYnl0ZSA9IHNlbGYucmVhZF9ieXRlKCkKICAgICAgaWYgYnl0ZSA8IDA6CiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdWYXJMb25nIG5vdCB0ZXJtaW5hdGVkLicpCgogICAgICBiaXRzID0gYnl0ZSAmIDB4N0YKICAgICAgaWYgc2hpZnQgPj0gNjQgb3IgKHNoaWZ0ID49IDYzIGFuZCBiaXRzID4gMSk6CiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdWYXJMb25nIHRvbyBsb25nLicpCiAgICAgIHJlc3VsdCB8PSBiaXRzIDw8IHNoaWZ0CiAgICAgIHNoaWZ0ICs9IDcKICAgICAgaWYgbm90IGJ5dGUgJiAweDgwOgogICAgICAgIGJyZWFrCiAgICBpZiByZXN1bHQgPj0gMSA8PCA2MzoKICAgICAgcmVzdWx0IC09IDEgPDwgNjQKICAgIHJldHVybiByZXN1bHQKCiAgZGVmIHJlYWRfYmlnZW5kaWFuX2ludDY0KHNlbGYpOgogICAgcmV0dXJuIHN0cnVjdC51bnBhY2soJz5xJywgc2VsZi5yZWFkKDgpKVswXQoKICBkZWYgcmVhZF9iaWdlbmRpYW5fdWludDY0KHNlbGYpOgogICAgcmV0dXJuIHN0cnVjdC51bnBhY2soJz5RJywgc2VsZi5yZWFkKDgpKVswXQoKICBkZWYgcmVhZF9iaWdlbmRpYW5faW50MzIoc2VsZik6CiAgICByZXR1cm4gc3RydWN0LnVucGFjaygnPmknLCBzZWxmLnJlYWQoNCkpWzBdCgogIGRlZiByZWFkX2JpZ2VuZGlhbl9kb3VibGUoc2VsZik6CiAgICByZXR1cm4gc3RydWN0LnVucGFjaygnPmQnLCBzZWxmLnJlYWQoOCkpWzBdCgoKZGVmIGdldF92YXJpbnRfc2l6ZSh2KToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIGdpdmVuIGludGVnZXIgdmFsdWUgd2hlbiBlbmNvZGUgYXMgYSBWYXJJbnQuIiIiCiAgaWYgdiA8IDA6CiAgICB2ICs9IDEgPDwgNjQKICAgIGlmIHYgPD0gMDoKICAgICAgcmFpc2UgVmFsdWVFcnJvcignVmFsdWUgdG9vIGxhcmdlIChuZWdhdGl2ZSkuJykKICB2YXJpbnRfc2l6ZSA9IDAKICB3aGlsZSBUcnVlOgogICAgdmFyaW50X3NpemUgKz0gMQogICAgdiA+Pj0gNwogICAgaWYgbm90IHY6CiAgICAgIGJyZWFrCiAgcmV0dXJuIHZhcmludF9zaXplCn1yvoMAAChYFwAAAE91dHB1dFN0cmVhbS53cml0ZV9ieXRlWAMAAABkZWZLLksxh1gQAAAAT3V0cHV0U3RyZWFtLmdldFgDAAAAZGVmS0xLTodYIgAAAE91dHB1dFN0cmVhbS53cml0ZV9iaWdlbmRpYW5faW50NjRYAwAAAGRlZktAS0KHWA8AAABnZXRfdmFyaW50X3NpemVYAwAAAGRlZku8S8uHWB4AAABCeXRlQ291bnRpbmdPdXRwdXRTdHJlYW0ud3JpdGVYAwAAAGRlZkthS2aHWCEAAABJbnB1dFN0cmVhbS5yZWFkX2JpZ2VuZGlhbl91aW50NjRYAwAAAGRlZkuyS7SHWBQAAABJbnB1dFN0cmVhbS5fX2luaXRfX1gDAAAAZGVmS3lLiYdYEgAAAE91dHB1dFN0cmVhbS53cml0ZVgDAAAAZGVmSydLLYdYIwAAAEJ5dGVDb3VudGluZ091dHB1dFN0cmVhbS53cml0ZV9ieXRlWAMAAABkZWZLZ0tph1gQAAAASW5wdXRTdHJlYW0uc2l6ZVgDAAAAZGVmS4pLjIdYFQAAAE91dHB1dFN0cmVhbS5fX2luaXRfX1gDAAAAZGVmSyNLJodYIwAAAE91dHB1dFN0cmVhbS53cml0ZV9iaWdlbmRpYW5fdWludDY0WAMAAABkZWZLQ0tFh1gZAAAASW5wdXRTdHJlYW0ucmVhZF9ieXRlX3B5M1gDAAAAZGVmS5hLm4dYEwAAAE91dHB1dFN0cmVhbS5fY2xlYXJYAwAAAGRlZktSS1WHWAwAAABPdXRwdXRTdHJlYW1YBQAAAGNsYXNzSx5LVYdYIAAAAElucHV0U3RyZWFtLnJlYWRfYmlnZW5kaWFuX2ludDY0WAMAAABkZWZLr0uxh1gcAAAAT3V0cHV0U3RyZWFtLndyaXRlX3Zhcl9pbnQ2NFgDAAAAZGVmSzJLP4dYEAAAAElucHV0U3RyZWFtLnJlYWRYAwAAAGRlZkuNS5CHWCEAAABJbnB1dFN0cmVhbS5yZWFkX2JpZ2VuZGlhbl9kb3VibGVYAwAAAGRlZku4S7qHWBwAAABCeXRlQ291bnRpbmdPdXRwdXRTdHJlYW0uZ2V0WAMAAABkZWZLbUtvh1gjAAAAT3V0cHV0U3RyZWFtLndyaXRlX2JpZ2VuZGlhbl9kb3VibGVYAwAAAGRlZktJS0uHWBkAAABJbnB1dFN0cmVhbS5yZWFkX2J5dGVfcHkyWAMAAABkZWZLlEuXh1ggAAAAQnl0ZUNvdW50aW5nT3V0cHV0U3RyZWFtLl9fc3RyX19YAwAAAGRlZktwS3KHWCAAAABJbnB1dFN0cmVhbS5yZWFkX2JpZ2VuZGlhbl9pbnQzMlgDAAAAZGVmS7VLt4dYEQAAAE91dHB1dFN0cmVhbS5zaXplWAMAAABkZWZLT0tRh1gUAAAASW5wdXRTdHJlYW0ucmVhZF9hbGxYAwAAAGRlZkuRS5OHWCEAAABCeXRlQ291bnRpbmdPdXRwdXRTdHJlYW0uX19pbml0X19YAwAAAGRlZktcS2CHWCIAAABPdXRwdXRTdHJlYW0ud3JpdGVfYmlnZW5kaWFuX2ludDMyWAMAAABkZWZLRktIh1giAAAAQnl0ZUNvdW50aW5nT3V0cHV0U3RyZWFtLmdldF9jb3VudFgDAAAAZGVmS2pLbIdYCwAAAElucHV0U3RyZWFtWAUAAABjbGFzc0t0S7qHWBoAAABJbnB1dFN0cmVhbS5yZWFkX3Zhcl9pbnQ2NFgDAAAAZGVmS5xLrodYGAAAAEJ5dGVDb3VudGluZ091dHB1dFN0cmVhbVgFAAAAY2xhc3NLV0tyh3V9cr+DAAAoWBcAAABPdXRwdXRTdHJlYW0ud3JpdGVfYnl0ZVgeAAAAYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtcsCDAABYEAAAAE91dHB1dFN0cmVhbS5nZXRqwIMAAFgiAAAAT3V0cHV0U3RyZWFtLndyaXRlX2JpZ2VuZGlhbl9pbnQ2NGrAgwAAWA8AAABnZXRfdmFyaW50X3NpemVqwIMAAFgeAAAAQnl0ZUNvdW50aW5nT3V0cHV0U3RyZWFtLndyaXRlasCDAABYIQAAAElucHV0U3RyZWFtLnJlYWRfYmlnZW5kaWFuX3VpbnQ2NGrAgwAAWCMAAABCeXRlQ291bnRpbmdPdXRwdXRTdHJlYW0ud3JpdGVfYnl0ZWrAgwAAWBAAAABJbnB1dFN0cmVhbS5zaXplasCDAABYIgAAAEJ5dGVDb3VudGluZ091dHB1dFN0cmVhbS5nZXRfY291bnRqwIMAAFgjAAAAT3V0cHV0U3RyZWFtLndyaXRlX2JpZ2VuZGlhbl91aW50NjRqwIMAAFgMAAAAT3V0cHV0U3RyZWFtasCDAABYIAAAAElucHV0U3RyZWFtLnJlYWRfYmlnZW5kaWFuX2ludDY0asCDAABYHAAAAE91dHB1dFN0cmVhbS53cml0ZV92YXJfaW50NjRqwIMAAFgQAAAASW5wdXRTdHJlYW0ucmVhZGrAgwAAWCEAAABJbnB1dFN0cmVhbS5yZWFkX2JpZ2VuZGlhbl9kb3VibGVqwIMAAFgcAAAAQnl0ZUNvdW50aW5nT3V0cHV0U3RyZWFtLmdldGrAgwAAWCMAAABPdXRwdXRTdHJlYW0ud3JpdGVfYmlnZW5kaWFuX2RvdWJsZWrAgwAAWBkAAABJbnB1dFN0cmVhbS5yZWFkX2J5dGVfcHkyasCDAABYGQAAAElucHV0U3RyZWFtLnJlYWRfYnl0ZV9weTNqwIMAAFggAAAASW5wdXRTdHJlYW0ucmVhZF9iaWdlbmRpYW5faW50MzJqwIMAAFgRAAAAT3V0cHV0U3RyZWFtLnNpemVqwIMAAFgUAAAASW5wdXRTdHJlYW0ucmVhZF9hbGxqwIMAAFgLAAAASW5wdXRTdHJlYW1qwIMAAFgiAAAAT3V0cHV0U3RyZWFtLndyaXRlX2JpZ2VuZGlhbl9pbnQzMmrAgwAAWBIAAABPdXRwdXRTdHJlYW0ud3JpdGVqwIMAAFgaAAAASW5wdXRTdHJlYW0ucmVhZF92YXJfaW50NjRqwIMAAFgYAAAAQnl0ZUNvdW50aW5nT3V0cHV0U3RyZWFtasCDAAB1an1pAABYHgAAAGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbXLBgwAAhYFywoMAAH1yw4MAAGJ0csSDAABVGWFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMoWBWAAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkNvbGxlY3Rpb24gb2YgdXNlZnVsIGNvZGVycy4KCk9ubHkgdGhvc2UgY29kZXJzIGxpc3RlZCBpbiBfX2FsbF9fIGFyZSBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJIG9mIHRoaXMgbW9kdWxlLgoiIiIKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBiYXNlNjQKaW1wb3J0IHN5cwpmcm9tIGJ1aWx0aW5zIGltcG9ydCBvYmplY3QKCmltcG9ydCBnb29nbGUucHJvdG9idWYud3JhcHBlcnNfcGIyCmZyb20gZnV0dXJlLm1vdmVzIGltcG9ydCBwaWNrbGUKCmZyb20gYXBhY2hlX2JlYW0uY29kZXJzIGltcG9ydCBjb2Rlcl9pbXBsCmZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkgaW1wb3J0IGNvbW1vbl91cm5zCmZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkgaW1wb3J0IHB5dGhvbl91cm5zCmZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpIGltcG9ydCBiZWFtX3J1bm5lcl9hcGlfcGIyCmZyb20gYXBhY2hlX2JlYW0udXRpbHMgaW1wb3J0IHByb3RvX3V0aWxzCgojIHB5bGludDogZGlzYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbiwgdW5ncm91cGVkLWltcG9ydHMKdHJ5OgogIGZyb20gLnN0cmVhbSBpbXBvcnQgZ2V0X3ZhcmludF9zaXplCmV4Y2VwdCBJbXBvcnRFcnJvcjoKICBmcm9tIC5zbG93X3N0cmVhbSBpbXBvcnQgZ2V0X3ZhcmludF9zaXplCiMgcHlsaW50OiBlbmFibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24sIHVuZ3JvdXBlZC1pbXBvcnRzCgoKIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KIyBBdm9pZCBkZXBlbmRlbmNpZXMgb24gdGhlIGZ1bGwgU0RLLgp0cnk6CiAgIyBJbXBvcnQgZGlsbCBmcm9tIHRoZSBwaWNrbGVyIG1vZHVsZSB0byBtYWtlIHN1cmUgb3VyIG1vbmtleS1wYXRjaGluZyBvZiBkaWxsCiAgIyBvY2N1cnMuCiAgZnJvbSBhcGFjaGVfYmVhbS5pbnRlcm5hbC5waWNrbGVyIGltcG9ydCBkaWxsCmV4Y2VwdCBJbXBvcnRFcnJvcjoKICAjIFdlIGZhbGwgYmFjayB0byB1c2luZyB0aGUgc3RvY2sgZGlsbCBsaWJyYXJ5IGluIHRlc3RzIHRoYXQgZG9uJ3QgdXNlIHRoZQogICMgZnVsbCBQeXRob24gU0RLLgogIGltcG9ydCBkaWxsCgoKX19hbGxfXyA9IFsnQ29kZXInLAogICAgICAgICAgICdCeXRlc0NvZGVyJywgJ0RpbGxDb2RlcicsICdGYXN0UHJpbWl0aXZlc0NvZGVyJywgJ0Zsb2F0Q29kZXInLAogICAgICAgICAgICdJdGVyYWJsZUNvZGVyJywgJ1BpY2tsZUNvZGVyJywgJ1Byb3RvQ29kZXInLCAnU2luZ2xldG9uQ29kZXInLAogICAgICAgICAgICdTdHJVdGY4Q29kZXInLCAnVGltZXN0YW1wQ29kZXInLCAnVHVwbGVDb2RlcicsCiAgICAgICAgICAgJ1R1cGxlU2VxdWVuY2VDb2RlcicsICdWYXJJbnRDb2RlcicsICdXaW5kb3dlZFZhbHVlQ29kZXInXQoKCmRlZiBzZXJpYWxpemVfY29kZXIoY29kZXIpOgogIGZyb20gYXBhY2hlX2JlYW0uaW50ZXJuYWwgaW1wb3J0IHBpY2tsZXIKICByZXR1cm4gYiclcyQlcycgJSAoY29kZXIuX19jbGFzc19fLl9fbmFtZV9fLmVuY29kZSgndXRmLTgnKSwKICAgICAgICAgICAgICAgICAgICAgcGlja2xlci5kdW1wcyhjb2RlcikpCgoKZGVmIGRlc2VyaWFsaXplX2NvZGVyKHNlcmlhbGl6ZWQpOgogIGZyb20gYXBhY2hlX2JlYW0uaW50ZXJuYWwgaW1wb3J0IHBpY2tsZXIKICByZXR1cm4gcGlja2xlci5sb2FkcyhzZXJpYWxpemVkLnNwbGl0KGInJCcsIDEpWzFdKQojIHB5bGludDogZW5hYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCgoKY2xhc3MgQ29kZXIob2JqZWN0KToKICAiIiJCYXNlIGNsYXNzIGZvciBjb2RlcnMuIiIiCgogIGRlZiBlbmNvZGUoc2VsZiwgdmFsdWUpOgogICAgIiIiRW5jb2RlcyB0aGUgZ2l2ZW4gb2JqZWN0IGludG8gYSBieXRlIHN0cmluZy4iIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ0VuY29kZSBub3QgaW1wbGVtZW50ZWQ6ICVzLicgJSBzZWxmKQoKICBkZWYgZGVjb2RlKHNlbGYsIGVuY29kZWQpOgogICAgIiIiRGVjb2RlcyB0aGUgZ2l2ZW4gYnl0ZSBzdHJpbmcgaW50byB0aGUgY29ycmVzcG9uZGluZyBvYmplY3QuIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdEZWNvZGUgbm90IGltcGxlbWVudGVkOiAlcy4nICUgc2VsZikKCiAgZGVmIGlzX2RldGVybWluaXN0aWMoc2VsZik6CiAgICAiIiJXaGV0aGVyIHRoaXMgY29kZXIgaXMgZ3VhcmFudGVlZCB0byBlbmNvZGUgdmFsdWVzIGRldGVybWluaXN0aWNhbGx5LgoKICAgIEEgZGV0ZXJtaW5pc3RpYyBjb2RlciBpcyByZXF1aXJlZCBmb3Iga2V5IGNvZGVycyBpbiBHcm91cEJ5S2V5IG9wZXJhdGlvbnMKICAgIHRvIHByb2R1Y2UgY29uc2lzdGVudCByZXN1bHRzLgoKICAgIEZvciBleGFtcGxlLCBub3RlIHRoYXQgdGhlIGRlZmF1bHQgY29kZXIsIHRoZSBQaWNrbGVDb2RlciwgaXMgbm90CiAgICBkZXRlcm1pbmlzdGljOiB0aGUgb3JkZXJpbmcgb2YgcGlja2VkIGVudHJpZXMgaW4gbWFwcyBtYXkgdmFyeSBhY3Jvc3MKICAgIGV4ZWN1dGlvbnMgc2luY2UgdGhlcmUgaXMgbm8gZGVmaW5lZCBvcmRlciwgYW5kIHN1Y2ggYSBjb2RlciBpcyBub3QgaW4KICAgIGdlbmVyYWwgc3VpdGFibGUgZm9yIHVzYWdlIGFzIGEga2V5IGNvZGVyIGluIEdyb3VwQnlLZXkgb3BlcmF0aW9ucywgc2luY2UKICAgIGVhY2ggaW5zdGFuY2Ugb2YgdGhlIHNhbWUga2V5IG1heSBiZSBlbmNvZGVkIGRpZmZlcmVudGx5LgoKICAgIFJldHVybnM6CiAgICAgIFdoZXRoZXIgY29kZXIgaXMgZGV0ZXJtaW5pc3RpYy4KICAgICIiIgogICAgcmV0dXJuIEZhbHNlCgogIGRlZiBhc19kZXRlcm1pbmlzdGljX2NvZGVyKHNlbGYsIHN0ZXBfbGFiZWwsIGVycm9yX21lc3NhZ2U9Tm9uZSk6CiAgICAiIiJSZXR1cm5zIGEgZGV0ZXJtaW5pc3RpYyB2ZXJzaW9uIG9mIHNlbGYsIGlmIHBvc3NpYmxlLgoKICAgIE90aGVyd2lzZSByYWlzZXMgYSB2YWx1ZSBlcnJvci4KICAgICIiIgogICAgaWYgc2VsZi5pc19kZXRlcm1pbmlzdGljKCk6CiAgICAgIHJldHVybiBzZWxmCiAgICBlbHNlOgogICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm9yX21lc3NhZ2Ugb3IgIiclcycgY2Fubm90IGJlIG1hZGUgZGV0ZXJtaW5pc3RpYy4iKQoKICBkZWYgZXN0aW1hdGVfc2l6ZShzZWxmLCB2YWx1ZSk6CiAgICAiIiJFc3RpbWF0ZXMgdGhlIGVuY29kZWQgc2l6ZSBvZiB0aGUgZ2l2ZW4gdmFsdWUsIGluIGJ5dGVzLgoKICAgIERhdGFmbG93IGVzdGltYXRlcyB0aGUgZW5jb2RlZCBzaXplIG9mIGEgUENvbGxlY3Rpb24gcHJvY2Vzc2VkIGluIGEgcGlwZWxpbmUKICAgIHN0ZXAgYnkgdXNpbmcgdGhlIGVzdGltYXRlZCBzaXplIG9mIGEgcmFuZG9tIHNhbXBsZSBvZiBlbGVtZW50cyBpbiB0aGF0CiAgICBQQ29sbGVjdGlvbi4KCiAgICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBlbmNvZGVzIHRoZSBnaXZlbiB2YWx1ZSBhbmQgcmV0dXJucyBpdHMgYnl0ZQogICAgc2l6ZS4gIElmIGEgY29kZXIgY2FuIHByb3ZpZGUgYSBmYXN0IGVzdGltYXRlIG9mIHRoZSBlbmNvZGVkIHNpemUgb2YgYSB2YWx1ZQogICAgKGUuZy4sIGlmIHRoZSBlbmNvZGluZyBoYXMgYSBmaXhlZCBzaXplKSwgaXQgY2FuIHByb3ZpZGUgaXRzIGVzdGltYXRlIGhlcmUKICAgIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuCgogICAgQXJndW1lbnRzOgogICAgICB2YWx1ZTogdGhlIHZhbHVlIHdob3NlIGVuY29kZWQgc2l6ZSBpcyB0byBiZSBlc3RpbWF0ZWQuCgogICAgUmV0dXJuczoKICAgICAgVGhlIGVzdGltYXRlZCBlbmNvZGVkIHNpemUgb2YgdGhlIGdpdmVuIHZhbHVlLgogICAgIiIiCiAgICByZXR1cm4gbGVuKHNlbGYuZW5jb2RlKHZhbHVlKSkKCiAgIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAjIE1ldGhvZHMgYmVsb3cgYXJlIGludGVybmFsIFNESyBkZXRhaWxzIHRoYXQgZG9uJ3QgbmVlZCB0byBiZSBtb2RpZmllZCBmb3IKICAjIHVzZXItZGVmaW5lZCBjb2RlcnMuCiAgIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgZGVmIF9jcmVhdGVfaW1wbChzZWxmKToKICAgICIiIkNyZWF0ZXMgYSBDb2RlckltcGwgdG8gZG8gdGhlIGFjdHVhbCBlbmNvZGluZyBhbmQgZGVjb2RpbmcuCiAgICAiIiIKICAgIHJldHVybiBjb2Rlcl9pbXBsLkNhbGxiYWNrQ29kZXJJbXBsKHNlbGYuZW5jb2RlLCBzZWxmLmRlY29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXN0aW1hdGVfc2l6ZSkKCiAgZGVmIGdldF9pbXBsKHNlbGYpOgogICAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICAgIFJldHVybnMgdGhlIENvZGVySW1wbCBiYWNraW5nIHRoaXMgQ29kZXIuCiAgICAiIiIKICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICdfaW1wbCcpOgogICAgICBzZWxmLl9pbXBsID0gc2VsZi5fY3JlYXRlX2ltcGwoKQogICAgICBhc3NlcnQgaXNpbnN0YW5jZShzZWxmLl9pbXBsLCBjb2Rlcl9pbXBsLkNvZGVySW1wbCkKICAgIHJldHVybiBzZWxmLl9pbXBsCgogIGRlZiBfX2dldHN0YXRlX18oc2VsZik6CiAgICByZXR1cm4gc2VsZi5fZGljdF93aXRob3V0X2ltcGwoKQoKICBkZWYgX2RpY3Rfd2l0aG91dF9pbXBsKHNlbGYpOgogICAgaWYgaGFzYXR0cihzZWxmLCAnX2ltcGwnKToKICAgICAgZCA9IGRpY3Qoc2VsZi5fX2RpY3RfXykKICAgICAgZGVsIGRbJ19pbXBsJ10KICAgICAgcmV0dXJuIGQKICAgIHJldHVybiBzZWxmLl9fZGljdF9fCgogIEBjbGFzc21ldGhvZAogIGRlZiBmcm9tX3R5cGVfaGludChjbHMsIHVudXNlZF90eXBlaGludCwgdW51c2VkX3JlZ2lzdHJ5KToKICAgICMgSWYgbm90IG92ZXJyaWRkZW4sIGp1c3QgY29uc3RydWN0IHRoZSBjb2RlciB3aXRob3V0IGFyZ3VtZW50cy4KICAgIHJldHVybiBjbHMoKQoKICBkZWYgaXNfa3ZfY29kZXIoc2VsZik6CiAgICByZXR1cm4gRmFsc2UKCiAgZGVmIGtleV9jb2RlcihzZWxmKToKICAgIGlmIHNlbGYuaXNfa3ZfY29kZXIoKToKICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigna2V5X2NvZGVyOiAlcycgJSBzZWxmKQogICAgZWxzZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignTm90IGEgS1YgY29kZXI6ICVzLicgJSBzZWxmKQoKICBkZWYgdmFsdWVfY29kZXIoc2VsZik6CiAgICBpZiBzZWxmLmlzX2t2X2NvZGVyKCk6CiAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ3ZhbHVlX2NvZGVyOiAlcycgJSBzZWxmKQogICAgZWxzZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignTm90IGEgS1YgY29kZXI6ICVzLicgJSBzZWxmKQoKICBkZWYgX2dldF9jb21wb25lbnRfY29kZXJzKHNlbGYpOgogICAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICAgIFJldHVybnMgdGhlIGludGVybmFsIGNvbXBvbmVudCBjb2RlcnMgb2YgdGhpcyBjb2Rlci4iIiIKICAgICMgVGhpcyBpcyBhbiBpbnRlcm5hbCBkZXRhaWwgb2YgdGhlIENvZGVyIEFQSSBhbmQgZG9lcyBub3QgbmVlZCB0byBiZQogICAgIyByZWZpbmVkIGluIHVzZXItZGVmaW5lZCBDb2RlcnMuCiAgICByZXR1cm4gW10KCiAgZGVmIGFzX2Nsb3VkX29iamVjdChzZWxmLCBjb2RlcnNfY29udGV4dD1Ob25lKToKICAgICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgICBSZXR1cm5zIEdvb2dsZSBDbG91ZCBEYXRhZmxvdyBBUEkgZGVzY3JpcHRpb24gb2YgdGhpcyBjb2Rlci4iIiIKICAgICMgVGhpcyBpcyBhbiBpbnRlcm5hbCBkZXRhaWwgb2YgdGhlIENvZGVyIEFQSSBhbmQgZG9lcyBub3QgbmVlZCB0byBiZQogICAgIyByZWZpbmVkIGluIHVzZXItZGVmaW5lZCBDb2RlcnMuCgogICAgdmFsdWUgPSB7CiAgICAgICAgIyBXZSBwYXNzIGNvZGVycyBpbiB0aGUgZm9ybSAiPGNvZGVyX25hbWU+JDxwaWNrbGVkX2RhdGE+IiB0byBtYWtlIHRoZQogICAgICAgICMgam9iIGRlc2NyaXB0aW9uIEpTT04gbW9yZSByZWFkYWJsZS4gIERhdGEgYmVmb3JlIHRoZSAkIGlzIGlnbm9yZWQgYnkKICAgICAgICAjIHRoZSB3b3JrZXIuCiAgICAgICAgJ0B0eXBlJzoKICAgICAgICAgICAgc2VyaWFsaXplX2NvZGVyKHNlbGYpLAogICAgICAgICdjb21wb25lbnRfZW5jb2RpbmdzJzogWwogICAgICAgICAgICBjb21wb25lbnQuYXNfY2xvdWRfb2JqZWN0KGNvZGVyc19jb250ZXh0KQogICAgICAgICAgICBmb3IgY29tcG9uZW50IGluIHNlbGYuX2dldF9jb21wb25lbnRfY29kZXJzKCkKICAgICAgICBdLAogICAgfQoKICAgIGlmIGNvZGVyc19jb250ZXh0OgogICAgICB2YWx1ZVsncGlwZWxpbmVfcHJvdG9fY29kZXJfaWQnXSA9IGNvZGVyc19jb250ZXh0LmdldF9pZChzZWxmKQoKICAgIHJldHVybiB2YWx1ZQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18uX19uYW1lX18KCiAgIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcwogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuIChzZWxmLl9fY2xhc3NfXyA9PSBvdGhlci5fX2NsYXNzX18KICAgICAgICAgICAgYW5kIHNlbGYuX2RpY3Rfd2l0aG91dF9pbXBsKCkgPT0gb3RoZXIuX2RpY3Rfd2l0aG91dF9pbXBsKCkpCiAgIyBweWxpbnQ6IGVuYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCgogIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgogICAgIyBUT0RPKEJFQU0tNTk0OSk6IE5lZWRlZCBmb3IgUHl0aG9uIDIgY29tcGF0aWJpbGl0eS4KICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaCh0eXBlKHNlbGYpKQoKICBfa25vd25fdXJucyA9IHt9CgogIEBjbGFzc21ldGhvZAogIGRlZiByZWdpc3Rlcl91cm4oY2xzLCB1cm4sIHBhcmFtZXRlcl90eXBlLCBmbj1Ob25lKToKICAgICIiIlJlZ2lzdGVycyBhIHVybiB3aXRoIGEgY29uc3RydWN0b3IuCgogICAgRm9yIGV4YW1wbGUsIGlmICdiZWFtOmZuOmZvbycgaGFkIHBhcmFtZXRlciB0eXBlIEZvb1BheWxvYWQsIG9uZSBjb3VsZAogICAgd3JpdGUgYFJ1bm5lckFwaUZuLnJlZ2lzdGVyX3VybignYmVhbjpmbjpmb28nLCBGb29QYXlsb2FkLCBmb29fZnJvbV9wcm90bylgCiAgICB3aGVyZSBmb29fZnJvbV9wcm90byB0b29rIGFzIGFyZ3VtZW50cyBhIEZvb1BheWxvYWQgYW5kIGEgUGlwZWxpbmVDb250ZXh0LgogICAgVGhpcyBmdW5jdGlvbiBjYW4gYWxzbyBiZSB1c2VkIGFzIGEgZGVjb3JhdG9yIHJhdGhlciB0aGFuIHBhc3NpbmcgdGhlCiAgICBjYWxsYWJsZSBpbiBhcyB0aGUgZmluYWwgcGFyYW1ldGVyLgoKICAgIEEgY29ycmVzcG9uZGluZyB0b19ydW5uZXJfYXBpX3BhcmFtZXRlciBtZXRob2Qgd291bGQgYmUgZXhwZWN0ZWQgdGhhdAogICAgcmV0dXJucyB0aGUgdHVwbGUgKCdiZWFtOmZuOmZvbycsIEZvb1BheWxvYWQpCiAgICAiIiIKICAgIGRlZiByZWdpc3Rlcihmbik6CiAgICAgIGNscy5fa25vd25fdXJuc1t1cm5dID0gcGFyYW1ldGVyX3R5cGUsIGZuCiAgICAgIHJldHVybiBzdGF0aWNtZXRob2QoZm4pCiAgICBpZiBmbjoKICAgICAgIyBVc2VkIGFzIGEgc3RhdGVtZW50LgogICAgICByZWdpc3RlcihmbikKICAgIGVsc2U6CiAgICAgICMgVXNlZCBhcyBhIGRlY29yYXRvci4KICAgICAgcmV0dXJuIHJlZ2lzdGVyCgogIGRlZiB0b19ydW5uZXJfYXBpKHNlbGYsIGNvbnRleHQpOgogICAgdXJuLCB0eXBlZF9wYXJhbSwgY29tcG9uZW50cyA9IHNlbGYudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoY29udGV4dCkKICAgIHJldHVybiBiZWFtX3J1bm5lcl9hcGlfcGIyLkNvZGVyKAogICAgICAgIHNwZWM9YmVhbV9ydW5uZXJfYXBpX3BiMi5TZGtGdW5jdGlvblNwZWMoCiAgICAgICAgICAgIGVudmlyb25tZW50X2lkPSgKICAgICAgICAgICAgICAgIGNvbnRleHQuZGVmYXVsdF9lbnZpcm9ubWVudF9pZCgpIGlmIGNvbnRleHQgZWxzZSBOb25lKSwKICAgICAgICAgICAgc3BlYz1iZWFtX3J1bm5lcl9hcGlfcGIyLkZ1bmN0aW9uU3BlYygKICAgICAgICAgICAgICAgIHVybj11cm4sCiAgICAgICAgICAgICAgICBwYXlsb2FkPXR5cGVkX3BhcmFtCiAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVkX3BhcmFtLCAoYnl0ZXMsIHR5cGUoTm9uZSkpKQogICAgICAgICAgICAgICAgZWxzZSB0eXBlZF9wYXJhbS5TZXJpYWxpemVUb1N0cmluZygpKSksCiAgICAgICAgY29tcG9uZW50X2NvZGVyX2lkcz1bY29udGV4dC5jb2RlcnMuZ2V0X2lkKGMpIGZvciBjIGluIGNvbXBvbmVudHNdKQoKICBAY2xhc3NtZXRob2QKICBkZWYgZnJvbV9ydW5uZXJfYXBpKGNscywgY29kZXJfcHJvdG8sIGNvbnRleHQpOgogICAgIiIiQ29udmVydHMgZnJvbSBhbiBTZGtGdW5jdGlvblNwZWMgdG8gYSBGbiBvYmplY3QuCgogICAgUHJlZmVyIHJlZ2lzdGVyaW5nIGEgdXJuIHdpdGggaXRzIHBhcmFtZXRlciB0eXBlIGFuZCBjb25zdHJ1Y3Rvci4KICAgICIiIgogICAgcGFyYW1ldGVyX3R5cGUsIGNvbnN0cnVjdG9yID0gY2xzLl9rbm93bl91cm5zW2NvZGVyX3Byb3RvLnNwZWMuc3BlYy51cm5dCiAgICByZXR1cm4gY29uc3RydWN0b3IoCiAgICAgICAgcHJvdG9fdXRpbHMucGFyc2VfQnl0ZXMoY29kZXJfcHJvdG8uc3BlYy5zcGVjLnBheWxvYWQsIHBhcmFtZXRlcl90eXBlKSwKICAgICAgICBbY29udGV4dC5jb2RlcnMuZ2V0X2J5X2lkKGMpIGZvciBjIGluIGNvZGVyX3Byb3RvLmNvbXBvbmVudF9jb2Rlcl9pZHNdLAogICAgICAgIGNvbnRleHQpCgogIGRlZiB0b19ydW5uZXJfYXBpX3BhcmFtZXRlcihzZWxmLCBjb250ZXh0KToKICAgIHJldHVybiAoCiAgICAgICAgcHl0aG9uX3VybnMuUElDS0xFRF9DT0RFUiwKICAgICAgICBnb29nbGUucHJvdG9idWYud3JhcHBlcnNfcGIyLkJ5dGVzVmFsdWUodmFsdWU9c2VyaWFsaXplX2NvZGVyKHNlbGYpKSwKICAgICAgICAoKSkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiByZWdpc3Rlcl9zdHJ1Y3R1cmVkX3Vybih1cm4sIGNscyk6CiAgICAiIiJSZWdpc3RlciBhIGNvZGVyIHRoYXQncyBjb21wbGV0ZWx5IGRlZmluZWQgYnkgaXRzIHVybiBhbmQgaXRzCiAgICBjb21wb25lbnQocyksIGlmIGFueSwgd2hpY2ggYXJlIHBhc3NlZCB0byBjb25zdHJ1Y3QgdGhlIGluc3RhbmNlLgogICAgIiIiCiAgICBjbHMudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIgPSAoCiAgICAgICAgbGFtYmRhIHNlbGYsIHVudXNlZF9jb250ZXh0OiAodXJuLCBOb25lLCBzZWxmLl9nZXRfY29tcG9uZW50X2NvZGVycygpKSkKCiAgICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtdmFyaWFibGUKICAgIEBDb2Rlci5yZWdpc3Rlcl91cm4odXJuLCBOb25lKQogICAgZGVmIGZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXIodW51c2VkX3BheWxvYWQsIGNvbXBvbmVudHMsIHVudXNlZF9jb250ZXh0KToKICAgICAgaWYgY29tcG9uZW50czoKICAgICAgICByZXR1cm4gY2xzKCpjb21wb25lbnRzKQogICAgICBlbHNlOgogICAgICAgIHJldHVybiBjbHMoKQoKCkBDb2Rlci5yZWdpc3Rlcl91cm4oCiAgICBweXRob25fdXJucy5QSUNLTEVEX0NPREVSLCBnb29nbGUucHJvdG9idWYud3JhcHBlcnNfcGIyLkJ5dGVzVmFsdWUpCmRlZiBfcGlja2xlX2Zyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXIocGF5bG9hZCwgY29tcG9uZW50cywgY29udGV4dCk6CiAgcmV0dXJuIGRlc2VyaWFsaXplX2NvZGVyKHBheWxvYWQudmFsdWUpCgoKY2xhc3MgU3RyVXRmOENvZGVyKENvZGVyKToKICAiIiJBIGNvZGVyIHVzZWQgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgc3RyaW5ncyBhcyBVVEYtOC4iIiIKCiAgZGVmIGVuY29kZShzZWxmLCB2YWx1ZSk6CiAgICByZXR1cm4gdmFsdWUuZW5jb2RlKCd1dGYtOCcpCgogIGRlZiBkZWNvZGUoc2VsZiwgdmFsdWUpOgogICAgcmV0dXJuIHZhbHVlLmRlY29kZSgndXRmLTgnKQoKICBkZWYgaXNfZGV0ZXJtaW5pc3RpYyhzZWxmKToKICAgIHJldHVybiBUcnVlCgoKY2xhc3MgVG9TdHJpbmdDb2RlcihDb2Rlcik6CiAgIiIiQSBkZWZhdWx0IHN0cmluZyBjb2RlciB1c2VkIGlmIG5vIHNpbmsgY29kZXIgaXMgc3BlY2lmaWVkLiIiIgoKICBpZiBzeXMudmVyc2lvbl9pbmZvLm1ham9yID09IDI6CgogICAgZGVmIGVuY29kZShzZWxmLCB2YWx1ZSk6CiAgICAgICMgcHlsaW50OiBkaXNhYmxlPXVuaWNvZGUtYnVpbHRpbgogICAgICByZXR1cm4gKHZhbHVlLmVuY29kZSgndXRmLTgnKSBpZiBpc2luc3RhbmNlKHZhbHVlLCB1bmljb2RlKSAgIyBub3FhOiBGODIxCiAgICAgICAgICAgICAgZWxzZSBzdHIodmFsdWUpKQoKICBlbHNlOgoKICAgIGRlZiBlbmNvZGUoc2VsZiwgdmFsdWUpOgogICAgICByZXR1cm4gdmFsdWUgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYnl0ZXMpIGVsc2Ugc3RyKHZhbHVlKS5lbmNvZGUoJ3V0Zi04JykKCiAgZGVmIGRlY29kZShzZWxmLCBfKToKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ1RvU3RyaW5nQ29kZXIgY2Fubm90IGJlIHVzZWQgZm9yIGRlY29kaW5nLicpCgogIGRlZiBpc19kZXRlcm1pbmlzdGljKHNlbGYpOgogICAgcmV0dXJuIFRydWUKCgpjbGFzcyBGYXN0Q29kZXIoQ29kZXIpOgogICIiIkNvZGVyIHN1YmNsYXNzIHVzZWQgd2hlbiBhIChmYXN0ZXIpIENvZGVySW1wbCBpcyBzdXBwbGllZCBkaXJlY3RseS4KCiAgVGhlIENvZGVyIGNsYXNzIGRlZmluZXMgX2NyZWF0ZV9pbXBsIGluIHRlcm1zIG9mIGVuY29kZSgpIGFuZCBkZWNvZGUoKTsKICB0aGlzIGNsYXNzIGludmVydHMgdGhhdCBieSBkZWZpbmluZyBlbmNvZGUoKSBhbmQgZGVjb2RlKCkgaW4gdGVybXMgb2YKICBfY3JlYXRlX2ltcGwoKS4KICAiIiIKCiAgZGVmIGVuY29kZShzZWxmLCB2YWx1ZSk6CiAgICAiIiJFbmNvZGVzIHRoZSBnaXZlbiBvYmplY3QgaW50byBhIGJ5dGUgc3RyaW5nLiIiIgogICAgcmV0dXJuIHNlbGYuZ2V0X2ltcGwoKS5lbmNvZGUodmFsdWUpCgogIGRlZiBkZWNvZGUoc2VsZiwgZW5jb2RlZCk6CiAgICAiIiJEZWNvZGVzIHRoZSBnaXZlbiBieXRlIHN0cmluZyBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIG9iamVjdC4iIiIKICAgIHJldHVybiBzZWxmLmdldF9pbXBsKCkuZGVjb2RlKGVuY29kZWQpCgogIGRlZiBlc3RpbWF0ZV9zaXplKHNlbGYsIHZhbHVlKToKICAgIHJldHVybiBzZWxmLmdldF9pbXBsKCkuZXN0aW1hdGVfc2l6ZSh2YWx1ZSkKCiAgZGVmIF9jcmVhdGVfaW1wbChzZWxmKToKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCgpjbGFzcyBCeXRlc0NvZGVyKEZhc3RDb2Rlcik6CiAgIiIiQnl0ZSBzdHJpbmcgY29kZXIuIiIiCgogIGRlZiBfY3JlYXRlX2ltcGwoc2VsZik6CiAgICByZXR1cm4gY29kZXJfaW1wbC5CeXRlc0NvZGVySW1wbCgpCgogIGRlZiBpc19kZXRlcm1pbmlzdGljKHNlbGYpOgogICAgcmV0dXJuIFRydWUKCiAgZGVmIGFzX2Nsb3VkX29iamVjdChzZWxmLCBjb2RlcnNfY29udGV4dD1Ob25lKToKICAgIHJldHVybiB7CiAgICAgICAgJ0B0eXBlJzogJ2tpbmQ6Ynl0ZXMnLAogICAgfQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiB0eXBlKHNlbGYpID09IHR5cGUob3RoZXIpCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKHR5cGUoc2VsZikpCgoKQ29kZXIucmVnaXN0ZXJfc3RydWN0dXJlZF91cm4oY29tbW9uX3VybnMuY29kZXJzLkJZVEVTLnVybiwgQnl0ZXNDb2RlcikKCgpjbGFzcyBWYXJJbnRDb2RlcihGYXN0Q29kZXIpOgogICIiIlZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyIGNvZGVyLiIiIgoKICBkZWYgX2NyZWF0ZV9pbXBsKHNlbGYpOgogICAgcmV0dXJuIGNvZGVyX2ltcGwuVmFySW50Q29kZXJJbXBsKCkKCiAgZGVmIGlzX2RldGVybWluaXN0aWMoc2VsZik6CiAgICByZXR1cm4gVHJ1ZQoKICBkZWYgYXNfY2xvdWRfb2JqZWN0KHNlbGYsIGNvZGVyc19jb250ZXh0PU5vbmUpOgogICAgcmV0dXJuIHsKICAgICAgICAnQHR5cGUnOiAna2luZDp2YXJpbnQnLAogICAgfQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiB0eXBlKHNlbGYpID09IHR5cGUob3RoZXIpCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKHR5cGUoc2VsZikpCgoKQ29kZXIucmVnaXN0ZXJfc3RydWN0dXJlZF91cm4oY29tbW9uX3VybnMuY29kZXJzLlZBUklOVC51cm4sIFZhckludENvZGVyKQoKCmNsYXNzIEZsb2F0Q29kZXIoRmFzdENvZGVyKToKICAiIiJBIGNvZGVyIHVzZWQgZm9yIGZsb2F0aW5nLXBvaW50IHZhbHVlcy4iIiIKCiAgZGVmIF9jcmVhdGVfaW1wbChzZWxmKToKICAgIHJldHVybiBjb2Rlcl9pbXBsLkZsb2F0Q29kZXJJbXBsKCkKCiAgZGVmIGlzX2RldGVybWluaXN0aWMoc2VsZik6CiAgICByZXR1cm4gVHJ1ZQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiB0eXBlKHNlbGYpID09IHR5cGUob3RoZXIpCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKHR5cGUoc2VsZikpCgoKY2xhc3MgVGltZXN0YW1wQ29kZXIoRmFzdENvZGVyKToKICAiIiJBIGNvZGVyIHVzZWQgZm9yIHRpbWV1dGlsLlRpbWVzdGFtcCB2YWx1ZXMuIiIiCgogIGRlZiBfY3JlYXRlX2ltcGwoc2VsZik6CiAgICByZXR1cm4gY29kZXJfaW1wbC5UaW1lc3RhbXBDb2RlckltcGwoKQoKICBkZWYgaXNfZGV0ZXJtaW5pc3RpYyhzZWxmKToKICAgIHJldHVybiBUcnVlCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuIHR5cGUoc2VsZikgPT0gdHlwZShvdGhlcikKCiAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgcmV0dXJuIGhhc2godHlwZShzZWxmKSkKCgpjbGFzcyBfVGltZXJDb2RlcihGYXN0Q29kZXIpOgogICIiIkEgY29kZXIgdXNlZCBmb3IgdGltZXIgdmFsdWVzLgoKICBGb3IgaW50ZXJuYWwgdXNlLiIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBwYXlsb2FkX2NvZGVyKToKICAgIHNlbGYuX3BheWxvYWRfY29kZXIgPSBwYXlsb2FkX2NvZGVyCgogIGRlZiBfZ2V0X2NvbXBvbmVudF9jb2RlcnMoc2VsZik6CiAgICByZXR1cm4gW3NlbGYuX3BheWxvYWRfY29kZXJdCgogIGRlZiBfY3JlYXRlX2ltcGwoc2VsZik6CiAgICByZXR1cm4gY29kZXJfaW1wbC5UaW1lckNvZGVySW1wbChzZWxmLl9wYXlsb2FkX2NvZGVyLmdldF9pbXBsKCkpCgogIGRlZiBpc19kZXRlcm1pbmlzdGljKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX3BheWxvYWRfY29kZXIuaXNfZGV0ZXJtaW5pc3RpYygpCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuICh0eXBlKHNlbGYpID09IHR5cGUob3RoZXIpCiAgICAgICAgICAgIGFuZCBzZWxmLl9wYXlsb2FkX2NvZGVyID09IG90aGVyLl9wYXlsb2FkX2NvZGVyKQoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaCh0eXBlKHNlbGYpKSArIGhhc2goc2VsZi5fcGF5bG9hZF9jb2RlcikKCgpDb2Rlci5yZWdpc3Rlcl9zdHJ1Y3R1cmVkX3VybigKICAgIGNvbW1vbl91cm5zLmNvZGVycy5USU1FUi51cm4sIF9UaW1lckNvZGVyKQoKCmNsYXNzIFNpbmdsZXRvbkNvZGVyKEZhc3RDb2Rlcik6CiAgIiIiQSBjb2RlciB0aGF0IGFsd2F5cyBlbmNvZGVzIGV4YWN0bHkgb25lIHZhbHVlLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgogICAgc2VsZi5fdmFsdWUgPSB2YWx1ZQoKICBkZWYgX2NyZWF0ZV9pbXBsKHNlbGYpOgogICAgcmV0dXJuIGNvZGVyX2ltcGwuU2luZ2xldG9uQ29kZXJJbXBsKHNlbGYuX3ZhbHVlKQoKICBkZWYgaXNfZGV0ZXJtaW5pc3RpYyhzZWxmKToKICAgIHJldHVybiBUcnVlCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuIHR5cGUoc2VsZikgPT0gdHlwZShvdGhlcikgYW5kIHNlbGYuX3ZhbHVlID09IG90aGVyLl92YWx1ZQoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaChzZWxmLl92YWx1ZSkKCgpkZWYgbWF5YmVfZGlsbF9kdW1wcyhvKToKICAiIiJQaWNrbGUgdXNpbmcgY1BpY2tsZSBvciB0aGUgRGlsbCBwaWNrbGVyIGFzIGEgZmFsbGJhY2suIiIiCiAgIyBXZSBuZWVkIHRvIHVzZSB0aGUgZGlsbCBwaWNrbGVyIGZvciBvYmplY3RzIG9mIGNlcnRhaW4gY3VzdG9tIGNsYXNzZXMsCiAgIyBpbmNsdWRpbmcsIGZvciBleGFtcGxlLCBvbmVzIHRoYXQgY29udGFpbiBsYW1iZGFzLgogIHRyeToKICAgIHJldHVybiBwaWNrbGUuZHVtcHMobywgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wpCiAgZXhjZXB0IEV4Y2VwdGlvbjogICMgcHlsaW50OiBkaXNhYmxlPWJyb2FkLWV4Y2VwdAogICAgcmV0dXJuIGRpbGwuZHVtcHMobykKCgpkZWYgbWF5YmVfZGlsbF9sb2FkcyhvKToKICAiIiJVbnBpY2tsZSB1c2luZyBjUGlja2xlIG9yIHRoZSBEaWxsIHBpY2tsZXIgYXMgYSBmYWxsYmFjay4iIiIKICB0cnk6CiAgICByZXR1cm4gcGlja2xlLmxvYWRzKG8pCiAgZXhjZXB0IEV4Y2VwdGlvbjogICMgcHlsaW50OiBkaXNhYmxlPWJyb2FkLWV4Y2VwdAogICAgcmV0dXJuIGRpbGwubG9hZHMobykKCgpjbGFzcyBfUGlja2xlQ29kZXJCYXNlKEZhc3RDb2Rlcik6CiAgIiIiQmFzZSBjbGFzcyBmb3IgcGlja2xpbmcgY29kZXJzLiIiIgoKICBkZWYgaXNfZGV0ZXJtaW5pc3RpYyhzZWxmKToKICAgICMgTm90ZSB0aGF0IHRoZSBkZWZhdWx0IGNvZGVyLCB0aGUgUGlja2xlQ29kZXIsIGlzIG5vdCBkZXRlcm1pbmlzdGljIChmb3IKICAgICMgZXhhbXBsZSwgdGhlIG9yZGVyaW5nIG9mIHBpY2tlZCBlbnRyaWVzIGluIG1hcHMgbWF5IHZhcnkgYWNyb3NzCiAgICAjIGV4ZWN1dGlvbnMpLCBhbmQgc28gaXMgbm90IGluIGdlbmVyYWwgc3VpdGFibGUgZm9yIHVzYWdlIGFzIGEga2V5IGNvZGVyIGluCiAgICAjIEdyb3VwQnlLZXkgb3BlcmF0aW9ucy4KICAgIHJldHVybiBGYWxzZQoKICBkZWYgYXNfY2xvdWRfb2JqZWN0KHNlbGYsIGNvZGVyc19jb250ZXh0PU5vbmUsIGlzX3BhaXJfbGlrZT1UcnVlKToKICAgIHZhbHVlID0gc3VwZXIoX1BpY2tsZUNvZGVyQmFzZSwgc2VsZikuYXNfY2xvdWRfb2JqZWN0KGNvZGVyc19jb250ZXh0KQogICAgIyBXZSBjdXJyZW50bHkgdXNlIHRoaXMgY29kZXIgaW4gcGxhY2VzIHdoZXJlIHdlIGNhbm5vdCBpbmZlciB0aGUgY29kZXIgdG8KICAgICMgdXNlIGZvciB0aGUgdmFsdWUgdHlwZSBpbiBhIG1vcmUgZ3JhbnVsYXIgd2F5LiAgSW4gcGxhY2VzIHdoZXJlIHRoZQogICAgIyBzZXJ2aWNlIGV4cGVjdHMgYSBwYWlyLCBpdCBjaGVja3MgZm9yIHRoZSAiaXNfcGFpcl9saWtlIiBrZXksIGluIHdoaWNoCiAgICAjIGNhc2Ugd2Ugd291bGQgZmFpbCB3aXRob3V0IHRoZSBoYWNrIGJlbG93LgogICAgaWYgaXNfcGFpcl9saWtlOgogICAgICB2YWx1ZVsnaXNfcGFpcl9saWtlJ10gPSBUcnVlCiAgICAgIHZhbHVlWydjb21wb25lbnRfZW5jb2RpbmdzJ10gPSBbCiAgICAgICAgICBzZWxmLmFzX2Nsb3VkX29iamVjdChjb2RlcnNfY29udGV4dCwgaXNfcGFpcl9saWtlPUZhbHNlKSwKICAgICAgICAgIHNlbGYuYXNfY2xvdWRfb2JqZWN0KGNvZGVyc19jb250ZXh0LCBpc19wYWlyX2xpa2U9RmFsc2UpCiAgICAgIF0KCiAgICByZXR1cm4gdmFsdWUKCiAgIyBXZSBhbGxvdyAua2V5X2NvZGVyKCkgYW5kIC52YWx1ZV9jb2RlcigpIHRvIGJlIGNhbGxlZCBvbiBQaWNrbGVDb2RlciBzaW5jZQogICMgd2UgY2FuJ3QgYWx3YXlzIGluZmVyIHRoZSByZXR1cm4gdmFsdWVzIG9mIGxhbWJkYXMgaW4gUGFyRG8gb3BlcmF0aW9ucywgdGhlCiAgIyByZXN1bHQgb2Ygd2hpY2ggbWF5IGJlIHVzZWQgaW4gYSBHcm91cEJ5a2V5LgogIGRlZiBpc19rdl9jb2RlcihzZWxmKToKICAgIHJldHVybiBUcnVlCgogIGRlZiBrZXlfY29kZXIoc2VsZik6CiAgICByZXR1cm4gc2VsZgoKICBkZWYgdmFsdWVfY29kZXIoc2VsZik6CiAgICByZXR1cm4gc2VsZgoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiB0eXBlKHNlbGYpID09IHR5cGUob3RoZXIpCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKHR5cGUoc2VsZikpCgoKY2xhc3MgUGlja2xlQ29kZXIoX1BpY2tsZUNvZGVyQmFzZSk6CiAgIiIiQ29kZXIgdXNpbmcgUHl0aG9uJ3MgcGlja2xlIGZ1bmN0aW9uYWxpdHkuIiIiCgogIGRlZiBfY3JlYXRlX2ltcGwoc2VsZik6CiAgICBkdW1wcyA9IHBpY2tsZS5kdW1wcwogICAgSElHSEVTVF9QUk9UT0NPTCA9IHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MCiAgICByZXR1cm4gY29kZXJfaW1wbC5DYWxsYmFja0NvZGVySW1wbCgKICAgICAgICBsYW1iZGEgeDogZHVtcHMoeCwgSElHSEVTVF9QUk9UT0NPTCksIHBpY2tsZS5sb2FkcykKCiAgZGVmIGFzX2RldGVybWluaXN0aWNfY29kZXIoc2VsZiwgc3RlcF9sYWJlbCwgZXJyb3JfbWVzc2FnZT1Ob25lKToKICAgIHJldHVybiBEZXRlcm1pbmlzdGljRmFzdFByaW1pdGl2ZXNDb2RlcihzZWxmLCBzdGVwX2xhYmVsKQoKCmNsYXNzIERpbGxDb2RlcihfUGlja2xlQ29kZXJCYXNlKToKICAiIiJDb2RlciB1c2luZyBkaWxsJ3MgcGlja2xlIGZ1bmN0aW9uYWxpdHkuIiIiCgogIGRlZiBfY3JlYXRlX2ltcGwoc2VsZik6CiAgICByZXR1cm4gY29kZXJfaW1wbC5DYWxsYmFja0NvZGVySW1wbChtYXliZV9kaWxsX2R1bXBzLCBtYXliZV9kaWxsX2xvYWRzKQoKCmNsYXNzIERldGVybWluaXN0aWNGYXN0UHJpbWl0aXZlc0NvZGVyKEZhc3RDb2Rlcik6CiAgIiIiVGhyb3dzIHJ1bnRpbWUgZXJyb3JzIHdoZW4gZW5jb2Rpbmcgbm9uLWRldGVybWluaXN0aWMgdmFsdWVzLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgY29kZXIsIHN0ZXBfbGFiZWwpOgogICAgc2VsZi5fdW5kZXJseWluZ19jb2RlciA9IGNvZGVyCiAgICBzZWxmLl9zdGVwX2xhYmVsID0gc3RlcF9sYWJlbAoKICBkZWYgX2NyZWF0ZV9pbXBsKHNlbGYpOgogICAgcmV0dXJuIGNvZGVyX2ltcGwuRGV0ZXJtaW5pc3RpY0Zhc3RQcmltaXRpdmVzQ29kZXJJbXBsKAogICAgICAgIHNlbGYuX3VuZGVybHlpbmdfY29kZXIuZ2V0X2ltcGwoKSwgc2VsZi5fc3RlcF9sYWJlbCkKCiAgZGVmIGlzX2RldGVybWluaXN0aWMoc2VsZik6CiAgICByZXR1cm4gVHJ1ZQoKICBkZWYgaXNfa3ZfY29kZXIoc2VsZik6CiAgICByZXR1cm4gVHJ1ZQoKICBkZWYga2V5X2NvZGVyKHNlbGYpOgogICAgcmV0dXJuIHNlbGYKCiAgZGVmIHZhbHVlX2NvZGVyKHNlbGYpOgogICAgcmV0dXJuIHNlbGYKCgpjbGFzcyBGYXN0UHJpbWl0aXZlc0NvZGVyKEZhc3RDb2Rlcik6CiAgIiIiRW5jb2RlcyBzaW1wbGUgcHJpbWl0aXZlcyAoZS5nLiBzdHIsIGludCkgZWZmaWNpZW50bHkuCgogIEZvciB1bmtub3duIHR5cGVzLCBmYWxscyBiYWNrIHRvIGFub3RoZXIgY29kZXIgKGUuZy4gUGlja2xlQ29kZXIpLgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBmYWxsYmFja19jb2Rlcj1QaWNrbGVDb2RlcigpKToKICAgIHNlbGYuX2ZhbGxiYWNrX2NvZGVyID0gZmFsbGJhY2tfY29kZXIKCiAgZGVmIF9jcmVhdGVfaW1wbChzZWxmKToKICAgIHJldHVybiBjb2Rlcl9pbXBsLkZhc3RQcmltaXRpdmVzQ29kZXJJbXBsKAogICAgICAgIHNlbGYuX2ZhbGxiYWNrX2NvZGVyLmdldF9pbXBsKCkpCgogIGRlZiBpc19kZXRlcm1pbmlzdGljKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX2ZhbGxiYWNrX2NvZGVyLmlzX2RldGVybWluaXN0aWMoKQoKICBkZWYgYXNfZGV0ZXJtaW5pc3RpY19jb2RlcihzZWxmLCBzdGVwX2xhYmVsLCBlcnJvcl9tZXNzYWdlPU5vbmUpOgogICAgaWYgc2VsZi5pc19kZXRlcm1pbmlzdGljKCk6CiAgICAgIHJldHVybiBzZWxmCiAgICBlbHNlOgogICAgICByZXR1cm4gRGV0ZXJtaW5pc3RpY0Zhc3RQcmltaXRpdmVzQ29kZXIoc2VsZiwgc3RlcF9sYWJlbCkKCiAgZGVmIGFzX2Nsb3VkX29iamVjdChzZWxmLCBjb2RlcnNfY29udGV4dD1Ob25lLCBpc19wYWlyX2xpa2U9VHJ1ZSk6CiAgICB2YWx1ZSA9IHN1cGVyKEZhc3RDb2Rlciwgc2VsZikuYXNfY2xvdWRfb2JqZWN0KGNvZGVyc19jb250ZXh0KQogICAgIyBXZSBjdXJyZW50bHkgdXNlIHRoaXMgY29kZXIgaW4gcGxhY2VzIHdoZXJlIHdlIGNhbm5vdCBpbmZlciB0aGUgY29kZXIgdG8KICAgICMgdXNlIGZvciB0aGUgdmFsdWUgdHlwZSBpbiBhIG1vcmUgZ3JhbnVsYXIgd2F5LiAgSW4gcGxhY2VzIHdoZXJlIHRoZQogICAgIyBzZXJ2aWNlIGV4cGVjdHMgYSBwYWlyLCBpdCBjaGVja3MgZm9yIHRoZSAiaXNfcGFpcl9saWtlIiBrZXksIGluIHdoaWNoCiAgICAjIGNhc2Ugd2Ugd291bGQgZmFpbCB3aXRob3V0IHRoZSBoYWNrIGJlbG93LgogICAgaWYgaXNfcGFpcl9saWtlOgogICAgICB2YWx1ZVsnaXNfcGFpcl9saWtlJ10gPSBUcnVlCiAgICAgIHZhbHVlWydjb21wb25lbnRfZW5jb2RpbmdzJ10gPSBbCiAgICAgICAgICBzZWxmLmFzX2Nsb3VkX29iamVjdChjb2RlcnNfY29udGV4dCwgaXNfcGFpcl9saWtlPUZhbHNlKSwKICAgICAgICAgIHNlbGYuYXNfY2xvdWRfb2JqZWN0KGNvZGVyc19jb250ZXh0LCBpc19wYWlyX2xpa2U9RmFsc2UpCiAgICAgIF0KCiAgICByZXR1cm4gdmFsdWUKCiAgIyBXZSBhbGxvdyAua2V5X2NvZGVyKCkgYW5kIC52YWx1ZV9jb2RlcigpIHRvIGJlIGNhbGxlZCBvbiBGYXN0UHJpbWl0aXZlc0NvZGVyCiAgIyBzaW5jZSB3ZSBjYW4ndCBhbHdheXMgaW5mZXIgdGhlIHJldHVybiB2YWx1ZXMgb2YgbGFtYmRhcyBpbiBQYXJEbwogICMgb3BlcmF0aW9ucywgdGhlIHJlc3VsdCBvZiB3aGljaCBtYXkgYmUgdXNlZCBpbiBhIEdyb3VwQnlrZXkuCiAgZGVmIGlzX2t2X2NvZGVyKHNlbGYpOgogICAgcmV0dXJuIFRydWUKCiAgZGVmIGtleV9jb2RlcihzZWxmKToKICAgIHJldHVybiBzZWxmCgogIGRlZiB2YWx1ZV9jb2RlcihzZWxmKToKICAgIHJldHVybiBzZWxmCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuIHR5cGUoc2VsZikgPT0gdHlwZShvdGhlcikKCiAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgcmV0dXJuIGhhc2godHlwZShzZWxmKSkKCgpjbGFzcyBCYXNlNjRQaWNrbGVDb2RlcihDb2Rlcik6CiAgIiIiQ29kZXIgb2Ygb2JqZWN0cyBieSBQeXRob24gcGlja2xlLCB0aGVuIGJhc2U2NCBlbmNvZGluZy4iIiIKICAjIFRPRE8ocm9iZXJ0d2IpOiBEbyBiYXNlNjQgZW5jb2Rpbmcgd2hlcmUgaXQncyBuZWVkZWQgKGUuZy4gaW4ganNvbikgcmF0aGVyCiAgIyB0aGFuIHZpYSBhIHNwZWNpYWwgQ29kZXIuCgogIGRlZiBlbmNvZGUoc2VsZiwgdmFsdWUpOgogICAgcmV0dXJuIGJhc2U2NC5iNjRlbmNvZGUocGlja2xlLmR1bXBzKHZhbHVlLCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCkpCgogIGRlZiBkZWNvZGUoc2VsZiwgZW5jb2RlZCk6CiAgICByZXR1cm4gcGlja2xlLmxvYWRzKGJhc2U2NC5iNjRkZWNvZGUoZW5jb2RlZCkpCgogIGRlZiBpc19kZXRlcm1pbmlzdGljKHNlbGYpOgogICAgIyBOb3RlIHRoYXQgdGhlIEJhc2U2NFBpY2tsZUNvZGVyIGlzIG5vdCBkZXRlcm1pbmlzdGljLiAgU2VlIHRoZQogICAgIyBjb3JyZXNwb25kaW5nIGNvbW1lbnRzIGZvciBQaWNrbGVDb2RlciBhYm92ZS4KICAgIHJldHVybiBGYWxzZQoKICAjIFdlIGFsbG93IC5rZXlfY29kZXIoKSBhbmQgLnZhbHVlX2NvZGVyKCkgdG8gYmUgY2FsbGVkIG9uIEJhc2U2NFBpY2tsZUNvZGVyCiAgIyBzaW5jZSB3ZSBjYW4ndCBhbHdheXMgaW5mZXIgdGhlIHJldHVybiB2YWx1ZXMgb2YgbGFtYmRhcyBpbiBQYXJEbwogICMgb3BlcmF0aW9ucywgdGhlIHJlc3VsdCBvZiB3aGljaCBtYXkgYmUgdXNlZCBpbiBhIEdyb3VwQnlrZXkuCiAgIwogICMgVE9ETyhjY3kpOiB0aGlzIGlzIGN1cnJlbnRseSBvbmx5IHVzZWQgZm9yIEtWIHZhbHVlcyBmcm9tIENyZWF0ZSB0cmFuc2Zvcm1zLgogICMgSW52ZXN0aWdhdGUgYSB3YXkgdG8gdW5pZnkgdGhpcyB3aXRoIFBpY2tsZUNvZGVyLgogIGRlZiBpc19rdl9jb2RlcihzZWxmKToKICAgIHJldHVybiBUcnVlCgogIGRlZiBrZXlfY29kZXIoc2VsZik6CiAgICByZXR1cm4gc2VsZgoKICBkZWYgdmFsdWVfY29kZXIoc2VsZik6CiAgICByZXR1cm4gc2VsZgoKCmNsYXNzIFByb3RvQ29kZXIoRmFzdENvZGVyKToKICAiIiJBIENvZGVyIGZvciBHb29nbGUgUHJvdG9jb2wgQnVmZmVycy4KCiAgSXQgc3VwcG9ydHMgYm90aCBQcm90b2NvbCBCdWZmZXJzIHN5bnRheCB2ZXJzaW9ucyAyIGFuZCAzLiBIb3dldmVyLAogIHRoZSBydW50aW1lIHZlcnNpb24gb2YgdGhlIHB5dGhvbiBwcm90b2J1ZiBsaWJyYXJ5IG11c3QgZXhhY3RseSBtYXRjaCB0aGUKICB2ZXJzaW9uIG9mIHRoZSBwcm90b2MgY29tcGlsZXIgd2hhdCB3YXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgcHJvdG9idWYKICBtZXNzYWdlcy4KCiAgUHJvdG9Db2RlciBpcyByZWdpc3RlcmVkIGluIHRoZSBnbG9iYWwgQ29kZXJSZWdpc3RyeSBhcyB0aGUgZGVmYXVsdCBjb2RlciBmb3IKICBhbnkgcHJvdG9idWYgTWVzc2FnZSBvYmplY3QuCgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgcHJvdG9fbWVzc2FnZV90eXBlKToKICAgIHNlbGYucHJvdG9fbWVzc2FnZV90eXBlID0gcHJvdG9fbWVzc2FnZV90eXBlCgogIGRlZiBfY3JlYXRlX2ltcGwoc2VsZik6CiAgICByZXR1cm4gY29kZXJfaW1wbC5Qcm90b0NvZGVySW1wbChzZWxmLnByb3RvX21lc3NhZ2VfdHlwZSkKCiAgZGVmIGlzX2RldGVybWluaXN0aWMoc2VsZik6CiAgICAjIFRPRE8odmlrYXNyayk6IEEgcHJvdG8gbWVzc2FnZSBjYW4gYmUgZGV0ZXJtaW5pc3RpYyBpZiBpdCBkb2VzIG5vdCBjb250YWluCiAgICAjIGEgTWFwLgogICAgcmV0dXJuIEZhbHNlCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuICh0eXBlKHNlbGYpID09IHR5cGUob3RoZXIpCiAgICAgICAgICAgIGFuZCBzZWxmLnByb3RvX21lc3NhZ2VfdHlwZSA9PSBvdGhlci5wcm90b19tZXNzYWdlX3R5cGUpCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKHNlbGYucHJvdG9fbWVzc2FnZV90eXBlKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGZyb21fdHlwZV9oaW50KHR5cGVoaW50LCB1bnVzZWRfcmVnaXN0cnkpOgogICAgaWYgaXNzdWJjbGFzcyh0eXBlaGludCwgZ29vZ2xlLnByb3RvYnVmLm1lc3NhZ2UuTWVzc2FnZSk6CiAgICAgIHJldHVybiBQcm90b0NvZGVyKHR5cGVoaW50KQogICAgZWxzZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigoJ0V4cGVjdGVkIGEgc3ViY2xhc3Mgb2YgZ29vZ2xlLnByb3RvYnVmLm1lc3NhZ2UuTWVzc2FnZScKICAgICAgICAgICAgICAgICAgICAgICAgJywgYnV0IGdvdCBhICVzJyAlIHR5cGVoaW50KSkKCgpjbGFzcyBUdXBsZUNvZGVyKEZhc3RDb2Rlcik6CiAgIiIiQ29kZXIgb2YgdHVwbGUgb2JqZWN0cy4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbXBvbmVudHMpOgogICAgc2VsZi5fY29kZXJzID0gdHVwbGUoY29tcG9uZW50cykKCiAgZGVmIF9jcmVhdGVfaW1wbChzZWxmKToKICAgIHJldHVybiBjb2Rlcl9pbXBsLlR1cGxlQ29kZXJJbXBsKFtjLmdldF9pbXBsKCkgZm9yIGMgaW4gc2VsZi5fY29kZXJzXSkKCiAgZGVmIGlzX2RldGVybWluaXN0aWMoc2VsZik6CiAgICByZXR1cm4gYWxsKGMuaXNfZGV0ZXJtaW5pc3RpYygpIGZvciBjIGluIHNlbGYuX2NvZGVycykKCiAgZGVmIGFzX2RldGVybWluaXN0aWNfY29kZXIoc2VsZiwgc3RlcF9sYWJlbCwgZXJyb3JfbWVzc2FnZT1Ob25lKToKICAgIGlmIHNlbGYuaXNfZGV0ZXJtaW5pc3RpYygpOgogICAgICByZXR1cm4gc2VsZgogICAgZWxzZToKICAgICAgcmV0dXJuIFR1cGxlQ29kZXIoW2MuYXNfZGV0ZXJtaW5pc3RpY19jb2RlcihzdGVwX2xhYmVsLCBlcnJvcl9tZXNzYWdlKQogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGMgaW4gc2VsZi5fY29kZXJzXSkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBmcm9tX3R5cGVfaGludCh0eXBlaGludCwgcmVnaXN0cnkpOgogICAgcmV0dXJuIFR1cGxlQ29kZXIoW3JlZ2lzdHJ5LmdldF9jb2Rlcih0KSBmb3IgdCBpbiB0eXBlaGludC50dXBsZV90eXBlc10pCgogIGRlZiBhc19jbG91ZF9vYmplY3Qoc2VsZiwgY29kZXJzX2NvbnRleHQ9Tm9uZSk6CiAgICBpZiBzZWxmLmlzX2t2X2NvZGVyKCk6CiAgICAgIHJldHVybiB7CiAgICAgICAgICAnQHR5cGUnOgogICAgICAgICAgICAgICdraW5kOnBhaXInLAogICAgICAgICAgJ2lzX3BhaXJfbGlrZSc6CiAgICAgICAgICAgICAgVHJ1ZSwKICAgICAgICAgICdjb21wb25lbnRfZW5jb2RpbmdzJzogWwogICAgICAgICAgICAgIGNvbXBvbmVudC5hc19jbG91ZF9vYmplY3QoY29kZXJzX2NvbnRleHQpCiAgICAgICAgICAgICAgZm9yIGNvbXBvbmVudCBpbiBzZWxmLl9nZXRfY29tcG9uZW50X2NvZGVycygpCiAgICAgICAgICBdLAogICAgICB9CgogICAgcmV0dXJuIHN1cGVyKFR1cGxlQ29kZXIsIHNlbGYpLmFzX2Nsb3VkX29iamVjdChjb2RlcnNfY29udGV4dCkKCiAgZGVmIF9nZXRfY29tcG9uZW50X2NvZGVycyhzZWxmKToKICAgIHJldHVybiBzZWxmLmNvZGVycygpCgogIGRlZiBjb2RlcnMoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fY29kZXJzCgogIGRlZiBpc19rdl9jb2RlcihzZWxmKToKICAgIHJldHVybiBsZW4oc2VsZi5fY29kZXJzKSA9PSAyCgogIGRlZiBrZXlfY29kZXIoc2VsZik6CiAgICBpZiBsZW4oc2VsZi5fY29kZXJzKSAhPSAyOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdUdXBsZUNvZGVyIGRvZXMgbm90IGhhdmUgZXhhY3RseSAyIGNvbXBvbmVudHMuJykKICAgIHJldHVybiBzZWxmLl9jb2RlcnNbMF0KCiAgZGVmIHZhbHVlX2NvZGVyKHNlbGYpOgogICAgaWYgbGVuKHNlbGYuX2NvZGVycykgIT0gMjoKICAgICAgcmFpc2UgVmFsdWVFcnJvcignVHVwbGVDb2RlciBkb2VzIG5vdCBoYXZlIGV4YWN0bHkgMiBjb21wb25lbnRzLicpCiAgICByZXR1cm4gc2VsZi5fY29kZXJzWzFdCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnVHVwbGVDb2Rlclslc10nICUgJywgJy5qb2luKHN0cihjKSBmb3IgYyBpbiBzZWxmLl9jb2RlcnMpCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuICh0eXBlKHNlbGYpID09IHR5cGUob3RoZXIpCiAgICAgICAgICAgIGFuZCBzZWxmLl9jb2RlcnMgPT0gb3RoZXIuY29kZXJzKQoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaChzZWxmLl9jb2RlcnMpCgogIGRlZiB0b19ydW5uZXJfYXBpX3BhcmFtZXRlcihzZWxmLCBjb250ZXh0KToKICAgIGlmIHNlbGYuaXNfa3ZfY29kZXIoKToKICAgICAgcmV0dXJuIGNvbW1vbl91cm5zLmNvZGVycy5LVi51cm4sIE5vbmUsIHNlbGYuY29kZXJzKCkKICAgIGVsc2U6CiAgICAgIHJldHVybiBzdXBlcihUdXBsZUNvZGVyLCBzZWxmKS50b19ydW5uZXJfYXBpX3BhcmFtZXRlcihjb250ZXh0KQoKICBAQ29kZXIucmVnaXN0ZXJfdXJuKGNvbW1vbl91cm5zLmNvZGVycy5LVi51cm4sIE5vbmUpCiAgZGVmIGZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXIodW51c2VkX3BheWxvYWQsIGNvbXBvbmVudHMsIHVudXNlZF9jb250ZXh0KToKICAgIHJldHVybiBUdXBsZUNvZGVyKGNvbXBvbmVudHMpCgoKY2xhc3MgVHVwbGVTZXF1ZW5jZUNvZGVyKEZhc3RDb2Rlcik6CiAgIiIiQ29kZXIgb2YgaG9tb2dlbmVvdXMgdHVwbGUgb2JqZWN0cy4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGVsZW1fY29kZXIpOgogICAgc2VsZi5fZWxlbV9jb2RlciA9IGVsZW1fY29kZXIKCiAgZGVmIHZhbHVlX2NvZGVyKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX2VsZW1fY29kZXIKCiAgZGVmIF9jcmVhdGVfaW1wbChzZWxmKToKICAgIHJldHVybiBjb2Rlcl9pbXBsLlR1cGxlU2VxdWVuY2VDb2RlckltcGwoc2VsZi5fZWxlbV9jb2Rlci5nZXRfaW1wbCgpKQoKICBkZWYgaXNfZGV0ZXJtaW5pc3RpYyhzZWxmKToKICAgIHJldHVybiBzZWxmLl9lbGVtX2NvZGVyLmlzX2RldGVybWluaXN0aWMoKQoKICBkZWYgYXNfZGV0ZXJtaW5pc3RpY19jb2RlcihzZWxmLCBzdGVwX2xhYmVsLCBlcnJvcl9tZXNzYWdlPU5vbmUpOgogICAgaWYgc2VsZi5pc19kZXRlcm1pbmlzdGljKCk6CiAgICAgIHJldHVybiBzZWxmCiAgICBlbHNlOgogICAgICByZXR1cm4gVHVwbGVTZXF1ZW5jZUNvZGVyKAogICAgICAgICAgc2VsZi5fZWxlbV9jb2Rlci5hc19kZXRlcm1pbmlzdGljX2NvZGVyKHN0ZXBfbGFiZWwsIGVycm9yX21lc3NhZ2UpKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGZyb21fdHlwZV9oaW50KHR5cGVoaW50LCByZWdpc3RyeSk6CiAgICByZXR1cm4gVHVwbGVTZXF1ZW5jZUNvZGVyKHJlZ2lzdHJ5LmdldF9jb2Rlcih0eXBlaGludC5pbm5lcl90eXBlKSkKCiAgZGVmIF9nZXRfY29tcG9uZW50X2NvZGVycyhzZWxmKToKICAgIHJldHVybiAoc2VsZi5fZWxlbV9jb2RlciwpCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnVHVwbGVTZXF1ZW5jZUNvZGVyWyVyXScgJSBzZWxmLl9lbGVtX2NvZGVyCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuICh0eXBlKHNlbGYpID09IHR5cGUob3RoZXIpCiAgICAgICAgICAgIGFuZCBzZWxmLl9lbGVtX2NvZGVyID09IG90aGVyLnZhbHVlX2NvZGVyKQoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaCgodHlwZShzZWxmKSwgc2VsZi5fZWxlbV9jb2RlcikpCgoKY2xhc3MgSXRlcmFibGVDb2RlcihGYXN0Q29kZXIpOgogICIiIkNvZGVyIG9mIGl0ZXJhYmxlcyBvZiBob21vZ2VuZW91cyBvYmplY3RzLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgZWxlbV9jb2Rlcik6CiAgICBzZWxmLl9lbGVtX2NvZGVyID0gZWxlbV9jb2RlcgoKICBkZWYgX2NyZWF0ZV9pbXBsKHNlbGYpOgogICAgcmV0dXJuIGNvZGVyX2ltcGwuSXRlcmFibGVDb2RlckltcGwoc2VsZi5fZWxlbV9jb2Rlci5nZXRfaW1wbCgpKQoKICBkZWYgaXNfZGV0ZXJtaW5pc3RpYyhzZWxmKToKICAgIHJldHVybiBzZWxmLl9lbGVtX2NvZGVyLmlzX2RldGVybWluaXN0aWMoKQoKICBkZWYgYXNfZGV0ZXJtaW5pc3RpY19jb2RlcihzZWxmLCBzdGVwX2xhYmVsLCBlcnJvcl9tZXNzYWdlPU5vbmUpOgogICAgaWYgc2VsZi5pc19kZXRlcm1pbmlzdGljKCk6CiAgICAgIHJldHVybiBzZWxmCiAgICBlbHNlOgogICAgICByZXR1cm4gSXRlcmFibGVDb2RlcigKICAgICAgICAgIHNlbGYuX2VsZW1fY29kZXIuYXNfZGV0ZXJtaW5pc3RpY19jb2RlcihzdGVwX2xhYmVsLCBlcnJvcl9tZXNzYWdlKSkKCiAgZGVmIGFzX2Nsb3VkX29iamVjdChzZWxmLCBjb2RlcnNfY29udGV4dD1Ob25lKToKICAgIHJldHVybiB7CiAgICAgICAgJ0B0eXBlJzoKICAgICAgICAgICAgJ2tpbmQ6c3RyZWFtJywKICAgICAgICAnaXNfc3RyZWFtX2xpa2UnOgogICAgICAgICAgICBUcnVlLAogICAgICAgICdjb21wb25lbnRfZW5jb2RpbmdzJzogWwogICAgICAgICAgICBzZWxmLl9lbGVtX2NvZGVyLmFzX2Nsb3VkX29iamVjdChjb2RlcnNfY29udGV4dCkKICAgICAgICBdLAogICAgfQoKICBkZWYgdmFsdWVfY29kZXIoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fZWxlbV9jb2RlcgoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGZyb21fdHlwZV9oaW50KHR5cGVoaW50LCByZWdpc3RyeSk6CiAgICByZXR1cm4gSXRlcmFibGVDb2RlcihyZWdpc3RyeS5nZXRfY29kZXIodHlwZWhpbnQuaW5uZXJfdHlwZSkpCgogIGRlZiBfZ2V0X2NvbXBvbmVudF9jb2RlcnMoc2VsZik6CiAgICByZXR1cm4gKHNlbGYuX2VsZW1fY29kZXIsKQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJ0l0ZXJhYmxlQ29kZXJbJXJdJyAlIHNlbGYuX2VsZW1fY29kZXIKCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gKHR5cGUoc2VsZikgPT0gdHlwZShvdGhlcikKICAgICAgICAgICAgYW5kIHNlbGYuX2VsZW1fY29kZXIgPT0gb3RoZXIudmFsdWVfY29kZXIpCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKCh0eXBlKHNlbGYpLCBzZWxmLl9lbGVtX2NvZGVyKSkKCgpDb2Rlci5yZWdpc3Rlcl9zdHJ1Y3R1cmVkX3Vybihjb21tb25fdXJucy5jb2RlcnMuSVRFUkFCTEUudXJuLCBJdGVyYWJsZUNvZGVyKQoKCmNsYXNzIEdsb2JhbFdpbmRvd0NvZGVyKFNpbmdsZXRvbkNvZGVyKToKICAiIiJDb2RlciBmb3IgZ2xvYmFsIHdpbmRvd3MuIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmKToKICAgIGZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgd2luZG93CiAgICBzdXBlcihHbG9iYWxXaW5kb3dDb2Rlciwgc2VsZikuX19pbml0X18od2luZG93Lkdsb2JhbFdpbmRvdygpKQoKICBkZWYgYXNfY2xvdWRfb2JqZWN0KHNlbGYsIGNvZGVyc19jb250ZXh0PU5vbmUpOgogICAgcmV0dXJuIHsKICAgICAgICAnQHR5cGUnOiAna2luZDpnbG9iYWxfd2luZG93JywKICAgIH0KCgpDb2Rlci5yZWdpc3Rlcl9zdHJ1Y3R1cmVkX3VybigKICAgIGNvbW1vbl91cm5zLmNvZGVycy5HTE9CQUxfV0lORE9XLnVybiwgR2xvYmFsV2luZG93Q29kZXIpCgoKY2xhc3MgSW50ZXJ2YWxXaW5kb3dDb2RlcihGYXN0Q29kZXIpOgogICIiIkNvZGVyIGZvciBhbiB3aW5kb3cgZGVmaW5lZCBieSBhIHN0YXJ0IHRpbWVzdGFtcCBhbmQgYSBkdXJhdGlvbi4iIiIKCiAgZGVmIF9jcmVhdGVfaW1wbChzZWxmKToKICAgIHJldHVybiBjb2Rlcl9pbXBsLkludGVydmFsV2luZG93Q29kZXJJbXBsKCkKCiAgZGVmIGlzX2RldGVybWluaXN0aWMoc2VsZik6CiAgICByZXR1cm4gVHJ1ZQoKICBkZWYgYXNfY2xvdWRfb2JqZWN0KHNlbGYsIGNvZGVyc19jb250ZXh0PU5vbmUpOgogICAgcmV0dXJuIHsKICAgICAgICAnQHR5cGUnOiAna2luZDppbnRlcnZhbF93aW5kb3cnLAogICAgfQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiB0eXBlKHNlbGYpID09IHR5cGUob3RoZXIpCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKHR5cGUoc2VsZikpCgoKQ29kZXIucmVnaXN0ZXJfc3RydWN0dXJlZF91cm4oCiAgICBjb21tb25fdXJucy5jb2RlcnMuSU5URVJWQUxfV0lORE9XLnVybiwgSW50ZXJ2YWxXaW5kb3dDb2RlcikKCgpjbGFzcyBXaW5kb3dlZFZhbHVlQ29kZXIoRmFzdENvZGVyKToKICAiIiJDb2RlciBmb3Igd2luZG93ZWQgdmFsdWVzLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgd3JhcHBlZF92YWx1ZV9jb2Rlciwgd2luZG93X2NvZGVyPU5vbmUpOgogICAgaWYgbm90IHdpbmRvd19jb2RlcjoKICAgICAgd2luZG93X2NvZGVyID0gUGlja2xlQ29kZXIoKQogICAgc2VsZi53cmFwcGVkX3ZhbHVlX2NvZGVyID0gd3JhcHBlZF92YWx1ZV9jb2RlcgogICAgc2VsZi50aW1lc3RhbXBfY29kZXIgPSBUaW1lc3RhbXBDb2RlcigpCiAgICBzZWxmLndpbmRvd19jb2RlciA9IHdpbmRvd19jb2RlcgoKICBkZWYgX2NyZWF0ZV9pbXBsKHNlbGYpOgogICAgcmV0dXJuIGNvZGVyX2ltcGwuV2luZG93ZWRWYWx1ZUNvZGVySW1wbCgKICAgICAgICBzZWxmLndyYXBwZWRfdmFsdWVfY29kZXIuZ2V0X2ltcGwoKSwKICAgICAgICBzZWxmLnRpbWVzdGFtcF9jb2Rlci5nZXRfaW1wbCgpLAogICAgICAgIHNlbGYud2luZG93X2NvZGVyLmdldF9pbXBsKCkpCgogIGRlZiBpc19kZXRlcm1pbmlzdGljKHNlbGYpOgogICAgcmV0dXJuIGFsbChjLmlzX2RldGVybWluaXN0aWMoKSBmb3IgYyBpbiBbc2VsZi53cmFwcGVkX3ZhbHVlX2NvZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aW1lc3RhbXBfY29kZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndpbmRvd19jb2Rlcl0pCgogIGRlZiBhc19jbG91ZF9vYmplY3Qoc2VsZiwgY29kZXJzX2NvbnRleHQ9Tm9uZSk6CiAgICByZXR1cm4gewogICAgICAgICdAdHlwZSc6CiAgICAgICAgICAgICdraW5kOndpbmRvd2VkX3ZhbHVlJywKICAgICAgICAnaXNfd3JhcHBlcic6CiAgICAgICAgICAgIFRydWUsCiAgICAgICAgJ2NvbXBvbmVudF9lbmNvZGluZ3MnOiBbCiAgICAgICAgICAgIGNvbXBvbmVudC5hc19jbG91ZF9vYmplY3QoY29kZXJzX2NvbnRleHQpCiAgICAgICAgICAgIGZvciBjb21wb25lbnQgaW4gc2VsZi5fZ2V0X2NvbXBvbmVudF9jb2RlcnMoKQogICAgICAgIF0sCiAgICB9CgogIGRlZiBfZ2V0X2NvbXBvbmVudF9jb2RlcnMoc2VsZik6CiAgICByZXR1cm4gW3NlbGYud3JhcHBlZF92YWx1ZV9jb2Rlciwgc2VsZi53aW5kb3dfY29kZXJdCgogIGRlZiBpc19rdl9jb2RlcihzZWxmKToKICAgIHJldHVybiBzZWxmLndyYXBwZWRfdmFsdWVfY29kZXIuaXNfa3ZfY29kZXIoKQoKICBkZWYga2V5X2NvZGVyKHNlbGYpOgogICAgcmV0dXJuIHNlbGYud3JhcHBlZF92YWx1ZV9jb2Rlci5rZXlfY29kZXIoKQoKICBkZWYgdmFsdWVfY29kZXIoc2VsZik6CiAgICByZXR1cm4gc2VsZi53cmFwcGVkX3ZhbHVlX2NvZGVyLnZhbHVlX2NvZGVyKCkKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICdXaW5kb3dlZFZhbHVlQ29kZXJbJXNdJyAlIHNlbGYud3JhcHBlZF92YWx1ZV9jb2RlcgoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiAodHlwZShzZWxmKSA9PSB0eXBlKG90aGVyKQogICAgICAgICAgICBhbmQgc2VsZi53cmFwcGVkX3ZhbHVlX2NvZGVyID09IG90aGVyLndyYXBwZWRfdmFsdWVfY29kZXIKICAgICAgICAgICAgYW5kIHNlbGYudGltZXN0YW1wX2NvZGVyID09IG90aGVyLnRpbWVzdGFtcF9jb2RlcgogICAgICAgICAgICBhbmQgc2VsZi53aW5kb3dfY29kZXIgPT0gb3RoZXIud2luZG93X2NvZGVyKQoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaCgKICAgICAgICAoc2VsZi53cmFwcGVkX3ZhbHVlX2NvZGVyLCBzZWxmLnRpbWVzdGFtcF9jb2Rlciwgc2VsZi53aW5kb3dfY29kZXIpKQoKCkNvZGVyLnJlZ2lzdGVyX3N0cnVjdHVyZWRfdXJuKAogICAgY29tbW9uX3VybnMuY29kZXJzLldJTkRPV0VEX1ZBTFVFLnVybiwgV2luZG93ZWRWYWx1ZUNvZGVyKQoKCmNsYXNzIExlbmd0aFByZWZpeENvZGVyKEZhc3RDb2Rlcik6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBDb2RlciB3aGljaCBwcmVmaXhlcyB0aGUgbGVuZ3RoIG9mIHRoZSBlbmNvZGVkIG9iamVjdCBpbiB0aGUgc3RyZWFtLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWVfY29kZXIpOgogICAgc2VsZi5fdmFsdWVfY29kZXIgPSB2YWx1ZV9jb2RlcgoKICBkZWYgX2NyZWF0ZV9pbXBsKHNlbGYpOgogICAgcmV0dXJuIGNvZGVyX2ltcGwuTGVuZ3RoUHJlZml4Q29kZXJJbXBsKHNlbGYuX3ZhbHVlX2NvZGVyLmdldF9pbXBsKCkpCgogIGRlZiBpc19kZXRlcm1pbmlzdGljKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX3ZhbHVlX2NvZGVyLmlzX2RldGVybWluaXN0aWMoKQoKICBkZWYgZXN0aW1hdGVfc2l6ZShzZWxmLCB2YWx1ZSk6CiAgICB2YWx1ZV9zaXplID0gc2VsZi5fdmFsdWVfY29kZXIuZXN0aW1hdGVfc2l6ZSh2YWx1ZSkKICAgIHJldHVybiBnZXRfdmFyaW50X3NpemUodmFsdWVfc2l6ZSkgKyB2YWx1ZV9zaXplCgogIGRlZiB2YWx1ZV9jb2RlcihzZWxmKToKICAgIHJldHVybiBzZWxmLl92YWx1ZV9jb2RlcgoKICBkZWYgYXNfY2xvdWRfb2JqZWN0KHNlbGYsIGNvZGVyc19jb250ZXh0PU5vbmUpOgogICAgcmV0dXJuIHsKICAgICAgICAnQHR5cGUnOgogICAgICAgICAgICAna2luZDpsZW5ndGhfcHJlZml4JywKICAgICAgICAnY29tcG9uZW50X2VuY29kaW5ncyc6IFsKICAgICAgICAgICAgc2VsZi5fdmFsdWVfY29kZXIuYXNfY2xvdWRfb2JqZWN0KGNvZGVyc19jb250ZXh0KQogICAgICAgIF0sCiAgICB9CgogIGRlZiBfZ2V0X2NvbXBvbmVudF9jb2RlcnMoc2VsZik6CiAgICByZXR1cm4gKHNlbGYuX3ZhbHVlX2NvZGVyLCkKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICdMZW5ndGhQcmVmaXhDb2Rlclslcl0nICUgc2VsZi5fdmFsdWVfY29kZXIKCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gKHR5cGUoc2VsZikgPT0gdHlwZShvdGhlcikKICAgICAgICAgICAgYW5kIHNlbGYuX3ZhbHVlX2NvZGVyID09IG90aGVyLl92YWx1ZV9jb2RlcikKCiAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgcmV0dXJuIGhhc2goKHR5cGUoc2VsZiksIHNlbGYuX3ZhbHVlX2NvZGVyKSkKCgpDb2Rlci5yZWdpc3Rlcl9zdHJ1Y3R1cmVkX3VybigKICAgIGNvbW1vbl91cm5zLmNvZGVycy5MRU5HVEhfUFJFRklYLnVybiwgTGVuZ3RoUHJlZml4Q29kZXIpCgoKY2xhc3MgU3RhdGVCYWNrZWRJdGVyYWJsZUNvZGVyKEZhc3RDb2Rlcik6CiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLAogICAgICBlbGVtZW50X2NvZGVyLAogICAgICByZWFkX3N0YXRlPU5vbmUsCiAgICAgIHdyaXRlX3N0YXRlPU5vbmUsCiAgICAgIHdyaXRlX3N0YXRlX3RocmVzaG9sZD0xKToKICAgIHNlbGYuX2VsZW1lbnRfY29kZXIgPSBlbGVtZW50X2NvZGVyCiAgICBzZWxmLl9yZWFkX3N0YXRlID0gcmVhZF9zdGF0ZQogICAgc2VsZi5fd3JpdGVfc3RhdGUgPSB3cml0ZV9zdGF0ZQogICAgc2VsZi5fd3JpdGVfc3RhdGVfdGhyZXNob2xkID0gd3JpdGVfc3RhdGVfdGhyZXNob2xkCgogIGRlZiBfY3JlYXRlX2ltcGwoc2VsZik6CiAgICByZXR1cm4gY29kZXJfaW1wbC5JdGVyYWJsZUNvZGVySW1wbCgKICAgICAgICBzZWxmLl9lbGVtZW50X2NvZGVyLmdldF9pbXBsKCksCiAgICAgICAgc2VsZi5fcmVhZF9zdGF0ZSwKICAgICAgICBzZWxmLl93cml0ZV9zdGF0ZSwKICAgICAgICBzZWxmLl93cml0ZV9zdGF0ZV90aHJlc2hvbGQpCgogIGRlZiBpc19kZXRlcm1pbmlzdGljKHNlbGYpOgogICAgcmV0dXJuIEZhbHNlCgogIGRlZiBfZ2V0X2NvbXBvbmVudF9jb2RlcnMoc2VsZik6CiAgICByZXR1cm4gKHNlbGYuX2VsZW1lbnRfY29kZXIsKQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJ1N0YXRlQmFja2VkSXRlcmFibGVDb2Rlclslcl0nICUgc2VsZi5fZWxlbWVudF9jb2RlcgoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiAodHlwZShzZWxmKSA9PSB0eXBlKG90aGVyKQogICAgICAgICAgICBhbmQgc2VsZi5fZWxlbWVudF9jb2RlciA9PSBvdGhlci5fZWxlbWVudF9jb2RlcgogICAgICAgICAgICBhbmQgc2VsZi5fd3JpdGVfc3RhdGVfdGhyZXNob2xkID09IG90aGVyLl93cml0ZV9zdGF0ZV90aHJlc2hvbGQpCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKCh0eXBlKHNlbGYpLCBzZWxmLl9lbGVtZW50X2NvZGVyLCBzZWxmLl93cml0ZV9zdGF0ZV90aHJlc2hvbGQpKQoKICBkZWYgdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoc2VsZiwgY29udGV4dCk6CiAgICByZXR1cm4gKAogICAgICAgIGNvbW1vbl91cm5zLmNvZGVycy5TVEFURV9CQUNLRURfSVRFUkFCTEUudXJuLAogICAgICAgIHN0cihzZWxmLl93cml0ZV9zdGF0ZV90aHJlc2hvbGQpLmVuY29kZSgnYXNjaWknKSwKICAgICAgICBzZWxmLl9nZXRfY29tcG9uZW50X2NvZGVycygpKQoKICBAQ29kZXIucmVnaXN0ZXJfdXJuKGNvbW1vbl91cm5zLmNvZGVycy5TVEFURV9CQUNLRURfSVRFUkFCTEUudXJuLCBieXRlcykKICBkZWYgZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcihwYXlsb2FkLCBjb21wb25lbnRzLCBjb250ZXh0KToKICAgIHJldHVybiBTdGF0ZUJhY2tlZEl0ZXJhYmxlQ29kZXIoCiAgICAgICAgY29tcG9uZW50c1swXSwKICAgICAgICByZWFkX3N0YXRlPWNvbnRleHQuaXRlcmFibGVfc3RhdGVfcmVhZCwKICAgICAgICB3cml0ZV9zdGF0ZT1jb250ZXh0Lml0ZXJhYmxlX3N0YXRlX3dyaXRlLAogICAgICAgIHdyaXRlX3N0YXRlX3RocmVzaG9sZD1pbnQocGF5bG9hZCkpCn1yxYMAAChYGgAAAEludGVydmFsV2luZG93Q29kZXIuX19lcV9fWAMAAABkZWZNpQNNpwOHWCAAAABUdXBsZUNvZGVyLl9nZXRfY29tcG9uZW50X2NvZGVyc1gDAAAAZGVmTQADTQIDh1gdAAAAQ29kZXIucmVnaXN0ZXJfc3RydWN0dXJlZF91cm5YAwAAAGRlZk0hAU0wAYdYHwAAAFR1cGxlU2VxdWVuY2VDb2Rlci5fY3JlYXRlX2ltcGxYAwAAAGRlZk0xA00zA4dYIgAAAFR1cGxlQ29kZXIudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJYAwAAAGRlZk0dA00iA4dYEgAAAENvZGVyLl9jcmVhdGVfaW1wbFgDAAAAZGVmS4tLkIdYCgAAAEJ5dGVzQ29kZXJYBQAAAGNsYXNzTXIBTYUBh1gpAAAARGV0ZXJtaW5pc3RpY0Zhc3RQcmltaXRpdmVzQ29kZXIuX19pbml0X19YAwAAAGRlZk1GAk1JAodYHwAAAExlbmd0aFByZWZpeENvZGVyLmVzdGltYXRlX3NpemVYAwAAAGRlZk39A00ABIdYIQAAAF9UaW1lckNvZGVyLl9nZXRfY29tcG9uZW50X2NvZGVyc1gDAAAAZGVmTckBTcsBh1gcAAAASW50ZXJ2YWxXaW5kb3dDb2Rlci5fX2hhc2hfX1gDAAAAZGVmTagDTaoDh1gtAAAARGV0ZXJtaW5pc3RpY0Zhc3RQcmltaXRpdmVzQ29kZXIuX2NyZWF0ZV9pbXBsWAMAAABkZWZNSgJNTQKHWBEAAABQcm90b0NvZGVyLl9fZXFfX1gDAAAAZGVmTcoCTc0Ch1gjAAAASXRlcmFibGVDb2Rlci5fZ2V0X2NvbXBvbmVudF9jb2RlcnNYAwAAAGRlZk11A013A4dYIgAAAFdpbmRvd2VkVmFsdWVDb2Rlci5hc19jbG91ZF9vYmplY3RYAwAAAGRlZk3FA03QA4dYEwAAAFByb3RvQ29kZXIuX19pbml0X19YAwAAAGRlZk2/Ak3BAodYFgAAAEl0ZXJhYmxlQ29kZXIuX19oYXNoX19YAwAAAGRlZk1/A02BA4dYHgAAAFdpbmRvd2VkVmFsdWVDb2Rlci52YWx1ZV9jb2RlclgDAAAAZGVmTdoDTdwDh1gWAAAASXRlcmFibGVDb2Rlci5fX3JlcHJfX1gDAAAAZGVmTXgDTXoDh1gNAAAAVG9TdHJpbmdDb2RlclgFAAAAY2xhc3NNRQFNWQGHWBoAAABUdXBsZUNvZGVyLmFzX2Nsb3VkX29iamVjdFgDAAAAZGVmTfECTf8Ch1gbAAAAUHJvdG9Db2Rlci5pc19kZXRlcm1pbmlzdGljWAMAAABkZWZNxQJNyQKHWBUAAABUaW1lc3RhbXBDb2Rlci5fX2VxX19YAwAAAGRlZk27AU29AYdYEAAAAEZhc3RDb2Rlci5kZWNvZGVYAwAAAGRlZk1nAU1qAYdYHwAAAEZhc3RQcmltaXRpdmVzQ29kZXIudmFsdWVfY29kZXJYAwAAAGRlZk2IAk2KAodYFwAAAF9QaWNrbGVDb2RlckJhc2UuX19lcV9fWAMAAABkZWZNKAJNKgKHWA4AAABDb2Rlci5fX2hhc2hfX1gDAAAAZGVmS+ZL6IdYEAAAAG1heWJlX2RpbGxfZHVtcHNYAwAAAGRlZk3xAU35AYdYEwAAAENvZGVyLnRvX3J1bm5lcl9hcGlYAwAAAGRlZk0CAU0OAYdYEwAAAEZsb2F0Q29kZXIuX19oYXNoX19YAwAAAGRlZk2uAU2wAYdYEgAAAFdpbmRvd2VkVmFsdWVDb2RlclgFAAAAY2xhc3NNsANN6QOHWB4AAABUdXBsZVNlcXVlbmNlQ29kZXIudmFsdWVfY29kZXJYAwAAAGRlZk0uA00wA4dYFQAAAENvZGVyLmFzX2Nsb3VkX29iamVjdFgDAAAAZGVmS8FL2IdYHgAAAFdpbmRvd2VkVmFsdWVDb2Rlci5pc19rdl9jb2RlclgDAAAAZGVmTdQDTdYDh1gbAAAAU2luZ2xldG9uQ29kZXIuX2NyZWF0ZV9pbXBsWAMAAABkZWZN5AFN5gGHWAwAAABDb2Rlci5fX2VxX19YAwAAAGRlZkvdS+CHWBYAAABGYXN0Q29kZXIuX2NyZWF0ZV9pbXBsWAMAAABkZWZNbgFNcAGHWCQAAABJdGVyYWJsZUNvZGVyLmFzX2RldGVybWluaXN0aWNfY29kZXJYAwAAAGRlZk1cA01iA4dYFwAAAEJ5dGVzQ29kZXIuX2NyZWF0ZV9pbXBsWAMAAABkZWZNdQFNdwGHWCEAAABHbG9iYWxXaW5kb3dDb2Rlci5hc19jbG91ZF9vYmplY3RYAwAAAGRlZk2NA02RA4dYKgAAAEZhc3RQcmltaXRpdmVzQ29kZXIuYXNfZGV0ZXJtaW5pc3RpY19jb2RlclgDAAAAZGVmTWoCTW8Ch1gSAAAAVmFySW50Q29kZXIuX19lcV9fWAMAAABkZWZNmAFNmgGHWBYAAABUdXBsZUNvZGVyLmlzX2t2X2NvZGVyWAMAAABkZWZNBgNNCAOHWCoAAABEZXRlcm1pbmlzdGljRmFzdFByaW1pdGl2ZXNDb2Rlci5rZXlfY29kZXJYAwAAAGRlZk1UAk1WAodYGwAAAENvZGVyLl9nZXRfY29tcG9uZW50X2NvZGVyc1gDAAAAZGVmS7lLwIdYEQAAAENvZGVyLmlzX2t2X2NvZGVyWAMAAABkZWZLqkush1gdAAAARmFzdFByaW1pdGl2ZXNDb2Rlci5rZXlfY29kZXJYAwAAAGRlZk2FAk2HAodYFAAAAEl0ZXJhYmxlQ29kZXIuX19lcV9fWAMAAABkZWZNewNNfgOHWBoAAABfUGlja2xlQ29kZXJCYXNlLmtleV9jb2RlclgDAAAAZGVmTSICTSQCh1gbAAAAVmFySW50Q29kZXIuYXNfY2xvdWRfb2JqZWN0WAMAAABkZWZNkwFNlwGHWBYAAABJdGVyYWJsZUNvZGVyLl9faW5pdF9fWAMAAABkZWZNUwNNVQOHWB4AAABJdGVyYWJsZUNvZGVyLmlzX2RldGVybWluaXN0aWNYAwAAAGRlZk1ZA01bA4dYEgAAAENvZGVyLl9fZ2V0c3RhdGVfX1gDAAAAZGVmS5tLnYdYGwAAAFdpbmRvd2VkVmFsdWVDb2Rlci5fX2hhc2hfX1gDAAAAZGVmTeYDTekDh1gTAAAAUHJvdG9Db2Rlci5fX2hhc2hfX1gDAAAAZGVmTc4CTdACh1gJAAAARGlsbENvZGVyWAUAAABjbGFzc008Ak1BAodYHgAAAFRvU3RyaW5nQ29kZXIuaXNfZGV0ZXJtaW5pc3RpY1gDAAAAZGVmTVcBTVkBh1gRAAAATGVuZ3RoUHJlZml4Q29kZXJYBQAAAGNsYXNzTe8DTRkEh1gTAAAAVHVwbGVDb2Rlci5fX3JlcHJfX1gDAAAAZGVmTRMDTRUDh1gsAAAARGV0ZXJtaW5pc3RpY0Zhc3RQcmltaXRpdmVzQ29kZXIudmFsdWVfY29kZXJYAwAAAGRlZk1XAk1ZAodYEAAAAG1heWJlX2RpbGxfbG9hZHNYAwAAAGRlZk37AU0BAodYHQAAAEJhc2U2NFBpY2tsZUNvZGVyLnZhbHVlX2NvZGVyWAMAAABkZWZNrgJNsAKHWBEAAABUdXBsZUNvZGVyLmNvZGVyc1gDAAAAZGVmTQMDTQUDh1gTAAAAVHVwbGVDb2Rlci5fX2hhc2hfX1gDAAAAZGVmTRoDTRwDh1gKAAAAVHVwbGVDb2RlclgFAAAAY2xhc3NN2gJNJgOHWAwAAABDb2Rlci5fX25lX19YAwAAAGRlZkviS+WHWBIAAABDb2Rlci5yZWdpc3Rlcl91cm5YAwAAAGRlZkvrTQEBh1gUAAAAVG9TdHJpbmdDb2Rlci5lbmNvZGVYAwAAAGRlZk1RAU1TAYdYEwAAAFR1cGxlQ29kZXIuX19pbml0X19YAwAAAGRlZk3dAk3fAodYFwAAAFByb3RvQ29kZXIuX2NyZWF0ZV9pbXBsWAMAAABkZWZNwgJNxAKHWB4AAABMZW5ndGhQcmVmaXhDb2Rlci5fY3JlYXRlX2ltcGxYAwAAAGRlZk33A035A4dYIQAAAF9QaWNrbGVDb2RlckJhc2UuaXNfZGV0ZXJtaW5pc3RpY1gDAAAAZGVmTQYCTQwCh1gZAAAAV2luZG93ZWRWYWx1ZUNvZGVyLl9fZXFfX1gDAAAAZGVmTeADTeUDh1gQAAAAX1BpY2tsZUNvZGVyQmFzZVgFAAAAY2xhc3NNAwJNLQKHWAwAAABDb2Rlci5kZWNvZGVYAwAAAGRlZktTS1aHWBsAAABUdXBsZUNvZGVyLmlzX2RldGVybWluaXN0aWNYAwAAAGRlZk3jAk3lAodYFAAAAFR1cGxlQ29kZXIua2V5X2NvZGVyWAMAAABkZWZNCQNNDQOHWBMAAABDb2Rlci5lc3RpbWF0ZV9zaXplWAMAAABkZWZLckuFh1gRAAAARmxvYXRDb2Rlci5fX2VxX19YAwAAAGRlZk2rAU2tAYdYEQAAAEJ5dGVzQ29kZXIuX19lcV9fWAMAAABkZWZNgAFNggGHWCgAAABXaW5kb3dlZFZhbHVlQ29kZXIuX2dldF9jb21wb25lbnRfY29kZXJzWAMAAABkZWZN0QNN0wOHWBsAAABUdXBsZVNlcXVlbmNlQ29kZXIuX19oYXNoX19YAwAAAGRlZk1MA01OA4dYGwAAAENvZGVyLnJlZ2lzdGVyX3Vybi5yZWdpc3RlclgDAAAAZGVmS/hL+4dYMgAAAFN0YXRlQmFja2VkSXRlcmFibGVDb2Rlci5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyWAMAAABkZWZNSQRNUASHWBoAAABMZW5ndGhQcmVmaXhDb2Rlci5fX2hhc2hfX1gDAAAAZGVmTRcETRkEh1gZAAAAUHJvdG9Db2Rlci5mcm9tX3R5cGVfaGludFgDAAAAZGVmTdECTdgCh1gaAAAATGVuZ3RoUHJlZml4Q29kZXIuX19yZXByX19YAwAAAGRlZk0QBE0SBIdYIwAAAEludGVydmFsV2luZG93Q29kZXIuYXNfY2xvdWRfb2JqZWN0WAMAAABkZWZNoANNpAOHWBgAAABTdGF0ZUJhY2tlZEl0ZXJhYmxlQ29kZXJYBQAAAGNsYXNzTR8ETVAEh1gfAAAAU3RhdGVCYWNrZWRJdGVyYWJsZUNvZGVyLl9fZXFfX1gDAAAAZGVmTTsETT8Eh1gcAAAAQ29kZXIuYXNfZGV0ZXJtaW5pc3RpY19jb2RlclgDAAAAZGVmS2hLcYdYDAAAAENvZGVyLmVuY29kZVgDAAAAZGVmS09LUodYEQAAAGRlc2VyaWFsaXplX2NvZGVyWAMAAABkZWZLRktJh1gdAAAAQmFzZTY0UGlja2xlQ29kZXIuaXNfa3ZfY29kZXJYAwAAAGRlZk2oAk2qAodYGQAAAF9QaWNrbGVDb2RlckJhc2UuX19oYXNoX19YAwAAAGRlZk0rAk0tAodYFgAAAFR1cGxlQ29kZXIudmFsdWVfY29kZXJYAwAAAGRlZk0OA00SA4dYHwAAAEZhc3RQcmltaXRpdmVzQ29kZXIuaXNfa3ZfY29kZXJYAwAAAGRlZk2CAk2EAodYFAAAAFRvU3RyaW5nQ29kZXIuZGVjb2RlWAMAAABkZWZNVAFNVgGHWBcAAABUaW1lc3RhbXBDb2Rlci5fX2hhc2hfX1gDAAAAZGVmTb4BTcABh1glAAAAU3RhdGVCYWNrZWRJdGVyYWJsZUNvZGVyLl9jcmVhdGVfaW1wbFgDAAAAZGVmTSsETTEEh1gdAAAASXRlcmFibGVDb2Rlci5hc19jbG91ZF9vYmplY3RYAwAAAGRlZk1jA01tA4dYHQAAAExlbmd0aFByZWZpeENvZGVyLnZhbHVlX2NvZGVyWAMAAABkZWZNAQRNAwSHWBcAAABGbG9hdENvZGVyLl9jcmVhdGVfaW1wbFgDAAAAZGVmTaUBTacBh1gcAAAAX1RpbWVyQ29kZXIuaXNfZGV0ZXJtaW5pc3RpY1gDAAAAZGVmTc8BTdEBh1gZAAAAVHVwbGVTZXF1ZW5jZUNvZGVyLl9fZXFfX1gDAAAAZGVmTUgDTUsDh1gXAAAARmFzdENvZGVyLmVzdGltYXRlX3NpemVYAwAAAGRlZk1rAU1tAYdYGwAAAEJ5dGVzQ29kZXIuaXNfZGV0ZXJtaW5pc3RpY1gDAAAAZGVmTXgBTXoBh1gRAAAAVHVwbGVDb2Rlci5fX2VxX19YAwAAAGRlZk0WA00ZA4dYDgAAAENvZGVyLl9fcmVwcl9fWAMAAABkZWZL2Uvbh1gYAAAAX1RpbWVyQ29kZXIuX2NyZWF0ZV9pbXBsWAMAAABkZWZNzAFNzgGHWBwAAABGYXN0UHJpbWl0aXZlc0NvZGVyLl9faGFzaF9fWAMAAABkZWZNjgJNkAKHWBQAAABfVGltZXJDb2Rlci5fX2hhc2hfX1gDAAAAZGVmTdYBTdgBh1gOAAAAVGltZXN0YW1wQ29kZXJYBQAAAGNsYXNzTbIBTcABh1giAAAAQmFzZTY0UGlja2xlQ29kZXIuaXNfZGV0ZXJtaW5pc3RpY1gDAAAAZGVmTZ0CTaECh1gbAAAAV2luZG93ZWRWYWx1ZUNvZGVyLl9faW5pdF9fWAMAAABkZWZNswNNuQOHWAoAAABQcm90b0NvZGVyWAUAAABjbGFzc02yAk3YAodYLgAAAFN0YXRlQmFja2VkSXRlcmFibGVDb2Rlci5fZ2V0X2NvbXBvbmVudF9jb2RlcnNYAwAAAGRlZk01BE03BIdYFAAAAENvZGVyLmZyb21fdHlwZV9oaW50WAMAAABkZWZLpUuph1gXAAAAVHVwbGVDb2Rlci5fY3JlYXRlX2ltcGxYAwAAAGRlZk3gAk3iAodYMQAAAERldGVybWluaXN0aWNGYXN0UHJpbWl0aXZlc0NvZGVyLmlzX2RldGVybWluaXN0aWNYAwAAAGRlZk1OAk1QAodYGwAAAEJhc2U2NFBpY2tsZUNvZGVyLmtleV9jb2RlclgDAAAAZGVmTasCTa0Ch1gRAAAAR2xvYmFsV2luZG93Q29kZXJYBQAAAGNsYXNzTYYDTZEDh1gQAAAARmFzdENvZGVyLmVuY29kZVgDAAAAZGVmTWMBTWYBh1gcAAAARmFzdFByaW1pdGl2ZXNDb2Rlci5fX2luaXRfX1gDAAAAZGVmTWACTWICh1gaAAAAR2xvYmFsV2luZG93Q29kZXIuX19pbml0X19YAwAAAGRlZk2JA02MA4dYIQAAAExlbmd0aFByZWZpeENvZGVyLmFzX2Nsb3VkX29iamVjdFgDAAAAZGVmTQQETQwEh1goAAAAVHVwbGVTZXF1ZW5jZUNvZGVyLl9nZXRfY29tcG9uZW50X2NvZGVyc1gDAAAAZGVmTUIDTUQDh1ghAAAAU3RhdGVCYWNrZWRJdGVyYWJsZUNvZGVyLl9faGFzaF9fWAMAAABkZWZNQARNQgSHWCEAAABTdGF0ZUJhY2tlZEl0ZXJhYmxlQ29kZXIuX19yZXByX19YAwAAAGRlZk04BE06BIdYHAAAAEl0ZXJhYmxlQ29kZXIuZnJvbV90eXBlX2hpbnRYAwAAAGRlZk1xA010A4dYGQAAAFR1cGxlQ29kZXIuZnJvbV90eXBlX2hpbnRYAwAAAGRlZk3tAk3wAodYHAAAAF9QaWNrbGVDb2RlckJhc2UudmFsdWVfY29kZXJYAwAAAGRlZk0lAk0nAodYFgAAAENvZGVyLmlzX2RldGVybWluaXN0aWNYAwAAAGRlZktXS2eHWCMAAABGYXN0UHJpbWl0aXZlc0NvZGVyLmFzX2Nsb3VkX29iamVjdFgDAAAAZGVmTXACTX4Ch1gMAAAAU3RyVXRmOENvZGVyWAUAAABjbGFzc004AU1DAYdYCwAAAFZhckludENvZGVyWAUAAABjbGFzc02KAU2dAYdYGAAAAEJhc2U2NFBpY2tsZUNvZGVyLmVuY29kZVgDAAAAZGVmTZcCTZkCh1gbAAAAVHVwbGVTZXF1ZW5jZUNvZGVyLl9faW5pdF9fWAMAAABkZWZNKwNNLQOHWBsAAABUdXBsZVNlcXVlbmNlQ29kZXIuX19yZXByX19YAwAAAGRlZk1FA01HA4dYEwAAAEJ5dGVzQ29kZXIuX19oYXNoX19YAwAAAGRlZk2DAU2FAYdYGgAAAExlbmd0aFByZWZpeENvZGVyLl9faW5pdF9fWAMAAABkZWZN9ANN9gOHWAUAAABDb2RlclgFAAAAY2xhc3NLTE0wAYdYHwAAAFRpbWVzdGFtcENvZGVyLmlzX2RldGVybWluaXN0aWNYAwAAAGRlZk24AU26AYdYGwAAAFRpbWVzdGFtcENvZGVyLl9jcmVhdGVfaW1wbFgDAAAAZGVmTbUBTbcBh1gjAAAAV2luZG93ZWRWYWx1ZUNvZGVyLmlzX2RldGVybWluaXN0aWNYAwAAAGRlZk3AA03EA4dYEwAAAFN0clV0ZjhDb2Rlci5lbmNvZGVYAwAAAGRlZk07AU09AYdYDwAAAHNlcmlhbGl6ZV9jb2RlclgDAAAAZGVmS0BLRIdYHAAAAFZhckludENvZGVyLmlzX2RldGVybWluaXN0aWNYAwAAAGRlZk2QAU2SAYdYHAAAAF9QaWNrbGVDb2RlckJhc2UuaXNfa3ZfY29kZXJYAwAAAGRlZk0fAk0hAodYFQAAAFNpbmdsZXRvbkNvZGVyLl9fZXFfX1gDAAAAZGVmTeoBTewBh1gYAAAAQmFzZTY0UGlja2xlQ29kZXIuZGVjb2RlWAMAAABkZWZNmgJNnAKHWCEAAABfcGlja2xlX2Zyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXJYAwAAAGRlZk0yAU02AYdYFwAAAFNpbmdsZXRvbkNvZGVyLl9faGFzaF9fWAMAAABkZWZN7QFN7wGHWAkAAABGYXN0Q29kZXJYBQAAAGNsYXNzTVsBTXABh1gdAAAAU3RyVXRmOENvZGVyLmlzX2RldGVybWluaXN0aWNYAwAAAGRlZk1BAU1DAYdYKQAAAFN0YXRlQmFja2VkSXRlcmFibGVDb2Rlci5pc19kZXRlcm1pbmlzdGljWAMAAABkZWZNMgRNNASHWCQAAABUdXBsZUNvZGVyLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXJYAwAAAGRlZk0jA00mA4dYGAAAAFZhckludENvZGVyLl9jcmVhdGVfaW1wbFgDAAAAZGVmTY0BTY8Bh1gaAAAASXRlcmFibGVDb2Rlci5fY3JlYXRlX2ltcGxYAwAAAGRlZk1WA01YA4dYFAAAAFZhckludENvZGVyLl9faGFzaF9fWAMAAABkZWZNmwFNnQGHWB0AAABDb2Rlci50b19ydW5uZXJfYXBpX3BhcmFtZXRlclgDAAAAZGVmTRsBTSABh1giAAAATGVuZ3RoUHJlZml4Q29kZXIuaXNfZGV0ZXJtaW5pc3RpY1gDAAAAZGVmTfoDTfwDh1gYAAAAQ29kZXIuX2RpY3Rfd2l0aG91dF9pbXBsWAMAAABkZWZLnkukh1gLAAAAUGlja2xlQ29kZXJYBQAAAGNsYXNzTS8CTToCh1gbAAAAV2luZG93ZWRWYWx1ZUNvZGVyLl9fcmVwcl9fWAMAAABkZWZN3QNN3wOHWBUAAABDb2Rlci5mcm9tX3J1bm5lcl9hcGlYAwAAAGRlZk0PAU0aAYdYDgAAAFNpbmdsZXRvbkNvZGVyWAUAAABjbGFzc03eAU3vAYdYFAAAAF9UaW1lckNvZGVyLl9faW5pdF9fWAMAAABkZWZNxgFNyAGHWCAAAABEZXRlcm1pbmlzdGljRmFzdFByaW1pdGl2ZXNDb2RlclgFAAAAY2xhc3NNQwJNWQKHWBgAAABMZW5ndGhQcmVmaXhDb2Rlci5fX2VxX19YAwAAAGRlZk0TBE0WBIdYHwAAAFNpbmdsZXRvbkNvZGVyLmlzX2RldGVybWluaXN0aWNYAwAAAGRlZk3nAU3pAYdYEQAAAEJhc2U2NFBpY2tsZUNvZGVyWAUAAABjbGFzc02SAk2wAodYMAAAAFN0YXRlQmFja2VkSXRlcmFibGVDb2Rlci50b19ydW5uZXJfYXBpX3BhcmFtZXRlclgDAAAAZGVmTUMETUgEh1g3AAAAQ29kZXIucmVnaXN0ZXJfc3RydWN0dXJlZF91cm4uZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlclgDAAAAZGVmTSoBTTABh1giAAAAUGlja2xlQ29kZXIuYXNfZGV0ZXJtaW5pc3RpY19jb2RlclgDAAAAZGVmTTgCTToCh1gnAAAATGVuZ3RoUHJlZml4Q29kZXIuX2dldF9jb21wb25lbnRfY29kZXJzWAMAAABkZWZNDQRNDwSHWCAAAABGYXN0UHJpbWl0aXZlc0NvZGVyLl9jcmVhdGVfaW1wbFgDAAAAZGVmTWMCTWYCh1gjAAAAVHVwbGVTZXF1ZW5jZUNvZGVyLmlzX2RldGVybWluaXN0aWNYAwAAAGRlZk00A002A4dYGgAAAEZhc3RQcmltaXRpdmVzQ29kZXIuX19lcV9fWAMAAABkZWZNiwJNjQKHWCwAAABEZXRlcm1pbmlzdGljRmFzdFByaW1pdGl2ZXNDb2Rlci5pc19rdl9jb2RlclgDAAAAZGVmTVECTVMCh1gZAAAASXRlcmFibGVDb2Rlci52YWx1ZV9jb2RlclgDAAAAZGVmTW4DTXADh1gXAAAAU2luZ2xldG9uQ29kZXIuX19pbml0X19YAwAAAGRlZk3hAU3jAYdYIQAAAFR1cGxlU2VxdWVuY2VDb2Rlci5mcm9tX3R5cGVfaGludFgDAAAAZGVmTT4DTUEDh1gRAAAAQ29kZXIudmFsdWVfY29kZXJYAwAAAGRlZkuzS7iHWAsAAABfVGltZXJDb2RlclgFAAAAY2xhc3NNwgFN2AGHWCQAAABGYXN0UHJpbWl0aXZlc0NvZGVyLmlzX2RldGVybWluaXN0aWNYAwAAAGRlZk1nAk1pAodYKQAAAFR1cGxlU2VxdWVuY2VDb2Rlci5hc19kZXRlcm1pbmlzdGljX2NvZGVyWAMAAABkZWZNNwNNPQOHWBsAAABGbG9hdENvZGVyLmlzX2RldGVybWluaXN0aWNYAwAAAGRlZk2oAU2qAYdYHwAAAFdpbmRvd2VkVmFsdWVDb2Rlci5fY3JlYXRlX2ltcGxYAwAAAGRlZk26A02/A4dYIAAAAEludGVydmFsV2luZG93Q29kZXIuX2NyZWF0ZV9pbXBsWAMAAABkZWZNmgNNnAOHWCQAAABJbnRlcnZhbFdpbmRvd0NvZGVyLmlzX2RldGVybWluaXN0aWNYAwAAAGRlZk2dA02fA4dYGgAAAEJ5dGVzQ29kZXIuYXNfY2xvdWRfb2JqZWN0WAMAAABkZWZNewFNfwGHWBgAAABQaWNrbGVDb2Rlci5fY3JlYXRlX2ltcGxYAwAAAGRlZk0yAk03AodYHAAAAFdpbmRvd2VkVmFsdWVDb2Rlci5rZXlfY29kZXJYAwAAAGRlZk3XA03ZA4dYEgAAAF9UaW1lckNvZGVyLl9fZXFfX1gDAAAAZGVmTdIBTdUBh1gNAAAASXRlcmFibGVDb2RlclgFAAAAY2xhc3NNUANNgQOHWA8AAABDb2Rlci5rZXlfY29kZXJYAwAAAGRlZkutS7KHWBMAAABTdHJVdGY4Q29kZXIuZGVjb2RlWAMAAABkZWZNPgFNQAGHWCEAAABUdXBsZUNvZGVyLmFzX2RldGVybWluaXN0aWNfY29kZXJYAwAAAGRlZk3mAk3sAodYEgAAAFR1cGxlU2VxdWVuY2VDb2RlclgFAAAAY2xhc3NNKANNTgOHWBMAAABJbnRlcnZhbFdpbmRvd0NvZGVyWAUAAABjbGFzc02XA02qA4dYDgAAAENvZGVyLmdldF9pbXBsWAMAAABkZWZLkUuah1ghAAAAU3RhdGVCYWNrZWRJdGVyYWJsZUNvZGVyLl9faW5pdF9fWAMAAABkZWZNIARNKgSHWBMAAABGYXN0UHJpbWl0aXZlc0NvZGVyWAUAAABjbGFzc01bAk2QAodYIAAAAF9QaWNrbGVDb2RlckJhc2UuYXNfY2xvdWRfb2JqZWN0WAMAAABkZWZNDQJNGwKHWBYAAABEaWxsQ29kZXIuX2NyZWF0ZV9pbXBsWAMAAABkZWZNPwJNQQKHWAoAAABGbG9hdENvZGVyWAUAAABjbGFzc02iAU2wAYd1fXLGgwAAKFgbAAAAQnl0ZXNDb2Rlci5pc19kZXRlcm1pbmlzdGljWBkAAABhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzcseDAABYHQAAAFN0clV0ZjhDb2Rlci5pc19kZXRlcm1pbmlzdGljaseDAABYDAAAAFN0clV0ZjhDb2RlcmrHgwAAWCQAAABUdXBsZUNvZGVyLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXJqx4MAAFgdAAAAQ29kZXIucmVnaXN0ZXJfc3RydWN0dXJlZF91cm5qx4MAAFgKAAAAVHVwbGVDb2RlcmrHgwAAWCIAAABUdXBsZUNvZGVyLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyaseDAABYCgAAAEJ5dGVzQ29kZXJqx4MAAFgdAAAAQ29kZXIudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJqx4MAAFgRAAAAVHVwbGVDb2Rlci5jb2RlcnNqx4MAAFgOAAAAVGltZXN0YW1wQ29kZXJqx4MAAFgKAAAAUHJvdG9Db2RlcmrHgwAAWBIAAABDb2Rlci5yZWdpc3Rlcl91cm5qx4MAAFgLAAAAUGlja2xlQ29kZXJqx4MAAFgUAAAAQ29kZXIuZnJvbV90eXBlX2hpbnRqx4MAAFgiAAAAV2luZG93ZWRWYWx1ZUNvZGVyLmFzX2Nsb3VkX29iamVjdGrHgwAAWBUAAABDb2Rlci5mcm9tX3J1bm5lcl9hcGlqx4MAAFgOAAAAU2luZ2xldG9uQ29kZXJqx4MAAFgeAAAAV2luZG93ZWRWYWx1ZUNvZGVyLnZhbHVlX2NvZGVyaseDAABYGQAAAFR1cGxlQ29kZXIuZnJvbV90eXBlX2hpbnRqx4MAAFgaAAAAVHVwbGVDb2Rlci5hc19jbG91ZF9vYmplY3Rqx4MAAFgfAAAAU2luZ2xldG9uQ29kZXIuaXNfZGV0ZXJtaW5pc3RpY2rHgwAAWAwAAABDb2Rlci5kZWNvZGVqx4MAAFgbAAAAUHJvdG9Db2Rlci5pc19kZXRlcm1pbmlzdGljaseDAABYFAAAAFR1cGxlQ29kZXIua2V5X2NvZGVyaseDAABYEwAAAENvZGVyLmVzdGltYXRlX3NpemVqx4MAAFgdAAAASXRlcmFibGVDb2Rlci5hc19jbG91ZF9vYmplY3Rqx4MAAFgcAAAAV2luZG93ZWRWYWx1ZUNvZGVyLmtleV9jb2RlcmrHgwAAWBYAAABUdXBsZUNvZGVyLmlzX2t2X2NvZGVyaseDAABYIgAAAFBpY2tsZUNvZGVyLmFzX2RldGVybWluaXN0aWNfY29kZXJqx4MAAFgjAAAAVHVwbGVTZXF1ZW5jZUNvZGVyLmlzX2RldGVybWluaXN0aWNqx4MAAFgfAAAARmFzdFByaW1pdGl2ZXNDb2Rlci52YWx1ZV9jb2RlcmrHgwAAWBwAAABJdGVyYWJsZUNvZGVyLmZyb21fdHlwZV9oaW50aseDAABYGQAAAEl0ZXJhYmxlQ29kZXIudmFsdWVfY29kZXJqx4MAAFgZAAAAUHJvdG9Db2Rlci5mcm9tX3R5cGVfaGludGrHgwAAWCEAAABUdXBsZVNlcXVlbmNlQ29kZXIuZnJvbV90eXBlX2hpbnRqx4MAAFgWAAAAQ29kZXIuaXNfZGV0ZXJtaW5pc3RpY2rHgwAAWBIAAABXaW5kb3dlZFZhbHVlQ29kZXJqx4MAAFgeAAAAVHVwbGVTZXF1ZW5jZUNvZGVyLnZhbHVlX2NvZGVyaseDAABYFQAAAENvZGVyLmFzX2Nsb3VkX29iamVjdGrHgwAAWB4AAABXaW5kb3dlZFZhbHVlQ29kZXIuaXNfa3ZfY29kZXJqx4MAAFgLAAAAVmFySW50Q29kZXJqx4MAAFgjAAAARmFzdFByaW1pdGl2ZXNDb2Rlci5hc19jbG91ZF9vYmplY3Rqx4MAAFgpAAAAVHVwbGVTZXF1ZW5jZUNvZGVyLmFzX2RldGVybWluaXN0aWNfY29kZXJqx4MAAFgSAAAAVHVwbGVTZXF1ZW5jZUNvZGVyaseDAABYHAAAAENvZGVyLmFzX2RldGVybWluaXN0aWNfY29kZXJqx4MAAFgbAAAARmxvYXRDb2Rlci5pc19kZXRlcm1pbmlzdGljaseDAABYJAAAAEl0ZXJhYmxlQ29kZXIuYXNfZGV0ZXJtaW5pc3RpY19jb2RlcmrHgwAAWBEAAABDb2Rlci52YWx1ZV9jb2RlcmrHgwAAWBoAAABCeXRlc0NvZGVyLmFzX2Nsb3VkX29iamVjdGrHgwAAWBsAAABUdXBsZUNvZGVyLmlzX2RldGVybWluaXN0aWNqx4MAAFgqAAAARmFzdFByaW1pdGl2ZXNDb2Rlci5hc19kZXRlcm1pbmlzdGljX2NvZGVyaseDAABYEwAAAENvZGVyLnRvX3J1bm5lcl9hcGlqx4MAAFgNAAAASXRlcmFibGVDb2RlcmrHgwAAWAoAAABGbG9hdENvZGVyaseDAABYBQAAAENvZGVyaseDAABYHwAAAFRpbWVzdGFtcENvZGVyLmlzX2RldGVybWluaXN0aWNqx4MAAFgfAAAARmFzdFByaW1pdGl2ZXNDb2Rlci5pc19rdl9jb2RlcmrHgwAAWCEAAABUdXBsZUNvZGVyLmFzX2RldGVybWluaXN0aWNfY29kZXJqx4MAAFgRAAAAQ29kZXIuaXNfa3ZfY29kZXJqx4MAAFgdAAAARmFzdFByaW1pdGl2ZXNDb2Rlci5rZXlfY29kZXJqx4MAAFgjAAAAV2luZG93ZWRWYWx1ZUNvZGVyLmlzX2RldGVybWluaXN0aWNqx4MAAFgOAAAAQ29kZXIuZ2V0X2ltcGxqx4MAAFgbAAAAVmFySW50Q29kZXIuYXNfY2xvdWRfb2JqZWN0aseDAABYEwAAAFN0clV0ZjhDb2Rlci5lbmNvZGVqx4MAAFgTAAAARmFzdFByaW1pdGl2ZXNDb2RlcmrHgwAAWB4AAABJdGVyYWJsZUNvZGVyLmlzX2RldGVybWluaXN0aWNqx4MAAFgTAAAAU3RyVXRmOENvZGVyLmRlY29kZWrHgwAAWCQAAABGYXN0UHJpbWl0aXZlc0NvZGVyLmlzX2RldGVybWluaXN0aWNqx4MAAFgMAAAAQ29kZXIuZW5jb2RlaseDAABYHAAAAFZhckludENvZGVyLmlzX2RldGVybWluaXN0aWNqx4MAAFgPAAAAQ29kZXIua2V5X2NvZGVyaseDAABYFgAAAFR1cGxlQ29kZXIudmFsdWVfY29kZXJqx4MAAFgJAAAARGlsbENvZGVyaseDAAB1an1pAABYGQAAAGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnNyyIMAAIWBcsmDAAB9csqDAABidHLLgwAAVSBhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9yc3LMgwAAKFhgUAAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJUeXBlIGhpbnRpbmcgZGVjb3JhdG9ycyBhbGxvd2luZyBzdGF0aWMgb3IgcnVudGltZSB0eXBlLWNoZWNraW5nIGZvciB0aGUgU0RLLgoKVGhpcyBtb2R1bGUgZGVmaW5lcyBkZWNvcmF0b3JzIHdoaWNoIHV0aWxpemUgdGhlIHR5cGUtaGludHMgZGVmaW5lZCBpbgondHlwZV9oaW50cy5weScgdG8gYWxsb3cgYW5ub3RhdGlvbiBvZiB0aGUgdHlwZXMgb2YgZnVuY3Rpb24gYXJndW1lbnRzIGFuZApyZXR1cm4gdmFsdWVzLgoKVHlwZS1oaW50cyBmb3IgZnVuY3Rpb25zIGFyZSBhbm5vdGF0ZWQgdXNpbmcgdHdvIHNlcGFyYXRlIGRlY29yYXRvcnMuIE9uZSBpcyBmb3IKdHlwZS1oaW50aW5nIHRoZSB0eXBlcyBvZiBmdW5jdGlvbiBhcmd1bWVudHMsIHRoZSBvdGhlciBmb3IgdHlwZS1oaW50aW5nIHRoZQpmdW5jdGlvbiByZXR1cm4gdmFsdWUuIFR5cGUtaGludHMgY2FuIGVpdGhlciBiZSBzcGVjaWZpZWQgaW4gdGhlIGZvcm0gb2YKcG9zaXRpb25hbCBhcmd1bWVudHM6OgoKICBAd2l0aF9pbnB1dF90eXBlcyhpbnQsIGludCkKICBkZWYgYWRkKGEsIGIpOgogICAgcmV0dXJuIGEgKyBiCgpLZXl3b3JkIGFyZ3VtZW50czo6CgogIEB3aXRoX2lucHV0X3R5cGVzKGE9aW50LCBiPWludCkKICBkZWYgYWRkKGEsIGIpOgogICAgcmV0dXJuIGEgKyBiCgpPciBldmVuIGEgbWl4IG9mIGJvdGg6OgoKICBAd2l0aF9pbnB1dF90eXBlcyhpbnQsIGI9aW50KQogIGRlZiBhZGQoYSwgYik6CiAgICByZXR1cm4gYSArIGIKCkV4YW1wbGUgdXNhZ2UgZm9yIHR5cGUtaGludGluZyBhcmd1bWVudHMgb25seTo6CgogIEB3aXRoX2lucHV0X3R5cGVzKHM9c3RyKQogIGRlZiB0b19sb3dlcihhKToKICAgIHJldHVybiBhLmxvd2VyKCkKCkV4YW1wbGUgdXNhZ2UgZm9yIHR5cGUtaGludGluZyByZXR1cm4gdmFsdWVzIG9ubHk6OgoKICBAd2l0aF9vdXRwdXRfdHlwZXMoVHVwbGVbaW50LCBib29sXSkKICBkZWYgY29tcHJlc3NfcG9pbnQoZWNfcG9pbnQpOgogICAgcmV0dXJuIGVjX3BvaW50LngsIGVjX3BvaW50LnkgPCAwCgpFeGFtcGxlIHVzYWdlIGZvciB0eXBlLWhpbnRpbmcgYm90aCBhcmd1bWVudHMgYW5kIHJldHVybiB2YWx1ZXM6OgoKICBAd2l0aF9pbnB1dF90eXBlcyhhPWludCkKICBAd2l0aF9vdXRwdXRfdHlwZXMoc3RyKQogIGRlZiBpbnRfdG9fc3RyKGEpOgogICAgcmV0dXJuIHN0cihhKQoKVHlwZS1oaW50aW5nIGEgZnVuY3Rpb24gd2l0aCBhcmd1bWVudHMgdGhhdCB1bnBhY2sgdHVwbGVzIGFyZSBhbHNvIHN1cHBvcnRlZC4gQXMKYW4gZXhhbXBsZSwgc3VjaCBhIGZ1bmN0aW9uIHdvdWxkIGJlIGRlZmluZWQgYXM6OgoKICBkZWYgZm9vKChhLCBiKSk6CiAgICAuLi4KClRoZSB2YWxpZCB0eXBlLWhpbnQgZm9yIHN1Y2ggYXMgZnVuY3Rpb24gbG9va3MgbGlrZSB0aGUgZm9sbG93aW5nOjoKCiAgQHdpdGhfaW5wdXRfdHlwZXMoYT1pbnQsIGI9aW50KQogIGRlZiBmb28oKGEsIGIpKToKICAgIC4uLgoKTm90aWNlIHRoYXQgd2UgaGludCB0aGUgdHlwZSBvZiBlYWNoIHVucGFja2VkIGFyZ3VtZW50IGluZGVwZW5kZW50bHksIHJhdGhlcgp0aGFuIGhpbnRpbmcgdGhlIHR5cGUgb2YgdGhlIHR1cGxlIGFzIGEgd2hvbGUgKFR1cGxlW2ludCwgaW50XSkuCgpPcHRpb25hbGx5LCB0eXBlLWhpbnRzIGNhbiBiZSB0eXBlLWNoZWNrZWQgYXQgcnVudGltZS4gVG8gdG9nZ2xlIHRoaXMgYmVoYXZpb3IKdGhpcyBtb2R1bGUgZGVmaW5lcyB0d28gZnVuY3Rpb25zOiAnZW5hYmxlX3J1bl90aW1lX3R5cGVfY2hlY2tpbmcnIGFuZAonZGlzYWJsZV9ydW5fdGltZV90eXBlX2NoZWNraW5nJy4gTk9URTogZm9yIHRoaXMgdG9nZ2xlIGJlaGF2aW9yIHRvIHdvcmsKcHJvcGVybHkgaXQgbXVzdCBhcHBlYXIgYXQgdGhlIHRvcCBvZiB0aGUgbW9kdWxlIHdoZXJlIGFsbCBmdW5jdGlvbnMgYXJlCmRlZmluZWQsIG9yIGJlZm9yZSBpbXBvcnRpbmcgYSBtb2R1bGUgY29udGFpbmluZyB0eXBlLWhpbnRlZCBmdW5jdGlvbnMuCiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBpbnNwZWN0CmltcG9ydCB0eXBlcwpmcm9tIGJ1aWx0aW5zIGltcG9ydCBuZXh0CmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdApmcm9tIGJ1aWx0aW5zIGltcG9ydCB6aXAKCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzIGltcG9ydCBuYXRpdmVfdHlwZV9jb21wYXRpYmlsaXR5CmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzIGltcG9ydCB0eXBlaGludHMKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzIGltcG9ydCBDb21wb3NpdGVUeXBlSGludEVycm9yCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50cyBpbXBvcnQgU2ltcGxlVHlwZUhpbnRFcnJvcgpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHMgaW1wb3J0IGNoZWNrX2NvbnN0cmFpbnQKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzIGltcG9ydCB2YWxpZGF0ZV9jb21wb3NpdGVfdHlwZV9wYXJhbQoKX19hbGxfXyA9IFsKICAgICd3aXRoX2lucHV0X3R5cGVzJywKICAgICd3aXRoX291dHB1dF90eXBlcycsCiAgICAnV2l0aFR5cGVIaW50cycsCiAgICAnVHlwZUNoZWNrRXJyb3InLApdCgoKIyBUaGlzIGlzIG1pc3NpbmcgaW4gdGhlIGJ1aWx0aW4gdHlwZXMgbW9kdWxlLiAgc3RyLnVwcGVyIGlzIGFyYml0cmFyeSwgYW55CiMgbWV0aG9kIG9uIGEgQy1pbXBsZW1lbnRlZCB0eXBlIHdpbGwgZG8uCiMgcHlsaW50OiBkaXNhYmxlPWludmFsaWQtbmFtZQpfTWV0aG9kRGVzY3JpcHRvclR5cGUgPSB0eXBlKHN0ci51cHBlcikKIyBweWxpbnQ6IGVuYWJsZT1pbnZhbGlkLW5hbWUKCnRyeToKICBfb3JpZ2luYWxfZ2V0ZnVsbGFyZ3NwZWMgPSBpbnNwZWN0LmdldGZ1bGxhcmdzcGVjCiAgX3VzZV9mdWxsX2FyZ3NwZWMgPSBUcnVlCmV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjogICMgUHl0aG9uIDIKICBfb3JpZ2luYWxfZ2V0ZnVsbGFyZ3NwZWMgPSBpbnNwZWN0LmdldGFyZ3NwZWMKICBfdXNlX2Z1bGxfYXJnc3BlYyA9IEZhbHNlCgoKZGVmIGdldGZ1bGxhcmdzcGVjKGZ1bmMpOgogIHRyeToKICAgIHJldHVybiBfb3JpZ2luYWxfZ2V0ZnVsbGFyZ3NwZWMoZnVuYykKICBleGNlcHQgVHlwZUVycm9yOgogICAgaWYgaXNpbnN0YW5jZShmdW5jLCB0eXBlKToKICAgICAgYXJnc3BlYyA9IGdldGZ1bGxhcmdzcGVjKGZ1bmMuX19pbml0X18pCiAgICAgIGRlbCBhcmdzcGVjLmFyZ3NbMF0KICAgICAgcmV0dXJuIGFyZ3NwZWMKICAgIGVsaWYgY2FsbGFibGUoZnVuYyk6CiAgICAgIHRyeToKICAgICAgICByZXR1cm4gX29yaWdpbmFsX2dldGZ1bGxhcmdzcGVjKGZ1bmMuX19jYWxsX18pCiAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CiAgICAgICAgIyBSZXR1cm4gYW4gQXJnU3BlYyB3aXRoIGF0IGxlYXN0IG9uZSBwb3NpdGlvbmFsIGFyZ3VtZW50LAogICAgICAgICMgYW5kIGFueSBudW1iZXIgb2Ygb3RoZXIgKHBvc2l0aW9uYWwgb3Iga2V5d29yZCkgYXJndW1lbnRzCiAgICAgICAgIyB3aG9zZSBuYW1lIHdvbid0IG1hdGNoIGFueSByZWFsIGFyZ3VtZW50LgogICAgICAgICMgQXJndW1lbnRzIHdpdGggdGhlICV1bmtub3duJSBwcmVmaXggd2lsbCBiZSBpZ25vcmVkIGluIHRoZSB0eXBlCiAgICAgICAgIyBjaGVja2luZyBjb2RlLgogICAgICAgIGlmIF91c2VfZnVsbF9hcmdzcGVjOgogICAgICAgICAgcmV0dXJuIGluc3BlY3QuRnVsbEFyZ1NwZWMoCiAgICAgICAgICAgICAgWydfJ10sICdfX3Vua25vd25fX3ZhcmFyZ3MnLCAnX191bmtub3duX19rZXl3b3JkcycsICgpLAogICAgICAgICAgICAgIFtdLCB7fSwge30pCiAgICAgICAgZWxzZTogICMgUHl0aG9uIDIKICAgICAgICAgIHJldHVybiBpbnNwZWN0LkFyZ1NwZWMoCiAgICAgICAgICAgICAgWydfJ10sICdfX3Vua25vd25fX3ZhcmFyZ3MnLCAnX191bmtub3duX19rZXl3b3JkcycsICgpKQogICAgZWxzZToKICAgICAgcmFpc2UKCgpjbGFzcyBJT1R5cGVIaW50cyhvYmplY3QpOgogICIiIkVuY2Fwc3VsYXRlcyBhbGwgdHlwZSBoaW50IGluZm9ybWF0aW9uIGFib3V0IGEgRGF0YWZsb3cgY29uc3RydWN0LgoKICBUaGlzIHNob3VsZCBwcmltYXJpbHkgYmUgdXNlZCB2aWEgdGhlIFdpdGhUeXBlSGludHMgbWl4aW4gY2xhc3MsIHRob3VnaAogIG1heSBhbHNvIGJlIGF0dGFjaGVkIHRvIG90aGVyIG9iamVjdHMgKHN1Y2ggYXMgUHl0aG9uIGZ1bmN0aW9ucykuCiAgIiIiCiAgX19zbG90c19fID0gKCdpbnB1dF90eXBlcycsICdvdXRwdXRfdHlwZXMnKQoKICBkZWYgX19pbml0X18oc2VsZiwgaW5wdXRfdHlwZXM9Tm9uZSwgb3V0cHV0X3R5cGVzPU5vbmUpOgogICAgc2VsZi5pbnB1dF90eXBlcyA9IGlucHV0X3R5cGVzCiAgICBzZWxmLm91dHB1dF90eXBlcyA9IG91dHB1dF90eXBlcwoKICBkZWYgc2V0X2lucHV0X3R5cGVzKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICBzZWxmLmlucHV0X3R5cGVzID0gYXJncywga3dhcmdzCgogIGRlZiBzZXRfb3V0cHV0X3R5cGVzKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICBzZWxmLm91dHB1dF90eXBlcyA9IGFyZ3MsIGt3YXJncwoKICBkZWYgc2ltcGxlX291dHB1dF90eXBlKHNlbGYsIGNvbnRleHQpOgogICAgaWYgc2VsZi5vdXRwdXRfdHlwZXM6CiAgICAgIGFyZ3MsIGt3YXJncyA9IHNlbGYub3V0cHV0X3R5cGVzCiAgICAgIGlmIGxlbihhcmdzKSAhPSAxIG9yIGt3YXJnczoKICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ0V4cGVjdGVkIHNpbXBsZSBvdXRwdXQgdHlwZSBoaW50IGZvciAlcycgJSBjb250ZXh0KQogICAgICByZXR1cm4gYXJnc1swXQoKICBkZWYgY29weShzZWxmKToKICAgIHJldHVybiBJT1R5cGVIaW50cyhzZWxmLmlucHV0X3R5cGVzLCBzZWxmLm91dHB1dF90eXBlcykKCiAgZGVmIHdpdGhfZGVmYXVsdHMoc2VsZiwgaGludHMpOgogICAgaWYgbm90IGhpbnRzOgogICAgICByZXR1cm4gc2VsZgogICAgZWxpZiBub3Qgc2VsZjoKICAgICAgcmV0dXJuIGhpbnRzCiAgICByZXR1cm4gSU9UeXBlSGludHMoc2VsZi5pbnB1dF90eXBlcyBvciBoaW50cy5pbnB1dF90eXBlcywKICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm91dHB1dF90eXBlcyBvciBoaW50cy5vdXRwdXRfdHlwZXMpCgogIGRlZiBfX2Jvb2xfXyhzZWxmKToKICAgIHJldHVybiBib29sKHNlbGYuaW5wdXRfdHlwZXMgb3Igc2VsZi5vdXRwdXRfdHlwZXMpCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnSU9UeXBlSGludHNbaW5wdXRzPSVzLCBvdXRwdXRzPSVzXScgJSAoCiAgICAgICAgc2VsZi5pbnB1dF90eXBlcywgc2VsZi5vdXRwdXRfdHlwZXMpCgoKY2xhc3MgV2l0aFR5cGVIaW50cyhvYmplY3QpOgogICIiIkEgbWl4aW4gY2xhc3MgdGhhdCBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBzZXQgYW5kIHJldHJpZXZlIHR5cGUgaGludHMuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCAqdW51c2VkX2FyZ3MsICoqdW51c2VkX2t3YXJncyk6CiAgICBzZWxmLl90eXBlX2hpbnRzID0gSU9UeXBlSGludHMoKQoKICBkZWYgX2dldF9vcl9jcmVhdGVfdHlwZV9oaW50cyhzZWxmKToKICAgICMgX19pbml0X18gbWF5IGhhdmUgbm90IGJlZW4gY2FsbGVkCiAgICB0cnk6CiAgICAgIHJldHVybiBzZWxmLl90eXBlX2hpbnRzCiAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgIHNlbGYuX3R5cGVfaGludHMgPSBJT1R5cGVIaW50cygpCiAgICAgIHJldHVybiBzZWxmLl90eXBlX2hpbnRzCgogIGRlZiBnZXRfdHlwZV9oaW50cyhzZWxmKToKICAgIHJldHVybiAoc2VsZi5fZ2V0X29yX2NyZWF0ZV90eXBlX2hpbnRzKCkKICAgICAgICAgICAgLndpdGhfZGVmYXVsdHMoc2VsZi5kZWZhdWx0X3R5cGVfaGludHMoKSkKICAgICAgICAgICAgLndpdGhfZGVmYXVsdHMoZ2V0X3R5cGVfaGludHMoc2VsZi5fX2NsYXNzX18pKSkKCiAgZGVmIGRlZmF1bHRfdHlwZV9oaW50cyhzZWxmKToKICAgIHJldHVybiBOb25lCgogIGRlZiB3aXRoX2lucHV0X3R5cGVzKHNlbGYsICphcmdfaGludHMsICoqa3dhcmdfaGludHMpOgogICAgc2VsZi5fZ2V0X29yX2NyZWF0ZV90eXBlX2hpbnRzKCkuc2V0X2lucHV0X3R5cGVzKCphcmdfaGludHMsICoqa3dhcmdfaGludHMpCiAgICByZXR1cm4gc2VsZgoKICBkZWYgd2l0aF9vdXRwdXRfdHlwZXMoc2VsZiwgKmFyZ19oaW50cywgKiprd2FyZ19oaW50cyk6CiAgICBzZWxmLl9nZXRfb3JfY3JlYXRlX3R5cGVfaGludHMoKS5zZXRfb3V0cHV0X3R5cGVzKCphcmdfaGludHMsICoqa3dhcmdfaGludHMpCiAgICByZXR1cm4gc2VsZgoKCmNsYXNzIFR5cGVDaGVja0Vycm9yKEV4Y2VwdGlvbik6CiAgcGFzcwoKCmRlZiBfcG9zaXRpb25hbF9hcmdfaGludHMoYXJnLCBoaW50cyk6CiAgIiIiUmV0dXJucyB0aGUgdHlwZSBvZiBhIChwb3NzaWJseSB0dXBsZS1wYWNrZWQpIHBvc2l0aW9uYWwgYXJndW1lbnQuCgogIEUuZy4gZm9yIGxhbWJkYSAoKGEsIGIpLCBjKTogTm9uZSB0aGUgc2luZ2xlIHBvc2l0aW9uYWwgYXJndW1lbnQgaXMgKGFzCiAgcmV0dXJuZWQgYnkgaW5zcGVjdCkgW1thLCBiXSwgY10gd2hpY2ggc2hvdWxkIGhhdmUgdHlwZQogIFR1cGxlW1R1cGxlW0ludCwgQW55XSwgZmxvYXRdIHdoZW4gYXBwbGllZCB0byB0aGUgdHlwZSBoaW50cwogIHthOiBpbnQsIGI6IEFueSwgYzogZmxvYXR9LgogICIiIgogIGlmIGlzaW5zdGFuY2UoYXJnLCBsaXN0KToKICAgIHJldHVybiB0eXBlaGludHMuVHVwbGVbW19wb3NpdGlvbmFsX2FyZ19oaW50cyhhLCBoaW50cykgZm9yIGEgaW4gYXJnXV0KICByZXR1cm4gaGludHMuZ2V0KGFyZywgdHlwZWhpbnRzLkFueSkKCgpkZWYgX3VucGFja19wb3NpdGlvbmFsX2FyZ19oaW50cyhhcmcsIGhpbnQpOgogICIiIlVucGFja3MgdGhlIGdpdmVuIGhpbnQgYWNjb3JkaW5nIHRvIHRoZSBuZXN0ZWQgc3RydWN0dXJlIG9mIGFyZy4KCiAgRm9yIGV4YW1wbGUsIGlmIGFyZyBpcyBbW2EsIGJdLCBjXSBhbmQgaGludCBpcyBUdXBsZVtBbnksIGludF0sIHRoYW4KICB0aGlzIGZ1bmN0aW9uIHdvdWxkIHJldHVybiAoKEFueSwgQW55KSwgaW50KSBzbyBpdCBjYW4gYmUgdXNlZCBpbiBjb25qdW5jdGlvbgogIHdpdGggaW5zcGVjdC5nZXRjYWxsYXJncy4KICAiIiIKICBpZiBpc2luc3RhbmNlKGFyZywgbGlzdCk6CiAgICB0dXBsZV9jb25zdHJhaW50ID0gdHlwZWhpbnRzLlR1cGxlW1t0eXBlaGludHMuQW55XSAqIGxlbihhcmcpXQogICAgaWYgbm90IHR5cGVoaW50cy5pc19jb25zaXN0ZW50X3dpdGgoaGludCwgdHVwbGVfY29uc3RyYWludCk6CiAgICAgIHJhaXNlIFR5cGVDaGVja0Vycm9yKCdCYWQgdHVwbGUgYXJndW1lbnRzIGZvciAlczogZXhwZWN0ZWQgJXMsIGdvdCAlcycgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAoYXJnLCB0dXBsZV9jb25zdHJhaW50LCBoaW50KSkKICAgIGlmIGlzaW5zdGFuY2UoaGludCwgdHlwZWhpbnRzLlR1cGxlQ29uc3RyYWludCk6CiAgICAgIHJldHVybiB0dXBsZShfdW5wYWNrX3Bvc2l0aW9uYWxfYXJnX2hpbnRzKGEsIHQpCiAgICAgICAgICAgICAgICAgICBmb3IgYSwgdCBpbiB6aXAoYXJnLCBoaW50LnR1cGxlX3R5cGVzKSkKICAgIHJldHVybiAodHlwZWhpbnRzLkFueSwpICogbGVuKGFyZykKICByZXR1cm4gaGludAoKCmRlZiBnZXRjYWxsYXJnc19mb3JoaW50cyhmdW5jLCAqdHlwZWFyZ3MsICoqdHlwZWt3YXJncyk6CiAgIiIiTGlrZSBpbnNwZWN0LmdldGNhbGxhcmdzLCBidXQgdW5kZXJzdGFuZHMgdGhhdCBUdXBsZVtdIGFuZCBhbiBBbnkgdW5wYWNrLgogICIiIgogIGFyZ3NwZWMgPSBnZXRmdWxsYXJnc3BlYyhmdW5jKQogICMgVHVybiBUdXBsZVt4LCB5XSBpbnRvICh4LCB5KSBzbyBnZXRjYWxsYXJncyBjYW4gZG8gdGhlIHByb3BlciB1bnBhY2tpbmcuCiAgcGFja2VkX3R5cGVhcmdzID0gW191bnBhY2tfcG9zaXRpb25hbF9hcmdfaGludHMoYXJnLCBoaW50KQogICAgICAgICAgICAgICAgICAgICBmb3IgKGFyZywgaGludCkgaW4gemlwKGFyZ3NwZWMuYXJncywgdHlwZWFyZ3MpXQogIHBhY2tlZF90eXBlYXJncyArPSBsaXN0KHR5cGVhcmdzW2xlbihwYWNrZWRfdHlwZWFyZ3MpOl0pCgogICMgTW9ua2V5cGF0Y2ggaW5zcGVjdC5nZXRmdWxsYXJnc3BlYyB0byBhbGxvdyBwYXNzaW5nIG5vbi1mdW5jdGlvbiBvYmplY3RzLgogICMgZ2V0ZnVsbGFyZ3NwZWMgKGdldGFyZ3NwZWMgb24gUHl0aG9uIDIpIGFyZSB1c2VkIGJ5IGluc3BlY3QuZ2V0Y2FsbGFyZ3MuCiAgIyBUT0RPKEJFQU0tNTQ5MCk6IFJlaW1wbGVtZW50IGdldGNhbGxhcmdzIGFuZCBzdG9wIHJlbHlpbmcgb24gbW9ua2V5cGF0Y2guCiAgaWYgX3VzZV9mdWxsX2FyZ3NwZWM6CiAgICBpbnNwZWN0LmdldGZ1bGxhcmdzcGVjID0gZ2V0ZnVsbGFyZ3NwZWMKICBlbHNlOiAgIyBQeXRob24gMgogICAgaW5zcGVjdC5nZXRhcmdzcGVjID0gZ2V0ZnVsbGFyZ3NwZWMKCiAgdHJ5OgogICAgY2FsbGFyZ3MgPSBpbnNwZWN0LmdldGNhbGxhcmdzKGZ1bmMsICpwYWNrZWRfdHlwZWFyZ3MsICoqdHlwZWt3YXJncykKICBleGNlcHQgVHlwZUVycm9yIGFzIGU6CiAgICByYWlzZSBUeXBlQ2hlY2tFcnJvcihlKQogIGZpbmFsbHk6CiAgICAjIFJldmVydCBtb25rZXktcGF0Y2guCiAgICBpZiBfdXNlX2Z1bGxfYXJnc3BlYzoKICAgICAgaW5zcGVjdC5nZXRmdWxsYXJnc3BlYyA9IF9vcmlnaW5hbF9nZXRmdWxsYXJnc3BlYwogICAgZWxzZToKICAgICAgaW5zcGVjdC5nZXRhcmdzcGVjID0gX29yaWdpbmFsX2dldGZ1bGxhcmdzcGVjCgogIGlmIGFyZ3NwZWMuZGVmYXVsdHM6CiAgICAjIERlY2xhcmUgYW55IGRlZmF1bHQgYXJndW1lbnRzIHRvIGJlIEFueS4KICAgIGZvciBrLCB2YXIgaW4gZW51bWVyYXRlKHJldmVyc2VkKGFyZ3NwZWMuYXJncykpOgogICAgICBpZiBrID49IGxlbihhcmdzcGVjLmRlZmF1bHRzKToKICAgICAgICBicmVhawogICAgICBpZiBjYWxsYXJncy5nZXQodmFyLCBOb25lKSBpcyBhcmdzcGVjLmRlZmF1bHRzWy1rLTFdOgogICAgICAgIGNhbGxhcmdzW3Zhcl0gPSB0eXBlaGludHMuQW55CiAgIyBQYXRjaCB1cCB2YXJhcmdzIGFuZCBrZXl3b3JkcwogIGlmIGFyZ3NwZWMudmFyYXJnczoKICAgIGNhbGxhcmdzW2FyZ3NwZWMudmFyYXJnc10gPSB0eXBla3dhcmdzLmdldCgKICAgICAgICBhcmdzcGVjLnZhcmFyZ3MsIHR5cGVoaW50cy5UdXBsZVt0eXBlaGludHMuQW55LCAuLi5dKQogIGlmIF91c2VfZnVsbF9hcmdzcGVjOgogICAgdmFya3cgPSBhcmdzcGVjLnZhcmt3CiAgZWxzZTogICMgUHl0aG9uIDIKICAgIHZhcmt3ID0gYXJnc3BlYy5rZXl3b3JkcwoKICBpZiB2YXJrdzoKICAgICMgVE9ETyhyb2JlcnR3Yik6IENvbnNpZGVyIHRha2luZyB0aGUgdW5pb24gb2Yga2V5IGFuZCB2YWx1ZSB0eXBlcy4KICAgIGNhbGxhcmdzW3Zhcmt3XSA9IHR5cGVrd2FyZ3MuZ2V0KAogICAgICAgIHZhcmt3LCB0eXBlaGludHMuRGljdFt0eXBlaGludHMuQW55LCB0eXBlaGludHMuQW55XSkKCiAgIyBUT0RPKEJFQU0tNTg3OCkgU3VwcG9ydCBrd29ubHlhcmdzLgoKICByZXR1cm4gY2FsbGFyZ3MKCgpkZWYgZ2V0X3R5cGVfaGludHMoZm4pOgogICIiIkdldHMgdGhlIHR5cGUgaGludCBhc3NvY2lhdGVkIHdpdGggYW4gYXJiaXRyYXJ5IG9iamVjdCBmbi4KCiAgQWx3YXlzIHJldHVybnMgYSB2YWxpZCBJT1R5cGVIaW50cyBvYmplY3QsIGNyZWF0aW5nIG9uZSBpZiBuZWNpc3NhcnkuCiAgIiIiCiAgIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcwogIGlmIG5vdCBoYXNhdHRyKGZuLCAnX3R5cGVfaGludHMnKToKICAgIHRyeToKICAgICAgZm4uX3R5cGVfaGludHMgPSBJT1R5cGVIaW50cygpCiAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBUeXBlRXJyb3IpOgogICAgICAjIENhbid0IGFkZCBhcmJpdHJhcnkgYXR0cmlidXRlcyB0byB0aGlzIG9iamVjdCwKICAgICAgIyBidXQgbWlnaHQgaGF2ZSBzb21lIHJlc3RyaWN0aW9ucyBhbnl3YXlzLi4uCiAgICAgIGhpbnRzID0gSU9UeXBlSGludHMoKQogICAgICBpZiBpc2luc3RhbmNlKGZuLCBfTWV0aG9kRGVzY3JpcHRvclR5cGUpOgogICAgICAgIGhpbnRzLnNldF9pbnB1dF90eXBlcyhmbi5fX29iamNsYXNzX18pCiAgICAgIHJldHVybiBoaW50cwogIHJldHVybiBmbi5fdHlwZV9oaW50cwogICMgcHlsaW50OiBlbmFibGU9cHJvdGVjdGVkLWFjY2VzcwoKCmRlZiB3aXRoX2lucHV0X3R5cGVzKCpwb3NpdGlvbmFsX2hpbnRzLCAqKmtleXdvcmRfaGludHMpOgogICIiIkEgZGVjb3JhdG9yIHRoYXQgdHlwZS1jaGVja3MgZGVmaW5lZCB0eXBlLWhpbnRzIHdpdGggcGFzc2VkIGZ1bmMgYXJndW1lbnRzLgoKICBBbGwgdHlwZS1oaW50ZWQgYXJndW1lbnRzIGNhbiBiZSBzcGVjaWZpZWQgdXNpbmcgcG9zaXRpb25hbCBhcmd1bWVudHMsCiAga2V5d29yZCBhcmd1bWVudHMsIG9yIGEgbWl4IG9mIGJvdGguIEFkZGl0aW9uYWx5LCBhbGwgZnVuY3Rpb24gYXJndW1lbnRzIG11c3QKICBiZSB0eXBlLWhpbnRlZCBpbiB0b3RhbGl0eSBpZiBldmVuIG9uZSBwYXJhbWV0ZXIgaXMgdHlwZS1oaW50ZWQuCgogIE9uY2UgZnVsbHkgZGVjb3JhdGVkLCBpZiB0aGUgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgcmVzdWx0aW5nIGZ1bmN0aW9uCiAgdmlvbGF0ZSB0aGUgdHlwZS1oaW50IGNvbnN0cmFpbnRzIGRlZmluZWQsIGEgOmNsYXNzOmBUeXBlQ2hlY2tFcnJvcmAKICBkZXRhaWxpbmcgdGhlIGVycm9yIHdpbGwgYmUgcmFpc2VkLgoKICBUbyBiZSB1c2VkIGFzOgoKICAuLiB0ZXN0Y29kZTo6CgogICAgZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMgaW1wb3J0IHdpdGhfaW5wdXRfdHlwZXMKCiAgICBAd2l0aF9pbnB1dF90eXBlcyhzdHIpCiAgICBkZWYgdXBwZXIocyk6CiAgICAgIHJldHVybiBzLnVwcGVyKCkKCiAgT3I6CgogIC4uIHRlc3Rjb2RlOjoKCiAgICBmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cyBpbXBvcnQgd2l0aF9pbnB1dF90eXBlcwogICAgZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMgaW1wb3J0IExpc3QKICAgIGZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzIGltcG9ydCBUdXBsZQoKICAgIEB3aXRoX2lucHV0X3R5cGVzKGxzPUxpc3RbVHVwbGVbaW50LCBpbnRdXSkKICAgIGRlZiBpbmNyZW1lbnQobHMpOgogICAgICBbKGkgKyAxLCBqICsgMSkgZm9yIChpLGopIGluIGxzXQoKICBBcmdzOgogICAgKnBvc2l0aW9uYWxfaGludHM6IFBvc2l0aW9uYWwgdHlwZS1oaW50cyBoYXZpbmcgaWRlbnRpY2FsIG9yZGVyIGFzIHRoZQogICAgICBmdW5jdGlvbidzIGZvcm1hbCBhcmd1bWVudHMuIFZhbHVlcyBmb3IgdGhpcyBhcmd1bWVudCBtdXN0IGVpdGhlciBiZSBhCiAgICAgIGJ1aWx0LWluIFB5dGhvbiB0eXBlIG9yIGFuIGluc3RhbmNlIG9mIGEKICAgICAgOmNsYXNzOmB+YXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50cy5UeXBlQ29uc3RyYWludGAgY3JlYXRlZCBieQogICAgICAnaW5kZXhpbmcnIGEKICAgICAgOmNsYXNzOmB+YXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50cy5Db21wb3NpdGVUeXBlSGludGAgaW5zdGFuY2UKICAgICAgd2l0aCBhIHR5cGUgcGFyYW1ldGVyLgogICAgKiprZXl3b3JkX2hpbnRzOiBLZXl3b3JkIGFyZ3VtZW50cyBtaXJyb3JpbmcgdGhlIG5hbWVzIG9mIHRoZSBwYXJhbWV0ZXJzIHRvCiAgICAgIHRoZSBkZWNvcmF0ZWQgZnVuY3Rpb25zLiBUaGUgdmFsdWUgb2YgZWFjaCBrZXl3b3JkIGFyZ3VtZW50IG11c3QgZWl0aGVyCiAgICAgIGJlIG9uZSBvZiB0aGUgYWxsb3dlZCBidWlsdC1pbiBQeXRob24gdHlwZXMsIGEgY3VzdG9tIGNsYXNzLCBvciBhbgogICAgICBpbnN0YW5jZSBvZiBhIDpjbGFzczpgfmFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHMuVHlwZUNvbnN0cmFpbnRgCiAgICAgIGNyZWF0ZWQgYnkgJ2luZGV4aW5nJyBhCiAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHMuQ29tcG9zaXRlVHlwZUhpbnRgIGluc3RhbmNlCiAgICAgIHdpdGggYSB0eXBlIHBhcmFtZXRlci4KCiAgUmFpc2VzOgogICAgOmNsYXNzOmB+ZXhjZXB0aW9ucy5WYWx1ZUVycm9yYDogSWYgbm90IGFsbCBmdW5jdGlvbiBhcmd1bWVudHMgaGF2ZQogICAgICBjb3JyZXNwb25kaW5nIHR5cGUtaGludHMgc3BlY2lmaWVkLiBPciBpZiB0aGUgaW5uZXIgd3JhcHBlciBmdW5jdGlvbiBpc24ndAogICAgICBwYXNzZWQgYSBmdW5jdGlvbiBvYmplY3QuCiAgICA6Y2xhc3M6YFR5cGVDaGVja0Vycm9yYDogSWYgdGhlIGFueSBvZiB0aGUgcGFzc2VkIHR5cGUtaGludAogICAgICBjb25zdHJhaW50cyBhcmUgbm90IGEgdHlwZSBvcgogICAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzLlR5cGVDb25zdHJhaW50YCBpbnN0YW5jZS4KCiAgUmV0dXJuczoKICAgIFRoZSBvcmlnaW5hbCBmdW5jdGlvbiBkZWNvcmF0ZWQgc3VjaCB0aGF0IGl0IGVuZm9yY2VzIHR5cGUtaGludCBjb25zdHJhaW50cwogICAgZm9yIGFsbCByZWNlaXZlZCBmdW5jdGlvbiBhcmd1bWVudHMuCiAgIiIiCgogIGNvbnZlcnRlZF9wb3NpdGlvbmFsX2hpbnRzID0gKAogICAgICBuYXRpdmVfdHlwZV9jb21wYXRpYmlsaXR5LmNvbnZlcnRfdG9fYmVhbV90eXBlcyhwb3NpdGlvbmFsX2hpbnRzKSkKICBjb252ZXJ0ZWRfa2V5d29yZF9oaW50cyA9ICgKICAgICAgbmF0aXZlX3R5cGVfY29tcGF0aWJpbGl0eS5jb252ZXJ0X3RvX2JlYW1fdHlwZXMoa2V5d29yZF9oaW50cykpCiAgZGVsIHBvc2l0aW9uYWxfaGludHMKICBkZWwga2V5d29yZF9oaW50cwoKICBkZWYgYW5ub3RhdGUoZik6CiAgICBpZiBpc2luc3RhbmNlKGYsIHR5cGVzLkZ1bmN0aW9uVHlwZSk6CiAgICAgIGZvciB0IGluIChsaXN0KGNvbnZlcnRlZF9wb3NpdGlvbmFsX2hpbnRzKSArCiAgICAgICAgICAgICAgICBsaXN0KGNvbnZlcnRlZF9rZXl3b3JkX2hpbnRzLnZhbHVlcygpKSk6CiAgICAgICAgdmFsaWRhdGVfY29tcG9zaXRlX3R5cGVfcGFyYW0oCiAgICAgICAgICAgIHQsIGVycm9yX21zZ19wcmVmaXg9J0FsbCB0eXBlIGhpbnQgYXJndW1lbnRzJykKCiAgICBnZXRfdHlwZV9oaW50cyhmKS5zZXRfaW5wdXRfdHlwZXMoKmNvbnZlcnRlZF9wb3NpdGlvbmFsX2hpbnRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqY29udmVydGVkX2tleXdvcmRfaGludHMpCiAgICByZXR1cm4gZgogIHJldHVybiBhbm5vdGF0ZQoKCmRlZiB3aXRoX291dHB1dF90eXBlcygqcmV0dXJuX3R5cGVfaGludCwgKiprd2FyZ3MpOgogICIiIkEgZGVjb3JhdG9yIHRoYXQgdHlwZS1jaGVja3MgZGVmaW5lZCB0eXBlLWhpbnRzIGZvciByZXR1cm4gdmFsdWVzKHMpLgoKICBUaGlzIGRlY29yYXRvciB3aWxsIHR5cGUtY2hlY2sgdGhlIHJldHVybiB2YWx1ZShzKSBvZiB0aGUgZGVjb3JhdGVkIGZ1bmN0aW9uLgoKICBPbmx5IGEgc2luZ2xlIHR5cGUtaGludCBpcyBhY2NlcHRlZCB0byBzcGVjaWZ5IHRoZSByZXR1cm4gdHlwZSBvZiB0aGUgcmV0dXJuCiAgdmFsdWUuIElmIHRoZSBmdW5jdGlvbiB0byBiZSBkZWNvcmF0ZWQgaGFzIG11bHRpcGxlIHJldHVybiB2YWx1ZXMsIHRoZW4gb25lCiAgc2hvdWxkIHVzZTogYGBUdXBsZVt0eXBlXzEsIHR5cGVfMl1gYCB0byBhbm5vdGF0ZSB0aGUgdHlwZXMgb2YgdGhlIHJldHVybgogIHZhbHVlcy4KCiAgSWYgdGhlIHVsdGltYXRlIHJldHVybiB2YWx1ZSBmb3IgdGhlIGZ1bmN0aW9uIHZpb2xhdGVzIHRoZSBzcGVjaWZpZWQgdHlwZS1oaW50CiAgYSA6Y2xhc3M6YFR5cGVDaGVja0Vycm9yYCB3aWxsIGJlIHJhaXNlZCBkZXRhaWxpbmcgdGhlIHR5cGUtY29uc3RyYWludAogIHZpb2xhdGlvbi4KCiAgVGhpcyBkZWNvcmF0b3IgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBsaWtlOgoKICAuLiB0ZXN0Y29kZTo6CgogICAgZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMgaW1wb3J0IHdpdGhfb3V0cHV0X3R5cGVzCiAgICBmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cyBpbXBvcnQgU2V0CgogICAgY2xhc3MgQ29vcmRpbmF0ZShvYmplY3QpOgogICAgICBkZWYgX19pbml0X18oc2VsZiwgeCwgeSk6CiAgICAgICAgc2VsZi54ID0geAogICAgICAgIHNlbGYueSA9IHkKCiAgICBAd2l0aF9vdXRwdXRfdHlwZXMoU2V0W0Nvb3JkaW5hdGVdKQogICAgZGVmIHBhcnNlX2ludHMoaW50cyk6CiAgICAgIHJldHVybiB7Q29vcmRpbmF0ZShpLCBpKSBmb3IgaSBpbiBpbnRzfQoKICBPciB3aXRoIGEgc2ltcGxlIHR5cGUtaGludDoKCiAgLi4gdGVzdGNvZGU6OgoKICAgIGZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzIGltcG9ydCB3aXRoX291dHB1dF90eXBlcwoKICAgIEB3aXRoX291dHB1dF90eXBlcyhib29sKQogICAgZGVmIG5lZ2F0ZShwKToKICAgICAgcmV0dXJuIG5vdCBwIGlmIHAgZWxzZSBwCgogIEFyZ3M6CiAgICAqcmV0dXJuX3R5cGVfaGludDogQSB0eXBlLWhpbnQgc3BlY2lmeWluZyB0aGUgcHJvcGVyIHJldHVybiB0eXBlIG9mIHRoZQogICAgICBmdW5jdGlvbi4gVGhpcyBhcmd1bWVudCBzaG91bGQgZWl0aGVyIGJlIGEgYnVpbHQtaW4gUHl0aG9uIHR5cGUgb3IgYW4KICAgICAgaW5zdGFuY2Ugb2YgYSA6Y2xhc3M6YH5hcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzLlR5cGVDb25zdHJhaW50YAogICAgICBjcmVhdGVkIGJ5ICdpbmRleGluZycgYQogICAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzLkNvbXBvc2l0ZVR5cGVIaW50YC4KICAgICoqa3dhcmdzOiBOb3QgdXNlZC4KCiAgUmFpc2VzOgogICAgOmNsYXNzOmB+ZXhjZXB0aW9ucy5WYWx1ZUVycm9yYDogSWYgYW55IGt3YXJnIHBhcmFtZXRlcnMgYXJlIHBhc3NlZCBpbiwKICAgICAgb3IgdGhlIGxlbmd0aCBvZiAqKnJldHVybl90eXBlX2hpbnQqKiBpcyBncmVhdGVyIHRoYW4gYGAxYGAuIE9yIGlmIHRoZQogICAgICBpbm5lciB3cmFwcGVyIGZ1bmN0aW9uIGlzbid0IHBhc3NlZCBhIGZ1bmN0aW9uIG9iamVjdC4KICAgIDpjbGFzczpgVHlwZUNoZWNrRXJyb3JgOiBJZiB0aGUgKipyZXR1cm5fdHlwZV9oaW50Kiogb2JqZWN0IGlzCiAgICAgIGluIGludmFsaWQgdHlwZS1oaW50LgoKICBSZXR1cm5zOgogICAgVGhlIG9yaWdpbmFsIGZ1bmN0aW9uIGRlY29yYXRlZCBzdWNoIHRoYXQgaXQgZW5mb3JjZXMgdHlwZS1oaW50IGNvbnN0cmFpbnRzCiAgICBmb3IgYWxsIHJldHVybiB2YWx1ZXMuCiAgIiIiCiAgaWYga3dhcmdzOgogICAgcmFpc2UgVmFsdWVFcnJvcigiQWxsIGFyZ3VtZW50cyBmb3IgdGhlICdyZXR1cm5zJyBkZWNvcmF0b3IgbXVzdCBiZSAiCiAgICAgICAgICAgICAgICAgICAgICJwb3NpdGlvbmFsIGFyZ3VtZW50cy4iKQoKICBpZiBsZW4ocmV0dXJuX3R5cGVfaGludCkgIT0gMToKICAgIHJhaXNlIFZhbHVlRXJyb3IoIidyZXR1cm5zJyBhY2NlcHRzIG9ubHkgYSBzaW5nbGUgcG9zaXRpb25hbCBhcmd1bWVudC4gSW4gIgogICAgICAgICAgICAgICAgICAgICAib3JkZXIgdG8gc3BlY2lmeSBtdWx0aXBsZSByZXR1cm4gdHlwZXMsIHVzZSB0aGUgJ1R1cGxlJyAiCiAgICAgICAgICAgICAgICAgICAgICJ0eXBlLWhpbnQuIikKCiAgcmV0dXJuX3R5cGVfaGludCA9IG5hdGl2ZV90eXBlX2NvbXBhdGliaWxpdHkuY29udmVydF90b19iZWFtX3R5cGUoCiAgICAgIHJldHVybl90eXBlX2hpbnRbMF0pCgogIHZhbGlkYXRlX2NvbXBvc2l0ZV90eXBlX3BhcmFtKAogICAgICByZXR1cm5fdHlwZV9oaW50LAogICAgICBlcnJvcl9tc2dfcHJlZml4PSdBbGwgdHlwZSBoaW50IGFyZ3VtZW50cycKICApCgogIGRlZiBhbm5vdGF0ZShmKToKICAgIGdldF90eXBlX2hpbnRzKGYpLnNldF9vdXRwdXRfdHlwZXMocmV0dXJuX3R5cGVfaGludCkKICAgIHJldHVybiBmCgogIHJldHVybiBhbm5vdGF0ZQoKCmRlZiBfY2hlY2tfaW5zdGFuY2VfdHlwZSgKICAgIHR5cGVfY29uc3RyYWludCwgaW5zdGFuY2UsIHZhcl9uYW1lPU5vbmUsIHZlcmJvc2U9RmFsc2UpOgogICIiIkEgaGVscGVyIGZ1bmN0aW9uIHRvIHJlcG9ydCB0eXBlLWhpbnQgY29uc3RyYWludCB2aW9sYXRpb25zLgoKICBBcmdzOgogICAgdHlwZV9jb25zdHJhaW50OiBBbiBpbnN0YW5jZSBvZiBhICdUeXBlQ29uc3RyYWludCcgb3IgYSBidWlsdC1pbiBQeXRob24KICAgICAgdHlwZS4KICAgIGluc3RhbmNlOiBUaGUgY2FuZGlkYXRlIG9iamVjdCB3aGljaCB3aWxsIGJlIGNoZWNrZWQgYnkgdG8gc2F0aXNmeQogICAgICAndHlwZV9jb25zdHJhaW50Jy4KICAgIHZhcl9uYW1lOiBJZiAnaW5zdGFuY2UnIGlzIGFuIGFyZ3VtZW50LCB0aGVuIHRoZSBhY3R1YWwgbmFtZSBmb3IgdGhlCiAgICAgIHBhcmFtZXRlciBpbiB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gZGVmaW5pdGlvbi4KCiAgUmFpc2VzOgogICAgVHlwZUNoZWNrRXJyb3I6IElmICdpbnN0YW5jZScgZmFpbHMgdG8gbWVldCB0aGUgdHlwZS1jb25zdHJhaW50IG9mCiAgICAgICd0eXBlX2NvbnN0cmFpbnQnLgogICIiIgogIGhpbnRfdHlwZSA9ICgKICAgICAgImFyZ3VtZW50OiAnJXMnIiAlIHZhcl9uYW1lIGlmIHZhcl9uYW1lIGlzIG5vdCBOb25lIGVsc2UgJ3JldHVybiB0eXBlJykKCiAgdHJ5OgogICAgY2hlY2tfY29uc3RyYWludCh0eXBlX2NvbnN0cmFpbnQsIGluc3RhbmNlKQogIGV4Y2VwdCBTaW1wbGVUeXBlSGludEVycm9yOgogICAgaWYgdmVyYm9zZToKICAgICAgdmVyYm9zZV9pbnN0YW5jZSA9ICclcywgJyAlIGluc3RhbmNlCiAgICBlbHNlOgogICAgICB2ZXJib3NlX2luc3RhbmNlID0gJycKICAgIHJhaXNlIFR5cGVDaGVja0Vycm9yKCdUeXBlLWhpbnQgZm9yICVzIHZpb2xhdGVkLiBFeHBlY3RlZCBhbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAnaW5zdGFuY2Ugb2YgJXMsIGluc3RlYWQgZm91bmQgJXNhbiBpbnN0YW5jZSBvZiAlcy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAlIChoaW50X3R5cGUsIHR5cGVfY29uc3RyYWludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcmJvc2VfaW5zdGFuY2UsIHR5cGUoaW5zdGFuY2UpKSkKICBleGNlcHQgQ29tcG9zaXRlVHlwZUhpbnRFcnJvciBhcyBlOgogICAgcmFpc2UgVHlwZUNoZWNrRXJyb3IoJ1R5cGUtaGludCBmb3IgJXMgdmlvbGF0ZWQ6ICVzJyAlIChoaW50X3R5cGUsIGUpKQoKCmRlZiBfaW50ZXJsZWF2ZV90eXBlX2NoZWNrKHR5cGVfY29uc3RyYWludCwgdmFyX25hbWU9Tm9uZSk6CiAgIiIiTGF6aWx5IHR5cGUtY2hlY2sgdGhlIHR5cGUtaGludCBmb3IgYSBsYXppbHkgZ2VuZXJhdGVkIHNlcXVlbmNlIHR5cGUuCgogIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGFwcGxpZWQgYXMgYSBkZWNvcmF0b3Igb3IgY2FsbGVkIG1hbnVhbGx5IGluIGEgY3VycmllZAogIG1hbm5lcjoKICAgICogQF9pbnRlcmxlYXZlX3R5cGVfY2hlY2soTGlzdFtpbnRdKQogICAgICBkZWYgZ2VuKCk6CiAgICAgICAgeWllbGQgNQoKICAgIG9yCgogICAgICogZ2VuID0gX2ludGVybGVhdmVfdHlwZV9jaGVjayhUdXBsZVtpbnQsIGludF0sICdjb29yZF9nZW4nKShnZW4pCgogIEFzIGEgcmVzdWx0LCBhbGwgdHlwZS1jaGVja2luZyBmb3IgdGhlIHBhc3NlZCBnZW5lcmF0b3Igd2lsbCBvY2N1ciBhdCAneWllbGQnCiAgdGltZS4gVGhpcyB3YXksIHdlIGF2b2lkIGhhdmluZyB0byBkZXBsZWF0IHRoZSBnZW5lcmF0b3IgaW4gb3JkZXIgdG8KICB0eXBlLWNoZWNrIGl0LgoKICBBcmdzOgogICAgdHlwZV9jb25zdHJhaW50OiBBbiBpbnN0YW5jZSBvZiBhIFR5cGVDb25zdHJhaW50LiBUaGUgb3V0cHV0IHlpZWxkZWQgb2YKICAgICAgJ2dlbicgd2lsbCBiZSB0eXBlLWNoZWNrZWQgYWNjb3JkaW5nIHRvIHRoaXMgdHlwZSBjb25zdHJhaW50LgogICAgdmFyX25hbWU6IFRoZSB2YXJpYWJsZSBuYW1lIGJpbmRlZCB0byAnZ2VuJyBpZiB0eXBlLWNoZWNraW5nIGEgZnVuY3Rpb24KICAgICAgYXJndW1lbnQuIFVzZWQgc29sZWx5IGZvciB0ZW1wbGF0aW5nIGluIGVycm9yIG1lc3NhZ2UgZ2VuZXJhdGlvbi4KCiAgUmV0dXJuczoKICAgIEEgZnVuY3Rpb24gd2hpY2ggdGFrZXMgYSBnZW5lcmF0b3IgYXMgYW4gYXJndW1lbnQgYW5kIHJldHVybnMgYSB3cmFwcGVkCiAgICB2ZXJzaW9uIG9mIHRoZSBnZW5lcmF0b3IgdGhhdCBpbnRlcmxlYXZlcyB0eXBlLWNoZWNraW5nIGF0ICd5aWVsZCcKICAgIGl0ZXJhdGlvbi4gSWYgdGhlIGdlbmVyYXRvciByZWNlaXZlZCBpcyBhbHJlYWR5IHdyYXBwZWQsIHRoZW4gaXQgaXMgc2ltcGx5CiAgICByZXR1cm5lZCB0byBhdm9pZCBuZXN0ZWQgd3JhcHBpbmcuCiAgIiIiCiAgZGVmIHdyYXBwZXIoZ2VuKToKICAgIGlmIGlzaW5zdGFuY2UoZ2VuLCBHZW5lcmF0b3JXcmFwcGVyKToKICAgICAgcmV0dXJuIGdlbgogICAgcmV0dXJuIEdlbmVyYXRvcldyYXBwZXIoCiAgICAgICAgZ2VuLAogICAgICAgIGxhbWJkYSB4OiBfY2hlY2tfaW5zdGFuY2VfdHlwZSh0eXBlX2NvbnN0cmFpbnQsIHgsIHZhcl9uYW1lKQogICAgKQogIHJldHVybiB3cmFwcGVyCgoKY2xhc3MgR2VuZXJhdG9yV3JhcHBlcihvYmplY3QpOgogICIiIkEgd3JhcHBlciBhcm91bmQgYSBnZW5lcmF0b3IsIGFsbG93cyBleGVjdXRpb24gb2YgYSBjYWxsYmFjayBwZXIgeWllbGQuCgogIEFkZGl0aW9uYWxseSwgd3JhcHBpbmcgYSBnZW5lcmF0b3Igd2l0aCB0aGlzIGNsYXNzIGFsbG93cyBvbmUgdG8gYXNzaWduCiAgYXJiaXRhcnkgYXR0cmlidXRlcyB0byBhIGdlbmVyYXRvciBvYmplY3QganVzdCBhcyB3aXRoIGEgZnVuY3Rpb24gb2JqZWN0LgoKICBBdHRyaWJ1dGVzOgogICAgaW50ZXJuYWxfZ2VuOiBBIGluc3RhbmNlIG9mIGEgZ2VuZXJhdG9yIG9iamVjdC4gQXMgcGFydCBvZiAnc3RlcCcgb2YgdGhlCiAgICAgIGdlbmVyYXRvciwgdGhlIHlpZWxkZWQgb2JqZWN0IHdpbGwgYmUgcGFzc2VkIHRvICdpbnRlcmxlYXZlX2Z1bmMnLgogICAgaW50ZXJsZWF2ZV9mdW5jOiBBIGNhbGxiYWNrIGFjY2VwdGluZyBhIHNpbmdsZSBhcmd1bWVudC4gVGhpcyBmdW5jdGlvbiB3aWxsCiAgICAgIGJlIGNhbGxlZCB3aXRoIHRoZSByZXN1bHQgb2YgZWFjaCB5aWVsZGVkICdzdGVwJyBpbiB0aGUgaW50ZXJuYWwKICAgICAgZ2VuZXJhdG9yLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgZ2VuLCBpbnRlcmxlYXZlX2Z1bmMpOgogICAgc2VsZi5pbnRlcm5hbF9nZW4gPSBnZW4KICAgIHNlbGYuaW50ZXJsZWF2ZV9mdW5jID0gaW50ZXJsZWF2ZV9mdW5jCgogIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBhdHRyKToKICAgICMgVE9ETyhsYW9sdSk6IE1heSBhbHNvIHdhbnQgdG8gaW50ZXJjZXB0ICdzZW5kJyBpbiB0aGUgZnV0dXJlIGlmIHdlIG1vdmUgdG8KICAgICMgYSBHZW5lcmF0b3JIaW50IHdpdGggMyB0eXBlLXBhcmFtczoKICAgICMgICAqIEdlbmVyYXRvcltzZW5kX3R5cGUsIHJldHVybl90eXBlLCB5aWVsZF90eXBlXQogICAgaWYgYXR0ciA9PSAnX19uZXh0X18nOgogICAgICByZXR1cm4gc2VsZi5fX25leHRfXygpCiAgICBlbGlmIGF0dHIgPT0gJ19faXRlcl9fJzoKICAgICAgcmV0dXJuIHNlbGYuX19pdGVyX18oKQogICAgcmV0dXJuIGdldGF0dHIoc2VsZi5pbnRlcm5hbF9nZW4sIGF0dHIpCgogIGRlZiBfX25leHRfXyhzZWxmKToKICAgIG5leHRfdmFsID0gbmV4dChzZWxmLmludGVybmFsX2dlbikKICAgIHNlbGYuaW50ZXJsZWF2ZV9mdW5jKG5leHRfdmFsKQogICAgcmV0dXJuIG5leHRfdmFsCgogIG5leHQgPSBfX25leHRfXwoKICBkZWYgX19pdGVyX18oc2VsZik6CiAgICB3aGlsZSBUcnVlOgogICAgICB4ID0gbmV4dChzZWxmLmludGVybmFsX2dlbikKICAgICAgc2VsZi5pbnRlcmxlYXZlX2Z1bmMoeCkKICAgICAgeWllbGQgeAp9cs2DAAAoWBoAAAB3aXRoX291dHB1dF90eXBlcy5hbm5vdGF0ZVgDAAAAZGVmTe8BTfIBh1gNAAAAV2l0aFR5cGVIaW50c1gFAAAAY2xhc3NLw0vhh1gOAAAAZ2V0ZnVsbGFyZ3NwZWNYAwAAAGRlZkt7S5WHWBQAAABnZXRjYWxsYXJnc19mb3JoaW50c1gDAAAAZGVmTQcBTTsBh1gQAAAAR2VuZXJhdG9yV3JhcHBlclgFAAAAY2xhc3NNPwJNZwKHWB4AAABfaW50ZXJsZWF2ZV90eXBlX2NoZWNrLndyYXBwZXJYAwAAAGRlZk01Ak08AodYHgAAAElPVHlwZUhpbnRzLnNpbXBsZV9vdXRwdXRfdHlwZVgDAAAAZGVmS6lLr4dYGQAAAEdlbmVyYXRvcldyYXBwZXIuX19uZXh0X19YAwAAAGRlZk1bAk1fAodYGQAAAHdpdGhfaW5wdXRfdHlwZXMuYW5ub3RhdGVYAwAAAGRlZk2WAU2gAYdYHAAAAElPVHlwZUhpbnRzLnNldF9vdXRwdXRfdHlwZXNYAwAAAGRlZkumS6iHWB8AAABXaXRoVHlwZUhpbnRzLndpdGhfb3V0cHV0X3R5cGVzWAMAAABkZWZL3kvhh1gUAAAAX2NoZWNrX2luc3RhbmNlX3R5cGVYAwAAAGRlZk32AU0WAodYGQAAAElPVHlwZUhpbnRzLndpdGhfZGVmYXVsdHNYAwAAAGRlZkuzS7qHWBAAAABJT1R5cGVIaW50cy5jb3B5WAMAAABkZWZLsEuyh1gUAAAASU9UeXBlSGludHMuX19ib29sX19YAwAAAGRlZku7S72HWA4AAABUeXBlQ2hlY2tFcnJvclgFAAAAY2xhc3NL40vlh1gLAAAASU9UeXBlSGludHNYBQAAAGNsYXNzS5dLwYdYFAAAAElPVHlwZUhpbnRzLl9fcmVwcl9fWAMAAABkZWZLvkvBh1gWAAAAX2ludGVybGVhdmVfdHlwZV9jaGVja1gDAAAAZGVmTRgCTT0Ch1gQAAAAd2l0aF9pbnB1dF90eXBlc1gDAAAAZGVmTVEBTaEBh1ggAAAAV2l0aFR5cGVIaW50cy5kZWZhdWx0X3R5cGVfaGludHNYAwAAAGRlZkvXS9mHWBkAAABHZW5lcmF0b3JXcmFwcGVyLl9faXRlcl9fWAMAAABkZWZNYgJNZwKHWCcAAABXaXRoVHlwZUhpbnRzLl9nZXRfb3JfY3JlYXRlX3R5cGVfaGludHNYAwAAAGRlZkvKS9GHWBUAAABfcG9zaXRpb25hbF9hcmdfaGludHNYAwAAAGRlZkvnS/KHWB4AAABXaXRoVHlwZUhpbnRzLndpdGhfaW5wdXRfdHlwZXNYAwAAAGRlZkvaS92HWBwAAABHZW5lcmF0b3JXcmFwcGVyLl9fZ2V0YXR0cl9fWAMAAABkZWZNUQJNWgKHWBwAAABfdW5wYWNrX3Bvc2l0aW9uYWxfYXJnX2hpbnRzWAMAAABkZWZL9E0FAYdYFAAAAElPVHlwZUhpbnRzLl9faW5pdF9fWAMAAABkZWZLn0uih1gZAAAAR2VuZXJhdG9yV3JhcHBlci5fX2luaXRfX1gDAAAAZGVmTU0CTVACh1gcAAAAV2l0aFR5cGVIaW50cy5nZXRfdHlwZV9oaW50c1gDAAAAZGVmS9JL1odYGwAAAElPVHlwZUhpbnRzLnNldF9pbnB1dF90eXBlc1gDAAAAZGVmS6NLpYdYEQAAAHdpdGhfb3V0cHV0X3R5cGVzWAMAAABkZWZNowFN9AGHWA4AAABnZXRfdHlwZV9oaW50c1gDAAAAZGVmTT0BTU4Bh1gWAAAAV2l0aFR5cGVIaW50cy5fX2luaXRfX1gDAAAAZGVmS8dLyYd1fXLOgwAAKFgQAAAAd2l0aF9pbnB1dF90eXBlc2opZwAAamSAAABqKWcAAFggAAAAV2l0aFR5cGVIaW50cy5kZWZhdWx0X3R5cGVfaGludHNqKWcAAFgNAAAAV2l0aFR5cGVIaW50c2opZwAAWBwAAABXaXRoVHlwZUhpbnRzLmdldF90eXBlX2hpbnRzailnAABYHgAAAFdpdGhUeXBlSGludHMud2l0aF9pbnB1dF90eXBlc2opZwAAWBEAAAB3aXRoX291dHB1dF90eXBlc2opZwAAWB8AAABXaXRoVHlwZUhpbnRzLndpdGhfb3V0cHV0X3R5cGVzailnAAB1an1pAABYIAAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy5kZWNvcmF0b3Jzcs+DAACFgXLQgwAAfXLRgwAAYnRy0oMAAFUyYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9ydW5uZXIoWIcgAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkEgcnVubmVyIHRoYXQgYWxsb3dzIHJ1bm5pbmcgb2YgQmVhbSBwaXBlbGluZXMgaW50ZXJhY3RpdmVseS4KClRoaXMgbW9kdWxlIGlzIGV4cGVyaW1lbnRhbC4gTm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydApmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KCmltcG9ydCBsb2dnaW5nCgppbXBvcnQgYXBhY2hlX2JlYW0gYXMgYmVhbQpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBydW5uZXJzCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QgaW1wb3J0IGRpcmVjdF9ydW5uZXIKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlIGltcG9ydCBjYWNoZV9tYW5hZ2VyIGFzIGNhY2hlCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZSBpbXBvcnQgcGlwZWxpbmVfYW5hbHl6ZXIKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkgaW1wb3J0IGRpc3BsYXlfbWFuYWdlcgpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheSBpbXBvcnQgcGlwZWxpbmVfZ3JhcGhfcmVuZGVyZXIKCiMgc2l6ZSBvZiBQQ29sbGVjdGlvbiBzYW1wbGVzIGNhY2hlZC4KU0FNUExFX1NJWkUgPSA4CgoKY2xhc3MgSW50ZXJhY3RpdmVSdW5uZXIocnVubmVycy5QaXBlbGluZVJ1bm5lcik6CiAgIiIiQW4gaW50ZXJhY3RpdmUgcnVubmVyIGZvciBCZWFtIFB5dGhvbiBwaXBlbGluZXMuCgogIEFsbG93cyBpbnRlcmFjdGl2ZWx5IGJ1aWxkaW5nIGFuZCBydW5uaW5nIEJlYW0gUHl0aG9uIHBpcGVsaW5lcy4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHVuZGVybHlpbmdfcnVubmVyPU5vbmUsIGNhY2hlX2Rpcj1Ob25lLAogICAgICAgICAgICAgICByZW5kZXJfb3B0aW9uPU5vbmUpOgogICAgIiIiQ29uc3RydWN0b3Igb2YgSW50ZXJhY3RpdmVSdW5uZXIuCgogICAgQXJnczoKICAgICAgdW5kZXJseWluZ19ydW5uZXI6IChydW5uZXIuUGlwZWxpbmVSdW5uZXIpCiAgICAgIGNhY2hlX2RpcjogKHN0cikgdGhlIGRpcmVjdG9yeSB3aGVyZSBQQ29sbGVjdGlvbiBjYWNoZXMgYXJlIGtlcHQKICAgICAgcmVuZGVyX29wdGlvbjogKHN0cikgdGhpcyBwYXJhbWV0ZXIgZGVjaWRlcyBob3cgdGhlIHBpcGVsaW5lIGdyYXBoIGlzCiAgICAgICAgICByZW5kZXJlZC4gU2VlIGRpc3BsYXkucGlwZWxpbmVfZ3JhcGhfcmVuZGVyZXIgZm9yIGF2YWlsYWJsZSBvcHRpb25zLgogICAgIiIiCiAgICBzZWxmLl91bmRlcmx5aW5nX3J1bm5lciA9ICh1bmRlcmx5aW5nX3J1bm5lcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgZGlyZWN0X3J1bm5lci5EaXJlY3RSdW5uZXIoKSkKICAgIHNlbGYuX2NhY2hlX21hbmFnZXIgPSBjYWNoZS5GaWxlQmFzZWRDYWNoZU1hbmFnZXIoY2FjaGVfZGlyKQogICAgc2VsZi5fcmVuZGVyZXIgPSBwaXBlbGluZV9ncmFwaF9yZW5kZXJlci5nZXRfcmVuZGVyZXIocmVuZGVyX29wdGlvbikKICAgIHNlbGYuX2luX3Nlc3Npb24gPSBGYWxzZQoKICBkZWYgc2V0X3JlbmRlcl9vcHRpb24oc2VsZiwgcmVuZGVyX29wdGlvbik6CiAgICAiIiJTZXRzIHRoZSByZW5kZXJpbmcgb3B0aW9uLgoKICAgIEFyZ3M6CiAgICAgIHJlbmRlcl9vcHRpb246IChzdHIpIHRoaXMgcGFyYW1ldGVyIGRlY2lkZXMgaG93IHRoZSBwaXBlbGluZSBncmFwaCBpcwogICAgICAgICAgcmVuZGVyZWQuIFNlZSBkaXNwbGF5LnBpcGVsaW5lX2dyYXBoX3JlbmRlcmVyIGZvciBhdmFpbGFibGUgb3B0aW9ucy4KICAgICIiIgogICAgc2VsZi5fcmVuZGVyZXIgPSBwaXBlbGluZV9ncmFwaF9yZW5kZXJlci5nZXRfcmVuZGVyZXIocmVuZGVyX29wdGlvbikKCiAgZGVmIHN0YXJ0X3Nlc3Npb24oc2VsZik6CiAgICAiIiJTdGFydCB0aGUgc2Vzc2lvbiB0aGF0IGtlZXBzIGJhY2stZW5kIG1hbmFnZXJzIGFuZCB3b3JrZXJzIGFsaXZlLgogICAgIiIiCiAgICBpZiBzZWxmLl9pbl9zZXNzaW9uOgogICAgICByZXR1cm4KCiAgICBlbnRlciA9IGdldGF0dHIoc2VsZi5fdW5kZXJseWluZ19ydW5uZXIsICdfX2VudGVyX18nLCBOb25lKQogICAgaWYgZW50ZXIgaXMgbm90IE5vbmU6CiAgICAgIGxvZ2dpbmcuaW5mbygnU3RhcnRpbmcgc2Vzc2lvbi4nKQogICAgICBzZWxmLl9pbl9zZXNzaW9uID0gVHJ1ZQogICAgICBlbnRlcigpCiAgICBlbHNlOgogICAgICBsb2dnaW5nLmVycm9yKCdLZWVwIGFsaXZlIG5vdCBzdXBwb3J0ZWQuJykKCiAgZGVmIGVuZF9zZXNzaW9uKHNlbGYpOgogICAgIiIiRW5kIHRoZSBzZXNzaW9uIHRoYXQga2VlcHMgYmFja2VuZCBtYW5hZ2VycyBhbmQgd29ya2VycyBhbGl2ZS4KICAgICIiIgogICAgaWYgbm90IHNlbGYuX2luX3Nlc3Npb246CiAgICAgIHJldHVybgoKICAgIGV4aXQgPSBnZXRhdHRyKHNlbGYuX3VuZGVybHlpbmdfcnVubmVyLCAnX19leGl0X18nLCBOb25lKQogICAgaWYgZXhpdCBpcyBub3QgTm9uZToKICAgICAgc2VsZi5faW5fc2Vzc2lvbiA9IEZhbHNlCiAgICAgIGxvZ2dpbmcuaW5mbygnRW5kaW5nIHNlc3Npb24uJykKICAgICAgZXhpdChOb25lLCBOb25lLCBOb25lKQoKICBkZWYgY2xlYW51cChzZWxmKToKICAgIHNlbGYuX2NhY2hlX21hbmFnZXIuY2xlYW51cCgpCgogIGRlZiBhcHBseShzZWxmLCB0cmFuc2Zvcm0sIHB2YWx1ZWlzaCwgb3B0aW9ucyk6CiAgICAjIFRPRE8ocWlueWVsaSwgQkVBTS02NDYpOiBSZW1vdmUgcnVubmVyIGludGVyY2VwdGlvbiBvZiBhcHBseS4KICAgIHJldHVybiBzZWxmLl91bmRlcmx5aW5nX3J1bm5lci5hcHBseSh0cmFuc2Zvcm0sIHB2YWx1ZWlzaCwgb3B0aW9ucykKCiAgZGVmIHJ1bl9waXBlbGluZShzZWxmLCBwaXBlbGluZSwgb3B0aW9ucyk6CiAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAnX2Rlc2lyZWRfY2FjaGVfbGFiZWxzJyk6CiAgICAgIHNlbGYuX2Rlc2lyZWRfY2FjaGVfbGFiZWxzID0gc2V0KCkKCiAgICAjIEludm9rZSBhIHJvdW5kIHRyaXAgdGhyb3VnaCB0aGUgcnVubmVyIEFQSS4gVGhpcyBtYWtlcyBzdXJlIHRoZSBQaXBlbGluZQogICAgIyBwcm90byBpcyBzdGFibGUuCiAgICBwaXBlbGluZSA9IGJlYW0ucGlwZWxpbmUuUGlwZWxpbmUuZnJvbV9ydW5uZXJfYXBpKAogICAgICAgIHBpcGVsaW5lLnRvX3J1bm5lcl9hcGkodXNlX2Zha2VfY29kZXJzPVRydWUpLAogICAgICAgIHBpcGVsaW5lLnJ1bm5lciwKICAgICAgICBvcHRpb25zKQoKICAgICMgU25hcHNob3QgdGhlIHBpcGVsaW5lIGluIGEgcG9ydGFibGUgcHJvdG8gYmVmb3JlIG11dGF0aW5nIGl0LgogICAgcGlwZWxpbmVfcHJvdG8sIG9yaWdpbmFsX2NvbnRleHQgPSBwaXBlbGluZS50b19ydW5uZXJfYXBpKAogICAgICAgIHJldHVybl9jb250ZXh0PVRydWUsIHVzZV9mYWtlX2NvZGVycz1UcnVlKQogICAgcGNvbGxzX3RvX3Bjb2xsX2lkID0gc2VsZi5fcGNvbGxzX3RvX3Bjb2xsX2lkKHBpcGVsaW5lLCBvcmlnaW5hbF9jb250ZXh0KQoKICAgIGFuYWx5emVyID0gcGlwZWxpbmVfYW5hbHl6ZXIuUGlwZWxpbmVBbmFseXplcihzZWxmLl9jYWNoZV9tYW5hZ2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGVsaW5lX3Byb3RvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3VuZGVybHlpbmdfcnVubmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZGVzaXJlZF9jYWNoZV9sYWJlbHMpCiAgICAjIFNob3VsZCBiZSBvbmx5IGFjY2Vzc2VkIGZvciBkZWJ1Z2dpbmcgcHVycG9zZS4KICAgIHNlbGYuX2FuYWx5emVyID0gYW5hbHl6ZXIKCiAgICBwaXBlbGluZV90b19leGVjdXRlID0gYmVhbS5waXBlbGluZS5QaXBlbGluZS5mcm9tX3J1bm5lcl9hcGkoCiAgICAgICAgYW5hbHl6ZXIucGlwZWxpbmVfcHJvdG9fdG9fZXhlY3V0ZSgpLAogICAgICAgIHNlbGYuX3VuZGVybHlpbmdfcnVubmVyLAogICAgICAgIG9wdGlvbnMpCgogICAgZGlzcGxheSA9IGRpc3BsYXlfbWFuYWdlci5EaXNwbGF5TWFuYWdlcigKICAgICAgICBwaXBlbGluZV9wcm90bz1waXBlbGluZV9wcm90bywKICAgICAgICBwaXBlbGluZV9hbmFseXplcj1hbmFseXplciwKICAgICAgICBjYWNoZV9tYW5hZ2VyPXNlbGYuX2NhY2hlX21hbmFnZXIsCiAgICAgICAgcGlwZWxpbmVfZ3JhcGhfcmVuZGVyZXI9c2VsZi5fcmVuZGVyZXIpCiAgICBkaXNwbGF5LnN0YXJ0X3BlcmlvZGljX3VwZGF0ZSgpCiAgICByZXN1bHQgPSBwaXBlbGluZV90b19leGVjdXRlLnJ1bigpCiAgICByZXN1bHQud2FpdF91bnRpbF9maW5pc2goKQogICAgZGlzcGxheS5zdG9wX3BlcmlvZGljX3VwZGF0ZSgpCgogICAgcmV0dXJuIFBpcGVsaW5lUmVzdWx0KHJlc3VsdCwgc2VsZiwgc2VsZi5fYW5hbHl6ZXIucGlwZWxpbmVfaW5mbygpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NhY2hlX21hbmFnZXIsIHBjb2xsc190b19wY29sbF9pZCkKCiAgZGVmIF9wY29sbHNfdG9fcGNvbGxfaWQoc2VsZiwgcGlwZWxpbmUsIG9yaWdpbmFsX2NvbnRleHQpOgogICAgIiIiUmV0dXJucyBhIGRpY3QgbWFwcGluZyBQQ29sbGVjdGlvbnMgc3RyaW5nIHRvIFBDb2xsZWN0aW9uIElEcy4KCiAgICBVc2luZyBhIFBpcGVsaW5lVmlzaXRvciB0byBpdGVyYXRlIG92ZXIgZXZlcnkgbm9kZSBpbiB0aGUgcGlwZWxpbmUsCiAgICByZWNvcmRzIHRoZSBtYXBwaW5nIGZyb20gUENvbGxlY3Rpb25zIHRvIFBDb2xsZWN0aW9ucyBJRHMuIFRoaXMgbWFwcGluZwogICAgd2lsbCBiZSB1c2VkIHRvIHF1ZXJ5IGNhY2hlZCBQQ29sbGVjdGlvbnMuCgogICAgQXJnczoKICAgICAgcGlwZWxpbmU6IChwaXBlbGluZS5QaXBlbGluZSkKICAgICAgb3JpZ2luYWxfY29udGV4dDogKHBpcGVsaW5lX2NvbnRleHQuUGlwZWxpbmVDb250ZXh0KQoKICAgIFJldHVybnM6CiAgICAgIChkaWN0IGZyb20gc3RyIHRvIHN0cikgYSBkaWN0IG1hcHBpbmcgc3RyKHBjb2xsKSB0byBwY29sbF9pZC4KICAgICIiIgogICAgcGNvbGxzX3RvX3Bjb2xsX2lkID0ge30KCiAgICBmcm9tIGFwYWNoZV9iZWFtLnBpcGVsaW5lIGltcG9ydCBQaXBlbGluZVZpc2l0b3IgICMgcHlsaW50OiBkaXNhYmxlPWltcG9ydC1lcnJvcgoKICAgIGNsYXNzIFBDb2xsVmlzaXRvcihQaXBlbGluZVZpc2l0b3IpOiAgIyBweWxpbnQ6IGRpc2FibGU9dXNlZC1iZWZvcmUtYXNzaWdubWVudAogICAgICAiIiIiQSB2aXNpdG9yIHRoYXQgcmVjb3JkcyBpbnB1dCBhbmQgb3V0cHV0IHZhbHVlcyB0byBiZSByZXBsYWNlZC4KCiAgICAgIElucHV0IGFuZCBvdXRwdXQgdmFsdWVzIHRoYXQgc2hvdWxkIGJlIHVwZGF0ZWQgYXJlIHJlY29yZGVkIGluIG1hcHMKICAgICAgaW5wdXRfcmVwbGFjZW1lbnRzIGFuZCBvdXRwdXRfcmVwbGFjZW1lbnRzIHJlc3BlY3RpdmVseS4KCiAgICAgIFdlIGNhbm5vdCB1cGRhdGUgaW5wdXQgYW5kIG91dHB1dCB2YWx1ZXMgd2hpbGUgdmlzaXRpbmcgc2luY2UgdGhhdAogICAgICByZXN1bHRzIGluIHZhbGlkYXRpb24gZXJyb3JzLgogICAgICAiIiIKCiAgICAgIGRlZiBlbnRlcl9jb21wb3NpdGVfdHJhbnNmb3JtKHNlbGYsIHRyYW5zZm9ybV9ub2RlKToKICAgICAgICBzZWxmLnZpc2l0X3RyYW5zZm9ybSh0cmFuc2Zvcm1fbm9kZSkKCiAgICAgIGRlZiB2aXNpdF90cmFuc2Zvcm0oc2VsZiwgdHJhbnNmb3JtX25vZGUpOgogICAgICAgIGZvciBwY29sbCBpbiB0cmFuc2Zvcm1fbm9kZS5vdXRwdXRzLnZhbHVlcygpOgogICAgICAgICAgcGNvbGxzX3RvX3Bjb2xsX2lkW3N0cihwY29sbCldID0gb3JpZ2luYWxfY29udGV4dC5wY29sbGVjdGlvbnMuZ2V0X2lkKAogICAgICAgICAgICAgIHBjb2xsKQoKICAgIHBpcGVsaW5lLnZpc2l0KFBDb2xsVmlzaXRvcigpKQogICAgcmV0dXJuIHBjb2xsc190b19wY29sbF9pZAoKCmNsYXNzIFBpcGVsaW5lUmVzdWx0KGJlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVSZXN1bHQpOgogICIiIlByb3ZpZGVzIGFjY2VzcyB0byBpbmZvcm1hdGlvbiBhYm91dCBhIHBpcGVsaW5lLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgdW5kZXJseWluZ19yZXN1bHQsIHJ1bm5lciwgcGlwZWxpbmVfaW5mbywgY2FjaGVfbWFuYWdlciwKICAgICAgICAgICAgICAgcGNvbGxzX3RvX3Bjb2xsX2lkKToKICAgIHN1cGVyKFBpcGVsaW5lUmVzdWx0LCBzZWxmKS5fX2luaXRfXyh1bmRlcmx5aW5nX3Jlc3VsdC5zdGF0ZSkKICAgIHNlbGYuX3J1bm5lciA9IHJ1bm5lcgogICAgc2VsZi5fcGlwZWxpbmVfaW5mbyA9IHBpcGVsaW5lX2luZm8KICAgIHNlbGYuX2NhY2hlX21hbmFnZXIgPSBjYWNoZV9tYW5hZ2VyCiAgICBzZWxmLl9wY29sbHNfdG9fcGNvbGxfaWQgPSBwY29sbHNfdG9fcGNvbGxfaWQKCiAgZGVmIF9jYWNoZV9sYWJlbChzZWxmLCBwY29sbCk6CiAgICBwY29sbF9pZCA9IHNlbGYuX3Bjb2xsc190b19wY29sbF9pZFtzdHIocGNvbGwpXQogICAgcmV0dXJuIHNlbGYuX3BpcGVsaW5lX2luZm8uY2FjaGVfbGFiZWwocGNvbGxfaWQpCgogIGRlZiB3YWl0X3VudGlsX2ZpbmlzaChzZWxmKToKICAgICMgUGlwZWxpbmVSZXN1bHQgaXMgbm90IGNvbnN0cnVjdGVkIHVudGlsIHBpcGVsaW5lIGV4ZWN1dGlvbiBpcyBmaW5pc2hlZC4KICAgIHJldHVybgoKICBkZWYgZ2V0KHNlbGYsIHBjb2xsKToKICAgIGNhY2hlX2xhYmVsID0gc2VsZi5fY2FjaGVfbGFiZWwocGNvbGwpCiAgICBpZiBzZWxmLl9jYWNoZV9tYW5hZ2VyLmV4aXN0cygnZnVsbCcsIGNhY2hlX2xhYmVsKToKICAgICAgcGNvbGxfbGlzdCwgXyA9IHNlbGYuX2NhY2hlX21hbmFnZXIucmVhZCgnZnVsbCcsIGNhY2hlX2xhYmVsKQogICAgICByZXR1cm4gcGNvbGxfbGlzdAogICAgZWxzZToKICAgICAgc2VsZi5fcnVubmVyLl9kZXNpcmVkX2NhY2hlX2xhYmVscy5hZGQoY2FjaGVfbGFiZWwpICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1BDb2xsZWN0aW9uIG5vdCBhdmFpbGFibGUsIHBsZWFzZSBydW4gdGhlIHBpcGVsaW5lLicpCgogIGRlZiBzYW1wbGUoc2VsZiwgcGNvbGwpOgogICAgY2FjaGVfbGFiZWwgPSBzZWxmLl9jYWNoZV9sYWJlbChwY29sbCkKICAgIGlmIHNlbGYuX2NhY2hlX21hbmFnZXIuZXhpc3RzKCdzYW1wbGUnLCBjYWNoZV9sYWJlbCk6CiAgICAgIHJldHVybiBzZWxmLl9jYWNoZV9tYW5hZ2VyLnJlYWQoJ3NhbXBsZScsIGNhY2hlX2xhYmVsKQogICAgZWxzZToKICAgICAgc2VsZi5fcnVubmVyLl9kZXNpcmVkX2NhY2hlX2xhYmVscy5hZGQoY2FjaGVfbGFiZWwpICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1BDb2xsZWN0aW9uIG5vdCBhdmFpbGFibGUsIHBsZWFzZSBydW4gdGhlIHBpcGVsaW5lLicpCn1y04MAAChYHQAAAEludGVyYWN0aXZlUnVubmVyLmVuZF9zZXNzaW9uWAMAAABkZWZLVkthh1geAAAASW50ZXJhY3RpdmVSdW5uZXIucnVuX3BpcGVsaW5lWAMAAABkZWZLaUuSh1gfAAAASW50ZXJhY3RpdmVSdW5uZXIuc3RhcnRfc2Vzc2lvblgDAAAAZGVmS0hLVYdYGQAAAEludGVyYWN0aXZlUnVubmVyLmNsZWFudXBYAwAAAGRlZktiS2SHWCUAAABJbnRlcmFjdGl2ZVJ1bm5lci5fcGNvbGxzX3RvX3Bjb2xsX2lkWAMAAABkZWZLk0u5h1gaAAAASW50ZXJhY3RpdmVSdW5uZXIuX19pbml0X19YAwAAAGRlZksvSz6HWBcAAABQaXBlbGluZVJlc3VsdC5fX2luaXRfX1gDAAAAZGVmS75LxYdYIAAAAFBpcGVsaW5lUmVzdWx0LndhaXRfdW50aWxfZmluaXNoWAMAAABkZWZLykvNh1gjAAAASW50ZXJhY3RpdmVSdW5uZXIuc2V0X3JlbmRlcl9vcHRpb25YAwAAAGRlZks/S0eHWA4AAABQaXBlbGluZVJlc3VsdFgFAAAAY2xhc3NLu0veh1gSAAAAUGlwZWxpbmVSZXN1bHQuZ2V0WAMAAABkZWZLzkvWh1gVAAAAUGlwZWxpbmVSZXN1bHQuc2FtcGxlWAMAAABkZWZL10veh1gXAAAASW50ZXJhY3RpdmVSdW5uZXIuYXBwbHlYAwAAAGRlZktlS2iHWEwAAABJbnRlcmFjdGl2ZVJ1bm5lci5fcGNvbGxzX3RvX3Bjb2xsX2lkLlBDb2xsVmlzaXRvci5lbnRlcl9jb21wb3NpdGVfdHJhbnNmb3JtWAMAAABkZWZLr0uxh1hCAAAASW50ZXJhY3RpdmVSdW5uZXIuX3Bjb2xsc190b19wY29sbF9pZC5QQ29sbFZpc2l0b3IudmlzaXRfdHJhbnNmb3JtWAMAAABkZWZLsku2h1gyAAAASW50ZXJhY3RpdmVSdW5uZXIuX3Bjb2xsc190b19wY29sbF9pZC5QQ29sbFZpc2l0b3JYBQAAAGNsYXNzS6VLtodYGwAAAFBpcGVsaW5lUmVzdWx0Ll9jYWNoZV9sYWJlbFgDAAAAZGVmS8ZLyYdYEQAAAEludGVyYWN0aXZlUnVubmVyWAUAAABjbGFzc0spS7mHdX1y1IMAAChYHQAAAEludGVyYWN0aXZlUnVubmVyLmVuZF9zZXNzaW9uWDIAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX3J1bm5lcnLVgwAAWB4AAABJbnRlcmFjdGl2ZVJ1bm5lci5ydW5fcGlwZWxpbmVq1YMAAFgfAAAASW50ZXJhY3RpdmVSdW5uZXIuc3RhcnRfc2Vzc2lvbmrVgwAAWBkAAABJbnRlcmFjdGl2ZVJ1bm5lci5jbGVhbnVwatWDAABYIAAAAFBpcGVsaW5lUmVzdWx0LndhaXRfdW50aWxfZmluaXNoatWDAABYIwAAAEludGVyYWN0aXZlUnVubmVyLnNldF9yZW5kZXJfb3B0aW9uatWDAABYDgAAAFBpcGVsaW5lUmVzdWx0atWDAABYEgAAAFBpcGVsaW5lUmVzdWx0LmdldGrVgwAAWBUAAABQaXBlbGluZVJlc3VsdC5zYW1wbGVq1YMAAFgXAAAASW50ZXJhY3RpdmVSdW5uZXIuYXBwbHlq1YMAAFgRAAAASW50ZXJhY3RpdmVSdW5uZXJq1YMAAHVqfWkAAFgyAAAAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9ydW5uZXJy1oMAAIWBcteDAAB9ctiDAABidHLZgwAAVRthcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWxy2oMAAChYHV8AACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiU2ltcGxlIHV0aWxpdHkgUFRyYW5zZm9ybXMuCiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgoKaW1wb3J0IGNvbGxlY3Rpb25zCmltcG9ydCBjb250ZXh0bGliCmltcG9ydCByYW5kb20KaW1wb3J0IHRpbWUKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0CmZyb20gYnVpbHRpbnMgaW1wb3J0IHJhbmdlCmZyb20gYnVpbHRpbnMgaW1wb3J0IHppcAoKZnJvbSBmdXR1cmUudXRpbHMgaW1wb3J0IGl0ZXJ2YWx1ZXMKCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IHR5cGVoaW50cwpmcm9tIGFwYWNoZV9iZWFtLm1ldHJpY3MgaW1wb3J0IE1ldHJpY3MKZnJvbSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eSBpbXBvcnQgY29tbW9uX3VybnMKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCB3aW5kb3cKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgaW1wb3J0IENvbWJpbmVQZXJLZXkKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgaW1wb3J0IERvRm4KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgaW1wb3J0IEZsYXRNYXAKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgaW1wb3J0IEZsYXR0ZW4KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgaW1wb3J0IEdyb3VwQnlLZXkKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgaW1wb3J0IE1hcApmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSBpbXBvcnQgUGFyRG8KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgaW1wb3J0IFdpbmRvd2luZwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybSBpbXBvcnQgUFRyYW5zZm9ybQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybSBpbXBvcnQgcHRyYW5zZm9ybV9mbgpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlciBpbXBvcnQgQWNjdW11bGF0aW9uTW9kZQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlciBpbXBvcnQgQWZ0ZXJDb3VudApmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93IGltcG9ydCBOb25NZXJnaW5nV2luZG93Rm4KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdyBpbXBvcnQgVGltZXN0YW1wQ29tYmluZXIKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdyBpbXBvcnQgVGltZXN0YW1wZWRWYWx1ZQpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzIGltcG9ydCB3aW5kb3dlZF92YWx1ZQoKX19hbGxfXyA9IFsKICAgICdCYXRjaEVsZW1lbnRzJywKICAgICdDb0dyb3VwQnlLZXknLAogICAgJ0tleXMnLAogICAgJ0t2U3dhcCcsCiAgICAnUmVtb3ZlRHVwbGljYXRlcycsCiAgICAnUmVzaHVmZmxlJywKICAgICdWYWx1ZXMnLAogICAgXQoKSyA9IHR5cGVoaW50cy5UeXBlVmFyaWFibGUoJ0snKQpWID0gdHlwZWhpbnRzLlR5cGVWYXJpYWJsZSgnVicpClQgPSB0eXBlaGludHMuVHlwZVZhcmlhYmxlKCdUJykKCgpjbGFzcyBDb0dyb3VwQnlLZXkoUFRyYW5zZm9ybSk6CiAgIiIiR3JvdXBzIHJlc3VsdHMgYWNyb3NzIHNldmVyYWwgUENvbGxlY3Rpb25zIGJ5IGtleS4KCiAgR2l2ZW4gYW4gaW5wdXQgZGljdCBvZiBzZXJpYWxpemFibGUga2V5cyAoY2FsbGVkICJ0YWdzIikgdG8gMCBvciBtb3JlCiAgUENvbGxlY3Rpb25zIG9mIChrZXksIHZhbHVlKSB0dXBsZXMsIGl0IGNyZWF0ZXMgYSBzaW5nbGUgb3V0cHV0IFBDb2xsZWN0aW9uCiAgb2YgKGtleSwgdmFsdWUpIHR1cGxlcyB3aG9zZSBrZXlzIGFyZSB0aGUgdW5pcXVlIGlucHV0IGtleXMgZnJvbSBhbGwgaW5wdXRzLAogIGFuZCB3aG9zZSB2YWx1ZXMgYXJlIGRpY3RzIG1hcHBpbmcgZWFjaCB0YWcgdG8gYW4gaXRlcmFibGUgb2Ygd2hhdGV2ZXIgdmFsdWVzCiAgd2VyZSB1bmRlciB0aGUga2V5IGluIHRoZSBjb3JyZXNwb25kaW5nIFBDb2xsZWN0aW9uLCBpbiB0aGlzIG1hbm5lcjo6CgogICAgICAoJ3NvbWUga2V5Jywgeyd0YWcxJzogWyd2YWx1ZSAxIHVuZGVyICJzb21lIGtleSIgaW4gcGNvbGwxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmFsdWUgMiB1bmRlciAic29tZSBrZXkiIGluIHBjb2xsMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uXSwKICAgICAgICAgICAgICAgICAgICAndGFnMic6IC4uLiAsCiAgICAgICAgICAgICAgICAgICAgLi4uIH0pCgogIEZvciBleGFtcGxlLCBnaXZlbjoKCiAgICAgIHsndGFnMSc6IHBjMSwgJ3RhZzInOiBwYzIsIDMzMzogcGMzfQoKICB3aGVyZToKICAgICAgcGMxID0gWyhrMSwgdjEpXQogICAgICBwYzIgPSBbXQogICAgICBwYzMgPSBbKGsxLCB2MzEpLCAoazEsIHYzMiksIChrMiwgdjMzKV0KCiAgVGhlIG91dHB1dCBQQ29sbGVjdGlvbiB3b3VsZCBiZToKCiAgICAgIFsoazEsIHsndGFnMSc6IFt2MV0sICd0YWcyJzogW10sIDMzMzogW3YzMSwgdjMyXX0pLAogICAgICAgKGsyLCB7J3RhZzEnOiBbXSwgJ3RhZzInOiBbXSwgMzMzOiBbdjMzXX0pXQoKICBDb0dyb3VwQnlLZXkgYWxzbyB3b3JrcyBmb3IgdHVwbGVzLCBsaXN0cywgb3Igb3RoZXIgZmxhdCBpdGVyYWJsZXMgb2YKICBQQ29sbGVjdGlvbnMsIGluIHdoaWNoIGNhc2UgdGhlIHZhbHVlcyBvZiB0aGUgcmVzdWx0aW5nIFBDb2xsZWN0aW9ucwogIHdpbGwgYmUgdHVwbGVzIHdob3NlIG50aCB2YWx1ZSBpcyB0aGUgbGlzdCBvZiB2YWx1ZXMgZnJvbSB0aGUgbnRoCiAgUENvbGxlY3Rpb24tLS1jb25jZXB0dWFsbHksIHRoZSAidGFncyIgYXJlIHRoZSBpbmRpY2VzIGludG8gdGhlIGlucHV0LgogIFRodXMsIGZvciB0aGlzIGlucHV0OjoKCiAgICAgKHBjMSwgcGMyLCBwYzMpCgogIHRoZSBvdXRwdXQgd291bGQgYmU6OgoKICAgICAgWyhrMSwgKFt2MV0sIFtdLCBbdjMxLCB2MzJdKSwKICAgICAgIChrMiwgKFtdLCBbXSwgW3YzM10pKV0KCiAgQXR0cmlidXRlczoKICAgICoqa3dhcmdzOiBBY2NlcHRzIGEgc2luZ2xlIG5hbWVkIGFyZ3VtZW50ICJwaXBlbGluZSIsIHdoaWNoIHNwZWNpZmllcyB0aGUKICAgICAgcGlwZWxpbmUgdGhhdCAib3ducyIgdGhpcyBQVHJhbnNmb3JtLiBPcmRpbmFyaWx5IENvR3JvdXBCeUtleSBjYW4gb2J0YWluCiAgICAgIHRoaXMgaW5mb3JtYXRpb24gZnJvbSBvbmUgb2YgdGhlIGlucHV0IFBDb2xsZWN0aW9ucywgYnV0IGlmIHRoZXJlIGFyZSBub25lCiAgICAgIChvciBpZiB0aGVyZSdzIGEgY2hhbmNlIHRoZXJlIG1heSBiZSBub25lKSwgdGhpcyBhcmd1bWVudCBpcyB0aGUgb25seSB3YXkKICAgICAgdG8gcHJvdmlkZSBwaXBlbGluZSBpbmZvcm1hdGlvbiwgYW5kIHNob3VsZCBiZSBjb25zaWRlcmVkIG1hbmRhdG9yeS4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsICoqa3dhcmdzKToKICAgIHN1cGVyKENvR3JvdXBCeUtleSwgc2VsZikuX19pbml0X18oKQogICAgc2VsZi5waXBlbGluZSA9IGt3YXJncy5wb3AoJ3BpcGVsaW5lJywgTm9uZSkKICAgIGlmIGt3YXJnczoKICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5leHBlY3RlZCBrZXl3b3JkIGFyZ3VtZW50czogJXMnICUgbGlzdChrd2FyZ3Mua2V5cygpKSkKCiAgZGVmIF9leHRyYWN0X2lucHV0X3B2YWx1ZXMoc2VsZiwgcHZhbHVlaXNoKToKICAgIHRyeToKICAgICAgIyBJZiB0aGlzIHdvcmtzLCBpdCdzIGEgZGljdC4KICAgICAgcmV0dXJuIHB2YWx1ZWlzaCwgdHVwbGUoaXRlcnZhbHVlcyhwdmFsdWVpc2gpKQogICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICBwY29sbHMgPSB0dXBsZShwdmFsdWVpc2gpCiAgICAgIHJldHVybiBwY29sbHMsIHBjb2xscwoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xscyk6CiAgICAiIiJQZXJmb3JtcyBDb0dyb3VwQnlLZXkgb24gYXJndW1lbnQgcGNvbGxzOyBzZWUgY2xhc3MgZG9jc3RyaW5nLiIiIgogICAgIyBGb3IgYXNzb2NpYXRpbmcgdmFsdWVzIGluIEstViBwYWlycyB3aXRoIHRoZSBQQ29sbGVjdGlvbnMgdGhleSBjYW1lIGZyb20uCiAgICBkZWYgX3BhaXJfdGFnX3dpdGhfdmFsdWUoa2V5X3ZhbHVlLCB0YWcpOgogICAgICAoa2V5LCB2YWx1ZSkgPSBrZXlfdmFsdWUKICAgICAgcmV0dXJuIChrZXksICh0YWcsIHZhbHVlKSkKCiAgICAjIENyZWF0ZXMgdGhlIGtleSwgdmFsdWUgcGFpcnMgZm9yIHRoZSBvdXRwdXQgUENvbGxlY3Rpb24uIFZhbHVlcyBhcmUgZWl0aGVyCiAgICAjIGxpc3RzIG9yIGRpY3RzIChwZXIgdGhlIGNsYXNzIGRvY3N0cmluZyksIGluaXRpYWxpemVkIGJ5IHRoZSByZXN1bHQgb2YKICAgICMgcmVzdWx0X2N0b3IocmVzdWx0X2N0b3JfYXJnKS4KICAgIGRlZiBfbWVyZ2VfdGFnZ2VkX3ZhbHNfdW5kZXJfa2V5KGtleV9ncm91cGVkLCByZXN1bHRfY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9jdG9yX2FyZyk6CiAgICAgIChrZXksIGdyb3VwZWQpID0ga2V5X2dyb3VwZWQKICAgICAgcmVzdWx0X3ZhbHVlID0gcmVzdWx0X2N0b3IocmVzdWx0X2N0b3JfYXJnKQogICAgICBmb3IgdGFnLCB2YWx1ZSBpbiBncm91cGVkOgogICAgICAgIHJlc3VsdF92YWx1ZVt0YWddLmFwcGVuZCh2YWx1ZSkKICAgICAgcmV0dXJuIChrZXksIHJlc3VsdF92YWx1ZSkKCiAgICB0cnk6CiAgICAgICMgSWYgcGNvbGxzIGlzIGEgZGljdCwgd2UgdHVybiBpdCBpbnRvICh0YWcsIHBjb2xsKSBwYWlycyBmb3IgdXNlIGluIHRoZQogICAgICAjIGdlbmVyYWwtcHVycG9zZSBjb2RlIGJlbG93LiBUaGUgcmVzdWx0IHZhbHVlIGNvbnN0cnVjdG9yIGNyZWF0ZXMgZGljdHMKICAgICAgIyB3aG9zZSBrZXlzIGFyZSB0aGUgdGFncy4KICAgICAgcmVzdWx0X2N0b3JfYXJnID0gbGlzdChwY29sbHMpCiAgICAgIHJlc3VsdF9jdG9yID0gbGFtYmRhIHRhZ3M6IGRpY3QoKHRhZywgW10pIGZvciB0YWcgaW4gdGFncykKICAgICAgcGNvbGxzID0gcGNvbGxzLml0ZW1zKCkKICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICAgIyBPdGhlcndpc2UsIHBjb2xscyBpcyBhIGxpc3QvdHVwbGUsIHNvIHdlIHR1cm4gaXQgaW50byAoaW5kZXgsIHBjb2xsKQogICAgICAjIHBhaXJzLiBUaGUgcmVzdWx0IHZhbHVlIGNvbnN0cnVjdG9yIG1ha2VzIHR1cGxlcyB3aXRoIGxlbihwY29sbHMpIHNsb3RzLgogICAgICBwY29sbHMgPSBsaXN0KGVudW1lcmF0ZShwY29sbHMpKQogICAgICByZXN1bHRfY3Rvcl9hcmcgPSBsZW4ocGNvbGxzKQogICAgICByZXN1bHRfY3RvciA9IGxhbWJkYSBzaXplOiB0dXBsZShbXSBmb3IgXyBpbiByYW5nZShzaXplKSkKCiAgICAjIENoZWNrIGlucHV0IFBDb2xsZWN0aW9ucyBmb3IgUENvbGxlY3Rpb24tbmVzcywgYW5kIHRoYXQgdGhleSBhbGwgYmVsb25nCiAgICAjIHRvIHRoZSBzYW1lIHBpcGVsaW5lLgogICAgZm9yIF8sIHBjb2xsIGluIHBjb2xsczoKICAgICAgc2VsZi5fY2hlY2tfcGNvbGxlY3Rpb24ocGNvbGwpCiAgICAgIGlmIHNlbGYucGlwZWxpbmU6CiAgICAgICAgYXNzZXJ0IHBjb2xsLnBpcGVsaW5lID09IHNlbGYucGlwZWxpbmUKCiAgICByZXR1cm4gKFtwY29sbCB8ICdwYWlyX3dpdGhfJXMnICUgdGFnID4+IE1hcChfcGFpcl90YWdfd2l0aF92YWx1ZSwgdGFnKQogICAgICAgICAgICAgZm9yIHRhZywgcGNvbGwgaW4gcGNvbGxzXQogICAgICAgICAgICB8IEZsYXR0ZW4ocGlwZWxpbmU9c2VsZi5waXBlbGluZSkKICAgICAgICAgICAgfCBHcm91cEJ5S2V5KCkKICAgICAgICAgICAgfCBNYXAoX21lcmdlX3RhZ2dlZF92YWxzX3VuZGVyX2tleSwgcmVzdWx0X2N0b3IsIHJlc3VsdF9jdG9yX2FyZykpCgoKZGVmIEtleXMobGFiZWw9J0tleXMnKTogICMgcHlsaW50OiBkaXNhYmxlPWludmFsaWQtbmFtZQogICIiIlByb2R1Y2VzIGEgUENvbGxlY3Rpb24gb2YgZmlyc3QgZWxlbWVudHMgb2YgMi10dXBsZXMgaW4gYSBQQ29sbGVjdGlvbi4iIiIKICByZXR1cm4gbGFiZWwgPj4gTWFwKGxhbWJkYSBrX3Y6IGtfdlswXSkKCgpkZWYgVmFsdWVzKGxhYmVsPSdWYWx1ZXMnKTogICMgcHlsaW50OiBkaXNhYmxlPWludmFsaWQtbmFtZQogICIiIlByb2R1Y2VzIGEgUENvbGxlY3Rpb24gb2Ygc2Vjb25kIGVsZW1lbnRzIG9mIDItdHVwbGVzIGluIGEgUENvbGxlY3Rpb24uIiIiCiAgcmV0dXJuIGxhYmVsID4+IE1hcChsYW1iZGEga192MToga192MVsxXSkKCgpkZWYgS3ZTd2FwKGxhYmVsPSdLdlN3YXAnKTogICMgcHlsaW50OiBkaXNhYmxlPWludmFsaWQtbmFtZQogICIiIlByb2R1Y2VzIGEgUENvbGxlY3Rpb24gcmV2ZXJzaW5nIDItdHVwbGVzIGluIGEgUENvbGxlY3Rpb24uIiIiCiAgcmV0dXJuIGxhYmVsID4+IE1hcChsYW1iZGEga192MjogKGtfdjJbMV0sIGtfdjJbMF0pKQoKCkBwdHJhbnNmb3JtX2ZuCmRlZiBSZW1vdmVEdXBsaWNhdGVzKHBjb2xsKTogICMgcHlsaW50OiBkaXNhYmxlPWludmFsaWQtbmFtZQogICIiIlByb2R1Y2VzIGEgUENvbGxlY3Rpb24gY29udGFpbmluZyB0aGUgdW5pcXVlIGVsZW1lbnRzIG9mIGEgUENvbGxlY3Rpb24uIiIiCiAgcmV0dXJuIChwY29sbAogICAgICAgICAgfCAnVG9QYWlycycgPj4gTWFwKGxhbWJkYSB2OiAodiwgTm9uZSkpCiAgICAgICAgICB8ICdHcm91cCcgPj4gQ29tYmluZVBlcktleShsYW1iZGEgdnM6IE5vbmUpCiAgICAgICAgICB8ICdSZW1vdmVEdXBsaWNhdGVzJyA+PiBLZXlzKCkpCgoKY2xhc3MgX0JhdGNoU2l6ZUVzdGltYXRvcihvYmplY3QpOgogICIiIkVzdGltYXRlcyB0aGUgYmVzdCBzaXplIGZvciBiYXRjaGVzIGdpdmVuIGhpc3RvcmljYWwgdGltaW5nLgogICIiIgoKICBfTUFYX0RBVEFfUE9JTlRTID0gMTAwCiAgX01BWF9HUk9XVEhfRkFDVE9SID0gMgoKICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgbWluX2JhdGNoX3NpemU9MSwKICAgICAgICAgICAgICAgbWF4X2JhdGNoX3NpemU9MTAwMCwKICAgICAgICAgICAgICAgdGFyZ2V0X2JhdGNoX292ZXJoZWFkPS4xLAogICAgICAgICAgICAgICB0YXJnZXRfYmF0Y2hfZHVyYXRpb25fc2Vjcz0xLAogICAgICAgICAgICAgICB2YXJpYW5jZT0wLjI1LAogICAgICAgICAgICAgICBjbG9jaz10aW1lLnRpbWUpOgogICAgaWYgbWluX2JhdGNoX3NpemUgPiBtYXhfYmF0Y2hfc2l6ZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigiTWluaW11bSAoJXMpIG11c3Qgbm90IGJlIGdyZWF0ZXIgdGhhbiBtYXhpbXVtICglcykiICUgKAogICAgICAgICAgbWluX2JhdGNoX3NpemUsIG1heF9iYXRjaF9zaXplKSkKICAgIGlmIHRhcmdldF9iYXRjaF9vdmVyaGVhZCBhbmQgbm90IDAgPCB0YXJnZXRfYmF0Y2hfb3ZlcmhlYWQgPD0gMToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigidGFyZ2V0X2JhdGNoX292ZXJoZWFkICglcykgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEiICUgKAogICAgICAgICAgdGFyZ2V0X2JhdGNoX292ZXJoZWFkKSkKICAgIGlmIHRhcmdldF9iYXRjaF9kdXJhdGlvbl9zZWNzIGFuZCB0YXJnZXRfYmF0Y2hfZHVyYXRpb25fc2VjcyA8PSAwOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCJ0YXJnZXRfYmF0Y2hfZHVyYXRpb25fc2VjcyAoJXMpIG11c3QgYmUgcG9zaXRpdmUiICUgKAogICAgICAgICAgdGFyZ2V0X2JhdGNoX2R1cmF0aW9uX3NlY3MpKQogICAgaWYgbm90ICh0YXJnZXRfYmF0Y2hfb3ZlcmhlYWQgb3IgdGFyZ2V0X2JhdGNoX2R1cmF0aW9uX3NlY3MpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCJBdCBsZWFzdCBvbmUgb2YgdGFyZ2V0X2JhdGNoX292ZXJoZWFkIG9yICIKICAgICAgICAgICAgICAgICAgICAgICAidGFyZ2V0X2JhdGNoX2R1cmF0aW9uX3NlY3MgbXVzdCBiZSBwb3NpdGl2ZS4iKQogICAgc2VsZi5fbWluX2JhdGNoX3NpemUgPSBtaW5fYmF0Y2hfc2l6ZQogICAgc2VsZi5fbWF4X2JhdGNoX3NpemUgPSBtYXhfYmF0Y2hfc2l6ZQogICAgc2VsZi5fdGFyZ2V0X2JhdGNoX292ZXJoZWFkID0gdGFyZ2V0X2JhdGNoX292ZXJoZWFkCiAgICBzZWxmLl90YXJnZXRfYmF0Y2hfZHVyYXRpb25fc2VjcyA9IHRhcmdldF9iYXRjaF9kdXJhdGlvbl9zZWNzCiAgICBzZWxmLl92YXJpYW5jZSA9IHZhcmlhbmNlCiAgICBzZWxmLl9jbG9jayA9IGNsb2NrCiAgICBzZWxmLl9kYXRhID0gW10KICAgIHNlbGYuX2lnbm9yZV9uZXh0X3RpbWluZyA9IEZhbHNlCgogICAgc2VsZi5fc2l6ZV9kaXN0cmlidXRpb24gPSBNZXRyaWNzLmRpc3RyaWJ1dGlvbigKICAgICAgICAnQmF0Y2hFbGVtZW50cycsICdiYXRjaF9zaXplJykKICAgIHNlbGYuX3RpbWVfZGlzdHJpYnV0aW9uID0gTWV0cmljcy5kaXN0cmlidXRpb24oCiAgICAgICAgJ0JhdGNoRWxlbWVudHMnLCAnbXNlY19wZXJfYmF0Y2gnKQogICAgIyBCZWFtIGRpc3RyaWJ1dGlvbnMgb25seSBhY2NlcHQgaW50ZWdlciB2YWx1ZXMsIHNvIHdlIHVzZSB0aGlzIHRvCiAgICAjIGFjY3VtdWxhdGUgdW5kZXItcmVwb3J0ZWQgdmFsdWVzIHVudGlsIHRoZXkgYWRkIHVwIHRvIHdob2xlIG1pbGxpc2Vjb25kcy4KICAgICMgKE1pbGxpc2Vjb25kcyBhcmUgY2hvc2VuIGJlY2F1c2UgdGhhdCdzIGNvbnZlbnRpb25hbGx5IHVzZWQgZWxzZXdoZXJlIGluCiAgICAjIHByb2ZpbGluZy1zdHlsZSBjb3VudGVycy4pCiAgICBzZWxmLl9yZW1haW5kZXJfbXNlY3MgPSAwCgogIGRlZiBpZ25vcmVfbmV4dF90aW1pbmcoc2VsZik6CiAgICAiIiJDYWxsIHRvIGluZGljYXRlIHRoZSBuZXh0IHRpbWluZyBzaG91bGQgYmUgaWdub3JlZC4KCiAgICBGb3IgZXhhbXBsZSwgdGhlIGZpcnN0IGVtaXQgb2YgYSBQYXJEbyBvcGVyYXRpb24gaXMga25vd24gdG8gYmUgYW5vbWFsb3VzCiAgICBkdWUgdG8gc2V0dXAgdGhhdCBtYXkgb2NjdXIuCiAgICAiIiIKICAgIHNlbGYuX2lnbm9yZV9uZXh0X3RpbWluZyA9IEZhbHNlCgogIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCiAgZGVmIHJlY29yZF90aW1lKHNlbGYsIGJhdGNoX3NpemUpOgogICAgc3RhcnQgPSBzZWxmLl9jbG9jaygpCiAgICB5aWVsZAogICAgZWxhcHNlZCA9IHNlbGYuX2Nsb2NrKCkgLSBzdGFydAogICAgZWxhcHNlZF9tc2VjID0gMWUzICogZWxhcHNlZCArIHNlbGYuX3JlbWFpbmRlcl9tc2VjcwogICAgc2VsZi5fc2l6ZV9kaXN0cmlidXRpb24udXBkYXRlKGJhdGNoX3NpemUpCiAgICBzZWxmLl90aW1lX2Rpc3RyaWJ1dGlvbi51cGRhdGUoaW50KGVsYXBzZWRfbXNlYykpCiAgICBzZWxmLl9yZW1haW5kZXJfbXNlY3MgPSBlbGFwc2VkX21zZWMgLSBpbnQoZWxhcHNlZF9tc2VjKQogICAgaWYgc2VsZi5faWdub3JlX25leHRfdGltaW5nOgogICAgICBzZWxmLl9pZ25vcmVfbmV4dF90aW1pbmcgPSBGYWxzZQogICAgZWxzZToKICAgICAgc2VsZi5fZGF0YS5hcHBlbmQoKGJhdGNoX3NpemUsIGVsYXBzZWQpKQogICAgICBpZiBsZW4oc2VsZi5fZGF0YSkgPj0gc2VsZi5fTUFYX0RBVEFfUE9JTlRTOgogICAgICAgIHNlbGYuX3RoaW5fZGF0YSgpCgogIGRlZiBfdGhpbl9kYXRhKHNlbGYpOgogICAgIyBNYWtlIHN1cmUgd2UgZG9uJ3QgY2hhbmdlIHRoZSBwYXJpdHkgb2YgbGVuKHNlbGYuX2RhdGEpCiAgICAjIEFzIGl0J3MgdXNlZCBiZWxvdyB0byBhbHRlcm5hdGUgaml0dGVyLgogICAgc2VsZi5fZGF0YS5wb3AocmFuZG9tLnJhbmRyYW5nZShsZW4oc2VsZi5fZGF0YSkgLy8gNCkpCiAgICBzZWxmLl9kYXRhLnBvcChyYW5kb20ucmFuZHJhbmdlKGxlbihzZWxmLl9kYXRhKSAvLyAyKSkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBsaW5lYXJfcmVncmVzc2lvbl9ub19udW1weSh4cywgeXMpOgogICAgIyBMZWFzdCBzcXVhcmVzIGZpdCBmb3IgeSA9IGEgKyBieCBvdmVyIGFsbCBwb2ludHMuCiAgICBuID0gZmxvYXQobGVuKHhzKSkKICAgIHhiYXIgPSBzdW0oeHMpIC8gbgogICAgeWJhciA9IHN1bSh5cykgLyBuCiAgICBpZiB4YmFyID09IDA6CiAgICAgIHJldHVybiB5YmFyLCAwCiAgICBpZiBhbGwoeHNbMF0gPT0geCBmb3IgeCBpbiB4cyk6CiAgICAgICMgU2ltcGx5IHVzZSB0aGUgbWVhbiBpZiBhbGwgdmFsdWVzIGluIHhzIGFyZSBzYW1lLgogICAgICByZXR1cm4gMCwgeWJhciAvIHhiYXIKICAgIGIgPSAoc3VtKFsoeCAtIHhiYXIpICogKHkgLSB5YmFyKSBmb3IgeCwgeSBpbiB6aXAoeHMsIHlzKV0pCiAgICAgICAgIC8gc3VtKFsoeCAtIHhiYXIpKioyIGZvciB4IGluIHhzXSkpCiAgICBhID0geWJhciAtIGIgKiB4YmFyCiAgICByZXR1cm4gYSwgYgoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGxpbmVhcl9yZWdyZXNzaW9uX251bXB5KHhzLCB5cyk6CiAgICAjIHB5bGludDogZGlzYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbgogICAgaW1wb3J0IG51bXB5IGFzIG5wCiAgICBmcm9tIG51bXB5IGltcG9ydCBzdW0KICAgIG4gPSBsZW4oeHMpCiAgICBpZiBhbGwoeHNbMF0gPT0geCBmb3IgeCBpbiB4cyk6CiAgICAgICMgSWYgYWxsIHZhbHVlcyBvZiB4cyBhcmUgc2FtZSB0aGVuIGZhbGxiYWNrIHRvIGxpbmVhcl9yZWdyZXNzaW9uX25vX251bXB5CiAgICAgIHJldHVybiBfQmF0Y2hTaXplRXN0aW1hdG9yLmxpbmVhcl9yZWdyZXNzaW9uX25vX251bXB5KHhzLCB5cykKICAgIHhzID0gbnAuYXNhcnJheSh4cywgZHR5cGU9ZmxvYXQpCiAgICB5cyA9IG5wLmFzYXJyYXkoeXMsIGR0eXBlPWZsb2F0KQoKICAgICMgRmlyc3QgZG8gYSBzaW1wbGUgbGVhc3Qgc3F1YXJlcyBmaXQgZm9yIHkgPSBhICsgYnggb3ZlciBhbGwgcG9pbnRzLgogICAgYiwgYSA9IG5wLnBvbHlmaXQoeHMsIHlzLCAxKQoKICAgIGlmIG4gPCAxMDoKICAgICAgcmV0dXJuIGEsIGIKICAgIGVsc2U6CiAgICAgICMgUmVmaW5lIHRoaXMgYnkgdGhyb3dpbmcgb3V0IG91dGxpZXJzLCBhY2NvcmRpbmcgdG8gQ29vaydzIGRpc3RhbmNlLgogICAgICAjIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Nvb2slMjdzX2Rpc3RhbmNlCiAgICAgIHN1bV94ID0gc3VtKHhzKQogICAgICBzdW1feDIgPSBzdW0oeHMqKjIpCiAgICAgIGVycnMgPSBhICsgYiAqIHhzIC0geXMKICAgICAgczIgPSBzdW0oZXJycyoqMikgLyAobiAtIDIpCiAgICAgIGlmIHMyID09IDA6CiAgICAgICAgIyBJdCdzIGFuIGV4YWN0IGZpdCEKICAgICAgICByZXR1cm4gYSwgYgogICAgICBoID0gKHN1bV94MiAtIDIgKiBzdW1feCAqIHhzICsgbiAqIHhzKioyKSAvIChuICogc3VtX3gyIC0gc3VtX3gqKjIpCiAgICAgIGNvb2tfZHMgPSAwLjUgLyBzMiAqIGVycnMqKjIgKiAoaCAvICgxIC0gaCkqKjIpCgogICAgICAjIFJlLWNvbXB1dGUgdGhlIHJlZ3Jlc3Npb24sIGV4Y2x1ZGluZyB0aG9zZSBwb2ludHMgd2l0aCBDb29rJ3MgZGlzdGFuY2UKICAgICAgIyBncmVhdGVyIHRoYW4gMC41LCBhbmQgd2VpZ2h0aW5nIGJ5IHRoZSBpbnZlcnNlIG9mIHggdG8gZ2l2ZSBhIG1vcmUKICAgICAgIyBzdGFibGUgeS1pbnRlcmNlcHQgKGFzIHNtYWxsIGJhdGNoZXMgaGF2ZSByZWxhdGl2ZWx5IG1vcmUgaW5mb3JtYXRpb24KICAgICAgIyBhYm91dCB0aGUgZml4ZWQgb3ZlcmhlYWQpLgogICAgICB3ZWlnaHQgPSAoY29va19kcyA8PSAwLjUpIC8geHMKICAgICAgYiwgYSA9IG5wLnBvbHlmaXQoeHMsIHlzLCAxLCB3PXdlaWdodCkKICAgICAgcmV0dXJuIGEsIGIKCiAgdHJ5OgogICAgIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KICAgIGltcG9ydCBudW1weSBhcyBucAogICAgbGluZWFyX3JlZ3Jlc3Npb24gPSBsaW5lYXJfcmVncmVzc2lvbl9udW1weQogIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgIGxpbmVhcl9yZWdyZXNzaW9uID0gbGluZWFyX3JlZ3Jlc3Npb25fbm9fbnVtcHkKCiAgZGVmIG5leHRfYmF0Y2hfc2l6ZShzZWxmKToKICAgIGlmIHNlbGYuX21pbl9iYXRjaF9zaXplID09IHNlbGYuX21heF9iYXRjaF9zaXplOgogICAgICByZXR1cm4gc2VsZi5fbWluX2JhdGNoX3NpemUKICAgIGVsaWYgbGVuKHNlbGYuX2RhdGEpIDwgMToKICAgICAgcmV0dXJuIHNlbGYuX21pbl9iYXRjaF9zaXplCiAgICBlbGlmIGxlbihzZWxmLl9kYXRhKSA8IDI6CiAgICAgICMgRm9yY2Ugc29tZSB2YXJpZXR5IHNvIHdlIGhhdmUgZGlzdGluY3QgYmF0Y2ggc2l6ZXMgb24gd2hpY2ggdG8gZG8KICAgICAgIyBsaW5lYXIgcmVncmVzc2lvbiBiZWxvdy4KICAgICAgcmV0dXJuIGludChtYXgoCiAgICAgICAgICBtaW4oc2VsZi5fbWF4X2JhdGNoX3NpemUsCiAgICAgICAgICAgICAgc2VsZi5fbWluX2JhdGNoX3NpemUgKiBzZWxmLl9NQVhfR1JPV1RIX0ZBQ1RPUiksCiAgICAgICAgICBzZWxmLl9taW5fYmF0Y2hfc2l6ZSArIDEpKQoKICAgICMgVGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2Ygbm9pc2UgaW4gdGhlIHRvcCBxdWFudGlsZSwgd2hpY2ggYWxzbwogICAgIyBoYXMgb3V0c2lkZWQgaW5mbHVlbmNlIGluIHRoZSByZWdyZXNzaW9uLiAgSWYgd2UgaGF2ZSBlbm91Z2ggZGF0YSwKICAgICMgU2ltcGx5IGRlY2xhcmUgdGhlIHRvcCAyMCUgdG8gYmUgb3V0bGllcnMuCiAgICB0cmltbWVkX2RhdGEgPSBzb3J0ZWQoc2VsZi5fZGF0YSlbOm1heCgyMCwgbGVuKHNlbGYuX2RhdGEpICogNCAvLyA1KV0KCiAgICAjIExpbmVhciByZWdyZXNzaW9uIGZvciB5ID0gYSArIGJ4LCB3aGVyZSB4IGlzIGJhdGNoIHNpemUgYW5kIHkgaXMgdGltZS4KICAgIHhzLCB5cyA9IHppcCgqdHJpbW1lZF9kYXRhKQogICAgYSwgYiA9IHNlbGYubGluZWFyX3JlZ3Jlc3Npb24oeHMsIHlzKQoKICAgICMgQXZvaWQgbm9uc2Vuc2ljYWwgb3IgZGl2aXNpb24tYnktemVybyBlcnJvcnMgYmVsb3cgZHVlIHRvIG5vaXNlLgogICAgYSA9IG1heChhLCAxZS0xMCkKICAgIGIgPSBtYXgoYiwgMWUtMjApCgogICAgbGFzdF9iYXRjaF9zaXplID0gc2VsZi5fZGF0YVstMV1bMF0KICAgIGNhcCA9IG1pbihsYXN0X2JhdGNoX3NpemUgKiBzZWxmLl9NQVhfR1JPV1RIX0ZBQ1RPUiwgc2VsZi5fbWF4X2JhdGNoX3NpemUpCgogICAgdGFyZ2V0ID0gc2VsZi5fbWF4X2JhdGNoX3NpemUKCiAgICBpZiBzZWxmLl90YXJnZXRfYmF0Y2hfZHVyYXRpb25fc2VjczoKICAgICAgIyBTb2x1dGlvbiB0byBhICsgYip4ID0gc2VsZi5fdGFyZ2V0X2JhdGNoX2R1cmF0aW9uX3NlY3MuCiAgICAgIHRhcmdldCA9IG1pbih0YXJnZXQsIChzZWxmLl90YXJnZXRfYmF0Y2hfZHVyYXRpb25fc2VjcyAtIGEpIC8gYikKCiAgICBpZiBzZWxmLl90YXJnZXRfYmF0Y2hfb3ZlcmhlYWQ6CiAgICAgICMgU29sdXRpb24gdG8gYSAvIChhICsgYip4KSA9IHNlbGYuX3RhcmdldF9iYXRjaF9vdmVyaGVhZC4KICAgICAgdGFyZ2V0ID0gbWluKHRhcmdldCwgKGEgLyBiKSAqICgxIC8gc2VsZi5fdGFyZ2V0X2JhdGNoX292ZXJoZWFkIC0gMSkpCgogICAgIyBBdm9pZCBnZXR0aW5nIHN0dWNrIGF0IGEgc2luZ2xlIGJhdGNoIHNpemUgKGVzcGVjaWFsbHkgdGhlIG1pbmltYWwKICAgICMgYmF0Y2ggc2l6ZSkgd2hpY2ggd291bGQgbm90IGFsbG93IHVzIHRvIGV4dHJhcG9sYXRlIHRvIG90aGVyIGJhdGNoCiAgICAjIHNpemVzLgogICAgIyBKaXR0ZXIgYWx0ZXJuYXRlcyBiZXR3ZWVuIDAgYW5kIDEuCiAgICBqaXR0ZXIgPSBsZW4oc2VsZi5fZGF0YSkgJSAyCiAgICAjIFNtZWFyIG91ciBzYW1wbGVzIGFjcm9zcyBhIHJhbmdlIGNlbnRlcmVkIGF0IHRoZSB0YXJnZXQuCiAgICBpZiBsZW4oc2VsZi5fZGF0YSkgPiAxMDoKICAgICAgdGFyZ2V0ICs9IGludCh0YXJnZXQgKiBzZWxmLl92YXJpYW5jZSAqIDIgKiAocmFuZG9tLnJhbmRvbSgpIC0gLjUpKQoKICAgIHJldHVybiBpbnQobWF4KHNlbGYuX21pbl9iYXRjaF9zaXplICsgaml0dGVyLCBtaW4odGFyZ2V0LCBjYXApKSkKCgpjbGFzcyBfR2xvYmFsV2luZG93c0JhdGNoaW5nRG9GbihEb0ZuKToKICBkZWYgX19pbml0X18oc2VsZiwgYmF0Y2hfc2l6ZV9lc3RpbWF0b3IpOgogICAgc2VsZi5fYmF0Y2hfc2l6ZV9lc3RpbWF0b3IgPSBiYXRjaF9zaXplX2VzdGltYXRvcgoKICBkZWYgc3RhcnRfYnVuZGxlKHNlbGYpOgogICAgc2VsZi5fYmF0Y2ggPSBbXQogICAgc2VsZi5fYmF0Y2hfc2l6ZSA9IHNlbGYuX2JhdGNoX3NpemVfZXN0aW1hdG9yLm5leHRfYmF0Y2hfc2l6ZSgpCiAgICAjIFRoZSBmaXJzdCBlbWl0IG9mdGVuIGludm9sdmVzIG5vbi10cml2aWFsIHNldHVwLgogICAgc2VsZi5fYmF0Y2hfc2l6ZV9lc3RpbWF0b3IuaWdub3JlX25leHRfdGltaW5nKCkKCiAgZGVmIHByb2Nlc3Moc2VsZiwgZWxlbWVudCk6CiAgICBzZWxmLl9iYXRjaC5hcHBlbmQoZWxlbWVudCkKICAgIGlmIGxlbihzZWxmLl9iYXRjaCkgPj0gc2VsZi5fYmF0Y2hfc2l6ZToKICAgICAgd2l0aCBzZWxmLl9iYXRjaF9zaXplX2VzdGltYXRvci5yZWNvcmRfdGltZShzZWxmLl9iYXRjaF9zaXplKToKICAgICAgICB5aWVsZCBzZWxmLl9iYXRjaAogICAgICBzZWxmLl9iYXRjaCA9IFtdCiAgICAgIHNlbGYuX2JhdGNoX3NpemUgPSBzZWxmLl9iYXRjaF9zaXplX2VzdGltYXRvci5uZXh0X2JhdGNoX3NpemUoKQoKICBkZWYgZmluaXNoX2J1bmRsZShzZWxmKToKICAgIGlmIHNlbGYuX2JhdGNoOgogICAgICB3aXRoIHNlbGYuX2JhdGNoX3NpemVfZXN0aW1hdG9yLnJlY29yZF90aW1lKHNlbGYuX2JhdGNoX3NpemUpOgogICAgICAgIHlpZWxkIHdpbmRvdy5HbG9iYWxXaW5kb3dzLndpbmRvd2VkX3ZhbHVlKHNlbGYuX2JhdGNoKQogICAgICBzZWxmLl9iYXRjaCA9IE5vbmUKICAgICAgc2VsZi5fYmF0Y2hfc2l6ZSA9IHNlbGYuX2JhdGNoX3NpemVfZXN0aW1hdG9yLm5leHRfYmF0Y2hfc2l6ZSgpCgoKY2xhc3MgX1dpbmRvd0F3YXJlQmF0Y2hpbmdEb0ZuKERvRm4pOgoKICBfTUFYX0xJVkVfV0lORE9XUyA9IDEwCgogIGRlZiBfX2luaXRfXyhzZWxmLCBiYXRjaF9zaXplX2VzdGltYXRvcik6CiAgICBzZWxmLl9iYXRjaF9zaXplX2VzdGltYXRvciA9IGJhdGNoX3NpemVfZXN0aW1hdG9yCgogIGRlZiBzdGFydF9idW5kbGUoc2VsZik6CiAgICBzZWxmLl9iYXRjaGVzID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QobGlzdCkKICAgIHNlbGYuX2JhdGNoX3NpemUgPSBzZWxmLl9iYXRjaF9zaXplX2VzdGltYXRvci5uZXh0X2JhdGNoX3NpemUoKQogICAgIyBUaGUgZmlyc3QgZW1pdCBvZnRlbiBpbnZvbHZlcyBub24tdHJpdmlhbCBzZXR1cC4KICAgIHNlbGYuX2JhdGNoX3NpemVfZXN0aW1hdG9yLmlnbm9yZV9uZXh0X3RpbWluZygpCgogIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQsIHdpbmRvdz1Eb0ZuLldpbmRvd1BhcmFtKToKICAgIHNlbGYuX2JhdGNoZXNbd2luZG93XS5hcHBlbmQoZWxlbWVudCkKICAgIGlmIGxlbihzZWxmLl9iYXRjaGVzW3dpbmRvd10pID49IHNlbGYuX2JhdGNoX3NpemU6CiAgICAgIHdpdGggc2VsZi5fYmF0Y2hfc2l6ZV9lc3RpbWF0b3IucmVjb3JkX3RpbWUoc2VsZi5fYmF0Y2hfc2l6ZSk6CiAgICAgICAgeWllbGQgd2luZG93ZWRfdmFsdWUuV2luZG93ZWRWYWx1ZSgKICAgICAgICAgICAgc2VsZi5fYmF0Y2hlc1t3aW5kb3ddLCB3aW5kb3cubWF4X3RpbWVzdGFtcCgpLCAod2luZG93LCkpCiAgICAgIGRlbCBzZWxmLl9iYXRjaGVzW3dpbmRvd10KICAgICAgc2VsZi5fYmF0Y2hfc2l6ZSA9IHNlbGYuX2JhdGNoX3NpemVfZXN0aW1hdG9yLm5leHRfYmF0Y2hfc2l6ZSgpCiAgICBlbGlmIGxlbihzZWxmLl9iYXRjaGVzKSA+IHNlbGYuX01BWF9MSVZFX1dJTkRPV1M6CiAgICAgIHdpbmRvdywgXyA9IHNvcnRlZCgKICAgICAgICAgIHNlbGYuX2JhdGNoZXMuaXRlbXMoKSwKICAgICAgICAgIGtleT1sYW1iZGEgd2luZG93X2JhdGNoOiBsZW4od2luZG93X2JhdGNoWzFdKSwKICAgICAgICAgIHJldmVyc2U9VHJ1ZSlbMF0KICAgICAgd2l0aCBzZWxmLl9iYXRjaF9zaXplX2VzdGltYXRvci5yZWNvcmRfdGltZShzZWxmLl9iYXRjaF9zaXplKToKICAgICAgICB5aWVsZCB3aW5kb3dlZF92YWx1ZS5XaW5kb3dlZFZhbHVlKAogICAgICAgICAgICBzZWxmLl9iYXRjaGVzW3dpbmRvd10sIHdpbmRvdy5tYXhfdGltZXN0YW1wKCksICh3aW5kb3csKSkKICAgICAgZGVsIHNlbGYuX2JhdGNoZXNbd2luZG93XQogICAgICBzZWxmLl9iYXRjaF9zaXplID0gc2VsZi5fYmF0Y2hfc2l6ZV9lc3RpbWF0b3IubmV4dF9iYXRjaF9zaXplKCkKCiAgZGVmIGZpbmlzaF9idW5kbGUoc2VsZik6CiAgICBmb3Igd2luZG93LCBiYXRjaCBpbiBzZWxmLl9iYXRjaGVzLml0ZW1zKCk6CiAgICAgIGlmIGJhdGNoOgogICAgICAgIHdpdGggc2VsZi5fYmF0Y2hfc2l6ZV9lc3RpbWF0b3IucmVjb3JkX3RpbWUoc2VsZi5fYmF0Y2hfc2l6ZSk6CiAgICAgICAgICB5aWVsZCB3aW5kb3dlZF92YWx1ZS5XaW5kb3dlZFZhbHVlKAogICAgICAgICAgICAgIGJhdGNoLCB3aW5kb3cubWF4X3RpbWVzdGFtcCgpLCAod2luZG93LCkpCiAgICBzZWxmLl9iYXRjaGVzID0gTm9uZQogICAgc2VsZi5fYmF0Y2hfc2l6ZSA9IHNlbGYuX2JhdGNoX3NpemVfZXN0aW1hdG9yLm5leHRfYmF0Y2hfc2l6ZSgpCgoKQHR5cGVoaW50cy53aXRoX2lucHV0X3R5cGVzKFQpCkB0eXBlaGludHMud2l0aF9vdXRwdXRfdHlwZXModHlwZWhpbnRzLkxpc3RbVF0pCmNsYXNzIEJhdGNoRWxlbWVudHMoUFRyYW5zZm9ybSk6CiAgIiIiQSBUcmFuc2Zvcm0gdGhhdCBiYXRjaGVzIGVsZW1lbnRzIGZvciBhbW9ydGl6ZWQgcHJvY2Vzc2luZy4KCiAgVGhpcyB0cmFuc2Zvcm0gaXMgZGVzaWduZWQgdG8gcHJlY2VkZSBvcGVyYXRpb25zIHdob3NlIHByb2Nlc3NpbmcgY29zdAogIGlzIG9mIHRoZSBmb3JtCgogICAgICB0aW1lID0gZml4ZWRfY29zdCArIG51bV9lbGVtZW50cyAqIHBlcl9lbGVtZW50X2Nvc3QKCiAgd2hlcmUgdGhlIHBlciBlbGVtZW50IGNvc3QgaXMgKG9mdGVuIHNpZ25pZmljYW50bHkpIHNtYWxsZXIgdGhhbiB0aGUgZml4ZWQKICBjb3N0IGFuZCBjb3VsZCBiZSBhbW9ydGl6ZWQgb3ZlciBtdWx0aXBsZSBlbGVtZW50cy4gIEl0IGNvbnN1bWVzIGEgUENvbGxlY3Rpb24KICBvZiBlbGVtZW50IHR5cGUgVCBhbmQgcHJvZHVjZXMgYSBQQ29sbGVjdGlvbiBvZiBlbGVtZW50IHR5cGUgTGlzdFtUXS4KCiAgVGhpcyB0cmFuc2Zvcm0gYXR0ZW1wdHMgdG8gZmluZCB0aGUgYmVzdCBiYXRjaCBzaXplIGJldHdlZW4gdGhlIG1pbmltaW0KICBhbmQgbWF4aW11bSBwYXJhbWV0ZXJzIGJ5IHByb2ZpbGluZyB0aGUgdGltZSB0YWtlbiBieSAoZnVzZWQpIGRvd25zdHJlYW0KICBvcGVyYXRpb25zLiBGb3IgYSBmaXhlZCBiYXRjaCBzaXplLCBzZXQgdGhlIG1pbiBhbmQgbWF4IHRvIGJlIGVxdWFsLgoKICBFbGVtZW50cyBhcmUgYmF0Y2hlZCBwZXItd2luZG93IGFuZCBiYXRjaGVzIGVtaXR0ZWQgaW4gdGhlIHdpbmRvdwogIGNvcnJlc3BvbmRpbmcgdG8gaXRzIGNvbnRlbnRzLgoKICBBcmdzOgogICAgbWluX2JhdGNoX3NpemU6IChvcHRpb25hbCkgdGhlIHNtYWxsZXN0IG51bWJlciBvZiBlbGVtZW50cyBwZXIgYmF0Y2gKICAgIG1heF9iYXRjaF9zaXplOiAob3B0aW9uYWwpIHRoZSBsYXJnZXN0IG51bWJlciBvZiBlbGVtZW50cyBwZXIgYmF0Y2gKICAgIHRhcmdldF9iYXRjaF9vdmVyaGVhZDogKG9wdGlvbmFsKSBhIHRhcmdldCBmb3IgZml4ZWRfY29zdCAvIHRpbWUsCiAgICAgICAgYXMgdXNlZCBpbiB0aGUgZm9ybXVsYSBhYm92ZQogICAgdGFyZ2V0X2JhdGNoX2R1cmF0aW9uX3NlY3M6IChvcHRpb25hbCkgYSB0YXJnZXQgZm9yIHRvdGFsIHRpbWUgcGVyIGJ1bmRsZSwKICAgICAgICBpbiBzZWNvbmRzCiAgICB2YXJpYW5jZTogKG9wdGlvbmFsKSB0aGUgcGVybWl0dGVkIChyZWxhdGl2ZSkgYW1vdW50IG9mIGRldmlhdGlvbiBmcm9tIHRoZQogICAgICAgIChlc3RpbWF0ZWQpIGlkZWFsIGJhdGNoIHNpemUgdXNlZCB0byBwcm9kdWNlIGEgd2lkZXIgYmFzZSBmb3IKICAgICAgICBsaW5lYXIgaW50ZXJwb2xhdGlvbgogICAgY2xvY2s6IChvcHRpb25hbCkgYW4gYWx0ZXJuYXRpdmUgdG8gdGltZS50aW1lIGZvciBtZWFzdXJpbmcgdGhlIGNvc3Qgb2YKICAgICAgICBkb253c3RyZWFtIG9wZXJhdGlvbnMgKG1vc3RseSBmb3IgdGVzdGluZykKICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgIG1pbl9iYXRjaF9zaXplPTEsCiAgICAgICAgICAgICAgIG1heF9iYXRjaF9zaXplPTEwMDAwLAogICAgICAgICAgICAgICB0YXJnZXRfYmF0Y2hfb3ZlcmhlYWQ9LjA1LAogICAgICAgICAgICAgICB0YXJnZXRfYmF0Y2hfZHVyYXRpb25fc2Vjcz0xLAogICAgICAgICAgICAgICB2YXJpYW5jZT0wLjI1LAogICAgICAgICAgICAgICBjbG9jaz10aW1lLnRpbWUpOgogICAgc2VsZi5fYmF0Y2hfc2l6ZV9lc3RpbWF0b3IgPSBfQmF0Y2hTaXplRXN0aW1hdG9yKAogICAgICAgIG1pbl9iYXRjaF9zaXplPW1pbl9iYXRjaF9zaXplLAogICAgICAgIG1heF9iYXRjaF9zaXplPW1heF9iYXRjaF9zaXplLAogICAgICAgIHRhcmdldF9iYXRjaF9vdmVyaGVhZD10YXJnZXRfYmF0Y2hfb3ZlcmhlYWQsCiAgICAgICAgdGFyZ2V0X2JhdGNoX2R1cmF0aW9uX3NlY3M9dGFyZ2V0X2JhdGNoX2R1cmF0aW9uX3NlY3MsCiAgICAgICAgdmFyaWFuY2U9dmFyaWFuY2UsCiAgICAgICAgY2xvY2s9Y2xvY2spCgogIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgaWYgZ2V0YXR0cihwY29sbC5waXBlbGluZS5ydW5uZXIsICdpc19zdHJlYW1pbmcnLCBGYWxzZSk6CiAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoIlJlcXVpcmVzIHN0YXRlZnVsIHByb2Nlc3NpbmcgKEJFQU0tMjY4NykiKQogICAgZWxpZiBwY29sbC53aW5kb3dpbmcuaXNfZGVmYXVsdCgpOgogICAgICAjIFRoaXMgaXMgdGhlIHNhbWUgbG9naWMgYXMgX0dsb2JhbFdpbmRvd3NCYXRjaGluZ0RvRm4sIGJ1dCBvcHRpbWl6ZWQKICAgICAgIyBmb3IgdGhhdCBzaW1wbGVyIGNhc2UuCiAgICAgIHJldHVybiBwY29sbCB8IFBhckRvKF9HbG9iYWxXaW5kb3dzQmF0Y2hpbmdEb0ZuKAogICAgICAgICAgc2VsZi5fYmF0Y2hfc2l6ZV9lc3RpbWF0b3IpKQogICAgZWxzZToKICAgICAgcmV0dXJuIHBjb2xsIHwgUGFyRG8oX1dpbmRvd0F3YXJlQmF0Y2hpbmdEb0ZuKHNlbGYuX2JhdGNoX3NpemVfZXN0aW1hdG9yKSkKCgpjbGFzcyBfSWRlbnRpdHlXaW5kb3dGbihOb25NZXJnaW5nV2luZG93Rm4pOgogICIiIldpbmRvd2luZyBmdW5jdGlvbiB0aGF0IHByZXNlcnZlcyBleGlzdGluZyB3aW5kb3dzLgoKICBUbyBiZSB1c2VkIGludGVybmFsbHkgd2l0aCB0aGUgUmVzaHVmZmxlIHRyYW5zZm9ybS4KICBXaWxsIHJhaXNlIGFuIGV4Y2VwdGlvbiB3aGVuIHVzZWQgYWZ0ZXIgRG9GbnMgdGhhdCByZXR1cm4gVGltZXN0YW1wZWRWYWx1ZQogIGVsZW1lbnRzLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgd2luZG93X2NvZGVyKToKICAgICIiIkNyZWF0ZSBhIG5ldyBXaW5kb3dGbiB3aXRoIGNvbXBhdGlibGUgY29kZXIuCiAgICBUbyBiZSBhcHBsaWVkIHRvIFBDb2xsZWN0aW9ucyB3aXRoIHdpbmRvd3MgdGhhdCBhcmUgY29tcGF0aWJsZSB3aXRoIHRoZQogICAgZ2l2ZW4gY29kZXIuCgogICAgQXJndW1lbnRzOgogICAgICB3aW5kb3dfY29kZXI6IGNvZGVycy5Db2RlciBvYmplY3QgdG8gYmUgdXNlZCBvbiB3aW5kb3dzLgogICAgIiIiCiAgICBzdXBlcihfSWRlbnRpdHlXaW5kb3dGbiwgc2VsZikuX19pbml0X18oKQogICAgaWYgd2luZG93X2NvZGVyIGlzIE5vbmU6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3dpbmRvd19jb2RlciBzaG91bGQgbm90IGJlIE5vbmUnKQogICAgc2VsZi5fd2luZG93X2NvZGVyID0gd2luZG93X2NvZGVyCgogIGRlZiBhc3NpZ24oc2VsZiwgYXNzaWduX2NvbnRleHQpOgogICAgaWYgYXNzaWduX2NvbnRleHQud2luZG93IGlzIE5vbmU6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnYXNzaWduX2NvbnRleHQud2luZG93IHNob3VsZCBub3QgYmUgTm9uZS4gJwogICAgICAgICAgJ1RoaXMgbWlnaHQgYmUgZHVlIHRvIGEgRG9GbiByZXR1cm5pbmcgYSBUaW1lc3RhbXBlZFZhbHVlLicpCiAgICByZXR1cm4gW2Fzc2lnbl9jb250ZXh0LndpbmRvd10KCiAgZGVmIGdldF93aW5kb3dfY29kZXIoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fd2luZG93X2NvZGVyCgoKQHR5cGVoaW50cy53aXRoX2lucHV0X3R5cGVzKHR5cGVoaW50cy5LVltLLCBWXSkKQHR5cGVoaW50cy53aXRoX291dHB1dF90eXBlcyh0eXBlaGludHMuS1ZbSywgVl0pCmNsYXNzIFJlc2h1ZmZsZVBlcktleShQVHJhbnNmb3JtKToKICAiIiJQVHJhbnNmb3JtIHRoYXQgcmV0dXJucyBhIFBDb2xsZWN0aW9uIGVxdWl2YWxlbnQgdG8gaXRzIGlucHV0LAogIGJ1dCBvcGVyYXRpb25hbGx5IHByb3ZpZGVzIHNvbWUgb2YgdGhlIHNpZGUgZWZmZWN0cyBvZiBhIEdyb3VwQnlLZXksCiAgaW4gcGFydGljdWxhciBwcmV2ZW50aW5nIGZ1c2lvbiBvZiB0aGUgc3Vycm91bmRpbmcgdHJhbnNmb3JtcywKICBjaGVja3BvaW50aW5nLCBhbmQgZGVkdXBsaWNhdGlvbiBieSBpZC4KCiAgUmVzaHVmZmxlUGVyS2V5IGlzIGV4cGVyaW1lbnRhbC4gTm8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KICAiIiIKCiAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICB3aW5kb3dpbmdfc2F2ZWQgPSBwY29sbC53aW5kb3dpbmcKICAgIGlmIHdpbmRvd2luZ19zYXZlZC5pc19kZWZhdWx0KCk6CiAgICAgICMgSW4gdGhpcyAoY29tbW9uKSBjYXNlIHdlIGNhbiB1c2UgYSB0cml2aWFsIHRyaWdnZXIgZHJpdmVyCiAgICAgICMgYW5kIGF2b2lkIHRoZSAoZXhwZW5zaXZlKSB3aW5kb3cgcGFyYW0uCiAgICAgIGdsb2JhbGx5X3dpbmRvd2VkID0gd2luZG93Lkdsb2JhbFdpbmRvd3Mud2luZG93ZWRfdmFsdWUoTm9uZSkKICAgICAgd2luZG93X2ZuID0gd2luZG93Lkdsb2JhbFdpbmRvd3MoKQogICAgICBNSU5fVElNRVNUQU1QID0gd2luZG93Lk1JTl9USU1FU1RBTVAKCiAgICAgIGRlZiByZWlmeV90aW1lc3RhbXBzKGVsZW1lbnQsIHRpbWVzdGFtcD1Eb0ZuLlRpbWVzdGFtcFBhcmFtKToKICAgICAgICBrZXksIHZhbHVlID0gZWxlbWVudAogICAgICAgIGlmIHRpbWVzdGFtcCA9PSBNSU5fVElNRVNUQU1QOgogICAgICAgICAgdGltZXN0YW1wID0gTm9uZQogICAgICAgIHJldHVybiBrZXksICh2YWx1ZSwgdGltZXN0YW1wKQoKICAgICAgZGVmIHJlc3RvcmVfdGltZXN0YW1wcyhlbGVtZW50KToKICAgICAgICBrZXksIHZhbHVlcyA9IGVsZW1lbnQKICAgICAgICByZXR1cm4gWwogICAgICAgICAgICBnbG9iYWxseV93aW5kb3dlZC53aXRoX3ZhbHVlKChrZXksIHZhbHVlKSkKICAgICAgICAgICAgaWYgdGltZXN0YW1wIGlzIE5vbmUKICAgICAgICAgICAgZWxzZSB3aW5kb3cuR2xvYmFsV2luZG93cy53aW5kb3dlZF92YWx1ZSgoa2V5LCB2YWx1ZSksIHRpbWVzdGFtcCkKICAgICAgICAgICAgZm9yICh2YWx1ZSwgdGltZXN0YW1wKSBpbiB2YWx1ZXNdCgogICAgZWxzZToKICAgICAgIyBUaGUgbGludGVyIGlzIGNvbmZ1c2VkLgogICAgICAjIGhhc2goMSkgaXMgdXNlZCB0byBmb3JjZSAicnVudGltZSIgc2VsZWN0aW9uIG9mIF9JZGVudGl0eVdpbmRvd0ZuCiAgICAgICMgcHlsaW50OiBkaXNhYmxlPWFic3RyYWN0LWNsYXNzLWluc3RhbnRpYXRlZAogICAgICBjbHMgPSBoYXNoKDEpIGFuZCBfSWRlbnRpdHlXaW5kb3dGbgogICAgICB3aW5kb3dfZm4gPSBjbHMoCiAgICAgICAgICB3aW5kb3dpbmdfc2F2ZWQud2luZG93Zm4uZ2V0X3dpbmRvd19jb2RlcigpKQoKICAgICAgZGVmIHJlaWZ5X3RpbWVzdGFtcHMoZWxlbWVudCwgdGltZXN0YW1wPURvRm4uVGltZXN0YW1wUGFyYW0pOgogICAgICAgIGtleSwgdmFsdWUgPSBlbGVtZW50CiAgICAgICAgcmV0dXJuIGtleSwgVGltZXN0YW1wZWRWYWx1ZSh2YWx1ZSwgdGltZXN0YW1wKQoKICAgICAgZGVmIHJlc3RvcmVfdGltZXN0YW1wcyhlbGVtZW50LCB3aW5kb3c9RG9Gbi5XaW5kb3dQYXJhbSk6CiAgICAgICAgIyBQYXNzIHRoZSBjdXJyZW50IHdpbmRvdyBzaW5jZSBfSWRlbnRpdHlXaW5kb3dGbiB3b3VsZG4ndCBrbm93IGhvdwogICAgICAgICMgdG8gZ2VuZXJhdGUgaXQuCiAgICAgICAga2V5LCB2YWx1ZXMgPSBlbGVtZW50CiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgd2luZG93ZWRfdmFsdWUuV2luZG93ZWRWYWx1ZSgKICAgICAgICAgICAgICAgIChrZXksIHZhbHVlLnZhbHVlKSwgdmFsdWUudGltZXN0YW1wLCBbd2luZG93XSkKICAgICAgICAgICAgZm9yIHZhbHVlIGluIHZhbHVlc10KCiAgICB1bmdyb3VwZWQgPSBwY29sbCB8IE1hcChyZWlmeV90aW1lc3RhbXBzKQogICAgdW5ncm91cGVkLl93aW5kb3dpbmcgPSBXaW5kb3dpbmcoCiAgICAgICAgd2luZG93X2ZuLAogICAgICAgIHRyaWdnZXJmbj1BZnRlckNvdW50KDEpLAogICAgICAgIGFjY3VtdWxhdGlvbl9tb2RlPUFjY3VtdWxhdGlvbk1vZGUuRElTQ0FSRElORywKICAgICAgICB0aW1lc3RhbXBfY29tYmluZXI9VGltZXN0YW1wQ29tYmluZXIuT1VUUFVUX0FUX0VBUkxJRVNUKQogICAgcmVzdWx0ID0gKHVuZ3JvdXBlZAogICAgICAgICAgICAgIHwgR3JvdXBCeUtleSgpCiAgICAgICAgICAgICAgfCBGbGF0TWFwKHJlc3RvcmVfdGltZXN0YW1wcykpCiAgICByZXN1bHQuX3dpbmRvd2luZyA9IHdpbmRvd2luZ19zYXZlZAogICAgcmV0dXJuIHJlc3VsdAoKCkB0eXBlaGludHMud2l0aF9pbnB1dF90eXBlcyhUKQpAdHlwZWhpbnRzLndpdGhfb3V0cHV0X3R5cGVzKFQpCmNsYXNzIFJlc2h1ZmZsZShQVHJhbnNmb3JtKToKICAiIiJQVHJhbnNmb3JtIHRoYXQgcmV0dXJucyBhIFBDb2xsZWN0aW9uIGVxdWl2YWxlbnQgdG8gaXRzIGlucHV0LAogIGJ1dCBvcGVyYXRpb25hbGx5IHByb3ZpZGVzIHNvbWUgb2YgdGhlIHNpZGUgZWZmZWN0cyBvZiBhIEdyb3VwQnlLZXksCiAgaW4gcGFydGljdWxhciBwcmV2ZW50aW5nIGZ1c2lvbiBvZiB0aGUgc3Vycm91bmRpbmcgdHJhbnNmb3JtcywKICBjaGVja3BvaW50aW5nLCBhbmQgZGVkdXBsaWNhdGlvbiBieSBpZC4KCiAgUmVzaHVmZmxlIGFkZHMgYSB0ZW1wb3JhcnkgcmFuZG9tIGtleSB0byBlYWNoIGVsZW1lbnQsIHBlcmZvcm1zIGEKICBSZXNodWZmbGVQZXJLZXksIGFuZCBmaW5hbGx5IHJlbW92ZXMgdGhlIHRlbXBvcmFyeSBrZXkuCgogIFJlc2h1ZmZsZSBpcyBleHBlcmltZW50YWwuIE5vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCiAgIiIiCgogIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgcmV0dXJuIChwY29sbAogICAgICAgICAgICB8ICdBZGRSYW5kb21LZXlzJyA+PiBNYXAobGFtYmRhIHQ6IChyYW5kb20uZ2V0cmFuZGJpdHMoMzIpLCB0KSkKICAgICAgICAgICAgfCBSZXNodWZmbGVQZXJLZXkoKQogICAgICAgICAgICB8ICdSZW1vdmVSYW5kb21LZXlzJyA+PiBNYXAobGFtYmRhIHQ6IHRbMV0pKQoKICBkZWYgdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoc2VsZiwgdW51c2VkX2NvbnRleHQpOgogICAgcmV0dXJuIGNvbW1vbl91cm5zLmNvbXBvc2l0ZXMuUkVTSFVGRkxFLnVybiwgTm9uZQoKICBAUFRyYW5zZm9ybS5yZWdpc3Rlcl91cm4oY29tbW9uX3VybnMuY29tcG9zaXRlcy5SRVNIVUZGTEUudXJuLCBOb25lKQogIGRlZiBmcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHVudXNlZF9wYXJhbWV0ZXIsIHVudXNlZF9jb250ZXh0KToKICAgIHJldHVybiBSZXNodWZmbGUoKQp9ctuDAAAoWCYAAABfV2luZG93QXdhcmVCYXRjaGluZ0RvRm4uZmluaXNoX2J1bmRsZVgDAAAAZGVmTcEBTckBh1gWAAAAUmVzaHVmZmxlUGVyS2V5LmV4cGFuZFgDAAAAZGVmTTQCTWsCh1gfAAAAX0JhdGNoU2l6ZUVzdGltYXRvci5yZWNvcmRfdGltZVgDAAAAZGVmTQEBTRABh1gaAAAAX0lkZW50aXR5V2luZG93Rm4uX19pbml0X19YAwAAAGRlZk0RAk0dAodYIQAAAF9XaW5kb3dBd2FyZUJhdGNoaW5nRG9Gbi5fX2luaXRfX1gDAAAAZGVmTaUBTacBh1gmAAAAX0JhdGNoU2l6ZUVzdGltYXRvci5pZ25vcmVfbmV4dF90aW1pbmdYAwAAAGRlZkv5TQABh1gVAAAAQ29Hcm91cEJ5S2V5Ll9faW5pdF9fWAMAAABkZWZLeEt9h1gPAAAAUmVzaHVmZmxlUGVyS2V5WAUAAABjbGFzc00pAk1rAodYIwAAAF9HbG9iYWxXaW5kb3dzQmF0Y2hpbmdEb0ZuLl9faW5pdF9fWAMAAABkZWZNiAFNigGHWDAAAABDb0dyb3VwQnlLZXkuZXhwYW5kLl9tZXJnZV90YWdnZWRfdmFsc191bmRlcl9rZXlYAwAAAGRlZkuQS5eHWBAAAABSZW1vdmVEdXBsaWNhdGVzWAMAAABkZWZLw0vKh1grAAAAX0JhdGNoU2l6ZUVzdGltYXRvci5saW5lYXJfcmVncmVzc2lvbl9udW1weVgDAAAAZGVmTScBTUwBh1gTAAAAX0JhdGNoU2l6ZUVzdGltYXRvclgFAAAAY2xhc3NLzE2FAYdYDAAAAENvR3JvdXBCeUtleVgFAAAAY2xhc3NLRkuyh1gNAAAAQmF0Y2hFbGVtZW50c1gFAAAAY2xhc3NNywFNBwKHWB4AAABfQmF0Y2hTaXplRXN0aW1hdG9yLl90aGluX2RhdGFYAwAAAGRlZk0RAU0WAYdYJwAAAFJlc2h1ZmZsZVBlcktleS5leHBhbmQucmVpZnlfdGltZXN0YW1wc1gDAAAAZGVmTVMCTVYCh1gjAAAAX0JhdGNoU2l6ZUVzdGltYXRvci5uZXh0X2JhdGNoX3NpemVYAwAAAGRlZk1UAU2FAYdYEQAAAF9JZGVudGl0eVdpbmRvd0ZuWAUAAABjbGFzc00JAk0nAodYKQAAAFJlc2h1ZmZsZVBlcktleS5leHBhbmQucmVzdG9yZV90aW1lc3RhbXBzWAMAAABkZWZNVwJNXwKHWCMAAABDb0dyb3VwQnlLZXkuX2V4dHJhY3RfaW5wdXRfcHZhbHVlc1gDAAAAZGVmS35LhYdYIgAAAF9HbG9iYWxXaW5kb3dzQmF0Y2hpbmdEb0ZuLnByb2Nlc3NYAwAAAGRlZk2RAU2YAYdYBgAAAEt2U3dhcFgDAAAAZGVmS75LwYdYIQAAAFJlc2h1ZmZsZS50b19ydW5uZXJfYXBpX3BhcmFtZXRlclgDAAAAZGVmTYECTYMCh1gUAAAAQmF0Y2hFbGVtZW50cy5leHBhbmRYAwAAAGRlZk39AU0HAodYEwAAAENvR3JvdXBCeUtleS5leHBhbmRYAwAAAGRlZkuGS7KHWCUAAABfV2luZG93QXdhcmVCYXRjaGluZ0RvRm4uc3RhcnRfYnVuZGxlWAMAAABkZWZNqAFNrQGHWBgAAABfSWRlbnRpdHlXaW5kb3dGbi5hc3NpZ25YAwAAAGRlZk0eAk0kAodYKAAAAENvR3JvdXBCeUtleS5leHBhbmQuX3BhaXJfdGFnX3dpdGhfdmFsdWVYAwAAAGRlZkuJS4yHWC4AAABfQmF0Y2hTaXplRXN0aW1hdG9yLmxpbmVhcl9yZWdyZXNzaW9uX25vX251bXB5WAMAAABkZWZNFwFNJgGHWBYAAABCYXRjaEVsZW1lbnRzLl9faW5pdF9fWAMAAABkZWZN7gFN/AGHWBwAAABfQmF0Y2hTaXplRXN0aW1hdG9yLl9faW5pdF9fWAMAAABkZWZL00v4h1gGAAAAVmFsdWVzWAMAAABkZWZLuUu8h1gYAAAAX1dpbmRvd0F3YXJlQmF0Y2hpbmdEb0ZuWAUAAABjbGFzc02hAU3JAYdYIwAAAFJlc2h1ZmZsZS5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyWAMAAABkZWZNhAJNhwKHWAQAAABLZXlzWAMAAABkZWZLtEu3h1gJAAAAUmVzaHVmZmxlWAUAAABjbGFzc01tAk2HAodYEAAAAFJlc2h1ZmZsZS5leHBhbmRYAwAAAGRlZk17Ak2AAodYJwAAAF9HbG9iYWxXaW5kb3dzQmF0Y2hpbmdEb0ZuLnN0YXJ0X2J1bmRsZVgDAAAAZGVmTYsBTZABh1giAAAAX0lkZW50aXR5V2luZG93Rm4uZ2V0X3dpbmRvd19jb2RlclgDAAAAZGVmTSUCTScCh1gaAAAAX0dsb2JhbFdpbmRvd3NCYXRjaGluZ0RvRm5YBQAAAGNsYXNzTYcBTZ8Bh1goAAAAX0dsb2JhbFdpbmRvd3NCYXRjaGluZ0RvRm4uZmluaXNoX2J1bmRsZVgDAAAAZGVmTZkBTZ8Bh1ggAAAAX1dpbmRvd0F3YXJlQmF0Y2hpbmdEb0ZuLnByb2Nlc3NYAwAAAGRlZk2uAU3AAYd1fXLcgwAAKFgMAAAAQ29Hcm91cEJ5S2V5ajprAABYDQAAAEJhdGNoRWxlbWVudHNqOmsAAFgQAAAAUmVzaHVmZmxlLmV4cGFuZGo6awAAWAQAAABLZXlzajprAABYBgAAAEt2U3dhcGo6awAAWCEAAABSZXNodWZmbGUudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJqOmsAAFgUAAAAQmF0Y2hFbGVtZW50cy5leHBhbmRqOmsAAFgGAAAAVmFsdWVzajprAABYIwAAAFJlc2h1ZmZsZS5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyajprAABYEwAAAENvR3JvdXBCeUtleS5leHBhbmRqOmsAAFgJAAAAUmVzaHVmZmxlajprAAB1an1pAABYGwAAAGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbHLdgwAAhYFy3oMAAH1y34MAAGJ0cuCDAABVNWFwYWNoZV9iZWFtLnRvb2xzLmRpc3RyaWJ1dGlvbl9jb3VudGVyX21pY3JvYmVuY2htYXJrKFikCQAAIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoiIiJBIG1pY3JvYmVuY2htYXJrIGZvciBtZWFzdXJpbmcgRGlzdHJpYnV0aW9uQWNjdW11bGF0b3IgcGVyZm9ybWFuY2UKClRoaXMgcnVucyBhIHNlcXVlbmNlIG9mIGRpc3RyaWJ1dGlvbi51cGRhdGUgZm9yIHJhbmRvbSBpbnB1dCB2YWx1ZSB0byBjYWxjdWxhdGUKYXZlcmFnZSB1cGRhdGUgdGltZSBwZXIgaW5wdXQuCkEgdHlwaWNhbCB1cGRhdGUgb3BlcmF0aW9uIHNob3VsZCBydW4gaW50byAwLjYgbWljcm9zZWNvbmRzCgpSdW4gYXMKICBweXRob24gLW0gYXBhY2hlX2JlYW0udG9vbHMuZGlzdHJpYnV0aW9uX2NvdW50ZXJfbWljcm9iZW5jaG1hcmsKIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydApmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KCmltcG9ydCByYW5kb20KaW1wb3J0IHN5cwppbXBvcnQgdGltZQpmcm9tIGJ1aWx0aW5zIGltcG9ydCByYW5nZQoKZnJvbSBhcGFjaGVfYmVhbS50b29scyBpbXBvcnQgdXRpbHMKCgpkZWYgZ2VuZXJhdGVfaW5wdXRfdmFsdWVzKG51bV9pbnB1dCwgbG93ZXJfYm91bmQsIHVwcGVyX2JvdW5kKToKICB2YWx1ZXMgPSBbXQogICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC12YXJpYWJsZQogIGZvciBpIGluIHJhbmdlKG51bV9pbnB1dCk6CiAgICB2YWx1ZXMuYXBwZW5kKHJhbmRvbS5yYW5kaW50KGxvd2VyX2JvdW5kLCB1cHBlcl9ib3VuZCkpCiAgcmV0dXJuIHZhbHVlcwoKCmRlZiBydW5fYmVuY2htYXJrKG51bV9ydW5zPTEwMCwgbnVtX2lucHV0PTEwMDAwLCBzZWVkPXRpbWUudGltZSgpKToKICB0b3RhbF90aW1lID0gMAogIHJhbmRvbS5zZWVkKHNlZWQpCiAgbG93ZXJfYm91bmQgPSAwCiAgdXBwZXJfYm91bmQgPSBzeXMubWF4c2l6ZQogIGlucHV0cyA9IGdlbmVyYXRlX2lucHV0X3ZhbHVlcyhudW1faW5wdXQsIGxvd2VyX2JvdW5kLCB1cHBlcl9ib3VuZCkKICBmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IERhdGFmbG93RGlzdHJpYnV0aW9uQ291bnRlcgogIHByaW50KCJOdW1iZXIgb2YgcnVuczoiLCBudW1fcnVucykKICBwcmludCgiSW5wdXQgc2l6ZToiLCBudW1faW5wdXQpCiAgcHJpbnQoIklucHV0IHNlcXVlbmNlIGZyb20gJWQgdG8gJWQiICUgKGxvd2VyX2JvdW5kLCB1cHBlcl9ib3VuZCkpCiAgcHJpbnQoIlJhbmRvbSBzZWVkOiIsIHNlZWQpCiAgZm9yIGkgaW4gcmFuZ2UobnVtX3J1bnMpOgogICAgY291bnRlciA9IERhdGFmbG93RGlzdHJpYnV0aW9uQ291bnRlcigpCiAgICBzdGFydCA9IHRpbWUudGltZSgpCiAgICBjb3VudGVyLmFkZF9pbnB1dHNfZm9yX3Rlc3QoaW5wdXRzKQogICAgdGltZV9jb3N0ID0gdGltZS50aW1lKCkgLSBzdGFydAogICAgcHJpbnQoIlJ1biAlZDogVG90YWwgdGltZSBjb3N0ICVnIHNlYyIgJSAoaSsxLCB0aW1lX2Nvc3QpKQogICAgdG90YWxfdGltZSArPSB0aW1lX2Nvc3QgLyBudW1faW5wdXQKICBwcmludCgiUGVyIGVsZW1lbnQgdXBkYXRlIHRpbWUgY29zdDoiLCB0b3RhbF90aW1lIC8gbnVtX3J1bnMpCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICB1dGlscy5jaGVja19jb21waWxlZCgKICAgICAgJ2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY3lfZGF0YWZsb3dfZGlzdHJpYnV0aW9uX2NvdW50ZXInKQogIHJ1bl9iZW5jaG1hcmsoKQp9cuGDAAAoWA0AAABydW5fYmVuY2htYXJrWAMAAABkZWZLLktBh1gVAAAAZ2VuZXJhdGVfaW5wdXRfdmFsdWVzWAMAAABkZWZLJkssh3V9cuKDAAAoWA0AAABydW5fYmVuY2htYXJramJfAABYFQAAAGdlbmVyYXRlX2lucHV0X3ZhbHVlc2piXwAAdWp9aQAAWDUAAABhcGFjaGVfYmVhbS50b29scy5kaXN0cmlidXRpb25fY291bnRlcl9taWNyb2JlbmNobWFya3LjgwAAhYFy5IMAAH1y5YMAAGJ0VR5hcGFjaGVfYmVhbS5pby5sb2NhbGZpbGVzeXN0ZW0oWAgpAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKIiIiTG9jYWwgRmlsZSBzeXN0ZW0gaW1wbGVtZW50YXRpb24gZm9yIGFjY2Vzc2luZyBmaWxlcyBvbiBkaXNrLiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBvcwppbXBvcnQgc2h1dGlsCmZyb20gYnVpbHRpbnMgaW1wb3J0IHppcAoKZnJvbSBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtIGltcG9ydCBCZWFtSU9FcnJvcgpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0gaW1wb3J0IENvbXByZXNzZWRGaWxlCmZyb20gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbSBpbXBvcnQgQ29tcHJlc3Npb25UeXBlcwpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0gaW1wb3J0IEZpbGVNZXRhZGF0YQpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0gaW1wb3J0IEZpbGVTeXN0ZW0KCl9fYWxsX18gPSBbJ0xvY2FsRmlsZVN5c3RlbSddCgoKY2xhc3MgTG9jYWxGaWxlU3lzdGVtKEZpbGVTeXN0ZW0pOgogICIiIkEgTG9jYWwgYGBGaWxlU3lzdGVtYGAgaW1wbGVtZW50YXRpb24gZm9yIGFjY2Vzc2luZyBmaWxlcyBvbiBkaXNrLgogICIiIgogIEBjbGFzc21ldGhvZAogIGRlZiBzY2hlbWUoY2xzKToKICAgICIiIlVSSSBzY2hlbWUgZm9yIHRoZSBGaWxlU3lzdGVtCiAgICAiIiIKICAgIHJldHVybiBOb25lCgogIGRlZiBqb2luKHNlbGYsIGJhc2VwYXRoLCAqcGF0aHMpOgogICAgIiIiSm9pbiB0d28gb3IgbW9yZSBwYXRobmFtZSBjb21wb25lbnRzIGZvciB0aGUgZmlsZXN5c3RlbQoKICAgIEFyZ3M6CiAgICAgIGJhc2VwYXRoOiBzdHJpbmcgcGF0aCBvZiB0aGUgZmlyc3QgY29tcG9uZW50IG9mIHRoZSBwYXRoCiAgICAgIHBhdGhzOiBwYXRoIGNvbXBvbmVudHMgdG8gYmUgYWRkZWQKCiAgICBSZXR1cm5zOiBmdWxsIHBhdGggYWZ0ZXIgY29tYmluaW5nIGFsbCB0aGUgcGFzc2VkIGNvbXBvbmVudHMKICAgICIiIgogICAgcmV0dXJuIG9zLnBhdGguam9pbihiYXNlcGF0aCwgKnBhdGhzKQoKICBkZWYgc3BsaXQoc2VsZiwgcGF0aCk6CiAgICAiIiJTcGxpdHMgdGhlIGdpdmVuIHBhdGggaW50byB0d28gcGFydHMuCgogICAgU3BsaXRzIHRoZSBwYXRoIGludG8gYSBwYWlyIChoZWFkLCB0YWlsKSBzdWNoIHRoYXQgdGFpbCBjb250YWlucyB0aGUgbGFzdAogICAgY29tcG9uZW50IG9mIHRoZSBwYXRoIGFuZCBoZWFkIGNvbnRhaW5zIGV2ZXJ5dGhpbmcgdXAgdG8gdGhhdC4KCiAgICBBcmdzOgogICAgICBwYXRoOiBwYXRoIGFzIGEgc3RyaW5nCiAgICBSZXR1cm5zOgogICAgICBhIHBhaXIgb2YgcGF0aCBjb21wb25lbnRzIGFzIHN0cmluZ3MuCiAgICAiIiIKICAgIHJldHVybiBvcy5wYXRoLnNwbGl0KG9zLnBhdGguYWJzcGF0aChwYXRoKSkKCiAgZGVmIG1rZGlycyhzZWxmLCBwYXRoKToKICAgICIiIlJlY3Vyc2l2ZWx5IGNyZWF0ZSBkaXJlY3RvcmllcyBmb3IgdGhlIHByb3ZpZGVkIHBhdGguCgogICAgQXJnczoKICAgICAgcGF0aDogc3RyaW5nIHBhdGggb2YgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgdGhhdCBzaG91bGQgYmUgY3JlYXRlZAoKICAgIFJhaXNlczoKICAgICAgSU9FcnJvciBpZiBsZWFmIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cy4KICAgICIiIgogICAgdHJ5OgogICAgICBvcy5tYWtlZGlycyhwYXRoKQogICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICByYWlzZSBJT0Vycm9yKGVycikKCiAgZGVmIGhhc19kaXJzKHNlbGYpOgogICAgIiIiV2hldGhlciB0aGlzIEZpbGVTeXN0ZW0gc3VwcG9ydHMgZGlyZWN0b3JpZXMuIiIiCiAgICByZXR1cm4gVHJ1ZQoKICBkZWYgX3VybF9kaXJuYW1lKHNlbGYsIHVybF9vcl9wYXRoKToKICAgICIiIlBhc3MgdGhyb3VnaCB0byBvcy5wYXRoLmRpcm5hbWUuCgogICAgVGhpcyB2ZXJzaW9uIHVzZXMgb3MucGF0aCBpbnN0ZWFkIG9mIHBvc2l4cGF0aCB0byBiZSBjb21wYXRpYmxlIHdpdGggdGhlCiAgICBob3N0IE9TLgoKICAgIEFyZ3M6CiAgICAgIHVybF9vcl9wYXRoOiBBIHN0cmluZyBpbiB0aGUgZm9ybSBvZiAvc29tZS9wYXRoLgogICAgIiIiCiAgICByZXR1cm4gb3MucGF0aC5kaXJuYW1lKHVybF9vcl9wYXRoKQoKICBkZWYgX2xpc3Qoc2VsZiwgZGlyX29yX3ByZWZpeCk6CiAgICAiIiJMaXN0IGZpbGVzIGluIGEgbG9jYXRpb24uCgogICAgTGlzdGluZyBpcyBub24tcmVjdXJzaXZlLCBmb3IgZmlsZXN5c3RlbXMgdGhhdCBzdXBwb3J0IGRpcmVjdG9yaWVzLgoKICAgIEFyZ3M6CiAgICAgIGRpcl9vcl9wcmVmaXg6IChzdHJpbmcpIEEgZGlyZWN0b3J5IG9yIGxvY2F0aW9uIHByZWZpeCAoZm9yIGZpbGVzeXN0ZW1zCiAgICAgICAgdGhhdCBkb24ndCBoYXZlIGRpcmVjdG9yaWVzKS4KCiAgICBSZXR1cm5zOgogICAgICBHZW5lcmF0b3Igb2YgYGBGaWxlTWV0YWRhdGFgYCBvYmplY3RzLgoKICAgIFJhaXNlczoKICAgICAgYGBCZWFtSU9FcnJvcmBgIGlmIGxpc3RpbmcgZmFpbHMsIGJ1dCBub3QgaWYgbm8gZmlsZXMgd2VyZSBmb3VuZC4KICAgICIiIgogICAgaWYgbm90IHNlbGYuZXhpc3RzKGRpcl9vcl9wcmVmaXgpOgogICAgICByZXR1cm4KCiAgICBkZWYgbGlzdF9maWxlcyhyb290KToKICAgICAgZm9yIGRpcnBhdGgsIF8sIGZpbGVzIGluIG9zLndhbGsocm9vdCk6CiAgICAgICAgZm9yIGZpbGVuYW1lIGluIGZpbGVzOgogICAgICAgICAgeWllbGQgc2VsZi5qb2luKGRpcnBhdGgsIGZpbGVuYW1lKQoKICAgIHRyeToKICAgICAgZm9yIGYgaW4gbGlzdF9maWxlcyhkaXJfb3JfcHJlZml4KToKICAgICAgICB0cnk6CiAgICAgICAgICB5aWVsZCBGaWxlTWV0YWRhdGEoZiwgb3MucGF0aC5nZXRzaXplKGYpKQogICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgIyBGaWxlcyBtYXkgZGlzYXBwZWFyLCBzdWNoIGFzIHdoZW4gbGlzdGluZyAvdG1wLgogICAgICAgICAgcGFzcwogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOiAgIyBweWxpbnQ6IGRpc2FibGU9YnJvYWQtZXhjZXB0CiAgICAgIHJhaXNlIEJlYW1JT0Vycm9yKCJMaXN0IG9wZXJhdGlvbiBmYWlsZWQiLCB7ZGlyX29yX3ByZWZpeDogZX0pCgogIGRlZiBfcGF0aF9vcGVuKHNlbGYsIHBhdGgsIG1vZGUsIG1pbWVfdHlwZT0nYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywKICAgICAgICAgICAgICAgICBjb21wcmVzc2lvbl90eXBlPUNvbXByZXNzaW9uVHlwZXMuQVVUTyk6CiAgICAiIiJIZWxwZXIgZnVuY3Rpb25zIHRvIG9wZW4gYSBmaWxlIGluIHRoZSBwcm92aWRlZCBtb2RlLgogICAgIiIiCiAgICBjb21wcmVzc2lvbl90eXBlID0gRmlsZVN5c3RlbS5fZ2V0X2NvbXByZXNzaW9uX3R5cGUocGF0aCwgY29tcHJlc3Npb25fdHlwZSkKICAgIHJhd19maWxlID0gb3BlbihwYXRoLCBtb2RlKQogICAgaWYgY29tcHJlc3Npb25fdHlwZSA9PSBDb21wcmVzc2lvblR5cGVzLlVOQ09NUFJFU1NFRDoKICAgICAgcmV0dXJuIHJhd19maWxlCiAgICBlbHNlOgogICAgICByZXR1cm4gQ29tcHJlc3NlZEZpbGUocmF3X2ZpbGUsIGNvbXByZXNzaW9uX3R5cGU9Y29tcHJlc3Npb25fdHlwZSkKCiAgZGVmIGNyZWF0ZShzZWxmLCBwYXRoLCBtaW1lX3R5cGU9J2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsCiAgICAgICAgICAgICBjb21wcmVzc2lvbl90eXBlPUNvbXByZXNzaW9uVHlwZXMuQVVUTyk6CiAgICAiIiJSZXR1cm5zIGEgd3JpdGUgY2hhbm5lbCBmb3IgdGhlIGdpdmVuIGZpbGUgcGF0aC4KCiAgICBBcmdzOgogICAgICBwYXRoOiBzdHJpbmcgcGF0aCBvZiB0aGUgZmlsZSBvYmplY3QgdG8gYmUgd3JpdHRlbiB0byB0aGUgc3lzdGVtCiAgICAgIG1pbWVfdHlwZTogTUlNRSB0eXBlIHRvIHNwZWNpZnkgdGhlIHR5cGUgb2YgY29udGVudCBpbiB0aGUgZmlsZSBvYmplY3QKICAgICAgY29tcHJlc3Npb25fdHlwZTogVHlwZSBvZiBjb21wcmVzc2lvbiB0byBiZSB1c2VkIGZvciB0aGlzIG9iamVjdAoKICAgIFJldHVybnM6IGZpbGUgaGFuZGxlIHdpdGggYSBjbG9zZSBmdW5jdGlvbiBmb3IgdGhlIHVzZXIgdG8gdXNlCiAgICAiIiIKICAgIHJldHVybiBzZWxmLl9wYXRoX29wZW4ocGF0aCwgJ3diJywgbWltZV90eXBlLCBjb21wcmVzc2lvbl90eXBlKQoKICBkZWYgb3BlbihzZWxmLCBwYXRoLCBtaW1lX3R5cGU9J2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsCiAgICAgICAgICAgY29tcHJlc3Npb25fdHlwZT1Db21wcmVzc2lvblR5cGVzLkFVVE8pOgogICAgIiIiUmV0dXJucyBhIHJlYWQgY2hhbm5lbCBmb3IgdGhlIGdpdmVuIGZpbGUgcGF0aC4KCiAgICBBcmdzOgogICAgICBwYXRoOiBzdHJpbmcgcGF0aCBvZiB0aGUgZmlsZSBvYmplY3QgdG8gYmUgd3JpdHRlbiB0byB0aGUgc3lzdGVtCiAgICAgIG1pbWVfdHlwZTogTUlNRSB0eXBlIHRvIHNwZWNpZnkgdGhlIHR5cGUgb2YgY29udGVudCBpbiB0aGUgZmlsZSBvYmplY3QKICAgICAgY29tcHJlc3Npb25fdHlwZTogVHlwZSBvZiBjb21wcmVzc2lvbiB0byBiZSB1c2VkIGZvciB0aGlzIG9iamVjdAoKICAgIFJldHVybnM6IGZpbGUgaGFuZGxlIHdpdGggYSBjbG9zZSBmdW5jdGlvbiBmb3IgdGhlIHVzZXIgdG8gdXNlCiAgICAiIiIKICAgIHJldHVybiBzZWxmLl9wYXRoX29wZW4ocGF0aCwgJ3JiJywgbWltZV90eXBlLCBjb21wcmVzc2lvbl90eXBlKQoKICBkZWYgY29weShzZWxmLCBzb3VyY2VfZmlsZV9uYW1lcywgZGVzdGluYXRpb25fZmlsZV9uYW1lcyk6CiAgICAiIiJSZWN1cnNpdmVseSBjb3B5IHRoZSBmaWxlIHRyZWUgZnJvbSB0aGUgc291cmNlIHRvIHRoZSBkZXN0aW5hdGlvbgoKICAgIEFyZ3M6CiAgICAgIHNvdXJjZV9maWxlX25hbWVzOiBsaXN0IG9mIHNvdXJjZSBmaWxlIG9iamVjdHMgdGhhdCBuZWVkcyB0byBiZSBjb3BpZWQKICAgICAgZGVzdGluYXRpb25fZmlsZV9uYW1lczogbGlzdCBvZiBkZXN0aW5hdGlvbiBvZiB0aGUgbmV3IG9iamVjdAoKICAgIFJhaXNlczoKICAgICAgYGBCZWFtSU9FcnJvcmBgIGlmIGFueSBvZiB0aGUgY29weSBvcGVyYXRpb25zIGZhaWwKICAgICIiIgogICAgZXJyX21zZyA9ICgic291cmNlX2ZpbGVfbmFtZXMgYW5kIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXMgc2hvdWxkICIKICAgICAgICAgICAgICAgImJlIGVxdWFsIGluIGxlbmd0aCIpCiAgICBhc3NlcnQgbGVuKHNvdXJjZV9maWxlX25hbWVzKSA9PSBsZW4oZGVzdGluYXRpb25fZmlsZV9uYW1lcyksIGVycl9tc2cKCiAgICBkZWYgX2NvcHlfcGF0aChzb3VyY2UsIGRlc3RpbmF0aW9uKToKICAgICAgIiIiUmVjdXJzaXZlbHkgY29weSB0aGUgZmlsZSB0cmVlIGZyb20gdGhlIHNvdXJjZSB0byB0aGUgZGVzdGluYXRpb24KICAgICAgIiIiCiAgICAgIHRyeToKICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkZXN0aW5hdGlvbik6CiAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGRlc3RpbmF0aW9uKToKICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShkZXN0aW5hdGlvbikKICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgIG9zLnJlbW92ZShkZXN0aW5hdGlvbikKICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHNvdXJjZSk6CiAgICAgICAgICBzaHV0aWwuY29weXRyZWUoc291cmNlLCBkZXN0aW5hdGlvbikKICAgICAgICBlbHNlOgogICAgICAgICAgc2h1dGlsLmNvcHkyKHNvdXJjZSwgZGVzdGluYXRpb24pCiAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICByYWlzZSBJT0Vycm9yKGVycikKCiAgICBleGNlcHRpb25zID0ge30KICAgIGZvciBzb3VyY2UsIGRlc3RpbmF0aW9uIGluIHppcChzb3VyY2VfZmlsZV9uYW1lcywgZGVzdGluYXRpb25fZmlsZV9uYW1lcyk6CiAgICAgIHRyeToKICAgICAgICBfY29weV9wYXRoKHNvdXJjZSwgZGVzdGluYXRpb24pCiAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZTogICMgcHlsaW50OiBkaXNhYmxlPWJyb2FkLWV4Y2VwdAogICAgICAgIGV4Y2VwdGlvbnNbKHNvdXJjZSwgZGVzdGluYXRpb24pXSA9IGUKCiAgICBpZiBleGNlcHRpb25zOgogICAgICByYWlzZSBCZWFtSU9FcnJvcigiQ29weSBvcGVyYXRpb24gZmFpbGVkIiwgZXhjZXB0aW9ucykKCiAgZGVmIHJlbmFtZShzZWxmLCBzb3VyY2VfZmlsZV9uYW1lcywgZGVzdGluYXRpb25fZmlsZV9uYW1lcyk6CiAgICAiIiJSZW5hbWUgdGhlIGZpbGVzIGF0IHRoZSBzb3VyY2UgbGlzdCB0byB0aGUgZGVzdGluYXRpb24gbGlzdC4KICAgIFNvdXJjZSBhbmQgZGVzdGluYXRpb24gbGlzdHMgc2hvdWxkIGJlIG9mIHRoZSBzYW1lIHNpemUuCgogICAgQXJnczoKICAgICAgc291cmNlX2ZpbGVfbmFtZXM6IExpc3Qgb2YgZmlsZSBwYXRocyB0aGF0IG5lZWQgdG8gYmUgbW92ZWQKICAgICAgZGVzdGluYXRpb25fZmlsZV9uYW1lczogTGlzdCBvZiBkZXN0aW5hdGlvbl9maWxlX25hbWVzIGZvciB0aGUgZmlsZXMKCiAgICBSYWlzZXM6CiAgICAgIGBgQmVhbUlPRXJyb3JgYCBpZiBhbnkgb2YgdGhlIHJlbmFtZSBvcGVyYXRpb25zIGZhaWwKICAgICIiIgogICAgZXJyX21zZyA9ICgic291cmNlX2ZpbGVfbmFtZXMgYW5kIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXMgc2hvdWxkICIKICAgICAgICAgICAgICAgImJlIGVxdWFsIGluIGxlbmd0aCIpCiAgICBhc3NlcnQgbGVuKHNvdXJjZV9maWxlX25hbWVzKSA9PSBsZW4oZGVzdGluYXRpb25fZmlsZV9uYW1lcyksIGVycl9tc2cKCiAgICBkZWYgX3JlbmFtZV9maWxlKHNvdXJjZSwgZGVzdGluYXRpb24pOgogICAgICAiIiJSZW5hbWUgYSBzaW5nbGUgZmlsZSBvYmplY3QiIiIKICAgICAgdHJ5OgogICAgICAgIG9zLnJlbmFtZShzb3VyY2UsIGRlc3RpbmF0aW9uKQogICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgcmFpc2UgSU9FcnJvcihlcnIpCgogICAgZXhjZXB0aW9ucyA9IHt9CiAgICBmb3Igc291cmNlLCBkZXN0aW5hdGlvbiBpbiB6aXAoc291cmNlX2ZpbGVfbmFtZXMsIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXMpOgogICAgICB0cnk6CiAgICAgICAgX3JlbmFtZV9maWxlKHNvdXJjZSwgZGVzdGluYXRpb24pCiAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZTogICMgcHlsaW50OiBkaXNhYmxlPWJyb2FkLWV4Y2VwdAogICAgICAgIGV4Y2VwdGlvbnNbKHNvdXJjZSwgZGVzdGluYXRpb24pXSA9IGUKCiAgICBpZiBleGNlcHRpb25zOgogICAgICByYWlzZSBCZWFtSU9FcnJvcigiUmVuYW1lIG9wZXJhdGlvbiBmYWlsZWQiLCBleGNlcHRpb25zKQoKICBkZWYgZXhpc3RzKHNlbGYsIHBhdGgpOgogICAgIiIiQ2hlY2sgaWYgdGhlIHByb3ZpZGVkIHBhdGggZXhpc3RzIG9uIHRoZSBGaWxlU3lzdGVtLgoKICAgIEFyZ3M6CiAgICAgIHBhdGg6IHN0cmluZyBwYXRoIHRoYXQgbmVlZHMgdG8gYmUgY2hlY2tlZC4KCiAgICBSZXR1cm5zOiBib29sZWFuIGZsYWcgaW5kaWNhdGluZyBpZiBwYXRoIGV4aXN0cwogICAgIiIiCiAgICByZXR1cm4gb3MucGF0aC5leGlzdHMocGF0aCkKCiAgZGVmIHNpemUoc2VsZiwgcGF0aCk6CiAgICAiIiJHZXQgc2l6ZSBvZiBwYXRoIG9uIHRoZSBGaWxlU3lzdGVtLgoKICAgIEFyZ3M6CiAgICAgIHBhdGg6IHN0cmluZyBwYXRoIGluIHF1ZXN0aW9uLgoKICAgIFJldHVybnM6IGludCBzaXplIG9mIHBhdGggYWNjb3JkaW5nIHRvIHRoZSBGaWxlU3lzdGVtLgoKICAgIFJhaXNlczoKICAgICAgYGBCZWFtSU9FcnJvcmBgIGlmIHBhdGggZG9lc24ndCBleGlzdC4KICAgICIiIgogICAgdHJ5OgogICAgICByZXR1cm4gb3MucGF0aC5nZXRzaXplKHBhdGgpCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6ICAjIHB5bGludDogZGlzYWJsZT1icm9hZC1leGNlcHQKICAgICAgcmFpc2UgQmVhbUlPRXJyb3IoIlNpemUgb3BlcmF0aW9uIGZhaWxlZCIsIHtwYXRoOiBlfSkKCiAgZGVmIGxhc3RfdXBkYXRlZChzZWxmLCBwYXRoKToKICAgICIiIkdldCBVTklYIEVwb2NoIHRpbWUgaW4gc2Vjb25kcyBvbiB0aGUgRmlsZVN5c3RlbS4KCiAgICBBcmdzOgogICAgICBwYXRoOiBzdHJpbmcgcGF0aCBvZiBmaWxlLgoKICAgIFJldHVybnM6IGZsb2F0IFVOSVggRXBvY2ggdGltZQoKICAgIFJhaXNlczoKICAgICAgYGBCZWFtSU9FcnJvcmBgIGlmIHBhdGggZG9lc24ndCBleGlzdC4KICAgICIiIgogICAgaWYgbm90IHNlbGYuZXhpc3RzKHBhdGgpOgogICAgICByYWlzZSBCZWFtSU9FcnJvcignUGF0aCBkb2VzIG5vdCBleGlzdDogJXMnICUgcGF0aCkKICAgIHJldHVybiBvcy5wYXRoLmdldG10aW1lKHBhdGgpCgogIGRlZiBjaGVja3N1bShzZWxmLCBwYXRoKToKICAgICIiIkZldGNoIGNoZWNrc3VtIG1ldGFkYXRhIG9mIGEgZmlsZSBvbiB0aGUKICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uRmlsZVN5c3RlbWAuCgogICAgQXJnczoKICAgICAgcGF0aDogc3RyaW5nIHBhdGggb2YgYSBmaWxlLgoKICAgIFJldHVybnM6IHN0cmluZyBjb250YWluaW5nIGZpbGUgc2l6ZS4KCiAgICBSYWlzZXM6CiAgICAgIGBgQmVhbUlPRXJyb3JgYCBpZiBwYXRoIGlzbid0IGEgZmlsZSBvciBkb2Vzbid0IGV4aXN0LgogICAgIiIiCiAgICBpZiBub3Qgc2VsZi5leGlzdHMocGF0aCk6CiAgICAgIHJhaXNlIEJlYW1JT0Vycm9yKCdQYXRoIGRvZXMgbm90IGV4aXN0OiAlcycgJSBwYXRoKQogICAgcmV0dXJuIHN0cihvcy5wYXRoLmdldHNpemUocGF0aCkpCgogIGRlZiBkZWxldGUoc2VsZiwgcGF0aHMpOgogICAgIiIiRGVsZXRlcyBmaWxlcyBvciBkaXJlY3RvcmllcyBhdCB0aGUgcHJvdmlkZWQgcGF0aHMuCiAgICBEaXJlY3RvcmllcyB3aWxsIGJlIGRlbGV0ZWQgcmVjdXJzaXZlbHkuCgogICAgQXJnczoKICAgICAgcGF0aHM6IGxpc3Qgb2YgcGF0aHMgdGhhdCBnaXZlIHRoZSBmaWxlIG9iamVjdHMgdG8gYmUgZGVsZXRlZAoKICAgIFJhaXNlczoKICAgICAgYGBCZWFtSU9FcnJvcmBgIGlmIGFueSBvZiB0aGUgZGVsZXRlIG9wZXJhdGlvbnMgZmFpbAogICAgIiIiCiAgICBkZWYgX2RlbGV0ZV9wYXRoKHBhdGgpOgogICAgICAiIiJSZWN1cnNpdmVseSBkZWxldGUgdGhlIGZpbGUgb3IgZGlyZWN0b3J5IGF0IHRoZSBwcm92aWRlZCBwYXRoLgogICAgICAiIiIKICAgICAgdHJ5OgogICAgICAgIGlmIG9zLnBhdGguaXNkaXIocGF0aCk6CiAgICAgICAgICBzaHV0aWwucm10cmVlKHBhdGgpCiAgICAgICAgZWxzZToKICAgICAgICAgIG9zLnJlbW92ZShwYXRoKQogICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgcmFpc2UgSU9FcnJvcihlcnIpCgogICAgZXhjZXB0aW9ucyA9IHt9CgogICAgZGVmIHRyeV9kZWxldGUocGF0aCk6CiAgICAgIHRyeToKICAgICAgICBfZGVsZXRlX3BhdGgocGF0aCkKICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOiAgIyBweWxpbnQ6IGRpc2FibGU9YnJvYWQtZXhjZXB0CiAgICAgICAgZXhjZXB0aW9uc1twYXRoXSA9IGUKCiAgICBmb3IgbWF0Y2hfcmVzdWx0IGluIHNlbGYubWF0Y2gocGF0aHMpOgogICAgICBtZXRhZGF0YV9saXN0ID0gbWF0Y2hfcmVzdWx0Lm1ldGFkYXRhX2xpc3QKCiAgICAgIGlmIG5vdCBtZXRhZGF0YV9saXN0OgogICAgICAgIGV4Y2VwdGlvbnNbbWF0Y2hfcmVzdWx0LnBhdHRlcm5dID0gXAogICAgICAgICAgSU9FcnJvcignTm8gZmlsZXMgZm91bmQgdG8gZGVsZXRlIHVuZGVyOiAlcycgJSBtYXRjaF9yZXN1bHQucGF0dGVybikKCiAgICAgIGZvciBtZXRhZGF0YSBpbiBtYXRjaF9yZXN1bHQubWV0YWRhdGFfbGlzdDoKICAgICAgICB0cnlfZGVsZXRlKG1ldGFkYXRhLnBhdGgpCgogICAgaWYgZXhjZXB0aW9uczoKICAgICAgcmFpc2UgQmVhbUlPRXJyb3IoIkRlbGV0ZSBvcGVyYXRpb24gZmFpbGVkIiwgZXhjZXB0aW9ucykKfXLmgwAAKFgVAAAATG9jYWxGaWxlU3lzdGVtLnNwbGl0WAMAAABkZWZLNktCh1gWAAAATG9jYWxGaWxlU3lzdGVtLnJlbmFtZVgDAAAAZGVmS85L7YdYGgAAAExvY2FsRmlsZVN5c3RlbS5fcGF0aF9vcGVuWAMAAABkZWZLgUuLh1gcAAAATG9jYWxGaWxlU3lzdGVtLl91cmxfZGlybmFtZVgDAAAAZGVmS1VLX4dYFAAAAExvY2FsRmlsZVN5c3RlbS5qb2luWAMAAABkZWZLK0s1h1gjAAAATG9jYWxGaWxlU3lzdGVtLnJlbmFtZS5fcmVuYW1lX2ZpbGVYAwAAAGRlZkvdS+OHWBYAAABMb2NhbEZpbGVTeXN0ZW0uc2NoZW1lWAMAAABkZWZLJUsqh1gWAAAATG9jYWxGaWxlU3lzdGVtLmNyZWF0ZVgDAAAAZGVmS4xLmIdYGAAAAExvY2FsRmlsZVN5c3RlbS5oYXNfZGlyc1gDAAAAZGVmS1FLVIdYGAAAAExvY2FsRmlsZVN5c3RlbS5jaGVja3N1bVgDAAAAZGVmTRcBTSYBh1ggAAAATG9jYWxGaWxlU3lzdGVtLl9saXN0Lmxpc3RfZmlsZXNYAwAAAGRlZktyS3aHWBYAAABMb2NhbEZpbGVTeXN0ZW0uZXhpc3RzWAMAAABkZWZL7kv3h1gfAAAATG9jYWxGaWxlU3lzdGVtLmNvcHkuX2NvcHlfcGF0aFgDAAAAZGVmS7RLw4dYFgAAAExvY2FsRmlsZVN5c3RlbS5kZWxldGVYAwAAAGRlZk0nAU1QAYdYFAAAAExvY2FsRmlsZVN5c3RlbS5jb3B5WAMAAABkZWZLpkvNh1gjAAAATG9jYWxGaWxlU3lzdGVtLmRlbGV0ZS5fZGVsZXRlX3BhdGhYAwAAAGRlZk0xAU07AYdYIQAAAExvY2FsRmlsZVN5c3RlbS5kZWxldGUudHJ5X2RlbGV0ZVgDAAAAZGVmTT4BTUMBh1gVAAAATG9jYWxGaWxlU3lzdGVtLl9saXN0WAMAAABkZWZLYEuAh1gUAAAATG9jYWxGaWxlU3lzdGVtLm9wZW5YAwAAAGRlZkuZS6WHWBwAAABMb2NhbEZpbGVTeXN0ZW0ubGFzdF91cGRhdGVkWAMAAABkZWZNCAFNFgGHWBYAAABMb2NhbEZpbGVTeXN0ZW0ubWtkaXJzWAMAAABkZWZLQ0tQh1gPAAAATG9jYWxGaWxlU3lzdGVtWAUAAABjbGFzc0siTVABh1gUAAAATG9jYWxGaWxlU3lzdGVtLnNpemVYAwAAAGRlZkv4TQcBh3V9cueDAAAoWBUAAABMb2NhbEZpbGVTeXN0ZW0uc3BsaXRq0WoAAFgWAAAATG9jYWxGaWxlU3lzdGVtLnJlbmFtZWrRagAAWBgAAABMb2NhbEZpbGVTeXN0ZW0uaGFzX2RpcnNq0WoAAFgUAAAATG9jYWxGaWxlU3lzdGVtLm9wZW5q0WoAAFgYAAAATG9jYWxGaWxlU3lzdGVtLmNoZWNrc3VtatFqAABYHAAAAExvY2FsRmlsZVN5c3RlbS5sYXN0X3VwZGF0ZWRq0WoAAFgUAAAATG9jYWxGaWxlU3lzdGVtLmpvaW5q0WoAAFgPAAAATG9jYWxGaWxlU3lzdGVtatFqAABYFgAAAExvY2FsRmlsZVN5c3RlbS5leGlzdHNq0WoAAFgWAAAATG9jYWxGaWxlU3lzdGVtLm1rZGlyc2rRagAAWBQAAABMb2NhbEZpbGVTeXN0ZW0uc2l6ZWrRagAAWBYAAABMb2NhbEZpbGVTeXN0ZW0uZGVsZXRlatFqAABYFgAAAExvY2FsRmlsZVN5c3RlbS5zY2hlbWVq0WoAAFgUAAAATG9jYWxGaWxlU3lzdGVtLmNvcHlq0WoAAFgWAAAATG9jYWxGaWxlU3lzdGVtLmNyZWF0ZWrRagAAdWp9aQAAWB4AAABhcGFjaGVfYmVhbS5pby5sb2NhbGZpbGVzeXN0ZW1y6IMAAIWBcumDAAB9cuqDAABidFUdYXBhY2hlX2JlYW0uaW50ZXJuYWwuZ2NwLmF1dGgoWJMSAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkRhdGFmbG93IGNyZWRlbnRpYWxzIGFuZCBhdXRoZW50aWNhdGlvbi4iIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgZGF0ZXRpbWUKaW1wb3J0IGpzb24KaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IG9zCgpmcm9tIGZ1dHVyZS5tb3Zlcy51cmxsaWIucmVxdWVzdCBpbXBvcnQgUmVxdWVzdApmcm9tIGZ1dHVyZS5tb3Zlcy51cmxsaWIucmVxdWVzdCBpbXBvcnQgdXJsb3Blbgpmcm9tIG9hdXRoMmNsaWVudC5jbGllbnQgaW1wb3J0IEdvb2dsZUNyZWRlbnRpYWxzCmZyb20gb2F1dGgyY2xpZW50LmNsaWVudCBpbXBvcnQgT0F1dGgyQ3JlZGVudGlhbHMKCmZyb20gYXBhY2hlX2JlYW0udXRpbHMgaW1wb3J0IHJldHJ5CgojIFdoZW4gd2UgYXJlIHJ1bm5pbmcgaW4gR0NFLCB3ZSBjYW4gYXV0aGVudGljYXRlIHdpdGggVk0gY3JlZGVudGlhbHMuCmlzX3J1bm5pbmdfaW5fZ2NlID0gRmFsc2UKCiMgV2hlbiB3ZSBhcmUgcnVubmluZyBpbiBHQ0UsIHRoaXMgdmFsdWUgaXMgc2V0IGJhc2VkIG9uIHdvcmtlciBzdGFydHVwCiMgaW5mb3JtYXRpb24uCmV4ZWN1dGluZ19wcm9qZWN0ID0gTm9uZQoKCmRlZiBzZXRfcnVubmluZ19pbl9nY2Uod29ya2VyX2V4ZWN1dGluZ19wcm9qZWN0KToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIEluZm9ybXMgdGhlIGF1dGhlbnRpY2F0aW9uIGxpYnJhcnkgdGhhdCB3ZSBhcmUgcnVubmluZyBpbiBHQ0UuCgogIFdoZW4gd2UgYXJlIHJ1bm5pbmcgaW4gR0NFLCB3ZSBoYXZlIHRoZSBvcHRpb24gb2YgdXNpbmcgdGhlIFZNIG1ldGFkYXRhCiAgY3JlZGVudGlhbHMgZm9yIGF1dGhlbnRpY2F0aW9uIHRvIEdvb2dsZSBzZXJ2aWNlcy4KCiAgQXJnczoKICAgIHdvcmtlcl9leGVjdXRpbmdfcHJvamVjdDogVGhlIHByb2plY3QgcnVubmluZyB0aGUgd29ya2Zsb3cuIFRoaXMgaW5mb3JtYXRpb24KICAgICAgY29tZXMgZnJvbSB3b3JrZXIgc3RhcnR1cCBpbmZvcm1hdGlvbi4KICAiIiIKICBnbG9iYWwgaXNfcnVubmluZ19pbl9nY2UKICBnbG9iYWwgZXhlY3V0aW5nX3Byb2plY3QKICBpc19ydW5uaW5nX2luX2djZSA9IFRydWUKICBleGVjdXRpbmdfcHJvamVjdCA9IHdvcmtlcl9leGVjdXRpbmdfcHJvamVjdAoKCmNsYXNzIEF1dGhlbnRpY2F0aW9uRXhjZXB0aW9uKHJldHJ5LlBlcm1hbmVudEV4Y2VwdGlvbik6CiAgcGFzcwoKCmNsYXNzIF9HQ0VNZXRhZGF0YUNyZWRlbnRpYWxzKE9BdXRoMkNyZWRlbnRpYWxzKToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIENyZWRlbnRpYWwgb2JqZWN0IGluaXRpYWxpemVkIHVzaW5nIGFjY2VzcyB0b2tlbiBmcm9tIEdDRSBWTSBtZXRhZGF0YS4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHVzZXJfYWdlbnQ9Tm9uZSk6CiAgICAiIiJDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgR0NFTWV0YWRhdGFDcmVkZW50aWFscy4KCiAgICBUaGVzZSBjcmVkZW50aWFscyBhcmUgZ2VuZXJhdGVkIGJ5IGNvbnRhY3RpbmcgdGhlIG1ldGFkYXRhIHNlcnZlciBvbiBhIEdDRQogICAgVk0gaW5zdGFuY2UuCgogICAgQXJnczoKICAgICAgdXNlcl9hZ2VudDogc3RyaW5nLCBUaGUgSFRUUCBVc2VyLUFnZW50IHRvIHByb3ZpZGUgZm9yIHRoaXMgYXBwbGljYXRpb24uCiAgICAiIiIKICAgIHN1cGVyKF9HQ0VNZXRhZGF0YUNyZWRlbnRpYWxzLCBzZWxmKS5fX2luaXRfXygKICAgICAgICBOb25lLCAgIyBhY2Nlc3NfdG9rZW4KICAgICAgICBOb25lLCAgIyBjbGllbnRfaWQKICAgICAgICBOb25lLCAgIyBjbGllbnRfc2VjcmV0CiAgICAgICAgTm9uZSwgICMgcmVmcmVzaF90b2tlbgogICAgICAgIGRhdGV0aW1lLmRhdGV0aW1lKDIwMTAsIDEsIDEpLCAgIyB0b2tlbl9leHBpcnksIHNldCB0byB0aW1lIGluIHBhc3QuCiAgICAgICAgTm9uZSwgICMgdG9rZW5fdXJpCiAgICAgICAgdXNlcl9hZ2VudCkKCiAgQHJldHJ5LndpdGhfZXhwb25lbnRpYWxfYmFja29mZigKICAgICAgcmV0cnlfZmlsdGVyPXJldHJ5LnJldHJ5X29uX3NlcnZlcl9lcnJvcnNfYW5kX3RpbWVvdXRfZmlsdGVyKQogIGRlZiBfcmVmcmVzaChzZWxmLCBodHRwX3JlcXVlc3QpOgogICAgcmVmcmVzaF90aW1lID0gZGF0ZXRpbWUuZGF0ZXRpbWUudXRjbm93KCkKICAgIG1ldGFkYXRhX3Jvb3QgPSBvcy5lbnZpcm9uLmdldCgKICAgICAgICAnR0NFX01FVEFEQVRBX1JPT1QnLCAnbWV0YWRhdGEuZ29vZ2xlLmludGVybmFsJykKICAgIHRva2VuX3VybCA9ICgnaHR0cDovL3t9L2NvbXB1dGVNZXRhZGF0YS92MS9pbnN0YW5jZS9zZXJ2aWNlLWFjY291bnRzLycKICAgICAgICAgICAgICAgICAnZGVmYXVsdC90b2tlbicpLmZvcm1hdChtZXRhZGF0YV9yb290KQogICAgcmVxID0gUmVxdWVzdCh0b2tlbl91cmwsIGhlYWRlcnM9eydNZXRhZGF0YS1GbGF2b3InOiAnR29vZ2xlJ30pCiAgICB0b2tlbl9kYXRhID0ganNvbi5sb2Fkcyh1cmxvcGVuKHJlcSkucmVhZCgpKQogICAgc2VsZi5hY2Nlc3NfdG9rZW4gPSB0b2tlbl9kYXRhWydhY2Nlc3NfdG9rZW4nXQogICAgc2VsZi50b2tlbl9leHBpcnkgPSAocmVmcmVzaF90aW1lICsKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGV0aW1lLnRpbWVkZWx0YShzZWNvbmRzPXRva2VuX2RhdGFbJ2V4cGlyZXNfaW4nXSkpCgoKZGVmIGdldF9zZXJ2aWNlX2NyZWRlbnRpYWxzKCk6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBHZXQgY3JlZGVudGlhbHMgdG8gYWNjZXNzIEdvb2dsZSBzZXJ2aWNlcy4iIiIKICB1c2VyX2FnZW50ID0gJ2JlYW0tcHl0aG9uLXNkay8xLjAnCiAgaWYgaXNfcnVubmluZ19pbl9nY2U6CiAgICAjIFdlIGFyZSBjdXJyZW50bHkgcnVubmluZyBhcyBhIEdDRSB0YXNrcnVubmVyIHdvcmtlci4KICAgICMKICAgICMgVE9ETyhjY3kpOiBJdCdzIG5vdCBlbnRpcmVseSBjbGVhciBpZiB0aGVzZSBjcmVkZW50aWFscyBhcmUgdGhyZWFkLXNhZmUuCiAgICAjIElmIHNvLCB3ZSBjYW4gY2FjaGUgdGhlc2UgY3JlZGVudGlhbHMgdG8gc2F2ZSB0aGUgb3ZlcmhlYWQgb2YgY3JlYXRpbmcKICAgICMgdGhlbSBhZ2Fpbi4KICAgIHJldHVybiBfR0NFTWV0YWRhdGFDcmVkZW50aWFscyh1c2VyX2FnZW50PXVzZXJfYWdlbnQpCiAgZWxzZToKICAgIGNsaWVudF9zY29wZXMgPSBbCiAgICAgICAgJ2h0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2F1dGgvYmlncXVlcnknLAogICAgICAgICdodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9hdXRoL2Nsb3VkLXBsYXRmb3JtJywKICAgICAgICAnaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vYXV0aC9kZXZzdG9yYWdlLmZ1bGxfY29udHJvbCcsCiAgICAgICAgJ2h0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2F1dGgvdXNlcmluZm8uZW1haWwnLAogICAgICAgICdodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9hdXRoL2RhdGFzdG9yZScKICAgIF0KCiAgICB0cnk6CiAgICAgIGNyZWRlbnRpYWxzID0gR29vZ2xlQ3JlZGVudGlhbHMuZ2V0X2FwcGxpY2F0aW9uX2RlZmF1bHQoKQogICAgICBjcmVkZW50aWFscyA9IGNyZWRlbnRpYWxzLmNyZWF0ZV9zY29wZWQoY2xpZW50X3Njb3BlcykKICAgICAgbG9nZ2luZy5kZWJ1ZygnQ29ubmVjdGluZyB1c2luZyBHb29nbGUgQXBwbGljYXRpb24gRGVmYXVsdCAnCiAgICAgICAgICAgICAgICAgICAgJ0NyZWRlbnRpYWxzLicpCiAgICAgIHJldHVybiBjcmVkZW50aWFscwogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICBsb2dnaW5nLndhcm5pbmcoCiAgICAgICAgICAnVW5hYmxlIHRvIGZpbmQgZGVmYXVsdCBjcmVkZW50aWFscyB0byB1c2U6ICVzXG4nCiAgICAgICAgICAnQ29ubmVjdGluZyBhbm9ueW1vdXNseS4nLCBlKQogICAgICByZXR1cm4gTm9uZQp9cuuDAAAoWBIAAABzZXRfcnVubmluZ19pbl9nY2VYAwAAAGRlZksqSzqHWBcAAABBdXRoZW50aWNhdGlvbkV4Y2VwdGlvblgFAAAAY2xhc3NLPEs+h1ggAAAAX0dDRU1ldGFkYXRhQ3JlZGVudGlhbHMuX19pbml0X19YAwAAAGRlZktFS1aHWCAAAABfR0NFTWV0YWRhdGFDcmVkZW50aWFscy5fcmVmcmVzaFgDAAAAZGVmS1dLZIdYFwAAAF9HQ0VNZXRhZGF0YUNyZWRlbnRpYWxzWAUAAABjbGFzc0tAS2SHWBcAAABnZXRfc2VydmljZV9jcmVkZW50aWFsc1gDAAAAZGVmS2ZLhod1fXLsgwAAKFgXAAAAZ2V0X3NlcnZpY2VfY3JlZGVudGlhbHNYHQAAAGFwYWNoZV9iZWFtLmludGVybmFsLmdjcC5hdXRocu2DAABYFwAAAEF1dGhlbnRpY2F0aW9uRXhjZXB0aW9ucu6DAABq7YMAAFgSAAAAc2V0X3J1bm5pbmdfaW5fZ2Nlau2DAAB1an1pAABYHQAAAGFwYWNoZV9iZWFtLmludGVybmFsLmdjcC5hdXRocu+DAACFgXLwgwAAfXLxgwAAYnRy8oMAAFUbYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlcvODAAAoWDEvAQAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkNvcmUgUFRyYW5zZm9ybSBzdWJjbGFzc2VzLCBzdWNoIGFzIEZsYXRNYXAsIEdyb3VwQnlLZXksIGFuZCBNYXAuIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGNvcHkKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHJhbmRvbQppbXBvcnQgcmUKaW1wb3J0IHR5cGVzCmZyb20gYnVpbHRpbnMgaW1wb3J0IG1hcApmcm9tIGJ1aWx0aW5zIGltcG9ydCBvYmplY3QKZnJvbSBidWlsdGlucyBpbXBvcnQgcmFuZ2UKCmZyb20gZnV0dXJlLmJ1aWx0aW5zIGltcG9ydCBmaWx0ZXIKZnJvbSBwYXN0LmJ1aWx0aW5zIGltcG9ydCB1bmljb2RlCgpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBjb2RlcnMKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgcHZhbHVlCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IHR5cGVoaW50cwpmcm9tIGFwYWNoZV9iZWFtLmNvZGVycyBpbXBvcnQgdHlwZWNvZGVycwpmcm9tIGFwYWNoZV9iZWFtLmludGVybmFsIGltcG9ydCBwaWNrbGVyCmZyb20gYXBhY2hlX2JlYW0uaW50ZXJuYWwgaW1wb3J0IHV0aWwKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IERlYnVnT3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgVHlwZU9wdGlvbnMKZnJvbSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eSBpbXBvcnQgY29tbW9uX3VybnMKZnJvbSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eSBpbXBvcnQgcHl0aG9uX3VybnMKZnJvbSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkgaW1wb3J0IGJlYW1fcnVubmVyX2FwaV9wYjIKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBwdHJhbnNmb3JtCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgdXNlcnN0YXRlCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5IGltcG9ydCBEaXNwbGF5RGF0YUl0ZW0KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXkgaW1wb3J0IEhhc0Rpc3BsYXlEYXRhCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtIGltcG9ydCBQVHJhbnNmb3JtCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtIGltcG9ydCBQVHJhbnNmb3JtV2l0aFNpZGVJbnB1dHMKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZSBpbXBvcnQgU3RhdGVTcGVjCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUgaW1wb3J0IFRpbWVyU3BlYwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93IGltcG9ydCBHbG9iYWxXaW5kb3dzCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cgaW1wb3J0IFRpbWVzdGFtcENvbWJpbmVyCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cgaW1wb3J0IFRpbWVzdGFtcGVkVmFsdWUKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdyBpbXBvcnQgV2luZG93ZWRWYWx1ZQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93IGltcG9ydCBXaW5kb3dGbgpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cyBpbXBvcnQgS1YKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMgaW1wb3J0IEFueQpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cyBpbXBvcnQgSXRlcmFibGUKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMgaW1wb3J0IFVuaW9uCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzIGltcG9ydCB0cml2aWFsX2luZmVyZW5jZQpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5kZWNvcmF0b3JzIGltcG9ydCBUeXBlQ2hlY2tFcnJvcgpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5kZWNvcmF0b3JzIGltcG9ydCBXaXRoVHlwZUhpbnRzCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnMgaW1wb3J0IGdldF90eXBlX2hpbnRzCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnMgaW1wb3J0IGdldGZ1bGxhcmdzcGVjCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlIGltcG9ydCBlbGVtZW50X3R5cGUKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzIGltcG9ydCBpc19jb25zaXN0ZW50X3dpdGgKZnJvbSBhcGFjaGVfYmVhbS51dGlscyBpbXBvcnQgdXJucwoKX19hbGxfXyA9IFsKICAgICdEb0ZuJywKICAgICdDb21iaW5lRm4nLAogICAgJ1BhcnRpdGlvbkZuJywKICAgICdQYXJEbycsCiAgICAnRmxhdE1hcCcsCiAgICAnTWFwJywKICAgICdGaWx0ZXInLAogICAgJ0NvbWJpbmVHbG9iYWxseScsCiAgICAnQ29tYmluZVBlcktleScsCiAgICAnQ29tYmluZVZhbHVlcycsCiAgICAnR3JvdXBCeUtleScsCiAgICAnUGFydGl0aW9uJywKICAgICdXaW5kb3dpbmcnLAogICAgJ1dpbmRvd0ludG8nLAogICAgJ0ZsYXR0ZW4nLAogICAgJ0NyZWF0ZScsCiAgICAnSW1wdWxzZScsCiAgICBdCgojIFR5cGUgdmFyaWFibGVzClQgPSB0eXBlaGludHMuVHlwZVZhcmlhYmxlKCdUJykKSyA9IHR5cGVoaW50cy5UeXBlVmFyaWFibGUoJ0snKQpWID0gdHlwZWhpbnRzLlR5cGVWYXJpYWJsZSgnVicpCgoKY2xhc3MgRG9GbkNvbnRleHQob2JqZWN0KToKICAiIiJBIGNvbnRleHQgYXZhaWxhYmxlIHRvIGFsbCBtZXRob2RzIG9mIERvRm4gaW5zdGFuY2UuIiIiCiAgcGFzcwoKCmNsYXNzIERvRm5Qcm9jZXNzQ29udGV4dChEb0ZuQ29udGV4dCk6CiAgIiIiQSBwcm9jZXNzaW5nIGNvbnRleHQgcGFzc2VkIHRvIERvRm4gcHJvY2VzcygpIGR1cmluZyBleGVjdXRpb24uCgogIEV4cGVyaW1lbnRhbDsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgTW9zdCBpbXBvcnRhbnRseSwgYSBEb0ZuLnByb2Nlc3MgbWV0aG9kIHdpbGwgYWNjZXNzIGNvbnRleHQuZWxlbWVudAogIHRvIGdldCB0aGUgZWxlbWVudCBpdCBpcyBzdXBwb3NlZCB0byBwcm9jZXNzLgoKICBBdHRyaWJ1dGVzOgogICAgbGFiZWw6IGxhYmVsIG9mIHRoZSBQYXJEbyB3aG9zZSBlbGVtZW50IGlzIGJlaW5nIHByb2Nlc3NlZC4KICAgIGVsZW1lbnQ6IGVsZW1lbnQgYmVpbmcgcHJvY2Vzc2VkCiAgICAgIChpbiBwcm9jZXNzIG1ldGhvZCBvbmx5OyBhbHdheXMgTm9uZSBpbiBzdGFydF9idW5kbGUgYW5kIGZpbmlzaF9idW5kbGUpCiAgICB0aW1lc3RhbXA6IHRpbWVzdGFtcCBvZiB0aGUgZWxlbWVudAogICAgICAoaW4gcHJvY2VzcyBtZXRob2Qgb25seTsgYWx3YXlzIE5vbmUgaW4gc3RhcnRfYnVuZGxlIGFuZCBmaW5pc2hfYnVuZGxlKQogICAgd2luZG93czogd2luZG93cyBvZiB0aGUgZWxlbWVudAogICAgICAoaW4gcHJvY2VzcyBtZXRob2Qgb25seTsgYWx3YXlzIE5vbmUgaW4gc3RhcnRfYnVuZGxlIGFuZCBmaW5pc2hfYnVuZGxlKQogICAgc3RhdGU6IGEgRG9GblN0YXRlIG9iamVjdCwgd2hpY2ggaG9sZHMgdGhlIHJ1bm5lcidzIGludGVybmFsIHN0YXRlCiAgICAgIGZvciB0aGlzIGVsZW1lbnQuCiAgICAgIE5vdCB1c2VkIGJ5IHRoZSBwaXBlbGluZSBjb2RlLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgbGFiZWwsIGVsZW1lbnQ9Tm9uZSwgc3RhdGU9Tm9uZSk6CiAgICAiIiJJbml0aWFsaXplIGEgcHJvY2Vzc2luZyBjb250ZXh0IG9iamVjdCB3aXRoIGFuIGVsZW1lbnQgYW5kIHN0YXRlLgoKICAgIFRoZSBlbGVtZW50IHJlcHJlc2VudHMgb25lIHZhbHVlIGZyb20gYSBQQ29sbGVjdGlvbiB0aGF0IHdpbGwgYmUgYWNjZXNzZWQKICAgIGJ5IGEgRG9GbiBvYmplY3QgZHVyaW5nIHBpcGVsaW5lIGV4ZWN1dGlvbiwgYW5kIHN0YXRlIGlzIGFuIGFyYml0cmFyeSBvYmplY3QKICAgIHdoZXJlIGNvdW50ZXJzIGFuZCBvdGhlciBwaXBlbGluZSBzdGF0ZSBpbmZvcm1hdGlvbiBjYW4gYmUgcGFzc2VkIGluLgoKICAgIERvRm5Qcm9jZXNzQ29udGV4dCBvYmplY3RzIGFyZSBhbHNvIHVzZWQgYXMgaW5wdXRzIHRvIFBhcnRpdGlvbkZuIGluc3RhbmNlcy4KCiAgICBBcmdzOgogICAgICBsYWJlbDogbGFiZWwgb2YgdGhlIFBDb2xsZWN0aW9uIHdob3NlIGVsZW1lbnQgaXMgYmVpbmcgcHJvY2Vzc2VkLgogICAgICBlbGVtZW50OiBlbGVtZW50IG9mIGEgUENvbGxlY3Rpb24gYmVpbmcgcHJvY2Vzc2VkIHVzaW5nIHRoaXMgY29udGV4dC4KICAgICAgc3RhdGU6IGEgRG9GblN0YXRlIG9iamVjdCB3aXRoIHN0YXRlIHRvIGJlIHBhc3NlZCBpbiB0byB0aGUgRG9GbiBvYmplY3QuCiAgICAiIiIKICAgIHNlbGYubGFiZWwgPSBsYWJlbAogICAgc2VsZi5zdGF0ZSA9IHN0YXRlCiAgICBpZiBlbGVtZW50IGlzIG5vdCBOb25lOgogICAgICBzZWxmLnNldF9lbGVtZW50KGVsZW1lbnQpCgogIGRlZiBzZXRfZWxlbWVudChzZWxmLCB3aW5kb3dlZF92YWx1ZSk6CiAgICBpZiB3aW5kb3dlZF92YWx1ZSBpcyBOb25lOgogICAgICAjIE5vdCBjdXJyZW50bHkgcHJvY2Vzc2luZyBhbiBlbGVtZW50LgogICAgICBpZiBoYXNhdHRyKHNlbGYsICdlbGVtZW50Jyk6CiAgICAgICAgZGVsIHNlbGYuZWxlbWVudAogICAgICAgIGRlbCBzZWxmLnRpbWVzdGFtcAogICAgICAgIGRlbCBzZWxmLndpbmRvd3MKICAgIGVsc2U6CiAgICAgIHNlbGYuZWxlbWVudCA9IHdpbmRvd2VkX3ZhbHVlLnZhbHVlCiAgICAgIHNlbGYudGltZXN0YW1wID0gd2luZG93ZWRfdmFsdWUudGltZXN0YW1wCiAgICAgIHNlbGYud2luZG93cyA9IHdpbmRvd2VkX3ZhbHVlLndpbmRvd3MKCgpjbGFzcyBQcm9jZXNzQ29udGludWF0aW9uKG9iamVjdCk6CiAgIiIiQW4gb2JqZWN0IHRoYXQgbWF5IGJlIHByb2R1Y2VkIGFzIHRoZSBsYXN0IGVsZW1lbnQgb2YgYSBwcm9jZXNzIG1ldGhvZAogICAgaW52b2NhdGlvbi4KCiAgRXhwZXJpbWVudGFsOyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBJZiBwcm9kdWNlZCwgaW5kaWNhdGVzIHRoYXQgdGhlcmUgaXMgbW9yZSB3b3JrIHRvIGJlIGRvbmUgZm9yIHRoZSBjdXJyZW50CiAgaW5wdXQgZWxlbWVudC4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHJlc3VtZV9kZWxheT0wKToKICAgICIiIkluaXRpYWxpemVzIGEgUHJvY2Vzc0NvbnRpbnVhdGlvbiBvYmplY3QuCgogICAgQXJnczoKICAgICAgcmVzdW1lX2RlbGF5OiBpbmRpY2F0ZXMgdGhlIG1pbmltdW0gdGltZSwgaW4gc2Vjb25kcywgdGhhdCBzaG91bGQgZWxhcHNlCiAgICAgICAgYmVmb3JlIHJlLWludm9raW5nIHByb2Nlc3MoKSBtZXRob2QgZm9yIHJlc3VtaW5nIHRoZSBpbnZvY2F0aW9uIG9mIHRoZQogICAgICAgIGN1cnJlbnQgZWxlbWVudC4KICAgICIiIgogICAgc2VsZi5yZXN1bWVfZGVsYXkgPSByZXN1bWVfZGVsYXkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiByZXN1bWUocmVzdW1lX2RlbGF5PTApOgogICAgIiIiQSBjb252ZW5pZW50IG1ldGhvZCB0aGF0IHByb2R1Y2VzIGEgYGBQcm9jZXNzQ29udGludWF0aW9uYGAuCgogICAgQXJnczoKICAgICAgcmVzdW1lX2RlbGF5OiBkZWxheSBhZnRlciB3aGljaCBwcm9jZXNzaW5nIGN1cnJlbnQgZWxlbWVudCBzaG91bGQgYmUKICAgICAgICByZXN1bWVkLgogICAgUmV0dXJuczogYSBgYFByb2Nlc3NDb250aW51YXRpb25gYCBmb3Igc2lnbmFsbGluZyB0aGUgcnVubmVyIHRoYXQgY3VycmVudAogICAgICBpbnB1dCBlbGVtZW50IGhhcyBub3QgYmVlbiBmdWxseSBwcm9jZXNzZWQgYW5kIHNob3VsZCBiZSByZXN1bWVkIGxhdGVyLgogICAgIiIiCiAgICByZXR1cm4gUHJvY2Vzc0NvbnRpbnVhdGlvbihyZXN1bWVfZGVsYXk9cmVzdW1lX2RlbGF5KQoKCmNsYXNzIFJlc3RyaWN0aW9uUHJvdmlkZXIob2JqZWN0KToKICAiIiJQcm92aWRlcyBtZXRob2RzIGZvciBnZW5lcmF0aW5nIGFuZCBtYW5pcHVsYXRpbmcgcmVzdHJpY3Rpb25zLgoKICBUaGlzIGNsYXNzIHNob3VsZCBiZSBpbXBsZW1lbnRlZCB0byBzdXBwb3J0IFNwbGl0dGFibGUgYGBEb0ZuYGBzIGluIFB5dGhvbgogIFNESy4gU2VlIGh0dHBzOi8vcy5hcGFjaGUub3JnL3NwbGl0dGFibGUtZG8tZm4gZm9yIG1vcmUgZGV0YWlscyBhYm91dAogIFNwbGl0dGFibGUgYGBEb0ZuYGBzLgoKICBUbyBkZW5vdGUgYSBgYERvRm5gYCBjbGFzcyB0byBiZSBTcGxpdHRhYmxlIGBgRG9GbmBgLCBgYERvRm4ucHJvY2VzcygpYGAKICBtZXRob2Qgb2YgdGhhdCBjbGFzcyBzaG91bGQgaGF2ZSBleGFjdGx5IG9uZSBwYXJhbWV0ZXIgd2hvc2UgZGVmYXVsdCB2YWx1ZSBpcwogIGFuIGluc3RhbmNlIG9mIGBgUmVzdHJpY3Rpb25Qcm92aWRlcmBgLgoKICBUaGUgcHJvdmlkZWQgYGBSZXN0cmljdGlvblByb3ZpZGVyYGAgaW5zdGFuY2UgbXVzdCBwcm92aWRlIHN1aXRhYmxlIG92ZXJyaWRlcwogIGZvciB0aGUgZm9sbG93aW5nIG1ldGhvZHMuCiAgKiBjcmVhdGVfdHJhY2tlcigpCiAgKiBpbml0aWFsX3Jlc3RyaWN0aW9uKCkKCiAgT3B0aW9uYWxseSwgYGBSZXN0cmljdGlvblByb3ZpZGVyYGAgbWF5IG92ZXJyaWRlIGRlZmF1bHQgaW1wbGVtZW50YXRpb25zIG9mCiAgZm9sbG93aW5nIG1ldGhvZHMuCiAgKiByZXN0cmljdGlvbl9jb2RlcigpCiAgKiBzcGxpdCgpCgogICoqIFBhdXNpbmcgYW5kIHJlc3VtaW5nIHByb2Nlc3Npbmcgb2YgYW4gZWxlbWVudCAqKgoKICBBcyB0aGUgbGFzdCBlbGVtZW50IHByb2R1Y2VkIGJ5IHRoZSBpdGVyYXRvciByZXR1cm5lZCBieSB0aGUKICBgYERvRm4ucHJvY2VzcygpYGAgbWV0aG9kLCBhIFNwbGl0dGFibGUgYGBEb0ZuYGAgbWF5IHJldHVybiBhbiBvYmplY3Qgb2YgdHlwZQogIGBgUHJvY2Vzc0NvbnRpbnVhdGlvbmBgLgoKICBJZiBwcm92aWRlZCwgYGBQcm9jZXNzQ29udGludWF0aW9uYGAgb2JqZWN0IHNwZWNpZmllcyB0aGF0IHJ1bm5lciBzaG91bGQKICBsYXRlciByZS1pbnZva2UgYGBEb0ZuLnByb2Nlc3MoKWBgIG1ldGhvZCB0byByZXN1bWUgcHJvY2Vzc2luZyB0aGUgY3VycmVudAogIGVsZW1lbnQgYW5kIHRoZSBtYW5uZXIgaW4gd2hpY2ggdGhlIHJlLWludm9jYXRpb24gc2hvdWxkIGJlIHBlcmZvcm1lZC4gQQogIGBgUHJvY2Vzc0NvbnRpbnVhdGlvbmBgIG9iamVjdCBtdXN0IG9ubHkgYmUgc3BlY2lmaWVkIGFzIHRoZSBsYXN0IGVsZW1lbnQgb2YKICB0aGUgaXRlcmF0b3IuIElmIGEgYGBQcm9jZXNzQ29udGludWF0aW9uYGAgb2JqZWN0IGlzIG5vdCBwcm92aWRlZCB0aGUgcnVubmVyCiAgd2lsbCBhc3N1bWUgdGhhdCB0aGUgY3VycmVudCBpbnB1dCBlbGVtZW50IGhhcyBiZWVuIGZ1bGx5IHByb2Nlc3NlZC4KCiAgKiogVXBkYXRpbmcgb3V0cHV0IHdhdGVybWFyayAqKgoKICBgYERvRm4ucHJvY2VzcygpYGAgbWV0aG9kIG9mIFNwbGl0dGFibGUgYGBEb0ZuYGBzIGNvdWxkIGNvbnRhaW4gYSBwYXJhbWV0ZXIKICB3aXRoIGRlZmF1bHQgdmFsdWUgYGBEb0ZuLldhdGVybWFya1JlcG9ydGVyUGFyYW1gYC4gSWYgc3BlY2lmaWVkIHRoaXMgYXNrcyB0aGUKICBydW5uZXIgdG8gcHJvdmlkZSBhIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gZ2l2ZSB0aGUgcnVubmVyIGEKICAoYmVzdC1lZmZvcnQpIGxvd2VyIGJvdW5kIGFib3V0IHRoZSB0aW1lc3RhbXBzIG9mIGZ1dHVyZSBvdXRwdXQgYXNzb2NpYXRlZAogIHdpdGggdGhlIGN1cnJlbnQgZWxlbWVudCBwcm9jZXNzZWQgYnkgdGhlIGBgRG9GbmBgLiBJZiB0aGUgYGBEb0ZuYGAgaGFzCiAgbXVsdGlwbGUgb3V0cHV0cywgdGhlIHdhdGVybWFyayBhcHBsaWVzIHRvIGFsbCBvZiB0aGVtLiBQcm92aWRlZCBmdW5jdGlvbiBtdXN0CiAgYmUgaW52b2tlZCB3aXRoIGEgc2luZ2xlIHBhcmFtZXRlciBvZiB0eXBlIGBgVGltZXN0YW1wYGAgb3IgYXMgYW4gaW50ZWdlciB0aGF0CiAgZ2l2ZXMgdGhlIHdhdGVybWFyayBpbiBudW1iZXIgb2Ygc2Vjb25kcy4KICAiIiIKCiAgZGVmIGNyZWF0ZV90cmFja2VyKHNlbGYsIHJlc3RyaWN0aW9uKToKICAgICIiIlByb2R1Y2VzIGEgbmV3IGBgUmVzdHJpY3Rpb25UcmFja2VyYGAgZm9yIHRoZSBnaXZlbiByZXN0cmljdGlvbi4KCiAgICBBcmdzOgogICAgICByZXN0cmljdGlvbjogYW4gb2JqZWN0IHRoYXQgZGVmaW5lcyBhIHJlc3RyaWN0aW9uIGFzIGlkZW50aWZpZWQgYnkgYQogICAgICAgIFNwbGl0dGFibGUgYGBEb0ZuYGAgdGhhdCB1dGlsaXplcyB0aGUgY3VycmVudCBgYFJlc3RyaWN0aW9uUHJvdmlkZXJgYC4KICAgICAgICBGb3IgZXhhbXBsZSwgYSB0dXBsZSB0aGF0IGdpdmVzIGEgcmFuZ2Ugb2YgcG9zaXRpb25zIGZvciBhIFNwbGl0dGFibGUKICAgICAgICBgYERvRm5gYCB0aGF0IHJlYWRzIGZpbGVzIGJhc2VkIG9uIGJ5dGUgcG9zaXRpb25zLgogICAgUmV0dXJuczogYW4gb2JqZWN0IG9mIHR5cGUgYGBSZXN0cmljdGlvblRyYWNrZXJgYC4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgaW5pdGlhbF9yZXN0cmljdGlvbihzZWxmLCBlbGVtZW50KToKICAgICIiIlByb2R1Y2VzIGFuIGluaXRpYWwgcmVzdHJpY3Rpb24gZm9yIHRoZSBnaXZlbiBlbGVtZW50LiIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgc3BsaXQoc2VsZiwgZWxlbWVudCwgcmVzdHJpY3Rpb24pOgogICAgIiIiU3BsaXRzIHRoZSBnaXZlbiBlbGVtZW50IGFuZCByZXN0cmljdGlvbi4KCiAgICBSZXR1cm5zIGFuIGl0ZXJhdG9yIG9mIHJlc3RyaWN0aW9ucy4gVGhlIHRvdGFsIHNldCBvZiBlbGVtZW50cyBwcm9kdWNlZCBieQogICAgcmVhZGluZyBpbnB1dCBlbGVtZW50IGZvciBlYWNoIG9mIHRoZSByZXR1cm5lZCByZXN0cmljdGlvbnMgc2hvdWxkIGJlIHRoZQogICAgc2FtZSBhcyB0aGUgdG90YWwgc2V0IG9mIGVsZW1lbnRzIHByb2R1Y2VkIGJ5IHJlYWRpbmcgdGhlIGlucHV0IGVsZW1lbnQgZm9yCiAgICB0aGUgaW5wdXQgcmVzdHJpY3Rpb24uCgogICAgVE9ETyhjaGFtaWthcmEpOiBnaXZlIHN1aXRhYmxlIGhpbnRzIGZvciBwZXJmb3JtaW5nIHNwbGl0dGluZywgZm9yIGV4YW1wbGUKICAgIG51bWJlciBvZiBwYXJ0cyBvciBzaXplIGluIGJ5dGVzLgogICAgIiIiCiAgICB5aWVsZCByZXN0cmljdGlvbgoKICBkZWYgcmVzdHJpY3Rpb25fY29kZXIoc2VsZik6CiAgICAiIiJSZXR1cm5zIGEgYGBDb2RlcmBgIGZvciByZXN0cmljdGlvbnMuCgogICAgUmV0dXJuZWRgYENvZGVyYGAgd2lsbCBiZSB1c2VkIGZvciB0aGUgcmVzdHJpY3Rpb25zIHByb2R1Y2VkIGJ5IHRoZSBjdXJyZW50CiAgICBgYFJlc3RyaWN0aW9uUHJvdmlkZXJgYC4KCiAgICBSZXR1cm5zOgogICAgICBhbiBvYmplY3Qgb2YgdHlwZSBgYENvZGVyYGAuCiAgICAiIiIKICAgIHJldHVybiBjb2RlcnMucmVnaXN0cnkuZ2V0X2NvZGVyKG9iamVjdCkKCgpkZWYgZ2V0X2Z1bmN0aW9uX2FyZ3VtZW50cyhvYmosIGZ1bmMpOgogICIiIlJldHVybiB0aGUgZnVuY3Rpb24gYXJndW1lbnRzIGJhc2VkIG9uIHRoZSBuYW1lIHByb3ZpZGVkLiBJZiB0aGV5IGhhdmUKICBhIF9pbnNwZWN0X2Z1bmN0aW9uIGF0dGFjaGVkIHRvIHRoZSBjbGFzcyB0aGVuIHVzZSB0aGF0IG90aGVyd2lzZSBkZWZhdWx0CiAgdG8gdGhlIG1vZGlmaWVkIHZlcnNpb24gb2YgcHl0aG9uIGluc3BlY3QgbGlicmFyeS4KICAiIiIKICBmdW5jX25hbWUgPSAnX2luc3BlY3RfJXMnICUgZnVuYwogIGlmIGhhc2F0dHIob2JqLCBmdW5jX25hbWUpOgogICAgZiA9IGdldGF0dHIob2JqLCBmdW5jX25hbWUpCiAgICByZXR1cm4gZigpCiAgZiA9IGdldGF0dHIob2JqLCBmdW5jKQogIHJldHVybiBnZXRmdWxsYXJnc3BlYyhmKQoKCmNsYXNzIF9Eb0ZuUGFyYW0ob2JqZWN0KToKICAiIiJEb0ZuIHBhcmFtZXRlci4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcmFtX2lkKToKICAgIHNlbGYucGFyYW1faWQgPSBwYXJhbV9pZAoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIGlmIHR5cGUoc2VsZikgPT0gdHlwZShvdGhlcik6CiAgICAgIHJldHVybiBzZWxmLnBhcmFtX2lkID09IG90aGVyLnBhcmFtX2lkCiAgICByZXR1cm4gRmFsc2UKCiAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CiAgICAjIFRPRE8oQkVBTS01OTQ5KTogTmVlZGVkIGZvciBQeXRob24gMiBjb21wYXRpYmlsaXR5LgogICAgcmV0dXJuIG5vdCBzZWxmID09IG90aGVyCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKHNlbGYucGFyYW1faWQpCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiBzZWxmLnBhcmFtX2lkCgoKY2xhc3MgX1N0YXRlRG9GblBhcmFtKF9Eb0ZuUGFyYW0pOgogICIiIlN0YXRlIERvRm4gcGFyYW1ldGVyLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgc3RhdGVfc3BlYyk6CiAgICBpZiBub3QgaXNpbnN0YW5jZShzdGF0ZV9zcGVjLCBTdGF0ZVNwZWMpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCJEb0ZuLlN0YXRlUGFyYW0gZXhwZWN0ZWQgU3RhdGVTcGVjIG9iamVjdC4iKQogICAgc2VsZi5zdGF0ZV9zcGVjID0gc3RhdGVfc3BlYwogICAgc2VsZi5wYXJhbV9pZCA9ICdTdGF0ZVBhcmFtKCVzKScgJSBzdGF0ZV9zcGVjLm5hbWUKCgpjbGFzcyBfVGltZXJEb0ZuUGFyYW0oX0RvRm5QYXJhbSk6CiAgIiIiVGltZXIgRG9GbiBwYXJhbWV0ZXIuIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCB0aW1lcl9zcGVjKToKICAgIGlmIG5vdCBpc2luc3RhbmNlKHRpbWVyX3NwZWMsIFRpbWVyU3BlYyk6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkRvRm4uVGltZXJQYXJhbSBleHBlY3RlZCBUaW1lclNwZWMgb2JqZWN0LiIpCiAgICBzZWxmLnRpbWVyX3NwZWMgPSB0aW1lcl9zcGVjCiAgICBzZWxmLnBhcmFtX2lkID0gJ1RpbWVyUGFyYW0oJXMpJyAlIHRpbWVyX3NwZWMubmFtZQoKCmNsYXNzIERvRm4oV2l0aFR5cGVIaW50cywgSGFzRGlzcGxheURhdGEsIHVybnMuUnVubmVyQXBpRm4pOgogICIiIkEgZnVuY3Rpb24gb2JqZWN0IHVzZWQgYnkgYSB0cmFuc2Zvcm0gd2l0aCBjdXN0b20gcHJvY2Vzc2luZy4KCiAgVGhlIFBhckRvIHRyYW5zZm9ybSBpcyBzdWNoIGEgdHJhbnNmb3JtLiBUaGUgUGFyRG8uYXBwbHkKICBtZXRob2Qgd2lsbCB0YWtlIGFuIG9iamVjdCBvZiB0eXBlIERvRm4gYW5kIGFwcGx5IGl0IHRvIGFsbCBlbGVtZW50cyBvZiBhCiAgUENvbGxlY3Rpb24gb2JqZWN0LgoKICBJbiBvcmRlciB0byBoYXZlIGNvbmNyZXRlIERvRm4gb2JqZWN0cyBvbmUgaGFzIHRvIHN1YmNsYXNzIGZyb20gRG9GbiBhbmQKICBkZWZpbmUgdGhlIGRlc2lyZWQgYmVoYXZpb3IgKHN0YXJ0X2J1bmRsZS9maW5pc2hfYnVuZGxlIGFuZCBwcm9jZXNzKSBvciB3cmFwIGEKICBjYWxsYWJsZSBvYmplY3QgdXNpbmcgdGhlIENhbGxhYmxlV3JhcHBlckRvRm4gY2xhc3MuCiAgIiIiCgogICMgUGFyYW1ldGVycyB0aGF0IGNhbiBiZSB1c2VkIGluIHRoZSAucHJvY2VzcygpIG1ldGhvZC4KICBFbGVtZW50UGFyYW0gPSBfRG9GblBhcmFtKCdFbGVtZW50UGFyYW0nKQogIFNpZGVJbnB1dFBhcmFtID0gX0RvRm5QYXJhbSgnU2lkZUlucHV0UGFyYW0nKQogIFRpbWVzdGFtcFBhcmFtID0gX0RvRm5QYXJhbSgnVGltZXN0YW1wUGFyYW0nKQogIFdpbmRvd1BhcmFtID0gX0RvRm5QYXJhbSgnV2luZG93UGFyYW0nKQogIFdhdGVybWFya1JlcG9ydGVyUGFyYW0gPSBfRG9GblBhcmFtKCdXYXRlcm1hcmtSZXBvcnRlclBhcmFtJykKCiAgRG9GblByb2Nlc3NQYXJhbXMgPSBbRWxlbWVudFBhcmFtLCBTaWRlSW5wdXRQYXJhbSwgVGltZXN0YW1wUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgV2luZG93UGFyYW0sIFdhdGVybWFya1JlcG9ydGVyUGFyYW1dCgogICMgUGFyYW1ldGVycyB0byBhY2Nlc3Mgc3RhdGUgYW5kIHRpbWVycy4gIE5vdCByZXN0cmljdGVkIHRvIHVzZSBvbmx5IGluIHRoZQogICMgLnByb2Nlc3MoKSBtZXRob2QuIFVzYWdlOiBEb0ZuLlN0YXRlUGFyYW0oc3RhdGVfc3BlYyksCiAgIyBEb0ZuLlRpbWVyUGFyYW0odGltZXJfc3BlYykuCiAgU3RhdGVQYXJhbSA9IF9TdGF0ZURvRm5QYXJhbQogIFRpbWVyUGFyYW0gPSBfVGltZXJEb0ZuUGFyYW0KCiAgQHN0YXRpY21ldGhvZAogIGRlZiBmcm9tX2NhbGxhYmxlKGZuKToKICAgIHJldHVybiBDYWxsYWJsZVdyYXBwZXJEb0ZuKGZuKQoKICBkZWYgZGVmYXVsdF9sYWJlbChzZWxmKToKICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXwoKICBkZWYgcHJvY2VzcyhzZWxmLCBlbGVtZW50LCAqYXJncywgKiprd2FyZ3MpOgogICAgIiIiTWV0aG9kIHRvIHVzZSBmb3IgcHJvY2Vzc2luZyBlbGVtZW50cy4KCiAgICBUaGlzIGlzIGludm9rZWQgYnkgYGBEb0ZuUnVubmVyYGAgZm9yIGVhY2ggZWxlbWVudCBvZiBhIGlucHV0CiAgICBgYFBDb2xsZWN0aW9uYGAuCgogICAgSWYgc3BlY2lmaWVkLCBmb2xsb3dpbmcgZGVmYXVsdCBhcmd1bWVudHMgYXJlIHVzZWQgYnkgdGhlIGBgRG9GblJ1bm5lcmBgIHRvCiAgICBiZSBhYmxlIHRvIHBhc3MgdGhlIHBhcmFtZXRlcnMgY29ycmVjdGx5LgoKICAgIGBgRG9Gbi5FbGVtZW50UGFyYW1gYDogZWxlbWVudCB0byBiZSBwcm9jZXNzZWQuCiAgICBgYERvRm4uU2lkZUlucHV0UGFyYW1gYDogYSBzaWRlIGlucHV0IHRoYXQgbWF5IGJlIHVzZWQgd2hlbiBwcm9jZXNzaW5nLgogICAgYGBEb0ZuLlRpbWVzdGFtcFBhcmFtYGA6IHRpbWVzdGFtcCBvZiB0aGUgaW5wdXQgZWxlbWVudC4KICAgIGBgRG9Gbi5XaW5kb3dQYXJhbWBgOiBgYFdpbmRvd2BgIHRoZSBpbnB1dCBlbGVtZW50IGJlbG9uZ3MgdG8uCiAgICBBIGBgUmVzdHJpY3Rpb25Qcm92aWRlcmBgIGluc3RhbmNlOiBhbiBgYGlvYmFzZS5SZXN0cmljdGlvblRyYWNrZXJgYCB3aWxsIGJlCiAgICBwcm92aWRlZCBoZXJlIHRvIGFsbG93IHRyZWF0bWVudCBhcyBhIFNwbGl0dGFibGUgYERvRm5gYC4KICAgIGBgRG9Gbi5XYXRlcm1hcmtSZXBvcnRlclBhcmFtYGA6IGEgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB0byByZXBvcnQKICAgIG91dHB1dCB3YXRlcm1hcmsgb2YgU3BsaXR0YWJsZSBgYERvRm5gYCBpbXBsZW1lbnRhdGlvbnMuCgogICAgQXJnczoKICAgICAgZWxlbWVudDogVGhlIGVsZW1lbnQgdG8gYmUgcHJvY2Vzc2VkCiAgICAgICphcmdzOiBzaWRlIGlucHV0cwogICAgICAqKmt3YXJnczogb3RoZXIga2V5d29yZCBhcmd1bWVudHMuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIHN0YXJ0X2J1bmRsZShzZWxmKToKICAgICIiIkNhbGxlZCBiZWZvcmUgYSBidW5kbGUgb2YgZWxlbWVudHMgaXMgcHJvY2Vzc2VkIG9uIGEgd29ya2VyLgoKICAgIEVsZW1lbnRzIHRvIGJlIHByb2Nlc3NlZCBhcmUgc3BsaXQgaW50byBidW5kbGVzIGFuZCBkaXN0cmlidXRlZAogICAgdG8gd29ya2Vycy4gQmVmb3JlIGEgd29ya2VyIGNhbGxzIHByb2Nlc3MoKSBvbiB0aGUgZmlyc3QgZWxlbWVudAogICAgb2YgaXRzIGJ1bmRsZSwgaXQgY2FsbHMgdGhpcyBtZXRob2QuCiAgICAiIiIKICAgIHBhc3MKCiAgZGVmIGZpbmlzaF9idW5kbGUoc2VsZik6CiAgICAiIiJDYWxsZWQgYWZ0ZXIgYSBidW5kbGUgb2YgZWxlbWVudHMgaXMgcHJvY2Vzc2VkIG9uIGEgd29ya2VyLgogICAgIiIiCiAgICBwYXNzCgogIGRlZiBnZXRfZnVuY3Rpb25fYXJndW1lbnRzKHNlbGYsIGZ1bmMpOgogICAgcmV0dXJuIGdldF9mdW5jdGlvbl9hcmd1bWVudHMoc2VsZiwgZnVuYykKCiAgIyBUT0RPKHNvdXJhYmhiYWphaik6IERvIHdlIHdhbnQgdG8gcmVtb3ZlIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGVzZSBmcm9tCiAgIyB0aGUgRG9GbiBvciBtYXliZSB0aGUgcnVubmVyCiAgZGVmIGluZmVyX291dHB1dF90eXBlKHNlbGYsIGlucHV0X3R5cGUpOgogICAgIyBUT0RPKHJvYmVydHdiKTogU2lkZSBpbnB1dHMgdHlwZXMuCiAgICAjIFRPRE8ocm9iZXJ0d2IpOiBBc3NlcnQgY29tcGF0aWJpbGl0eSB3aXRoIGlucHV0IHR5cGUgaGludD8KICAgIHJldHVybiBzZWxmLl9zdHJpcF9vdXRwdXRfYW5ub3RhdGlvbnMoCiAgICAgICAgdHJpdmlhbF9pbmZlcmVuY2UuaW5mZXJfcmV0dXJuX3R5cGUoc2VsZi5wcm9jZXNzLCBbaW5wdXRfdHlwZV0pKQoKICBkZWYgX3N0cmlwX291dHB1dF9hbm5vdGF0aW9ucyhzZWxmLCB0eXBlX2hpbnQpOgogICAgYW5ub3RhdGlvbnMgPSAoVGltZXN0YW1wZWRWYWx1ZSwgV2luZG93ZWRWYWx1ZSwgcHZhbHVlLlRhZ2dlZE91dHB1dCkKICAgICMgVE9ETyhyb2JlcnR3Yik6IFRoZXNlIHNob3VsZCBiZSBwYXJhbWV0ZXJpemVkIHR5cGVzIHRoYXQgdGhlCiAgICAjIHR5cGUgaW5mZXJlbmNlciB1bmRlcnN0YW5kcy4KICAgIGlmICh0eXBlX2hpbnQgaW4gYW5ub3RhdGlvbnMKICAgICAgICBvciB0cml2aWFsX2luZmVyZW5jZS5lbGVtZW50X3R5cGUodHlwZV9oaW50KSBpbiBhbm5vdGF0aW9ucyk6CiAgICAgIHJldHVybiBBbnkKICAgIHJldHVybiB0eXBlX2hpbnQKCiAgZGVmIF9wcm9jZXNzX2FyZ3NwZWNfZm4oc2VsZik6CiAgICAiIiJSZXR1cm5zIHRoZSBQeXRob24gY2FsbGFibGUgdGhhdCB3aWxsIGV2ZW50dWFsbHkgYmUgaW52b2tlZC4KCiAgICBUaGlzIHNob3VsZCBpZGVhbGx5IGJlIHRoZSB1c2VyLWxldmVsIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdpdGgKICAgIHRoZSBtYWluIGFuZCAoaWYgYW55KSBzaWRlIGlucHV0cywgYW5kIGlzIHVzZWQgdG8gcmVsYXRlIHRoZSB0eXBlCiAgICBoaW50IHBhcmFtZXRlcnMgd2l0aCB0aGUgaW5wdXQgcGFyYW1ldGVycyAoZS5nLiwgYnkgYXJndW1lbnQgbmFtZSkuCiAgICAiIiIKICAgIHJldHVybiBzZWxmLnByb2Nlc3MKCiAgZGVmIGlzX3Byb2Nlc3NfYm91bmRlZChzZWxmKToKICAgICIiIkNoZWNrcyBpZiBhbiBvYmplY3QgaXMgYSBib3VuZCBtZXRob2Qgb24gYW4gaW5zdGFuY2UuIiIiCiAgICBpZiBub3QgaXNpbnN0YW5jZShzZWxmLnByb2Nlc3MsIHR5cGVzLk1ldGhvZFR5cGUpOgogICAgICByZXR1cm4gRmFsc2UgIyBOb3QgYSBtZXRob2QKICAgIGlmIHNlbGYucHJvY2Vzcy5fX3NlbGZfXyBpcyBOb25lOgogICAgICByZXR1cm4gRmFsc2UgIyBNZXRob2QgaXMgbm90IGJvdW5kCiAgICBpZiBpc3N1YmNsYXNzKHNlbGYucHJvY2Vzcy5fX3NlbGZfXy5fX2NsYXNzX18sIHR5cGUpIG9yIFwKICAgICAgICBzZWxmLnByb2Nlc3MuX19zZWxmX18uX19jbGFzc19fIGlzIHR5cGU6CiAgICAgIHJldHVybiBGYWxzZSAjIE1ldGhvZCBpcyBhIGNsYXNzbWV0aG9kCiAgICByZXR1cm4gVHJ1ZQoKICB1cm5zLlJ1bm5lckFwaUZuLnJlZ2lzdGVyX3BpY2tsZV91cm4ocHl0aG9uX3VybnMuUElDS0xFRF9ET0ZOKQoKCmRlZiBfZm5fdGFrZXNfc2lkZV9pbnB1dHMoZm4pOgogIHRyeToKICAgIGFyZ3NwZWMgPSBnZXRmdWxsYXJnc3BlYyhmbikKICBleGNlcHQgVHlwZUVycm9yOgogICAgIyBXZSBjYW4ndCB0ZWxsOyBtYXliZSBpdCBkb2VzLgogICAgcmV0dXJuIFRydWUKICBpc19ib3VuZCA9IGlzaW5zdGFuY2UoZm4sIHR5cGVzLk1ldGhvZFR5cGUpIGFuZCBmbi5fX3NlbGZfXyBpcyBub3QgTm9uZQoKICB0cnk6CiAgICB2YXJrdyA9IGFyZ3NwZWMudmFya3cKICAgIGt3b25seWFyZ3MgPSBhcmdzcGVjLmt3b25seWFyZ3MKICBleGNlcHQgQXR0cmlidXRlRXJyb3I6ICAjIFB5dGhvbiAyCiAgICB2YXJrdyA9IGFyZ3NwZWMua2V5d29yZHMKICAgIGt3b25seWFyZ3MgPSBbXQoKICByZXR1cm4gKGxlbihhcmdzcGVjLmFyZ3MpICsgbGVuKGt3b25seWFyZ3MpID4gMSArIGlzX2JvdW5kIG9yCiAgICAgICAgICBhcmdzcGVjLnZhcmFyZ3Mgb3IgdmFya3cpCgoKY2xhc3MgQ2FsbGFibGVXcmFwcGVyRG9GbihEb0ZuKToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIEEgRG9GbiAoZnVuY3Rpb24pIG9iamVjdCB3cmFwcGluZyBhIGNhbGxhYmxlIG9iamVjdC4KCiAgVGhlIHB1cnBvc2Ugb2YgdGhpcyBjbGFzcyBpcyB0byBjb252ZW5pZW50bHkgd3JhcCBzaW1wbGUgZnVuY3Rpb25zIGFuZCB1c2UKICB0aGVtIGluIHRyYW5zZm9ybXMuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBmbik6CiAgICAiIiJJbml0aWFsaXplcyBhIENhbGxhYmxlV3JhcHBlckRvRm4gb2JqZWN0IHdyYXBwaW5nIGEgY2FsbGFibGUuCgogICAgQXJnczoKICAgICAgZm46IEEgY2FsbGFibGUgb2JqZWN0LgoKICAgIFJhaXNlczoKICAgICAgVHlwZUVycm9yOiBpZiBmbiBwYXJhbWV0ZXIgaXMgbm90IGEgY2FsbGFibGUgdHlwZS4KICAgICIiIgogICAgaWYgbm90IGNhbGxhYmxlKGZuKToKICAgICAgcmFpc2UgVHlwZUVycm9yKCdFeHBlY3RlZCBhIGNhbGxhYmxlIG9iamVjdCBpbnN0ZWFkIG9mOiAlcicgJSBmbikKCiAgICBzZWxmLl9mbiA9IGZuCiAgICBpZiBpc2luc3RhbmNlKGZuLCAoCiAgICAgICAgdHlwZXMuQnVpbHRpbkZ1bmN0aW9uVHlwZSwgdHlwZXMuTWV0aG9kVHlwZSwgdHlwZXMuRnVuY3Rpb25UeXBlKSk6CiAgICAgIHNlbGYucHJvY2VzcyA9IGZuCiAgICBlbHNlOgogICAgICAjIEZvciBjYXNlcyBzdWNoIGFzIHNldCAvIGxpc3Qgd2hlcmUgZm4gaXMgY2FsbGFibGUgYnV0IG5vdCBhIGZ1bmN0aW9uCiAgICAgIHNlbGYucHJvY2VzcyA9IGxhbWJkYSBlbGVtZW50OiBmbihlbGVtZW50KQoKICAgIHN1cGVyKENhbGxhYmxlV3JhcHBlckRvRm4sIHNlbGYpLl9faW5pdF9fKCkKCiAgZGVmIGRpc3BsYXlfZGF0YShzZWxmKToKICAgICMgSWYgdGhlIGNhbGxhYmxlIGhhcyBhIG5hbWUsIHRoZW4gaXQncyBsaWtlbHkgYSBmdW5jdGlvbiwgYW5kCiAgICAjIHdlIHNob3cgaXRzIG5hbWUuCiAgICAjIE90aGVyd2lzZSwgaXQgbWlnaHQgYmUgYW4gaW5zdGFuY2Ugb2YgYSBjYWxsYWJsZSBjbGFzcy4gV2UKICAgICMgc2hvdyBpdHMgY2xhc3MuCiAgICBkaXNwbGF5X2RhdGFfdmFsdWUgPSAoc2VsZi5fZm4uX19uYW1lX18gaWYgaGFzYXR0cihzZWxmLl9mbiwgJ19fbmFtZV9fJykKICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHNlbGYuX2ZuLl9fY2xhc3NfXykKICAgIHJldHVybiB7J2ZuJzogRGlzcGxheURhdGFJdGVtKGRpc3BsYXlfZGF0YV92YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPSdUcmFuc2Zvcm0gRnVuY3Rpb24nKX0KCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICdDYWxsYWJsZVdyYXBwZXJEb0ZuKCVzKScgJSBzZWxmLl9mbgoKICBkZWYgZGVmYXVsdF90eXBlX2hpbnRzKHNlbGYpOgogICAgdHlwZV9oaW50cyA9IGdldF90eXBlX2hpbnRzKHNlbGYuX2ZuKQogICAgIyBJZiB0aGUgZm4gd2FzIGEgRG9GbiBhbm5vdGF0ZWQgd2l0aCBhIHR5cGUtaGludCB0aGF0IGhpbnRlZCBhIHJldHVybgogICAgIyB0eXBlIGNvbXBhdGlibGUgd2l0aCBJdGVyYWJsZVtBbnldLCB0aGVuIHdlIHN0cmlwIG9mZiB0aGUgb3V0ZXIKICAgICMgY29udGFpbmVyIHR5cGUgZHVlIHRvIHRoZSAnZmxhdHRlbicgcG9ydGlvbiBvZiBGbGF0TWFwLgogICAgIyBUT0RPKHJvYmVydHdiKTogU2hvdWxkIHdlIHJlcXVpcmUgYW4gaXRlcmFibGUgc3BlY2lmaWNhdGlvbiBmb3IgRmxhdE1hcD8KICAgIGlmIHR5cGVfaGludHMub3V0cHV0X3R5cGVzOgogICAgICBhcmdzLCBrd2FyZ3MgPSB0eXBlX2hpbnRzLm91dHB1dF90eXBlcwogICAgICBpZiBsZW4oYXJncykgPT0gMSBhbmQgaXNfY29uc2lzdGVudF93aXRoKGFyZ3NbMF0sIEl0ZXJhYmxlW0FueV0pOgogICAgICAgIHR5cGVfaGludHMgPSB0eXBlX2hpbnRzLmNvcHkoKQogICAgICAgIHR5cGVfaGludHMuc2V0X291dHB1dF90eXBlcyhlbGVtZW50X3R5cGUoYXJnc1swXSksICoqa3dhcmdzKQogICAgcmV0dXJuIHR5cGVfaGludHMKCiAgZGVmIGluZmVyX291dHB1dF90eXBlKHNlbGYsIGlucHV0X3R5cGUpOgogICAgcmV0dXJuIHNlbGYuX3N0cmlwX291dHB1dF9hbm5vdGF0aW9ucygKICAgICAgICB0cml2aWFsX2luZmVyZW5jZS5pbmZlcl9yZXR1cm5fdHlwZShzZWxmLl9mbiwgW2lucHV0X3R5cGVdKSkKCiAgZGVmIF9wcm9jZXNzX2FyZ3NwZWNfZm4oc2VsZik6CiAgICByZXR1cm4gZ2V0YXR0cihzZWxmLl9mbiwgJ19hcmdzcGVjX2ZuJywgc2VsZi5fZm4pCgogIGRlZiBfaW5zcGVjdF9wcm9jZXNzKHNlbGYpOgogICAgcmV0dXJuIGdldGZ1bGxhcmdzcGVjKHNlbGYuX3Byb2Nlc3NfYXJnc3BlY19mbigpKQoKCmNsYXNzIENvbWJpbmVGbihXaXRoVHlwZUhpbnRzLCBIYXNEaXNwbGF5RGF0YSwgdXJucy5SdW5uZXJBcGlGbik6CiAgIiIiQSBmdW5jdGlvbiBvYmplY3QgdXNlZCBieSBhIENvbWJpbmUgdHJhbnNmb3JtIHdpdGggY3VzdG9tIHByb2Nlc3NpbmcuCgogIEEgQ29tYmluZUZuIHNwZWNpZmllcyBob3cgbXVsdGlwbGUgdmFsdWVzIGluIGFsbCBvciBwYXJ0IG9mIGEgUENvbGxlY3Rpb24gY2FuCiAgYmUgbWVyZ2VkIGludG8gYSBzaW5nbGUgdmFsdWUtLS1lc3NlbnRpYWxseSBwcm92aWRpbmcgdGhlIHNhbWUga2luZCBvZgogIGluZm9ybWF0aW9uIGFzIHRoZSBhcmd1bWVudHMgdG8gdGhlIFB5dGhvbiAicmVkdWNlIiBidWlsdGluIChleGNlcHQgZm9yIHRoZQogIGlucHV0IGFyZ3VtZW50LCB3aGljaCBpcyBhbiBpbnN0YW5jZSBvZiBDb21iaW5lRm5Qcm9jZXNzQ29udGV4dCkuIFRoZQogIGNvbWJpbmluZyBwcm9jZXNzIHByb2NlZWRzIGFzIGZvbGxvd3M6CgogIDEuIElucHV0IHZhbHVlcyBhcmUgcGFydGl0aW9uZWQgaW50byBvbmUgb3IgbW9yZSBiYXRjaGVzLgogIDIuIEZvciBlYWNoIGJhdGNoLCB0aGUgY3JlYXRlX2FjY3VtdWxhdG9yIG1ldGhvZCBpcyBpbnZva2VkIHRvIGNyZWF0ZSBhIGZyZXNoCiAgICAgaW5pdGlhbCAiYWNjdW11bGF0b3IiIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgY29tYmluYXRpb24gb2YgemVybyB2YWx1ZXMuCiAgMy4gRm9yIGVhY2ggaW5wdXQgdmFsdWUgaW4gdGhlIGJhdGNoLCB0aGUgYWRkX2lucHV0IG1ldGhvZCBpcyBpbnZva2VkIHRvCiAgICAgY29tYmluZSBtb3JlIHZhbHVlcyB3aXRoIHRoZSBhY2N1bXVsYXRvciBmb3IgdGhhdCBiYXRjaC4KICA0LiBUaGUgbWVyZ2VfYWNjdW11bGF0b3JzIG1ldGhvZCBpcyBpbnZva2VkIHRvIGNvbWJpbmUgYWNjdW11bGF0b3JzIGZyb20KICAgICBzZXBhcmF0ZSBiYXRjaGVzIGludG8gYSBzaW5nbGUgY29tYmluZWQgb3V0cHV0IGFjY3VtdWxhdG9yIHZhbHVlLCBvbmNlIGFsbAogICAgIG9mIHRoZSBhY2N1bXVsYXRvcnMgaGF2ZSBoYWQgYWxsIHRoZSBpbnB1dCB2YWx1ZSBpbiB0aGVpciBiYXRjaGVzIGFkZGVkIHRvCiAgICAgdGhlbS4gVGhpcyBvcGVyYXRpb24gaXMgaW52b2tlZCByZXBlYXRlZGx5LCB1bnRpbCB0aGVyZSBpcyBvbmx5IG9uZQogICAgIGFjY3VtdWxhdG9yIHZhbHVlIGxlZnQuCiAgNS4gVGhlIGV4dHJhY3Rfb3V0cHV0IG9wZXJhdGlvbiBpcyBpbnZva2VkIG9uIHRoZSBmaW5hbCBhY2N1bXVsYXRvciB0byBnZXQKICAgICB0aGUgb3V0cHV0IHZhbHVlLgoKICBOb3RlOiBJZiB0aGlzICoqQ29tYmluZUZuKiogaXMgdXNlZCB3aXRoIGEgdHJhbnNmb3JtIHRoYXQgaGFzIGRlZmF1bHRzLAogICoqYXBwbHkqKiB3aWxsIGJlIGNhbGxlZCB3aXRoIGFuIGVtcHR5IGxpc3QgYXQgZXhwYW5zaW9uIHRpbWUgdG8gZ2V0IHRoZQogIGRlZmF1bHQgdmFsdWUuCiAgIiIiCgogIGRlZiBkZWZhdWx0X2xhYmVsKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCgogIGRlZiBjcmVhdGVfYWNjdW11bGF0b3Ioc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICIiIlJldHVybiBhIGZyZXNoLCBlbXB0eSBhY2N1bXVsYXRvciBmb3IgdGhlIGNvbWJpbmUgb3BlcmF0aW9uLgoKICAgIEFyZ3M6CiAgICAgICphcmdzOiBBZGRpdGlvbmFsIGFyZ3VtZW50cyBhbmQgc2lkZSBpbnB1dHMuCiAgICAgICoqa3dhcmdzOiBBZGRpdGlvbmFsIGFyZ3VtZW50cyBhbmQgc2lkZSBpbnB1dHMuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3Ioc3RyKHNlbGYpKQoKICBkZWYgYWRkX2lucHV0KHNlbGYsIGFjY3VtdWxhdG9yLCBlbGVtZW50LCAqYXJncywgKiprd2FyZ3MpOgogICAgIiIiUmV0dXJuIHJlc3VsdCBvZiBmb2xkaW5nIGVsZW1lbnQgaW50byBhY2N1bXVsYXRvci4KCiAgICBDb21iaW5lRm4gaW1wbGVtZW50b3JzIG11c3Qgb3ZlcnJpZGUgYWRkX2lucHV0LgoKICAgIEFyZ3M6CiAgICAgIGFjY3VtdWxhdG9yOiB0aGUgY3VycmVudCBhY2N1bXVsYXRvcgogICAgICBlbGVtZW50OiB0aGUgZWxlbWVudCB0byBhZGQKICAgICAgKmFyZ3M6IEFkZGl0aW9uYWwgYXJndW1lbnRzIGFuZCBzaWRlIGlucHV0cy4KICAgICAgKiprd2FyZ3M6IEFkZGl0aW9uYWwgYXJndW1lbnRzIGFuZCBzaWRlIGlucHV0cy4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcihzdHIoc2VsZikpCgogIGRlZiBhZGRfaW5wdXRzKHNlbGYsIGFjY3VtdWxhdG9yLCBlbGVtZW50cywgKmFyZ3MsICoqa3dhcmdzKToKICAgICIiIlJldHVybnMgdGhlIHJlc3VsdCBvZiBmb2xkaW5nIGVhY2ggZWxlbWVudCBpbiBlbGVtZW50cyBpbnRvIGFjY3VtdWxhdG9yLgoKICAgIFRoaXMgaXMgcHJvdmlkZWQgaW4gY2FzZSB0aGUgaW1wbGVtZW50YXRpb24gYWZmb3JkcyBtb3JlIGVmZmljaWVudAogICAgYnVsayBhZGRpdGlvbiBvZiBlbGVtZW50cy4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gc2ltcGx5IGxvb3BzCiAgICBvdmVyIHRoZSBpbnB1dHMgaW52b2tpbmcgYWRkX2lucHV0IGZvciBlYWNoIG9uZS4KCiAgICBBcmdzOgogICAgICBhY2N1bXVsYXRvcjogdGhlIGN1cnJlbnQgYWNjdW11bGF0b3IKICAgICAgZWxlbWVudHM6IHRoZSBlbGVtZW50cyB0byBhZGQKICAgICAgKmFyZ3M6IEFkZGl0aW9uYWwgYXJndW1lbnRzIGFuZCBzaWRlIGlucHV0cy4KICAgICAgKiprd2FyZ3M6IEFkZGl0aW9uYWwgYXJndW1lbnRzIGFuZCBzaWRlIGlucHV0cy4KICAgICIiIgogICAgZm9yIGVsZW1lbnQgaW4gZWxlbWVudHM6CiAgICAgIGFjY3VtdWxhdG9yID0gc2VsZi5hZGRfaW5wdXQoYWNjdW11bGF0b3IsIGVsZW1lbnQsICphcmdzLCAqKmt3YXJncykKICAgIHJldHVybiBhY2N1bXVsYXRvcgoKICBkZWYgbWVyZ2VfYWNjdW11bGF0b3JzKHNlbGYsIGFjY3VtdWxhdG9ycywgKmFyZ3MsICoqa3dhcmdzKToKICAgICIiIlJldHVybnMgdGhlIHJlc3VsdCBvZiBtZXJnaW5nIHNldmVyYWwgYWNjdW11bGF0b3JzCiAgICB0byBhIHNpbmdsZSBhY2N1bXVsYXRvciB2YWx1ZS4KCiAgICBBcmdzOgogICAgICBhY2N1bXVsYXRvcnM6IHRoZSBhY2N1bXVsYXRvcnMgdG8gbWVyZ2UKICAgICAgKmFyZ3M6IEFkZGl0aW9uYWwgYXJndW1lbnRzIGFuZCBzaWRlIGlucHV0cy4KICAgICAgKiprd2FyZ3M6IEFkZGl0aW9uYWwgYXJndW1lbnRzIGFuZCBzaWRlIGlucHV0cy4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcihzdHIoc2VsZikpCgogIGRlZiBleHRyYWN0X291dHB1dChzZWxmLCBhY2N1bXVsYXRvciwgKmFyZ3MsICoqa3dhcmdzKToKICAgICIiIlJldHVybiByZXN1bHQgb2YgY29udmVydGluZyBhY2N1bXVsYXRvciBpbnRvIHRoZSBvdXRwdXQgdmFsdWUuCgogICAgQXJnczoKICAgICAgYWNjdW11bGF0b3I6IHRoZSBmaW5hbCBhY2N1bXVsYXRvciB2YWx1ZSBjb21wdXRlZCBieSB0aGlzIENvbWJpbmVGbgogICAgICAgIGZvciB0aGUgZW50aXJlIGlucHV0IGtleSBvciBQQ29sbGVjdGlvbi4KICAgICAgKmFyZ3M6IEFkZGl0aW9uYWwgYXJndW1lbnRzIGFuZCBzaWRlIGlucHV0cy4KICAgICAgKiprd2FyZ3M6IEFkZGl0aW9uYWwgYXJndW1lbnRzIGFuZCBzaWRlIGlucHV0cy4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcihzdHIoc2VsZikpCgogIGRlZiBhcHBseShzZWxmLCBlbGVtZW50cywgKmFyZ3MsICoqa3dhcmdzKToKICAgICIiIlJldHVybnMgcmVzdWx0IG9mIGFwcGx5aW5nIHRoaXMgQ29tYmluZUZuIHRvIHRoZSBpbnB1dCB2YWx1ZXMuCgogICAgQXJnczoKICAgICAgZWxlbWVudHM6IHRoZSBzZXQgb2YgdmFsdWVzIHRvIGNvbWJpbmUuCiAgICAgICphcmdzOiBBZGRpdGlvbmFsIGFyZ3VtZW50cyBhbmQgc2lkZSBpbnB1dHMuCiAgICAgICoqa3dhcmdzOiBBZGRpdGlvbmFsIGFyZ3VtZW50cyBhbmQgc2lkZSBpbnB1dHMuCiAgICAiIiIKICAgIHJldHVybiBzZWxmLmV4dHJhY3Rfb3V0cHV0KAogICAgICAgIHNlbGYuYWRkX2lucHV0cygKICAgICAgICAgICAgc2VsZi5jcmVhdGVfYWNjdW11bGF0b3IoKmFyZ3MsICoqa3dhcmdzKSwgZWxlbWVudHMsCiAgICAgICAgICAgICphcmdzLCAqKmt3YXJncyksCiAgICAgICAgKmFyZ3MsICoqa3dhcmdzKQoKICBkZWYgZm9yX2lucHV0X3R5cGUoc2VsZiwgaW5wdXRfdHlwZSk6CiAgICAiIiJSZXR1cm5zIGEgc3BlY2lhbGl6ZWQgaW1wbGVtZW50YXRpb24gb2Ygc2VsZiwgaWYgaXQgZXhpc3RzLgoKICAgIE90aGVyd2lzZSwgcmV0dXJucyBzZWxmLgoKICAgIEFyZ3M6CiAgICAgIGlucHV0X3R5cGU6IHRoZSB0eXBlIG9mIGlucHV0IGVsZW1lbnRzLgogICAgIiIiCiAgICByZXR1cm4gc2VsZgoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGZyb21fY2FsbGFibGUoZm4pOgogICAgcmV0dXJuIENhbGxhYmxlV3JhcHBlckNvbWJpbmVGbihmbikKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBtYXliZV9mcm9tX2NhbGxhYmxlKGZuKToKICAgIGlmIGlzaW5zdGFuY2UoZm4sIENvbWJpbmVGbik6CiAgICAgIHJldHVybiBmbgogICAgZWxpZiBjYWxsYWJsZShmbik6CiAgICAgIHJldHVybiBDYWxsYWJsZVdyYXBwZXJDb21iaW5lRm4oZm4pCiAgICBlbHNlOgogICAgICByYWlzZSBUeXBlRXJyb3IoJ0V4cGVjdGVkIGEgQ29tYmluZUZuIG9yIGNhbGxhYmxlLCBnb3QgJXInICUgZm4pCgogIGRlZiBnZXRfYWNjdW11bGF0b3JfY29kZXIoc2VsZik6CiAgICByZXR1cm4gY29kZXJzLnJlZ2lzdHJ5LmdldF9jb2RlcihvYmplY3QpCgogIHVybnMuUnVubmVyQXBpRm4ucmVnaXN0ZXJfcGlja2xlX3VybihweXRob25fdXJucy5QSUNLTEVEX0NPTUJJTkVfRk4pCgoKY2xhc3MgQ2FsbGFibGVXcmFwcGVyQ29tYmluZUZuKENvbWJpbmVGbik6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBBIENvbWJpbmVGbiAoZnVuY3Rpb24pIG9iamVjdCB3cmFwcGluZyBhIGNhbGxhYmxlIG9iamVjdC4KCiAgVGhlIHB1cnBvc2Ugb2YgdGhpcyBjbGFzcyBpcyB0byBjb252ZW5pZW50bHkgd3JhcCBzaW1wbGUgZnVuY3Rpb25zIGFuZCB1c2UKICB0aGVtIGluIENvbWJpbmUgdHJhbnNmb3Jtcy4KICAiIiIKICBfRU1QVFkgPSBvYmplY3QoKQoKICBkZWYgX19pbml0X18oc2VsZiwgZm4pOgogICAgIiIiSW5pdGlhbGl6ZXMgYSBDYWxsYWJsZUZuIG9iamVjdCB3cmFwcGluZyBhIGNhbGxhYmxlLgoKICAgIEFyZ3M6CiAgICAgIGZuOiBBIGNhbGxhYmxlIG9iamVjdCB0aGF0IHJlZHVjZXMgZWxlbWVudHMgb2YgYW4gaXRlcmFibGUgdG8gYSBzaW5nbGUKICAgICAgICB2YWx1ZSAobGlrZSB0aGUgYnVpbHRpbnMgc3VtIGFuZCBtYXgpLiBUaGlzIGNhbGxhYmxlIG11c3QgYmUgY2FwYWJsZSBvZgogICAgICAgIHJlY2VpdmluZyB0aGUga2luZCBvZiB2YWx1ZXMgaXQgZ2VuZXJhdGVzIGFzIG91dHB1dCBpbiBpdHMgaW5wdXQsIGFuZAogICAgICAgIGZvciBiZXN0IHJlc3VsdHMsIGl0cyBvcGVyYXRpb24gbXVzdCBiZSBjb21tdXRhdGl2ZSBhbmQgYXNzb2NpYXRpdmUuCgogICAgUmFpc2VzOgogICAgICBUeXBlRXJyb3I6IGlmIGZuIHBhcmFtZXRlciBpcyBub3QgYSBjYWxsYWJsZSB0eXBlLgogICAgIiIiCiAgICBpZiBub3QgY2FsbGFibGUoZm4pOgogICAgICByYWlzZSBUeXBlRXJyb3IoJ0V4cGVjdGVkIGEgY2FsbGFibGUgb2JqZWN0IGluc3RlYWQgb2Y6ICVyJyAlIGZuKQoKICAgIHN1cGVyKENhbGxhYmxlV3JhcHBlckNvbWJpbmVGbiwgc2VsZikuX19pbml0X18oKQogICAgc2VsZi5fZm4gPSBmbgoKICBkZWYgZGlzcGxheV9kYXRhKHNlbGYpOgogICAgcmV0dXJuIHsnZm5fZGQnOiBzZWxmLl9mbn0KCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICJDYWxsYWJsZVdyYXBwZXJDb21iaW5lRm4oJXMpIiAlIHNlbGYuX2ZuCgogIGRlZiBjcmVhdGVfYWNjdW11bGF0b3Ioc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgIHJldHVybiBzZWxmLl9FTVBUWQoKICBkZWYgYWRkX2lucHV0KHNlbGYsIGFjY3VtdWxhdG9yLCBlbGVtZW50LCAqYXJncywgKiprd2FyZ3MpOgogICAgaWYgYWNjdW11bGF0b3IgaXMgc2VsZi5fRU1QVFk6CiAgICAgIHJldHVybiBlbGVtZW50CiAgICByZXR1cm4gc2VsZi5fZm4oW2FjY3VtdWxhdG9yLCBlbGVtZW50XSwgKmFyZ3MsICoqa3dhcmdzKQoKICBkZWYgYWRkX2lucHV0cyhzZWxmLCBhY2N1bXVsYXRvciwgZWxlbWVudHMsICphcmdzLCAqKmt3YXJncyk6CiAgICBpZiBhY2N1bXVsYXRvciBpcyBzZWxmLl9FTVBUWToKICAgICAgcmV0dXJuIHNlbGYuX2ZuKGVsZW1lbnRzLCAqYXJncywgKiprd2FyZ3MpCiAgICBlbGlmIGlzaW5zdGFuY2UoZWxlbWVudHMsIChsaXN0LCB0dXBsZSkpOgogICAgICByZXR1cm4gc2VsZi5fZm4oW2FjY3VtdWxhdG9yXSArIGxpc3QoZWxlbWVudHMpLCAqYXJncywgKiprd2FyZ3MpCgogICAgZGVmIHVuaW9uKCk6CiAgICAgIHlpZWxkIGFjY3VtdWxhdG9yCiAgICAgIGZvciBlIGluIGVsZW1lbnRzOgogICAgICAgIHlpZWxkIGUKICAgIHJldHVybiBzZWxmLl9mbih1bmlvbigpLCAqYXJncywgKiprd2FyZ3MpCgogIGRlZiBtZXJnZV9hY2N1bXVsYXRvcnMoc2VsZiwgYWNjdW11bGF0b3JzLCAqYXJncywgKiprd2FyZ3MpOgogICAgZmlsdGVyX2ZuID0gbGFtYmRhIHg6IHggaXMgbm90IHNlbGYuX0VNUFRZCgogICAgY2xhc3MgUmVpdGVyYWJsZU5vbkVtcHR5QWNjdW11bGF0b3JzKG9iamVjdCk6CiAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKICAgICAgICByZXR1cm4gZmlsdGVyKGZpbHRlcl9mbiwgYWNjdW11bGF0b3JzKQoKICAgICMgSXQncyAod2Vha2x5KSBhc3N1bWVkIHRoYXQgc2VsZi5fZm4gaXMgYXNzb2NpYXRpdmUuCiAgICByZXR1cm4gc2VsZi5fZm4oUmVpdGVyYWJsZU5vbkVtcHR5QWNjdW11bGF0b3JzKCksICphcmdzLCAqKmt3YXJncykKCiAgZGVmIGV4dHJhY3Rfb3V0cHV0KHNlbGYsIGFjY3VtdWxhdG9yLCAqYXJncywgKiprd2FyZ3MpOgogICAgcmV0dXJuIHNlbGYuX2ZuKCgpKSBpZiBhY2N1bXVsYXRvciBpcyBzZWxmLl9FTVBUWSBlbHNlIGFjY3VtdWxhdG9yCgogIGRlZiBkZWZhdWx0X3R5cGVfaGludHMoc2VsZik6CiAgICBmbl9oaW50cyA9IGdldF90eXBlX2hpbnRzKHNlbGYuX2ZuKQogICAgaWYgZm5faGludHMuaW5wdXRfdHlwZXMgaXMgTm9uZToKICAgICAgcmV0dXJuIGZuX2hpbnRzCiAgICBlbHNlOgogICAgICAjIGZuKEl0ZXJhYmxlW1ZdKSAtPiBWIGJlY29tZXMgQ29tYmluZUZuKFYpIC0+IFYKICAgICAgaW5wdXRfYXJncywgaW5wdXRfa3dhcmdzID0gZm5faGludHMuaW5wdXRfdHlwZXMKICAgICAgaWYgbm90IGlucHV0X2FyZ3M6CiAgICAgICAgaWYgbGVuKGlucHV0X2t3YXJncykgPT0gMToKICAgICAgICAgIGlucHV0X2FyZ3MsIGlucHV0X2t3YXJncyA9IHR1cGxlKGlucHV0X2t3YXJncy52YWx1ZXMoKSksIHt9CiAgICAgICAgZWxzZToKICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignQ29tYmluZXIgaW5wdXQgdHlwZSBtdXN0IGJlIHNwZWNpZmllZCBwb3NpdGlvbmFsbHkuJykKICAgICAgaWYgbm90IGlzX2NvbnNpc3RlbnRfd2l0aChpbnB1dF9hcmdzWzBdLCBJdGVyYWJsZVtBbnldKToKICAgICAgICByYWlzZSBUeXBlQ2hlY2tFcnJvcigKICAgICAgICAgICAgJ0FsbCBmdW5jdGlvbnMgZm9yIGEgQ29tYmluZSBQVHJhbnNmb3JtIG11c3QgYWNjZXB0IGEgJwogICAgICAgICAgICAnc2luZ2xlIGFyZ3VtZW50IGNvbXBhdGlibGUgd2l0aDogSXRlcmFibGVbQW55XS4gJwogICAgICAgICAgICAnSW5zdGVhZCBhIGZ1bmN0aW9uIHdpdGggaW5wdXQgdHlwZTogJXMgd2FzIHJlY2VpdmVkLicKICAgICAgICAgICAgJSBpbnB1dF9hcmdzWzBdKQogICAgICBpbnB1dF9hcmdzID0gKGVsZW1lbnRfdHlwZShpbnB1dF9hcmdzWzBdKSwpICsgaW5wdXRfYXJnc1sxOl0KICAgICAgIyBUT0RPKHJvYmVydHdiKTogQXNzZXJ0IG91dHB1dCB0eXBlIGlzIGNvbnNpc3RlbnQgd2l0aCBpbnB1dCB0eXBlPwogICAgICBoaW50cyA9IGZuX2hpbnRzLmNvcHkoKQogICAgICBoaW50cy5zZXRfaW5wdXRfdHlwZXMoKmlucHV0X2FyZ3MsICoqaW5wdXRfa3dhcmdzKQogICAgICByZXR1cm4gaGludHMKCiAgZGVmIGZvcl9pbnB1dF90eXBlKHNlbGYsIGlucHV0X3R5cGUpOgogICAgIyBBdm9pZCBjaXJjdWxhciBpbXBvcnRzLgogICAgZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBjeV9jb21iaW5lcnMKICAgIGlmIHNlbGYuX2ZuIGlzIGFueToKICAgICAgcmV0dXJuIGN5X2NvbWJpbmVycy5BbnlDb21iaW5lRm4oKQogICAgZWxpZiBzZWxmLl9mbiBpcyBhbGw6CiAgICAgIHJldHVybiBjeV9jb21iaW5lcnMuQWxsQ29tYmluZUZuKCkKICAgIGVsc2U6CiAgICAgIGtub3duX3R5cGVzID0gewogICAgICAgICAgKHN1bSwgaW50KTogY3lfY29tYmluZXJzLlN1bUludDY0Rm4oKSwKICAgICAgICAgIChtaW4sIGludCk6IGN5X2NvbWJpbmVycy5NaW5JbnQ2NEZuKCksCiAgICAgICAgICAobWF4LCBpbnQpOiBjeV9jb21iaW5lcnMuTWF4SW50NjRGbigpLAogICAgICAgICAgKHN1bSwgZmxvYXQpOiBjeV9jb21iaW5lcnMuU3VtRmxvYXRGbigpLAogICAgICAgICAgKG1pbiwgZmxvYXQpOiBjeV9jb21iaW5lcnMuTWluRmxvYXRGbigpLAogICAgICAgICAgKG1heCwgZmxvYXQpOiBjeV9jb21iaW5lcnMuTWF4RmxvYXRGbigpLAogICAgICB9CiAgICByZXR1cm4ga25vd25fdHlwZXMuZ2V0KChzZWxmLl9mbiwgaW5wdXRfdHlwZSksIHNlbGYpCgoKY2xhc3MgUGFydGl0aW9uRm4oV2l0aFR5cGVIaW50cyk6CiAgIiIiQSBmdW5jdGlvbiBvYmplY3QgdXNlZCBieSBhIFBhcnRpdGlvbiB0cmFuc2Zvcm0uCgogIEEgUGFydGl0aW9uRm4gc3BlY2lmaWVzIGhvdyBpbmRpdmlkdWFsIHZhbHVlcyBpbiBhIFBDb2xsZWN0aW9uIHdpbGwgYmUgcGxhY2VkCiAgaW50byBzZXBhcmF0ZSBwYXJ0aXRpb25zLCBpbmRleGVkIGJ5IGFuIGludGVnZXIuCiAgIiIiCgogIGRlZiBkZWZhdWx0X2xhYmVsKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCgogIGRlZiBwYXJ0aXRpb25fZm9yKHNlbGYsIGVsZW1lbnQsIG51bV9wYXJ0aXRpb25zLCAqYXJncywgKiprd2FyZ3MpOgogICAgIiIiU3BlY2lmeSB3aGljaCBwYXJ0aXRpb24gd2lsbCByZWNlaXZlIHRoaXMgZWxlbWVudC4KCiAgICBBcmdzOgogICAgICBlbGVtZW50OiBBbiBlbGVtZW50IG9mIHRoZSBpbnB1dCBQQ29sbGVjdGlvbi4KICAgICAgbnVtX3BhcnRpdGlvbnM6IE51bWJlciBvZiBwYXJ0aXRpb25zLCBpLmUuLCBvdXRwdXQgUENvbGxlY3Rpb25zLgogICAgICAqYXJnczogb3B0aW9uYWwgcGFyYW1ldGVycyBhbmQgc2lkZSBpbnB1dHMuCiAgICAgICoqa3dhcmdzOiBvcHRpb25hbCBwYXJhbWV0ZXJzIGFuZCBzaWRlIGlucHV0cy4KCiAgICBSZXR1cm5zOgogICAgICBBbiBpbnRlZ2VyIGluIFswLCBudW1fcGFydGl0aW9ucykuCiAgICAiIiIKICAgIHBhc3MKCgpjbGFzcyBDYWxsYWJsZVdyYXBwZXJQYXJ0aXRpb25GbihQYXJ0aXRpb25Gbik6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBBIFBhcnRpdGlvbkZuIG9iamVjdCB3cmFwcGluZyBhIGNhbGxhYmxlIG9iamVjdC4KCiAgSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3Mgd3JhcCBzaW1wbGUgZnVuY3Rpb25zIGZvciB1c2UgaW4gUGFydGl0aW9uIG9wZXJhdGlvbnMuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBmbik6CiAgICAiIiJJbml0aWFsaXplcyBhIFBhcnRpdGlvbkZuIG9iamVjdCB3cmFwcGluZyBhIGNhbGxhYmxlLgoKICAgIEFyZ3M6CiAgICAgIGZuOiBBIGNhbGxhYmxlIG9iamVjdCwgd2hpY2ggc2hvdWxkIGFjY2VwdCB0aGUgZm9sbG93aW5nIGFyZ3VtZW50czoKICAgICAgICAgICAgZWxlbWVudCAtIGVsZW1lbnQgdG8gYXNzaWduIHRvIGEgcGFydGl0aW9uLgogICAgICAgICAgICBudW1fcGFydGl0aW9ucyAtIG51bWJlciBvZiBvdXRwdXQgcGFydGl0aW9ucy4KICAgICAgICAgIGFuZCBtYXkgYWNjZXB0IGFkZGl0aW9uYWwgYXJndW1lbnRzIGFuZCBzaWRlIGlucHV0cy4KCiAgICBSYWlzZXM6CiAgICAgIFR5cGVFcnJvcjogaWYgZm4gaXMgbm90IGEgY2FsbGFibGUgdHlwZS4KICAgICIiIgogICAgaWYgbm90IGNhbGxhYmxlKGZuKToKICAgICAgcmFpc2UgVHlwZUVycm9yKCdFeHBlY3RlZCBhIGNhbGxhYmxlIG9iamVjdCBpbnN0ZWFkIG9mOiAlcicgJSBmbikKICAgIHNlbGYuX2ZuID0gZm4KCiAgZGVmIHBhcnRpdGlvbl9mb3Ioc2VsZiwgZWxlbWVudCwgbnVtX3BhcnRpdGlvbnMsICphcmdzLCAqKmt3YXJncyk6CiAgICByZXR1cm4gc2VsZi5fZm4oZWxlbWVudCwgbnVtX3BhcnRpdGlvbnMsICphcmdzLCAqKmt3YXJncykKCgpjbGFzcyBQYXJEbyhQVHJhbnNmb3JtV2l0aFNpZGVJbnB1dHMpOgogICIiIkEgOmNsYXNzOmBQYXJEb2AgdHJhbnNmb3JtLgoKICBQcm9jZXNzZXMgYW4gaW5wdXQgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uYCBieSBhcHBseWluZyBhCiAgOmNsYXNzOmBEb0ZuYCB0byBlYWNoIGVsZW1lbnQgYW5kIHJldHVybmluZyB0aGUgYWNjdW11bGF0ZWQgcmVzdWx0cyBpbnRvIGFuCiAgb3V0cHV0IDpjbGFzczpgfmFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbmAuIFRoZSB0eXBlIG9mIHRoZSBlbGVtZW50cyBpcwogIG5vdCBmaXhlZCBhcyBsb25nIGFzIHRoZSA6Y2xhc3M6YERvRm5gIGNhbiBkZWFsIHdpdGggaXQuIEluIHJlYWxpdHkgdGhlIHR5cGUKICBpcyByZXN0cmFpbmVkIHRvIHNvbWUgZXh0ZW50IGJlY2F1c2UgdGhlIGVsZW1lbnRzIHNvbWV0aW1lcyBtdXN0IGJlIHBlcnNpc3RlZAogIHRvIGV4dGVybmFsIHN0b3JhZ2UuIFNlZSB0aGUgOm1ldGg6YC5leHBhbmQoKWAgbWV0aG9kIGNvbW1lbnRzIGZvciBhCiAgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgYWxsIHBvc3NpYmxlIGFyZ3VtZW50cy4KCiAgTm90ZSB0aGF0IHRoZSA6Y2xhc3M6YERvRm5gIG11c3QgcmV0dXJuIGFuIGl0ZXJhYmxlIGZvciBlYWNoIGVsZW1lbnQgb2YgdGhlCiAgaW5wdXQgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uYC4gQW4gZWFzeSB3YXkgdG8gZG8gdGhpcyBpcyB0bwogIHVzZSB0aGUgYGB5aWVsZGBgIGtleXdvcmQgaW4gdGhlIHByb2Nlc3MgbWV0aG9kLgoKICBBcmdzOgogICAgcGNvbGwgKH5hcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb24pOgogICAgICBhIDpjbGFzczpgfmFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbmAgdG8gYmUgcHJvY2Vzc2VkLgogICAgZm4gKERvRm4pOiBhIDpjbGFzczpgRG9GbmAgb2JqZWN0IHRvIGJlIGFwcGxpZWQgdG8gZWFjaCBlbGVtZW50CiAgICAgIG9mICoqcGNvbGwqKiBhcmd1bWVudC4KICAgICphcmdzOiBwb3NpdGlvbmFsIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIDpjbGFzczpgRG9GbmAgb2JqZWN0LgogICAgKiprd2FyZ3M6ICBrZXl3b3JkIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIDpjbGFzczpgRG9GbmAgb2JqZWN0LgoKICBOb3RlIHRoYXQgdGhlIHBvc2l0aW9uYWwgYW5kIGtleXdvcmQgYXJndW1lbnRzIHdpbGwgYmUgcHJvY2Vzc2VkIGluIG9yZGVyCiAgdG8gZGV0ZWN0IDpjbGFzczpgfmFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbmAgcyB0aGF0IHdpbGwgYmUgY29tcHV0ZWQgYXMKICBzaWRlIGlucHV0cyB0byB0aGUgdHJhbnNmb3JtLiBEdXJpbmcgcGlwZWxpbmUgZXhlY3V0aW9uIHdoZW5ldmVyIHRoZQogIDpjbGFzczpgRG9GbmAgb2JqZWN0IGdldHMgZXhlY3V0ZWQgKGl0cyA6bWV0aDpgRG9Gbi5wcm9jZXNzKClgIG1ldGhvZCBnZXRzCiAgY2FsbGVkKSB0aGUgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uYCBhcmd1bWVudHMgd2lsbCBiZQogIHJlcGxhY2VkIGJ5IHZhbHVlcyBmcm9tIHRoZSA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb25gIGluIHRoZQogIGV4YWN0IHBvc2l0aW9ucyB3aGVyZSB0aGV5IGFwcGVhciBpbiB0aGUgYXJndW1lbnQgbGlzdHMuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBmbiwgKmFyZ3MsICoqa3dhcmdzKToKICAgIHN1cGVyKFBhckRvLCBzZWxmKS5fX2luaXRfXyhmbiwgKmFyZ3MsICoqa3dhcmdzKQogICAgIyBUT0RPKHJvYmVydHdiKTogQ2hhbmdlIGFsbCB1c2VzIG9mIHRoZSBkb2ZuIGF0dHJpYnV0ZSB0byB1c2UgZm4gaW5zdGVhZC4KICAgIHNlbGYuZG9mbiA9IHNlbGYuZm4KICAgIHNlbGYub3V0cHV0X3RhZ3MgPSBzZXQoKQoKICAgIGlmIG5vdCBpc2luc3RhbmNlKHNlbGYuZm4sIERvRm4pOgogICAgICByYWlzZSBUeXBlRXJyb3IoJ1BhckRvIG11c3QgYmUgY2FsbGVkIHdpdGggYSBEb0ZuIGluc3RhbmNlLicpCgogICAgIyBWYWxpZGF0ZSB0aGUgRG9GbiBieSBjcmVhdGluZyBhIERvRm5TaWduYXR1cmUKICAgIGZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5jb21tb24gaW1wb3J0IERvRm5TaWduYXR1cmUKICAgIHNlbGYuX3NpZ25hdHVyZSA9IERvRm5TaWduYXR1cmUoc2VsZi5mbikKCiAgZGVmIGRlZmF1bHRfdHlwZV9oaW50cyhzZWxmKToKICAgIHJldHVybiBzZWxmLmZuLmdldF90eXBlX2hpbnRzKCkKCiAgZGVmIGluZmVyX291dHB1dF90eXBlKHNlbGYsIGlucHV0X3R5cGUpOgogICAgcmV0dXJuIHRyaXZpYWxfaW5mZXJlbmNlLmVsZW1lbnRfdHlwZSgKICAgICAgICBzZWxmLmZuLmluZmVyX291dHB1dF90eXBlKGlucHV0X3R5cGUpKQoKICBkZWYgbWFrZV9mbihzZWxmLCBmbik6CiAgICBpZiBpc2luc3RhbmNlKGZuLCBEb0ZuKToKICAgICAgcmV0dXJuIGZuCiAgICByZXR1cm4gQ2FsbGFibGVXcmFwcGVyRG9GbihmbikKCiAgZGVmIF9wcm9jZXNzX2FyZ3NwZWNfZm4oc2VsZik6CiAgICByZXR1cm4gc2VsZi5mbi5fcHJvY2Vzc19hcmdzcGVjX2ZuKCkKCiAgZGVmIGRpc3BsYXlfZGF0YShzZWxmKToKICAgIHJldHVybiB7J2ZuJzogRGlzcGxheURhdGFJdGVtKHNlbGYuZm4uX19jbGFzc19fLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9J1RyYW5zZm9ybSBGdW5jdGlvbicpLAogICAgICAgICAgICAnZm5fZGQnOiBzZWxmLmZufQoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgICMgSW4gdGhlIGNhc2Ugb2YgYSBzdGF0ZWZ1bCBEb0ZuLCB3YXJuIGlmIHRoZSBrZXkgY29kZXIgaXMgbm90CiAgICAjIGRldGVybWluaXN0aWMuCiAgICBpZiBzZWxmLl9zaWduYXR1cmUuaXNfc3RhdGVmdWxfZG9mbigpOgogICAgICBrdl90eXBlX2hpbnQgPSBwY29sbC5lbGVtZW50X3R5cGUKICAgICAgaWYga3ZfdHlwZV9oaW50IGFuZCBrdl90eXBlX2hpbnQgIT0gdHlwZWhpbnRzLkFueToKICAgICAgICBjb2RlciA9IGNvZGVycy5yZWdpc3RyeS5nZXRfY29kZXIoa3ZfdHlwZV9oaW50KQogICAgICAgIGlmIG5vdCBjb2Rlci5pc19rdl9jb2RlcigpOgogICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgICAnSW5wdXQgZWxlbWVudHMgdG8gdGhlIHRyYW5zZm9ybSAlcyB3aXRoIHN0YXRlZnVsIERvRm4gbXVzdCBiZSAnCiAgICAgICAgICAgICAgJ2tleS12YWx1ZSBwYWlycy4nICUgc2VsZikKICAgICAgICBrZXlfY29kZXIgPSBjb2Rlci5rZXlfY29kZXIoKQogICAgICBlbHNlOgogICAgICAgIGtleV9jb2RlciA9IGNvZGVycy5yZWdpc3RyeS5nZXRfY29kZXIodHlwZWhpbnRzLkFueSkKCiAgICAgIGlmIG5vdCBrZXlfY29kZXIuaXNfZGV0ZXJtaW5pc3RpYygpOgogICAgICAgIGxvZ2dpbmcud2FybmluZygKICAgICAgICAgICAgJ0tleSBjb2RlciAlcyBmb3IgdHJhbnNmb3JtICVzIHdpdGggc3RhdGVmdWwgRG9GbiBtYXkgbm90ICcKICAgICAgICAgICAgJ2JlIGRldGVybWluaXN0aWMuIFRoaXMgbWF5IGNhdXNlIGluY29ycmVjdCBiZWhhdmlvciBmb3IgY29tcGxleCAnCiAgICAgICAgICAgICdrZXkgdHlwZXMuIENvbnNpZGVyIGFkZGluZyBhbiBpbnB1dCB0eXBlIGhpbnQgZm9yIHRoaXMgdHJhbnNmb3JtLicsCiAgICAgICAgICAgIGtleV9jb2Rlciwgc2VsZikKCiAgICByZXR1cm4gcHZhbHVlLlBDb2xsZWN0aW9uKHBjb2xsLnBpcGVsaW5lKQoKICBkZWYgd2l0aF9vdXRwdXRzKHNlbGYsICp0YWdzLCAqKm1haW5fa3cpOgogICAgIiIiUmV0dXJucyBhIHRhZ2dlZCB0dXBsZSBhbGxvd2luZyBhY2Nlc3MgdG8gdGhlIG91dHB1dHMgb2YgYQogICAgOmNsYXNzOmBQYXJEb2AuCgogICAgVGhlIHJlc3VsdGluZyBvYmplY3Qgc3VwcG9ydHMgYWNjZXNzIHRvIHRoZQogICAgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uYCBhc3NvY2lhdGVkIHdpdGggYSB0YWcKICAgIChlLmcuIGBgby50YWdgYCwgYGBvW3RhZ11gYCkgYW5kIGl0ZXJhdGluZyBvdmVyIHRoZSBhdmFpbGFibGUgdGFncwogICAgKGUuZy4gYGBmb3IgdGFnIGluIG86IC4uLmBgKS4KCiAgICBBcmdzOgogICAgICAqdGFnczogaWYgbm9uLWVtcHR5LCBsaXN0IG9mIHZhbGlkIHRhZ3MuIElmIGEgbGlzdCBvZiB2YWxpZCB0YWdzIGlzIGdpdmVuLAogICAgICAgIGl0IHdpbGwgYmUgYW4gZXJyb3IgdG8gdXNlIGFuIHVuZGVjbGFyZWQgdGFnIGxhdGVyIGluIHRoZSBwaXBlbGluZS4KICAgICAgKiptYWluX2t3OiBkaWN0aW9uYXJ5IGVtcHR5IG9yIHdpdGggb25lIGtleSBgYCdtYWluJ2BgIGRlZmluaW5nIHRoZSB0YWcgdG8KICAgICAgICBiZSB1c2VkIGZvciB0aGUgbWFpbiBvdXRwdXQgKHdoaWNoIHdpbGwgbm90IGhhdmUgYSB0YWcgYXNzb2NpYXRlZCB3aXRoCiAgICAgICAgaXQpLgoKICAgIFJldHVybnM6CiAgICAgIH5hcGFjaGVfYmVhbS5wdmFsdWUuRG9PdXRwdXRzVHVwbGU6IEFuIG9iamVjdCBvZiB0eXBlCiAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLnB2YWx1ZS5Eb091dHB1dHNUdXBsZWAgdGhhdCBidW5kbGVzIHRvZ2V0aGVyIGFsbAogICAgICB0aGUgb3V0cHV0cyBvZiBhIDpjbGFzczpgUGFyRG9gIHRyYW5zZm9ybSBhbmQgYWxsb3dzIGFjY2Vzc2luZyB0aGUKICAgICAgaW5kaXZpZHVhbCA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb25gIHMgZm9yIGVhY2ggb3V0cHV0CiAgICAgIHVzaW5nIGFuIGBgb2JqZWN0LnRhZ2BgIHN5bnRheC4KCiAgICBSYWlzZXM6CiAgICAgIH5leGNlcHRpb25zLlR5cGVFcnJvcjogaWYgdGhlICoqc2VsZioqIG9iamVjdCBpcyBub3QgYQogICAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbmAgdGhhdCBpcyB0aGUgcmVzdWx0IG9mIGEKICAgICAgICA6Y2xhc3M6YFBhckRvYCB0cmFuc2Zvcm0uCiAgICAgIH5leGNlcHRpb25zLlZhbHVlRXJyb3I6IGlmICoqbWFpbl9rdyoqIGNvbnRhaW5zIGFueSBrZXkgb3RoZXIgdGhhbgogICAgICAgIGBgJ21haW4nYGAuCiAgICAiIiIKICAgIG1haW5fdGFnID0gbWFpbl9rdy5wb3AoJ21haW4nLCBOb25lKQogICAgaWYgbWFpbl9rdzoKICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5leHBlY3RlZCBrZXl3b3JkIGFyZ3VtZW50czogJXMnICUKICAgICAgICAgICAgICAgICAgICAgICBsaXN0KG1haW5fa3cpKQogICAgcmV0dXJuIF9NdWx0aVBhckRvKHNlbGYsIHRhZ3MsIG1haW5fdGFnKQoKICBkZWYgX3BhcmRvX2ZuX2RhdGEoc2VsZik6CiAgICBzaV90YWdzX2FuZF90eXBlcyA9IE5vbmUKICAgIHdpbmRvd2luZyA9IE5vbmUKICAgIHJldHVybiBzZWxmLmZuLCBzZWxmLmFyZ3MsIHNlbGYua3dhcmdzLCBzaV90YWdzX2FuZF90eXBlcywgd2luZG93aW5nCgogIGRlZiB0b19ydW5uZXJfYXBpX3BhcmFtZXRlcihzZWxmLCBjb250ZXh0KToKICAgIGFzc2VydCBpc2luc3RhbmNlKHNlbGYsIFBhckRvKSwgXAogICAgICAgICJleHBlY3RlZCBpbnN0YW5jZSBvZiBQYXJEbywgYnV0IGdvdCAlcyIgJSBzZWxmLl9fY2xhc3NfXwogICAgcGlja2VkX3BhcmRvX2ZuX2RhdGEgPSBwaWNrbGVyLmR1bXBzKHNlbGYuX3BhcmRvX2ZuX2RhdGEoKSkKICAgIHN0YXRlX3NwZWNzLCB0aW1lcl9zcGVjcyA9IHVzZXJzdGF0ZS5nZXRfZG9mbl9zcGVjcyhzZWxmLmZuKQogICAgcmV0dXJuICgKICAgICAgICBjb21tb25fdXJucy5wcmltaXRpdmVzLlBBUl9ETy51cm4sCiAgICAgICAgYmVhbV9ydW5uZXJfYXBpX3BiMi5QYXJEb1BheWxvYWQoCiAgICAgICAgICAgIGRvX2ZuPWJlYW1fcnVubmVyX2FwaV9wYjIuU2RrRnVuY3Rpb25TcGVjKAogICAgICAgICAgICAgICAgZW52aXJvbm1lbnRfaWQ9Y29udGV4dC5kZWZhdWx0X2Vudmlyb25tZW50X2lkKCksCiAgICAgICAgICAgICAgICBzcGVjPWJlYW1fcnVubmVyX2FwaV9wYjIuRnVuY3Rpb25TcGVjKAogICAgICAgICAgICAgICAgICAgIHVybj1weXRob25fdXJucy5QSUNLTEVEX0RPRk5fSU5GTywKICAgICAgICAgICAgICAgICAgICBwYXlsb2FkPXBpY2tlZF9wYXJkb19mbl9kYXRhKSksCiAgICAgICAgICAgIHN0YXRlX3NwZWNzPXtzcGVjLm5hbWU6IHNwZWMudG9fcnVubmVyX2FwaShjb250ZXh0KQogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHNwZWMgaW4gc3RhdGVfc3BlY3N9LAogICAgICAgICAgICB0aW1lcl9zcGVjcz17c3BlYy5uYW1lOiBzcGVjLnRvX3J1bm5lcl9hcGkoY29udGV4dCkKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBzcGVjIGluIHRpbWVyX3NwZWNzfSwKICAgICAgICAgICAgIyBJdCdkIGJlIG5pY2UgdG8gbmFtZSB0aGVzZSBhY2NvcmRpbmcgdG8gdGhlaXIgYWN0dWFsCiAgICAgICAgICAgICMgbmFtZXMvcG9zaXRpb25zIGluIHRoZSBvcmlnbmFsIGFyZ3VtZW50IGxpc3QsIGJ1dCBzdWNoIGEKICAgICAgICAgICAgIyB0cmFuc2Zvcm1hdGlvbiBpcyBjdXJyZW50bHkgaXJyZXZlcnNpYmxlIGdpdmVuIGhvdwogICAgICAgICAgICAjIHJlbW92ZV9vYmplY3RzX2Zyb21fYXJncyBhbmQgaW5zZXJ0X3ZhbHVlc19pbl9hcmdzCiAgICAgICAgICAgICMgYXJlIGN1cnJlbnRseSBpbXBsZW1lbnRlZC4KICAgICAgICAgICAgc2lkZV9pbnB1dHM9ewogICAgICAgICAgICAgICAgInNpZGUlcyIgJSBpeDogc2kudG9fcnVubmVyX2FwaShjb250ZXh0KQogICAgICAgICAgICAgICAgZm9yIGl4LCBzaSBpbiBlbnVtZXJhdGUoc2VsZi5zaWRlX2lucHV0cyl9KSkKCiAgQFBUcmFuc2Zvcm0ucmVnaXN0ZXJfdXJuKAogICAgICBjb21tb25fdXJucy5wcmltaXRpdmVzLlBBUl9ETy51cm4sIGJlYW1fcnVubmVyX2FwaV9wYjIuUGFyRG9QYXlsb2FkKQogIGRlZiBmcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHBhcmRvX3BheWxvYWQsIGNvbnRleHQpOgogICAgYXNzZXJ0IHBhcmRvX3BheWxvYWQuZG9fZm4uc3BlYy51cm4gPT0gcHl0aG9uX3VybnMuUElDS0xFRF9ET0ZOX0lORk8KICAgIGZuLCBhcmdzLCBrd2FyZ3MsIHNpX3RhZ3NfYW5kX3R5cGVzLCB3aW5kb3dpbmcgPSBwaWNrbGVyLmxvYWRzKAogICAgICAgIHBhcmRvX3BheWxvYWQuZG9fZm4uc3BlYy5wYXlsb2FkKQogICAgaWYgc2lfdGFnc19hbmRfdHlwZXM6CiAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ2V4cGxpY2l0IHNpZGUgaW5wdXQgZGF0YScpCiAgICBlbGlmIHdpbmRvd2luZzoKICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignZXhwbGljaXQgd2luZG93aW5nJykKICAgIHJlc3VsdCA9IFBhckRvKGZuLCAqYXJncywgKiprd2FyZ3MpCiAgICAjIFRoaXMgaXMgYW4gb3JkZXJlZCBsaXN0IHN0b3JlZCBhcyBhIGRpY3QgKHNlZSB0aGUgY29tbWVudHMgaW4KICAgICMgdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIgYWJvdmUpLgogICAgaW5kZXhlZF9zaWRlX2lucHV0cyA9IFsKICAgICAgICAoaW50KHJlLm1hdGNoKCdzaWRlKFswLTldKykoLS4qKT8kJywgdGFnKS5ncm91cCgxKSksCiAgICAgICAgIHB2YWx1ZS5Bc1NpZGVJbnB1dC5mcm9tX3J1bm5lcl9hcGkoc2ksIGNvbnRleHQpKQogICAgICAgIGZvciB0YWcsIHNpIGluIHBhcmRvX3BheWxvYWQuc2lkZV9pbnB1dHMuaXRlbXMoKV0KICAgIHJlc3VsdC5zaWRlX2lucHV0cyA9IFtzaSBmb3IgXywgc2kgaW4gc29ydGVkKGluZGV4ZWRfc2lkZV9pbnB1dHMpXQogICAgcmV0dXJuIHJlc3VsdAoKICBkZWYgcnVubmVyX2FwaV9yZXF1aXJlc19rZXllZF9pbnB1dChzZWxmKToKICAgIHJldHVybiB1c2Vyc3RhdGUuaXNfc3RhdGVmdWxfZG9mbihzZWxmLmZuKQoKCmNsYXNzIF9NdWx0aVBhckRvKFBUcmFuc2Zvcm0pOgoKICBkZWYgX19pbml0X18oc2VsZiwgZG9fdHJhbnNmb3JtLCB0YWdzLCBtYWluX3RhZyk6CiAgICBzdXBlcihfTXVsdGlQYXJEbywgc2VsZikuX19pbml0X18oZG9fdHJhbnNmb3JtLmxhYmVsKQogICAgc2VsZi5fZG9fdHJhbnNmb3JtID0gZG9fdHJhbnNmb3JtCiAgICBzZWxmLl90YWdzID0gdGFncwogICAgc2VsZi5fbWFpbl90YWcgPSBtYWluX3RhZwoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgIF8gPSBwY29sbCB8IHNlbGYuX2RvX3RyYW5zZm9ybQogICAgcmV0dXJuIHB2YWx1ZS5Eb091dHB1dHNUdXBsZSgKICAgICAgICBwY29sbC5waXBlbGluZSwgc2VsZi5fZG9fdHJhbnNmb3JtLCBzZWxmLl90YWdzLCBzZWxmLl9tYWluX3RhZykKCgpkZWYgRmxhdE1hcChmbiwgKmFyZ3MsICoqa3dhcmdzKTogICMgcHlsaW50OiBkaXNhYmxlPWludmFsaWQtbmFtZQogICIiIjpmdW5jOmBGbGF0TWFwYCBpcyBsaWtlIDpjbGFzczpgUGFyRG9gIGV4Y2VwdCBpdCB0YWtlcyBhIGNhbGxhYmxlIHRvCiAgc3BlY2lmeSB0aGUgdHJhbnNmb3JtYXRpb24uCgogIFRoZSBjYWxsYWJsZSBtdXN0IHJldHVybiBhbiBpdGVyYWJsZSBmb3IgZWFjaCBlbGVtZW50IG9mIHRoZSBpbnB1dAogIDpjbGFzczpgfmFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbmAuIFRoZSBlbGVtZW50cyBvZiB0aGVzZSBpdGVyYWJsZXMgd2lsbAogIGJlIGZsYXR0ZW5lZCBpbnRvIHRoZSBvdXRwdXQgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uYC4KCiAgQXJnczoKICAgIGZuIChjYWxsYWJsZSk6IGEgY2FsbGFibGUgb2JqZWN0LgogICAgKmFyZ3M6IHBvc2l0aW9uYWwgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgdHJhbnNmb3JtIGNhbGxhYmxlLgogICAgKiprd2FyZ3M6IGtleXdvcmQgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgdHJhbnNmb3JtIGNhbGxhYmxlLgoKICBSZXR1cm5zOgogICAgfmFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbjoKICAgIEEgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uYCBjb250YWluaW5nIHRoZQogICAgOmZ1bmM6YEZsYXRNYXBgIG91dHB1dHMuCgogIFJhaXNlczoKICAgIH5leGNlcHRpb25zLlR5cGVFcnJvcjogSWYgdGhlICoqZm4qKiBwYXNzZWQgYXMgYXJndW1lbnQgaXMgbm90IGEgY2FsbGFibGUuCiAgICAgIFR5cGljYWwgZXJyb3IgaXMgdG8gcGFzcyBhIDpjbGFzczpgRG9GbmAgaW5zdGFuY2Ugd2hpY2ggaXMgc3VwcG9ydGVkIG9ubHkKICAgICAgZm9yIDpjbGFzczpgUGFyRG9gLgogICIiIgogIGxhYmVsID0gJ0ZsYXRNYXAoJXMpJyAlIHB0cmFuc2Zvcm0ubGFiZWxfZnJvbV9jYWxsYWJsZShmbikKICBpZiBub3QgY2FsbGFibGUoZm4pOgogICAgcmFpc2UgVHlwZUVycm9yKAogICAgICAgICdGbGF0TWFwIGNhbiBiZSB1c2VkIG9ubHkgd2l0aCBjYWxsYWJsZSBvYmplY3RzLiAnCiAgICAgICAgJ1JlY2VpdmVkICVyIGluc3RlYWQuJyAlIChmbikpCgogIHBhcmRvID0gUGFyRG8oQ2FsbGFibGVXcmFwcGVyRG9GbihmbiksICphcmdzLCAqKmt3YXJncykKICBwYXJkby5sYWJlbCA9IGxhYmVsCiAgcmV0dXJuIHBhcmRvCgoKZGVmIE1hcChmbiwgKmFyZ3MsICoqa3dhcmdzKTogICMgcHlsaW50OiBkaXNhYmxlPWludmFsaWQtbmFtZQogICIiIjpmdW5jOmBNYXBgIGlzIGxpa2UgOmZ1bmM6YEZsYXRNYXBgIGV4Y2VwdCBpdHMgY2FsbGFibGUgcmV0dXJucyBvbmx5IGEKICBzaW5nbGUgZWxlbWVudC4KCiAgQXJnczoKICAgIGZuIChjYWxsYWJsZSk6IGEgY2FsbGFibGUgb2JqZWN0LgogICAgKmFyZ3M6IHBvc2l0aW9uYWwgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgdHJhbnNmb3JtIGNhbGxhYmxlLgogICAgKiprd2FyZ3M6IGtleXdvcmQgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgdHJhbnNmb3JtIGNhbGxhYmxlLgoKICBSZXR1cm5zOgogICAgfmFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbjoKICAgIEEgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uYCBjb250YWluaW5nIHRoZQogICAgOmZ1bmM6YE1hcGAgb3V0cHV0cy4KCiAgUmFpc2VzOgogICAgfmV4Y2VwdGlvbnMuVHlwZUVycm9yOiBJZiB0aGUgKipmbioqIHBhc3NlZCBhcyBhcmd1bWVudCBpcyBub3QgYSBjYWxsYWJsZS4KICAgICAgVHlwaWNhbCBlcnJvciBpcyB0byBwYXNzIGEgOmNsYXNzOmBEb0ZuYCBpbnN0YW5jZSB3aGljaCBpcyBzdXBwb3J0ZWQgb25seQogICAgICBmb3IgOmNsYXNzOmBQYXJEb2AuCiAgIiIiCiAgaWYgbm90IGNhbGxhYmxlKGZuKToKICAgIHJhaXNlIFR5cGVFcnJvcigKICAgICAgICAnTWFwIGNhbiBiZSB1c2VkIG9ubHkgd2l0aCBjYWxsYWJsZSBvYmplY3RzLiAnCiAgICAgICAgJ1JlY2VpdmVkICVyIGluc3RlYWQuJyAlIChmbikpCiAgaWYgX2ZuX3Rha2VzX3NpZGVfaW5wdXRzKGZuKToKICAgIHdyYXBwZXIgPSBsYW1iZGEgeCwgKmFyZ3MsICoqa3dhcmdzOiBbZm4oeCwgKmFyZ3MsICoqa3dhcmdzKV0KICBlbHNlOgogICAgd3JhcHBlciA9IGxhbWJkYSB4OiBbZm4oeCldCgogIGxhYmVsID0gJ01hcCglcyknICUgcHRyYW5zZm9ybS5sYWJlbF9mcm9tX2NhbGxhYmxlKGZuKQoKICAjIFRPRE8uIFdoYXQgYWJvdXQgY2FsbGFibGUgY2xhc3Nlcz8KICBpZiBoYXNhdHRyKGZuLCAnX19uYW1lX18nKToKICAgIHdyYXBwZXIuX19uYW1lX18gPSBmbi5fX25hbWVfXwoKICAjIFByb3h5IHRoZSB0eXBlLWhpbnQgaW5mb3JtYXRpb24gZnJvbSB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gdG8gdGhpcyBuZXcKICAjIHdyYXBwZWQgZnVuY3Rpb24uCiAgZ2V0X3R5cGVfaGludHMod3JhcHBlcikuaW5wdXRfdHlwZXMgPSBnZXRfdHlwZV9oaW50cyhmbikuaW5wdXRfdHlwZXMKICBvdXRwdXRfaGludCA9IGdldF90eXBlX2hpbnRzKGZuKS5zaW1wbGVfb3V0cHV0X3R5cGUobGFiZWwpCiAgaWYgb3V0cHV0X2hpbnQ6CiAgICBnZXRfdHlwZV9oaW50cyh3cmFwcGVyKS5zZXRfb3V0cHV0X3R5cGVzKHR5cGVoaW50cy5JdGVyYWJsZVtvdXRwdXRfaGludF0pCiAgIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcwogIHdyYXBwZXIuX2FyZ3NwZWNfZm4gPSBmbgogICMgcHlsaW50OiBlbmFibGU9cHJvdGVjdGVkLWFjY2VzcwoKICBwYXJkbyA9IEZsYXRNYXAod3JhcHBlciwgKmFyZ3MsICoqa3dhcmdzKQogIHBhcmRvLmxhYmVsID0gbGFiZWwKICByZXR1cm4gcGFyZG8KCgpkZWYgRmlsdGVyKGZuLCAqYXJncywgKiprd2FyZ3MpOiAgIyBweWxpbnQ6IGRpc2FibGU9aW52YWxpZC1uYW1lCiAgIiIiOmZ1bmM6YEZpbHRlcmAgaXMgYSA6ZnVuYzpgRmxhdE1hcGAgd2l0aCBpdHMgY2FsbGFibGUgZmlsdGVyaW5nIG91dAogIGVsZW1lbnRzLgoKICBBcmdzOgogICAgZm4gKGNhbGxhYmxlKTogYSBjYWxsYWJsZSBvYmplY3QuCiAgICAqYXJnczogcG9zaXRpb25hbCBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSB0cmFuc2Zvcm0gY2FsbGFibGUuCiAgICAqKmt3YXJnczoga2V5d29yZCBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSB0cmFuc2Zvcm0gY2FsbGFibGUuCgogIFJldHVybnM6CiAgICB+YXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uOgogICAgQSA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb25gIGNvbnRhaW5pbmcgdGhlCiAgICA6ZnVuYzpgRmlsdGVyYCBvdXRwdXRzLgoKICBSYWlzZXM6CiAgICB+ZXhjZXB0aW9ucy5UeXBlRXJyb3I6IElmIHRoZSAqKmZuKiogcGFzc2VkIGFzIGFyZ3VtZW50IGlzIG5vdCBhIGNhbGxhYmxlLgogICAgICBUeXBpY2FsIGVycm9yIGlzIHRvIHBhc3MgYSA6Y2xhc3M6YERvRm5gIGluc3RhbmNlIHdoaWNoIGlzIHN1cHBvcnRlZCBvbmx5CiAgICAgIGZvciA6Y2xhc3M6YFBhckRvYC4KICAiIiIKICBpZiBub3QgY2FsbGFibGUoZm4pOgogICAgcmFpc2UgVHlwZUVycm9yKAogICAgICAgICdGaWx0ZXIgY2FuIGJlIHVzZWQgb25seSB3aXRoIGNhbGxhYmxlIG9iamVjdHMuICcKICAgICAgICAnUmVjZWl2ZWQgJXIgaW5zdGVhZC4nICUgKGZuKSkKICB3cmFwcGVyID0gbGFtYmRhIHgsICphcmdzLCAqKmt3YXJnczogW3hdIGlmIGZuKHgsICphcmdzLCAqKmt3YXJncykgZWxzZSBbXQoKICBsYWJlbCA9ICdGaWx0ZXIoJXMpJyAlIHB0cmFuc2Zvcm0ubGFiZWxfZnJvbV9jYWxsYWJsZShmbikKCiAgIyBUT0RPOiBXaGF0IGFib3V0IGNhbGxhYmxlIGNsYXNzZXM/CiAgaWYgaGFzYXR0cihmbiwgJ19fbmFtZV9fJyk6CiAgICB3cmFwcGVyLl9fbmFtZV9fID0gZm4uX19uYW1lX18KICAjIFByb3h5IHRoZSB0eXBlLWhpbnQgaW5mb3JtYXRpb24gZnJvbSB0aGUgZnVuY3Rpb24gYmVpbmcgd3JhcHBlZCwgc2V0dGluZyB0aGUKICAjIG91dHB1dCB0eXBlIHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBpbnB1dCB0eXBlLgogIGdldF90eXBlX2hpbnRzKHdyYXBwZXIpLmlucHV0X3R5cGVzID0gZ2V0X3R5cGVfaGludHMoZm4pLmlucHV0X3R5cGVzCiAgb3V0cHV0X2hpbnQgPSBnZXRfdHlwZV9oaW50cyhmbikuc2ltcGxlX291dHB1dF90eXBlKGxhYmVsKQogIGlmIChvdXRwdXRfaGludCBpcyBOb25lCiAgICAgIGFuZCBnZXRfdHlwZV9oaW50cyh3cmFwcGVyKS5pbnB1dF90eXBlcwogICAgICBhbmQgZ2V0X3R5cGVfaGludHMod3JhcHBlcikuaW5wdXRfdHlwZXNbMF0pOgogICAgb3V0cHV0X2hpbnQgPSBnZXRfdHlwZV9oaW50cyh3cmFwcGVyKS5pbnB1dF90eXBlc1swXQogIGlmIG91dHB1dF9oaW50OgogICAgZ2V0X3R5cGVfaGludHMod3JhcHBlcikuc2V0X291dHB1dF90eXBlcyh0eXBlaGludHMuSXRlcmFibGVbb3V0cHV0X2hpbnRdKQogICMgcHlsaW50OiBkaXNhYmxlPXByb3RlY3RlZC1hY2Nlc3MKICB3cmFwcGVyLl9hcmdzcGVjX2ZuID0gZm4KICAjIHB5bGludDogZW5hYmxlPXByb3RlY3RlZC1hY2Nlc3MKCiAgcGFyZG8gPSBGbGF0TWFwKHdyYXBwZXIsICphcmdzLCAqKmt3YXJncykKICBwYXJkby5sYWJlbCA9IGxhYmVsCiAgcmV0dXJuIHBhcmRvCgoKZGVmIF9jb21iaW5lX3BheWxvYWQoY29tYmluZV9mbiwgY29udGV4dCk6CiAgcmV0dXJuIGJlYW1fcnVubmVyX2FwaV9wYjIuQ29tYmluZVBheWxvYWQoCiAgICAgIGNvbWJpbmVfZm49Y29tYmluZV9mbi50b19ydW5uZXJfYXBpKGNvbnRleHQpLAogICAgICBhY2N1bXVsYXRvcl9jb2Rlcl9pZD1jb250ZXh0LmNvZGVycy5nZXRfaWQoCiAgICAgICAgICBjb21iaW5lX2ZuLmdldF9hY2N1bXVsYXRvcl9jb2RlcigpKSkKCgpjbGFzcyBDb21iaW5lR2xvYmFsbHkoUFRyYW5zZm9ybSk6CiAgIiIiQSA6Y2xhc3M6YENvbWJpbmVHbG9iYWxseWAgdHJhbnNmb3JtLgoKICBSZWR1Y2VzIGEgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uYCB0byBhIHNpbmdsZSB2YWx1ZSBieQogIHByb2dyZXNzaXZlbHkgYXBwbHlpbmcgYSA6Y2xhc3M6YENvbWJpbmVGbmAgdG8gcG9ydGlvbnMgb2YgdGhlCiAgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uYCAoYW5kIHRvIGludGVybWVkaWF0ZSB2YWx1ZXMgY3JlYXRlZAogIHRoZXJlYnkpLiBTZWUgZG9jdW1lbnRhdGlvbiBpbiA6Y2xhc3M6YENvbWJpbmVGbmAgZm9yIGRldGFpbHMgb24gdGhlIHNwZWNpZmljcwogIG9uIGhvdyA6Y2xhc3M6YENvbWJpbmVGbmAgcyBhcmUgYXBwbGllZC4KCiAgQXJnczoKICAgIHBjb2xsICh+YXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uKToKICAgICAgYSA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb25gIHRvIGJlIHJlZHVjZWQgaW50byBhIHNpbmdsZQogICAgICB2YWx1ZS4KICAgIGZuIChjYWxsYWJsZSk6IGEgOmNsYXNzOmBDb21iaW5lRm5gIG9iamVjdCB0aGF0IHdpbGwgYmUgY2FsbGVkIHRvCiAgICAgIHByb2dyZXNzaXZlbHkgcmVkdWNlIHRoZSA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb25gIGludG8KICAgICAgc2luZ2xlIHZhbHVlcywgb3IgYSBjYWxsYWJsZSBzdWl0YWJsZSBmb3Igd3JhcHBpbmcgYnkKICAgICAgOmNsYXNzOmB+YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNhbGxhYmxlV3JhcHBlckNvbWJpbmVGbmAuCiAgICAqYXJnczogcG9zaXRpb25hbCBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSA6Y2xhc3M6YENvbWJpbmVGbmAgb2JqZWN0LgogICAgKiprd2FyZ3M6IGtleXdvcmQgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgOmNsYXNzOmBDb21iaW5lRm5gIG9iamVjdC4KCiAgUmFpc2VzOgogICAgfmV4Y2VwdGlvbnMuVHlwZUVycm9yOiBJZiB0aGUgb3V0cHV0IHR5cGUgb2YgdGhlIGlucHV0CiAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbmAgaXMgbm90IGNvbXBhdGlibGUKICAgICAgd2l0aCBgYEl0ZXJhYmxlW0FdYGAuCgogIFJldHVybnM6CiAgICB+YXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uOiBBIHNpbmdsZS1lbGVtZW50CiAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb25gIGNvbnRhaW5pbmcgdGhlIG1haW4gb3V0cHV0IG9mCiAgICB0aGUgOmNsYXNzOmBDb21iaW5lR2xvYmFsbHlgIHRyYW5zZm9ybS4KCiAgTm90ZSB0aGF0IHRoZSBwb3NpdGlvbmFsIGFuZCBrZXl3b3JkIGFyZ3VtZW50cyB3aWxsIGJlIHByb2Nlc3NlZCBpbiBvcmRlcgogIHRvIGRldGVjdCA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5wdmFsdWUuUFZhbHVlYCBzIHRoYXQgd2lsbCBiZSBjb21wdXRlZCBhcyBzaWRlCiAgaW5wdXRzIHRvIHRoZSB0cmFuc2Zvcm0uCiAgRHVyaW5nIHBpcGVsaW5lIGV4ZWN1dGlvbiB3aGVuZXZlciB0aGUgOmNsYXNzOmBDb21iaW5lRm5gIG9iamVjdCBnZXRzIGV4ZWN1dGVkCiAgKGkuZS4gYW55IG9mIHRoZSA6Y2xhc3M6YENvbWJpbmVGbmAgbWV0aG9kcyBnZXQgY2FsbGVkKSwgdGhlCiAgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucHZhbHVlLlBWYWx1ZWAgYXJndW1lbnRzIHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlaXIKICBhY3R1YWwgdmFsdWUgaW4gdGhlIGV4YWN0IHBvc2l0aW9uIHdoZXJlIHRoZXkgYXBwZWFyIGluIHRoZSBhcmd1bWVudCBsaXN0cy4KICAiIiIKICBoYXNfZGVmYXVsdHMgPSBUcnVlCiAgYXNfdmlldyA9IEZhbHNlCiAgZmFub3V0ID0gTm9uZQoKICBkZWYgX19pbml0X18oc2VsZiwgZm4sICphcmdzLCAqKmt3YXJncyk6CiAgICBpZiBub3QgKGlzaW5zdGFuY2UoZm4sIENvbWJpbmVGbikgb3IgY2FsbGFibGUoZm4pKToKICAgICAgcmFpc2UgVHlwZUVycm9yKAogICAgICAgICAgJ0NvbWJpbmVHbG9iYWxseSBjYW4gYmUgdXNlZCBvbmx5IHdpdGggY29tYmluZUZuIG9iamVjdHMuICcKICAgICAgICAgICdSZWNlaXZlZCAlciBpbnN0ZWFkLicgJSAoZm4pKQoKICAgIHN1cGVyKENvbWJpbmVHbG9iYWxseSwgc2VsZikuX19pbml0X18oKQogICAgc2VsZi5mbiA9IGZuCiAgICBzZWxmLmFyZ3MgPSBhcmdzCiAgICBzZWxmLmt3YXJncyA9IGt3YXJncwoKICBkZWYgZGlzcGxheV9kYXRhKHNlbGYpOgogICAgcmV0dXJuIHsKICAgICAgICAnY29tYmluZV9mbic6CiAgICAgICAgICAgIERpc3BsYXlEYXRhSXRlbShzZWxmLmZuLl9fY2xhc3NfXywgbGFiZWw9J0NvbWJpbmUgRnVuY3Rpb24nKSwKICAgICAgICAnY29tYmluZV9mbl9kZCc6CiAgICAgICAgICAgIHNlbGYuZm4sCiAgICB9CgogIGRlZiBkZWZhdWx0X2xhYmVsKHNlbGYpOgogICAgaWYgc2VsZi5mYW5vdXQgaXMgTm9uZToKICAgICAgcmV0dXJuICclcyglcyknICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLAogICAgICAgICAgICAgICAgICAgICAgICAgcHRyYW5zZm9ybS5sYWJlbF9mcm9tX2NhbGxhYmxlKHNlbGYuZm4pKQogICAgZWxzZToKICAgICAgcmV0dXJuICclcyglcywgZmFub3V0PSVzKScgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0cmFuc2Zvcm0ubGFiZWxfZnJvbV9jYWxsYWJsZShzZWxmLmZuKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYW5vdXQpCgogIGRlZiBfY2xvbmUoc2VsZiwgKipleHRyYV9hdHRyaWJ1dGVzKToKICAgIGNsb25lID0gY29weS5jb3B5KHNlbGYpCiAgICBjbG9uZS5fX2RpY3RfXy51cGRhdGUoZXh0cmFfYXR0cmlidXRlcykKICAgIHJldHVybiBjbG9uZQoKICBkZWYgd2l0aF9mYW5vdXQoc2VsZiwgZmFub3V0KToKICAgIHJldHVybiBzZWxmLl9jbG9uZShmYW5vdXQ9ZmFub3V0KQoKICBkZWYgd2l0aF9kZWZhdWx0cyhzZWxmLCBoYXNfZGVmYXVsdHM9VHJ1ZSk6CiAgICByZXR1cm4gc2VsZi5fY2xvbmUoaGFzX2RlZmF1bHRzPWhhc19kZWZhdWx0cykKCiAgZGVmIHdpdGhvdXRfZGVmYXVsdHMoc2VsZik6CiAgICByZXR1cm4gc2VsZi53aXRoX2RlZmF1bHRzKEZhbHNlKQoKICBkZWYgYXNfc2luZ2xldG9uX3ZpZXcoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fY2xvbmUoYXNfdmlldz1UcnVlKQoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgIGRlZiBhZGRfaW5wdXRfdHlwZXModHJhbnNmb3JtKToKICAgICAgdHlwZV9oaW50cyA9IHNlbGYuZ2V0X3R5cGVfaGludHMoKQogICAgICBpZiB0eXBlX2hpbnRzLmlucHV0X3R5cGVzOgogICAgICAgIHJldHVybiB0cmFuc2Zvcm0ud2l0aF9pbnB1dF90eXBlcyh0eXBlX2hpbnRzLmlucHV0X3R5cGVzWzBdWzBdKQogICAgICByZXR1cm4gdHJhbnNmb3JtCgogICAgY29tYmluZV9wZXJfa2V5ID0gQ29tYmluZVBlcktleShzZWxmLmZuLCAqc2VsZi5hcmdzLCAqKnNlbGYua3dhcmdzKQogICAgaWYgc2VsZi5mYW5vdXQ6CiAgICAgIGNvbWJpbmVfcGVyX2tleSA9IGNvbWJpbmVfcGVyX2tleS53aXRoX2hvdF9rZXlfZmFub3V0KHNlbGYuZmFub3V0KQoKICAgIGNvbWJpbmVkID0gKHBjb2xsCiAgICAgICAgICAgICAgICB8ICdLZXlXaXRoVm9pZCcgPj4gYWRkX2lucHV0X3R5cGVzKAogICAgICAgICAgICAgICAgICAgIE1hcChsYW1iZGEgdjogKE5vbmUsIHYpKS53aXRoX291dHB1dF90eXBlcygKICAgICAgICAgICAgICAgICAgICAgICAgS1ZbTm9uZSwgcGNvbGwuZWxlbWVudF90eXBlXSkpCiAgICAgICAgICAgICAgICB8ICdDb21iaW5lUGVyS2V5JyA+PiBjb21iaW5lX3Blcl9rZXkKICAgICAgICAgICAgICAgIHwgJ1VuS2V5JyA+PiBNYXAobGFtYmRhIGtfdjoga192WzFdKSkKCiAgICBpZiBub3Qgc2VsZi5oYXNfZGVmYXVsdHMgYW5kIG5vdCBzZWxmLmFzX3ZpZXc6CiAgICAgIHJldHVybiBjb21iaW5lZAoKICAgIGlmIHNlbGYuaGFzX2RlZmF1bHRzOgogICAgICBjb21iaW5lX2ZuID0gKAogICAgICAgICAgc2VsZi5mbiBpZiBpc2luc3RhbmNlKHNlbGYuZm4sIENvbWJpbmVGbikKICAgICAgICAgIGVsc2UgQ29tYmluZUZuLmZyb21fY2FsbGFibGUoc2VsZi5mbikpCiAgICAgIGRlZmF1bHRfdmFsdWUgPSBjb21iaW5lX2ZuLmFwcGx5KFtdLCAqc2VsZi5hcmdzLCAqKnNlbGYua3dhcmdzKQogICAgZWxzZToKICAgICAgZGVmYXVsdF92YWx1ZSA9IHB2YWx1ZS5Bc1NpbmdsZXRvbi5fTk9fREVGQVVMVCAgIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcwogICAgdmlldyA9IHB2YWx1ZS5Bc1NpbmdsZXRvbihjb21iaW5lZCwgZGVmYXVsdF92YWx1ZT1kZWZhdWx0X3ZhbHVlKQogICAgaWYgc2VsZi5hc192aWV3OgogICAgICByZXR1cm4gdmlldwogICAgZWxzZToKICAgICAgaWYgcGNvbGwud2luZG93aW5nLndpbmRvd2ZuICE9IEdsb2JhbFdpbmRvd3MoKToKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgICAiRGVmYXVsdCB2YWx1ZXMgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkIGluIENvbWJpbmVHbG9iYWxseSgpIGlmIHRoZSAiCiAgICAgICAgICAgICJvdXRwdXQgIFBDb2xsZWN0aW9uIGlzIG5vdCB3aW5kb3dlZCBieSBHbG9iYWxXaW5kb3dzLiAiCiAgICAgICAgICAgICJJbnN0ZWFkLCB1c2UgQ29tYmluZUdsb2JhbGx5KCkud2l0aG91dF9kZWZhdWx0cygpIHRvIG91dHB1dCAiCiAgICAgICAgICAgICJhbiBlbXB0eSBQQ29sbGVjdGlvbiBpZiB0aGUgaW5wdXQgUENvbGxlY3Rpb24gaXMgZW1wdHksICIKICAgICAgICAgICAgIm9yIENvbWJpbmVHbG9iYWxseSgpLmFzX3NpbmdsZXRvbl92aWV3KCkgdG8gZ2V0IHRoZSBkZWZhdWx0ICIKICAgICAgICAgICAgIm91dHB1dCBvZiB0aGUgQ29tYmluZUZuIGlmIHRoZSBpbnB1dCBQQ29sbGVjdGlvbiBpcyBlbXB0eS4iKQoKICAgICAgZGVmIHR5cGVkKHRyYW5zZm9ybSk6CiAgICAgICAgIyBUT0RPKHJvYmVydHdiKTogV2Ugc2hvdWxkIGluZmVyIHRoaXMuCiAgICAgICAgaWYgY29tYmluZWQuZWxlbWVudF90eXBlOgogICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybS53aXRoX291dHB1dF90eXBlcyhjb21iaW5lZC5lbGVtZW50X3R5cGUpCiAgICAgICAgcmV0dXJuIHRyYW5zZm9ybQogICAgICByZXR1cm4gKHBjb2xsLnBpcGVsaW5lCiAgICAgICAgICAgICAgfCAnRG9PbmNlJyA+PiBDcmVhdGUoW05vbmVdKQogICAgICAgICAgICAgIHwgJ0luamVjdERlZmF1bHQnID4+IHR5cGVkKE1hcChsYW1iZGEgXywgczogcywgdmlldykpKQoKCmNsYXNzIENvbWJpbmVQZXJLZXkoUFRyYW5zZm9ybVdpdGhTaWRlSW5wdXRzKToKICAiIiJBIHBlci1rZXkgQ29tYmluZSB0cmFuc2Zvcm0uCgogIElkZW50aWZpZXMgc2V0cyBvZiB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzYW1lIGtleSBpbiB0aGUgaW5wdXQKICBQQ29sbGVjdGlvbiwgdGhlbiBhcHBsaWVzIGEgQ29tYmluZUZuIHRvIGNvbmRlbnNlIHRob3NlIHNldHMgdG8gc2luZ2xlCiAgdmFsdWVzLiBTZWUgZG9jdW1lbnRhdGlvbiBpbiBDb21iaW5lRm4gZm9yIGRldGFpbHMgb24gdGhlIHNwZWNpZmljcyBvbiBob3cKICBDb21iaW5lRm5zIGFyZSBhcHBsaWVkLgoKICBBcmdzOgogICAgcGNvbGw6IGlucHV0IHBjb2xsZWN0aW9uLgogICAgZm46IGluc3RhbmNlIG9mIENvbWJpbmVGbiB0byBhcHBseSB0byBhbGwgdmFsdWVzIHVuZGVyIHRoZSBzYW1lIGtleSBpbgogICAgICBwY29sbCwgb3IgYSBjYWxsYWJsZSB3aG9zZSBzaWduYXR1cmUgaXMgYGBmKGl0ZXJhYmxlLCAqYXJncywgKiprd2FyZ3MpYGAKICAgICAgKGUuZy4sIHN1bSwgbWF4KS4KICAgICphcmdzOiBhcmd1bWVudHMgYW5kIHNpZGUgaW5wdXRzLCBwYXNzZWQgZGlyZWN0bHkgdG8gdGhlIENvbWJpbmVGbi4KICAgICoqa3dhcmdzOiBhcmd1bWVudHMgYW5kIHNpZGUgaW5wdXRzLCBwYXNzZWQgZGlyZWN0bHkgdG8gdGhlIENvbWJpbmVGbi4KCiAgUmV0dXJuczoKICAgIEEgUE9iamVjdCBob2xkaW5nIHRoZSByZXN1bHQgb2YgdGhlIGNvbWJpbmUgb3BlcmF0aW9uLgogICIiIgogIGRlZiB3aXRoX2hvdF9rZXlfZmFub3V0KHNlbGYsIGZhbm91dCk6CiAgICAiIiJBIHBlci1rZXkgY29tYmluZSBvcGVyYXRpb24gbGlrZSBzZWxmIGJ1dCB3aXRoIHR3byBsZXZlbHMgb2YgYWdncmVnYXRpb24uCgogICAgSWYgYSBnaXZlbiBrZXkgaXMgcHJvZHVjZWQgYnkgdG9vIG1hbnkgdXBzdHJlYW0gYnVuZGxlcywgdGhlIGZpbmFsCiAgICByZWR1Y3Rpb24gY2FuIGJlY29tZSBhIGJvdHRsZW5lY2sgZGVzcGl0ZSBwYXJ0aWFsIGNvbWJpbmluZyBiZWluZyBsaWZ0ZWQKICAgIHByZS1Hcm91cEJ5S2V5LiAgSW4gdGhlc2UgY2FzZXMgaXQgY2FuIGJlIGhlbHBmdWwgdG8gcGVyZm9ybSBpbnRlcm1lZGlhdGUKICAgIHBhcnRpYWwgYWdncmVnYXRpb25zIGluIHBhcmFsbGVsIGFuZCB0aGVuIHJlLWdyb3VwIHRvIHBlZm9ybSBhIGZpbmFsCiAgICAocGVyLWtleSkgY29tYmluZS4gIFRoaXMgaXMgYWxzbyB1c2VmdWwgZm9yIGhpZ2gtdm9sdW1lIGtleXMgaW4gc3RyZWFtaW5nCiAgICB3aGVyZSBjb21iaW5lcnMgYXJlIG5vdCBnZW5lcmFsbHkgbGlmdGVkIGZvciBsYXRlbmN5IHJlYXNvbnMuCgogICAgTm90ZSB0aGF0IGEgZmFub3V0IGdyZWF0ZXIgdGhhbiAxIHJlcXVpcmVzIHRoZSBkYXRhIHRvIGJlIHNlbnQgdGhyb3VnaAogICAgdHdvIEdyb3VwQnlLZXlzLCBhbmQgYSBoaWdoIGZhbm91dCBjYW4gYWxzbyByZXN1bHQgaW4gbW9yZSBzaHVmZmxlIGRhdGEKICAgIGR1ZSB0byBsZXNzIHBlci1idW5kbGUgY29tYmluaW5nLiBTZXR0aW5nIHRoZSBmYW5vdXQgZm9yIGEga2V5IGF0IDEgb3IgbGVzcwogICAgcGxhY2VzIHZhbHVlcyBvbiB0aGUgImNvbGQga2V5IiBwYXRoIHRoYXQgc2tpcCB0aGUgaW50ZXJtZWRpYXRlIGxldmVsIG9mCiAgICBhZ2dyZWdhdGlvbi4KCiAgICBBcmdzOgogICAgICBmYW5vdXQ6IGVpdGhlciBOb25lLCBmb3Igbm8gZmFub3V0LCBhbiBpbnQsIGZvciBhIGNvbnN0YW50LWRlZ3JlZSBmYW5vdXQsCiAgICAgICAgICBvciBhIGNhbGxhYmxlIG1hcHBpbmcga2V5cyB0byBhIGtleS1zcGVjaWZpYyBkZWdyZWUgb2YgZmFub3V0LgoKICAgIFJldHVybnM6CiAgICAgIEEgcGVyLWtleSBjb21iaW5pbmcgUFRyYW5zZm9ybSB3aXRoIHRoZSBzcGVjaWZpZWQgZmFub3V0LgogICAgIiIiCiAgICBmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzIGltcG9ydCBjdXJyeV9jb21iaW5lX2ZuCiAgICBpZiBmYW5vdXQgaXMgTm9uZToKICAgICAgcmV0dXJuIHNlbGYKICAgIGVsc2U6CiAgICAgIHJldHVybiBfQ29tYmluZVBlcktleVdpdGhIb3RLZXlGYW5vdXQoCiAgICAgICAgICBjdXJyeV9jb21iaW5lX2ZuKHNlbGYuZm4sIHNlbGYuYXJncywgc2VsZi5rd2FyZ3MpLCBmYW5vdXQpCgogIGRlZiBkaXNwbGF5X2RhdGEoc2VsZik6CiAgICByZXR1cm4geydjb21iaW5lX2ZuJzoKICAgICAgICAgICAgRGlzcGxheURhdGFJdGVtKHNlbGYuZm4uX19jbGFzc19fLCBsYWJlbD0nQ29tYmluZSBGdW5jdGlvbicpLAogICAgICAgICAgICAnY29tYmluZV9mbl9kZCc6CiAgICAgICAgICAgIHNlbGYuZm59CgogIGRlZiBtYWtlX2ZuKHNlbGYsIGZuKToKICAgIHNlbGYuX2ZuX2xhYmVsID0gcHRyYW5zZm9ybS5sYWJlbF9mcm9tX2NhbGxhYmxlKGZuKQogICAgcmV0dXJuIGZuIGlmIGlzaW5zdGFuY2UoZm4sIENvbWJpbmVGbikgZWxzZSBDb21iaW5lRm4uZnJvbV9jYWxsYWJsZShmbikKCiAgZGVmIGRlZmF1bHRfbGFiZWwoc2VsZik6CiAgICByZXR1cm4gJyVzKCVzKScgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHNlbGYuX2ZuX2xhYmVsKQoKICBkZWYgX3Byb2Nlc3NfYXJnc3BlY19mbihzZWxmKToKICAgIHJldHVybiBsYW1iZGEgZWxlbWVudCwgKmFyZ3MsICoqa3dhcmdzOiBOb25lCgogIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgYXJncywga3dhcmdzID0gdXRpbC5pbnNlcnRfdmFsdWVzX2luX2FyZ3MoCiAgICAgICAgc2VsZi5hcmdzLCBzZWxmLmt3YXJncywgc2VsZi5zaWRlX2lucHV0cykKICAgIHJldHVybiBwY29sbCB8IEdyb3VwQnlLZXkoKSB8ICdDb21iaW5lJyA+PiBDb21iaW5lVmFsdWVzKAogICAgICAgIHNlbGYuZm4sICphcmdzLCAqKmt3YXJncykKCiAgZGVmIGRlZmF1bHRfdHlwZV9oaW50cyhzZWxmKToKICAgIGhpbnRzID0gc2VsZi5mbi5nZXRfdHlwZV9oaW50cygpLmNvcHkoKQogICAgaWYgaGludHMuaW5wdXRfdHlwZXM6CiAgICAgIEsgPSB0eXBlaGludHMuVHlwZVZhcmlhYmxlKCdLJykKICAgICAgYXJncywga3dhcmdzID0gaGludHMuaW5wdXRfdHlwZXMKICAgICAgYXJncyA9ICh0eXBlaGludHMuVHVwbGVbSywgYXJnc1swXV0sKSArIGFyZ3NbMTpdCiAgICAgIGhpbnRzLnNldF9pbnB1dF90eXBlcygqYXJncywgKiprd2FyZ3MpCiAgICBlbHNlOgogICAgICBLID0gdHlwZWhpbnRzLkFueQogICAgaWYgaGludHMub3V0cHV0X3R5cGVzOgogICAgICBtYWluX291dHB1dF90eXBlID0gaGludHMuc2ltcGxlX291dHB1dF90eXBlKCcnKQogICAgICBoaW50cy5zZXRfb3V0cHV0X3R5cGVzKHR5cGVoaW50cy5UdXBsZVtLLCBtYWluX291dHB1dF90eXBlXSkKICAgIHJldHVybiBoaW50cwoKICBkZWYgdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoc2VsZiwgY29udGV4dCk6CiAgICBpZiBzZWxmLmFyZ3Mgb3Igc2VsZi5rd2FyZ3M6CiAgICAgIGZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMgaW1wb3J0IGN1cnJ5X2NvbWJpbmVfZm4KICAgICAgY29tYmluZV9mbiA9IGN1cnJ5X2NvbWJpbmVfZm4oc2VsZi5mbiwgc2VsZi5hcmdzLCBzZWxmLmt3YXJncykKICAgIGVsc2U6CiAgICAgIGNvbWJpbmVfZm4gPSBzZWxmLmZuCiAgICByZXR1cm4gKAogICAgICAgIGNvbW1vbl91cm5zLmNvbXBvc2l0ZXMuQ09NQklORV9QRVJfS0VZLnVybiwKICAgICAgICBfY29tYmluZV9wYXlsb2FkKGNvbWJpbmVfZm4sIGNvbnRleHQpKQoKICBAUFRyYW5zZm9ybS5yZWdpc3Rlcl91cm4oCiAgICAgIGNvbW1vbl91cm5zLmNvbXBvc2l0ZXMuQ09NQklORV9QRVJfS0VZLnVybiwKICAgICAgYmVhbV9ydW5uZXJfYXBpX3BiMi5Db21iaW5lUGF5bG9hZCkKICBkZWYgZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcihjb21iaW5lX3BheWxvYWQsIGNvbnRleHQpOgogICAgcmV0dXJuIENvbWJpbmVQZXJLZXkoCiAgICAgICAgQ29tYmluZUZuLmZyb21fcnVubmVyX2FwaShjb21iaW5lX3BheWxvYWQuY29tYmluZV9mbiwgY29udGV4dCkpCgogIGRlZiBydW5uZXJfYXBpX3JlcXVpcmVzX2tleWVkX2lucHV0KHNlbGYpOgogICAgcmV0dXJuIFRydWUKCgojIFRPRE8ocm9iZXJ0d2IpOiBSZW5hbWUgdG8gQ29tYmluZUdyb3VwZWRWYWx1ZXM/CmNsYXNzIENvbWJpbmVWYWx1ZXMoUFRyYW5zZm9ybVdpdGhTaWRlSW5wdXRzKToKCiAgZGVmIG1ha2VfZm4oc2VsZiwgZm4pOgogICAgcmV0dXJuIGZuIGlmIGlzaW5zdGFuY2UoZm4sIENvbWJpbmVGbikgZWxzZSBDb21iaW5lRm4uZnJvbV9jYWxsYWJsZShmbikKCiAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICBhcmdzLCBrd2FyZ3MgPSB1dGlsLmluc2VydF92YWx1ZXNfaW5fYXJncygKICAgICAgICBzZWxmLmFyZ3MsIHNlbGYua3dhcmdzLCBzZWxmLnNpZGVfaW5wdXRzKQoKICAgIGlucHV0X3R5cGUgPSBwY29sbC5lbGVtZW50X3R5cGUKICAgIGtleV90eXBlID0gTm9uZQogICAgaWYgaW5wdXRfdHlwZSBpcyBub3QgTm9uZToKICAgICAga2V5X3R5cGUsIF8gPSBpbnB1dF90eXBlLnR1cGxlX3R5cGVzCgogICAgcnVudGltZV90eXBlX2NoZWNrID0gKAogICAgICAgIHBjb2xsLnBpcGVsaW5lLl9vcHRpb25zLnZpZXdfYXMoVHlwZU9wdGlvbnMpLnJ1bnRpbWVfdHlwZV9jaGVjaykKICAgIHJldHVybiBwY29sbCB8IFBhckRvKAogICAgICAgIENvbWJpbmVWYWx1ZXNEb0ZuKGtleV90eXBlLCBzZWxmLmZuLCBydW50aW1lX3R5cGVfY2hlY2spLAogICAgICAgICphcmdzLCAqKmt3YXJncykKCiAgZGVmIHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHNlbGYsIGNvbnRleHQpOgogICAgaWYgc2VsZi5hcmdzIG9yIHNlbGYua3dhcmdzOgogICAgICBmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzIGltcG9ydCBjdXJyeV9jb21iaW5lX2ZuCiAgICAgIGNvbWJpbmVfZm4gPSBjdXJyeV9jb21iaW5lX2ZuKHNlbGYuZm4sIHNlbGYuYXJncywgc2VsZi5rd2FyZ3MpCiAgICBlbHNlOgogICAgICBjb21iaW5lX2ZuID0gc2VsZi5mbgogICAgcmV0dXJuICgKICAgICAgICBjb21tb25fdXJucy5jb21iaW5lX2NvbXBvbmVudHMuQ09NQklORV9HUk9VUEVEX1ZBTFVFUy51cm4sCiAgICAgICAgX2NvbWJpbmVfcGF5bG9hZChjb21iaW5lX2ZuLCBjb250ZXh0KSkKCiAgQFBUcmFuc2Zvcm0ucmVnaXN0ZXJfdXJuKAogICAgICBjb21tb25fdXJucy5jb21iaW5lX2NvbXBvbmVudHMuQ09NQklORV9HUk9VUEVEX1ZBTFVFUy51cm4sCiAgICAgIGJlYW1fcnVubmVyX2FwaV9wYjIuQ29tYmluZVBheWxvYWQpCiAgZGVmIGZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXIoY29tYmluZV9wYXlsb2FkLCBjb250ZXh0KToKICAgIHJldHVybiBDb21iaW5lVmFsdWVzKAogICAgICAgIENvbWJpbmVGbi5mcm9tX3J1bm5lcl9hcGkoY29tYmluZV9wYXlsb2FkLmNvbWJpbmVfZm4sIGNvbnRleHQpKQoKCmNsYXNzIENvbWJpbmVWYWx1ZXNEb0ZuKERvRm4pOgogICIiIkRvRm4gZm9yIHBlcmZvcm1pbmcgcGVyLWtleSBDb21iaW5lIHRyYW5zZm9ybXMuIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBpbnB1dF9wY29sbF90eXBlLCBjb21iaW5lZm4sIHJ1bnRpbWVfdHlwZV9jaGVjayk6CiAgICBzdXBlcihDb21iaW5lVmFsdWVzRG9Gbiwgc2VsZikuX19pbml0X18oKQogICAgc2VsZi5jb21iaW5lZm4gPSBjb21iaW5lZm4KICAgIHNlbGYucnVudGltZV90eXBlX2NoZWNrID0gcnVudGltZV90eXBlX2NoZWNrCgogIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQsICphcmdzLCAqKmt3YXJncyk6CiAgICAjIEV4cGVjdGVkIGVsZW1lbnRzIGlucHV0IHRvIHRoaXMgRG9GbiBhcmUgMi10dXBsZXMgb2YgdGhlIGZvcm0KICAgICMgKGtleSwgaXRlciksIHdpdGggaXRlciBhbiBpdGVyYWJsZSBvZiBhbGwgdGhlIHZhbHVlcyBhc3NvY2lhdGVkIHdpdGgga2V5CiAgICAjIGluIHRoZSBpbnB1dCBQQ29sbGVjdGlvbi4KICAgIGlmIHNlbGYucnVudGltZV90eXBlX2NoZWNrOgogICAgICAjIEFwcGx5IHRoZSBjb21iaW5lciBpbiBhIHNpbmdsZSBvcGVyYXRpb24gcmF0aGVyIHRoYW4gYXJ0aWZpY2lhbGx5CiAgICAgICMgYnJlYWtpbmcgaXQgdXAgc28gdGhhdCBvdXRwdXQgdHlwZSB2aW9sYXRpb25zIG1hbmlmZXN0IGFzIFR5cGVDaGVjawogICAgICAjIGVycm9ycyByYXRoZXIgdGhhbiB0eXBlIGVycm9ycy4KICAgICAgcmV0dXJuIFsKICAgICAgICAgIChlbGVtZW50WzBdLAogICAgICAgICAgIHNlbGYuY29tYmluZWZuLmFwcGx5KGVsZW1lbnRbMV0sICphcmdzLCAqKmt3YXJncykpXQoKICAgICMgQWRkIHRoZSBlbGVtZW50cyBpbnRvIHRocmVlIGFjY3VtdWxhdG9ycyAoZm9yIHRlc3Rpbmcgb2YgbWVyZ2UpLgogICAgZWxlbWVudHMgPSBsaXN0KGVsZW1lbnRbMV0pCiAgICBhY2N1bXVsYXRvcnMgPSBbXQogICAgZm9yIGsgaW4gcmFuZ2UoMyk6CiAgICAgIGlmIGxlbihlbGVtZW50cykgPD0gazoKICAgICAgICBicmVhawogICAgICBhY2N1bXVsYXRvcnMuYXBwZW5kKAogICAgICAgICAgc2VsZi5jb21iaW5lZm4uYWRkX2lucHV0cygKICAgICAgICAgICAgICBzZWxmLmNvbWJpbmVmbi5jcmVhdGVfYWNjdW11bGF0b3IoKmFyZ3MsICoqa3dhcmdzKSwKICAgICAgICAgICAgICBlbGVtZW50c1trOjozXSwKICAgICAgICAgICAgICAqYXJncywgKiprd2FyZ3MpKQogICAgIyBNZXJnZSB0aGUgYWNjdW11bGF0b3JzLgogICAgYWNjdW11bGF0b3IgPSBzZWxmLmNvbWJpbmVmbi5tZXJnZV9hY2N1bXVsYXRvcnMoCiAgICAgICAgYWNjdW11bGF0b3JzLCAqYXJncywgKiprd2FyZ3MpCiAgICAjIENvbnZlcnQgYWNjdW11bGF0b3IgdG8gdGhlIGZpbmFsIHJlc3VsdC4KICAgIHJldHVybiBbKGVsZW1lbnRbMF0sCiAgICAgICAgICAgICBzZWxmLmNvbWJpbmVmbi5leHRyYWN0X291dHB1dChhY2N1bXVsYXRvciwgKmFyZ3MsICoqa3dhcmdzKSldCgogIGRlZiBkZWZhdWx0X3R5cGVfaGludHMoc2VsZik6CiAgICBoaW50cyA9IHNlbGYuY29tYmluZWZuLmdldF90eXBlX2hpbnRzKCkuY29weSgpCiAgICBpZiBoaW50cy5pbnB1dF90eXBlczoKICAgICAgSyA9IHR5cGVoaW50cy5UeXBlVmFyaWFibGUoJ0snKQogICAgICBhcmdzLCBrd2FyZ3MgPSBoaW50cy5pbnB1dF90eXBlcwogICAgICBhcmdzID0gKHR5cGVoaW50cy5UdXBsZVtLLCB0eXBlaGludHMuSXRlcmFibGVbYXJnc1swXV1dLCkgKyBhcmdzWzE6XQogICAgICBoaW50cy5zZXRfaW5wdXRfdHlwZXMoKmFyZ3MsICoqa3dhcmdzKQogICAgZWxzZToKICAgICAgSyA9IHR5cGVoaW50cy5BbnkKICAgIGlmIGhpbnRzLm91dHB1dF90eXBlczoKICAgICAgbWFpbl9vdXRwdXRfdHlwZSA9IGhpbnRzLnNpbXBsZV9vdXRwdXRfdHlwZSgnJykKICAgICAgaGludHMuc2V0X291dHB1dF90eXBlcyh0eXBlaGludHMuVHVwbGVbSywgbWFpbl9vdXRwdXRfdHlwZV0pCiAgICByZXR1cm4gaGludHMKCgpjbGFzcyBfQ29tYmluZVBlcktleVdpdGhIb3RLZXlGYW5vdXQoUFRyYW5zZm9ybSk6CgogIGRlZiBfX2luaXRfXyhzZWxmLCBjb21iaW5lX2ZuLCBmYW5vdXQpOgogICAgc2VsZi5fY29tYmluZV9mbiA9IGNvbWJpbmVfZm4KICAgIHNlbGYuX2Zhbm91dF9mbiA9ICgKICAgICAgICAobGFtYmRhIGtleTogZmFub3V0KSBpZiBpc2luc3RhbmNlKGZhbm91dCwgaW50KSBlbHNlIGZhbm91dCkKCiAgZGVmIGRlZmF1bHRfbGFiZWwoc2VsZik6CiAgICByZXR1cm4gJyVzKCVzLCBmYW5vdXQ9JXMpJyAlICgKICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywKICAgICAgICBwdHJhbnNmb3JtLmxhYmVsX2Zyb21fY2FsbGFibGUoc2VsZi5fY29tYmluZV9mbiksCiAgICAgICAgcHRyYW5zZm9ybS5sYWJlbF9mcm9tX2NhbGxhYmxlKHNlbGYuX2Zhbm91dF9mbikpCgogIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgoKICAgIGZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyIGltcG9ydCBBY2N1bXVsYXRpb25Nb2RlCiAgICBjb21iaW5lX2ZuID0gc2VsZi5fY29tYmluZV9mbgogICAgZmFub3V0X2ZuID0gc2VsZi5fZmFub3V0X2ZuCgogICAgY2xhc3MgU3BsaXRIb3RDb2xkKERvRm4pOgoKICAgICAgZGVmIHN0YXJ0X2J1bmRsZShzZWxmKToKICAgICAgICAjIFNwcmVhZGluZyBhIGhvdCBrZXkgYWNyb3NzIGFsbCBwb3NzaWJsZSBzdWIta2V5cyBmb3IgYWxsIGJ1bmRsZXMKICAgICAgICAjIHdvdWxkIGRlZmVhdCB0aGUgZ29hbCBvZiBub3Qgb3ZlcndoZWxtaW5nIGRvd25zdHJlYW0gcmVkdWNlcnMKICAgICAgICAjIChhcyB3ZWxsIGFzIG1ha2luZyBsZXNzIGVmZmljaWVudCB1c2Ugb2YgUEdCSyBjb21iaW5pbmcgdGFibGVzKS4KICAgICAgICAjIEluc3RlYWQsIGVhY2ggYnVuZGxlIGluZGVwZW5kZW50bHkgbWFrZXMgYSBjb25zaXN0ZW50IGNob2ljZSBhYm91dAogICAgICAgICMgd2hpY2ggInNoYXJkIiBvZiBhIGtleSB0byBzZW5kIGl0cyBpbnRlcm1lZGlhdGUgcmVzdWx0cy4KICAgICAgICBzZWxmLl9ub25jZSA9IGludChyYW5kb20uZ2V0cmFuZGJpdHMoMzEpKQoKICAgICAgZGVmIHByb2Nlc3Moc2VsZiwgZWxlbWVudCk6CiAgICAgICAga2V5LCB2YWx1ZSA9IGVsZW1lbnQKICAgICAgICBmYW5vdXQgPSBmYW5vdXRfZm4oa2V5KQogICAgICAgIGlmIGZhbm91dCA8PSAxOgogICAgICAgICAgIyBCb29sZWFuIGluZGljYXRlcyB0aGlzIGlzIG5vdCBhbiBhY2N1bXVsYXRvci4KICAgICAgICAgIHlpZWxkIChrZXksIChGYWxzZSwgdmFsdWUpKSAgIyBjb2xkCiAgICAgICAgZWxzZToKICAgICAgICAgIHlpZWxkIHB2YWx1ZS5UYWdnZWRPdXRwdXQoJ2hvdCcsICgoc2VsZi5fbm9uY2UgJSBmYW5vdXQsIGtleSksIHZhbHVlKSkKCiAgICBjbGFzcyBQcmVDb21iaW5lRm4oQ29tYmluZUZuKToKICAgICAgQHN0YXRpY21ldGhvZAogICAgICBkZWYgZXh0cmFjdF9vdXRwdXQoYWNjdW11bGF0b3IpOgogICAgICAgICMgQm9vbGVhbiBpbmRpY2F0ZXMgdGhpcyBpcyBhbiBhY2N1bXVsYXRvci4KICAgICAgICByZXR1cm4gKFRydWUsIGFjY3VtdWxhdG9yKQogICAgICBjcmVhdGVfYWNjdW11bGF0b3IgPSBjb21iaW5lX2ZuLmNyZWF0ZV9hY2N1bXVsYXRvcgogICAgICBhZGRfaW5wdXQgPSBjb21iaW5lX2ZuLmFkZF9pbnB1dAogICAgICBtZXJnZV9hY2N1bXVsYXRvcnMgPSBjb21iaW5lX2ZuLm1lcmdlX2FjY3VtdWxhdG9ycwogICAgICAjIFRPRE8oQkVBTS00MDMwKTogUmVtb3ZlIHRoZSBnZXRhdHRyIGluZGlyZWN0aW9uLgogICAgICBjb21wYWN0ID0gZ2V0YXR0cihjb21iaW5lX2ZuLCAnY29tcGFjdCcsIE5vbmUpCgogICAgY2xhc3MgUG9zdENvbWJpbmVGbihDb21iaW5lRm4pOgogICAgICBAc3RhdGljbWV0aG9kCiAgICAgIGRlZiBhZGRfaW5wdXQoYWNjdW11bGF0b3IsIGVsZW1lbnQpOgogICAgICAgIGlzX2FjY3VtdWxhdG9yLCB2YWx1ZSA9IGVsZW1lbnQKICAgICAgICBpZiBpc19hY2N1bXVsYXRvcjoKICAgICAgICAgIHJldHVybiBjb21iaW5lX2ZuLm1lcmdlX2FjY3VtdWxhdG9ycyhbYWNjdW11bGF0b3IsIHZhbHVlXSkKICAgICAgICBlbHNlOgogICAgICAgICAgcmV0dXJuIGNvbWJpbmVfZm4uYWRkX2lucHV0KGFjY3VtdWxhdG9yLCB2YWx1ZSkKICAgICAgY3JlYXRlX2FjY3VtdWxhdG9yID0gY29tYmluZV9mbi5jcmVhdGVfYWNjdW11bGF0b3IKICAgICAgbWVyZ2VfYWNjdW11bGF0b3JzID0gY29tYmluZV9mbi5tZXJnZV9hY2N1bXVsYXRvcnMKICAgICAgIyBUT0RPKEJFQU0tNDAzMCk6IFJlbW92ZSB0aGUgZ2V0YXR0ciBpbmRpcmVjdGlvbi4KICAgICAgY29tcGFjdCA9IGdldGF0dHIoY29tYmluZV9mbiwgJ2NvbXBhY3QnLCBOb25lKQogICAgICBleHRyYWN0X291dHB1dCA9IGNvbWJpbmVfZm4uZXh0cmFjdF9vdXRwdXQKCiAgICBkZWYgU3RyaXBOb25jZShub25jZV9rZXlfdmFsdWUpOgogICAgICAoXywga2V5KSwgdmFsdWUgPSBub25jZV9rZXlfdmFsdWUKICAgICAgcmV0dXJuIGtleSwgdmFsdWUKCiAgICBjb2xkLCBob3QgPSBwY29sbCB8IFBhckRvKFNwbGl0SG90Q29sZCgpKS53aXRoX291dHB1dHMoJ2hvdCcsIG1haW49J2NvbGQnKQogICAgY29sZC5lbGVtZW50X3R5cGUgPSB0eXBlaGludHMuQW55ICAjIE5vIG11bHRpLW91dHB1dCB0eXBlIGhpbnRzLgogICAgcHJlY29tYmluZWRfaG90ID0gKAogICAgICAgIGhvdAogICAgICAgICMgQXZvaWQgZG91YmxlIGNvdW50aW5nIHRoYXQgbWF5IGhhcHBlbiB3aXRoIHN0YWNrZWQgYWNjdW11bGF0aW5nIG1vZGUuCiAgICAgICAgfCAnV2luZG93SW50b0Rpc2NhcmRpbmcnID4+IFdpbmRvd0ludG8oCiAgICAgICAgICAgIHBjb2xsLndpbmRvd2luZywgYWNjdW11bGF0aW9uX21vZGU9QWNjdW11bGF0aW9uTW9kZS5ESVNDQVJESU5HKQogICAgICAgIHwgQ29tYmluZVBlcktleShQcmVDb21iaW5lRm4oKSkKICAgICAgICB8IE1hcChTdHJpcE5vbmNlKQogICAgICAgIHwgJ1dpbmRvd0ludG9PcmlnaW5hbCcgPj4gV2luZG93SW50byhwY29sbC53aW5kb3dpbmcpKQogICAgcmV0dXJuICgKICAgICAgICAoY29sZCwgcHJlY29tYmluZWRfaG90KQogICAgICAgIHwgRmxhdHRlbigpCiAgICAgICAgfCBDb21iaW5lUGVyS2V5KFBvc3RDb21iaW5lRm4oKSkpCgoKQHR5cGVoaW50cy53aXRoX2lucHV0X3R5cGVzKHR5cGVoaW50cy5LVltLLCBWXSkKQHR5cGVoaW50cy53aXRoX291dHB1dF90eXBlcyh0eXBlaGludHMuS1ZbSywgdHlwZWhpbnRzLkl0ZXJhYmxlW1ZdXSkKY2xhc3MgR3JvdXBCeUtleShQVHJhbnNmb3JtKToKICAiIiJBIGdyb3VwIGJ5IGtleSB0cmFuc2Zvcm0uCgogIFByb2Nlc3NlcyBhbiBpbnB1dCBQQ29sbGVjdGlvbiBjb25zaXN0aW5nIG9mIGtleS92YWx1ZSBwYWlycyByZXByZXNlbnRlZCBhcyBhCiAgdHVwbGUgcGFpci4gVGhlIHJlc3VsdCBpcyBhIFBDb2xsZWN0aW9uIHdoZXJlIHZhbHVlcyBoYXZpbmcgYSBjb21tb24ga2V5IGFyZQogIGdyb3VwZWQgdG9nZXRoZXIuICBGb3IgZXhhbXBsZSAoYSwgMSksIChiLCAyKSwgKGEsIDMpIHdpbGwgcmVzdWx0IGludG8KICAoYSwgWzEsIDNdKSwgKGIsIFsyXSkuCgogIFRoZSBpbXBsZW1lbnRhdGlvbiBoZXJlIGlzIHVzZWQgb25seSB3aGVuIHJ1biBvbiB0aGUgbG9jYWwgZGlyZWN0IHJ1bm5lci4KICAiIiIKCiAgY2xhc3MgUmVpZnlXaW5kb3dzKERvRm4pOgoKICAgIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQsIHdpbmRvdz1Eb0ZuLldpbmRvd1BhcmFtLAogICAgICAgICAgICAgICAgdGltZXN0YW1wPURvRm4uVGltZXN0YW1wUGFyYW0pOgogICAgICB0cnk6CiAgICAgICAgaywgdiA9IGVsZW1lbnQKICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKICAgICAgICByYWlzZSBUeXBlQ2hlY2tFcnJvcignSW5wdXQgdG8gR3JvdXBCeUtleSBtdXN0IGJlIGEgUENvbGxlY3Rpb24gd2l0aCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VsZW1lbnRzIGNvbXBhdGlibGUgd2l0aCBLVltBLCBCXScpCgogICAgICByZXR1cm4gWyhrLCBXaW5kb3dlZFZhbHVlKHYsIHRpbWVzdGFtcCwgW3dpbmRvd10pKV0KCiAgICBkZWYgaW5mZXJfb3V0cHV0X3R5cGUoc2VsZiwgaW5wdXRfdHlwZSk6CiAgICAgIGtleV90eXBlLCB2YWx1ZV90eXBlID0gdHJpdmlhbF9pbmZlcmVuY2Uua2V5X3ZhbHVlX3R5cGVzKGlucHV0X3R5cGUpCiAgICAgIHJldHVybiBJdGVyYWJsZVtLVltrZXlfdHlwZSwgdHlwZWhpbnRzLldpbmRvd2VkVmFsdWVbdmFsdWVfdHlwZV1dXQoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgICMgVGhpcyBjb2RlIHBhdGggaXMgb25seSB1c2VkIGluIHRoZSBsb2NhbCBkaXJlY3QgcnVubmVyLiAgRm9yIERhdGFmbG93CiAgICAjIHJ1bm5lciBleGVjdXRpb24sIHRoZSBHcm91cEJ5S2V5IHRyYW5zZm9ybSBpcyBleHBhbmRlZCBvbiB0aGUgc2VydmljZS4KICAgIGlucHV0X3R5cGUgPSBwY29sbC5lbGVtZW50X3R5cGUKICAgIGlmIGlucHV0X3R5cGUgaXMgbm90IE5vbmU6CiAgICAgICMgSW5pdGlhbGl6ZSB0eXBlLWhpbnRzIHVzZWQgYmVsb3cgdG8gZW5mb3JjZSB0eXBlLWNoZWNraW5nIGFuZCB0byBwYXNzCiAgICAgICMgZG93bnN0cmVhbSB0byBmdXJ0aGVyIFBUcmFuc2Zvcm1zLgogICAgICBrZXlfdHlwZSwgdmFsdWVfdHlwZSA9IHRyaXZpYWxfaW5mZXJlbmNlLmtleV92YWx1ZV90eXBlcyhpbnB1dF90eXBlKQogICAgICAjIEVuZm9yY2UgdGhlIGlucHV0IHRvIGEgR0JLIGhhcyBhIEtWIGVsZW1lbnQgdHlwZS4KICAgICAgcGNvbGwuZWxlbWVudF90eXBlID0gS1Zba2V5X3R5cGUsIHZhbHVlX3R5cGVdCiAgICAgIHR5cGVjb2RlcnMucmVnaXN0cnkudmVyaWZ5X2RldGVybWluaXN0aWMoCiAgICAgICAgICB0eXBlY29kZXJzLnJlZ2lzdHJ5LmdldF9jb2RlcihrZXlfdHlwZSksCiAgICAgICAgICAnR3JvdXBCeUtleSBvcGVyYXRpb24gIiVzIicgJSBzZWxmLmxhYmVsKQoKICAgICAgcmVpZnlfb3V0cHV0X3R5cGUgPSBLVltrZXlfdHlwZSwgdHlwZWhpbnRzLldpbmRvd2VkVmFsdWVbdmFsdWVfdHlwZV1dCiAgICAgIGdia19pbnB1dF90eXBlID0gKAogICAgICAgICAgS1Zba2V5X3R5cGUsIEl0ZXJhYmxlW3R5cGVoaW50cy5XaW5kb3dlZFZhbHVlW3ZhbHVlX3R5cGVdXV0pCiAgICAgIGdia19vdXRwdXRfdHlwZSA9IEtWW2tleV90eXBlLCBJdGVyYWJsZVt2YWx1ZV90eXBlXV0KCiAgICAgICMgcHlsaW50OiBkaXNhYmxlPWJhZC1jb250aW51YXRpb24KICAgICAgcmV0dXJuIChwY29sbAogICAgICAgICAgICAgIHwgJ1JlaWZ5V2luZG93cycgPj4gKFBhckRvKHNlbGYuUmVpZnlXaW5kb3dzKCkpCiAgICAgICAgICAgICAgICAgLndpdGhfb3V0cHV0X3R5cGVzKHJlaWZ5X291dHB1dF90eXBlKSkKICAgICAgICAgICAgICB8ICdHcm91cEJ5S2V5JyA+PiAoX0dyb3VwQnlLZXlPbmx5KCkKICAgICAgICAgICAgICAgICAud2l0aF9pbnB1dF90eXBlcyhyZWlmeV9vdXRwdXRfdHlwZSkKICAgICAgICAgICAgICAgICAud2l0aF9vdXRwdXRfdHlwZXMoZ2JrX2lucHV0X3R5cGUpKQogICAgICAgICAgICAgIHwgKCdHcm91cEJ5V2luZG93JyA+PiBfR3JvdXBBbHNvQnlXaW5kb3cocGNvbGwud2luZG93aW5nKQogICAgICAgICAgICAgICAgIC53aXRoX2lucHV0X3R5cGVzKGdia19pbnB1dF90eXBlKQogICAgICAgICAgICAgICAgIC53aXRoX291dHB1dF90eXBlcyhnYmtfb3V0cHV0X3R5cGUpKSkKICAgIGVsc2U6CiAgICAgICMgVGhlIGlucHV0X3R5cGUgaXMgTm9uZSwgcnVuIHRoZSBkZWZhdWx0CiAgICAgIHJldHVybiAocGNvbGwKICAgICAgICAgICAgICB8ICdSZWlmeVdpbmRvd3MnID4+IFBhckRvKHNlbGYuUmVpZnlXaW5kb3dzKCkpCiAgICAgICAgICAgICAgfCAnR3JvdXBCeUtleScgPj4gX0dyb3VwQnlLZXlPbmx5KCkKICAgICAgICAgICAgICB8ICdHcm91cEJ5V2luZG93JyA+PiBfR3JvdXBBbHNvQnlXaW5kb3cocGNvbGwud2luZG93aW5nKSkKCiAgZGVmIGluZmVyX291dHB1dF90eXBlKHNlbGYsIGlucHV0X3R5cGUpOgogICAga2V5X3R5cGUsIHZhbHVlX3R5cGUgPSB0cml2aWFsX2luZmVyZW5jZS5rZXlfdmFsdWVfdHlwZXMoaW5wdXRfdHlwZSkKICAgIHJldHVybiBLVltrZXlfdHlwZSwgSXRlcmFibGVbdmFsdWVfdHlwZV1dCgogIGRlZiB0b19ydW5uZXJfYXBpX3BhcmFtZXRlcihzZWxmLCB1bnVzZWRfY29udGV4dCk6CiAgICByZXR1cm4gY29tbW9uX3VybnMucHJpbWl0aXZlcy5HUk9VUF9CWV9LRVkudXJuLCBOb25lCgogIEBQVHJhbnNmb3JtLnJlZ2lzdGVyX3Vybihjb21tb25fdXJucy5wcmltaXRpdmVzLkdST1VQX0JZX0tFWS51cm4sIE5vbmUpCiAgZGVmIGZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXIodW51c2VkX3BheWxvYWQsIHVudXNlZF9jb250ZXh0KToKICAgIHJldHVybiBHcm91cEJ5S2V5KCkKCiAgZGVmIHJ1bm5lcl9hcGlfcmVxdWlyZXNfa2V5ZWRfaW5wdXQoc2VsZik6CiAgICByZXR1cm4gVHJ1ZQoKCkB0eXBlaGludHMud2l0aF9pbnB1dF90eXBlcyh0eXBlaGludHMuS1ZbSywgVl0pCkB0eXBlaGludHMud2l0aF9vdXRwdXRfdHlwZXModHlwZWhpbnRzLktWW0ssIHR5cGVoaW50cy5JdGVyYWJsZVtWXV0pCmNsYXNzIF9Hcm91cEJ5S2V5T25seShQVHJhbnNmb3JtKToKICAiIiJBIGdyb3VwIGJ5IGtleSB0cmFuc2Zvcm0sIGlnbm9yaW5nIHdpbmRvd3MuIiIiCiAgZGVmIGluZmVyX291dHB1dF90eXBlKHNlbGYsIGlucHV0X3R5cGUpOgogICAga2V5X3R5cGUsIHZhbHVlX3R5cGUgPSB0cml2aWFsX2luZmVyZW5jZS5rZXlfdmFsdWVfdHlwZXMoaW5wdXRfdHlwZSkKICAgIHJldHVybiBLVltrZXlfdHlwZSwgSXRlcmFibGVbdmFsdWVfdHlwZV1dCgogIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgc2VsZi5fY2hlY2tfcGNvbGxlY3Rpb24ocGNvbGwpCiAgICByZXR1cm4gcHZhbHVlLlBDb2xsZWN0aW9uKHBjb2xsLnBpcGVsaW5lKQoKCkB0eXBlaGludHMud2l0aF9pbnB1dF90eXBlcyh0eXBlaGludHMuS1ZbSywgdHlwZWhpbnRzLkl0ZXJhYmxlW1ZdXSkKQHR5cGVoaW50cy53aXRoX291dHB1dF90eXBlcyh0eXBlaGludHMuS1ZbSywgdHlwZWhpbnRzLkl0ZXJhYmxlW1ZdXSkKY2xhc3MgX0dyb3VwQWxzb0J5V2luZG93KFBhckRvKToKICAiIiJUaGUgR3JvdXBBbHNvQnlXaW5kb3cgdHJhbnNmb3JtLiIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCB3aW5kb3dpbmcpOgogICAgc3VwZXIoX0dyb3VwQWxzb0J5V2luZG93LCBzZWxmKS5fX2luaXRfXygKICAgICAgICBfR3JvdXBBbHNvQnlXaW5kb3dEb0ZuKHdpbmRvd2luZykpCiAgICBzZWxmLndpbmRvd2luZyA9IHdpbmRvd2luZwoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgIHNlbGYuX2NoZWNrX3Bjb2xsZWN0aW9uKHBjb2xsKQogICAgcmV0dXJuIHB2YWx1ZS5QQ29sbGVjdGlvbihwY29sbC5waXBlbGluZSkKCgpjbGFzcyBfR3JvdXBBbHNvQnlXaW5kb3dEb0ZuKERvRm4pOgogICMgVE9ETyhyb2JlcnR3Yik6IFN1cHBvcnQgY29tYmluZXIgbGlmdGluZy4KCiAgZGVmIF9faW5pdF9fKHNlbGYsIHdpbmRvd2luZyk6CiAgICBzdXBlcihfR3JvdXBBbHNvQnlXaW5kb3dEb0ZuLCBzZWxmKS5fX2luaXRfXygpCiAgICBzZWxmLndpbmRvd2luZyA9IHdpbmRvd2luZwoKICBkZWYgaW5mZXJfb3V0cHV0X3R5cGUoc2VsZiwgaW5wdXRfdHlwZSk6CiAgICBrZXlfdHlwZSwgd2luZG93ZWRfdmFsdWVfaXRlcl90eXBlID0gdHJpdmlhbF9pbmZlcmVuY2Uua2V5X3ZhbHVlX3R5cGVzKAogICAgICAgIGlucHV0X3R5cGUpCiAgICB2YWx1ZV90eXBlID0gd2luZG93ZWRfdmFsdWVfaXRlcl90eXBlLmlubmVyX3R5cGUuaW5uZXJfdHlwZQogICAgcmV0dXJuIEl0ZXJhYmxlW0tWW2tleV90eXBlLCBJdGVyYWJsZVt2YWx1ZV90eXBlXV1dCgogIGRlZiBzdGFydF9idW5kbGUoc2VsZik6CiAgICAjIHB5bGludDogZGlzYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbgogICAgZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIgaW1wb3J0IGNyZWF0ZV90cmlnZ2VyX2RyaXZlcgogICAgIyBweWxpbnQ6IGVuYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbgogICAgc2VsZi5kcml2ZXIgPSBjcmVhdGVfdHJpZ2dlcl9kcml2ZXIoc2VsZi53aW5kb3dpbmcsIFRydWUpCgogIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQpOgogICAgaywgdnMgPSBlbGVtZW50CiAgICByZXR1cm4gc2VsZi5kcml2ZXIucHJvY2Vzc19lbnRpcmVfa2V5KGssIHZzKQoKCmNsYXNzIFBhcnRpdGlvbihQVHJhbnNmb3JtV2l0aFNpZGVJbnB1dHMpOgogICIiIlNwbGl0IGEgUENvbGxlY3Rpb24gaW50byBzZXZlcmFsIHBhcnRpdGlvbnMuCgogIFVzZXMgdGhlIHNwZWNpZmllZCBQYXJ0aXRpb25GbiB0byBzZXBhcmF0ZSBhbiBpbnB1dCBQQ29sbGVjdGlvbiBpbnRvIHRoZQogIHNwZWNpZmllZCBudW1iZXIgb2Ygc3ViLVBDb2xsZWN0aW9ucy4KCiAgV2hlbiBhcHBseSgpZCwgYSBQYXJ0aXRpb24oKSBQVHJhbnNmb3JtIHJlcXVpcmVzIHRoZSBmb2xsb3dpbmc6CgogIEFyZ3M6CiAgICBwYXJ0aXRpb25mbjogYSBQYXJ0aXRpb25Gbiwgb3IgYSBjYWxsYWJsZSB3aXRoIHRoZSBzaWduYXR1cmUgZGVzY3JpYmVkIGluCiAgICAgIENhbGxhYmxlV3JhcHBlclBhcnRpdGlvbkZuLgogICAgbjogbnVtYmVyIG9mIG91dHB1dCBwYXJ0aXRpb25zLgoKICBUaGUgcmVzdWx0IG9mIHRoaXMgUFRyYW5zZm9ybSBpcyBhIHNpbXBsZSBsaXN0IG9mIHRoZSBvdXRwdXQgUENvbGxlY3Rpb25zCiAgcmVwcmVzZW50aW5nIGVhY2ggb2YgbiBwYXJ0aXRpb25zLCBpbiBvcmRlci4KICAiIiIKCiAgY2xhc3MgQXBwbHlQYXJ0aXRpb25GbkZuKERvRm4pOgogICAgIiIiQSBEb0ZuIHRoYXQgYXBwbGllcyBhIFBhcnRpdGlvbkZuLiIiIgoKICAgIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQsIHBhcnRpdGlvbmZuLCBuLCAqYXJncywgKiprd2FyZ3MpOgogICAgICBwYXJ0aXRpb24gPSBwYXJ0aXRpb25mbi5wYXJ0aXRpb25fZm9yKGVsZW1lbnQsIG4sICphcmdzLCAqKmt3YXJncykKICAgICAgaWYgbm90IDAgPD0gcGFydGl0aW9uIDwgbjoKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgICAnUGFydGl0aW9uRm4gc3BlY2lmaWVkIG91dC1vZi1ib3VuZHMgcGFydGl0aW9uIGluZGV4OiAnCiAgICAgICAgICAgICclZCBub3QgaW4gWzAsICVkKScgJSAocGFydGl0aW9uLCBuKSkKICAgICAgIyBFYWNoIGlucHV0IGlzIGRpcmVjdGVkIGludG8gdGhlIG91dHB1dCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZQogICAgICAjIHNlbGVjdGVkIHBhcnRpdGlvbi4KICAgICAgeWllbGQgcHZhbHVlLlRhZ2dlZE91dHB1dChzdHIocGFydGl0aW9uKSwgZWxlbWVudCkKCiAgZGVmIG1ha2VfZm4oc2VsZiwgZm4pOgogICAgcmV0dXJuIGZuIGlmIGlzaW5zdGFuY2UoZm4sIFBhcnRpdGlvbkZuKSBlbHNlIENhbGxhYmxlV3JhcHBlclBhcnRpdGlvbkZuKGZuKQoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgIG4gPSBpbnQoc2VsZi5hcmdzWzBdKQogICAgcmV0dXJuIHBjb2xsIHwgUGFyRG8oCiAgICAgICAgc2VsZi5BcHBseVBhcnRpdGlvbkZuRm4oKSwgc2VsZi5mbiwgKnNlbGYuYXJncywKICAgICAgICAqKnNlbGYua3dhcmdzKS53aXRoX291dHB1dHMoKltzdHIodCkgZm9yIHQgaW4gcmFuZ2UobildKQoKCmNsYXNzIFdpbmRvd2luZyhvYmplY3QpOgogIGRlZiBfX2luaXRfXyhzZWxmLCB3aW5kb3dmbiwgdHJpZ2dlcmZuPU5vbmUsIGFjY3VtdWxhdGlvbl9tb2RlPU5vbmUsCiAgICAgICAgICAgICAgIHRpbWVzdGFtcF9jb21iaW5lcj1Ob25lKToKICAgIGdsb2JhbCBBY2N1bXVsYXRpb25Nb2RlLCBEZWZhdWx0VHJpZ2dlciAgIyBweWxpbnQ6IGRpc2FibGU9Z2xvYmFsLXZhcmlhYmxlLW5vdC1hc3NpZ25lZAogICAgIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KICAgIGZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyIGltcG9ydCBBY2N1bXVsYXRpb25Nb2RlLCBEZWZhdWx0VHJpZ2dlcgogICAgIyBweWxpbnQ6IGVuYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbgogICAgaWYgdHJpZ2dlcmZuIGlzIE5vbmU6CiAgICAgIHRyaWdnZXJmbiA9IERlZmF1bHRUcmlnZ2VyKCkKICAgIGlmIGFjY3VtdWxhdGlvbl9tb2RlIGlzIE5vbmU6CiAgICAgIGlmIHRyaWdnZXJmbiA9PSBEZWZhdWx0VHJpZ2dlcigpOgogICAgICAgIGFjY3VtdWxhdGlvbl9tb2RlID0gQWNjdW11bGF0aW9uTW9kZS5ESVNDQVJESU5HCiAgICAgIGVsc2U6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgJ2FjY3VtdWxhdGlvbl9tb2RlIG11c3QgYmUgcHJvdmlkZWQgZm9yIG5vbi10cml2aWFsIHRyaWdnZXJzJykKICAgIGlmIG5vdCB3aW5kb3dmbi5nZXRfd2luZG93X2NvZGVyKCkuaXNfZGV0ZXJtaW5pc3RpYygpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgJ3dpbmRvdyBmbiAoJXMpIGRvZXMgbm90IGhhdmUgYSBkZXRlcm1hbmlzdGljIGNvZGVyICglcyknICUgKAogICAgICAgICAgICAgIHdpbmRvd2ZuLCB3aW5kb3dmbi5nZXRfd2luZG93X2NvZGVyKCkpKQogICAgc2VsZi53aW5kb3dmbiA9IHdpbmRvd2ZuCiAgICBzZWxmLnRyaWdnZXJmbiA9IHRyaWdnZXJmbgogICAgc2VsZi5hY2N1bXVsYXRpb25fbW9kZSA9IGFjY3VtdWxhdGlvbl9tb2RlCiAgICBzZWxmLnRpbWVzdGFtcF9jb21iaW5lciA9ICgKICAgICAgICB0aW1lc3RhbXBfY29tYmluZXIgb3IgVGltZXN0YW1wQ29tYmluZXIuT1VUUFVUX0FUX0VPVykKICAgIHNlbGYuX2lzX2RlZmF1bHQgPSAoCiAgICAgICAgc2VsZi53aW5kb3dmbiA9PSBHbG9iYWxXaW5kb3dzKCkgYW5kCiAgICAgICAgc2VsZi50cmlnZ2VyZm4gPT0gRGVmYXVsdFRyaWdnZXIoKSBhbmQKICAgICAgICBzZWxmLmFjY3VtdWxhdGlvbl9tb2RlID09IEFjY3VtdWxhdGlvbk1vZGUuRElTQ0FSRElORyBhbmQKICAgICAgICBzZWxmLnRpbWVzdGFtcF9jb21iaW5lciA9PSBUaW1lc3RhbXBDb21iaW5lci5PVVRQVVRfQVRfRU9XKQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gIldpbmRvd2luZyglcywgJXMsICVzLCAlcykiICUgKHNlbGYud2luZG93Zm4sIHNlbGYudHJpZ2dlcmZuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFjY3VtdWxhdGlvbl9tb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRpbWVzdGFtcF9jb21iaW5lcikKCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICBpZiB0eXBlKHNlbGYpID09IHR5cGUob3RoZXIpOgogICAgICBpZiBzZWxmLl9pc19kZWZhdWx0IGFuZCBvdGhlci5faXNfZGVmYXVsdDoKICAgICAgICByZXR1cm4gVHJ1ZQogICAgICByZXR1cm4gKAogICAgICAgICAgc2VsZi53aW5kb3dmbiA9PSBvdGhlci53aW5kb3dmbgogICAgICAgICAgYW5kIHNlbGYudHJpZ2dlcmZuID09IG90aGVyLnRyaWdnZXJmbgogICAgICAgICAgYW5kIHNlbGYuYWNjdW11bGF0aW9uX21vZGUgPT0gb3RoZXIuYWNjdW11bGF0aW9uX21vZGUKICAgICAgICAgIGFuZCBzZWxmLnRpbWVzdGFtcF9jb21iaW5lciA9PSBvdGhlci50aW1lc3RhbXBfY29tYmluZXIpCiAgICByZXR1cm4gRmFsc2UKCiAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CiAgICAjIFRPRE8oQkVBTS01OTQ5KTogTmVlZGVkIGZvciBQeXRob24gMiBjb21wYXRpYmlsaXR5LgogICAgcmV0dXJuIG5vdCBzZWxmID09IG90aGVyCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKChzZWxmLndpbmRvd2ZuLCBzZWxmLmFjY3VtdWxhdGlvbl9tb2RlLAogICAgICAgICAgICAgICAgIHNlbGYudGltZXN0YW1wX2NvbWJpbmVyKSkKCiAgZGVmIGlzX2RlZmF1bHQoc2VsZik6CiAgICByZXR1cm4gc2VsZi5faXNfZGVmYXVsdAoKICBkZWYgdG9fcnVubmVyX2FwaShzZWxmLCBjb250ZXh0KToKICAgIHJldHVybiBiZWFtX3J1bm5lcl9hcGlfcGIyLldpbmRvd2luZ1N0cmF0ZWd5KAogICAgICAgIHdpbmRvd19mbj1zZWxmLndpbmRvd2ZuLnRvX3J1bm5lcl9hcGkoY29udGV4dCksCiAgICAgICAgIyBUT0RPKHJvYmVydHdiKTogUHJvaGliaXQgaW1wbGljaXQgbXVsdGktbGV2ZWwgbWVyZ2luZy4KICAgICAgICBtZXJnZV9zdGF0dXM9KGJlYW1fcnVubmVyX2FwaV9wYjIuTWVyZ2VTdGF0dXMuTkVFRFNfTUVSR0UKICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYud2luZG93Zm4uaXNfbWVyZ2luZygpCiAgICAgICAgICAgICAgICAgICAgICBlbHNlIGJlYW1fcnVubmVyX2FwaV9wYjIuTWVyZ2VTdGF0dXMuTk9OX01FUkdJTkcpLAogICAgICAgIHdpbmRvd19jb2Rlcl9pZD1jb250ZXh0LmNvZGVycy5nZXRfaWQoCiAgICAgICAgICAgIHNlbGYud2luZG93Zm4uZ2V0X3dpbmRvd19jb2RlcigpKSwKICAgICAgICB0cmlnZ2VyPXNlbGYudHJpZ2dlcmZuLnRvX3J1bm5lcl9hcGkoY29udGV4dCksCiAgICAgICAgYWNjdW11bGF0aW9uX21vZGU9c2VsZi5hY2N1bXVsYXRpb25fbW9kZSwKICAgICAgICBvdXRwdXRfdGltZT1zZWxmLnRpbWVzdGFtcF9jb21iaW5lciwKICAgICAgICAjIFRPRE8ocm9iZXJ0d2IpOiBTdXBwb3J0IEVNSVRfSUZfTk9ORU1QVFkKICAgICAgICBjbG9zaW5nX2JlaGF2aW9yPWJlYW1fcnVubmVyX2FwaV9wYjIuQ2xvc2luZ0JlaGF2aW9yLkVNSVRfQUxXQVlTLAogICAgICAgIE9uVGltZUJlaGF2aW9yPWJlYW1fcnVubmVyX2FwaV9wYjIuT25UaW1lQmVoYXZpb3IuRklSRV9BTFdBWVMsCiAgICAgICAgYWxsb3dlZF9sYXRlbmVzcz0wKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGZyb21fcnVubmVyX2FwaShwcm90bywgY29udGV4dCk6CiAgICAjIHB5bGludDogZGlzYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbgogICAgZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIgaW1wb3J0IFRyaWdnZXJGbgogICAgcmV0dXJuIFdpbmRvd2luZygKICAgICAgICB3aW5kb3dmbj1XaW5kb3dGbi5mcm9tX3J1bm5lcl9hcGkocHJvdG8ud2luZG93X2ZuLCBjb250ZXh0KSwKICAgICAgICB0cmlnZ2VyZm49VHJpZ2dlckZuLmZyb21fcnVubmVyX2FwaShwcm90by50cmlnZ2VyLCBjb250ZXh0KSwKICAgICAgICBhY2N1bXVsYXRpb25fbW9kZT1wcm90by5hY2N1bXVsYXRpb25fbW9kZSwKICAgICAgICB0aW1lc3RhbXBfY29tYmluZXI9cHJvdG8ub3V0cHV0X3RpbWUpCgoKQHR5cGVoaW50cy53aXRoX2lucHV0X3R5cGVzKFQpCkB0eXBlaGludHMud2l0aF9vdXRwdXRfdHlwZXMoVCkKY2xhc3MgV2luZG93SW50byhQYXJEbyk6CiAgIiIiQSB3aW5kb3cgdHJhbnNmb3JtIGFzc2lnbmluZyB3aW5kb3dzIHRvIGVhY2ggZWxlbWVudCBvZiBhIFBDb2xsZWN0aW9uLgoKICBUcmFuc2Zvcm1zIGFuIGlucHV0IFBDb2xsZWN0aW9uIGJ5IGFwcGx5aW5nIGEgd2luZG93aW5nIGZ1bmN0aW9uIHRvIGVhY2gKICBlbGVtZW50LiAgRWFjaCB0cmFuc2Zvcm1lZCBlbGVtZW50IGluIHRoZSByZXN1bHQgd2lsbCBiZSBhIFdpbmRvd2VkVmFsdWUKICBlbGVtZW50IHdpdGggdGhlIHNhbWUgaW5wdXQgdmFsdWUgYW5kIHRpbWVzdGFtcCwgd2l0aCBpdHMgbmV3IHNldCBvZiB3aW5kb3dzCiAgZGV0ZXJtaW5lZCBieSB0aGUgd2luZG93aW5nIGZ1bmN0aW9uLgogICIiIgoKICBjbGFzcyBXaW5kb3dJbnRvRm4oRG9Gbik6CiAgICAiIiJBIERvRm4gdGhhdCBhcHBsaWVzIGEgV2luZG93SW50byBvcGVyYXRpb24uIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHdpbmRvd2luZyk6CiAgICAgIHNlbGYud2luZG93aW5nID0gd2luZG93aW5nCgogICAgZGVmIHByb2Nlc3Moc2VsZiwgZWxlbWVudCwgdGltZXN0YW1wPURvRm4uVGltZXN0YW1wUGFyYW0sCiAgICAgICAgICAgICAgICB3aW5kb3c9RG9Gbi5XaW5kb3dQYXJhbSk6CiAgICAgIGNvbnRleHQgPSBXaW5kb3dGbi5Bc3NpZ25Db250ZXh0KHRpbWVzdGFtcCwgZWxlbWVudD1lbGVtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3c9d2luZG93KQogICAgICBuZXdfd2luZG93cyA9IHNlbGYud2luZG93aW5nLndpbmRvd2ZuLmFzc2lnbihjb250ZXh0KQogICAgICB5aWVsZCBXaW5kb3dlZFZhbHVlKGVsZW1lbnQsIGNvbnRleHQudGltZXN0YW1wLCBuZXdfd2luZG93cykKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHdpbmRvd2ZuLCAqKmt3YXJncyk6CiAgICAiIiJJbml0aWFsaXplcyBhIFdpbmRvd0ludG8gdHJhbnNmb3JtLgoKICAgIEFyZ3M6CiAgICAgIHdpbmRvd2ZuOiBGdW5jdGlvbiB0byBiZSB1c2VkIGZvciB3aW5kb3dpbmcKICAgICAgdHJpZ2dlcjogKG9wdGlvbmFsKSBUcmlnZ2VyIHVzZWQgZm9yIHdpbmRvd2luZywgb3IgTm9uZSBmb3IgZGVmYXVsdC4KICAgICAgYWNjdW11bGF0aW9uX21vZGU6IChvcHRpb25hbCkgQWNjdW11bGF0aW9uIG1vZGUgdXNlZCBmb3Igd2luZG93aW5nLAogICAgICAgICAgcmVxdWlyZWQgZm9yIG5vbi10cml2aWFsIHRyaWdnZXJzLgogICAgICB0aW1lc3RhbXBfY29tYmluZXI6IChvcHRpb25hbCkgVGltZXN0YW1wIGNvbWJuaW5lciB1c2VkIGZvciB3aW5kb3dpbmcsCiAgICAgICAgICBvciBOb25lIGZvciBkZWZhdWx0LgogICAgIiIiCiAgICBpZiBpc2luc3RhbmNlKHdpbmRvd2ZuLCBXaW5kb3dpbmcpOgogICAgICAjIE92ZXJsYXkgd2luZG93aW5nIHdpdGgga3dhcmdzLgogICAgICB3aW5kb3dpbmcgPSB3aW5kb3dmbgogICAgICB3aW5kb3dmbiA9IHdpbmRvd2luZy53aW5kb3dmbgogICAgICAjIFVzZSB3aW5kb3dpbmcgdG8gZmlsbCBpbiBkZWZhdWx0cyBmb3Iga3dhcmdzLgogICAgICBrd2FyZ3MgPSBkaWN0KGRpY3QoCiAgICAgICAgICB0cmlnZ2VyPXdpbmRvd2luZy50cmlnZ2VyZm4sCiAgICAgICAgICBhY2N1bXVsYXRpb25fbW9kZT13aW5kb3dpbmcuYWNjdW11bGF0aW9uX21vZGUsCiAgICAgICAgICB0aW1lc3RhbXBfY29tYmluZXI9d2luZG93aW5nLnRpbWVzdGFtcF9jb21iaW5lciksICoqa3dhcmdzKQogICAgIyBVc2Uga3dhcmdzIHRvIHNpbXVsYXRlIGtleXdvcmQtb25seSBhcmd1bWVudHMuCiAgICB0cmlnZ2VyZm4gPSBrd2FyZ3MucG9wKCd0cmlnZ2VyJywgTm9uZSkKICAgIGFjY3VtdWxhdGlvbl9tb2RlID0ga3dhcmdzLnBvcCgnYWNjdW11bGF0aW9uX21vZGUnLCBOb25lKQogICAgdGltZXN0YW1wX2NvbWJpbmVyID0ga3dhcmdzLnBvcCgndGltZXN0YW1wX2NvbWJpbmVyJywgTm9uZSkKICAgIGlmIGt3YXJnczoKICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5leHBlY3RlZCBrZXl3b3JkIGFyZ3VtZW50czogJXMnICUgbGlzdChrd2FyZ3MpKQogICAgc2VsZi53aW5kb3dpbmcgPSBXaW5kb3dpbmcoCiAgICAgICAgd2luZG93Zm4sIHRyaWdnZXJmbiwgYWNjdW11bGF0aW9uX21vZGUsIHRpbWVzdGFtcF9jb21iaW5lcikKICAgIHN1cGVyKFdpbmRvd0ludG8sIHNlbGYpLl9faW5pdF9fKHNlbGYuV2luZG93SW50b0ZuKHNlbGYud2luZG93aW5nKSkKCiAgZGVmIGdldF93aW5kb3dpbmcoc2VsZiwgdW51c2VkX2lucHV0cyk6CiAgICByZXR1cm4gc2VsZi53aW5kb3dpbmcKCiAgZGVmIGluZmVyX291dHB1dF90eXBlKHNlbGYsIGlucHV0X3R5cGUpOgogICAgcmV0dXJuIGlucHV0X3R5cGUKCiAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICBpbnB1dF90eXBlID0gcGNvbGwuZWxlbWVudF90eXBlCgogICAgaWYgaW5wdXRfdHlwZSBpcyBub3QgTm9uZToKICAgICAgb3V0cHV0X3R5cGUgPSBpbnB1dF90eXBlCiAgICAgIHNlbGYud2l0aF9pbnB1dF90eXBlcyhpbnB1dF90eXBlKQogICAgICBzZWxmLndpdGhfb3V0cHV0X3R5cGVzKG91dHB1dF90eXBlKQogICAgcmV0dXJuIHN1cGVyKFdpbmRvd0ludG8sIHNlbGYpLmV4cGFuZChwY29sbCkKCiAgZGVmIHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHNlbGYsIGNvbnRleHQpOgogICAgcmV0dXJuICgKICAgICAgICBjb21tb25fdXJucy5wcmltaXRpdmVzLkFTU0lHTl9XSU5ET1dTLnVybiwKICAgICAgICBzZWxmLndpbmRvd2luZy50b19ydW5uZXJfYXBpKGNvbnRleHQpKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXIocHJvdG8sIGNvbnRleHQpOgogICAgd2luZG93aW5nID0gV2luZG93aW5nLmZyb21fcnVubmVyX2FwaShwcm90bywgY29udGV4dCkKICAgIHJldHVybiBXaW5kb3dJbnRvKAogICAgICAgIHdpbmRvd2luZy53aW5kb3dmbiwKICAgICAgICB0cmlnZ2VyPXdpbmRvd2luZy50cmlnZ2VyZm4sCiAgICAgICAgYWNjdW11bGF0aW9uX21vZGU9d2luZG93aW5nLmFjY3VtdWxhdGlvbl9tb2RlLAogICAgICAgIHRpbWVzdGFtcF9jb21iaW5lcj13aW5kb3dpbmcudGltZXN0YW1wX2NvbWJpbmVyKQoKClBUcmFuc2Zvcm0ucmVnaXN0ZXJfdXJuKAogICAgY29tbW9uX3VybnMucHJpbWl0aXZlcy5BU1NJR05fV0lORE9XUy51cm4sCiAgICAjIFRPRE8ocm9iZXJ0d2IpOiBVcGRhdGUgV2luZG93SW50b1BheWxvYWQgdG8gaW5jbHVkZSB0aGUgZnVsbCBzdHJhdGVneS4KICAgICMgKFJpZ2h0IG5vdyBvbmx5IFdpbmRvd0ZuIGlzIHVzZWQsIGJ1dCB3ZSBuZWVkIHRoaXMgdG8gcmVjb25zdGl0dXRlIHRoZQogICAgIyBXaW5kb3dJbnRvIHRyYW5zZm9ybSwgYW5kIGluIHRoZSBmdXR1cmUgd2lsbCBuZWVkIGl0IGF0IHJ1bnRpbWUgdG8KICAgICMgc3VwcG9ydCBtZXRhLWRhdGEgZHJpdmVuIHRyaWdnZXJzLikKICAgICMgVE9ETyhyb2JlcnR3Yik6IFVzZSBhIHJlZmVyZW5jZSByYXRoZXIgdGhhbiBlbWJlZGRpbmc/CiAgICBiZWFtX3J1bm5lcl9hcGlfcGIyLldpbmRvd2luZ1N0cmF0ZWd5LAogICAgV2luZG93SW50by5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyKQoKCiMgUHl0aG9uJ3MgcGlja2xpbmcgaXMgYnJva2VuIGZvciBuZXN0ZWQgY2xhc3Nlcy4KV2luZG93SW50b0ZuID0gV2luZG93SW50by5XaW5kb3dJbnRvRm4KCgpjbGFzcyBGbGF0dGVuKFBUcmFuc2Zvcm0pOgogICIiIk1lcmdlcyBzZXZlcmFsIFBDb2xsZWN0aW9ucyBpbnRvIGEgc2luZ2xlIFBDb2xsZWN0aW9uLgoKICBDb3BpZXMgYWxsIGVsZW1lbnRzIGluIDAgb3IgbW9yZSBQQ29sbGVjdGlvbnMgaW50byBhIHNpbmdsZSBvdXRwdXQKICBQQ29sbGVjdGlvbi4gSWYgdGhlcmUgYXJlIG5vIGlucHV0IFBDb2xsZWN0aW9ucywgdGhlIHJlc3VsdGluZyBQQ29sbGVjdGlvbgogIHdpbGwgYmUgZW1wdHkgKGJ1dCBzZWUgYWxzbyBrd2FyZ3MgYmVsb3cpLgoKICBBcmdzOgogICAgKiprd2FyZ3M6IEFjY2VwdHMgYSBzaW5nbGUgbmFtZWQgYXJndW1lbnQgInBpcGVsaW5lIiwgd2hpY2ggc3BlY2lmaWVzIHRoZQogICAgICBwaXBlbGluZSB0aGF0ICJvd25zIiB0aGlzIFBUcmFuc2Zvcm0uIE9yZGluYXJpbHkgRmxhdHRlbiBjYW4gb2J0YWluIHRoaXMKICAgICAgaW5mb3JtYXRpb24gZnJvbSBvbmUgb2YgdGhlIGlucHV0IFBDb2xsZWN0aW9ucywgYnV0IGlmIHRoZXJlIGFyZSBub25lIChvcgogICAgICBpZiB0aGVyZSdzIGEgY2hhbmNlIHRoZXJlIG1heSBiZSBub25lKSwgdGhpcyBhcmd1bWVudCBpcyB0aGUgb25seSB3YXkgdG8KICAgICAgcHJvdmlkZSBwaXBlbGluZSBpbmZvcm1hdGlvbiBhbmQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgbWFuZGF0b3J5LgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgKiprd2FyZ3MpOgogICAgc3VwZXIoRmxhdHRlbiwgc2VsZikuX19pbml0X18oKQogICAgc2VsZi5waXBlbGluZSA9IGt3YXJncy5wb3AoJ3BpcGVsaW5lJywgTm9uZSkKICAgIGlmIGt3YXJnczoKICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5leHBlY3RlZCBrZXl3b3JkIGFyZ3VtZW50czogJXMnICUgbGlzdChrd2FyZ3MpKQoKICBkZWYgX2V4dHJhY3RfaW5wdXRfcHZhbHVlcyhzZWxmLCBwdmFsdWVpc2gpOgogICAgdHJ5OgogICAgICBwdmFsdWVpc2ggPSB0dXBsZShwdmFsdWVpc2gpCiAgICBleGNlcHQgVHlwZUVycm9yOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnB1dCB0byBGbGF0dGVuIG11c3QgYmUgYW4gaXRlcmFibGUuICcKICAgICAgICAgICAgICAgICAgICAgICAnR290IGEgdmFsdWUgb2YgdHlwZSAlcyBpbnN0ZWFkLicgJSB0eXBlKHB2YWx1ZWlzaCkpCiAgICByZXR1cm4gcHZhbHVlaXNoLCBwdmFsdWVpc2gKCiAgZGVmIGV4cGFuZChzZWxmLCBwY29sbHMpOgogICAgZm9yIHBjb2xsIGluIHBjb2xsczoKICAgICAgc2VsZi5fY2hlY2tfcGNvbGxlY3Rpb24ocGNvbGwpCiAgICByZXN1bHQgPSBwdmFsdWUuUENvbGxlY3Rpb24oc2VsZi5waXBlbGluZSkKICAgIHJlc3VsdC5lbGVtZW50X3R5cGUgPSB0eXBlaGludHMuVW5pb25bCiAgICAgICAgdHVwbGUocGNvbGwuZWxlbWVudF90eXBlIGZvciBwY29sbCBpbiBwY29sbHMpXQogICAgcmV0dXJuIHJlc3VsdAoKICBkZWYgZ2V0X3dpbmRvd2luZyhzZWxmLCBpbnB1dHMpOgogICAgaWYgbm90IGlucHV0czoKICAgICAgIyBUT0RPKHJvYmVydHdiKTogUmV0dXJuIHNvbWV0aGluZyBjb21wYXRpYmxlIHdpdGggZXZlcnkgd2luZG93aW5nPwogICAgICByZXR1cm4gV2luZG93aW5nKEdsb2JhbFdpbmRvd3MoKSkKICAgIHJldHVybiBzdXBlcihGbGF0dGVuLCBzZWxmKS5nZXRfd2luZG93aW5nKGlucHV0cykKCiAgZGVmIHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHNlbGYsIGNvbnRleHQpOgogICAgcmV0dXJuIGNvbW1vbl91cm5zLnByaW1pdGl2ZXMuRkxBVFRFTi51cm4sIE5vbmUKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBmcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHVudXNlZF9wYXJhbWV0ZXIsIHVudXNlZF9jb250ZXh0KToKICAgIHJldHVybiBGbGF0dGVuKCkKCgpQVHJhbnNmb3JtLnJlZ2lzdGVyX3VybigKICAgIGNvbW1vbl91cm5zLnByaW1pdGl2ZXMuRkxBVFRFTi51cm4sIE5vbmUsIEZsYXR0ZW4uZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcikKCgpjbGFzcyBDcmVhdGUoUFRyYW5zZm9ybSk6CiAgIiIiQSB0cmFuc2Zvcm0gdGhhdCBjcmVhdGVzIGEgUENvbGxlY3Rpb24gZnJvbSBhbiBpdGVyYWJsZS4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlcywgcmVzaHVmZmxlPVRydWUpOgogICAgIiIiSW5pdGlhbGl6ZXMgYSBDcmVhdGUgdHJhbnNmb3JtLgoKICAgIEFyZ3M6CiAgICAgIHZhbHVlczogQW4gb2JqZWN0IG9mIHZhbHVlcyBmb3IgdGhlIFBDb2xsZWN0aW9uCiAgICAiIiIKICAgIHN1cGVyKENyZWF0ZSwgc2VsZikuX19pbml0X18oKQogICAgaWYgaXNpbnN0YW5jZSh2YWx1ZXMsICh1bmljb2RlLCBzdHIsIGJ5dGVzKSk6CiAgICAgIHJhaXNlIFR5cGVFcnJvcignUFRyYW5zZm9ybSBDcmVhdGU6IFJlZnVzaW5nIHRvIHRyZWF0IHN0cmluZyBhcyAnCiAgICAgICAgICAgICAgICAgICAgICAnYW4gaXRlcmFibGUuIChzdHJpbmc9JXIpJyAlIHZhbHVlcykKICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZXMsIGRpY3QpOgogICAgICB2YWx1ZXMgPSB2YWx1ZXMuaXRlbXMoKQogICAgc2VsZi52YWx1ZXMgPSB0dXBsZSh2YWx1ZXMpCiAgICBzZWxmLnJlc2h1ZmZsZSA9IHJlc2h1ZmZsZQoKICBkZWYgdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoc2VsZiwgY29udGV4dCk6CiAgICAjIFJlcXVpcmVkIGFzIHRoaXMgaXMgaWRlbnRpZmllZCBieSB0eXBlIGluIFBUcmFuc2Zvcm1PdmVycmlkZXMuCiAgICAjIFRPRE8oQkVBTS0zODEyKTogVXNlIGFuIGFjdHVhbCBVUk4gaGVyZS4KICAgIHJldHVybiBzZWxmLnRvX3J1bm5lcl9hcGlfcGlja2xlZChjb250ZXh0KQoKICBkZWYgaW5mZXJfb3V0cHV0X3R5cGUoc2VsZiwgdW51c2VkX2lucHV0X3R5cGUpOgogICAgaWYgbm90IHNlbGYudmFsdWVzOgogICAgICByZXR1cm4gQW55CiAgICByZXR1cm4gVW5pb25bW3RyaXZpYWxfaW5mZXJlbmNlLmluc3RhbmNlX3RvX3R5cGUodikgZm9yIHYgaW4gc2VsZi52YWx1ZXNdXQoKICBkZWYgZ2V0X291dHB1dF90eXBlKHNlbGYpOgogICAgcmV0dXJuIChzZWxmLmdldF90eXBlX2hpbnRzKCkuc2ltcGxlX291dHB1dF90eXBlKHNlbGYubGFiZWwpIG9yCiAgICAgICAgICAgIHNlbGYuaW5mZXJfb3V0cHV0X3R5cGUoTm9uZSkpCgogIGRlZiBleHBhbmQoc2VsZiwgcGJlZ2luKToKICAgIGFzc2VydCBpc2luc3RhbmNlKHBiZWdpbiwgcHZhbHVlLlBCZWdpbikKICAgICMgTXVzdCBndWFyZCBhZ2FpbnN0IHRoaXMgYXMgc29tZSBsZWdhY3kgcnVubmVycyBkb24ndCBpbXBsZW1lbnQgaW1wdWxzZS4KICAgIGRlYnVnX29wdGlvbnMgPSBwYmVnaW4ucGlwZWxpbmUuX29wdGlvbnMudmlld19hcyhEZWJ1Z09wdGlvbnMpCiAgICBmbl9hcGkgPSAoZGVidWdfb3B0aW9ucy5leHBlcmltZW50cwogICAgICAgICAgICAgIGFuZCAnYmVhbV9mbl9hcGknIGluIGRlYnVnX29wdGlvbnMuZXhwZXJpbWVudHMpCiAgICBpZiBmbl9hcGk6CiAgICAgIGNvZGVyID0gdHlwZWNvZGVycy5yZWdpc3RyeS5nZXRfY29kZXIoc2VsZi5nZXRfb3V0cHV0X3R5cGUoKSkKICAgICAgc2VyaWFsaXplZF92YWx1ZXMgPSBbY29kZXIuZW5jb2RlKHYpIGZvciB2IGluIHNlbGYudmFsdWVzXQogICAgICByZXNodWZmbGUgPSBzZWxmLnJlc2h1ZmZsZQogICAgICAjIEF2b2lkIHRoZSAicmVkaXN0cmlidXRpbmciIHJlc2h1ZmZsZSBmb3IgMCBhbmQgMSBlbGVtZW50IENyZWF0ZXMuCiAgICAgICMgVGhlc2Ugc3BlY2lhbCBjYXNlcyBhcmUgb2Z0ZW4gdXNlZCBpbiBidWlsZGluZyB1cCBtb3JlIGNvbXBsZXgKICAgICAgIyB0cmFuc2Zvcm1zIChlLmcuIFdyaXRlKS4KCiAgICAgIGNsYXNzIE1heWJlUmVzaHVmZmxlKFBUcmFuc2Zvcm0pOgogICAgICAgIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgICAgICAgaWYgbGVuKHNlcmlhbGl6ZWRfdmFsdWVzKSA+IDEgYW5kIHJlc2h1ZmZsZToKICAgICAgICAgICAgZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwgaW1wb3J0IFJlc2h1ZmZsZQogICAgICAgICAgICByZXR1cm4gcGNvbGwgfCBSZXNodWZmbGUoKQogICAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIHBjb2xsCiAgICAgIHJldHVybiAoCiAgICAgICAgICBwYmVnaW4KICAgICAgICAgIHwgSW1wdWxzZSgpCiAgICAgICAgICB8IEZsYXRNYXAobGFtYmRhIF86IHNlcmlhbGl6ZWRfdmFsdWVzKQogICAgICAgICAgfCBNYXliZVJlc2h1ZmZsZSgpCiAgICAgICAgICB8IE1hcChjb2Rlci5kZWNvZGUpLndpdGhfb3V0cHV0X3R5cGVzKHNlbGYuZ2V0X291dHB1dF90eXBlKCkpKQogICAgZWxzZToKICAgICAgc2VsZi5waXBlbGluZSA9IHBiZWdpbi5waXBlbGluZQogICAgICBmcm9tIGFwYWNoZV9iZWFtLmlvIGltcG9ydCBpb2Jhc2UKICAgICAgY29kZXIgPSB0eXBlY29kZXJzLnJlZ2lzdHJ5LmdldF9jb2RlcihzZWxmLmdldF9vdXRwdXRfdHlwZSgpKQogICAgICBzb3VyY2UgPSBzZWxmLl9jcmVhdGVfc291cmNlX2Zyb21faXRlcmFibGUoc2VsZi52YWx1ZXMsIGNvZGVyKQogICAgICByZXR1cm4gKHBiZWdpbi5waXBlbGluZQogICAgICAgICAgICAgIHwgaW9iYXNlLlJlYWQoc291cmNlKS53aXRoX291dHB1dF90eXBlcyhzZWxmLmdldF9vdXRwdXRfdHlwZSgpKSkKCiAgZGVmIGdldF93aW5kb3dpbmcoc2VsZiwgdW51c2VkX2lucHV0cyk6CiAgICByZXR1cm4gV2luZG93aW5nKEdsb2JhbFdpbmRvd3MoKSkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBfY3JlYXRlX3NvdXJjZV9mcm9tX2l0ZXJhYmxlKHZhbHVlcywgY29kZXIpOgogICAgcmV0dXJuIENyZWF0ZS5fY3JlYXRlX3NvdXJjZShsaXN0KG1hcChjb2Rlci5lbmNvZGUsIHZhbHVlcykpLCBjb2RlcikKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBfY3JlYXRlX3NvdXJjZShzZXJpYWxpemVkX3ZhbHVlcywgY29kZXIpOgogICAgZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNyZWF0ZV9zb3VyY2UgaW1wb3J0IF9DcmVhdGVTb3VyY2UKCiAgICByZXR1cm4gX0NyZWF0ZVNvdXJjZShzZXJpYWxpemVkX3ZhbHVlcywgY29kZXIpCgoKY2xhc3MgSW1wdWxzZShQVHJhbnNmb3JtKToKICAiIiJJbXB1bHNlIHByaW1pdGl2ZS4iIiIKCiAgZGVmIGV4cGFuZChzZWxmLCBwYmVnaW4pOgogICAgaWYgbm90IGlzaW5zdGFuY2UocGJlZ2luLCBwdmFsdWUuUEJlZ2luKToKICAgICAgcmFpc2UgVHlwZUVycm9yKAogICAgICAgICAgJ0lucHV0IHRvIEltcHVsc2UgdHJhbnNmb3JtIG11c3QgYmUgYSBQQmVnaW4gYnV0IGZvdW5kICVzJyAlIHBiZWdpbikKICAgIHJldHVybiBwdmFsdWUuUENvbGxlY3Rpb24ocGJlZ2luLnBpcGVsaW5lKQoKICBkZWYgZ2V0X3dpbmRvd2luZyhzZWxmLCBpbnB1dHMpOgogICAgcmV0dXJuIFdpbmRvd2luZyhHbG9iYWxXaW5kb3dzKCkpCgogIGRlZiBpbmZlcl9vdXRwdXRfdHlwZShzZWxmLCB1bnVzZWRfaW5wdXRfdHlwZSk6CiAgICByZXR1cm4gYnl0ZXMKCiAgZGVmIHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHNlbGYsIHVudXNlZF9jb250ZXh0KToKICAgIHJldHVybiBjb21tb25fdXJucy5wcmltaXRpdmVzLklNUFVMU0UudXJuLCBOb25lCgogIEBQVHJhbnNmb3JtLnJlZ2lzdGVyX3Vybihjb21tb25fdXJucy5wcmltaXRpdmVzLklNUFVMU0UudXJuLCBOb25lKQogIGRlZiBmcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHVudXNlZF9wYXJhbWV0ZXIsIHVudXNlZF9jb250ZXh0KToKICAgIHJldHVybiBJbXB1bHNlKCkKfXL0gwAAKFgJAAAAQ29tYmluZUZuWAUAAABjbGFzc00WAk2aAodYKwAAAENhbGxhYmxlV3JhcHBlckNvbWJpbmVGbi5jcmVhdGVfYWNjdW11bGF0b3JYAwAAAGRlZk2+Ak3AAodYFQAAAEZsYXR0ZW4uZ2V0X3dpbmRvd2luZ1gDAAAAZGVmTbcHTbwHh1gXAAAAV2luZG93SW50by5XaW5kb3dJbnRvRm5YBQAAAGNsYXNzTToHTUYHh1gnAAAAUmVzdHJpY3Rpb25Qcm92aWRlci5pbml0aWFsX3Jlc3RyaWN0aW9uWAMAAABkZWZL9kv5h1gdAAAAQ29tYmluZUZuLm1heWJlX2Zyb21fY2FsbGFibGVYAwAAAGRlZk2NAk2VAodYGQAAAFBhckRvLl9wcm9jZXNzX2FyZ3NwZWNfZm5YAwAAAGRlZk14A016A4dYIwAAAF9Hcm91cEFsc29CeVdpbmRvd0RvRm4uc3RhcnRfYnVuZGxlWAMAAABkZWZNpwZNrAaHWBQAAABDcmVhdGUuZ2V0X3dpbmRvd2luZ1gDAAAAZGVmTQwITQ4Ih1gSAAAAUGFyRG8ud2l0aF9vdXRwdXRzWAMAAABkZWZNmANNuwOHWBsAAABDb21iaW5lUGVyS2V5LmRlZmF1bHRfbGFiZWxYAwAAAGRlZk1RBU1TBYdYGQAAAF9Hcm91cEFsc29CeVdpbmRvdy5leHBhbmRYAwAAAGRlZk2VBk2YBodYIwAAAENhbGxhYmxlV3JhcHBlckNvbWJpbmVGbi5hZGRfaW5wdXRzWAMAAABkZWZNxgJN0QKHWBsAAABDb21iaW5lR2xvYmFsbHkud2l0aF9mYW5vdXRYAwAAAGRlZk3XBE3ZBIdYHwAAAEltcHVsc2UudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJYAwAAAGRlZk0pCE0rCIdYDAAAAFBhckRvLmV4cGFuZFgDAAAAZGVmTYADTZcDh1gGAAAARmlsdGVyWAMAAABkZWZNVARNgwSHWCQAAABQYXJ0aXRpb24uQXBwbHlQYXJ0aXRpb25GbkZuLnByb2Nlc3NYAwAAAGRlZk3GBk3PBodYEgAAAF9NdWx0aVBhckRvLmV4cGFuZFgDAAAAZGVmTfsDTf8Dh1gVAAAAQ29tYmluZVZhbHVlcy5tYWtlX2ZuWAMAAABkZWZNgwVNhQWHWBwAAABQYXJ0aXRpb24uQXBwbHlQYXJ0aXRpb25GbkZuWAUAAABjbGFzc03DBk3PBodYEgAAAERvRm5Qcm9jZXNzQ29udGV4dFgFAAAAY2xhc3NLZkuZh1ggAAAAV2luZG93SW50by5XaW5kb3dJbnRvRm4uX19pbml0X19YAwAAAGRlZk09B00/B4dYBwAAAEZsYXR0ZW5YBQAAAGNsYXNzTZIHTcMHh1gQAAAARmxhdHRlbi5fX2luaXRfX1gDAAAAZGVmTaEHTaYHh1gdAAAAQ29tYmluZUdsb2JhbGx5LmRlZmF1bHRfbGFiZWxYAwAAAGRlZk3JBE3RBIdYGQAAAFBhcnRpdGlvbkZuLmRlZmF1bHRfbGFiZWxYAwAAAGRlZk0RA00TA4dYDgAAAFBhckRvLl9faW5pdF9fWAMAAABkZWZNXwNNawOHWCwAAABfQ29tYmluZVBlcktleVdpdGhIb3RLZXlGYW5vdXQuZGVmYXVsdF9sYWJlbFgDAAAAZGVmTeMFTegFh1gcAAAAQ29tYmluZUZuLm1lcmdlX2FjY3VtdWxhdG9yc1gDAAAAZGVmTVsCTWUCh1gYAAAAX1RpbWVyRG9GblBhcmFtLl9faW5pdF9fWAMAAABkZWZNQwFNSAGHWBoAAABDb21iaW5lVmFsdWVzRG9Gbi5fX2luaXRfX1gDAAAAZGVmTaoFTa4Fh1gcAAAAQ2FsbGFibGVXcmFwcGVyRG9Gbi5fX3JlcHJfX1gDAAAAZGVmTfsBTf0Bh1ghAAAAQ29tYmluZUdsb2JhbGx5LmFzX3NpbmdsZXRvbl92aWV3WAMAAABkZWZN4ARN4gSHWBUAAABJbXB1bHNlLmdldF93aW5kb3dpbmdYAwAAAGRlZk0jCE0lCIdYKAAAAF9Hcm91cEFsc29CeVdpbmRvd0RvRm4uaW5mZXJfb3V0cHV0X3R5cGVYAwAAAGRlZk2hBk2mBodYDQAAAENyZWF0ZS5leHBhbmRYAwAAAGRlZk3pB00LCIdYJwAAAENvbWJpbmVQZXJLZXkuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlclgDAAAAZGVmTXUFTXsFh1gEAAAARG9GblgFAAAAY2xhc3NNSgFNvQGHWCQAAABXaW5kb3dJbnRvLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXJYAwAAAGRlZk15B02BB4dYCgAAAF9Eb0ZuUGFyYW1YBQAAAGNsYXNzTSABTTQBh1gjAAAAQ2FsbGFibGVXcmFwcGVyUGFydGl0aW9uRm4uX19pbml0X19YAwAAAGRlZk0rA006A4dYHAAAAENvbWJpbmVGbi5jcmVhdGVfYWNjdW11bGF0b3JYAwAAAGRlZk00Ak08AodYJQAAAFJlc3RyaWN0aW9uUHJvdmlkZXIucmVzdHJpY3Rpb25fY29kZXJYAwAAAGRlZk0HAU0RAYdYEQAAAFBhcnRpdGlvbi5tYWtlX2ZuWAMAAABkZWZN0AZN0gaHWCAAAABDYWxsYWJsZVdyYXBwZXJEb0ZuLmRpc3BsYXlfZGF0YVgDAAAAZGVmTfEBTfoBh1gYAAAAUGFyRG8uZGVmYXVsdF90eXBlX2hpbnRzWAMAAABkZWZNbANNbgOHWA8AAABDb21iaW5lRm4uYXBwbHlYAwAAAGRlZk1xAk1+AodYKwAAAENhbGxhYmxlV3JhcHBlckNvbWJpbmVGbi5tZXJnZV9hY2N1bXVsYXRvcnNYAwAAAGRlZk3SAk3bAodYGQAAAFJlc3RyaWN0aW9uUHJvdmlkZXIuc3BsaXRYAwAAAGRlZkv6TQYBh1gSAAAAV2luZG93aW5nLl9faW5pdF9fWAMAAABkZWZN2wZN9waHWAkAAABXaW5kb3dpbmdYBQAAAGNsYXNzTdoGTS0Hh1glAAAAQ2FsbGFibGVXcmFwcGVyRG9Gbi5pbmZlcl9vdXRwdXRfdHlwZVgDAAAAZGVmTQsCTQ4Ch1ggAAAAQ29tYmluZUdsb2JhbGx5LndpdGhvdXRfZGVmYXVsdHNYAwAAAGRlZk3dBE3fBIdYIgAAAFJlc3RyaWN0aW9uUHJvdmlkZXIuY3JlYXRlX3RyYWNrZXJYAwAAAGRlZkvqS/WHWBQAAABXaW5kb3dpbmcuaXNfZGVmYXVsdFgDAAAAZGVmTRAHTRIHh1gPAAAAQ29tYmluZUdsb2JhbGx5WAUAAABjbGFzc02MBE0UBYdYEQAAAERvRm4uc3RhcnRfYnVuZGxlWAMAAABkZWZNhgFNjgGHWB4AAABEb0ZuLl9zdHJpcF9vdXRwdXRfYW5ub3RhdGlvbnNYAwAAAGRlZk2fAU2nAYdYEgAAAFdpbmRvd2luZy5fX3JlcHJfX1gDAAAAZGVmTfgGTfwGh1geAAAAX0dyb3VwQWxzb0J5V2luZG93RG9Gbi5wcm9jZXNzWAMAAABkZWZNrQZNsAaHWDAAAABfQ29tYmluZVBlcktleVdpdGhIb3RLZXlGYW5vdXQuZXhwYW5kLlN0cmlwTm9uY2VYAwAAAGRlZk0bBk0eBodYBwAAAEltcHVsc2VYBQAAAGNsYXNzTRoITS8Ih1gdAAAAUGFyRG8udG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJYAwAAAGRlZk3BA03aA4dYIQAAAENvbWJpbmVQZXJLZXkuX3Byb2Nlc3NfYXJnc3BlY19mblgDAAAAZGVmTVQFTVYFh1gSAAAARG9Gbi5mcm9tX2NhbGxhYmxlWAMAAABkZWZNZgFNaQGHWBwAAABDb21iaW5lR2xvYmFsbHkuZGlzcGxheV9kYXRhWAMAAABkZWZNwQRNyASHWCYAAABDYWxsYWJsZVdyYXBwZXJEb0ZuLmRlZmF1bHRfdHlwZV9oaW50c1gDAAAAZGVmTf4BTQoCh1gDAAAATWFwWAMAAABkZWZNIwRNUgSHWBgAAABDb21iaW5lR2xvYmFsbHkuX19pbml0X19YAwAAAGRlZk22BE3ABIdYQQAAAF9Db21iaW5lUGVyS2V5V2l0aEhvdEtleUZhbm91dC5leHBhbmQuUHJlQ29tYmluZUZuLmV4dHJhY3Rfb3V0cHV0WAMAAABkZWZNAwZNBwaHWBcAAABDb21iaW5lRm4uZGVmYXVsdF9sYWJlbFgDAAAAZGVmTTECTTMCh1glAAAAX0NvbWJpbmVQZXJLZXlXaXRoSG90S2V5RmFub3V0LmV4cGFuZFgDAAAAZGVmTekFTS0Gh1gZAAAAQ29tYmluZVZhbHVlc0RvRm4ucHJvY2Vzc1gDAAAAZGVmTa8FTcwFh1glAAAAQ29tYmluZVZhbHVlcy50b19ydW5uZXJfYXBpX3BhcmFtZXRlclgDAAAAZGVmTZUFTZ4Fh1gSAAAARG9Gbi5maW5pc2hfYnVuZGxlWAMAAABkZWZNjwFNkwGHWBQAAABfTXVsdGlQYXJEby5fX2luaXRfX1gDAAAAZGVmTfUDTfoDh1gNAAAAQ29tYmluZVZhbHVlc1gFAAAAY2xhc3NNgQVNpQWHWBUAAABfZm5fdGFrZXNfc2lkZV9pbnB1dHNYAwAAAGRlZk2/AU3QAYdYCQAAAFBhcnRpdGlvblgFAAAAY2xhc3NNsgZN2AaHWA8AAABfU3RhdGVEb0ZuUGFyYW1YBQAAAGNsYXNzTTYBTT4Bh1gkAAAAQ29tYmluZVZhbHVlc0RvRm4uZGVmYXVsdF90eXBlX2hpbnRzWAMAAABkZWZNzQVN2gWHWBEAAABfRG9GblBhcmFtLl9fZXFfX1gDAAAAZGVmTSYBTSoBh1g6AAAAX0NvbWJpbmVQZXJLZXlXaXRoSG90S2V5RmFub3V0LmV4cGFuZC5TcGxpdEhvdENvbGQucHJvY2Vzc1gDAAAAZGVmTfkFTQEGh1gnAAAAQ2FsbGFibGVXcmFwcGVyQ29tYmluZUZuLmV4dHJhY3Rfb3V0cHV0WAMAAABkZWZN3AJN3gKHWBYAAABfR3JvdXBCeUtleU9ubHkuZXhwYW5kWAMAAABkZWZNhwZNigaHWBgAAABEb0ZuLl9wcm9jZXNzX2FyZ3NwZWNfZm5YAwAAAGRlZk2oAU2wAYdYJAAAAEdyb3VwQnlLZXkuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlclgDAAAAZGVmTXcGTXoGh1gYAAAAQ2FsbGFibGVXcmFwcGVyQ29tYmluZUZuWAUAAABjbGFzc02cAk0IA4dYBgAAAENyZWF0ZVgFAAAAY2xhc3NNyQdNGAiHWBAAAABQYXJ0aXRpb24uZXhwYW5kWAMAAABkZWZN0wZN2AaHWA8AAABfVGltZXJEb0ZuUGFyYW1YBQAAAGNsYXNzTUABTUgBh1gQAAAAV2luZG93aW5nLl9fbmVfX1gDAAAAZGVmTQgHTQsHh1gYAAAAX1N0YXRlRG9GblBhcmFtLl9faW5pdF9fWAMAAABkZWZNOQFNPgGHWCcAAABDb21iaW5lVmFsdWVzLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXJYAwAAAGRlZk2fBU2lBYdYEwAAAF9Eb0ZuUGFyYW0uX19yZXByX19YAwAAAGRlZk0yAU00AYdYJgAAAENvbWJpbmVHbG9iYWxseS5leHBhbmQuYWRkX2lucHV0X3R5cGVzWAMAAABkZWZN5ARN6QSHWBcAAABQYXJEby5pbmZlcl9vdXRwdXRfdHlwZVgDAAAAZGVmTW8DTXIDh1gSAAAARG9Gbi5kZWZhdWx0X2xhYmVsWAMAAABkZWZNagFNbAGHWB8AAABHcm91cEJ5S2V5LlJlaWZ5V2luZG93cy5wcm9jZXNzWAMAAABkZWZNPgZNRwaHWA4AAABGbGF0dGVuLmV4cGFuZFgDAAAAZGVmTa8HTbYHh1gyAAAAX0NvbWJpbmVQZXJLZXlXaXRoSG90S2V5RmFub3V0LmV4cGFuZC5QcmVDb21iaW5lRm5YBQAAAGNsYXNzTQIGTQwGh1gpAAAAR3JvdXBCeUtleS5SZWlmeVdpbmRvd3MuaW5mZXJfb3V0cHV0X3R5cGVYAwAAAGRlZk1IBk1LBodYFQAAAENyZWF0ZS5fY3JlYXRlX3NvdXJjZVgDAAAAZGVmTRMITRgIh1gYAAAAV2luZG93SW50by5nZXRfd2luZG93aW5nWAMAAABkZWZNZQdNZweHWA4AAABJbXB1bHNlLmV4cGFuZFgDAAAAZGVmTR0ITSIIh1gRAAAAV2luZG93SW50by5leHBhbmRYAwAAAGRlZk1rB01zB4dYHAAAAEdyb3VwQnlLZXkuaW5mZXJfb3V0cHV0X3R5cGVYAwAAAGRlZk1wBk1zBodYIgAAAENhbGxhYmxlV3JhcHBlckNvbWJpbmVGbi5hZGRfaW5wdXRYAwAAAGRlZk3BAk3FAodYFAAAAENvbWJpbmVQZXJLZXkuZXhwYW5kWAMAAABkZWZNVwVNXAWHWCIAAABXaW5kb3dJbnRvLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyWAMAAABkZWZNdAdNeAeHWCkAAABDYWxsYWJsZVdyYXBwZXJDb21iaW5lRm4uYWRkX2lucHV0cy51bmlvblgDAAAAZGVmTcwCTdACh1hTAAAAQ2FsbGFibGVXcmFwcGVyQ29tYmluZUZuLm1lcmdlX2FjY3VtdWxhdG9ycy5SZWl0ZXJhYmxlTm9uRW1wdHlBY2N1bXVsYXRvcnMuX19pdGVyX19YAwAAAGRlZk3WAk3YAodYGAAAAENvbWJpbmVGbi5leHRyYWN0X291dHB1dFgDAAAAZGVmTWYCTXACh1gNAAAAQ29tYmluZVBlcktleVgFAAAAY2xhc3NNFgVNfgWHWBMAAABDb21iaW5lRm4uYWRkX2lucHV0WAMAAABkZWZNPQJNSQKHWB8AAABQYXJEby5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyWAMAAABkZWZN2wNN7gOHWBEAAABfRG9GblBhcmFtLl9fbmVfX1gDAAAAZGVmTSsBTS4Bh1gUAAAAUGFyRG8uX3BhcmRvX2ZuX2RhdGFYAwAAAGRlZk28A03AA4dYIgAAAEdyb3VwQnlLZXkudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJYAwAAAGRlZk10Bk12BodYKwAAAENhbGxhYmxlV3JhcHBlckNvbWJpbmVGbi5kZWZhdWx0X3R5cGVfaGludHNYAwAAAGRlZk3fAk32AodYIQAAAEZsYXR0ZW4uZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlclgDAAAAZGVmTcAHTcMHh1gMAAAARG9Gbi5wcm9jZXNzWAMAAABkZWZNbQFNhQGHWCoAAABHcm91cEJ5S2V5LnJ1bm5lcl9hcGlfcmVxdWlyZXNfa2V5ZWRfaW5wdXRYAwAAAGRlZk17Bk19BodYIwAAAENyZWF0ZS5fY3JlYXRlX3NvdXJjZV9mcm9tX2l0ZXJhYmxlWAMAAABkZWZNDwhNEgiHWAsAAABEb0ZuQ29udGV4dFgFAAAAY2xhc3NLYUtkh1gfAAAAV2luZG93SW50by5XaW5kb3dJbnRvRm4ucHJvY2Vzc1gDAAAAZGVmTUAHTUYHh1gWAAAAQ29tYmluZUdsb2JhbGx5Ll9jbG9uZVgDAAAAZGVmTdIETdYEh1gFAAAAUGFyRG9YBQAAAGNsYXNzTT8DTfEDh1gyAAAAX0NvbWJpbmVQZXJLZXlXaXRoSG90S2V5RmFub3V0LmV4cGFuZC5TcGxpdEhvdENvbGRYBQAAAGNsYXNzTe8FTQEGh1gkAAAAQ2FsbGFibGVXcmFwcGVyRG9Gbi5faW5zcGVjdF9wcm9jZXNzWAMAAABkZWZNEgJNFAKHWCcAAABfQ29tYmluZVBlcktleVdpdGhIb3RLZXlGYW5vdXQuX19pbml0X19YAwAAAGRlZk3eBU3iBYdYGgAAAENhbGxhYmxlV3JhcHBlclBhcnRpdGlvbkZuWAUAAABjbGFzc00jA009A4dYFgAAAERvRm4uaW5mZXJfb3V0cHV0X3R5cGVYAwAAAGRlZk2ZAU2eAYdYGQAAAFBhcnRpdGlvbkZuLnBhcnRpdGlvbl9mb3JYAwAAAGRlZk0UA00hA4dYEgAAAFBhckRvLmRpc3BsYXlfZGF0YVgDAAAAZGVmTXsDTX8Dh1gTAAAAUmVzdHJpY3Rpb25Qcm92aWRlclgFAAAAY2xhc3NLvE0RAYdYIQAAAF9Hcm91cEJ5S2V5T25seS5pbmZlcl9vdXRwdXRfdHlwZVgDAAAAZGVmTYMGTYYGh1ghAAAASW1wdWxzZS5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyWAMAAABkZWZNLAhNLwiHWBQAAABDb21iaW5lRm4uYWRkX2lucHV0c1gDAAAAZGVmTUoCTVoCh1gXAAAARG9Gbi5pc19wcm9jZXNzX2JvdW5kZWRYAwAAAGRlZk2xAU27AYdYEwAAAENhbGxhYmxlV3JhcHBlckRvRm5YBQAAAGNsYXNzTdIBTRQCh1gLAAAAX011bHRpUGFyRG9YBQAAAGNsYXNzTfMDTf8Dh1geAAAARmxhdHRlbi5fZXh0cmFjdF9pbnB1dF9wdmFsdWVzWAMAAABkZWZNpwdNrgeHWAoAAABHcm91cEJ5S2V5WAUAAABjbGFzc00vBk19BodYDwAAAF9Hcm91cEJ5S2V5T25seVgFAAAAY2xhc3NNfwZNigaHWA0AAABQYXJEby5tYWtlX2ZuWAMAAABkZWZNcwNNdwOHWCEAAABDb21iaW5lUGVyS2V5LndpdGhfaG90X2tleV9mYW5vdXRYAwAAAGRlZk0pBU1GBYdYHwAAAENvbWJpbmVGbi5nZXRfYWNjdW11bGF0b3JfY29kZXJYAwAAAGRlZk2WAk2YAodYSgAAAENhbGxhYmxlV3JhcHBlckNvbWJpbmVGbi5tZXJnZV9hY2N1bXVsYXRvcnMuUmVpdGVyYWJsZU5vbkVtcHR5QWNjdW11bGF0b3JzWAUAAABjbGFzc03VAk3YAodYGQAAAEltcHVsc2UuaW5mZXJfb3V0cHV0X3R5cGVYAwAAAGRlZk0mCE0oCIdYJwAAAENhbGxhYmxlV3JhcHBlckNvbWJpbmVGbi5mb3JfaW5wdXRfdHlwZVgDAAAAZGVmTfcCTQgDh1goAAAAQ2FsbGFibGVXcmFwcGVyUGFydGl0aW9uRm4ucGFydGl0aW9uX2ZvclgDAAAAZGVmTTsDTT0Dh1gbAAAARG9Gbi5nZXRfZnVuY3Rpb25fYXJndW1lbnRzWAMAAABkZWZNlAFNlgGHWB4AAABfQ29tYmluZVBlcktleVdpdGhIb3RLZXlGYW5vdXRYBQAAAGNsYXNzTdwFTS0Gh1gPAAAAQ3JlYXRlLl9faW5pdF9fWAMAAABkZWZNzAdN2geHWBEAAABHcm91cEJ5S2V5LmV4cGFuZFgDAAAAZGVmTUwGTW8Gh1gbAAAARG9GblByb2Nlc3NDb250ZXh0Ll9faW5pdF9fWAMAAABkZWZLe0uNh1gzAAAAX0NvbWJpbmVQZXJLZXlXaXRoSG90S2V5RmFub3V0LmV4cGFuZC5Qb3N0Q29tYmluZUZuWAUAAABjbGFzc00NBk0aBodYHAAAAENhbGxhYmxlV3JhcHBlckRvRm4uX19pbml0X19YAwAAAGRlZk3bAU3wAYdYFwAAAEdyb3VwQnlLZXkuUmVpZnlXaW5kb3dzWAUAAABjbGFzc008Bk1LBodYHgAAAERvRm5Qcm9jZXNzQ29udGV4dC5zZXRfZWxlbWVudFgDAAAAZGVmS45LmYdYIQAAAENhbGxhYmxlV3JhcHBlckNvbWJpbmVGbi5fX3JlcHJfX1gDAAAAZGVmTbsCTb0Ch1glAAAAQ29tYmluZVBlcktleS50b19ydW5uZXJfYXBpX3BhcmFtZXRlclgDAAAAZGVmTWsFTXQFh1gaAAAAQ29tYmluZVBlcktleS5kaXNwbGF5X2RhdGFYAwAAAGRlZk1HBU1MBYdYHAAAAENvbWJpbmVHbG9iYWxseS5leHBhbmQudHlwZWRYAwAAAGRlZk0MBU0RBYdYEwAAAF9Eb0ZuUGFyYW0uX19oYXNoX19YAwAAAGRlZk0vAU0xAYdYFgAAAENvbWJpbmVHbG9iYWxseS5leHBhbmRYAwAAAGRlZk3jBE0UBYdYGAAAAENyZWF0ZS5pbmZlcl9vdXRwdXRfdHlwZVgDAAAAZGVmTeAHTeQHh1gaAAAAUHJvY2Vzc0NvbnRpbnVhdGlvbi5yZXN1bWVYAwAAAGRlZkuvS7qHWBYAAABnZXRfZnVuY3Rpb25fYXJndW1lbnRzWAMAAABkZWZNEwFNHgGHWBMAAABQcm9jZXNzQ29udGludWF0aW9uWAUAAABjbGFzc0ubS7qHWAoAAABXaW5kb3dJbnRvWAUAAABjbGFzc00vB02BB4dYCwAAAFBhcnRpdGlvbkZuWAUAAABjbGFzc00KA00hA4dYEwAAAF9Eb0ZuUGFyYW0uX19pbml0X19YAwAAAGRlZk0jAU0lAYdYFAAAAENvbWJpbmVWYWx1ZXMuZXhwYW5kWAMAAABkZWZNhgVNlAWHWC0AAABDb21iaW5lUGVyS2V5LnJ1bm5lcl9hcGlfcmVxdWlyZXNfa2V5ZWRfaW5wdXRYAwAAAGRlZk18BU1+BYdYFgAAAENyZWF0ZS5nZXRfb3V0cHV0X3R5cGVYAwAAAGRlZk3lB03oB4dYEgAAAFdpbmRvd2luZy5fX2hhc2hfX1gDAAAAZGVmTQwHTQ8Hh1gbAAAAX0dyb3VwQWxzb0J5V2luZG93Ll9faW5pdF9fWAMAAABkZWZNkAZNlAaHWB8AAABfR3JvdXBBbHNvQnlXaW5kb3dEb0ZuLl9faW5pdF9fWAMAAABkZWZNnQZNoAaHWBgAAABDb21iaW5lRm4uZm9yX2lucHV0X3R5cGVYAwAAAGRlZk1/Ak2IAodYEAAAAFdpbmRvd2luZy5fX2VxX19YAwAAAGRlZk39Bk0HB4dYFQAAAENvbWJpbmVQZXJLZXkubWFrZV9mblgDAAAAZGVmTU0FTVAFh1gRAAAAQ29tYmluZVZhbHVlc0RvRm5YBQAAAGNsYXNzTacFTdoFh1gXAAAAV2luZG93aW5nLnRvX3J1bm5lcl9hcGlYAwAAAGRlZk0TB00jB4dYEwAAAFdpbmRvd0ludG8uX19pbml0X19YAwAAAGRlZk1HB01kB4dYJQAAAENhbGxhYmxlV3JhcHBlckNvbWJpbmVGbi5kaXNwbGF5X2RhdGFYAwAAAGRlZk24Ak26AodYEAAAAF9jb21iaW5lX3BheWxvYWRYAwAAAGRlZk2FBE2KBIdYHQAAAENvbWJpbmVHbG9iYWxseS53aXRoX2RlZmF1bHRzWAMAAABkZWZN2gRN3ASHWAcAAABGbGF0TWFwWAMAAABkZWZNAQRNIQSHWBkAAABXaW5kb3dpbmcuZnJvbV9ydW5uZXJfYXBpWAMAAABkZWZNJAdNLQeHWCEAAABDYWxsYWJsZVdyYXBwZXJDb21iaW5lRm4uX19pbml0X19YAwAAAGRlZk2mAk23AodYFwAAAENvbWJpbmVGbi5mcm9tX2NhbGxhYmxlWAMAAABkZWZNiQJNjAKHWB4AAABDcmVhdGUudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJYAwAAAGRlZk3bB03fB4dYHAAAAENyZWF0ZS5leHBhbmQuTWF5YmVSZXNodWZmbGVYBQAAAGNsYXNzTfcHTf4Hh1gcAAAAV2luZG93SW50by5pbmZlcl9vdXRwdXRfdHlwZVgDAAAAZGVmTWgHTWoHh1g9AAAAX0NvbWJpbmVQZXJLZXlXaXRoSG90S2V5RmFub3V0LmV4cGFuZC5Qb3N0Q29tYmluZUZuLmFkZF9pbnB1dFgDAAAAZGVmTQ4GTRUGh1gnAAAAQ2FsbGFibGVXcmFwcGVyRG9Gbi5fcHJvY2Vzc19hcmdzcGVjX2ZuWAMAAABkZWZNDwJNEQKHWB8AAABGbGF0dGVuLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyWAMAAABkZWZNvQdNvweHWBYAAABfR3JvdXBBbHNvQnlXaW5kb3dEb0ZuWAUAAABjbGFzc02aBk2wBodYPwAAAF9Db21iaW5lUGVyS2V5V2l0aEhvdEtleUZhbm91dC5leHBhbmQuU3BsaXRIb3RDb2xkLnN0YXJ0X2J1bmRsZVgDAAAAZGVmTfEFTfgFh1gSAAAAX0dyb3VwQWxzb0J5V2luZG93WAUAAABjbGFzc02MBk2YBodYIAAAAENvbWJpbmVQZXJLZXkuZGVmYXVsdF90eXBlX2hpbnRzWAMAAABkZWZNXQVNagWHWBwAAABQcm9jZXNzQ29udGludWF0aW9uLl9faW5pdF9fWAMAAABkZWZLpUuuh1glAAAAUGFyRG8ucnVubmVyX2FwaV9yZXF1aXJlc19rZXllZF9pbnB1dFgDAAAAZGVmTe8DTfEDh1gjAAAAQ3JlYXRlLmV4cGFuZC5NYXliZVJlc2h1ZmZsZS5leHBhbmRYAwAAAGRlZk34B03+B4d1fXL1gwAAKFgJAAAAQ29tYmluZUZuaoxfAABYBgAAAENyZWF0ZWqMXwAAWBcAAABXaW5kb3dJbnRvLldpbmRvd0ludG9GbmqMXwAAWB0AAABDb21iaW5lRm4ubWF5YmVfZnJvbV9jYWxsYWJsZWqMXwAAWBQAAABDcmVhdGUuZ2V0X3dpbmRvd2luZ2qMXwAAWBIAAABQYXJEby53aXRoX291dHB1dHNqjF8AAFgbAAAAQ29tYmluZVBlcktleS5kZWZhdWx0X2xhYmVsaoxfAABYGwAAAENvbWJpbmVHbG9iYWxseS53aXRoX2Zhbm91dGqMXwAAWB8AAABJbXB1bHNlLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyaoxfAABYDAAAAFBhckRvLmV4cGFuZGqMXwAAWCQAAABQYXJ0aXRpb24uQXBwbHlQYXJ0aXRpb25GbkZuLnByb2Nlc3NqjF8AAFgRAAAAR3JvdXBCeUtleS5leHBhbmRqjF8AAFgVAAAAQ29tYmluZVZhbHVlcy5tYWtlX2ZuaoxfAABYHAAAAFBhcnRpdGlvbi5BcHBseVBhcnRpdGlvbkZuRm5qjF8AAFgdAAAAQ29tYmluZUdsb2JhbGx5LmRlZmF1bHRfbGFiZWxqjF8AAFgFAAAAUGFyRG9qjF8AAFgcAAAAQ29tYmluZUZuLm1lcmdlX2FjY3VtdWxhdG9yc2qMXwAAWBcAAABHcm91cEJ5S2V5LlJlaWZ5V2luZG93c2qMXwAAWCEAAABDb21iaW5lR2xvYmFsbHkuYXNfc2luZ2xldG9uX3ZpZXdqjF8AAFgVAAAASW1wdWxzZS5nZXRfd2luZG93aW5naoxfAABYIAAAAENvbWJpbmVQZXJLZXkuZGVmYXVsdF90eXBlX2hpbnRzaoxfAABYFQAAAEZsYXR0ZW4uZ2V0X3dpbmRvd2luZ2qMXwAAWCcAAABDb21iaW5lUGVyS2V5LmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXJqjF8AAFgEAAAARG9GbmqMXwAAWCQAAABXaW5kb3dJbnRvLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXJqjF8AAFgcAAAAQ29tYmluZUZuLmNyZWF0ZV9hY2N1bXVsYXRvcmqMXwAAWBEAAABQYXJ0aXRpb24ubWFrZV9mbmqMXwAAWBgAAABQYXJEby5kZWZhdWx0X3R5cGVfaGludHNqjF8AAFgPAAAAQ29tYmluZUZuLmFwcGx5aoxfAABYCQAAAFdpbmRvd2luZ2qMXwAAWBwAAABHcm91cEJ5S2V5LmluZmVyX291dHB1dF90eXBlaoxfAABYFAAAAFdpbmRvd2luZy5pc19kZWZhdWx0aoxfAABYDwAAAENvbWJpbmVHbG9iYWxseWqMXwAAWBEAAABEb0ZuLnN0YXJ0X2J1bmRsZWqMXwAAWAcAAABJbXB1bHNlaoxfAABYHQAAAFBhckRvLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyaoxfAABYHwAAAEZsYXR0ZW4udG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJqjF8AAFgcAAAAQ29tYmluZUdsb2JhbGx5LmRpc3BsYXlfZGF0YWqMXwAAWAMAAABNYXBqjF8AAFgHAAAARmxhdHRlbmqMXwAAWBcAAABDb21iaW5lRm4uZGVmYXVsdF9sYWJlbGqMXwAAWCUAAABDb21iaW5lVmFsdWVzLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyaoxfAABYEgAAAERvRm4uZmluaXNoX2J1bmRsZWqMXwAAWA0AAABDb21iaW5lVmFsdWVzaoxfAABYCQAAAFBhcnRpdGlvbmqMXwAAWA4AAABJbXB1bHNlLmV4cGFuZGqMXwAAWCQAAABHcm91cEJ5S2V5LmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXJqjF8AAFgQAAAAUGFydGl0aW9uLmV4cGFuZGqMXwAAWCcAAABDb21iaW5lVmFsdWVzLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXJqjF8AAFgXAAAAUGFyRG8uaW5mZXJfb3V0cHV0X3R5cGVqjF8AAFgSAAAARG9Gbi5kZWZhdWx0X2xhYmVsaoxfAABYDgAAAEZsYXR0ZW4uZXhwYW5kaoxfAABYKgAAAEdyb3VwQnlLZXkucnVubmVyX2FwaV9yZXF1aXJlc19rZXllZF9pbnB1dGqMXwAAWCkAAABHcm91cEJ5S2V5LlJlaWZ5V2luZG93cy5pbmZlcl9vdXRwdXRfdHlwZWqMXwAAWBgAAABXaW5kb3dJbnRvLmdldF93aW5kb3dpbmdqjF8AAFgRAAAAV2luZG93SW50by5leHBhbmRqjF8AAFggAAAAQ29tYmluZUdsb2JhbGx5LndpdGhvdXRfZGVmYXVsdHNqjF8AAFgUAAAAQ29tYmluZVBlcktleS5leHBhbmRqjF8AAFgiAAAAV2luZG93SW50by50b19ydW5uZXJfYXBpX3BhcmFtZXRlcmqMXwAAWBgAAABDb21iaW5lRm4uZXh0cmFjdF9vdXRwdXRqjF8AAFgNAAAAQ29tYmluZVBlcktleWqMXwAAWBMAAABDb21iaW5lRm4uYWRkX2lucHV0aoxfAABYHwAAAFBhckRvLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXJqjF8AAFgiAAAAR3JvdXBCeUtleS50b19ydW5uZXJfYXBpX3BhcmFtZXRlcmqMXwAAWCEAAABGbGF0dGVuLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXJqjF8AAFgMAAAARG9Gbi5wcm9jZXNzaoxfAABYHwAAAEdyb3VwQnlLZXkuUmVpZnlXaW5kb3dzLnByb2Nlc3NqjF8AAFgfAAAAV2luZG93SW50by5XaW5kb3dJbnRvRm4ucHJvY2Vzc2qMXwAAWBkAAABQYXJ0aXRpb25Gbi5kZWZhdWx0X2xhYmVsaoxfAABYGwAAAERvRm4uZ2V0X2Z1bmN0aW9uX2FyZ3VtZW50c2qMXwAAWBUAAABDb21iaW5lUGVyS2V5Lm1ha2VfZm5qjF8AAFgdAAAAQ29tYmluZUdsb2JhbGx5LndpdGhfZGVmYXVsdHNqjF8AAFgWAAAARG9Gbi5pbmZlcl9vdXRwdXRfdHlwZWqMXwAAWBkAAABQYXJ0aXRpb25Gbi5wYXJ0aXRpb25fZm9yaoxfAABYEgAAAFBhckRvLmRpc3BsYXlfZGF0YWqMXwAAWBQAAABDb21iaW5lRm4uYWRkX2lucHV0c2qMXwAAWAYAAABGaWx0ZXJqjF8AAFghAAAASW1wdWxzZS5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyaoxfAABYCgAAAEdyb3VwQnlLZXlqjF8AAFgNAAAAUGFyRG8ubWFrZV9mbmqMXwAAWCEAAABDb21iaW5lUGVyS2V5LndpdGhfaG90X2tleV9mYW5vdXRqjF8AAFgfAAAAQ29tYmluZUZuLmdldF9hY2N1bXVsYXRvcl9jb2RlcmqMXwAAWBkAAABJbXB1bHNlLmluZmVyX291dHB1dF90eXBlaoxfAABYJQAAAENvbWJpbmVQZXJLZXkudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJqjF8AAFgaAAAAQ29tYmluZVBlcktleS5kaXNwbGF5X2RhdGFqjF8AAFgWAAAAQ29tYmluZUdsb2JhbGx5LmV4cGFuZGqMXwAAWBgAAABDcmVhdGUuaW5mZXJfb3V0cHV0X3R5cGVqjF8AAFgKAAAAV2luZG93SW50b2qMXwAAWAsAAABQYXJ0aXRpb25GbmqMXwAAWBQAAABDb21iaW5lVmFsdWVzLmV4cGFuZGqMXwAAWC0AAABDb21iaW5lUGVyS2V5LnJ1bm5lcl9hcGlfcmVxdWlyZXNfa2V5ZWRfaW5wdXRqjF8AAFgWAAAAQ3JlYXRlLmdldF9vdXRwdXRfdHlwZWqMXwAAWBgAAABDb21iaW5lRm4uZm9yX2lucHV0X3R5cGVqjF8AAFgXAAAAV2luZG93aW5nLnRvX3J1bm5lcl9hcGlqjF8AAFgHAAAARmxhdE1hcGqMXwAAWBkAAABXaW5kb3dpbmcuZnJvbV9ydW5uZXJfYXBpaoxfAABYJQAAAFBhckRvLnJ1bm5lcl9hcGlfcmVxdWlyZXNfa2V5ZWRfaW5wdXRqjF8AAFgeAAAAQ3JlYXRlLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyaoxfAABYFwAAAERvRm4uaXNfcHJvY2Vzc19ib3VuZGVkaoxfAABYHAAAAFdpbmRvd0ludG8uaW5mZXJfb3V0cHV0X3R5cGVqjF8AAFgSAAAARG9Gbi5mcm9tX2NhbGxhYmxlaoxfAABYFwAAAENvbWJpbmVGbi5mcm9tX2NhbGxhYmxlaoxfAABYDQAAAENyZWF0ZS5leHBhbmRqjF8AAHVqfWkAAFgbAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlcvaDAACFgXL3gwAAfXL4gwAAYnRy+YMAAFUVYXBhY2hlX2JlYW0uaW8udGV4dGlvKFgeYgAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJBIHNvdXJjZSBhbmQgYSBzaW5rIGZvciByZWFkaW5nIGZyb20gYW5kIHdyaXRpbmcgdG8gdGV4dCBmaWxlcy4iIiIKCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGxvZ2dpbmcKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0CmZyb20gYnVpbHRpbnMgaW1wb3J0IHJhbmdlCmZyb20gZnVuY3Rvb2xzIGltcG9ydCBwYXJ0aWFsCgpmcm9tIHBhc3QuYnVpbHRpbnMgaW1wb3J0IGxvbmcKCmZyb20gYXBhY2hlX2JlYW0uY29kZXJzIGltcG9ydCBjb2RlcnMKZnJvbSBhcGFjaGVfYmVhbS5pbyBpbXBvcnQgZmlsZWJhc2Vkc2luawpmcm9tIGFwYWNoZV9iZWFtLmlvIGltcG9ydCBmaWxlYmFzZWRzb3VyY2UKZnJvbSBhcGFjaGVfYmVhbS5pbyBpbXBvcnQgaW9iYXNlCmZyb20gYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc291cmNlIGltcG9ydCBSZWFkQWxsRmlsZXMKZnJvbSBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtIGltcG9ydCBDb21wcmVzc2lvblR5cGVzCmZyb20gYXBhY2hlX2JlYW0uaW8uaW9iYXNlIGltcG9ydCBSZWFkCmZyb20gYXBhY2hlX2JlYW0uaW8uaW9iYXNlIGltcG9ydCBXcml0ZQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IFBUcmFuc2Zvcm0KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXkgaW1wb3J0IERpc3BsYXlEYXRhSXRlbQoKX19hbGxfXyA9IFsnUmVhZEZyb21UZXh0JywgJ1JlYWRGcm9tVGV4dFdpdGhGaWxlbmFtZScsICdSZWFkQWxsRnJvbVRleHQnLAogICAgICAgICAgICdXcml0ZVRvVGV4dCddCgoKY2xhc3MgX1RleHRTb3VyY2UoZmlsZWJhc2Vkc291cmNlLkZpbGVCYXNlZFNvdXJjZSk6CiAgciIiIkEgc291cmNlIGZvciByZWFkaW5nIHRleHQgZmlsZXMuCgogIFBhcnNlcyBhIHRleHQgZmlsZSBhcyBuZXdsaW5lLWRlbGltaXRlZCBlbGVtZW50cy4gU3VwcG9ydHMgbmV3bGluZSBkZWxpbWl0ZXJzCiAgJ1xuJyBhbmQgJ1xyXG4uCgogIFRoaXMgaW1wbGVtZW50YXRpb24gb25seSBzdXBwb3J0cyByZWFkaW5nIHRleHQgZW5jb2RlZCB1c2luZyBVVEYtOCBvcgogIEFTQ0lJLgogICIiIgoKICBERUZBVUxUX1JFQURfQlVGRkVSX1NJWkUgPSA4MTkyCgogIGNsYXNzIFJlYWRCdWZmZXIob2JqZWN0KToKICAgICMgQSBidWZmZXIgdGhhdCBnaXZlcyB0aGUgYnVmZmVyZWQgZGF0YSBhbmQgbmV4dCBwb3NpdGlvbiBpbiB0aGUKICAgICMgYnVmZmVyIHRoYXQgc2hvdWxkIGJlIHJlYWQuCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGRhdGEsIHBvc2l0aW9uKToKICAgICAgc2VsZi5fZGF0YSA9IGRhdGEKICAgICAgc2VsZi5fcG9zaXRpb24gPSBwb3NpdGlvbgoKICAgIEBwcm9wZXJ0eQogICAgZGVmIGRhdGEoc2VsZik6CiAgICAgIHJldHVybiBzZWxmLl9kYXRhCgogICAgQGRhdGEuc2V0dGVyCiAgICBkZWYgZGF0YShzZWxmLCB2YWx1ZSk6CiAgICAgIGFzc2VydCBpc2luc3RhbmNlKHZhbHVlLCBieXRlcykKICAgICAgc2VsZi5fZGF0YSA9IHZhbHVlCgogICAgQHByb3BlcnR5CiAgICBkZWYgcG9zaXRpb24oc2VsZik6CiAgICAgIHJldHVybiBzZWxmLl9wb3NpdGlvbgoKICAgIEBwb3NpdGlvbi5zZXR0ZXIKICAgIGRlZiBwb3NpdGlvbihzZWxmLCB2YWx1ZSk6CiAgICAgIGFzc2VydCBpc2luc3RhbmNlKHZhbHVlLCAoaW50LCBsb25nKSkKICAgICAgaWYgdmFsdWUgPiBsZW4oc2VsZi5fZGF0YSk6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQ2Fubm90IHNldCBwb3NpdGlvbiB0byAlZCBzaW5jZSBpdFwncyBsYXJnZXIgdGhhbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAnc2l6ZSBvZiBkYXRhICVkLicgJSAodmFsdWUsIGxlbihzZWxmLl9kYXRhKSkpCiAgICAgIHNlbGYuX3Bvc2l0aW9uID0gdmFsdWUKCiAgICBkZWYgcmVzZXQoc2VsZik6CiAgICAgIHNlbGYuZGF0YSA9IGInJwogICAgICBzZWxmLnBvc2l0aW9uID0gMAoKICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgZmlsZV9wYXR0ZXJuLAogICAgICAgICAgICAgICBtaW5fYnVuZGxlX3NpemUsCiAgICAgICAgICAgICAgIGNvbXByZXNzaW9uX3R5cGUsCiAgICAgICAgICAgICAgIHN0cmlwX3RyYWlsaW5nX25ld2xpbmVzLAogICAgICAgICAgICAgICBjb2RlciwKICAgICAgICAgICAgICAgYnVmZmVyX3NpemU9REVGQVVMVF9SRUFEX0JVRkZFUl9TSVpFLAogICAgICAgICAgICAgICB2YWxpZGF0ZT1UcnVlLAogICAgICAgICAgICAgICBza2lwX2hlYWRlcl9saW5lcz0wLAogICAgICAgICAgICAgICBoZWFkZXJfcHJvY2Vzc29yX2Zucz0oTm9uZSwgTm9uZSkpOgogICAgIiIiSW5pdGlhbGl6ZSBhIF9UZXh0U291cmNlCgogICAgQXJnczoKICAgICAgaGVhZGVyX3Byb2Nlc3Nvcl9mbnMgKHR1cGxlKTogYSB0dXBsZSBvZiBhIGBoZWFkZXJfbWF0Y2hlcmAgZnVuY3Rpb24KICAgICAgICBhbmQgYSBgaGVhZGVyX3Byb2Nlc3NvcmAgZnVuY3Rpb24uIFRoZSBgaGVhZGVyX21hdGNoZXJgIHNob3VsZAogICAgICAgIHJldHVybiBgVHJ1ZWAgZm9yIGFsbCBsaW5lcyBhdCB0aGUgc3RhcnQgb2YgdGhlIGZpbGUgdGhhdCBhcmUgcGFydAogICAgICAgIG9mIHRoZSBmaWxlIGhlYWRlciBhbmQgYEZhbHNlYCBvdGhlcndpc2UuIFRoZXNlIGhlYWRlciBsaW5lcyB3aWxsCiAgICAgICAgbm90IGJlIHlpZWxkZWQgd2hlbiByZWFkaW5nIHJlY29yZHMgYW5kIGluc3RlYWQgcGFzc2VkIGludG8KICAgICAgICBgaGVhZGVyX3Byb2Nlc3NvcmAgdG8gYmUgaGFuZGxlZC4gSWYgYHNraXBfaGVhZGVyX2xpbmVzYCBhbmQgYQogICAgICAgIGBoZWFkZXJfbWF0Y2hlcmAgYXJlIGJvdGggcHJvdmlkZWQsIHRoZSB2YWx1ZSBvZiBgc2tpcF9oZWFkZXJfbGluZXNgCiAgICAgICAgbGluZXMgd2lsbCBiZSBza2lwcGVkIGFuZCB0aGUgaGVhZGVyIHdpbGwgYmUgcHJvY2Vzc2VkIGZyb20KICAgICAgICB0aGVyZS4KICAgIFJhaXNlczoKICAgICAgVmFsdWVFcnJvcjogaWYgc2tpcF9saW5lcyBpcyBuZWdhdGl2ZS4KCiAgICBQbGVhc2UgcmVmZXIgdG8gZG9jdW1lbnRhdGlvbiBpbiBjbGFzcyBgUmVhZEZyb21UZXh0YCBmb3IgdGhlIHJlc3QKICAgIG9mIHRoZSBhcmd1bWVudHMuCiAgICAiIiIKICAgIHN1cGVyKF9UZXh0U291cmNlLCBzZWxmKS5fX2luaXRfXyhmaWxlX3BhdHRlcm4sIG1pbl9idW5kbGVfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2lvbl90eXBlPWNvbXByZXNzaW9uX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGU9dmFsaWRhdGUpCgogICAgc2VsZi5fc3RyaXBfdHJhaWxpbmdfbmV3bGluZXMgPSBzdHJpcF90cmFpbGluZ19uZXdsaW5lcwogICAgc2VsZi5fY29tcHJlc3Npb25fdHlwZSA9IGNvbXByZXNzaW9uX3R5cGUKICAgIHNlbGYuX2NvZGVyID0gY29kZXIKICAgIHNlbGYuX2J1ZmZlcl9zaXplID0gYnVmZmVyX3NpemUKICAgIGlmIHNraXBfaGVhZGVyX2xpbmVzIDwgMDoKICAgICAgcmFpc2UgVmFsdWVFcnJvcignQ2Fubm90IHNraXAgbmVnYXRpdmUgbnVtYmVyIG9mIGhlYWRlciBsaW5lczogJWQnCiAgICAgICAgICAgICAgICAgICAgICAgJSBza2lwX2hlYWRlcl9saW5lcykKICAgIGVsaWYgc2tpcF9oZWFkZXJfbGluZXMgPiAxMDoKICAgICAgbG9nZ2luZy53YXJuaW5nKAogICAgICAgICAgJ1NraXBwaW5nICVkIGhlYWRlciBsaW5lcy4gU2tpcHBpbmcgbGFyZ2UgbnVtYmVyIG9mIGhlYWRlciAnCiAgICAgICAgICAnbGluZXMgbWlnaHQgc2lnbmlmaWNhbnRseSBzbG93IGRvd24gcHJvY2Vzc2luZy4nKQogICAgc2VsZi5fc2tpcF9oZWFkZXJfbGluZXMgPSBza2lwX2hlYWRlcl9saW5lcwogICAgc2VsZi5faGVhZGVyX21hdGNoZXIsIHNlbGYuX2hlYWRlcl9wcm9jZXNzb3IgPSBoZWFkZXJfcHJvY2Vzc29yX2ZucwoKICBkZWYgZGlzcGxheV9kYXRhKHNlbGYpOgogICAgcGFyZW50X2RkID0gc3VwZXIoX1RleHRTb3VyY2UsIHNlbGYpLmRpc3BsYXlfZGF0YSgpCiAgICBwYXJlbnRfZGRbJ3N0cmlwX25ld2xpbmUnXSA9IERpc3BsYXlEYXRhSXRlbSgKICAgICAgICBzZWxmLl9zdHJpcF90cmFpbGluZ19uZXdsaW5lcywKICAgICAgICBsYWJlbD0nU3RyaXAgVHJhaWxpbmcgTmV3IExpbmVzJykKICAgIHBhcmVudF9kZFsnYnVmZmVyX3NpemUnXSA9IERpc3BsYXlEYXRhSXRlbSgKICAgICAgICBzZWxmLl9idWZmZXJfc2l6ZSwKICAgICAgICBsYWJlbD0nQnVmZmVyIFNpemUnKQogICAgcGFyZW50X2RkWydjb2RlciddID0gRGlzcGxheURhdGFJdGVtKAogICAgICAgIHNlbGYuX2NvZGVyLl9fY2xhc3NfXywKICAgICAgICBsYWJlbD0nQ29kZXInKQogICAgcmV0dXJuIHBhcmVudF9kZAoKICBkZWYgcmVhZF9yZWNvcmRzKHNlbGYsIGZpbGVfbmFtZSwgcmFuZ2VfdHJhY2tlcik6CiAgICBzdGFydF9vZmZzZXQgPSByYW5nZV90cmFja2VyLnN0YXJ0X3Bvc2l0aW9uKCkKICAgIHJlYWRfYnVmZmVyID0gX1RleHRTb3VyY2UuUmVhZEJ1ZmZlcihiJycsIDApCgogICAgbmV4dF9yZWNvcmRfc3RhcnRfcG9zaXRpb24gPSAtMQoKICAgIGRlZiBzcGxpdF9wb2ludHNfdW5jbGFpbWVkKHN0b3BfcG9zaXRpb24pOgogICAgICByZXR1cm4gKDAgaWYgc3RvcF9wb3NpdGlvbiA8PSBuZXh0X3JlY29yZF9zdGFydF9wb3NpdGlvbgogICAgICAgICAgICAgIGVsc2UgaW9iYXNlLlJhbmdlVHJhY2tlci5TUExJVF9QT0lOVFNfVU5LTk9XTikKCiAgICByYW5nZV90cmFja2VyLnNldF9zcGxpdF9wb2ludHNfdW5jbGFpbWVkX2NhbGxiYWNrKHNwbGl0X3BvaW50c191bmNsYWltZWQpCgogICAgd2l0aCBzZWxmLm9wZW5fZmlsZShmaWxlX25hbWUpIGFzIGZpbGVfdG9fcmVhZDoKICAgICAgcG9zaXRpb25fYWZ0ZXJfcHJvY2Vzc2luZ19oZWFkZXJfbGluZXMgPSAoCiAgICAgICAgICBzZWxmLl9wcm9jZXNzX2hlYWRlcihmaWxlX3RvX3JlYWQsIHJlYWRfYnVmZmVyKSkKICAgICAgc3RhcnRfb2Zmc2V0ID0gbWF4KHN0YXJ0X29mZnNldCwgcG9zaXRpb25fYWZ0ZXJfcHJvY2Vzc2luZ19oZWFkZXJfbGluZXMpCiAgICAgIGlmIHN0YXJ0X29mZnNldCA+IHBvc2l0aW9uX2FmdGVyX3Byb2Nlc3NpbmdfaGVhZGVyX2xpbmVzOgogICAgICAgICMgU2Vla2luZyB0byBvbmUgcG9zaXRpb24gYmVmb3JlIHRoZSBzdGFydCBpbmRleCBhbmQgaWdub3JpbmcgdGhlCiAgICAgICAgIyBjdXJyZW50IGxpbmUuIElmIHN0YXJ0X3Bvc2l0aW9uIGlzIGF0IGJlZ2lubmluZyBpZiB0aGUgbGluZSwgdGhhdCBsaW5lCiAgICAgICAgIyBiZWxvbmdzIHRvIHRoZSBjdXJyZW50IGJ1bmRsZSwgaGVuY2UgaWdub3JpbmcgdGhhdCBpcyBpbmNvcnJlY3QuCiAgICAgICAgIyBTZWVraW5nIHRvIG9uZSBieXRlIGJlZm9yZSBwcmV2ZW50cyB0aGF0LgoKICAgICAgICBmaWxlX3RvX3JlYWQuc2VlayhzdGFydF9vZmZzZXQgLSAxKQogICAgICAgIHJlYWRfYnVmZmVyLnJlc2V0KCkKICAgICAgICBzZXBfYm91bmRzID0gc2VsZi5fZmluZF9zZXBhcmF0b3JfYm91bmRzKGZpbGVfdG9fcmVhZCwgcmVhZF9idWZmZXIpCiAgICAgICAgaWYgbm90IHNlcF9ib3VuZHM6CiAgICAgICAgICAjIENvdWxkIG5vdCBmaW5kIGEgc2VwYXJhdG9yIGFmdGVyIChzdGFydF9vZmZzZXQgLSAxKS4gVGhpcyBtZWFucyB0aGF0CiAgICAgICAgICAjIG5vbmUgb2YgdGhlIHJlY29yZHMgd2l0aGluIHRoZSBmaWxlIGJlbG9uZ3MgdG8gdGhlIGN1cnJlbnQgc291cmNlLgogICAgICAgICAgcmV0dXJuCgogICAgICAgIF8sIHNlcF9lbmQgPSBzZXBfYm91bmRzCiAgICAgICAgcmVhZF9idWZmZXIuZGF0YSA9IHJlYWRfYnVmZmVyLmRhdGFbc2VwX2VuZDpdCiAgICAgICAgbmV4dF9yZWNvcmRfc3RhcnRfcG9zaXRpb24gPSBzdGFydF9vZmZzZXQgLSAxICsgc2VwX2VuZAogICAgICBlbHNlOgogICAgICAgIG5leHRfcmVjb3JkX3N0YXJ0X3Bvc2l0aW9uID0gcG9zaXRpb25fYWZ0ZXJfcHJvY2Vzc2luZ19oZWFkZXJfbGluZXMKCiAgICAgIHdoaWxlIHJhbmdlX3RyYWNrZXIudHJ5X2NsYWltKG5leHRfcmVjb3JkX3N0YXJ0X3Bvc2l0aW9uKToKICAgICAgICByZWNvcmQsIG51bV9ieXRlc190b19uZXh0X3JlY29yZCA9IHNlbGYuX3JlYWRfcmVjb3JkKGZpbGVfdG9fcmVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYnVmZmVyKQogICAgICAgICMgRm9yIGNvbXByZXNzZWQgdGV4dCBmaWxlcyB0aGF0IHVzZSBhbiB1bnNwbGl0dGFibGUgT2Zmc2V0UmFuZ2VUcmFja2VyCiAgICAgICAgIyB3aXRoIGluZmluaXR5IGFzIHRoZSBlbmQgcG9zaXRpb24sIGFib3ZlICd0cnlfY2xhaW0oKScgaW52b2NhdGlvbgogICAgICAgICMgd291bGQgcGFzcyBmb3IgYW4gZW1wdHkgcmVjb3JkIGF0IHRoZSBlbmQgb2YgZmlsZSB0aGF0IGlzIG5vdAogICAgICAgICMgZm9sbG93ZWQgYnkgYSBuZXcgbGluZSBjaGFyYWN0ZXIuIFNpbmNlIHN1Y2ggYSByZWNvcmQgaXMgYXQgdGhlIGxhc3QKICAgICAgICAjIHBvc2l0aW9uIG9mIGEgZmlsZSwgaXQgc2hvdWxkIG5vdCBiZSBhIHBhcnQgb2YgdGhlIGNvbnNpZGVyZWQgcmFuZ2UuCiAgICAgICAgIyBXZSBkbyB0aGlzIGNoZWNrIHRvIGlnbm9yZSBzdWNoIHJlY29yZHMuCiAgICAgICAgaWYgbGVuKHJlY29yZCkgPT0gMCBhbmQgbnVtX2J5dGVzX3RvX25leHRfcmVjb3JkIDwgMDogICMgcHlsaW50OiBkaXNhYmxlPWxlbi1hcy1jb25kaXRpb24KICAgICAgICAgIGJyZWFrCgogICAgICAgICMgUmVjb3JkIHNlcGFyYXRvciBtdXN0IGJlIGxhcmdlciB0aGFuIHplcm8gYnl0ZXMuCiAgICAgICAgYXNzZXJ0IG51bV9ieXRlc190b19uZXh0X3JlY29yZCAhPSAwCiAgICAgICAgaWYgbnVtX2J5dGVzX3RvX25leHRfcmVjb3JkID4gMDoKICAgICAgICAgIG5leHRfcmVjb3JkX3N0YXJ0X3Bvc2l0aW9uICs9IG51bV9ieXRlc190b19uZXh0X3JlY29yZAoKICAgICAgICB5aWVsZCBzZWxmLl9jb2Rlci5kZWNvZGUocmVjb3JkKQogICAgICAgIGlmIG51bV9ieXRlc190b19uZXh0X3JlY29yZCA8IDA6CiAgICAgICAgICBicmVhawoKICBkZWYgX3Byb2Nlc3NfaGVhZGVyKHNlbGYsIGZpbGVfdG9fcmVhZCwgcmVhZF9idWZmZXIpOgogICAgIyBSZXR1cm5zIGEgdHVwbGUgY29udGFpbmluZyB0aGUgcG9zaXRpb24gaW4gZmlsZSBhZnRlciBwcm9jZXNzaW5nIGhlYWRlcgogICAgIyByZWNvcmRzIGFuZCBhIGxpc3Qgb2YgZGVjb2RlZCBoZWFkZXIgbGluZXMgdGhhdCBtYXRjaAogICAgIyAnaGVhZGVyX21hdGNoZXInLgogICAgaGVhZGVyX2xpbmVzID0gW10KICAgIHBvc2l0aW9uID0gc2VsZi5fc2tpcF9saW5lcygKICAgICAgICBmaWxlX3RvX3JlYWQsIHJlYWRfYnVmZmVyLAogICAgICAgIHNlbGYuX3NraXBfaGVhZGVyX2xpbmVzKSBpZiBzZWxmLl9za2lwX2hlYWRlcl9saW5lcyBlbHNlIDAKICAgIGlmIHNlbGYuX2hlYWRlcl9tYXRjaGVyOgogICAgICB3aGlsZSBUcnVlOgogICAgICAgIHJlY29yZCwgbnVtX2J5dGVzX3RvX25leHRfcmVjb3JkID0gc2VsZi5fcmVhZF9yZWNvcmQoZmlsZV90b19yZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9idWZmZXIpCiAgICAgICAgZGVjb2RlZF9saW5lID0gc2VsZi5fY29kZXIuZGVjb2RlKHJlY29yZCkKICAgICAgICBpZiBub3Qgc2VsZi5faGVhZGVyX21hdGNoZXIoZGVjb2RlZF9saW5lKToKICAgICAgICAgICMgV2UndmUgcmVhZCBwYXN0IHRoZSBoZWFkZXIgc2VjdGlvbiBhdCB0aGlzIHBvaW50LCBzbyBnbyBiYWNrIGEgbGluZS4KICAgICAgICAgIGZpbGVfdG9fcmVhZC5zZWVrKHBvc2l0aW9uKQogICAgICAgICAgcmVhZF9idWZmZXIucmVzZXQoKQogICAgICAgICAgYnJlYWsKICAgICAgICBoZWFkZXJfbGluZXMuYXBwZW5kKGRlY29kZWRfbGluZSkKICAgICAgICBpZiBudW1fYnl0ZXNfdG9fbmV4dF9yZWNvcmQgPCAwOgogICAgICAgICAgYnJlYWsKICAgICAgICBwb3NpdGlvbiArPSBudW1fYnl0ZXNfdG9fbmV4dF9yZWNvcmQKCiAgICAgIGlmIHNlbGYuX2hlYWRlcl9wcm9jZXNzb3I6CiAgICAgICAgc2VsZi5faGVhZGVyX3Byb2Nlc3NvcihoZWFkZXJfbGluZXMpCgogICAgcmV0dXJuIHBvc2l0aW9uCgogIGRlZiBfZmluZF9zZXBhcmF0b3JfYm91bmRzKHNlbGYsIGZpbGVfdG9fcmVhZCwgcmVhZF9idWZmZXIpOgogICAgIyBEZXRlcm1pbmVzIHRoZSBzdGFydCBhbmQgZW5kIHBvc2l0aW9ucyB3aXRoaW4gJ3JlYWRfYnVmZmVyLmRhdGEnIG9mIHRoZQogICAgIyBuZXh0IHNlcGFyYXRvciBzdGFydGluZyBmcm9tIHBvc2l0aW9uICdyZWFkX2J1ZmZlci5wb3NpdGlvbicuCiAgICAjIEN1cnJlbnRseSBzdXBwb3J0cyBmb2xsb3dpbmcgc2VwYXJhdG9ycy4KICAgICMgKiAnXG4nCiAgICAjICogJ1xyXG4nCiAgICAjIFRoaXMgbWV0aG9kIG1heSBpbmNyZWFzZSB0aGUgc2l6ZSBvZiBidWZmZXIgYnV0IGl0IHdpbGwgbm90IGRlY3JlYXNlIHRoZQogICAgIyBzaXplIG9mIGl0LgoKICAgIGN1cnJlbnRfcG9zID0gcmVhZF9idWZmZXIucG9zaXRpb24KCiAgICB3aGlsZSBUcnVlOgogICAgICBpZiBjdXJyZW50X3BvcyA+PSBsZW4ocmVhZF9idWZmZXIuZGF0YSk6CiAgICAgICAgIyBFbnN1cmluZyB0aGF0IHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGlzIGEgJ1xuJwogICAgICAgICMgYXQgY3VycmVudF9wb3MuCiAgICAgICAgaWYgbm90IHNlbGYuX3RyeV90b19lbnN1cmVfbnVtX2J5dGVzX2luX2J1ZmZlcigKICAgICAgICAgICAgZmlsZV90b19yZWFkLCByZWFkX2J1ZmZlciwgY3VycmVudF9wb3MgKyAxKToKICAgICAgICAgIHJldHVybgoKICAgICAgIyBVc2luZyBmaW5kKCkgaGVyZSBpcyBtb3JlIGVmZmljaWVudCB0aGFuIGEgbGluZWFyIHNjYW4gb2YgdGhlIGJ5dGUKICAgICAgIyBhcnJheS4KICAgICAgbmV4dF9sZiA9IHJlYWRfYnVmZmVyLmRhdGEuZmluZChiJ1xuJywgY3VycmVudF9wb3MpCiAgICAgIGlmIG5leHRfbGYgPj0gMDoKICAgICAgICBpZiBuZXh0X2xmID4gMCBhbmQgcmVhZF9idWZmZXIuZGF0YVtuZXh0X2xmIC0gMTpuZXh0X2xmXSA9PSBiJ1xyJzoKICAgICAgICAgICMgRm91bmQgYSAnXHJcbicuIEFjY2VwdGluZyB0aGF0IGFzIHRoZSBuZXh0IHNlcGFyYXRvci4KICAgICAgICAgIHJldHVybiAobmV4dF9sZiAtIDEsIG5leHRfbGYgKyAxKQogICAgICAgIGVsc2U6CiAgICAgICAgICAjIEZvdW5kIGEgJ1xuJy4gQWNjZXB0aW5nIHRoYXQgYXMgdGhlIG5leHQgc2VwYXJhdG9yLgogICAgICAgICAgcmV0dXJuIChuZXh0X2xmLCBuZXh0X2xmICsgMSkKCiAgICAgIGN1cnJlbnRfcG9zID0gbGVuKHJlYWRfYnVmZmVyLmRhdGEpCgogIGRlZiBfdHJ5X3RvX2Vuc3VyZV9udW1fYnl0ZXNfaW5fYnVmZmVyKAogICAgICBzZWxmLCBmaWxlX3RvX3JlYWQsIHJlYWRfYnVmZmVyLCBudW1fYnl0ZXMpOgogICAgIyBUcmllcyB0byBlbnN1cmUgdGhhdCB0aGVyZSBhcmUgYXQgbGVhc3QgbnVtX2J5dGVzIGJ5dGVzIGluIHRoZSBidWZmZXIuCiAgICAjIFJldHVybnMgVHJ1ZSBpZiB0aGlzIGNhbiBiZSBmdWxmaWxsZWQsIHJldHVybmVkIEZhbHNlIGlmIHRoaXMgY2Fubm90IGJlCiAgICAjIGZ1bGZpbGxlZCBkdWUgdG8gcmVhY2hpbmcgRU9GLgogICAgd2hpbGUgbGVuKHJlYWRfYnVmZmVyLmRhdGEpIDwgbnVtX2J5dGVzOgogICAgICByZWFkX2RhdGEgPSBmaWxlX3RvX3JlYWQucmVhZChzZWxmLl9idWZmZXJfc2l6ZSkKICAgICAgaWYgbm90IHJlYWRfZGF0YToKICAgICAgICByZXR1cm4gRmFsc2UKCiAgICAgIHJlYWRfYnVmZmVyLmRhdGEgKz0gcmVhZF9kYXRhCgogICAgcmV0dXJuIFRydWUKCiAgZGVmIF9za2lwX2xpbmVzKHNlbGYsIGZpbGVfdG9fcmVhZCwgcmVhZF9idWZmZXIsIG51bV9saW5lcyk6CiAgICAiIiJTa2lwIG51bV9saW5lcyBmcm9tIGZpbGVfdG9fcmVhZCwgcmV0dXJuIG51bV9saW5lcysxIHN0YXJ0IHBvc2l0aW9uLiIiIgogICAgaWYgZmlsZV90b19yZWFkLnRlbGwoKSA+IDA6CiAgICAgIGZpbGVfdG9fcmVhZC5zZWVrKDApCiAgICBwb3NpdGlvbiA9IDAKICAgIGZvciBfIGluIHJhbmdlKG51bV9saW5lcyk6CiAgICAgIF8sIG51bV9ieXRlc190b19uZXh0X3JlY29yZCA9IHNlbGYuX3JlYWRfcmVjb3JkKGZpbGVfdG9fcmVhZCwgcmVhZF9idWZmZXIpCiAgICAgIGlmIG51bV9ieXRlc190b19uZXh0X3JlY29yZCA8IDA6CiAgICAgICAgIyBXZSByZWFjaGVkIGVuZCBvZiBmaWxlLiBJdCBpcyBPSyB0byBqdXN0IGJyZWFrIGhlcmUKICAgICAgICAjIGJlY2F1c2Ugc3Vic2VxdWVudCBfcmVhZF9yZWNvcmQgd2lsbCByZXR1cm4gc2FtZSByZXN1bHQuCiAgICAgICAgYnJlYWsKICAgICAgcG9zaXRpb24gKz0gbnVtX2J5dGVzX3RvX25leHRfcmVjb3JkCiAgICByZXR1cm4gcG9zaXRpb24KCiAgZGVmIF9yZWFkX3JlY29yZChzZWxmLCBmaWxlX3RvX3JlYWQsIHJlYWRfYnVmZmVyKToKICAgICMgUmV0dXJucyBhIHR1cGxlIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnRfcmVjb3JkIGFuZCBudW1iZXIgb2YgYnl0ZXMgdG8gdGhlCiAgICAjIG5leHQgcmVjb3JkIHN0YXJ0aW5nIGZyb20gJ3JlYWRfYnVmZmVyLnBvc2l0aW9uJy4gSWYgRU9GIGlzCiAgICAjIHJlYWNoZWQsIHJldHVybnMgYSB0dXBsZSBjb250YWluaW5nIHRoZSBjdXJyZW50IHJlY29yZCBhbmQgLTEuCgogICAgaWYgcmVhZF9idWZmZXIucG9zaXRpb24gPiBzZWxmLl9idWZmZXJfc2l6ZToKICAgICAgIyByZWFkX2J1ZmZlciBpcyB0b28gbGFyZ2UuIFRydW5jYXRpbmcgYW5kIGFkanVzdGluZyBpdC4KICAgICAgcmVhZF9idWZmZXIuZGF0YSA9IHJlYWRfYnVmZmVyLmRhdGFbcmVhZF9idWZmZXIucG9zaXRpb246XQogICAgICByZWFkX2J1ZmZlci5wb3NpdGlvbiA9IDAKCiAgICByZWNvcmRfc3RhcnRfcG9zaXRpb25faW5fYnVmZmVyID0gcmVhZF9idWZmZXIucG9zaXRpb24KICAgIHNlcF9ib3VuZHMgPSBzZWxmLl9maW5kX3NlcGFyYXRvcl9ib3VuZHMoZmlsZV90b19yZWFkLCByZWFkX2J1ZmZlcikKICAgIHJlYWRfYnVmZmVyLnBvc2l0aW9uID0gc2VwX2JvdW5kc1sxXSBpZiBzZXBfYm91bmRzIGVsc2UgbGVuKAogICAgICAgIHJlYWRfYnVmZmVyLmRhdGEpCgogICAgaWYgbm90IHNlcF9ib3VuZHM6CiAgICAgICMgUmVhY2hlZCBFT0YuIEJ5dGVzIHVwIHRvIHRoZSBFT0YgaXMgdGhlIG5leHQgcmVjb3JkLiBSZXR1cm5pbmcgJy0xJyBmb3IKICAgICAgIyB0aGUgc3RhcnRpbmcgcG9zaXRpb24gb2YgdGhlIG5leHQgcmVjb3JkLgogICAgICByZXR1cm4gKHJlYWRfYnVmZmVyLmRhdGFbcmVjb3JkX3N0YXJ0X3Bvc2l0aW9uX2luX2J1ZmZlcjpdLCAtMSkKCiAgICBpZiBzZWxmLl9zdHJpcF90cmFpbGluZ19uZXdsaW5lczoKICAgICAgIyBDdXJyZW50IHJlY29yZCBzaG91bGQgbm90IGNvbnRhaW4gdGhlIHNlcGFyYXRvci4KICAgICAgcmV0dXJuIChyZWFkX2J1ZmZlci5kYXRhW3JlY29yZF9zdGFydF9wb3NpdGlvbl9pbl9idWZmZXI6c2VwX2JvdW5kc1swXV0sCiAgICAgICAgICAgICAgc2VwX2JvdW5kc1sxXSAtIHJlY29yZF9zdGFydF9wb3NpdGlvbl9pbl9idWZmZXIpCiAgICBlbHNlOgogICAgICAjIEN1cnJlbnQgcmVjb3JkIHNob3VsZCBjb250YWluIHRoZSBzZXBhcmF0b3IuCiAgICAgIHJldHVybiAocmVhZF9idWZmZXIuZGF0YVtyZWNvcmRfc3RhcnRfcG9zaXRpb25faW5fYnVmZmVyOnNlcF9ib3VuZHNbMV1dLAogICAgICAgICAgICAgIHNlcF9ib3VuZHNbMV0gLSByZWNvcmRfc3RhcnRfcG9zaXRpb25faW5fYnVmZmVyKQoKCmNsYXNzIF9UZXh0U291cmNlV2l0aEZpbGVuYW1lKF9UZXh0U291cmNlKToKICBkZWYgcmVhZF9yZWNvcmRzKHNlbGYsIGZpbGVfbmFtZSwgcmFuZ2VfdHJhY2tlcik6CiAgICByZWNvcmRzID0gc3VwZXIoX1RleHRTb3VyY2VXaXRoRmlsZW5hbWUsIHNlbGYpLnJlYWRfcmVjb3JkcyhmaWxlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZV90cmFja2VyKQogICAgZm9yIHJlY29yZCBpbiByZWNvcmRzOgogICAgICB5aWVsZCAoZmlsZV9uYW1lLCByZWNvcmQpCgoKY2xhc3MgX1RleHRTaW5rKGZpbGViYXNlZHNpbmsuRmlsZUJhc2VkU2luayk6CiAgIiIiQSBzaW5rIHRvIGEgR0NTIG9yIGxvY2FsIHRleHQgZmlsZSBvciBmaWxlcy4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgIGZpbGVfcGF0aF9wcmVmaXgsCiAgICAgICAgICAgICAgIGZpbGVfbmFtZV9zdWZmaXg9JycsCiAgICAgICAgICAgICAgIGFwcGVuZF90cmFpbGluZ19uZXdsaW5lcz1UcnVlLAogICAgICAgICAgICAgICBudW1fc2hhcmRzPTAsCiAgICAgICAgICAgICAgIHNoYXJkX25hbWVfdGVtcGxhdGU9Tm9uZSwKICAgICAgICAgICAgICAgY29kZXI9Y29kZXJzLlRvU3RyaW5nQ29kZXIoKSwKICAgICAgICAgICAgICAgY29tcHJlc3Npb25fdHlwZT1Db21wcmVzc2lvblR5cGVzLkFVVE8sCiAgICAgICAgICAgICAgIGhlYWRlcj1Ob25lKToKICAgICIiIkluaXRpYWxpemUgYSBfVGV4dFNpbmsuCgogICAgQXJnczoKICAgICAgZmlsZV9wYXRoX3ByZWZpeDogVGhlIGZpbGUgcGF0aCB0byB3cml0ZSB0by4gVGhlIGZpbGVzIHdyaXR0ZW4gd2lsbCBiZWdpbgogICAgICAgIHdpdGggdGhpcyBwcmVmaXgsIGZvbGxvd2VkIGJ5IGEgc2hhcmQgaWRlbnRpZmllciAoc2VlIG51bV9zaGFyZHMpLCBhbmQKICAgICAgICBlbmQgaW4gYSBjb21tb24gZXh0ZW5zaW9uLCBpZiBnaXZlbiBieSBmaWxlX25hbWVfc3VmZml4LiBJbiBtb3N0IGNhc2VzLAogICAgICAgIG9ubHkgdGhpcyBhcmd1bWVudCBpcyBzcGVjaWZpZWQgYW5kIG51bV9zaGFyZHMsIHNoYXJkX25hbWVfdGVtcGxhdGUsIGFuZAogICAgICAgIGZpbGVfbmFtZV9zdWZmaXggdXNlIGRlZmF1bHQgdmFsdWVzLgogICAgICBmaWxlX25hbWVfc3VmZml4OiBTdWZmaXggZm9yIHRoZSBmaWxlcyB3cml0dGVuLgogICAgICBhcHBlbmRfdHJhaWxpbmdfbmV3bGluZXM6IGluZGljYXRlIHdoZXRoZXIgdGhpcyBzaW5rIHNob3VsZCB3cml0ZSBhbgogICAgICAgIGFkZGl0aW9uYWwgbmV3bGluZSBjaGFyIGFmdGVyIHdyaXRpbmcgZWFjaCBlbGVtZW50LgogICAgICBudW1fc2hhcmRzOiBUaGUgbnVtYmVyIG9mIGZpbGVzIChzaGFyZHMpIHVzZWQgZm9yIG91dHB1dC4gSWYgbm90IHNldCwgdGhlCiAgICAgICAgc2VydmljZSB3aWxsIGRlY2lkZSBvbiB0aGUgb3B0aW1hbCBudW1iZXIgb2Ygc2hhcmRzLgogICAgICAgIENvbnN0cmFpbmluZyB0aGUgbnVtYmVyIG9mIHNoYXJkcyBpcyBsaWtlbHkgdG8gcmVkdWNlCiAgICAgICAgdGhlIHBlcmZvcm1hbmNlIG9mIGEgcGlwZWxpbmUuICBTZXR0aW5nIHRoaXMgdmFsdWUgaXMgbm90IHJlY29tbWVuZGVkCiAgICAgICAgdW5sZXNzIHlvdSByZXF1aXJlIGEgc3BlY2lmaWMgbnVtYmVyIG9mIG91dHB1dCBmaWxlcy4KICAgICAgc2hhcmRfbmFtZV90ZW1wbGF0ZTogQSB0ZW1wbGF0ZSBzdHJpbmcgY29udGFpbmluZyBwbGFjZWhvbGRlcnMgZm9yCiAgICAgICAgdGhlIHNoYXJkIG51bWJlciBhbmQgc2hhcmQgY291bnQuIFdoZW4gY29uc3RydWN0aW5nIGEgZmlsZW5hbWUgZm9yIGEKICAgICAgICBwYXJ0aWN1bGFyIHNoYXJkIG51bWJlciwgdGhlIHVwcGVyLWNhc2UgbGV0dGVycyAnUycgYW5kICdOJyBhcmUKICAgICAgICByZXBsYWNlZCB3aXRoIHRoZSAwLXBhZGRlZCBzaGFyZCBudW1iZXIgYW5kIHNoYXJkIGNvdW50IHJlc3BlY3RpdmVseS4KICAgICAgICBUaGlzIGFyZ3VtZW50IGNhbiBiZSAnJyBpbiB3aGljaCBjYXNlIGl0IGJlaGF2ZXMgYXMgaWYgbnVtX3NoYXJkcyB3YXMKICAgICAgICBzZXQgdG8gMSBhbmQgb25seSBvbmUgZmlsZSB3aWxsIGJlIGdlbmVyYXRlZC4gVGhlIGRlZmF1bHQgcGF0dGVybiB1c2VkCiAgICAgICAgaXMgJy1TU1NTUy1vZi1OTk5OTicgaWYgTm9uZSBpcyBwYXNzZWQgYXMgdGhlIHNoYXJkX25hbWVfdGVtcGxhdGUuCiAgICAgIGNvZGVyOiBDb2RlciB1c2VkIHRvIGVuY29kZSBlYWNoIGxpbmUuCiAgICAgIGNvbXByZXNzaW9uX3R5cGU6IFVzZWQgdG8gaGFuZGxlIGNvbXByZXNzZWQgb3V0cHV0IGZpbGVzLiBUeXBpY2FsIHZhbHVlCiAgICAgICAgaXMgQ29tcHJlc3Npb25UeXBlcy5BVVRPLCBpbiB3aGljaCBjYXNlIHRoZSBmaW5hbCBmaWxlIHBhdGgncwogICAgICAgIGV4dGVuc2lvbiAoYXMgZGV0ZXJtaW5lZCBieSBmaWxlX3BhdGhfcHJlZml4LCBmaWxlX25hbWVfc3VmZml4LAogICAgICAgIG51bV9zaGFyZHMgYW5kIHNoYXJkX25hbWVfdGVtcGxhdGUpIHdpbGwgYmUgdXNlZCB0byBkZXRlY3QgdGhlCiAgICAgICAgY29tcHJlc3Npb24uCiAgICAgIGhlYWRlcjogU3RyaW5nIHRvIHdyaXRlIGF0IGJlZ2lubmluZyBvZiBmaWxlIGFzIGEgaGVhZGVyLiBJZiBub3QgTm9uZSBhbmQKICAgICAgICBhcHBlbmRfdHJhaWxpbmdfbmV3bGluZXMgaXMgc2V0LCAnXG4nIHdpbGwgYmUgYWRkZWQuCgogICAgUmV0dXJuczoKICAgICAgQSBfVGV4dFNpbmsgb2JqZWN0IHVzYWJsZSBmb3Igd3JpdGluZy4KICAgICIiIgogICAgc3VwZXIoX1RleHRTaW5rLCBzZWxmKS5fX2luaXRfXygKICAgICAgICBmaWxlX3BhdGhfcHJlZml4LAogICAgICAgIGZpbGVfbmFtZV9zdWZmaXg9ZmlsZV9uYW1lX3N1ZmZpeCwKICAgICAgICBudW1fc2hhcmRzPW51bV9zaGFyZHMsCiAgICAgICAgc2hhcmRfbmFtZV90ZW1wbGF0ZT1zaGFyZF9uYW1lX3RlbXBsYXRlLAogICAgICAgIGNvZGVyPWNvZGVyLAogICAgICAgIG1pbWVfdHlwZT0ndGV4dC9wbGFpbicsCiAgICAgICAgY29tcHJlc3Npb25fdHlwZT1jb21wcmVzc2lvbl90eXBlKQogICAgc2VsZi5fYXBwZW5kX3RyYWlsaW5nX25ld2xpbmVzID0gYXBwZW5kX3RyYWlsaW5nX25ld2xpbmVzCiAgICBzZWxmLl9oZWFkZXIgPSBoZWFkZXIKCiAgZGVmIG9wZW4oc2VsZiwgdGVtcF9wYXRoKToKICAgIGZpbGVfaGFuZGxlID0gc3VwZXIoX1RleHRTaW5rLCBzZWxmKS5vcGVuKHRlbXBfcGF0aCkKICAgIGlmIHNlbGYuX2hlYWRlciBpcyBub3QgTm9uZToKICAgICAgZmlsZV9oYW5kbGUud3JpdGUoc2VsZi5faGVhZGVyKQogICAgICBpZiBzZWxmLl9hcHBlbmRfdHJhaWxpbmdfbmV3bGluZXM6CiAgICAgICAgZmlsZV9oYW5kbGUud3JpdGUoYidcbicpCiAgICByZXR1cm4gZmlsZV9oYW5kbGUKCiAgZGVmIGRpc3BsYXlfZGF0YShzZWxmKToKICAgIGRkX3BhcmVudCA9IHN1cGVyKF9UZXh0U2luaywgc2VsZikuZGlzcGxheV9kYXRhKCkKICAgIGRkX3BhcmVudFsnYXBwZW5kX25ld2xpbmUnXSA9IERpc3BsYXlEYXRhSXRlbSgKICAgICAgICBzZWxmLl9hcHBlbmRfdHJhaWxpbmdfbmV3bGluZXMsCiAgICAgICAgbGFiZWw9J0FwcGVuZCBUcmFpbGluZyBOZXcgTGluZXMnKQogICAgcmV0dXJuIGRkX3BhcmVudAoKICBkZWYgd3JpdGVfZW5jb2RlZF9yZWNvcmQoc2VsZiwgZmlsZV9oYW5kbGUsIGVuY29kZWRfdmFsdWUpOgogICAgIiIiV3JpdGVzIGEgc2luZ2xlIGVuY29kZWQgcmVjb3JkLiIiIgogICAgZmlsZV9oYW5kbGUud3JpdGUoZW5jb2RlZF92YWx1ZSkKICAgIGlmIHNlbGYuX2FwcGVuZF90cmFpbGluZ19uZXdsaW5lczoKICAgICAgZmlsZV9oYW5kbGUud3JpdGUoYidcbicpCgoKZGVmIF9jcmVhdGVfdGV4dF9zb3VyY2UoCiAgICBmaWxlX3BhdHRlcm49Tm9uZSwgbWluX2J1bmRsZV9zaXplPU5vbmUsIGNvbXByZXNzaW9uX3R5cGU9Tm9uZSwKICAgIHN0cmlwX3RyYWlsaW5nX25ld2xpbmVzPU5vbmUsIGNvZGVyPU5vbmUsIHNraXBfaGVhZGVyX2xpbmVzPU5vbmUpOgogIHJldHVybiBfVGV4dFNvdXJjZSgKICAgICAgZmlsZV9wYXR0ZXJuPWZpbGVfcGF0dGVybiwgbWluX2J1bmRsZV9zaXplPW1pbl9idW5kbGVfc2l6ZSwKICAgICAgY29tcHJlc3Npb25fdHlwZT1jb21wcmVzc2lvbl90eXBlLAogICAgICBzdHJpcF90cmFpbGluZ19uZXdsaW5lcz1zdHJpcF90cmFpbGluZ19uZXdsaW5lcywKICAgICAgY29kZXI9Y29kZXIsIHZhbGlkYXRlPUZhbHNlLCBza2lwX2hlYWRlcl9saW5lcz1za2lwX2hlYWRlcl9saW5lcykKCgpjbGFzcyBSZWFkQWxsRnJvbVRleHQoUFRyYW5zZm9ybSk6CiAgIiIiQSBgYFBUcmFuc2Zvcm1gYCBmb3IgcmVhZGluZyBhIGBgUENvbGxlY3Rpb25gYCBvZiB0ZXh0IGZpbGVzLgoKICAgUmVhZHMgYSBgYFBDb2xsZWN0aW9uYGAgb2YgdGV4dCBmaWxlcyBvciBmaWxlIHBhdHRlcm5zIGFuZCBhbmQgcHJvZHVjZXMgYQogICBgYFBDb2xsZWN0aW9uYGAgb2Ygc3RyaW5ncy4KCiAgUGFyc2VzIGEgdGV4dCBmaWxlIGFzIG5ld2xpbmUtZGVsaW1pdGVkIGVsZW1lbnRzLCBieSBkZWZhdWx0IGFzc3VtaW5nCiAgVVRGLTggZW5jb2RpbmcuIFN1cHBvcnRzIG5ld2xpbmUgZGVsaW1pdGVycyAnXFxuJyBhbmQgJ1xcclxcbicuCgogIFRoaXMgaW1wbGVtZW50YXRpb24gb25seSBzdXBwb3J0cyByZWFkaW5nIHRleHQgZW5jb2RlZCB1c2luZyBVVEYtOCBvciBBU0NJSS4KICBUaGlzIGRvZXMgbm90IHN1cHBvcnQgb3RoZXIgZW5jb2RpbmdzIHN1Y2ggYXMgVVRGLTE2IG9yIFVURi0zMi4KICAiIiIKCiAgREVGQVVMVF9ERVNJUkVEX0JVTkRMRV9TSVpFID0gNjQgKiAxMDI0ICogMTAyNCAgIyA2NE1CCgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwKICAgICAgbWluX2J1bmRsZV9zaXplPTAsCiAgICAgIGRlc2lyZWRfYnVuZGxlX3NpemU9REVGQVVMVF9ERVNJUkVEX0JVTkRMRV9TSVpFLAogICAgICBjb21wcmVzc2lvbl90eXBlPUNvbXByZXNzaW9uVHlwZXMuQVVUTywKICAgICAgc3RyaXBfdHJhaWxpbmdfbmV3bGluZXM9VHJ1ZSwKICAgICAgY29kZXI9Y29kZXJzLlN0clV0ZjhDb2RlcigpLAogICAgICBza2lwX2hlYWRlcl9saW5lcz0wLAogICAgICAqKmt3YXJncyk6CiAgICAiIiJJbml0aWFsaXplIHRoZSBgYFJlYWRBbGxGcm9tVGV4dGBgIHRyYW5zZm9ybS4KCiAgICBBcmdzOgogICAgICBtaW5fYnVuZGxlX3NpemU6IE1pbmltdW0gc2l6ZSBvZiBidW5kbGVzIHRoYXQgc2hvdWxkIGJlIGdlbmVyYXRlZCB3aGVuCiAgICAgICAgc3BsaXR0aW5nIHRoaXMgc291cmNlIGludG8gYnVuZGxlcy4gU2VlIGBgRmlsZUJhc2VkU291cmNlYGAgZm9yIG1vcmUKICAgICAgICBkZXRhaWxzLgogICAgICBkZXNpcmVkX2J1bmRsZV9zaXplOiBEZXNpcmVkIHNpemUgb2YgYnVuZGxlcyB0aGF0IHNob3VsZCBiZSBnZW5lcmF0ZWQgd2hlbgogICAgICAgIHNwbGl0dGluZyB0aGlzIHNvdXJjZSBpbnRvIGJ1bmRsZXMuIFNlZSBgYEZpbGVCYXNlZFNvdXJjZWBgIGZvciBtb3JlCiAgICAgICAgZGV0YWlscy4KICAgICAgY29tcHJlc3Npb25fdHlwZTogVXNlZCB0byBoYW5kbGUgY29tcHJlc3NlZCBpbnB1dCBmaWxlcy4gVHlwaWNhbCB2YWx1ZQogICAgICAgIGlzIGBgQ29tcHJlc3Npb25UeXBlcy5BVVRPYGAsIGluIHdoaWNoIGNhc2UgdGhlIHVuZGVybHlpbmcgZmlsZV9wYXRoJ3MKICAgICAgICBleHRlbnNpb24gd2lsbCBiZSB1c2VkIHRvIGRldGVjdCB0aGUgY29tcHJlc3Npb24uCiAgICAgIHN0cmlwX3RyYWlsaW5nX25ld2xpbmVzOiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIHNvdXJjZSBzaG91bGQgcmVtb3ZlCiAgICAgICAgdGhlIG5ld2xpbmUgY2hhciBpbiBlYWNoIGxpbmUgaXQgcmVhZHMgYmVmb3JlIGRlY29kaW5nIHRoYXQgbGluZS4KICAgICAgdmFsaWRhdGU6IGZsYWcgdG8gdmVyaWZ5IHRoYXQgdGhlIGZpbGVzIGV4aXN0IGR1cmluZyB0aGUgcGlwZWxpbmUKICAgICAgICBjcmVhdGlvbiB0aW1lLgogICAgICBza2lwX2hlYWRlcl9saW5lczogTnVtYmVyIG9mIGhlYWRlciBsaW5lcyB0byBza2lwLiBTYW1lIG51bWJlciBpcyBza2lwcGVkCiAgICAgICAgZnJvbSBlYWNoIHNvdXJjZSBmaWxlLiBNdXN0IGJlIDAgb3IgaGlnaGVyLiBMYXJnZSBudW1iZXIgb2Ygc2tpcHBlZAogICAgICAgIGxpbmVzIG1pZ2h0IGltcGFjdCBwZXJmb3JtYW5jZS4KICAgICAgY29kZXI6IENvZGVyIHVzZWQgdG8gZGVjb2RlIGVhY2ggbGluZS4KICAgICIiIgogICAgc3VwZXIoUmVhZEFsbEZyb21UZXh0LCBzZWxmKS5fX2luaXRfXygqKmt3YXJncykKICAgIHNvdXJjZV9mcm9tX2ZpbGUgPSBwYXJ0aWFsKAogICAgICAgIF9jcmVhdGVfdGV4dF9zb3VyY2UsIG1pbl9idW5kbGVfc2l6ZT1taW5fYnVuZGxlX3NpemUsCiAgICAgICAgY29tcHJlc3Npb25fdHlwZT1jb21wcmVzc2lvbl90eXBlLAogICAgICAgIHN0cmlwX3RyYWlsaW5nX25ld2xpbmVzPXN0cmlwX3RyYWlsaW5nX25ld2xpbmVzLCBjb2Rlcj1jb2RlciwKICAgICAgICBza2lwX2hlYWRlcl9saW5lcz1za2lwX2hlYWRlcl9saW5lcykKICAgIHNlbGYuX2Rlc2lyZWRfYnVuZGxlX3NpemUgPSBkZXNpcmVkX2J1bmRsZV9zaXplCiAgICBzZWxmLl9taW5fYnVuZGxlX3NpemUgPSBtaW5fYnVuZGxlX3NpemUKICAgIHNlbGYuX2NvbXByZXNzaW9uX3R5cGUgPSBjb21wcmVzc2lvbl90eXBlCiAgICBzZWxmLl9yZWFkX2FsbF9maWxlcyA9IFJlYWRBbGxGaWxlcygKICAgICAgICBUcnVlLCBjb21wcmVzc2lvbl90eXBlLCBkZXNpcmVkX2J1bmRsZV9zaXplLCBtaW5fYnVuZGxlX3NpemUsCiAgICAgICAgc291cmNlX2Zyb21fZmlsZSkKCiAgZGVmIGV4cGFuZChzZWxmLCBwdmFsdWUpOgogICAgcmV0dXJuIHB2YWx1ZSB8ICdSZWFkQWxsRmlsZXMnID4+IHNlbGYuX3JlYWRfYWxsX2ZpbGVzCgoKY2xhc3MgUmVhZEZyb21UZXh0KFBUcmFuc2Zvcm0pOgogIHIiIiJBIDpjbGFzczpgfmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtYCBmb3IgcmVhZGluZyB0ZXh0CiAgZmlsZXMuCgogIFBhcnNlcyBhIHRleHQgZmlsZSBhcyBuZXdsaW5lLWRlbGltaXRlZCBlbGVtZW50cywgYnkgZGVmYXVsdCBhc3N1bWluZwogIGBgVVRGLThgYCBlbmNvZGluZy4gU3VwcG9ydHMgbmV3bGluZSBkZWxpbWl0ZXJzIGBgXG5gYCBhbmQgYGBcclxuYGAuCgogIFRoaXMgaW1wbGVtZW50YXRpb24gb25seSBzdXBwb3J0cyByZWFkaW5nIHRleHQgZW5jb2RlZCB1c2luZyBgYFVURi04YGAgb3IKICBgYEFTQ0lJYGAuCiAgVGhpcyBkb2VzIG5vdCBzdXBwb3J0IG90aGVyIGVuY29kaW5ncyBzdWNoIGFzIGBgVVRGLTE2YGAgb3IgYGBVVEYtMzJgYC4KICAiIiIKCiAgX3NvdXJjZV9jbGFzcyA9IF9UZXh0U291cmNlCgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwKICAgICAgZmlsZV9wYXR0ZXJuPU5vbmUsCiAgICAgIG1pbl9idW5kbGVfc2l6ZT0wLAogICAgICBjb21wcmVzc2lvbl90eXBlPUNvbXByZXNzaW9uVHlwZXMuQVVUTywKICAgICAgc3RyaXBfdHJhaWxpbmdfbmV3bGluZXM9VHJ1ZSwKICAgICAgY29kZXI9Y29kZXJzLlN0clV0ZjhDb2RlcigpLAogICAgICB2YWxpZGF0ZT1UcnVlLAogICAgICBza2lwX2hlYWRlcl9saW5lcz0wLAogICAgICAqKmt3YXJncyk6CiAgICAiIiJJbml0aWFsaXplIHRoZSA6Y2xhc3M6YFJlYWRGcm9tVGV4dGAgdHJhbnNmb3JtLgoKICAgIEFyZ3M6CiAgICAgIGZpbGVfcGF0dGVybiAoc3RyKTogVGhlIGZpbGUgcGF0aCB0byByZWFkIGZyb20gYXMgYSBsb2NhbCBmaWxlIHBhdGggb3IgYQogICAgICAgIEdDUyBgYGdzOi8vYGAgcGF0aC4gVGhlIHBhdGggY2FuIGNvbnRhaW4gZ2xvYiBjaGFyYWN0ZXJzCiAgICAgICAgKGBgKmBgLCBgYD9gYCwgYW5kIGBgWy4uLl1gYCBzZXRzKS4KICAgICAgbWluX2J1bmRsZV9zaXplIChpbnQpOiBNaW5pbXVtIHNpemUgb2YgYnVuZGxlcyB0aGF0IHNob3VsZCBiZSBnZW5lcmF0ZWQKICAgICAgICB3aGVuIHNwbGl0dGluZyB0aGlzIHNvdXJjZSBpbnRvIGJ1bmRsZXMuIFNlZQogICAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNvdXJjZS5GaWxlQmFzZWRTb3VyY2VgIGZvciBtb3JlCiAgICAgICAgZGV0YWlscy4KICAgICAgY29tcHJlc3Npb25fdHlwZSAoc3RyKTogVXNlZCB0byBoYW5kbGUgY29tcHJlc3NlZCBpbnB1dCBmaWxlcy4KICAgICAgICBUeXBpY2FsIHZhbHVlIGlzIDphdHRyOmBDb21wcmVzc2lvblR5cGVzLkFVVE8KICAgICAgICA8YXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5Db21wcmVzc2lvblR5cGVzLkFVVE8+YCwgaW4gd2hpY2ggY2FzZSB0aGUKICAgICAgICB1bmRlcmx5aW5nIGZpbGVfcGF0aCdzIGV4dGVuc2lvbiB3aWxsIGJlIHVzZWQgdG8gZGV0ZWN0IHRoZSBjb21wcmVzc2lvbi4KICAgICAgc3RyaXBfdHJhaWxpbmdfbmV3bGluZXMgKGJvb2wpOiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIHNvdXJjZSBzaG91bGQKICAgICAgICByZW1vdmUgdGhlIG5ld2xpbmUgY2hhciBpbiBlYWNoIGxpbmUgaXQgcmVhZHMgYmVmb3JlIGRlY29kaW5nIHRoYXQgbGluZS4KICAgICAgdmFsaWRhdGUgKGJvb2wpOiBmbGFnIHRvIHZlcmlmeSB0aGF0IHRoZSBmaWxlcyBleGlzdCBkdXJpbmcgdGhlIHBpcGVsaW5lCiAgICAgICAgY3JlYXRpb24gdGltZS4KICAgICAgc2tpcF9oZWFkZXJfbGluZXMgKGludCk6IE51bWJlciBvZiBoZWFkZXIgbGluZXMgdG8gc2tpcC4gU2FtZSBudW1iZXIgaXMKICAgICAgICBza2lwcGVkIGZyb20gZWFjaCBzb3VyY2UgZmlsZS4gTXVzdCBiZSAwIG9yIGhpZ2hlci4gTGFyZ2UgbnVtYmVyIG9mCiAgICAgICAgc2tpcHBlZCBsaW5lcyBtaWdodCBpbXBhY3QgcGVyZm9ybWFuY2UuCiAgICAgIGNvZGVyICh+YXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2Rlcik6IENvZGVyIHVzZWQgdG8gZGVjb2RlIGVhY2ggbGluZS4KICAgICIiIgoKICAgIHN1cGVyKFJlYWRGcm9tVGV4dCwgc2VsZikuX19pbml0X18oKiprd2FyZ3MpCiAgICBzZWxmLl9zb3VyY2UgPSBzZWxmLl9zb3VyY2VfY2xhc3MoCiAgICAgICAgZmlsZV9wYXR0ZXJuLCBtaW5fYnVuZGxlX3NpemUsIGNvbXByZXNzaW9uX3R5cGUsCiAgICAgICAgc3RyaXBfdHJhaWxpbmdfbmV3bGluZXMsIGNvZGVyLCB2YWxpZGF0ZT12YWxpZGF0ZSwKICAgICAgICBza2lwX2hlYWRlcl9saW5lcz1za2lwX2hlYWRlcl9saW5lcykKCiAgZGVmIGV4cGFuZChzZWxmLCBwdmFsdWUpOgogICAgcmV0dXJuIHB2YWx1ZS5waXBlbGluZSB8IFJlYWQoc2VsZi5fc291cmNlKQoKCmNsYXNzIFJlYWRGcm9tVGV4dFdpdGhGaWxlbmFtZShSZWFkRnJvbVRleHQpOgogIHIiIiJBIDpjbGFzczpgfmFwYWNoZV9iZWFtLmlvLnRleHRpby5SZWFkRnJvbVRleHRgIGZvciByZWFkaW5nIHRleHQKICBmaWxlcyByZXR1cm5pbmcgdGhlIG5hbWUgb2YgdGhlIGZpbGUgYW5kIHRoZSBjb250ZW50IG9mIHRoZSBmaWxlLgoKICBUaGlzIGNsYXNzIGV4dGVuZCBSZWFkRnJvbVRleHQgY2xhc3MganVzdCBzZXR0aW5nIGEgZGlmZmVyZW50CiAgX3NvdXJjZV9jbGFzcyBhdHRyaWJ1dGUuCiAgIiIiCgogIF9zb3VyY2VfY2xhc3MgPSBfVGV4dFNvdXJjZVdpdGhGaWxlbmFtZQoKCmNsYXNzIFdyaXRlVG9UZXh0KFBUcmFuc2Zvcm0pOgogICIiIkEgOmNsYXNzOmB+YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm1gIGZvciB3cml0aW5nIHRvCiAgdGV4dCBmaWxlcy4iIiIKCiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLAogICAgICBmaWxlX3BhdGhfcHJlZml4LAogICAgICBmaWxlX25hbWVfc3VmZml4PScnLAogICAgICBhcHBlbmRfdHJhaWxpbmdfbmV3bGluZXM9VHJ1ZSwKICAgICAgbnVtX3NoYXJkcz0wLAogICAgICBzaGFyZF9uYW1lX3RlbXBsYXRlPU5vbmUsCiAgICAgIGNvZGVyPWNvZGVycy5Ub1N0cmluZ0NvZGVyKCksCiAgICAgIGNvbXByZXNzaW9uX3R5cGU9Q29tcHJlc3Npb25UeXBlcy5BVVRPLAogICAgICBoZWFkZXI9Tm9uZSk6CiAgICByIiIiSW5pdGlhbGl6ZSBhIDpjbGFzczpgV3JpdGVUb1RleHRgIHRyYW5zZm9ybS4KCiAgICBBcmdzOgogICAgICBmaWxlX3BhdGhfcHJlZml4IChzdHIpOiBUaGUgZmlsZSBwYXRoIHRvIHdyaXRlIHRvLiBUaGUgZmlsZXMgd3JpdHRlbiB3aWxsCiAgICAgICAgYmVnaW4gd2l0aCB0aGlzIHByZWZpeCwgZm9sbG93ZWQgYnkgYSBzaGFyZCBpZGVudGlmaWVyIChzZWUKICAgICAgICAqKm51bV9zaGFyZHMqKiksIGFuZCBlbmQgaW4gYSBjb21tb24gZXh0ZW5zaW9uLCBpZiBnaXZlbiBieQogICAgICAgICoqZmlsZV9uYW1lX3N1ZmZpeCoqLiBJbiBtb3N0IGNhc2VzLCBvbmx5IHRoaXMgYXJndW1lbnQgaXMgc3BlY2lmaWVkIGFuZAogICAgICAgICoqbnVtX3NoYXJkcyoqLCAqKnNoYXJkX25hbWVfdGVtcGxhdGUqKiwgYW5kICoqZmlsZV9uYW1lX3N1ZmZpeCoqIHVzZQogICAgICAgIGRlZmF1bHQgdmFsdWVzLgogICAgICBmaWxlX25hbWVfc3VmZml4IChzdHIpOiBTdWZmaXggZm9yIHRoZSBmaWxlcyB3cml0dGVuLgogICAgICBhcHBlbmRfdHJhaWxpbmdfbmV3bGluZXMgKGJvb2wpOiBpbmRpY2F0ZSB3aGV0aGVyIHRoaXMgc2luayBzaG91bGQgd3JpdGUKICAgICAgICBhbiBhZGRpdGlvbmFsIG5ld2xpbmUgY2hhciBhZnRlciB3cml0aW5nIGVhY2ggZWxlbWVudC4KICAgICAgbnVtX3NoYXJkcyAoaW50KTogVGhlIG51bWJlciBvZiBmaWxlcyAoc2hhcmRzKSB1c2VkIGZvciBvdXRwdXQuCiAgICAgICAgSWYgbm90IHNldCwgdGhlIHNlcnZpY2Ugd2lsbCBkZWNpZGUgb24gdGhlIG9wdGltYWwgbnVtYmVyIG9mIHNoYXJkcy4KICAgICAgICBDb25zdHJhaW5pbmcgdGhlIG51bWJlciBvZiBzaGFyZHMgaXMgbGlrZWx5IHRvIHJlZHVjZQogICAgICAgIHRoZSBwZXJmb3JtYW5jZSBvZiBhIHBpcGVsaW5lLiAgU2V0dGluZyB0aGlzIHZhbHVlIGlzIG5vdCByZWNvbW1lbmRlZAogICAgICAgIHVubGVzcyB5b3UgcmVxdWlyZSBhIHNwZWNpZmljIG51bWJlciBvZiBvdXRwdXQgZmlsZXMuCiAgICAgIHNoYXJkX25hbWVfdGVtcGxhdGUgKHN0cik6IEEgdGVtcGxhdGUgc3RyaW5nIGNvbnRhaW5pbmcgcGxhY2Vob2xkZXJzIGZvcgogICAgICAgIHRoZSBzaGFyZCBudW1iZXIgYW5kIHNoYXJkIGNvdW50LiBDdXJyZW50bHkgb25seSBgYCcnYGAgYW5kCiAgICAgICAgYGAnLVNTU1NTLW9mLU5OTk5OJ2BgIGFyZSBwYXR0ZXJucyBhY2NlcHRlZCBieSB0aGUgc2VydmljZS4KICAgICAgICBXaGVuIGNvbnN0cnVjdGluZyBhIGZpbGVuYW1lIGZvciBhIHBhcnRpY3VsYXIgc2hhcmQgbnVtYmVyLCB0aGUKICAgICAgICB1cHBlci1jYXNlIGxldHRlcnMgYGBTYGAgYW5kIGBgTmBgIGFyZSByZXBsYWNlZCB3aXRoIHRoZSBgYDBgYC1wYWRkZWQKICAgICAgICBzaGFyZCBudW1iZXIgYW5kIHNoYXJkIGNvdW50IHJlc3BlY3RpdmVseS4gIFRoaXMgYXJndW1lbnQgY2FuIGJlIGBgJydgYAogICAgICAgIGluIHdoaWNoIGNhc2UgaXQgYmVoYXZlcyBhcyBpZiBudW1fc2hhcmRzIHdhcyBzZXQgdG8gMSBhbmQgb25seSBvbmUgZmlsZQogICAgICAgIHdpbGwgYmUgZ2VuZXJhdGVkLiBUaGUgZGVmYXVsdCBwYXR0ZXJuIHVzZWQgaXMgYGAnLVNTU1NTLW9mLU5OTk5OJ2BgLgogICAgICBjb2RlciAofmFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQ29kZXIpOiBDb2RlciB1c2VkIHRvIGVuY29kZSBlYWNoIGxpbmUuCiAgICAgIGNvbXByZXNzaW9uX3R5cGUgKHN0cik6IFVzZWQgdG8gaGFuZGxlIGNvbXByZXNzZWQgb3V0cHV0IGZpbGVzLgogICAgICAgIFR5cGljYWwgdmFsdWUgaXMgOmNsYXNzOmBDb21wcmVzc2lvblR5cGVzLkFVVE8KICAgICAgICA8YXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5Db21wcmVzc2lvblR5cGVzLkFVVE8+YCwgaW4gd2hpY2ggY2FzZSB0aGUKICAgICAgICBmaW5hbCBmaWxlIHBhdGgncyBleHRlbnNpb24gKGFzIGRldGVybWluZWQgYnkgKipmaWxlX3BhdGhfcHJlZml4KiosCiAgICAgICAgKipmaWxlX25hbWVfc3VmZml4KiosICoqbnVtX3NoYXJkcyoqIGFuZCAqKnNoYXJkX25hbWVfdGVtcGxhdGUqKikgd2lsbAogICAgICAgIGJlIHVzZWQgdG8gZGV0ZWN0IHRoZSBjb21wcmVzc2lvbi4KICAgICAgaGVhZGVyIChzdHIpOiBTdHJpbmcgdG8gd3JpdGUgYXQgYmVnaW5uaW5nIG9mIGZpbGUgYXMgYSBoZWFkZXIuCiAgICAgICAgSWYgbm90IDpkYXRhOmBOb25lYCBhbmQgKiphcHBlbmRfdHJhaWxpbmdfbmV3bGluZXMqKiBpcyBzZXQsIGBgXG5gYCB3aWxsCiAgICAgICAgYmUgYWRkZWQuCiAgICAiIiIKCiAgICBzZWxmLl9zaW5rID0gX1RleHRTaW5rKGZpbGVfcGF0aF9wcmVmaXgsIGZpbGVfbmFtZV9zdWZmaXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZF90cmFpbGluZ19uZXdsaW5lcywgbnVtX3NoYXJkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmRfbmFtZV90ZW1wbGF0ZSwgY29kZXIsIGNvbXByZXNzaW9uX3R5cGUsIGhlYWRlcikKCiAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICByZXR1cm4gcGNvbGwgfCBXcml0ZShzZWxmLl9zaW5rKQp9cvqDAAAoWBgAAABfVGV4dFNvdXJjZS5kaXNwbGF5X2RhdGFYAwAAAGRlZkuIS5SHWC4AAABfVGV4dFNvdXJjZS5fdHJ5X3RvX2Vuc3VyZV9udW1fYnl0ZXNfaW5fYnVmZmVyWAMAAABkZWZNCgFNFwGHWBYAAABfVGV4dFNpbmsuZGlzcGxheV9kYXRhWAMAAABkZWZNjgFNlAGHWBYAAABfVGV4dFNvdXJjZS5SZWFkQnVmZmVyWAUAAABjbGFzc0s5S1mHWBwAAABfVGV4dFNvdXJjZS5SZWFkQnVmZmVyLnJlc2V0WAMAAABkZWZLVktZh1gSAAAAX1RleHRTaW5rLl9faW5pdF9fWAMAAABkZWZNTwFNhQGHWBQAAABXcml0ZVRvVGV4dC5fX2luaXRfX1gDAAAAZGVmTS0CTV8Ch1gUAAAAX1RleHRTb3VyY2UuX19pbml0X19YAwAAAGRlZktaS4eHWBgAAABSZWFkQWxsRnJvbVRleHQuX19pbml0X19YAwAAAGRlZk21AU3fAYdYLwAAAF9UZXh0U291cmNlLnJlYWRfcmVjb3Jkcy5zcGxpdF9wb2ludHNfdW5jbGFpbWVkWAMAAABkZWZLm0ueh1gLAAAAV3JpdGVUb1RleHRYBQAAAGNsYXNzTSkCTWICh1giAAAAX1RleHRTb3VyY2UuX2ZpbmRfc2VwYXJhdG9yX2JvdW5kc1gDAAAAZGVmS+pNCQGHWBsAAABfVGV4dFNvdXJjZS5SZWFkQnVmZmVyLmRhdGFYAwAAAGRlZktFS0mHWBgAAABSZWFkRnJvbVRleHRXaXRoRmlsZW5hbWVYBQAAAGNsYXNzTR4CTScCh1gVAAAAUmVhZEZyb21UZXh0Ll9faW5pdF9fWAMAAABkZWZN8gFNGQKHWBMAAABfY3JlYXRlX3RleHRfc291cmNlWAMAAABkZWZNnAFNpAGHWA4AAABfVGV4dFNpbmsub3BlblgDAAAAZGVmTYYBTY0Bh1gMAAAAUmVhZEZyb21UZXh0WAUAAABjbGFzc03kAU0cAodYGAAAAF9UZXh0U291cmNlLnJlYWRfcmVjb3Jkc1gDAAAAZGVmS5VLzYdYHwAAAF9UZXh0U291cmNlLlJlYWRCdWZmZXIucG9zaXRpb25YAwAAAGRlZktOS1WHWBgAAABfVGV4dFNvdXJjZS5fcmVhZF9yZWNvcmRYAwAAAGRlZk0mAU1CAYdYCwAAAF9UZXh0U291cmNlWAUAAABjbGFzc0stTUIBh1gWAAAAUmVhZEFsbEZyb21UZXh0LmV4cGFuZFgDAAAAZGVmTeABTeIBh1gbAAAAX1RleHRTb3VyY2UuX3Byb2Nlc3NfaGVhZGVyWAMAAABkZWZLzkvph1gTAAAAUmVhZEZyb21UZXh0LmV4cGFuZFgDAAAAZGVmTRoCTRwCh1gXAAAAX1RleHRTb3VyY2VXaXRoRmlsZW5hbWVYBQAAAGNsYXNzTUQBTUoBh1gJAAAAX1RleHRTaW5rWAUAAABjbGFzc01MAU2aAYdYHwAAAF9UZXh0U291cmNlLlJlYWRCdWZmZXIuX19pbml0X19YAwAAAGRlZks9S0CHWBcAAABfVGV4dFNvdXJjZS5fc2tpcF9saW5lc1gDAAAAZGVmTRgBTSUBh1gSAAAAV3JpdGVUb1RleHQuZXhwYW5kWAMAAABkZWZNYAJNYgKHWA8AAABSZWFkQWxsRnJvbVRleHRYBQAAAGNsYXNzTaYBTeIBh1gkAAAAX1RleHRTb3VyY2VXaXRoRmlsZW5hbWUucmVhZF9yZWNvcmRzWAMAAABkZWZNRQFNSgGHWB4AAABfVGV4dFNpbmsud3JpdGVfZW5jb2RlZF9yZWNvcmRYAwAAAGRlZk2VAU2aAYd1fXL7gwAAKFgMAAAAUmVhZEZyb21UZXh0aqFfAABYCwAAAFdyaXRlVG9UZXh0aqFfAABYDwAAAFJlYWRBbGxGcm9tVGV4dGqhXwAAWBgAAABSZWFkRnJvbVRleHRXaXRoRmlsZW5hbWVqoV8AAFgWAAAAUmVhZEFsbEZyb21UZXh0LmV4cGFuZGqhXwAAWBMAAABSZWFkRnJvbVRleHQuZXhwYW5kaqFfAABYEgAAAFdyaXRlVG9UZXh0LmV4cGFuZGqhXwAAdWp9aQAAWBUAAABhcGFjaGVfYmVhbS5pby50ZXh0aW9y/IMAAIWBcv2DAAB9cv6DAABidFUlYXBhY2hlX2JlYW0uaW8uZ2NwLnB1YnN1Yl9pdF9waXBlbGluZShYBA4AACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoiIiIKVGVzdCBwaXBlbGluZSBmb3IgdXNlIGJ5IHB1YnN1Yl9pbnRlZ3JhdGlvbl90ZXN0LgoiIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgYXJncGFyc2UKCmltcG9ydCBhcGFjaGVfYmVhbSBhcyBiZWFtCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBQaXBlbGluZU9wdGlvbnMKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IFNldHVwT3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgU3RhbmRhcmRPcHRpb25zCgoKZGVmIHJ1bl9waXBlbGluZShhcmd2LCB3aXRoX2F0dHJpYnV0ZXMsIGlkX2xhYmVsLCB0aW1lc3RhbXBfYXR0cmlidXRlKToKICAiIiJCdWlsZCBhbmQgcnVuIHRoZSBwaXBlbGluZS4iIiIKCiAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQogIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICctLW91dHB1dF90b3BpYycsIHJlcXVpcmVkPVRydWUsCiAgICAgIGhlbHA9KCdPdXRwdXQgUHViU3ViIHRvcGljIG9mIHRoZSBmb3JtICcKICAgICAgICAgICAgJyJwcm9qZWN0cy88UFJPSkVDVD4vdG9waWMvPFRPUElDPiIuJykpCiAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgJy0taW5wdXRfc3Vic2NyaXB0aW9uJywgcmVxdWlyZWQ9VHJ1ZSwKICAgICAgaGVscD0oJ0lucHV0IFB1YlN1YiBzdWJzY3JpcHRpb24gb2YgdGhlIGZvcm0gJwogICAgICAgICAgICAnInByb2plY3RzLzxQUk9KRUNUPi9zdWJzY3JpcHRpb25zLzxTVUJTQ1JJUFRJT04+LiInKSkKICBrbm93bl9hcmdzLCBwaXBlbGluZV9hcmdzID0gcGFyc2VyLnBhcnNlX2tub3duX2FyZ3MoYXJndikKCiAgIyBXZSB1c2UgdGhlIHNhdmVfbWFpbl9zZXNzaW9uIG9wdGlvbiBiZWNhdXNlIG9uZSBvciBtb3JlIERvRm4ncyBpbiB0aGlzCiAgIyB3b3JrZmxvdyByZWx5IG9uIGdsb2JhbCBjb250ZXh0IChlLmcuLCBhIG1vZHVsZSBpbXBvcnRlZCBhdCBtb2R1bGUgbGV2ZWwpLgogIHBpcGVsaW5lX29wdGlvbnMgPSBQaXBlbGluZU9wdGlvbnMocGlwZWxpbmVfYXJncykKICBwaXBlbGluZV9vcHRpb25zLnZpZXdfYXMoU2V0dXBPcHRpb25zKS5zYXZlX21haW5fc2Vzc2lvbiA9IFRydWUKICBwaXBlbGluZV9vcHRpb25zLnZpZXdfYXMoU3RhbmRhcmRPcHRpb25zKS5zdHJlYW1pbmcgPSBUcnVlCiAgcCA9IGJlYW0uUGlwZWxpbmUob3B0aW9ucz1waXBlbGluZV9vcHRpb25zKQogIHJ1bm5lcl9uYW1lID0gdHlwZShwLnJ1bm5lcikuX19uYW1lX18KCiAgIyBSZWFkIGZyb20gUHViU3ViIGludG8gYSBQQ29sbGVjdGlvbi4KICBpZiBydW5uZXJfbmFtZSA9PSAnVGVzdERpcmVjdFJ1bm5lcic6CiAgICBtZXNzYWdlcyA9IHAgfCBiZWFtLmlvLlJlYWRGcm9tUHViU3ViKAogICAgICAgIHN1YnNjcmlwdGlvbj1rbm93bl9hcmdzLmlucHV0X3N1YnNjcmlwdGlvbiwKICAgICAgICB3aXRoX2F0dHJpYnV0ZXM9d2l0aF9hdHRyaWJ1dGVzLAogICAgICAgIHRpbWVzdGFtcF9hdHRyaWJ1dGU9dGltZXN0YW1wX2F0dHJpYnV0ZSkKICBlbHNlOgogICAgbWVzc2FnZXMgPSBwIHwgYmVhbS5pby5SZWFkRnJvbVB1YlN1YigKICAgICAgICBzdWJzY3JpcHRpb249a25vd25fYXJncy5pbnB1dF9zdWJzY3JpcHRpb24sCiAgICAgICAgaWRfbGFiZWw9aWRfbGFiZWwsCiAgICAgICAgd2l0aF9hdHRyaWJ1dGVzPXdpdGhfYXR0cmlidXRlcywKICAgICAgICB0aW1lc3RhbXBfYXR0cmlidXRlPXRpbWVzdGFtcF9hdHRyaWJ1dGUpCgogIGRlZiBhZGRfYXR0cmlidXRlKG1zZywgdGltZXN0YW1wPWJlYW0uRG9Gbi5UaW1lc3RhbXBQYXJhbSk6CiAgICBtc2cuZGF0YSArPSAnLXNlZW4nCiAgICBtc2cuYXR0cmlidXRlc1sncHJvY2Vzc2VkJ10gPSAnSVQnCiAgICBpZiB0aW1lc3RhbXBfYXR0cmlidXRlIGluIG1zZy5hdHRyaWJ1dGVzOgogICAgICBtc2cuYXR0cmlidXRlc1t0aW1lc3RhbXBfYXR0cmlidXRlICsgJ19vdXQnXSA9IHRpbWVzdGFtcC50b19yZmMzMzM5KCkKICAgIHJldHVybiBtc2cKCiAgZGVmIG1vZGlmeV9kYXRhKGRhdGEpOgogICAgcmV0dXJuIGRhdGEgKyAnLXNlZW4nCgogIGlmIHdpdGhfYXR0cmlidXRlczoKICAgIG91dHB1dCA9IG1lc3NhZ2VzIHwgJ2FkZF9hdHRyaWJ1dGUnID4+IGJlYW0uTWFwKGFkZF9hdHRyaWJ1dGUpCiAgZWxzZToKICAgIG91dHB1dCA9IG1lc3NhZ2VzIHwgJ21vZGlmeV9kYXRhJyA+PiBiZWFtLk1hcChtb2RpZnlfZGF0YSkKCiAgIyBXcml0ZSB0byBQdWJTdWIuCiAgaWYgcnVubmVyX25hbWUgPT0gJ1Rlc3REaXJlY3RSdW5uZXInOgogICAgXyA9IG91dHB1dCB8IGJlYW0uaW8uV3JpdGVUb1B1YlN1Yihrbm93bl9hcmdzLm91dHB1dF90b3BpYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aF9hdHRyaWJ1dGVzPXdpdGhfYXR0cmlidXRlcykKICBlbHNlOgogICAgXyA9IG91dHB1dCB8IGJlYW0uaW8uV3JpdGVUb1B1YlN1Yihrbm93bl9hcmdzLm91dHB1dF90b3BpYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRfbGFiZWw9aWRfbGFiZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhfYXR0cmlidXRlcz13aXRoX2F0dHJpYnV0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcF9hdHRyaWJ1dGU9dGltZXN0YW1wX2F0dHJpYnV0ZSkKCiAgcmVzdWx0ID0gcC5ydW4oKQogIHJlc3VsdC53YWl0X3VudGlsX2ZpbmlzaCgpCn1y/4MAAChYDAAAAHJ1bl9waXBlbGluZVgDAAAAZGVmSx9LXYdYGAAAAHJ1bl9waXBlbGluZS5tb2RpZnlfZGF0YVgDAAAAZGVmS0lLS4dYGgAAAHJ1bl9waXBlbGluZS5hZGRfYXR0cmlidXRlWAMAAABkZWZLQktIh3V9cgCEAABYDAAAAHJ1bl9waXBlbGluZWq2XwAAc2p9aQAAWCUAAABhcGFjaGVfYmVhbS5pby5nY3AucHVic3ViX2l0X3BpcGVsaW5lcgGEAACFgXIChAAAfXIDhAAAYnRVJmFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lKFh8SAAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJBIHNldCBvZiB1dGlsaXRpZXMgdG8gd3JpdGUgcGlwZWxpbmVzIGZvciBwZXJmb3JtYW5jZSB0ZXN0cy4KClRoaXMgbW9kdWxlIG9mZmVycyBhIHdheSB0byBjcmVhdGUgcGlwZWxpbmVzIHVzaW5nIHN5bnRoZXRpYyBzb3VyY2VzIGFuZCBzdGVwcy4KRXhhY3Qgc2hhcGUgb2YgdGhlIHBpcGVsaW5lIGFuZCB0aGUgYmVoYXZpb3VyIG9mIHNvdXJjZXMgYW5kIHN0ZXBzIGNhbiBiZQpjb250cm9sbGVkIHRocm91Z2ggYXJndW1lbnRzLiBQbGVhc2Ugc2VlIGZ1bmN0aW9uICdwYXJzZV9hcmdzKCknIGZvciBtb3JlCmRldGFpbHMgYWJvdXQgdGhlIGFyZ3VtZW50cy4KClNoYXBlIG9mIHRoZSBwaXBlbGluZSBpcyBwcmltYXJpeSBjb250cm9sbGVkIHRocm91Z2ggdHdvIGFyZ3VtZW50cy4gQXJndW1lbnQKJ3N0ZXBzJyBjYW4gYmUgdXNlZCB0byBkZWZpbmUgYSBsaXN0IG9mIHN0ZXBzIGFzIGEgSlNPTiBzdHJpbmcuIEFyZ3VtZW50CidiYXJyaWVyJyBkZXNjcmliZXMgaG93IHRoZXNlIHN0ZXBzIGFyZSBzZXBhcmF0ZWQgZnJvbSBlYWNoIG90aGVyLiBBcmd1bWVudAonYmFycmllcicgY2FuIGJlIHVzZSB0byBidWlsZCBhIHBpcGVsaW5lIGFzIGEgYSBzZXJpZXMgb2Ygc3RlcHMgb3IgYSB0cmVlIG9mCnN0ZXBzIHdpdGggYSBmYW5pbiBvciBhIGZhbm91dCBvZiBzaXplIDIuCgpPdGhlciBhcmd1bWVudHMgZGVzY3JpYmUgd2hhdCBnZXRzIGdlbmVyYXRlZCBieSBzeW50aGV0aWMgc291cmNlcyB0aGF0IHByb2R1Y2UKZGF0YSBmb3IgdGhlIHBpcGVsaW5lLgoiIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CmZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KCmltcG9ydCBhcmdwYXJzZQppbXBvcnQganNvbgppbXBvcnQgbG9nZ2luZwppbXBvcnQgbWF0aAppbXBvcnQgdGltZQoKaW1wb3J0IGFwYWNoZV9iZWFtIGFzIGJlYW0KZnJvbSBhcGFjaGVfYmVhbS5pbyBpbXBvcnQgV3JpdGVUb1RleHQKZnJvbSBhcGFjaGVfYmVhbS5pbyBpbXBvcnQgaW9iYXNlCmZyb20gYXBhY2hlX2JlYW0uaW8gaW1wb3J0IHJhbmdlX3RyYWNrZXJzCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBQaXBlbGluZU9wdGlvbnMKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IFNldHVwT3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9waXBlbGluZSBpbXBvcnQgVGVzdFBpcGVsaW5lCgp0cnk6CiAgaW1wb3J0IG51bXB5IGFzIG5wCmV4Y2VwdCBJbXBvcnRFcnJvcjoKICBucCA9IE5vbmUKCgpkZWYgcGFyc2VfYnl0ZV9zaXplKHMpOgogIHN1ZmZpeGVzID0gJ0JLTUdUUCcKICBpZiBzWy0xXSBpbiBzdWZmaXhlczoKICAgIHJldHVybiBpbnQoZmxvYXQoc1s6LTFdKSAqIDEwMjQqKnN1ZmZpeGVzLmluZGV4KHNbLTFdKSkKCiAgcmV0dXJuIGludChzKQoKCmRlZiBkaXZfcm91bmRfdXAoYSwgYik6CiAgIiIiUmV0dXJuIGNlaWwoYS9iKS4iIiIKICByZXR1cm4gaW50KG1hdGguY2VpbChmbG9hdChhKSAvIGIpKQoKCmRlZiByb3RhdGVfa2V5KGVsZW1lbnQpOgogICIiIlJldHVybnMgYSBuZXcga2V5LXZhbHVlIHBhaXIgb2YgdGhlIHNhbWUgc2l6ZSBidXQgd2l0aCBhIGRpZmZlcmVudCBrZXkuIiIiCiAgKGtleSwgdmFsdWUpID0gZWxlbWVudAogIHJldHVybiBrZXlbLTE6XSArIGtleVs6LTFdLCB2YWx1ZQoKCmNsYXNzIFN5bnRoZXRpY1N0ZXAoYmVhbS5Eb0ZuKToKICAiIiJBIERvRm4gb2Ygd2hpY2ggYmVoYXZpb3IgY2FuIGJlIGNvbnRyb2xsZWQgdGhyb3VnaCBwcmVzcGVjaWZpZWQgcGFyYW1ldGVycy4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHBlcl9lbGVtZW50X2RlbGF5X3NlYz0wLCBwZXJfYnVuZGxlX2RlbGF5X3NlYz0wLAogICAgICAgICAgICAgICBvdXRwdXRfcmVjb3Jkc19wZXJfaW5wdXRfcmVjb3JkPTEsIG91dHB1dF9maWx0ZXJfcmF0aW89MCk6CiAgICBpZiBwZXJfZWxlbWVudF9kZWxheV9zZWMgYW5kIHBlcl9lbGVtZW50X2RlbGF5X3NlYyA8IDFlLTM6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1BlciBlbGVtZW50IHNsZWVwIHRpbWUgbXVzdCBiZSBhdCBsZWFzdCAxZS0zLiAnCiAgICAgICAgICAgICAgICAgICAgICAgJ1JlY2VpdmVkOiAlcicsIHBlcl9lbGVtZW50X2RlbGF5X3NlYykKICAgIHNlbGYuX3Blcl9lbGVtZW50X2RlbGF5X3NlYyA9IHBlcl9lbGVtZW50X2RlbGF5X3NlYwogICAgc2VsZi5fcGVyX2J1bmRsZV9kZWxheV9zZWMgPSBwZXJfYnVuZGxlX2RlbGF5X3NlYwogICAgc2VsZi5fb3V0cHV0X3JlY29yZHNfcGVyX2lucHV0X3JlY29yZCA9IG91dHB1dF9yZWNvcmRzX3Blcl9pbnB1dF9yZWNvcmQKICAgIHNlbGYuX291dHB1dF9maWx0ZXJfcmF0aW8gPSBvdXRwdXRfZmlsdGVyX3JhdGlvCgogIGRlZiBzdGFydF9idW5kbGUoc2VsZik6CiAgICBzZWxmLl9zdGFydF90aW1lID0gdGltZS50aW1lKCkKCiAgZGVmIGZpbmlzaF9idW5kbGUoc2VsZik6CiAgICAjIFRoZSB0YXJnZXQgaXMgZm9yIHRoZSBlbmNsb3Npbmcgc3RhZ2UgdG8gdGFrZSBhcyBjbG9zZSB0byBhcyBwb3NzaWJsZQogICAgIyB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHNlY29uZHMsIHNvIHdlIG9ubHkgc2xlZXAgZW5vdWdoIHRvIG1ha2UgdXAgZm9yCiAgICAjIG92ZXJoZWFkcyBub3QgaW5jdXJyZWQgZWxzZXdoZXJlLgogICAgdG9fc2xlZXAgPSBzZWxmLl9wZXJfYnVuZGxlX2RlbGF5X3NlYyAtICh0aW1lLnRpbWUoKSAtIHNlbGYuX3N0YXJ0X3RpbWUpCgogICAgIyBJZ25vcmluZyBzdWItbWlsbGlzZWNvbmQgc2xlZXAgdGltZXMuCiAgICBpZiB0b19zbGVlcCA+PSAxZS0zOgogICAgICB0aW1lLnNsZWVwKHRvX3NsZWVwKQoKICBkZWYgcHJvY2VzcyhzZWxmLCBlbGVtZW50KToKICAgIGlmIHNlbGYuX3Blcl9lbGVtZW50X2RlbGF5X3NlYyA+PSAxZS0zOgogICAgICB0aW1lLnNsZWVwKHNlbGYuX3Blcl9lbGVtZW50X2RlbGF5X3NlYykKICAgIGZpbHRlcl9lbGVtZW50ID0gRmFsc2UKICAgIGlmIHNlbGYuX291dHB1dF9maWx0ZXJfcmF0aW8gPiAwOgogICAgICBpZiBucC5yYW5kb20ucmFuZG9tKCkgPCBzZWxmLl9vdXRwdXRfZmlsdGVyX3JhdGlvOgogICAgICAgIGZpbHRlcl9lbGVtZW50ID0gVHJ1ZQoKICAgIGlmIG5vdCBmaWx0ZXJfZWxlbWVudDoKICAgICAgZm9yIF8gaW4gcmFuZ2Uoc2VsZi5fb3V0cHV0X3JlY29yZHNfcGVyX2lucHV0X3JlY29yZCk6CiAgICAgICAgeWllbGQgZWxlbWVudAoKCmNsYXNzIFN5bnRoZXRpY1NvdXJjZShpb2Jhc2UuQm91bmRlZFNvdXJjZSk6CiAgIiIiQSBjdXN0b20gc291cmNlIG9mIGEgc3BlY2lmaWVkIHNpemUuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBpbnB1dF9zcGVjKToKICAgICIiIkluaXRpYXRlcyBhIHN5bnRoZXRpYyBzb3VyY2UuCgogICAgQXJnczoKICAgICAgaW5wdXRfc3BlYzogSW5wdXQgc3BlY2lmaWNhdGlvbiBvZiB0aGUgc291cmNlLiBTZWUgY29ycmVzcG9uZGluZyBvcHRpb24gaW4KICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gJ3BhcnNlX2FyZ3MoKScgYmVsb3cgZm9yIG1vcmUgZGV0YWlscy4KICAgIFJhaXNlczoKICAgICAgVmFsdWVFcnJvcjogaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KICAgICIiIgoKICAgIGRlZiBtYXliZV9wYXJzZV9ieXRlX3NpemUocyk6CiAgICAgIHJldHVybiBwYXJzZV9ieXRlX3NpemUocykgaWYgaXNpbnN0YW5jZShzLCBzdHIpIGVsc2UgaW50KHMpCgogICAgc2VsZi5fbnVtX3JlY29yZHMgPSBpbnB1dF9zcGVjWydudW1SZWNvcmRzJ10KICAgIHNlbGYuX2tleV9zaXplID0gbWF5YmVfcGFyc2VfYnl0ZV9zaXplKGlucHV0X3NwZWMuZ2V0KCdrZXlTaXplQnl0ZXMnLCAxKSkKICAgIHNlbGYuX3ZhbHVlX3NpemUgPSBtYXliZV9wYXJzZV9ieXRlX3NpemUoCiAgICAgICAgaW5wdXRfc3BlYy5nZXQoJ3ZhbHVlU2l6ZUJ5dGVzJywgMSkpCiAgICBzZWxmLl90b3RhbF9zaXplID0gc2VsZi5lbGVtZW50X3NpemUgKiBzZWxmLl9udW1fcmVjb3JkcwogICAgc2VsZi5faW5pdGlhbF9zcGxpdHRpbmcgPSAoCiAgICAgICAgaW5wdXRfc3BlY1snYnVuZGxlU2l6ZURpc3RyaWJ1dGlvbiddWyd0eXBlJ10KICAgICAgICBpZiAnYnVuZGxlU2l6ZURpc3RyaWJ1dGlvbicgaW4gaW5wdXRfc3BlYyBlbHNlICdjb25zdCcpCiAgICBpZiBzZWxmLl9pbml0aWFsX3NwbGl0dGluZyAhPSAnY29uc3QnIGFuZCBzZWxmLl9pbml0aWFsX3NwbGl0dGluZyAhPSAnemlwZic6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnT25seSBjb25zdCBhbmQgemlwZiBkaXN0cmlidXRpb25zIGFyZSBzdXBwb3J0ZWQgZm9yIGRldGVybWluaW5nICcKICAgICAgICAgICdzaXplcyBvZiBidW5kbGVzIHByb2R1Y2VkIGJ5IGluaXRpYWwgc3BsaXR0aW5nLiBSZWNlaXZlZDogJXMnLAogICAgICAgICAgc2VsZi5faW5pdGlhbF9zcGxpdHRpbmcpCiAgICBzZWxmLl9pbml0aWFsX3NwbGl0dGluZ19udW1fYnVuZGxlcyA9ICgKICAgICAgICBpbnB1dF9zcGVjWydmb3JjZU51bUluaXRpYWxCdW5kbGVzJ10KICAgICAgICBpZiAnZm9yY2VOdW1Jbml0aWFsQnVuZGxlcycgaW4gaW5wdXRfc3BlYyBlbHNlIDApCiAgICBpZiBzZWxmLl9pbml0aWFsX3NwbGl0dGluZyA9PSAnemlwZic6CiAgICAgIHNlbGYuX2luaXRpYWxfc3BsaXR0aW5nX2Rpc3RyaWJ1dGlvbl9wYXJhbWV0ZXIgPSAoCiAgICAgICAgICBpbnB1dF9zcGVjWydidW5kbGVTaXplRGlzdHJpYnV0aW9uJ11bJ3BhcmFtJ10pCiAgICAgIGlmIHNlbGYuX2luaXRpYWxfc3BsaXR0aW5nX2Rpc3RyaWJ1dGlvbl9wYXJhbWV0ZXIgPCAxOgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAgICdQYXJhbWV0ZXIgZm9yIGEgWmlwZiBkaXN0cmlidXRpb24gbXVzdCBiZSBsYXJnZXIgdGhhbiAxLiAnCiAgICAgICAgICAgICdSZWNlaXZlZCAlci4nLCBzZWxmLl9pbml0aWFsX3NwbGl0dGluZ19kaXN0cmlidXRpb25fcGFyYW1ldGVyKQogICAgZWxzZToKICAgICAgc2VsZi5faW5pdGlhbF9zcGxpdHRpbmdfZGlzdHJpYnV0aW9uX3BhcmFtZXRlciA9IDAKICAgIHNlbGYuX2R5bmFtaWNfc3BsaXR0aW5nID0gKAogICAgICAgICdub25lJyBpZiAoCiAgICAgICAgICAgICdzcGxpdFBvaW50RnJlcXVlbmN5UmVjb3JkcycgaW4gaW5wdXRfc3BlYwogICAgICAgICAgICBhbmQgaW5wdXRfc3BlY1snc3BsaXRQb2ludEZyZXF1ZW5jeVJlY29yZHMnXSA9PSAwKQogICAgICAgIGVsc2UgJ3BlcmZlY3QnKQogICAgaWYgJ2RlbGF5RGlzdHJpYnV0aW9uJyBpbiBpbnB1dF9zcGVjOgogICAgICBpZiBpbnB1dF9zcGVjWydkZWxheURpc3RyaWJ1dGlvbiddWyd0eXBlJ10gIT0gJ2NvbnN0JzoKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdTeW50aGV0aWNTb3VyY2UgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgZGVsYXkgJwogICAgICAgICAgICAgICAgICAgICAgICAgJ2Rpc3RyaWJ1dGlvbnMgb2YgdHlwZSBcJ2NvbnN0XCcuIFJlY2VpdmVkICVzLicsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9zcGVjWydkZWxheURpc3RyaWJ1dGlvbiddWyd0eXBlJ10pCiAgICAgIHNlbGYuX3NsZWVwX3Blcl9pbnB1dF9yZWNvcmRfc2VjID0gKAogICAgICAgICAgZmxvYXQoaW5wdXRfc3BlY1snZGVsYXlEaXN0cmlidXRpb24nXVsnY29uc3QnXSkgLyAxMDAwKQogICAgICBpZiAoc2VsZi5fc2xlZXBfcGVyX2lucHV0X3JlY29yZF9zZWMgYW5kCiAgICAgICAgICBzZWxmLl9zbGVlcF9wZXJfaW5wdXRfcmVjb3JkX3NlYyA8IDFlLTMpOgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1NsZWVwIHRpbWUgcGVyIGlucHV0IHJlY29yZCBtdXN0IGJlIGF0IGxlYXN0IDFlLTMuJwogICAgICAgICAgICAgICAgICAgICAgICAgJyBSZWNlaXZlZDogJXInLCBzZWxmLl9zbGVlcF9wZXJfaW5wdXRfcmVjb3JkX3NlYykKICAgIGVsc2U6CiAgICAgIHNlbGYuX3NsZWVwX3Blcl9pbnB1dF9yZWNvcmRfc2VjID0gMAoKICBAcHJvcGVydHkKICBkZWYgZWxlbWVudF9zaXplKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX2tleV9zaXplICsgc2VsZi5fdmFsdWVfc2l6ZQoKICBkZWYgZXN0aW1hdGVfc2l6ZShzZWxmKToKICAgIHJldHVybiBzZWxmLl90b3RhbF9zaXplCgogIGRlZiBzcGxpdChzZWxmLCBkZXNpcmVkX2J1bmRsZV9zaXplLCBzdGFydF9wb3NpdGlvbj0wLCBzdG9wX3Bvc2l0aW9uPU5vbmUpOgogICAgIyBQZXJmb3JtcyBpbml0aWFsIHNwbGl0dGluZyBvZiBTeW50aGV0aWNTb3VyY2UuCiAgICAjCiAgICAjIEV4YWN0IHNpemVzIGFuZCBkaXN0cmlidXRpb24gb2YgaW5pdGlhbCBzcGxpdHMgZ2VuZXJhdGVkIGhlcmUgZGVwZW5kcyBvbgogICAgIyB0aGUgaW5wdXQgc3BlY2lmaWNhdGlvbiBvZiB0aGUgU3ludGhldGljU291cmNlLgoKICAgIGlmIHN0b3BfcG9zaXRpb24gaXMgTm9uZToKICAgICAgc3RvcF9wb3NpdGlvbiA9IHNlbGYuX251bV9yZWNvcmRzCiAgICBpZiBzZWxmLl9pbml0aWFsX3NwbGl0dGluZyA9PSAnemlwZic6CiAgICAgIGRlc2lyZWRfbnVtX2J1bmRsZXMgPSBzZWxmLl9pbml0aWFsX3NwbGl0dGluZ19udW1fYnVuZGxlcyBvciBtYXRoLmNlaWwoCiAgICAgICAgICBmbG9hdChzZWxmLmVzdGltYXRlX3NpemUoKSkgLyBkZXNpcmVkX2J1bmRsZV9zaXplKQogICAgICBzYW1wbGVzID0gbnAucmFuZG9tLnppcGYoc2VsZi5faW5pdGlhbF9zcGxpdHRpbmdfZGlzdHJpYnV0aW9uX3BhcmFtZXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2lyZWRfbnVtX2J1bmRsZXMpCiAgICAgIHRvdGFsID0gc3VtKHNhbXBsZXMpCiAgICAgIHJlbGF0aXZlX2J1bmRsZV9zaXplcyA9IFsoZmxvYXQoc2FtcGxlKSAvIHRvdGFsKSBmb3Igc2FtcGxlIGluIHNhbXBsZXNdCiAgICAgIGJ1bmRsZV9yYW5nZXMgPSBbXQogICAgICBzdGFydCA9IHN0YXJ0X3Bvc2l0aW9uCiAgICAgIGluZGV4ID0gMAogICAgICB3aGlsZSBzdGFydCA8IHN0b3BfcG9zaXRpb246CiAgICAgICAgaWYgaW5kZXggPT0gZGVzaXJlZF9udW1fYnVuZGxlcyAtIDE6CiAgICAgICAgICBidW5kbGVfcmFuZ2VzLmFwcGVuZCgoc3RhcnQsIHN0b3BfcG9zaXRpb24pKQogICAgICAgICAgYnJlYWsKICAgICAgICBzdG9wID0gc3RhcnQgKyBpbnQoc2VsZi5fbnVtX3JlY29yZHMgKiByZWxhdGl2ZV9idW5kbGVfc2l6ZXNbaW5kZXhdKQogICAgICAgIGJ1bmRsZV9yYW5nZXMuYXBwZW5kKChzdGFydCwgc3RvcCkpCiAgICAgICAgc3RhcnQgPSBzdG9wCiAgICAgICAgaW5kZXggKz0gMQogICAgZWxzZToKICAgICAgaWYgc2VsZi5faW5pdGlhbF9zcGxpdHRpbmdfbnVtX2J1bmRsZXM6CiAgICAgICAgYnVuZGxlX3NpemVfaW5fZWxlbWVudHMgPSBtYXgoMSwgaW50KAogICAgICAgICAgICBzZWxmLl9udW1fcmVjb3JkcyAvCiAgICAgICAgICAgIHNlbGYuX2luaXRpYWxfc3BsaXR0aW5nX251bV9idW5kbGVzKSkKICAgICAgZWxzZToKICAgICAgICBidW5kbGVfc2l6ZV9pbl9lbGVtZW50cyA9IChtYXgoCiAgICAgICAgICAgIGRpdl9yb3VuZF91cChkZXNpcmVkX2J1bmRsZV9zaXplLCBzZWxmLmVsZW1lbnRfc2l6ZSksCiAgICAgICAgICAgIGludChtYXRoLmZsb29yKG1hdGguc3FydChzZWxmLl9udW1fcmVjb3JkcykpKSkpCiAgICAgIGJ1bmRsZV9yYW5nZXMgPSBbXQogICAgICBmb3Igc3RhcnQgaW4gcmFuZ2Uoc3RhcnRfcG9zaXRpb24sIHN0b3BfcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICBidW5kbGVfc2l6ZV9pbl9lbGVtZW50cyk6CiAgICAgICAgc3RvcCA9IG1pbihzdGFydCArIGJ1bmRsZV9zaXplX2luX2VsZW1lbnRzLCBzdG9wX3Bvc2l0aW9uKQogICAgICAgIGJ1bmRsZV9yYW5nZXMuYXBwZW5kKChzdGFydCwgc3RvcCkpCgogICAgZm9yIHN0YXJ0LCBzdG9wIGluIGJ1bmRsZV9yYW5nZXM6CiAgICAgIHlpZWxkIGlvYmFzZS5Tb3VyY2VCdW5kbGUoc3RvcCAtIHN0YXJ0LCBzZWxmLCBzdGFydCwgc3RvcCkKCiAgZGVmIGdldF9yYW5nZV90cmFja2VyKHNlbGYsIHN0YXJ0X3Bvc2l0aW9uLCBzdG9wX3Bvc2l0aW9uKToKICAgIGlmIHN0YXJ0X3Bvc2l0aW9uIGlzIE5vbmU6CiAgICAgIHN0YXJ0X3Bvc2l0aW9uID0gMAogICAgaWYgc3RvcF9wb3NpdGlvbiBpcyBOb25lOgogICAgICBzdG9wX3Bvc2l0aW9uID0gc2VsZi5fbnVtX3JlY29yZHMKICAgIHRyYWNrZXIgPSByYW5nZV90cmFja2Vycy5PZmZzZXRSYW5nZVRyYWNrZXIoc3RhcnRfcG9zaXRpb24sIHN0b3BfcG9zaXRpb24pCiAgICBpZiBzZWxmLl9keW5hbWljX3NwbGl0dGluZyA9PSAnbm9uZSc6CiAgICAgIHRyYWNrZXIgPSByYW5nZV90cmFja2Vycy5VbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIodHJhY2tlcikKICAgIHJldHVybiB0cmFja2VyCgogIGRlZiByZWFkKHNlbGYsIHJhbmdlX3RyYWNrZXIpOgogICAgaW5kZXggPSByYW5nZV90cmFja2VyLnN0YXJ0X3Bvc2l0aW9uKCkKICAgIHdoaWxlIHJhbmdlX3RyYWNrZXIudHJ5X2NsYWltKGluZGV4KToKICAgICAgciA9IG5wLnJhbmRvbS5SYW5kb21TdGF0ZShpbmRleCkKCiAgICAgIHRpbWUuc2xlZXAoc2VsZi5fc2xlZXBfcGVyX2lucHV0X3JlY29yZF9zZWMpCiAgICAgIHlpZWxkIHIuYnl0ZXMoc2VsZi5fa2V5X3NpemUpLCByLmJ5dGVzKHNlbGYuX3ZhbHVlX3NpemUpCiAgICAgIGluZGV4ICs9IDEKCiAgZGVmIGRlZmF1bHRfb3V0cHV0X2NvZGVyKHNlbGYpOgogICAgcmV0dXJuIGJlYW0uY29kZXJzLlR1cGxlQ29kZXIoCiAgICAgICAgW2JlYW0uY29kZXJzLkJ5dGVzQ29kZXIoKSwgYmVhbS5jb2RlcnMuQnl0ZXNDb2RlcigpXSkKCgpjbGFzcyBTaHVmZmxlQmFycmllcihiZWFtLlBUcmFuc2Zvcm0pOgoKICBkZWYgZXhwYW5kKHNlbGYsIHBjKToKICAgIHJldHVybiAocGMKICAgICAgICAgICAgfCBiZWFtLk1hcChyb3RhdGVfa2V5KQogICAgICAgICAgICB8IGJlYW0uR3JvdXBCeUtleSgpCiAgICAgICAgICAgIHwgJ1VuZ3JvdXAnID4+IGJlYW0uRmxhdE1hcCgKICAgICAgICAgICAgICAgIGxhbWJkYSBlbG06IFsoZWxtWzBdLCB2KSBmb3IgdiBpbiBlbG1bMV1dKSkKCgpjbGFzcyBTaWRlSW5wdXRCYXJyaWVyKGJlYW0uUFRyYW5zZm9ybSk6CgogIGRlZiBleHBhbmQoc2VsZiwgcGMpOgogICAgcmV0dXJuIChwYwogICAgICAgICAgICB8IGJlYW0uTWFwKHJvdGF0ZV9rZXkpCiAgICAgICAgICAgIHwgYmVhbS5NYXAoCiAgICAgICAgICAgICAgICBsYW1iZGEgZWxlbSwgaWdub3JlZDogZWxlbSwKICAgICAgICAgICAgICAgIGJlYW0ucHZhbHVlLkFzSXRlcihwYyB8IGJlYW0uRmxhdE1hcChsYW1iZGEgZWxlbTogTm9uZSkpKSkKCgpkZWYgbWVyZ2VfdXNpbmdfZ2JrKG5hbWUsIHBjMSwgcGMyKToKICAiIiJNZXJnZXMgdHdvIGdpdmVuIFBDb2xsZWN0aW9ucyB1c2luZyBhIENvR3JvdXBCeUtleS4iIiIKCiAgcGMxX3dpdGhfa2V5ID0gcGMxIHwgKG5hbWUgKyAnQXR0YWNoS2V5MScpID4+IGJlYW0uTWFwKGxhbWJkYSB4OiAoeCwgeCkpCiAgcGMyX3dpdGhfa2V5ID0gcGMyIHwgKG5hbWUgKyAnQXR0YWNoS2V5MicpID4+IGJlYW0uTWFwKGxhbWJkYSB4OiAoeCwgeCkpCgogIGdyb3VwZWQgPSAoCiAgICAgIHsncGMxJzogcGMxX3dpdGhfa2V5LCAncGMyJzogcGMyX3dpdGhfa2V5fSB8CiAgICAgIChuYW1lICsgJ0dyb3VwJykgPj4gYmVhbS5Db0dyb3VwQnlLZXkoKSkKICByZXR1cm4gKGdyb3VwZWQgfAogICAgICAgICAgKG5hbWUgKyAnRGVEdXAnKSA+PiBiZWFtLk1hcChsYW1iZGEgZWxtOiBlbG1bMF0pKSAgIyBJZ25vcmluZyB2YWx1ZXMKCgpkZWYgbWVyZ2VfdXNpbmdfc2lkZV9pbnB1dChuYW1lLCBwYzEsIHBjMik6CiAgIiIiTWVyZ2VzIHR3byBnaXZlbiBQQ29sbGVjdGlvbnMgdXNpbmcgc2lkZSBpbnB1dHMuIiIiCgogIGRlZiBqb2luX2ZuKHZhbCwgXyk6ICAjIElnbm9yaW5nIHNpZGUgaW5wdXQKICAgIHJldHVybiB2YWwKCiAgcmV0dXJuIHBjMSB8IG5hbWUgPj4gYmVhbS5jb3JlLk1hcChqb2luX2ZuLCBiZWFtLnB2YWx1ZS5Bc0l0ZXIocGMyKSkKCgpkZWYgZXhwYW5kX3VzaW5nX2diayhuYW1lLCBwYyk6CiAgIiIiRXhwYW5kcyBhIGdpdmVuIFBDb2xsZWN0aW9uIGludG8gdHdvIGNvcGllcyB1c2luZyBHcm91cEJ5S2V5LiIiIgoKICByZXQgPSBbXQogIHJldC5hcHBlbmQoKHBjIHwgKCclcy5hJyAlIG5hbWUpID4+IFNodWZmbGVCYXJyaWVyKCkpKQogIHJldC5hcHBlbmQoKHBjIHwgKCclcy5iJyAlIG5hbWUpID4+IFNodWZmbGVCYXJyaWVyKCkpKQogIHJldHVybiByZXQKCgpkZWYgZXhwYW5kX3VzaW5nX3NlY29uZF9vdXRwdXQobmFtZSwgcGMpOgogICIiIkV4cGFuZHMgYSBnaXZlbiBQQ29sbGVjdGlvbiBpbnRvIHR3byBjb3BpZXMgdXNpbmcgc2lkZSBvdXRwdXRzLiIiIgoKICBjbGFzcyBFeHBhbmRGbihiZWFtLkRvRm4pOgoKICAgIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQpOgogICAgICB5aWVsZCBiZWFtLnB2YWx1ZS5UYWdnZWRPdXRwdXQoJ3NlY29uZF9vdXQnLCBlbGVtZW50KQogICAgICB5aWVsZCBlbGVtZW50CgogIHBjMSwgcGMyID0gKHBjIHwgbmFtZSA+PiBiZWFtLlBhckRvKAogICAgICBFeHBhbmRGbigpKS53aXRoX291dHB1dHMoJ3NlY29uZF9vdXQnLCBtYWluPSdtYWluX291dCcpKQogIHJldHVybiBbcGMxLCBwYzJdCgoKZGVmIF9wYXJzZV9zdGVwcyhqc29uX3N0cik6CiAgIiIiQ29udmVydHMgdGhlIEpTT04gc3RlcCBkZXNjcmlwdGlvbiBpbnRvIFB5dGhvbiBvYmplY3RzLgoKICBTZWUgcHJvcGVydHkgJ3N0ZXBzJyBmb3IgbW9yZSBkZXRhaWxzIGFib3V0IHRoZSBKU09OIHN0ZXAgZGVzY3JpcHRpb24uCgogIEFyZ3M6CiAgICBqc29uX3N0cjogYSBKU09OIHN0cmluZyB0aGF0IGRlc2NyaWJlcyB0aGUgc3RlcHMuCgogIFJldHVybnM6CiAgICBJbmZvcm1hdGlvbiBhYm91dCBzdGVwcyBhcyBhIGxpc3Qgb2YgZGljdGlvbmFyaWVzLiBFYWNoIGRpY3Rpb25hcnkgbWF5IGhhdmUKICAgIGZvbGxvd2luZyBwcm9wZXJ0aWVzLgogICAgKDEpIHBlcl9lbGVtZW50X2RlbGF5IC0gYW1vdW50IG9mIGRlbGF5IGZvciBlYWNoIGVsZW1lbnQgaW4gc2Vjb25kcy4KICAgICgyKSBwZXJfYnVuZGxlX2RlbGF5IC0gbWluaW11bSBhbW91bnQgb2YgZGVsYXkgZm9yIGEgZ2l2ZW4gc3RlcCBpbiBzZWNvbmRzLgogICAgKDMpIG91dHB1dF9yZWNvcmRzX3Blcl9pbnB1dF9yZWNvcmQgLSBudW1iZXIgb2Ygb3V0cHV0IGVsZW1lbnRzIGdlbmVyYXRlZAogICAgICAgIGZvciBlYWNoIGlucHV0IGVsZW1lbnQgdG8gYSBzdGVwLgogICAgKDQpIG91dHB1dF9maWx0ZXJfcmF0aW8gLSB0aGUgcHJvYmFiaWxpdHkgYXQgd2hpY2ggYSBzdGVwIG1heSBmaWx0ZXIgb3V0IGEKICAgICAgICBnaXZlbiBlbGVtZW50IGJ5IG5vdCBwcm9kdWNpbmcgYW55IG91dHB1dCBmb3IgdGhhdCBlbGVtZW50LgogICIiIgogIGFsbF9zdGVwcyA9IFtdCiAganNvbl9kYXRhID0ganNvbi5sb2Fkcyhqc29uX3N0cikKICBmb3IgdmFsIGluIGpzb25fZGF0YToKICAgIHN0ZXBzID0ge30KICAgIHN0ZXBzWydwZXJfZWxlbWVudF9kZWxheSddID0gKAogICAgICAgIChmbG9hdCh2YWxbJ3Blcl9lbGVtZW50X2RlbGF5X21zZWMnXSkgLyAxMDAwKQogICAgICAgIGlmICdwZXJfZWxlbWVudF9kZWxheV9tc2VjJyBpbiB2YWwgZWxzZSAwKQogICAgc3RlcHNbJ3Blcl9idW5kbGVfZGVsYXknXSA9ICgKICAgICAgICBmbG9hdCh2YWxbJ3Blcl9idW5kbGVfZGVsYXlfc2VjJ10pCiAgICAgICAgaWYgJ3Blcl9idW5kbGVfZGVsYXlfc2VjJyBpbiB2YWwgZWxzZSAwKQogICAgc3RlcHNbJ291dHB1dF9yZWNvcmRzX3Blcl9pbnB1dF9yZWNvcmQnXSA9ICgKICAgICAgICBpbnQodmFsWydvdXRwdXRfcmVjb3Jkc19wZXJfaW5wdXRfcmVjb3JkJ10pCiAgICAgICAgaWYgJ291dHB1dF9yZWNvcmRzX3Blcl9pbnB1dF9yZWNvcmQnIGluIHZhbCBlbHNlIDEpCiAgICBzdGVwc1snb3V0cHV0X2ZpbHRlcl9yYXRpbyddID0gKAogICAgICAgIGZsb2F0KHZhbFsnb3V0cHV0X2ZpbHRlcl9yYXRpbyddKQogICAgICAgIGlmICdvdXRwdXRfZmlsdGVyX3JhdGlvJyBpbiB2YWwgZWxzZSAwKQogICAgYWxsX3N0ZXBzLmFwcGVuZChzdGVwcykKCiAgcmV0dXJuIGFsbF9zdGVwcwoKCmRlZiBwYXJzZV9hcmdzKGFyZ3MpOgogICIiIlBhcnNlcyBhIGdpdmVuIHNldCBvZiBhcmd1bWVudHMuCgogIEFyZ3M6CiAgICBhcmdzOiBzZXQgb2YgYXJndW1lbnRzIHRvIGJlIHBhc3NlZC4KCiAgUmV0dXJuczoKICAgIGEgdHVwbGUgd2hlcmUgZmlyc3QgaXRlbSBnaXZlcyB0aGUgc2V0IG9mIGFyZ3VtZW50cyBkZWZpbmVkIGFuZCBwYXJzZWQKICAgIHdpdGhpbiB0aGlzIG1ldGhvZCBhbmQgc2Vjb25kIGl0ZW0gZ2l2ZXMgdGhlIHNldCBvZiB1bmtub3duIGFyZ3VtZW50cy4KICAiIiIKCiAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQogIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICctLXN0ZXBzJywKICAgICAgZGVzdD0nc3RlcHMnLAogICAgICB0eXBlPV9wYXJzZV9zdGVwcywKICAgICAgaGVscD0nQSBKU09OIHN0cmluZyB0aGF0IGdpdmVzIGEgbGlzdCB3aGVyZSBlYWNoIGVudHJ5IG9mIHRoZSBsaXN0IGlzICcKICAgICAgICAgICAnY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgYSBzdGVwLiBDb25maWd1cmF0aW9uIGZvciBlYWNoIHN0ZXAgJwogICAgICAgICAgICdjb25zaXN0cyBvZiAnCiAgICAgICAgICAgJygxKSBBIGZsb2F0ICJwZXJfYnVuZGxlX2RlbGF5X3NlYyIgKGluIHNlY29uZHMpLiBEZWZhdWx0cyB0byAwLicKICAgICAgICAgICAnKDIpIEEgZmxvYXQgInBlcl9lbGVtZW50X2RlbGF5X21zZWMiIChpbiBtaWxsaSBzZWNvbmRzKS4gJwogICAgICAgICAgICcgICAgRGVmYXVsdHMgdG8gMC4nCiAgICAgICAgICAgJygzKSBBbiBpbnRlZ2VyICJvdXRwdXRfcmVjb3Jkc19wZXJfaW5wdXRfcmVjb3JkIi4gRGVmYXVsdHMgdG8gMS4nCiAgICAgICAgICAgJyg0KSBBIGZsb2F0ICJvdXRwdXRfZmlsdGVyX3JhdGlvIiBpbiB0aGUgcmFuZ2UgWzAsIDFdIC4gJwogICAgICAgICAgICcgICAgRGVmYXVsdHMgdG8gMC4nKQoKICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAnLS1pbnB1dCcsCiAgICAgIGRlc3Q9J2lucHV0JywKICAgICAgdHlwZT1qc29uLmxvYWRzLAogICAgICBoZWxwPSdBIEpTT04gc3RyaW5nIHRoYXQgZGVzY3JpYmVzIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBTeW50aGV0aWNTb3VyY2UgJwogICAgICAgICAgICd1c2VkIGJ5IHRoZSBwaXBlbGluZS4gQ29uZmlndXJhdGlvbiBpcyBzaW1pbGFyIHRvIEphdmEgJwogICAgICAgICAgICdTeW50aGV0aWNCb3VuZGVkSW5wdXQuJwogICAgICAgICAgICdDdXJyZW50bHkgc3VwcG9ydHMgZm9sbG93aW5nIHByb3BlcnRpZXMuICcKICAgICAgICAgICAnKDEpIEFuIGludGVnZXIgIm51bVJlY29yZHMiLiAnCiAgICAgICAgICAgJygyKSBBbiBpbnRlZ2VyICJrZXlTaXplIi4gJwogICAgICAgICAgICcoMykgQW4gaW50ZWdlciAidmFsdWVTaXplIi4gJwogICAgICAgICAgICcoNCkgQSB0dXBsZSAiYnVuZGxlU2l6ZURpc3RyaWJ1dGlvbiIgd2l0aCBmb2xsb3dpbmcgdmFsdWVzLiAnCiAgICAgICAgICAgJyAgICBBIHN0cmluZyAidHlwZSIuIEFsbG93ZWQgdmFsdWVzIGFyZSAiY29uc3QiIGFuZCAiemlwZiIuICcKICAgICAgICAgICAnICAgIEFuIGZsb2F0ICJwYXJhbSIuIE9ubHkgdXNlZCBpZiAidHlwZSI9PSJ6aXBmIi4gTXVzdCBiZSAnCiAgICAgICAgICAgJyAgICBsYXJnZXIgdGhhbiAxLiAnCiAgICAgICAgICAgJyg1KSBBbiBpbnRlZ2VyICJmb3JjZU51bUluaXRpYWxCdW5kbGVzIi4gJwogICAgICAgICAgICcoNikgQW4gaW50ZWdlciAic3BsaXRQb2ludEZyZXF1ZW5jeVJlY29yZHMiLiAnCiAgICAgICAgICAgJyg3KSBBIHR1cGxlICJkZWxheURpc3RyaWJ1dGlvbiIgd2l0aCBmb2xsb3dpbmcgdmFsdWVzLiAnCiAgICAgICAgICAgJyAgICBBIHN0cmluZyAidHlwZSIuIE9ubHkgYWxsb3dlZCB2YWx1ZSBpcyAiY29uc3QiLiAnCiAgICAgICAgICAgJyAgICBBbiBpbnRlZ2VyICJjb25zdCIuICcpCgogIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tYmFycmllcicsCiAgICAgICAgICAgICAgICAgICAgICBkZXN0PSdiYXJyaWVyJywKICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9J3NodWZmbGUnLAogICAgICAgICAgICAgICAgICAgICAgY2hvaWNlcz1bJ3NodWZmbGUnLCAnc2lkZS1pbnB1dCcsICdleHBhbmQtZ2JrJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleHBhbmQtc2Vjb25kLW91dHB1dCcsICdtZXJnZS1nYmsnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21lcmdlLXNpZGUtaW5wdXQnXSwKICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1doZXRoZXIgdG8gdXNlIHNodWZmbGUgYXMgdGhlIGJhcnJpZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnKGFzIG9wcG9zZWQgdG8gc2lkZSBpbnB1dHMpLicpCiAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1vdXRwdXQnLAogICAgICAgICAgICAgICAgICAgICAgZGVzdD0nb3V0cHV0JywKICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9JycsCiAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdEZXN0aW5hdGlvbiB0byB3cml0ZSBvdXRwdXQuJykKCiAgcmV0dXJuIHBhcnNlci5wYXJzZV9rbm93bl9hcmdzKGFyZ3MpCgoKZGVmIHJ1bihhcmd2PU5vbmUpOgogICIiIlJ1bnMgdGhlIHdvcmtmbG93LiIiIgogIGtub3duX2FyZ3MsIHBpcGVsaW5lX2FyZ3MgPSBwYXJzZV9hcmdzKGFyZ3YpCgogIHBpcGVsaW5lX29wdGlvbnMgPSBQaXBlbGluZU9wdGlvbnMocGlwZWxpbmVfYXJncykKICBwaXBlbGluZV9vcHRpb25zLnZpZXdfYXMoU2V0dXBPcHRpb25zKS5zYXZlX21haW5fc2Vzc2lvbiA9IFRydWUKCiAgaW5wdXRfaW5mbyA9IGtub3duX2FyZ3MuaW5wdXQKCiAgd2l0aCBUZXN0UGlwZWxpbmUob3B0aW9ucz1waXBlbGluZV9vcHRpb25zKSBhcyBwOgogICAgc291cmNlID0gU3ludGhldGljU291cmNlKGlucHV0X2luZm8pCgogICAgIyBweWxpbnQ6IGRpc2FibGU9ZXhwcmVzc2lvbi1ub3QtYXNzaWduZWQKICAgIGJhcnJpZXIgPSBrbm93bl9hcmdzLmJhcnJpZXIKCiAgICBwY19saXN0ID0gW10KICAgIG51bV9yb290cyA9IDIgKiogKGxlbihrbm93bl9hcmdzLnN0ZXBzKSAtIDEpIGlmICgKICAgICAgICBiYXJyaWVyID09ICdtZXJnZS1nYmsnIG9yIGJhcnJpZXIgPT0gJ21lcmdlLXNpZGUtaW5wdXQnKSBlbHNlIDEKICAgIGZvciByZWFkX25vIGluIHJhbmdlKG51bV9yb290cyk6CiAgICAgIHBjX2xpc3QuYXBwZW5kKChwIHwgKCdSZWFkICVkJyAlIHJlYWRfbm8pID4+IGJlYW0uaW8uUmVhZChzb3VyY2UpKSkKCiAgICBmb3Igc3RlcF9ubywgc3RlcHMgaW4gZW51bWVyYXRlKGtub3duX2FyZ3Muc3RlcHMpOgogICAgICBpZiBzdGVwX25vICE9IDA6CiAgICAgICAgbmV3X3BjX2xpc3QgPSBbXQogICAgICAgIGZvciBwY19ubywgcGMgaW4gZW51bWVyYXRlKHBjX2xpc3QpOgogICAgICAgICAgaWYgYmFycmllciA9PSAnc2h1ZmZsZSc6CiAgICAgICAgICAgIG5ld19wY19saXN0LmFwcGVuZCgKICAgICAgICAgICAgICAgIChwYyB8CiAgICAgICAgICAgICAgICAgKCdzaHVmZmxlICVkLiVkJyAlIChzdGVwX25vLCBwY19ubykpID4+IFNodWZmbGVCYXJyaWVyKCkpKQogICAgICAgICAgZWxpZiBiYXJyaWVyID09ICdzaWRlLWlucHV0JzoKICAgICAgICAgICAgbmV3X3BjX2xpc3QuYXBwZW5kKAogICAgICAgICAgICAgICAgKHBjIHwKICAgICAgICAgICAgICAgICAoJ3NpZGUtaW5wdXQgJWQuJWQnICUgKHN0ZXBfbm8sIHBjX25vKSkgPj4gU2lkZUlucHV0QmFycmllcigpKSkKICAgICAgICAgIGVsaWYgYmFycmllciA9PSAnZXhwYW5kLWdiayc6CiAgICAgICAgICAgIG5ld19wY19saXN0LmV4dGVuZCgKICAgICAgICAgICAgICAgIGV4cGFuZF91c2luZ19nYmsoKCdleHBhbmQtZ2JrICVkLiVkJyAlIChzdGVwX25vLCBwY19ubykpLCBwYykpCiAgICAgICAgICBlbGlmIGJhcnJpZXIgPT0gJ2V4cGFuZC1zZWNvbmQtb3V0cHV0JzoKICAgICAgICAgICAgbmV3X3BjX2xpc3QuZXh0ZW5kKAogICAgICAgICAgICAgICAgZXhwYW5kX3VzaW5nX3NlY29uZF9vdXRwdXQoCiAgICAgICAgICAgICAgICAgICAgKCdleHBhbmQtc2Vjb25kLW91dHB1dCAlZC4lZCcgJSAoc3RlcF9ubywgcGNfbm8pKSwgcGMpKQogICAgICAgICAgZWxpZiBiYXJyaWVyID09ICdtZXJnZS1nYmsnOgogICAgICAgICAgICBpZiBwY19ubyAlIDIgPT0gMDoKICAgICAgICAgICAgICBuZXdfcGNfbGlzdC5hcHBlbmQoCiAgICAgICAgICAgICAgICAgIG1lcmdlX3VzaW5nX2diaygoJ21lcmdlLWdiayAlZC4lZCcgJSAoc3RlcF9ubywgcGNfbm8pKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjLCBwY19saXN0W3BjX25vICsgMV0pKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICBlbGlmIGJhcnJpZXIgPT0gJ21lcmdlLXNpZGUtaW5wdXQnOgogICAgICAgICAgICBpZiBwY19ubyAlIDIgPT0gMDoKICAgICAgICAgICAgICBuZXdfcGNfbGlzdC5hcHBlbmQoCiAgICAgICAgICAgICAgICAgIG1lcmdlX3VzaW5nX3NpZGVfaW5wdXQoCiAgICAgICAgICAgICAgICAgICAgICAoJ21lcmdlLXNpZGUtaW5wdXQgJWQuJWQnICUgKHN0ZXBfbm8sIHBjX25vKSksCiAgICAgICAgICAgICAgICAgICAgICBwYywgcGNfbGlzdFtwY19ubyArIDFdKSkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICBjb250aW51ZQoKICAgICAgICBwY19saXN0ID0gbmV3X3BjX2xpc3QKCiAgICAgIG5ld19wY19saXN0ID0gW10KICAgICAgZm9yIHBjX25vLCBwYyBpbiBlbnVtZXJhdGUocGNfbGlzdCk6CiAgICAgICAgbmV3X3BjID0gcGMgfCAnU3ludGhldGljU3RlcCAlZC4lZCcgJSAoc3RlcF9ubywgcGNfbm8pID4+IGJlYW0uUGFyRG8oCiAgICAgICAgICAgIFN5bnRoZXRpY1N0ZXAoCiAgICAgICAgICAgICAgICBwZXJfZWxlbWVudF9kZWxheV9zZWM9c3RlcHNbJ3Blcl9lbGVtZW50X2RlbGF5J10sCiAgICAgICAgICAgICAgICBwZXJfYnVuZGxlX2RlbGF5X3NlYz1zdGVwc1sncGVyX2J1bmRsZV9kZWxheSddLAogICAgICAgICAgICAgICAgb3V0cHV0X3JlY29yZHNfcGVyX2lucHV0X3JlY29yZD0KICAgICAgICAgICAgICAgIHN0ZXBzWydvdXRwdXRfcmVjb3Jkc19wZXJfaW5wdXRfcmVjb3JkJ10sCiAgICAgICAgICAgICAgICBvdXRwdXRfZmlsdGVyX3JhdGlvPQogICAgICAgICAgICAgICAgc3RlcHNbJ291dHB1dF9maWx0ZXJfcmF0aW8nXSkpCiAgICAgICAgbmV3X3BjX2xpc3QuYXBwZW5kKG5ld19wYykKICAgICAgcGNfbGlzdCA9IG5ld19wY19saXN0CgogICAgaWYga25vd25fYXJncy5vdXRwdXQ6CiAgICAgICMgSWYgYW4gb3V0cHV0IGxvY2F0aW9uIGlzIHByb3ZpZGVkIHdlIGZvcm1hdCBhbmQgd3JpdGUgb3V0cHV0LgogICAgICBpZiBsZW4ocGNfbGlzdCkgPT0gMToKICAgICAgICAocGNfbGlzdFswXSB8CiAgICAgICAgICdGb3JtYXRPdXRwdXQnID4+IGJlYW0uTWFwKGxhbWJkYSBlbG06IChlbG1bMF0gKyBlbG1bMV0pKSB8CiAgICAgICAgICdXcml0ZU91dHB1dCcgPj4gV3JpdGVUb1RleHQoa25vd25fYXJncy5vdXRwdXQpKQoKICBsb2dnaW5nLmluZm8oJ1BpcGVsaW5lIHJ1biBjb21wbGV0ZWQuJykKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogIGxvZ2dpbmcuZ2V0TG9nZ2VyKCkuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQogIHJ1bigpCn1yBIQAAChYLgAAAFN5bnRoZXRpY1NvdXJjZS5fX2luaXRfXy5tYXliZV9wYXJzZV9ieXRlX3NpemVYAwAAAGRlZkuDS4WHWBAAAABTaWRlSW5wdXRCYXJyaWVyWAUAAABjbGFzc00HAU0PAYdYHAAAAFN5bnRoZXRpY1NvdXJjZS5lbGVtZW50X3NpemVYAwAAAGRlZkuyS7WHWBQAAABTeW50aGV0aWNTb3VyY2UucmVhZFgDAAAAZGVmS+9L94dYGgAAAFN5bnRoZXRpY1N0ZXAuc3RhcnRfYnVuZGxlWAMAAABkZWZLW0tdh1gPAAAAcGFyc2VfYnl0ZV9zaXplWAMAAABkZWZLOktAh1gYAAAAU3ludGhldGljU291cmNlLl9faW5pdF9fWAMAAABkZWZLeUuxh1gQAAAAZXhwYW5kX3VzaW5nX2dia1gDAAAAZGVmTScBTS4Bh1gNAAAAU3ludGhldGljU3RlcFgFAAAAY2xhc3NLTUtzh1gKAAAAcGFyc2VfYXJnc1gDAAAAZGVmTWUBTaIBh1gPAAAAbWVyZ2VfdXNpbmdfZ2JrWAMAAABkZWZNEQFNHAGHWB4AAABtZXJnZV91c2luZ19zaWRlX2lucHV0LmpvaW5fZm5YAwAAAGRlZk0hAU0jAYdYDAAAAGRpdl9yb3VuZF91cFgDAAAAZGVmS0JLRYdYFQAAAFNodWZmbGVCYXJyaWVyLmV4cGFuZFgDAAAAZGVmS/9NBQGHWA8AAABTeW50aGV0aWNTb3VyY2VYBQAAAGNsYXNzS3VL+4dYFQAAAFN5bnRoZXRpY1N0ZXAucHJvY2Vzc1gDAAAAZGVmS2hLc4dYAwAAAHJ1blgDAAAAZGVmTaQBTfMBh1gWAAAAU3ludGhldGljU3RlcC5fX2luaXRfX1gDAAAAZGVmS1FLWodYDgAAAFNodWZmbGVCYXJyaWVyWAUAAABjbGFzc0v9TQUBh1gkAAAAU3ludGhldGljU291cmNlLmRlZmF1bHRfb3V0cHV0X2NvZGVyWAMAAABkZWZL+Ev7h1grAAAAZXhwYW5kX3VzaW5nX3NlY29uZF9vdXRwdXQuRXhwYW5kRm4ucHJvY2Vzc1gDAAAAZGVmTTUBTTgBh1gaAAAAZXhwYW5kX3VzaW5nX3NlY29uZF9vdXRwdXRYAwAAAGRlZk0wAU08AYdYIQAAAFN5bnRoZXRpY1NvdXJjZS5nZXRfcmFuZ2VfdHJhY2tlclgDAAAAZGVmS+VL7odYFgAAAG1lcmdlX3VzaW5nX3NpZGVfaW5wdXRYAwAAAGRlZk0eAU0lAYdYFQAAAFN5bnRoZXRpY1NvdXJjZS5zcGxpdFgDAAAAZGVmS7lL5IdYCgAAAHJvdGF0ZV9rZXlYAwAAAGRlZktHS0uHWAwAAABfcGFyc2Vfc3RlcHNYAwAAAGRlZk0+AU1jAYdYHQAAAFN5bnRoZXRpY1NvdXJjZS5lc3RpbWF0ZV9zaXplWAMAAABkZWZLtku4h1gbAAAAU3ludGhldGljU3RlcC5maW5pc2hfYnVuZGxlWAMAAABkZWZLXktnh1gXAAAAU2lkZUlucHV0QmFycmllci5leHBhbmRYAwAAAGRlZk0JAU0PAYdYIwAAAGV4cGFuZF91c2luZ19zZWNvbmRfb3V0cHV0LkV4cGFuZEZuWAUAAABjbGFzc00zAU04AYd1fXIFhAAAKFgQAAAAU2lkZUlucHV0QmFycmllcmrLXwAAWBQAAABTeW50aGV0aWNTb3VyY2UucmVhZGrLXwAAWBoAAABTeW50aGV0aWNTdGVwLnN0YXJ0X2J1bmRsZWrLXwAAWA8AAABwYXJzZV9ieXRlX3NpemVqy18AAFgQAAAAZXhwYW5kX3VzaW5nX2dia2rLXwAAWA0AAABTeW50aGV0aWNTdGVwastfAABYCgAAAHBhcnNlX2FyZ3Nqy18AAFgPAAAAbWVyZ2VfdXNpbmdfZ2JrastfAABYDAAAAGRpdl9yb3VuZF91cGrLXwAAWBUAAABTaHVmZmxlQmFycmllci5leHBhbmRqy18AAFgPAAAAU3ludGhldGljU291cmNlastfAABYFQAAAFN5bnRoZXRpY1N0ZXAucHJvY2Vzc2rLXwAAWAMAAABydW5qy18AAFgOAAAAU2h1ZmZsZUJhcnJpZXJqy18AAFgkAAAAU3ludGhldGljU291cmNlLmRlZmF1bHRfb3V0cHV0X2NvZGVyastfAABYGgAAAGV4cGFuZF91c2luZ19zZWNvbmRfb3V0cHV0astfAABYIQAAAFN5bnRoZXRpY1NvdXJjZS5nZXRfcmFuZ2VfdHJhY2tlcmrLXwAAWBYAAABtZXJnZV91c2luZ19zaWRlX2lucHV0astfAABYFQAAAFN5bnRoZXRpY1NvdXJjZS5zcGxpdGrLXwAAWAoAAAByb3RhdGVfa2V5astfAABYHQAAAFN5bnRoZXRpY1NvdXJjZS5lc3RpbWF0ZV9zaXplastfAABYGwAAAFN5bnRoZXRpY1N0ZXAuZmluaXNoX2J1bmRsZWrLXwAAWBcAAABTaWRlSW5wdXRCYXJyaWVyLmV4cGFuZGrLXwAAdWp9aQAAWCYAAABhcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZXIGhAAAhYFyB4QAAH1yCIQAAGJ0VTdhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9wcm92aXNpb25fYXBpX3BiMl9ncnBjKFgWCAAAZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKIyBHZW5lcmF0ZWQgYnkgdGhlIGdSUEMgUHl0aG9uIHByb3RvY29sIGNvbXBpbGVyIHBsdWdpbi4gRE8gTk9UIEVESVQhCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdAppbXBvcnQgZ3JwYwoKZnJvbSAuIGltcG9ydCBiZWFtX3Byb3Zpc2lvbl9hcGlfcGIyIGFzIGJlYW1fX3Byb3Zpc2lvbl9fYXBpX19wYjIKCgpjbGFzcyBQcm92aXNpb25TZXJ2aWNlU3R1YihvYmplY3QpOgogICIiIkEgc2VydmljZSB0byBwcm92aWRlIHJ1bnRpbWUgcHJvdmlzaW9uaW5nIGluZm9ybWF0aW9uIHRvIHRoZSBTREsgaGFybmVzcwogIHdvcmtlciBpbnN0YW5jZXMgLS0gc3VjaCBhcyBwaXBlbGluZSBvcHRpb25zLCByZXNvdXJjZSBjb25zdHJhaW50cyBhbmQKICBvdGhlciBqb2IgbWV0YWRhdGEgLS0gbmVlZGVkIGJ5IGFuIFNESyBoYXJuZXNzIGluc3RhbmNlIHRvIGluaXRpYWxpemUuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBjaGFubmVsKToKICAgICIiIkNvbnN0cnVjdG9yLgoKICAgIEFyZ3M6CiAgICAgIGNoYW5uZWw6IEEgZ3JwYy5DaGFubmVsLgogICAgIiIiCiAgICBzZWxmLkdldFByb3Zpc2lvbkluZm8gPSBjaGFubmVsLnVuYXJ5X3VuYXJ5KAogICAgICAgICcvb3JnLmFwYWNoZS5iZWFtLm1vZGVsLmZuX2V4ZWN1dGlvbi52MS5Qcm92aXNpb25TZXJ2aWNlL0dldFByb3Zpc2lvbkluZm8nLAogICAgICAgIHJlcXVlc3Rfc2VyaWFsaXplcj1iZWFtX19wcm92aXNpb25fX2FwaV9fcGIyLkdldFByb3Zpc2lvbkluZm9SZXF1ZXN0LlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICAgIHJlc3BvbnNlX2Rlc2VyaWFsaXplcj1iZWFtX19wcm92aXNpb25fX2FwaV9fcGIyLkdldFByb3Zpc2lvbkluZm9SZXNwb25zZS5Gcm9tU3RyaW5nLAogICAgICAgICkKCgpjbGFzcyBQcm92aXNpb25TZXJ2aWNlU2VydmljZXIob2JqZWN0KToKICAiIiJBIHNlcnZpY2UgdG8gcHJvdmlkZSBydW50aW1lIHByb3Zpc2lvbmluZyBpbmZvcm1hdGlvbiB0byB0aGUgU0RLIGhhcm5lc3MKICB3b3JrZXIgaW5zdGFuY2VzIC0tIHN1Y2ggYXMgcGlwZWxpbmUgb3B0aW9ucywgcmVzb3VyY2UgY29uc3RyYWludHMgYW5kCiAgb3RoZXIgam9iIG1ldGFkYXRhIC0tIG5lZWRlZCBieSBhbiBTREsgaGFybmVzcyBpbnN0YW5jZSB0byBpbml0aWFsaXplLgogICIiIgoKICBkZWYgR2V0UHJvdmlzaW9uSW5mbyhzZWxmLCByZXF1ZXN0LCBjb250ZXh0KToKICAgICIiIkdldCBwcm92aXNpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBTREsgaGFybmVzcyB3b3JrZXIgaW5zdGFuY2UuCiAgICAiIiIKICAgIGNvbnRleHQuc2V0X2NvZGUoZ3JwYy5TdGF0dXNDb2RlLlVOSU1QTEVNRU5URUQpCiAgICBjb250ZXh0LnNldF9kZXRhaWxzKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCgoKZGVmIGFkZF9Qcm92aXNpb25TZXJ2aWNlU2VydmljZXJfdG9fc2VydmVyKHNlcnZpY2VyLCBzZXJ2ZXIpOgogIHJwY19tZXRob2RfaGFuZGxlcnMgPSB7CiAgICAgICdHZXRQcm92aXNpb25JbmZvJzogZ3JwYy51bmFyeV91bmFyeV9ycGNfbWV0aG9kX2hhbmRsZXIoCiAgICAgICAgICBzZXJ2aWNlci5HZXRQcm92aXNpb25JbmZvLAogICAgICAgICAgcmVxdWVzdF9kZXNlcmlhbGl6ZXI9YmVhbV9fcHJvdmlzaW9uX19hcGlfX3BiMi5HZXRQcm92aXNpb25JbmZvUmVxdWVzdC5Gcm9tU3RyaW5nLAogICAgICAgICAgcmVzcG9uc2Vfc2VyaWFsaXplcj1iZWFtX19wcm92aXNpb25fX2FwaV9fcGIyLkdldFByb3Zpc2lvbkluZm9SZXNwb25zZS5TZXJpYWxpemVUb1N0cmluZywKICAgICAgKSwKICB9CiAgZ2VuZXJpY19oYW5kbGVyID0gZ3JwYy5tZXRob2RfaGFuZGxlcnNfZ2VuZXJpY19oYW5kbGVyKAogICAgICAnb3JnLmFwYWNoZS5iZWFtLm1vZGVsLmZuX2V4ZWN1dGlvbi52MS5Qcm92aXNpb25TZXJ2aWNlJywgcnBjX21ldGhvZF9oYW5kbGVycykKICBzZXJ2ZXIuYWRkX2dlbmVyaWNfcnBjX2hhbmRsZXJzKChnZW5lcmljX2hhbmRsZXIsKSkKfXIJhAAAKFgdAAAAUHJvdmlzaW9uU2VydmljZVN0dWIuX19pbml0X19YAwAAAGRlZksPSxqHWBQAAABQcm92aXNpb25TZXJ2aWNlU3R1YlgFAAAAY2xhc3NLCUsah1gYAAAAUHJvdmlzaW9uU2VydmljZVNlcnZpY2VyWAUAAABjbGFzc0scSyiHWCkAAABQcm92aXNpb25TZXJ2aWNlU2VydmljZXIuR2V0UHJvdmlzaW9uSW5mb1gDAAAAZGVmSyJLKIdYJgAAAGFkZF9Qcm92aXNpb25TZXJ2aWNlU2VydmljZXJfdG9fc2VydmVyWAMAAABkZWZLKks1h3V9cgqEAAAoWCkAAABQcm92aXNpb25TZXJ2aWNlU2VydmljZXIuR2V0UHJvdmlzaW9uSW5mb1g3AAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcHJvdmlzaW9uX2FwaV9wYjJfZ3JwY3ILhAAAWBQAAABQcm92aXNpb25TZXJ2aWNlU3R1YmoLhAAAWBgAAABQcm92aXNpb25TZXJ2aWNlU2VydmljZXJqC4QAAFgmAAAAYWRkX1Byb3Zpc2lvblNlcnZpY2VTZXJ2aWNlcl90b19zZXJ2ZXJqC4QAAHVqfWkAAFg3AAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcHJvdmlzaW9uX2FwaV9wYjJfZ3JwY3IMhAAAhYFyDYQAAH1yDoQAAGJ0cg+EAABVMWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cudGVzdF9kYXRhZmxvd19ydW5uZXIoWJsPAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIldyYXBwZXIgb2YgQmVhbSBydW5uZXJzIHRoYXQncyBidWlsdCBmb3IgcnVubmluZyBhbmQgdmVyaWZ5aW5nIGUyZSB0ZXN0cy4iIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CmZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KCmltcG9ydCBsb2dnaW5nCmltcG9ydCB0aW1lCgpmcm9tIGFwYWNoZV9iZWFtLmludGVybmFsIGltcG9ydCBwaWNrbGVyCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBHb29nbGVDbG91ZE9wdGlvbnMKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IFN0YW5kYXJkT3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgVGVzdE9wdGlvbnMKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lciBpbXBvcnQgRGF0YWZsb3dSdW5uZXIKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lciBpbXBvcnQgUGlwZWxpbmVTdGF0ZQoKX19hbGxfXyA9IFsnVGVzdERhdGFmbG93UnVubmVyJ10KCiMgRGF0YWZsb3cgdGFrZSB1cCB0byAxMG1pbnMgZm9yIHRoZSBsb25nIHRhaWwgb2Ygc3RhcnRpbmcvc3RvcHBpbmcgd29ya2VyCiMgcG9vbC4KV0FJVF9JTl9TVEFURV9USU1FT1VUID0gMTAgKiA2MAoKCmNsYXNzIFRlc3REYXRhZmxvd1J1bm5lcihEYXRhZmxvd1J1bm5lcik6CiAgZGVmIHJ1bl9waXBlbGluZShzZWxmLCBwaXBlbGluZSwgb3B0aW9ucyk6CiAgICAiIiJFeGVjdXRlIHRlc3QgcGlwZWxpbmUgYW5kIHZlcmlmeSB0ZXN0IG1hdGNoZXIiIiIKICAgIHRlc3Rfb3B0aW9ucyA9IG9wdGlvbnMudmlld19hcyhUZXN0T3B0aW9ucykKICAgIG9uX3N1Y2Nlc3NfbWF0Y2hlciA9IHRlc3Rfb3B0aW9ucy5vbl9zdWNjZXNzX21hdGNoZXIKICAgIHdhaXRfZHVyYXRpb24gPSB0ZXN0X29wdGlvbnMud2FpdF91bnRpbF9maW5pc2hfZHVyYXRpb24KICAgIGlzX3N0cmVhbWluZyA9IG9wdGlvbnMudmlld19hcyhTdGFuZGFyZE9wdGlvbnMpLnN0cmVhbWluZwoKICAgICMgW0JFQU0tMTg4OV0gRG8gbm90IHNlbmQgdGhpcyB0byByZW1vdGUgd29ya2VycyBhbHNvLCB0aGVyZSBpcyBubyBuZWVkIHRvCiAgICAjIHNlbmQgdGhpcyBvcHRpb24gdG8gcmVtb3RlIGV4ZWN1dG9ycy4KICAgIHRlc3Rfb3B0aW9ucy5vbl9zdWNjZXNzX21hdGNoZXIgPSBOb25lCgogICAgc2VsZi5yZXN1bHQgPSBzdXBlcihUZXN0RGF0YWZsb3dSdW5uZXIsIHNlbGYpLnJ1bl9waXBlbGluZSgKICAgICAgICBwaXBlbGluZSwgb3B0aW9ucykKICAgIGlmIHNlbGYucmVzdWx0Lmhhc19qb2I6CiAgICAgICMgVE9ETyhtYXJrZmx5aGlnaCkoQkVBTS0xODkwKTogVXNlIHByaW50IHNpbmNlIE5vc2UgZG9zZW4ndCBzaG93IGxvZ3MKICAgICAgIyBpbiBzb21lIGNhc2VzLgogICAgICBwcmludCgnRm91bmQ6ICVzLicgJSBzZWxmLmJ1aWxkX2NvbnNvbGVfdXJsKG9wdGlvbnMpKQoKICAgIHRyeToKICAgICAgc2VsZi53YWl0X3VudGlsX2luX3N0YXRlKFBpcGVsaW5lU3RhdGUuUlVOTklORykKCiAgICAgIGlmIGlzX3N0cmVhbWluZyBhbmQgbm90IHdhaXRfZHVyYXRpb246CiAgICAgICAgbG9nZ2luZy53YXJuaW5nKCdXYWl0aW5nIGluZGVmaW5pdGVseSBmb3Igc3RyZWFtaW5nIGpvYi4nKQogICAgICBzZWxmLnJlc3VsdC53YWl0X3VudGlsX2ZpbmlzaChkdXJhdGlvbj13YWl0X2R1cmF0aW9uKQoKICAgICAgaWYgb25fc3VjY2Vzc19tYXRjaGVyOgogICAgICAgIGZyb20gaGFtY3Jlc3QgaW1wb3J0IGFzc2VydF90aGF0IGFzIGhjX2Fzc2VydF90aGF0CiAgICAgICAgaGNfYXNzZXJ0X3RoYXQoc2VsZi5yZXN1bHQsIHBpY2tsZXIubG9hZHMob25fc3VjY2Vzc19tYXRjaGVyKSkKICAgIGZpbmFsbHk6CiAgICAgIGlmIG5vdCBzZWxmLnJlc3VsdC5pc19pbl90ZXJtaW5hbF9zdGF0ZSgpOgogICAgICAgIHNlbGYucmVzdWx0LmNhbmNlbCgpCiAgICAgICAgc2VsZi53YWl0X3VudGlsX2luX3N0YXRlKFBpcGVsaW5lU3RhdGUuQ0FOQ0VMTEVEKQoKICAgIHJldHVybiBzZWxmLnJlc3VsdAoKICBkZWYgYnVpbGRfY29uc29sZV91cmwoc2VsZiwgb3B0aW9ucyk6CiAgICAiIiJCdWlsZCBhIGNvbnNvbGUgdXJsIG9mIERhdGFmbG93IGpvYi4iIiIKICAgIHByb2plY3QgPSBvcHRpb25zLnZpZXdfYXMoR29vZ2xlQ2xvdWRPcHRpb25zKS5wcm9qZWN0CiAgICByZWdpb25faWQgPSBvcHRpb25zLnZpZXdfYXMoR29vZ2xlQ2xvdWRPcHRpb25zKS5yZWdpb24KICAgIGpvYl9pZCA9IHNlbGYucmVzdWx0LmpvYl9pZCgpCiAgICByZXR1cm4gKAogICAgICAgICdodHRwczovL2NvbnNvbGUuY2xvdWQuZ29vZ2xlLmNvbS9kYXRhZmxvdy9qb2JzRGV0YWlsL2xvY2F0aW9ucycKICAgICAgICAnLyVzL2pvYnMvJXM/cHJvamVjdD0lcycgJSAocmVnaW9uX2lkLCBqb2JfaWQsIHByb2plY3QpKQoKICBkZWYgd2FpdF91bnRpbF9pbl9zdGF0ZShzZWxmLCBleHBlY3RlZF9zdGF0ZSwgdGltZW91dD1XQUlUX0lOX1NUQVRFX1RJTUVPVVQpOgogICAgIiIiV2FpdCB1bnRpbCBEYXRhZmxvdyBwaXBlbGluZSBlbnRlcnMgYSBjZXJ0YWluIHN0YXRlLiIiIgogICAgaWYgbm90IHNlbGYucmVzdWx0Lmhhc19qb2I6CiAgICAgIHJhaXNlIElPRXJyb3IoJ0ZhaWxlZCB0byBnZXQgdGhlIERhdGFmbG93IGpvYiBpZC4nKQoKICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQogICAgd2hpbGUgdGltZS50aW1lKCkgLSBzdGFydF90aW1lIDw9IHRpbWVvdXQ6CiAgICAgIGpvYl9zdGF0ZSA9IHNlbGYucmVzdWx0LnN0YXRlCiAgICAgIGlmIHNlbGYucmVzdWx0LmlzX2luX3Rlcm1pbmFsX3N0YXRlKCkgb3Igam9iX3N0YXRlID09IGV4cGVjdGVkX3N0YXRlOgogICAgICAgIHJldHVybiBqb2Jfc3RhdGUKICAgICAgdGltZS5zbGVlcCg1KQoKICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignVGltZW91dCBhZnRlciAlZCBzZWNvbmRzIHdoaWxlIHdhaXRpbmcgZm9yIGpvYiAlcyAnCiAgICAgICAgICAgICAgICAgICAgICAgJ2VudGVycyBleHBlY3RlZCBzdGF0ZSAlcy4gQ3VycmVudCBzdGF0ZSBpcyAlcy4nICUKICAgICAgICAgICAgICAgICAgICAgICAodGltZW91dCwgc2VsZi5yZXN1bHQuam9iX2lkKCksCiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX3N0YXRlLCBzZWxmLnJlc3VsdC5zdGF0ZSkpCn1yEIQAAChYJAAAAFRlc3REYXRhZmxvd1J1bm5lci5idWlsZF9jb25zb2xlX3VybFgDAAAAZGVmS0xLVIdYHwAAAFRlc3REYXRhZmxvd1J1bm5lci5ydW5fcGlwZWxpbmVYAwAAAGRlZkspS0uHWCYAAABUZXN0RGF0YWZsb3dSdW5uZXIud2FpdF91bnRpbF9pbl9zdGF0ZVgDAAAAZGVmS1VLZYdYEgAAAFRlc3REYXRhZmxvd1J1bm5lclgFAAAAY2xhc3NLKEtlh3V9chGEAAAoWCQAAABUZXN0RGF0YWZsb3dSdW5uZXIuYnVpbGRfY29uc29sZV91cmxYMQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cudGVzdF9kYXRhZmxvd19ydW5uZXJyEoQAAFgfAAAAVGVzdERhdGFmbG93UnVubmVyLnJ1bl9waXBlbGluZWoShAAAWBIAAABUZXN0RGF0YWZsb3dSdW5uZXJqEoQAAFgmAAAAVGVzdERhdGFmbG93UnVubmVyLndhaXRfdW50aWxfaW5fc3RhdGVqEoQAAHVqfWkAAFgxAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy50ZXN0X2RhdGFmbG93X3J1bm5lcnIThAAAhYFyFIQAAH1yFYQAAGJ0chaEAABVI2FwYWNoZV9iZWFtLmlvLnJlc3RyaWN0aW9uX3RyYWNrZXJzKFhQEwAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJgaW9iYXNlLlJlc3RyaWN0aW9uVHJhY2tlcmAgaW1wbGVtZW50YXRpb25zIHByb3ZpZGVkIHdpdGggQXBhY2hlIEJlYW0uIiIiCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CmZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KCmltcG9ydCB0aHJlYWRpbmcKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0Cgpmcm9tIGFwYWNoZV9iZWFtLmlvLmlvYmFzZSBpbXBvcnQgUmVzdHJpY3Rpb25UcmFja2VyCmZyb20gYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMgaW1wb3J0IE9mZnNldFJhbmdlVHJhY2tlcgoKCmNsYXNzIE9mZnNldFJhbmdlKG9iamVjdCk6CgogIGRlZiBfX2luaXRfXyhzZWxmLCBzdGFydCwgc3RvcCk6CiAgICBpZiBzdGFydCA+IHN0b3A6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnU3RhcnQgb2Zmc2V0IG11c3QgYmUgbm90IGJlIGxhcmdlciB0aGFuIHRoZSBzdG9wIG9mZnNldC4gJwogICAgICAgICAgJ1JlY2VpdmVkICVkIGFuZCAlZCByZXNwZWN0aXZlbHkuJyAlIChzdGFydCwgc3RvcCkpCiAgICBzZWxmLnN0YXJ0ID0gc3RhcnQKICAgIHNlbGYuc3RvcCA9IHN0b3AKCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgT2Zmc2V0UmFuZ2UpOgogICAgICByZXR1cm4gRmFsc2UKCiAgICByZXR1cm4gc2VsZi5zdGFydCA9PSBvdGhlci5zdGFydCBhbmQgc2VsZi5zdG9wID09IG90aGVyLnN0b3AKCiAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CiAgICAjIFRPRE8oQkVBTS01OTQ5KTogTmVlZGVkIGZvciBQeXRob24gMiBjb21wYXRpYmlsaXR5LgogICAgcmV0dXJuIG5vdCBzZWxmID09IG90aGVyCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKCh0eXBlKHNlbGYpLCBzZWxmLnN0YXJ0LCBzZWxmLnN0b3ApKQoKICBkZWYgc3BsaXQoc2VsZiwgZGVzaXJlZF9udW1fb2Zmc2V0c19wZXJfc3BsaXQsIG1pbl9udW1fb2Zmc2V0c19wZXJfc3BsaXQ9MSk6CiAgICBjdXJyZW50X3NwbGl0X3N0YXJ0ID0gc2VsZi5zdGFydAogICAgbWF4X3NwbGl0X3NpemUgPSBtYXgoZGVzaXJlZF9udW1fb2Zmc2V0c19wZXJfc3BsaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICBtaW5fbnVtX29mZnNldHNfcGVyX3NwbGl0KQogICAgd2hpbGUgY3VycmVudF9zcGxpdF9zdGFydCA8IHNlbGYuc3RvcDoKICAgICAgY3VycmVudF9zcGxpdF9zdG9wID0gbWluKGN1cnJlbnRfc3BsaXRfc3RhcnQgKyBtYXhfc3BsaXRfc2l6ZSwgc2VsZi5zdG9wKQogICAgICByZW1haW5pbmcgPSBzZWxmLnN0b3AgLSBjdXJyZW50X3NwbGl0X3N0b3AKCiAgICAgICMgQXZvaWRpbmcgYSBzbWFsbCBzcGxpdCBhdCB0aGUgZW5kLgogICAgICBpZiAocmVtYWluaW5nIDwgZGVzaXJlZF9udW1fb2Zmc2V0c19wZXJfc3BsaXQgLy8gNCBvcgogICAgICAgICAgcmVtYWluaW5nIDwgbWluX251bV9vZmZzZXRzX3Blcl9zcGxpdCk6CiAgICAgICAgY3VycmVudF9zcGxpdF9zdG9wID0gc2VsZi5zdG9wCgogICAgICB5aWVsZCBPZmZzZXRSYW5nZShjdXJyZW50X3NwbGl0X3N0YXJ0LCBjdXJyZW50X3NwbGl0X3N0b3ApCiAgICAgIGN1cnJlbnRfc3BsaXRfc3RhcnQgPSBjdXJyZW50X3NwbGl0X3N0b3AKCiAgZGVmIG5ld190cmFja2VyKHNlbGYpOgogICAgcmV0dXJuIE9mZnNldFJhbmdlVHJhY2tlcihzZWxmLnN0YXJ0LCBzZWxmLnN0b3ApCgoKY2xhc3MgT2Zmc2V0UmVzdHJpY3Rpb25UcmFja2VyKFJlc3RyaWN0aW9uVHJhY2tlcik6CiAgIiIiQW4gYGlvYmFzZS5SZXN0cmljdGlvblRyYWNrZXJgIGltcGxlbWVudGF0aW9ucyBmb3IgYW4gb2Zmc2V0IHJhbmdlLgoKICBPZmZzZXQgcmFuZ2UgaXMgcmVwcmVzZW50ZWQgYXMgYSBwYWlyIG9mIGludGVnZXJzCiAgW3N0YXJ0X3Bvc2l0aW9uLCBzdG9wX3Bvc2l0aW9ufS4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YXJ0X3Bvc2l0aW9uLCBzdG9wX3Bvc2l0aW9uKToKICAgIHNlbGYuX3JhbmdlID0gT2Zmc2V0UmFuZ2Uoc3RhcnRfcG9zaXRpb24sIHN0b3BfcG9zaXRpb24pCiAgICBzZWxmLl9jdXJyZW50X3Bvc2l0aW9uID0gTm9uZQogICAgc2VsZi5fbGFzdF9jbGFpbV9hdHRlbXB0ID0gTm9uZQogICAgc2VsZi5fY2hlY2twb2ludGVkID0gRmFsc2UKICAgIHNlbGYuX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCgogIGRlZiBjaGVja19kb25lKHNlbGYpOgogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICBpZiBzZWxmLl9sYXN0X2NsYWltX2F0dGVtcHQgPCBzZWxmLl9yYW5nZS5zdG9wIC0gMToKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgICAnT2Zmc2V0UmVzdHJpY3Rpb25UcmFja2VyIGlzIG5vdCBkb25lIHNpbmNlIHdvcmsgaW4gcmFuZ2UgWyVzLCAlcykgJwogICAgICAgICAgICAnaGFzIG5vdCBiZWVuIGNsYWltZWQuJwogICAgICAgICAgICAlIChzZWxmLl9sYXN0X2NsYWltX2F0dGVtcHQgaWYgc2VsZi5fbGFzdF9jbGFpbV9hdHRlbXB0IGlzIG5vdCBOb25lCiAgICAgICAgICAgICAgIGVsc2Ugc2VsZi5fcmFuZ2Uuc3RhcnQsCiAgICAgICAgICAgICAgIHNlbGYuX3JhbmdlLnN0b3ApKQoKICBkZWYgY3VycmVudF9yZXN0cmljdGlvbihzZWxmKToKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgcmV0dXJuIChzZWxmLl9yYW5nZS5zdGFydCwgc2VsZi5fcmFuZ2Uuc3RvcCkKCiAgZGVmIHN0YXJ0X3Bvc2l0aW9uKHNlbGYpOgogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICByZXR1cm4gc2VsZi5fcmFuZ2Uuc3RhcnQKCiAgZGVmIHN0b3BfcG9zaXRpb24oc2VsZik6CiAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgIHJldHVybiBzZWxmLl9yYW5nZS5zdG9wCgogIGRlZiB0cnlfY2xhaW0oc2VsZiwgcG9zaXRpb24pOgogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICBpZiBzZWxmLl9sYXN0X2NsYWltX2F0dGVtcHQgYW5kIHBvc2l0aW9uIDw9IHNlbGYuX2xhc3RfY2xhaW1fYXR0ZW1wdDoKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgICAnUG9zaXRpb25zIGNsYWltZWQgc2hvdWxkIHN0cmljdGx5IGluY3JlYXNlLiBUcnlpbmcgdG8gY2xhaW0gJwogICAgICAgICAgICAncG9zaXRpb24gJWQgd2hpbGUgbGFzdCBjbGFpbSBhdHRlbXB0IHdhcyAlZC4nCiAgICAgICAgICAgICUgKHBvc2l0aW9uLCBzZWxmLl9sYXN0X2NsYWltX2F0dGVtcHQpKQoKICAgICAgc2VsZi5fbGFzdF9jbGFpbV9hdHRlbXB0ID0gcG9zaXRpb24KICAgICAgaWYgcG9zaXRpb24gPCBzZWxmLl9yYW5nZS5zdGFydDoKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgICAnUG9zaXRpb24gdG8gYmUgY2xhaW1lZCBjYW5ub3QgYmUgc21hbGxlciB0aGFuIHRoZSBzdGFydCBwb3NpdGlvbiAnCiAgICAgICAgICAgICdvZiB0aGUgcmFuZ2UuIFRyaWVkIHRvIGNsYWltIHBvc2l0aW9uICVyIGZvciB0aGUgcmFuZ2UgWyVyLCAlciknCiAgICAgICAgICAgICUgKHBvc2l0aW9uLCBzZWxmLl9yYW5nZS5zdGFydCwgc2VsZi5fcmFuZ2Uuc3RvcCkpCgogICAgICBpZiBwb3NpdGlvbiA+PSBzZWxmLl9yYW5nZS5zdGFydCBhbmQgcG9zaXRpb24gPCBzZWxmLl9yYW5nZS5zdG9wOgogICAgICAgIHNlbGYuX2N1cnJlbnRfcG9zaXRpb24gPSBwb3NpdGlvbgogICAgICAgIHJldHVybiBUcnVlCgogICAgICByZXR1cm4gRmFsc2UKCiAgZGVmIGNoZWNrcG9pbnQoc2VsZik6CiAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgICMgSWYgc2VsZi5fY3VycmVudF9wb3NpdGlvbiBpcyAnTm9uZScgbm8gcmVjb3JkcyBoYXZlIGJlZW4gY2xhaW1lZCBzbwogICAgICAjIHJlc2lkdWFsIHNob3VsZCBzdGFydCBmcm9tIHNlbGYuX3JhbmdlLnN0YXJ0LgogICAgICBpZiBzZWxmLl9jdXJyZW50X3Bvc2l0aW9uIGlzIE5vbmU6CiAgICAgICAgZW5kX3Bvc2l0aW9uID0gc2VsZi5fcmFuZ2Uuc3RhcnQKICAgICAgZWxzZToKICAgICAgICBlbmRfcG9zaXRpb24gPSBzZWxmLl9jdXJyZW50X3Bvc2l0aW9uICsgMQoKICAgICAgcmVzaWR1YWxfcmFuZ2UgPSAoZW5kX3Bvc2l0aW9uLCBzZWxmLl9yYW5nZS5zdG9wKQoKICAgICAgc2VsZi5fcmFuZ2UgPSBPZmZzZXRSYW5nZShzZWxmLl9yYW5nZS5zdGFydCwgZW5kX3Bvc2l0aW9uKQogICAgICByZXR1cm4gcmVzaWR1YWxfcmFuZ2UKfXIXhAAAKFgXAAAAT2Zmc2V0UmFuZ2UubmV3X3RyYWNrZXJYAwAAAGRlZktES0aHWBEAAABPZmZzZXRSYW5nZS5zcGxpdFgDAAAAZGVmSzRLQ4dYEgAAAE9mZnNldFJhbmdlLl9fbmVfX1gDAAAAZGVmSy1LMIdYEgAAAE9mZnNldFJhbmdlLl9fZXFfX1gDAAAAZGVmSydLLIdYIgAAAE9mZnNldFJlc3RyaWN0aW9uVHJhY2tlci50cnlfY2xhaW1YAwAAAGRlZktsS4CHWCEAAABPZmZzZXRSZXN0cmljdGlvblRyYWNrZXIuX19pbml0X19YAwAAAGRlZktPS1WHWCMAAABPZmZzZXRSZXN0cmljdGlvblRyYWNrZXIuY2hlY2tfZG9uZVgDAAAAZGVmS1ZLX4dYIwAAAE9mZnNldFJlc3RyaWN0aW9uVHJhY2tlci5jaGVja3BvaW50WAMAAABkZWZLgUuOh1gLAAAAT2Zmc2V0UmFuZ2VYBQAAAGNsYXNzSx1LRodYFAAAAE9mZnNldFJhbmdlLl9faGFzaF9fWAMAAABkZWZLMUszh1gUAAAAT2Zmc2V0UmFuZ2UuX19pbml0X19YAwAAAGRlZksfSyaHWCwAAABPZmZzZXRSZXN0cmljdGlvblRyYWNrZXIuY3VycmVudF9yZXN0cmljdGlvblgDAAAAZGVmS2BLY4dYJwAAAE9mZnNldFJlc3RyaWN0aW9uVHJhY2tlci5zdGFydF9wb3NpdGlvblgDAAAAZGVmS2RLZ4dYJgAAAE9mZnNldFJlc3RyaWN0aW9uVHJhY2tlci5zdG9wX3Bvc2l0aW9uWAMAAABkZWZLaEtrh1gYAAAAT2Zmc2V0UmVzdHJpY3Rpb25UcmFja2VyWAUAAABjbGFzc0tIS46HdX1yGIQAAChYFwAAAE9mZnNldFJhbmdlLm5ld190cmFja2VyatRoAABYIwAAAE9mZnNldFJlc3RyaWN0aW9uVHJhY2tlci5jaGVja19kb25latRoAABYIgAAAE9mZnNldFJlc3RyaWN0aW9uVHJhY2tlci50cnlfY2xhaW1q1GgAAFgRAAAAT2Zmc2V0UmFuZ2Uuc3BsaXRq1GgAAFgjAAAAT2Zmc2V0UmVzdHJpY3Rpb25UcmFja2VyLmNoZWNrcG9pbnRq1GgAAFgLAAAAT2Zmc2V0UmFuZ2Vq1GgAAFgsAAAAT2Zmc2V0UmVzdHJpY3Rpb25UcmFja2VyLmN1cnJlbnRfcmVzdHJpY3Rpb25q1GgAAFgnAAAAT2Zmc2V0UmVzdHJpY3Rpb25UcmFja2VyLnN0YXJ0X3Bvc2l0aW9uatRoAABYJgAAAE9mZnNldFJlc3RyaWN0aW9uVHJhY2tlci5zdG9wX3Bvc2l0aW9uatRoAABYGAAAAE9mZnNldFJlc3RyaWN0aW9uVHJhY2tlcmrUaAAAdWp9aQAAWCMAAABhcGFjaGVfYmVhbS5pby5yZXN0cmljdGlvbl90cmFja2Vyc3IZhAAAhYFyGoQAAH1yG4QAAGJ0VSNhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5leGVjdXRvcihYzGIAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiQW4gZXhlY3V0b3IgdGhhdCBzY2hlZHVsZXMgYW5kIGV4ZWN1dGVzIGFwcGxpZWQgcHRyYW5zZm9ybXMuIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGNvbGxlY3Rpb25zCmltcG9ydCBpdGVydG9vbHMKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHN5cwppbXBvcnQgdGhyZWFkaW5nCmltcG9ydCB0cmFjZWJhY2sKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0CmZyb20gYnVpbHRpbnMgaW1wb3J0IHJhbmdlCmZyb20gd2Vha3JlZiBpbXBvcnQgV2Vha1ZhbHVlRGljdGlvbmFyeQoKZnJvbSBmdXR1cmUubW92ZXMgaW1wb3J0IHF1ZXVlCmZyb20gZnV0dXJlLnV0aWxzIGltcG9ydCByYWlzZV8KCmZyb20gYXBhY2hlX2JlYW0ubWV0cmljcy5leGVjdXRpb24gaW1wb3J0IE1ldHJpY3NDb250YWluZXIKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLndvcmtlciBpbXBvcnQgc3RhdGVzYW1wbGVyCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgc2lkZWlucHV0cwpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzIGltcG9ydCBjb3VudGVycwoKCmNsYXNzIF9FeGVjdXRvclNlcnZpY2Uob2JqZWN0KToKICAiIiJUaHJlYWQgcG9vbCBmb3IgZXhlY3V0aW5nIHRhc2tzIGluIHBhcmFsbGVsLiIiIgoKICBjbGFzcyBDYWxsYWJsZVRhc2sob2JqZWN0KToKCiAgICBkZWYgY2FsbChzZWxmLCBzdGF0ZV9zYW1wbGVyKToKICAgICAgcGFzcwoKICAgIEBwcm9wZXJ0eQogICAgZGVmIG5hbWUoc2VsZik6CiAgICAgIHJldHVybiBOb25lCgogIGNsYXNzIF9FeGVjdXRvclNlcnZpY2VXb3JrZXIodGhyZWFkaW5nLlRocmVhZCk6CiAgICAiIiJXb3JrZXIgdGhyZWFkIGZvciBleGVjdXRpbmcgYSBzaW5nbGUgdGFzayBhdCBhIHRpbWUuIiIiCgogICAgIyBBbW91bnQgdG8gYmxvY2sgd2FpdGluZyBmb3IgZ2V0dGluZyBhbiBpdGVtIGZyb20gdGhlIHF1ZXVlIGluIHNlY29uZHMuCiAgICBUSU1FT1VUID0gNQoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBxdWV1ZSwgaW5kZXgpOgogICAgICBzdXBlcihfRXhlY3V0b3JTZXJ2aWNlLl9FeGVjdXRvclNlcnZpY2VXb3JrZXIsIHNlbGYpLl9faW5pdF9fKCkKICAgICAgc2VsZi5xdWV1ZSA9IHF1ZXVlCiAgICAgIHNlbGYuX2luZGV4ID0gaW5kZXgKICAgICAgc2VsZi5fZGVmYXVsdF9uYW1lID0gJ0V4ZWN1dG9yU2VydmljZVdvcmtlci0nICsgc3RyKGluZGV4KQogICAgICBzZWxmLl91cGRhdGVfbmFtZSgpCiAgICAgIHNlbGYuc2h1dGRvd25fcmVxdWVzdGVkID0gRmFsc2UKCiAgICAgICMgU3RvcCB3b3JrZXIgdGhyZWFkIHdoZW4gbWFpbiB0aHJlYWQgZXhpdHMuCiAgICAgIHNlbGYuZGFlbW9uID0gVHJ1ZQogICAgICBzZWxmLnN0YXJ0KCkKCiAgICBkZWYgX3VwZGF0ZV9uYW1lKHNlbGYsIHRhc2s9Tm9uZSk6CiAgICAgIGlmIHRhc2sgYW5kIHRhc2submFtZToKICAgICAgICBuYW1lID0gdGFzay5uYW1lCiAgICAgIGVsc2U6CiAgICAgICAgbmFtZSA9IHNlbGYuX2RlZmF1bHRfbmFtZQogICAgICBzZWxmLm5hbWUgPSAnVGhyZWFkOiAlZCwgJXMgKCVzKScgJSAoCiAgICAgICAgICBzZWxmLl9pbmRleCwgbmFtZSwgJ2V4ZWN1dGluZycgaWYgdGFzayBlbHNlICdpZGxlJykKCiAgICBkZWYgX2dldF90YXNrX29yX25vbmUoc2VsZik6CiAgICAgIHRyeToKICAgICAgICAjIERvIG5vdCBibG9jayBpbmRlZmluaXRlbHksIG90aGVyd2lzZSB3ZSBtYXkgbm90IGFjdCBmb3IgYSByZXF1ZXN0ZWQKICAgICAgICAjIHNodXRkb3duLgogICAgICAgIHJldHVybiBzZWxmLnF1ZXVlLmdldCgKICAgICAgICAgICAgdGltZW91dD1fRXhlY3V0b3JTZXJ2aWNlLl9FeGVjdXRvclNlcnZpY2VXb3JrZXIuVElNRU9VVCkKICAgICAgZXhjZXB0IHF1ZXVlLkVtcHR5OgogICAgICAgIHJldHVybiBOb25lCgogICAgZGVmIHJ1bihzZWxmKToKICAgICAgc3RhdGVfc2FtcGxlciA9IHN0YXRlc2FtcGxlci5TdGF0ZVNhbXBsZXIoJycsIGNvdW50ZXJzLkNvdW50ZXJGYWN0b3J5KCkpCiAgICAgIHN0YXRlc2FtcGxlci5zZXRfY3VycmVudF90cmFja2VyKHN0YXRlX3NhbXBsZXIpCiAgICAgIHdoaWxlIG5vdCBzZWxmLnNodXRkb3duX3JlcXVlc3RlZDoKICAgICAgICB0YXNrID0gc2VsZi5fZ2V0X3Rhc2tfb3Jfbm9uZSgpCiAgICAgICAgaWYgdGFzazoKICAgICAgICAgIHRyeToKICAgICAgICAgICAgaWYgbm90IHNlbGYuc2h1dGRvd25fcmVxdWVzdGVkOgogICAgICAgICAgICAgIHNlbGYuX3VwZGF0ZV9uYW1lKHRhc2spCiAgICAgICAgICAgICAgdGFzay5jYWxsKHN0YXRlX3NhbXBsZXIpCiAgICAgICAgICAgICAgc2VsZi5fdXBkYXRlX25hbWUoKQogICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgc2VsZi5xdWV1ZS50YXNrX2RvbmUoKQoKICAgIGRlZiBzaHV0ZG93bihzZWxmKToKICAgICAgc2VsZi5zaHV0ZG93bl9yZXF1ZXN0ZWQgPSBUcnVlCgogIGRlZiBfX2luaXRfXyhzZWxmLCBudW1fd29ya2Vycyk6CiAgICBzZWxmLnF1ZXVlID0gcXVldWUuUXVldWUoKQogICAgc2VsZi53b3JrZXJzID0gW19FeGVjdXRvclNlcnZpY2UuX0V4ZWN1dG9yU2VydmljZVdvcmtlcigKICAgICAgICBzZWxmLnF1ZXVlLCBpKSBmb3IgaSBpbiByYW5nZShudW1fd29ya2VycyldCiAgICBzZWxmLnNodXRkb3duX3JlcXVlc3RlZCA9IEZhbHNlCgogIGRlZiBzdWJtaXQoc2VsZiwgdGFzayk6CiAgICBhc3NlcnQgaXNpbnN0YW5jZSh0YXNrLCBfRXhlY3V0b3JTZXJ2aWNlLkNhbGxhYmxlVGFzaykKICAgIGlmIG5vdCBzZWxmLnNodXRkb3duX3JlcXVlc3RlZDoKICAgICAgc2VsZi5xdWV1ZS5wdXQodGFzaykKCiAgZGVmIGF3YWl0X2NvbXBsZXRpb24oc2VsZik6CiAgICBmb3Igd29ya2VyIGluIHNlbGYud29ya2VyczoKICAgICAgd29ya2VyLmpvaW4oKQoKICBkZWYgc2h1dGRvd24oc2VsZik6CiAgICBzZWxmLnNodXRkb3duX3JlcXVlc3RlZCA9IFRydWUKCiAgICBmb3Igd29ya2VyIGluIHNlbGYud29ya2VyczoKICAgICAgd29ya2VyLnNodXRkb3duKCkKCiAgICAjIENvbnN1bWUgYWxsIHRoZSByZW1haW5pbmcgaXRlbXMgaW4gdGhlIHF1ZXVlCiAgICB3aGlsZSBub3Qgc2VsZi5xdWV1ZS5lbXB0eSgpOgogICAgICB0cnk6CiAgICAgICAgc2VsZi5xdWV1ZS5nZXRfbm93YWl0KCkKICAgICAgICBzZWxmLnF1ZXVlLnRhc2tfZG9uZSgpCiAgICAgIGV4Y2VwdCBxdWV1ZS5FbXB0eToKICAgICAgICBjb250aW51ZQogICAgIyBBbGwgZXhpc3RpbmcgdGhyZWFkcyB3aWxsIGV2ZW50dWFsbHkgdGVybWluYXRlIChhZnRlciB0aGV5IGNvbXBsZXRlIHRoZWlyCiAgICAjIGxhc3QgdGFzaykuCgoKY2xhc3MgX1RyYW5zZm9ybUV2YWx1YXRpb25TdGF0ZShvYmplY3QpOgoKICBkZWYgX19pbml0X18oc2VsZiwgZXhlY3V0b3Jfc2VydmljZSwgc2NoZWR1bGVkKToKICAgIHNlbGYuZXhlY3V0b3Jfc2VydmljZSA9IGV4ZWN1dG9yX3NlcnZpY2UKICAgIHNlbGYuc2NoZWR1bGVkID0gc2NoZWR1bGVkCgogIGRlZiBzY2hlZHVsZShzZWxmLCB3b3JrKToKICAgIHNlbGYuc2NoZWR1bGVkLmFkZCh3b3JrKQogICAgc2VsZi5leGVjdXRvcl9zZXJ2aWNlLnN1Ym1pdCh3b3JrKQoKICBkZWYgY29tcGxldGUoc2VsZiwgY29tcGxldGVkX3dvcmspOgogICAgc2VsZi5zY2hlZHVsZWQucmVtb3ZlKGNvbXBsZXRlZF93b3JrKQoKCmNsYXNzIF9QYXJhbGxlbEV2YWx1YXRpb25TdGF0ZShfVHJhbnNmb3JtRXZhbHVhdGlvblN0YXRlKToKICAiIiJBIFRyYW5zZm9ybUV2YWx1YXRpb25TdGF0ZSB3aXRoIHVubGltaXRlZCBwYXJhbGxlbGlzbS4KCiAgQW55IFRyYW5zZm9ybUV4ZWN1dG9yIHNjaGVkdWxlZCB3aWxsIGJlIGltbWVkaWF0ZWx5IHN1Ym1pdHRlZCB0byB0aGUKICBFeGVjdXRvclNlcnZpY2UuCgogIEEgcHJpbmNpcGFsIHVzZSBvZiB0aGlzIGlzIGZvciBldmFsdWF0b3JzIHRoYXQgY2FuIGdlbmVyYXRlIG91dHB1dCBidW5kbGVzCiAgb25seSB1c2luZyB0aGUgaW5wdXQgYnVuZGxlIChlLmcuIFBhckRvKS4KICAiIiIKICBwYXNzCgoKY2xhc3MgX1NlcmlhbEV2YWx1YXRpb25TdGF0ZShfVHJhbnNmb3JtRXZhbHVhdGlvblN0YXRlKToKICAiIiJBIFRyYW5zZm9ybUV2YWx1YXRpb25TdGF0ZSB3aXRoIGEgc2luZ2xlIHdvcmsgcXVldWUuCgogIEFueSBUcmFuc2Zvcm1FeGVjdXRvciBzY2hlZHVsZWQgd2lsbCBiZSBwbGFjZWQgb24gdGhlIHdvcmsgcXVldWUuIE9ubHkgb25lCiAgaXRlbSBvZiB3b3JrIHdpbGwgYmUgc3VibWl0dGVkIHRvIHRoZSBFeGVjdXRvclNlcnZpY2UgYXQgYW55IHRpbWUuCgogIEEgcHJpbmNpcGFsIHVzZSBvZiB0aGlzIGlzIGZvciBldmFsdWF0b3JzIHRoYXQga2VlcHMgYSBnbG9iYWwgc3RhdGUgc3VjaCBhcwogIF9Hcm91cEJ5S2V5T25seS4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGV4ZWN1dG9yX3NlcnZpY2UsIHNjaGVkdWxlZCk6CiAgICBzdXBlcihfU2VyaWFsRXZhbHVhdGlvblN0YXRlLCBzZWxmKS5fX2luaXRfXyhleGVjdXRvcl9zZXJ2aWNlLCBzY2hlZHVsZWQpCiAgICBzZWxmLnNlcmlhbF9xdWV1ZSA9IGNvbGxlY3Rpb25zLmRlcXVlKCkKICAgIHNlbGYuY3VycmVudGx5X2V2YWx1YXRpbmcgPSBOb25lCiAgICBzZWxmLl9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQoKICBkZWYgY29tcGxldGUoc2VsZiwgY29tcGxldGVkX3dvcmspOgogICAgc2VsZi5fdXBkYXRlX2N1cnJlbnRseV9ldmFsdWF0aW5nKE5vbmUsIGNvbXBsZXRlZF93b3JrKQogICAgc3VwZXIoX1NlcmlhbEV2YWx1YXRpb25TdGF0ZSwgc2VsZikuY29tcGxldGUoY29tcGxldGVkX3dvcmspCgogIGRlZiBzY2hlZHVsZShzZWxmLCBuZXdfd29yayk6CiAgICBzZWxmLl91cGRhdGVfY3VycmVudGx5X2V2YWx1YXRpbmcobmV3X3dvcmssIE5vbmUpCgogIGRlZiBfdXBkYXRlX2N1cnJlbnRseV9ldmFsdWF0aW5nKHNlbGYsIG5ld193b3JrLCBjb21wbGV0ZWRfd29yayk6CiAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgIGlmIG5ld193b3JrOgogICAgICAgIHNlbGYuc2VyaWFsX3F1ZXVlLmFwcGVuZChuZXdfd29yaykKICAgICAgaWYgY29tcGxldGVkX3dvcms6CiAgICAgICAgYXNzZXJ0IHNlbGYuY3VycmVudGx5X2V2YWx1YXRpbmcgPT0gY29tcGxldGVkX3dvcmsKICAgICAgICBzZWxmLmN1cnJlbnRseV9ldmFsdWF0aW5nID0gTm9uZQogICAgICBpZiBzZWxmLnNlcmlhbF9xdWV1ZSBhbmQgbm90IHNlbGYuY3VycmVudGx5X2V2YWx1YXRpbmc6CiAgICAgICAgbmV4dF93b3JrID0gc2VsZi5zZXJpYWxfcXVldWUucG9wKCkKICAgICAgICBzZWxmLmN1cnJlbnRseV9ldmFsdWF0aW5nID0gbmV4dF93b3JrCiAgICAgICAgc3VwZXIoX1NlcmlhbEV2YWx1YXRpb25TdGF0ZSwgc2VsZikuc2NoZWR1bGUobmV4dF93b3JrKQoKCmNsYXNzIF9UcmFuc2Zvcm1FeGVjdXRvclNlcnZpY2VzKG9iamVjdCk6CiAgIiIiU2NoZWR1bGVzIGFuZCBjb21wbGV0ZXMgVHJhbnNmb3JtRXhlY3V0b3JzLgoKICBDb250cm9scyB0aGUgY29uY3VycmVuY3kgYXMgYXBwcm9wcmlhdGUgZm9yIHRoZSBhcHBsaWVkIHRyYW5zZm9ybSB0aGUgZXhlY3V0b3IKICBleGlzdHMgZm9yLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgZXhlY3V0b3Jfc2VydmljZSk6CiAgICBzZWxmLl9leGVjdXRvcl9zZXJ2aWNlID0gZXhlY3V0b3Jfc2VydmljZQogICAgc2VsZi5fc2NoZWR1bGVkID0gc2V0KCkKICAgIHNlbGYuX3BhcmFsbGVsID0gX1BhcmFsbGVsRXZhbHVhdGlvblN0YXRlKAogICAgICAgIHNlbGYuX2V4ZWN1dG9yX3NlcnZpY2UsIHNlbGYuX3NjaGVkdWxlZCkKICAgIHNlbGYuX3NlcmlhbF9jYWNoZSA9IFdlYWtWYWx1ZURpY3Rpb25hcnkoKQoKICBkZWYgcGFyYWxsZWwoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fcGFyYWxsZWwKCiAgZGVmIHNlcmlhbChzZWxmLCBzdGVwKToKICAgIGNhY2hlZCA9IHNlbGYuX3NlcmlhbF9jYWNoZS5nZXQoc3RlcCkKICAgIGlmIG5vdCBjYWNoZWQ6CiAgICAgIGNhY2hlZCA9IF9TZXJpYWxFdmFsdWF0aW9uU3RhdGUoc2VsZi5fZXhlY3V0b3Jfc2VydmljZSwgc2VsZi5fc2NoZWR1bGVkKQogICAgICBzZWxmLl9zZXJpYWxfY2FjaGVbc3RlcF0gPSBjYWNoZWQKICAgIHJldHVybiBjYWNoZWQKCiAgQHByb3BlcnR5CiAgZGVmIGV4ZWN1dG9ycyhzZWxmKToKICAgIHJldHVybiBmcm96ZW5zZXQoc2VsZi5fc2NoZWR1bGVkKQoKCmNsYXNzIF9Db21wbGV0aW9uQ2FsbGJhY2sob2JqZWN0KToKICAiIiJUaGUgZGVmYXVsdCBjb21wbGV0aW9uIGNhbGxiYWNrLgoKICBUaGUgZGVmYXVsdCBjb21wbGV0aW9uIGNhbGxiYWNrIGlzIHVzZWQgdG8gY29tcGxldGUgdHJhbnNmb3JtIGV2YWx1YXRpb25zCiAgdGhhdCBhcmUgdHJpZ2dlcmVkIGR1ZSB0byB0aGUgYXJyaXZhbCBvZiBlbGVtZW50cyBmcm9tIGFuIHVwc3RyZWFtIHRyYW5zZm9ybSwKICBvciBmb3IgYSBzb3VyY2UgdHJhbnNmb3JtLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgZXZhbHVhdGlvbl9jb250ZXh0LCBhbGxfdXBkYXRlcywgdGltZXJfZmlyaW5ncz1Ob25lKToKICAgIHNlbGYuX2V2YWx1YXRpb25fY29udGV4dCA9IGV2YWx1YXRpb25fY29udGV4dAogICAgc2VsZi5fYWxsX3VwZGF0ZXMgPSBhbGxfdXBkYXRlcwogICAgc2VsZi5fdGltZXJfZmlyaW5ncyA9IHRpbWVyX2ZpcmluZ3Mgb3IgW10KCiAgZGVmIGhhbmRsZV9yZXN1bHQoc2VsZiwgdHJhbnNmb3JtX2V4ZWN1dG9yLCBpbnB1dF9jb21taXR0ZWRfYnVuZGxlLAogICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybV9yZXN1bHQpOgogICAgb3V0cHV0X2NvbW1pdHRlZF9idW5kbGVzID0gc2VsZi5fZXZhbHVhdGlvbl9jb250ZXh0LmhhbmRsZV9yZXN1bHQoCiAgICAgICAgaW5wdXRfY29tbWl0dGVkX2J1bmRsZSwgc2VsZi5fdGltZXJfZmlyaW5ncywgdHJhbnNmb3JtX3Jlc3VsdCkKICAgIGZvciBvdXRwdXRfY29tbWl0dGVkX2J1bmRsZSBpbiBvdXRwdXRfY29tbWl0dGVkX2J1bmRsZXM6CiAgICAgIHNlbGYuX2FsbF91cGRhdGVzLm9mZmVyKF9FeGVjdXRvclNlcnZpY2VQYXJhbGxlbEV4ZWN1dG9yLl9FeGVjdXRvclVwZGF0ZSgKICAgICAgICAgIHRyYW5zZm9ybV9leGVjdXRvciwKICAgICAgICAgIGNvbW1pdHRlZF9idW5kbGU9b3V0cHV0X2NvbW1pdHRlZF9idW5kbGUpKQogICAgZm9yIHVucHJvY2Vzc2VkX2J1bmRsZSBpbiB0cmFuc2Zvcm1fcmVzdWx0LnVucHJvY2Vzc2VkX2J1bmRsZXM6CiAgICAgIHNlbGYuX2FsbF91cGRhdGVzLm9mZmVyKAogICAgICAgICAgX0V4ZWN1dG9yU2VydmljZVBhcmFsbGVsRXhlY3V0b3IuX0V4ZWN1dG9yVXBkYXRlKAogICAgICAgICAgICAgIHRyYW5zZm9ybV9leGVjdXRvciwKICAgICAgICAgICAgICB1bnByb2Nlc3NlZF9idW5kbGU9dW5wcm9jZXNzZWRfYnVuZGxlKSkKICAgIHJldHVybiBvdXRwdXRfY29tbWl0dGVkX2J1bmRsZXMKCiAgZGVmIGhhbmRsZV9leGNlcHRpb24oc2VsZiwgdHJhbnNmb3JtX2V4ZWN1dG9yLCBleGNlcHRpb24pOgogICAgc2VsZi5fYWxsX3VwZGF0ZXMub2ZmZXIoCiAgICAgICAgX0V4ZWN1dG9yU2VydmljZVBhcmFsbGVsRXhlY3V0b3IuX0V4ZWN1dG9yVXBkYXRlKAogICAgICAgICAgICB0cmFuc2Zvcm1fZXhlY3V0b3IsIGV4Y2VwdGlvbj1leGNlcHRpb24pKQoKCmNsYXNzIFRyYW5zZm9ybUV4ZWN1dG9yKF9FeGVjdXRvclNlcnZpY2UuQ2FsbGFibGVUYXNrKToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIFRyYW5zZm9ybUV4ZWN1dG9yIHdpbGwgZXZhbHVhdGUgYSBidW5kbGUgdXNpbmcgYW4gYXBwbGllZCBwdHJhbnNmb3JtLgoKICBBIENhbGxhYmxlVGFzayByZXNwb25zaWJsZSBmb3IgY29uc3RydWN0aW5nIGEgVHJhbnNmb3JtRXZhbHVhdG9yIGFuZAogIGV2YWx1YXRpbmcgaXQgb24gc29tZSBidW5kbGUgb2YgaW5wdXQsIGFuZCByZWdpc3RlcmluZyB0aGUgcmVzdWx0IHVzaW5nIHRoZQogIGNvbXBsZXRpb24gY2FsbGJhY2suCiAgIiIiCgogIF9NQVhfUkVUUllfUEVSX0JVTkRMRSA9IDQKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHRyYW5zZm9ybV9ldmFsdWF0b3JfcmVnaXN0cnksIGV2YWx1YXRpb25fY29udGV4dCwKICAgICAgICAgICAgICAgaW5wdXRfYnVuZGxlLCBmaXJlZF90aW1lcnMsIGFwcGxpZWRfcHRyYW5zZm9ybSwKICAgICAgICAgICAgICAgY29tcGxldGlvbl9jYWxsYmFjaywgdHJhbnNmb3JtX2V2YWx1YXRpb25fc3RhdGUpOgogICAgc2VsZi5fdHJhbnNmb3JtX2V2YWx1YXRvcl9yZWdpc3RyeSA9IHRyYW5zZm9ybV9ldmFsdWF0b3JfcmVnaXN0cnkKICAgIHNlbGYuX2V2YWx1YXRpb25fY29udGV4dCA9IGV2YWx1YXRpb25fY29udGV4dAogICAgc2VsZi5faW5wdXRfYnVuZGxlID0gaW5wdXRfYnVuZGxlCiAgICAjIEZvciBub24tZW1wdHkgYnVuZGxlcywgc3RvcmUgdGhlIHdpbmRvdyBvZiB0aGUgbWF4IEVPVy4KICAgICMgVE9ETyhtYXJpYWdoKTogTW92ZSB0byBjbGFzcyBfQnVuZGxlJ3MgaW5uZXIgX1N0YWNrZWRXaW5kb3dlZFZhbHVlcwogICAgc2VsZi5fbGF0ZXN0X21haW5faW5wdXRfd2luZG93ID0gTm9uZQogICAgaWYgaW5wdXRfYnVuZGxlLmhhc19lbGVtZW50cygpOgogICAgICBzZWxmLl9sYXRlc3RfbWFpbl9pbnB1dF93aW5kb3cgPSBpbnB1dF9idW5kbGUuX2VsZW1lbnRzWzBdLndpbmRvd3NbMF0KICAgICAgZm9yIGVsZW0gaW4gaW5wdXRfYnVuZGxlLmdldF9lbGVtZW50c19pdGVyYWJsZSgpOgogICAgICAgIGlmIGVsZW0ud2luZG93c1swXS5lbmQgPiBzZWxmLl9sYXRlc3RfbWFpbl9pbnB1dF93aW5kb3cuZW5kOgogICAgICAgICAgc2VsZi5fbGF0ZXN0X21haW5faW5wdXRfd2luZG93ID0gZWxlbS53aW5kb3dzWzBdCiAgICBzZWxmLl9maXJlZF90aW1lcnMgPSBmaXJlZF90aW1lcnMKICAgIHNlbGYuX2FwcGxpZWRfcHRyYW5zZm9ybSA9IGFwcGxpZWRfcHRyYW5zZm9ybQogICAgc2VsZi5fY29tcGxldGlvbl9jYWxsYmFjayA9IGNvbXBsZXRpb25fY2FsbGJhY2sKICAgIHNlbGYuX3RyYW5zZm9ybV9ldmFsdWF0aW9uX3N0YXRlID0gdHJhbnNmb3JtX2V2YWx1YXRpb25fc3RhdGUKICAgIHNlbGYuX3NpZGVfaW5wdXRfdmFsdWVzID0ge30KICAgIHNlbGYuYmxvY2tlZCA9IEZhbHNlCiAgICBzZWxmLl9jYWxsX2NvdW50ID0gMAogICAgc2VsZi5fcmV0cnlfY291bnQgPSAwCiAgICBzZWxmLl9tYXhfcmV0cmllc19wZXJfYnVuZGxlID0gVHJhbnNmb3JtRXhlY3V0b3IuX01BWF9SRVRSWV9QRVJfQlVORExFCgogIGRlZiBjYWxsKHNlbGYsIHN0YXRlX3NhbXBsZXIpOgogICAgc2VsZi5fY2FsbF9jb3VudCArPSAxCiAgICBhc3NlcnQgc2VsZi5fY2FsbF9jb3VudCA8PSAoMSArIGxlbihzZWxmLl9hcHBsaWVkX3B0cmFuc2Zvcm0uc2lkZV9pbnB1dHMpKQogICAgbWV0cmljc19jb250YWluZXIgPSBNZXRyaWNzQ29udGFpbmVyKHNlbGYuX2FwcGxpZWRfcHRyYW5zZm9ybS5mdWxsX2xhYmVsKQogICAgc3RhcnRfc3RhdGUgPSBzdGF0ZV9zYW1wbGVyLnNjb3BlZF9zdGF0ZSgKICAgICAgICBzZWxmLl9hcHBsaWVkX3B0cmFuc2Zvcm0uZnVsbF9sYWJlbCwKICAgICAgICAnc3RhcnQnLAogICAgICAgIG1ldHJpY3NfY29udGFpbmVyPW1ldHJpY3NfY29udGFpbmVyKQogICAgcHJvY2Vzc19zdGF0ZSA9IHN0YXRlX3NhbXBsZXIuc2NvcGVkX3N0YXRlKAogICAgICAgIHNlbGYuX2FwcGxpZWRfcHRyYW5zZm9ybS5mdWxsX2xhYmVsLAogICAgICAgICdwcm9jZXNzJywKICAgICAgICBtZXRyaWNzX2NvbnRhaW5lcj1tZXRyaWNzX2NvbnRhaW5lcikKICAgIGZpbmlzaF9zdGF0ZSA9IHN0YXRlX3NhbXBsZXIuc2NvcGVkX3N0YXRlKAogICAgICAgIHNlbGYuX2FwcGxpZWRfcHRyYW5zZm9ybS5mdWxsX2xhYmVsLAogICAgICAgICdmaW5pc2gnLAogICAgICAgIG1ldHJpY3NfY29udGFpbmVyPW1ldHJpY3NfY29udGFpbmVyKQoKICAgIHdpdGggc3RhcnRfc3RhdGU6CiAgICAgICMgU2lkZSBpbnB1dCBpbml0aWFsaXphdGlvbiBzaG91bGQgYmUgYWNjb3VudGVkIGZvciBpbiBzdGFydF9zdGF0ZS4KICAgICAgZm9yIHNpZGVfaW5wdXQgaW4gc2VsZi5fYXBwbGllZF9wdHJhbnNmb3JtLnNpZGVfaW5wdXRzOgogICAgICAgICMgRmluZCB0aGUgcHJvamVjdGlvbiBvZiBtYWluJ3Mgd2luZG93IG9udG8gdGhlIHNpZGUgaW5wdXQncyB3aW5kb3cuCiAgICAgICAgd2luZG93X21hcHBpbmdfZm4gPSBzaWRlX2lucHV0Ll92aWV3X29wdGlvbnMoKS5nZXQoCiAgICAgICAgICAgICd3aW5kb3dfbWFwcGluZ19mbicsIHNpZGVpbnB1dHMuX2dsb2JhbF93aW5kb3dfbWFwcGluZ19mbikKICAgICAgICBtYWluX29udG9fc2lkZV93aW5kb3cgPSB3aW5kb3dfbWFwcGluZ19mbigKICAgICAgICAgICAgc2VsZi5fbGF0ZXN0X21haW5faW5wdXRfd2luZG93KQogICAgICAgIGJsb2NrX3VudGlsID0gbWFpbl9vbnRvX3NpZGVfd2luZG93LmVuZAoKICAgICAgICBpZiBzaWRlX2lucHV0IG5vdCBpbiBzZWxmLl9zaWRlX2lucHV0X3ZhbHVlczoKICAgICAgICAgIHZhbHVlID0gc2VsZi5fZXZhbHVhdGlvbl9jb250ZXh0LmdldF92YWx1ZV9vcl9ibG9ja191bnRpbF9yZWFkeSgKICAgICAgICAgICAgICBzaWRlX2lucHV0LCBzZWxmLCBibG9ja191bnRpbCkKICAgICAgICAgIGlmIG5vdCB2YWx1ZToKICAgICAgICAgICAgIyBNb25pdG9yIHRhc2sgd2lsbCByZXNjaGVkdWxlIHRoaXMgZXhlY3V0b3Igb25jZSB0aGUgc2lkZSBpbnB1dCBpcwogICAgICAgICAgICAjIGF2YWlsYWJsZS4KICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICBzZWxmLl9zaWRlX2lucHV0X3ZhbHVlc1tzaWRlX2lucHV0XSA9IHZhbHVlCiAgICAgIHNpZGVfaW5wdXRfdmFsdWVzID0gWwogICAgICAgICAgc2VsZi5fc2lkZV9pbnB1dF92YWx1ZXNbc2lkZV9pbnB1dF0KICAgICAgICAgIGZvciBzaWRlX2lucHV0IGluIHNlbGYuX2FwcGxpZWRfcHRyYW5zZm9ybS5zaWRlX2lucHV0c10KCiAgICB3aGlsZSBzZWxmLl9yZXRyeV9jb3VudCA8IHNlbGYuX21heF9yZXRyaWVzX3Blcl9idW5kbGU6CiAgICAgIHRyeToKICAgICAgICBzZWxmLmF0dGVtcHRfY2FsbChtZXRyaWNzX2NvbnRhaW5lciwKICAgICAgICAgICAgICAgICAgICAgICAgICBzaWRlX2lucHV0X3ZhbHVlcywKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9zdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzX3N0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmlzaF9zdGF0ZSkKICAgICAgICBicmVhawogICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgc2VsZi5fcmV0cnlfY291bnQgKz0gMQogICAgICAgIGxvZ2dpbmcuZXJyb3IoCiAgICAgICAgICAgICdFeGNlcHRpb24gYXQgYnVuZGxlICVyLCBkdWUgdG8gYW4gZXhjZXB0aW9uLlxuICVzJywKICAgICAgICAgICAgc2VsZi5faW5wdXRfYnVuZGxlLCB0cmFjZWJhY2suZm9ybWF0X2V4YygpKQogICAgICAgIGlmIHNlbGYuX3JldHJ5X2NvdW50ID09IHNlbGYuX21heF9yZXRyaWVzX3Blcl9idW5kbGU6CiAgICAgICAgICBsb2dnaW5nLmVycm9yKCdHaXZpbmcgdXAgYWZ0ZXIgJXMgYXR0ZW1wdHMuJywKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbWF4X3JldHJpZXNfcGVyX2J1bmRsZSkKICAgICAgICAgIHNlbGYuX2NvbXBsZXRpb25fY2FsbGJhY2suaGFuZGxlX2V4Y2VwdGlvbihzZWxmLCBlKQoKICAgIHNlbGYuX2V2YWx1YXRpb25fY29udGV4dC5tZXRyaWNzKCkuY29tbWl0X3BoeXNpY2FsKAogICAgICAgIHNlbGYuX2lucHV0X2J1bmRsZSwKICAgICAgICBtZXRyaWNzX2NvbnRhaW5lci5nZXRfY3VtdWxhdGl2ZSgpKQogICAgc2VsZi5fdHJhbnNmb3JtX2V2YWx1YXRpb25fc3RhdGUuY29tcGxldGUoc2VsZikKCiAgZGVmIGF0dGVtcHRfY2FsbChzZWxmLCBtZXRyaWNzX2NvbnRhaW5lciwKICAgICAgICAgICAgICAgICAgIHNpZGVfaW5wdXRfdmFsdWVzLAogICAgICAgICAgICAgICAgICAgc3RhcnRfc3RhdGUsCiAgICAgICAgICAgICAgICAgICBwcm9jZXNzX3N0YXRlLAogICAgICAgICAgICAgICAgICAgZmluaXNoX3N0YXRlKToKICAgICIiIkF0dGVtcHRzIHRvIHJ1biBhIGJ1bmRsZS4iIiIKICAgIGV2YWx1YXRvciA9IHNlbGYuX3RyYW5zZm9ybV9ldmFsdWF0b3JfcmVnaXN0cnkuZ2V0X2V2YWx1YXRvcigKICAgICAgICBzZWxmLl9hcHBsaWVkX3B0cmFuc2Zvcm0sIHNlbGYuX2lucHV0X2J1bmRsZSwKICAgICAgICBzaWRlX2lucHV0X3ZhbHVlcykKCiAgICB3aXRoIHN0YXJ0X3N0YXRlOgogICAgICBldmFsdWF0b3Iuc3RhcnRfYnVuZGxlKCkKCiAgICB3aXRoIHByb2Nlc3Nfc3RhdGU6CiAgICAgIGlmIHNlbGYuX2ZpcmVkX3RpbWVyczoKICAgICAgICBmb3IgdGltZXJfZmlyaW5nIGluIHNlbGYuX2ZpcmVkX3RpbWVyczoKICAgICAgICAgIGV2YWx1YXRvci5wcm9jZXNzX3RpbWVyX3dyYXBwZXIodGltZXJfZmlyaW5nKQoKICAgICAgaWYgc2VsZi5faW5wdXRfYnVuZGxlOgogICAgICAgIGZvciB2YWx1ZSBpbiBzZWxmLl9pbnB1dF9idW5kbGUuZ2V0X2VsZW1lbnRzX2l0ZXJhYmxlKCk6CiAgICAgICAgICBldmFsdWF0b3IucHJvY2Vzc19lbGVtZW50KHZhbHVlKQoKICAgIHdpdGggZmluaXNoX3N0YXRlOgogICAgICByZXN1bHQgPSBldmFsdWF0b3IuZmluaXNoX2J1bmRsZSgpCiAgICAgIHJlc3VsdC5sb2dpY2FsX21ldHJpY191cGRhdGVzID0gbWV0cmljc19jb250YWluZXIuZ2V0X2N1bXVsYXRpdmUoKQoKICAgIHNlbGYuX2NvbXBsZXRpb25fY2FsbGJhY2suaGFuZGxlX3Jlc3VsdChzZWxmLCBzZWxmLl9pbnB1dF9idW5kbGUsIHJlc3VsdCkKICAgIHJldHVybiByZXN1bHQKCgpjbGFzcyBFeGVjdXRvcihvYmplY3QpOgogICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICBzZWxmLl9leGVjdXRvciA9IF9FeGVjdXRvclNlcnZpY2VQYXJhbGxlbEV4ZWN1dG9yKCphcmdzLCAqKmt3YXJncykKCiAgZGVmIHN0YXJ0KHNlbGYsIHJvb3RzKToKICAgIHNlbGYuX2V4ZWN1dG9yLnN0YXJ0KHJvb3RzKQoKICBkZWYgYXdhaXRfY29tcGxldGlvbihzZWxmKToKICAgIHNlbGYuX2V4ZWN1dG9yLmF3YWl0X2NvbXBsZXRpb24oKQoKICBkZWYgc2h1dGRvd24oc2VsZik6CiAgICBzZWxmLl9leGVjdXRvci5yZXF1ZXN0X3NodXRkb3duKCkKCgpjbGFzcyBfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvcihvYmplY3QpOgogICIiIkFuIGludGVybmFsIGltcGxlbWVudGF0aW9uIGZvciBFeGVjdXRvci4iIiIKCiAgTlVNX1dPUktFUlMgPSAxCgogIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZV90b19jb25zdW1lcnMsIHRyYW5zZm9ybV9ldmFsdWF0b3JfcmVnaXN0cnksCiAgICAgICAgICAgICAgIGV2YWx1YXRpb25fY29udGV4dCk6CiAgICBzZWxmLmV4ZWN1dG9yX3NlcnZpY2UgPSBfRXhlY3V0b3JTZXJ2aWNlKAogICAgICAgIF9FeGVjdXRvclNlcnZpY2VQYXJhbGxlbEV4ZWN1dG9yLk5VTV9XT1JLRVJTKQogICAgc2VsZi50cmFuc2Zvcm1fZXhlY3V0b3Jfc2VydmljZXMgPSBfVHJhbnNmb3JtRXhlY3V0b3JTZXJ2aWNlcygKICAgICAgICBzZWxmLmV4ZWN1dG9yX3NlcnZpY2UpCiAgICBzZWxmLnZhbHVlX3RvX2NvbnN1bWVycyA9IHZhbHVlX3RvX2NvbnN1bWVycwogICAgc2VsZi50cmFuc2Zvcm1fZXZhbHVhdG9yX3JlZ2lzdHJ5ID0gdHJhbnNmb3JtX2V2YWx1YXRvcl9yZWdpc3RyeQogICAgc2VsZi5ldmFsdWF0aW9uX2NvbnRleHQgPSBldmFsdWF0aW9uX2NvbnRleHQKICAgIHNlbGYuYWxsX3VwZGF0ZXMgPSBfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5fVHlwZWRVcGRhdGVRdWV1ZSgKICAgICAgICBfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5fRXhlY3V0b3JVcGRhdGUpCiAgICBzZWxmLnZpc2libGVfdXBkYXRlcyA9IF9FeGVjdXRvclNlcnZpY2VQYXJhbGxlbEV4ZWN1dG9yLl9UeXBlZFVwZGF0ZVF1ZXVlKAogICAgICAgIF9FeGVjdXRvclNlcnZpY2VQYXJhbGxlbEV4ZWN1dG9yLl9WaXNpYmxlRXhlY3V0b3JVcGRhdGUpCiAgICBzZWxmLmRlZmF1bHRfY29tcGxldGlvbl9jYWxsYmFjayA9IF9Db21wbGV0aW9uQ2FsbGJhY2soCiAgICAgICAgZXZhbHVhdGlvbl9jb250ZXh0LCBzZWxmLmFsbF91cGRhdGVzKQoKICBkZWYgc3RhcnQoc2VsZiwgcm9vdHMpOgogICAgc2VsZi5yb290X25vZGVzID0gZnJvemVuc2V0KHJvb3RzKQogICAgc2VsZi5hbGxfbm9kZXMgPSBmcm96ZW5zZXQoCiAgICAgICAgaXRlcnRvb2xzLmNoYWluKAogICAgICAgICAgICByb290cywKICAgICAgICAgICAgKml0ZXJ0b29scy5jaGFpbihzZWxmLnZhbHVlX3RvX2NvbnN1bWVycy52YWx1ZXMoKSkpKQogICAgc2VsZi5ub2RlX3RvX3BlbmRpbmdfYnVuZGxlcyA9IHt9CiAgICBmb3Igcm9vdF9ub2RlIGluIHNlbGYucm9vdF9ub2RlczoKICAgICAgcHJvdmlkZXIgPSAoc2VsZi50cmFuc2Zvcm1fZXZhbHVhdG9yX3JlZ2lzdHJ5CiAgICAgICAgICAgICAgICAgIC5nZXRfcm9vdF9idW5kbGVfcHJvdmlkZXIocm9vdF9ub2RlKSkKICAgICAgc2VsZi5ub2RlX3RvX3BlbmRpbmdfYnVuZGxlc1tyb290X25vZGVdID0gcHJvdmlkZXIuZ2V0X3Jvb3RfYnVuZGxlcygpCiAgICBzZWxmLmV4ZWN1dG9yX3NlcnZpY2Uuc3VibWl0KAogICAgICAgIF9FeGVjdXRvclNlcnZpY2VQYXJhbGxlbEV4ZWN1dG9yLl9Nb25pdG9yVGFzayhzZWxmKSkKCiAgZGVmIGF3YWl0X2NvbXBsZXRpb24oc2VsZik6CiAgICB1cGRhdGUgPSBzZWxmLnZpc2libGVfdXBkYXRlcy50YWtlKCkKICAgIHRyeToKICAgICAgaWYgdXBkYXRlLmV4Y2VwdGlvbjoKICAgICAgICB0LCB2LCB0YiA9IHVwZGF0ZS5leGNfaW5mbwogICAgICAgIHJhaXNlXyh0LCB2LCB0YikKICAgIGZpbmFsbHk6CiAgICAgIHNlbGYuZXhlY3V0b3Jfc2VydmljZS5zaHV0ZG93bigpCiAgICAgIHNlbGYuZXhlY3V0b3Jfc2VydmljZS5hd2FpdF9jb21wbGV0aW9uKCkKCiAgZGVmIHJlcXVlc3Rfc2h1dGRvd24oc2VsZik6CiAgICBzZWxmLmV4ZWN1dG9yX3NlcnZpY2Uuc2h1dGRvd24oKQoKICBkZWYgc2NoZWR1bGVfY29uc3VtZXJzKHNlbGYsIGNvbW1pdHRlZF9idW5kbGUpOgogICAgaWYgY29tbWl0dGVkX2J1bmRsZS5wY29sbGVjdGlvbiBpbiBzZWxmLnZhbHVlX3RvX2NvbnN1bWVyczoKICAgICAgY29uc3VtZXJzID0gc2VsZi52YWx1ZV90b19jb25zdW1lcnNbY29tbWl0dGVkX2J1bmRsZS5wY29sbGVjdGlvbl0KICAgICAgZm9yIGFwcGxpZWRfcHRyYW5zZm9ybSBpbiBjb25zdW1lcnM6CiAgICAgICAgc2VsZi5zY2hlZHVsZV9jb25zdW1wdGlvbihhcHBsaWVkX3B0cmFuc2Zvcm0sIGNvbW1pdHRlZF9idW5kbGUsIFtdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kZWZhdWx0X2NvbXBsZXRpb25fY2FsbGJhY2spCgogIGRlZiBzY2hlZHVsZV91bnByb2Nlc3NlZF9idW5kbGUoc2VsZiwgYXBwbGllZF9wdHJhbnNmb3JtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5wcm9jZXNzZWRfYnVuZGxlKToKICAgIHNlbGYubm9kZV90b19wZW5kaW5nX2J1bmRsZXNbYXBwbGllZF9wdHJhbnNmb3JtXS5hcHBlbmQodW5wcm9jZXNzZWRfYnVuZGxlKQoKICBkZWYgc2NoZWR1bGVfY29uc3VtcHRpb24oc2VsZiwgY29uc3VtZXJfYXBwbGllZF9wdHJhbnNmb3JtLCBjb21taXR0ZWRfYnVuZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJlZF90aW1lcnMsIG9uX2NvbXBsZXRlKToKICAgICIiIlNjaGVkdWxlcyBldmFsdWF0aW9uIG9mIHRoZSBnaXZlbiBidW5kbGUgd2l0aCB0aGUgdHJhbnNmb3JtLiIiIgogICAgYXNzZXJ0IGNvbnN1bWVyX2FwcGxpZWRfcHRyYW5zZm9ybQogICAgYXNzZXJ0IGNvbW1pdHRlZF9idW5kbGUKICAgIGFzc2VydCBvbl9jb21wbGV0ZQogICAgaWYgc2VsZi50cmFuc2Zvcm1fZXZhbHVhdG9yX3JlZ2lzdHJ5LnNob3VsZF9leGVjdXRlX3NlcmlhbGx5KAogICAgICAgIGNvbnN1bWVyX2FwcGxpZWRfcHRyYW5zZm9ybSk6CiAgICAgIHRyYW5zZm9ybV9leGVjdXRvcl9zZXJ2aWNlID0gc2VsZi50cmFuc2Zvcm1fZXhlY3V0b3Jfc2VydmljZXMuc2VyaWFsKAogICAgICAgICAgY29uc3VtZXJfYXBwbGllZF9wdHJhbnNmb3JtKQogICAgZWxzZToKICAgICAgdHJhbnNmb3JtX2V4ZWN1dG9yX3NlcnZpY2UgPSBzZWxmLnRyYW5zZm9ybV9leGVjdXRvcl9zZXJ2aWNlcy5wYXJhbGxlbCgpCgogICAgdHJhbnNmb3JtX2V4ZWN1dG9yID0gVHJhbnNmb3JtRXhlY3V0b3IoCiAgICAgICAgc2VsZi50cmFuc2Zvcm1fZXZhbHVhdG9yX3JlZ2lzdHJ5LCBzZWxmLmV2YWx1YXRpb25fY29udGV4dCwKICAgICAgICBjb21taXR0ZWRfYnVuZGxlLCBmaXJlZF90aW1lcnMsIGNvbnN1bWVyX2FwcGxpZWRfcHRyYW5zZm9ybSwKICAgICAgICBvbl9jb21wbGV0ZSwgdHJhbnNmb3JtX2V4ZWN1dG9yX3NlcnZpY2UpCiAgICB0cmFuc2Zvcm1fZXhlY3V0b3Jfc2VydmljZS5zY2hlZHVsZSh0cmFuc2Zvcm1fZXhlY3V0b3IpCgogIGNsYXNzIF9UeXBlZFVwZGF0ZVF1ZXVlKG9iamVjdCk6CiAgICAiIiJUeXBlIGNoZWNraW5nIHVwZGF0ZSBxdWV1ZSB3aXRoIGJsb2NraW5nIGFuZCBub24tYmxvY2tpbmcgb3BlcmF0aW9ucy4iIiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgaXRlbV90eXBlKToKICAgICAgc2VsZi5faXRlbV90eXBlID0gaXRlbV90eXBlCiAgICAgIHNlbGYuX3F1ZXVlID0gcXVldWUuUXVldWUoKQoKICAgIGRlZiBwb2xsKHNlbGYpOgogICAgICB0cnk6CiAgICAgICAgaXRlbSA9IHNlbGYuX3F1ZXVlLmdldF9ub3dhaXQoKQogICAgICAgIHNlbGYuX3F1ZXVlLnRhc2tfZG9uZSgpCiAgICAgICAgcmV0dXJuICBpdGVtCiAgICAgIGV4Y2VwdCBxdWV1ZS5FbXB0eToKICAgICAgICByZXR1cm4gTm9uZQoKICAgIGRlZiB0YWtlKHNlbGYpOgogICAgICAjIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiBRdWV1ZS5RdWV1ZS5nZXQoKSBkb2VzIG5vdCBwcm9wYWdhdGUKICAgICAgIyBLZXlib2FyZEludGVycnVwdHMgd2hlbiBhIHRpbWVvdXQgaXMgbm90IHVzZWQuICBXZSB0aGVyZWZvcmUgdXNlIGEKICAgICAgIyBvbmUtc2Vjb25kIHRpbWVvdXQgaW4gdGhlIGZvbGxvd2luZyBsb29wIHRvIGFsbG93IEtleWJvYXJkSW50ZXJydXB0cwogICAgICAjIHRvIGJlIGNvcnJlY3RseSBwcm9wYWdhdGVkLgogICAgICB3aGlsZSBUcnVlOgogICAgICAgIHRyeToKICAgICAgICAgIGl0ZW0gPSBzZWxmLl9xdWV1ZS5nZXQodGltZW91dD0xKQogICAgICAgICAgc2VsZi5fcXVldWUudGFza19kb25lKCkKICAgICAgICAgIHJldHVybiBpdGVtCiAgICAgICAgZXhjZXB0IHF1ZXVlLkVtcHR5OgogICAgICAgICAgcGFzcwoKICAgIGRlZiBvZmZlcihzZWxmLCBpdGVtKToKICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoaXRlbSwgc2VsZi5faXRlbV90eXBlKQogICAgICBzZWxmLl9xdWV1ZS5wdXRfbm93YWl0KGl0ZW0pCgogIGNsYXNzIF9FeGVjdXRvclVwZGF0ZShvYmplY3QpOgogICAgIiIiQW4gaW50ZXJuYWwgc3RhdHVzIHVwZGF0ZSBvbiB0aGUgc3RhdGUgb2YgdGhlIGV4ZWN1dG9yLiIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0cmFuc2Zvcm1fZXhlY3V0b3IsIGNvbW1pdHRlZF9idW5kbGU9Tm9uZSwKICAgICAgICAgICAgICAgICB1bnByb2Nlc3NlZF9idW5kbGU9Tm9uZSwgZXhjZXB0aW9uPU5vbmUpOgogICAgICBzZWxmLnRyYW5zZm9ybV9leGVjdXRvciA9IHRyYW5zZm9ybV9leGVjdXRvcgogICAgICAjIEV4YWN0bHkgb25lIG9mIHRoZW0gc2hvdWxkIGJlIG5vdC1Ob25lCiAgICAgIGFzc2VydCBzdW0oWwogICAgICAgICAgYm9vbChjb21taXR0ZWRfYnVuZGxlKSwKICAgICAgICAgIGJvb2wodW5wcm9jZXNzZWRfYnVuZGxlKSwKICAgICAgICAgIGJvb2woZXhjZXB0aW9uKV0pID09IDEKICAgICAgc2VsZi5jb21taXR0ZWRfYnVuZGxlID0gY29tbWl0dGVkX2J1bmRsZQogICAgICBzZWxmLnVucHJvY2Vzc2VkX2J1bmRsZSA9IHVucHJvY2Vzc2VkX2J1bmRsZQogICAgICBzZWxmLmV4Y2VwdGlvbiA9IGV4Y2VwdGlvbgogICAgICBzZWxmLmV4Y19pbmZvID0gc3lzLmV4Y19pbmZvKCkKICAgICAgaWYgc2VsZi5leGNfaW5mb1sxXSBpcyBub3QgZXhjZXB0aW9uOgogICAgICAgICMgTm90IHRoZSByaWdodCBleGNlcHRpb24uCiAgICAgICAgc2VsZi5leGNfaW5mbyA9IChleGNlcHRpb24sIE5vbmUsIE5vbmUpCgogIGNsYXNzIF9WaXNpYmxlRXhlY3V0b3JVcGRhdGUob2JqZWN0KToKICAgICIiIkFuIHVwZGF0ZSBvZiBpbnRlcmVzdCB0byB0aGUgdXNlci4KCiAgICBVc2VkIGZvciBhd2FpdGluZyB0aGUgY29tcGxldGlvbiB0byBkZWNpZGUgd2hldGhlciB0byByZXR1cm4gbm9ybWFsbHkgb3IKICAgIHJhaXNlIGFuIGV4Y2VwdGlvbi4KICAgICIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleGNfaW5mbz0oTm9uZSwgTm9uZSwgTm9uZSkpOgogICAgICBzZWxmLmZpbmlzaGVkID0gZXhjX2luZm9bMF0gaXMgbm90IE5vbmUKICAgICAgc2VsZi5leGNlcHRpb24gPSBleGNfaW5mb1sxXSBvciBleGNfaW5mb1swXQogICAgICBzZWxmLmV4Y19pbmZvID0gZXhjX2luZm8KCiAgY2xhc3MgX01vbml0b3JUYXNrKF9FeGVjdXRvclNlcnZpY2UuQ2FsbGFibGVUYXNrKToKICAgICIiIk1vbml0b3JUYXNrIGNvbnRpbnVvdXNseSBydW5zIHRvIGVuc3VyZSB0aGF0IHBpcGVsaW5lIG1ha2VzIHByb2dyZXNzLiIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleGVjdXRvcik6CiAgICAgIHNlbGYuX2V4ZWN1dG9yID0gZXhlY3V0b3IKCiAgICBAcHJvcGVydHkKICAgIGRlZiBuYW1lKHNlbGYpOgogICAgICByZXR1cm4gJ21vbml0b3InCgogICAgZGVmIGNhbGwoc2VsZiwgc3RhdGVfc2FtcGxlcik6CiAgICAgIHRyeToKICAgICAgICB1cGRhdGUgPSBzZWxmLl9leGVjdXRvci5hbGxfdXBkYXRlcy5wb2xsKCkKICAgICAgICB3aGlsZSB1cGRhdGU6CiAgICAgICAgICBpZiB1cGRhdGUuY29tbWl0dGVkX2J1bmRsZToKICAgICAgICAgICAgc2VsZi5fZXhlY3V0b3Iuc2NoZWR1bGVfY29uc3VtZXJzKHVwZGF0ZS5jb21taXR0ZWRfYnVuZGxlKQogICAgICAgICAgZWxpZiB1cGRhdGUudW5wcm9jZXNzZWRfYnVuZGxlOgogICAgICAgICAgICBzZWxmLl9leGVjdXRvci5zY2hlZHVsZV91bnByb2Nlc3NlZF9idW5kbGUoCiAgICAgICAgICAgICAgICB1cGRhdGUudHJhbnNmb3JtX2V4ZWN1dG9yLl9hcHBsaWVkX3B0cmFuc2Zvcm0sCiAgICAgICAgICAgICAgICB1cGRhdGUudW5wcm9jZXNzZWRfYnVuZGxlKQogICAgICAgICAgZWxzZToKICAgICAgICAgICAgYXNzZXJ0IHVwZGF0ZS5leGNlcHRpb24KICAgICAgICAgICAgbG9nZ2luZy53YXJuaW5nKCdBIHRhc2sgZmFpbGVkIHdpdGggZXhjZXB0aW9uOiAlcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGUuZXhjZXB0aW9uKQogICAgICAgICAgICBzZWxmLl9leGVjdXRvci52aXNpYmxlX3VwZGF0ZXMub2ZmZXIoCiAgICAgICAgICAgICAgICBfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5fVmlzaWJsZUV4ZWN1dG9yVXBkYXRlKAogICAgICAgICAgICAgICAgICAgIHVwZGF0ZS5leGNfaW5mbykpCiAgICAgICAgICB1cGRhdGUgPSBzZWxmLl9leGVjdXRvci5hbGxfdXBkYXRlcy5wb2xsKCkKICAgICAgICBzZWxmLl9leGVjdXRvci5ldmFsdWF0aW9uX2NvbnRleHQuc2NoZWR1bGVfcGVuZGluZ191bmJsb2NrZWRfdGFza3MoCiAgICAgICAgICAgIHNlbGYuX2V4ZWN1dG9yLmV4ZWN1dG9yX3NlcnZpY2UpCiAgICAgICAgc2VsZi5fYWRkX3dvcmtfaWZfbmVjZXNzYXJ5KHNlbGYuX2ZpcmVfdGltZXJzKCkpCiAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZTogICMgcHlsaW50OiBkaXNhYmxlPWJyb2FkLWV4Y2VwdAogICAgICAgIGxvZ2dpbmcuZXJyb3IoJ01vbml0b3IgdGFzayBkaWVkIGR1ZSB0byBleGNlcHRpb24uXG4gJXMnLCBlKQogICAgICAgIHNlbGYuX2V4ZWN1dG9yLnZpc2libGVfdXBkYXRlcy5vZmZlcigKICAgICAgICAgICAgX0V4ZWN1dG9yU2VydmljZVBhcmFsbGVsRXhlY3V0b3IuX1Zpc2libGVFeGVjdXRvclVwZGF0ZSgKICAgICAgICAgICAgICAgIHN5cy5leGNfaW5mbygpKSkKICAgICAgZmluYWxseToKICAgICAgICBpZiBub3Qgc2VsZi5fc2hvdWxkX3NodXRkb3duKCk6CiAgICAgICAgICBzZWxmLl9leGVjdXRvci5leGVjdXRvcl9zZXJ2aWNlLnN1Ym1pdChzZWxmKQoKICAgIGRlZiBfc2hvdWxkX3NodXRkb3duKHNlbGYpOgogICAgICAiIiJDaGVja3Mgd2hldGhlciB0aGUgcGlwZWxpbmUgaXMgY29tcGxldGVkIGFuZCBzaG91bGQgYmUgc2h1dCBkb3duLgoKICAgICAgSWYgdGhlcmUgaXMgYW55dGhpbmcgaW4gdGhlIHF1ZXVlIG9mIHRhc2tzIHRvIGRvIG9yCiAgICAgIGlmIHRoZXJlIGFyZSBhbnkgcmVhbHRpbWUgdGltZXJzIHNldCwgZG8gbm90IHNodXQgZG93bi4KCiAgICAgIE90aGVyd2lzZSwgY2hlY2sgaWYgYWxsIHRoZSB0cmFuc2Zvcm1zJyB3YXRlcm1hcmtzIGFyZSBjb21wbGV0ZS4KICAgICAgSWYgdGhleSBhcmUgbm90LCB0aGUgcGlwZWxpbmUgaXMgbm90IHByb2dyZXNzaW5nIChzdGFsbCBkZXRlY3RlZCkuCiAgICAgIFdoZXRoZXIgdGhlIHBpcGVsaW5lIGhhcyBzdGFsbGVkIG9yIG5vdCwgdGhlIGV4ZWN1dG9yIHNob3VsZCBzaHV0CiAgICAgIGRvd24gdGhlIHBpcGVsaW5lLgoKICAgICAgUmV0dXJuczoKICAgICAgICBUcnVlIG9ubHkgaWYgdGhlIHBpcGVsaW5lIGhhcyByZWFjaGVkIGEgdGVybWluYWwgc3RhdGUgYW5kIHNob3VsZAogICAgICAgIGJlIHNodXQgZG93bi4KCiAgICAgICIiIgogICAgICBpZiBzZWxmLl9pc19leGVjdXRpbmcoKToKICAgICAgICAjIFRoZXJlIGFyZSBzb21lIGJ1bmRsZXMgc3RpbGwgaW4gcHJvZ3Jlc3MuCiAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgICB3YXRlcm1hcmtfbWFuYWdlciA9IHNlbGYuX2V4ZWN1dG9yLmV2YWx1YXRpb25fY29udGV4dC5fd2F0ZXJtYXJrX21hbmFnZXIKICAgICAgXywgYW55X3VuZmlyZWRfcmVhbHRpbWVfdGltZXJzID0gd2F0ZXJtYXJrX21hbmFnZXIuZXh0cmFjdF9hbGxfdGltZXJzKCkKICAgICAgaWYgYW55X3VuZmlyZWRfcmVhbHRpbWVfdGltZXJzOgogICAgICAgIHJldHVybiBGYWxzZQoKICAgICAgZWxzZToKICAgICAgICBpZiBzZWxmLl9leGVjdXRvci5ldmFsdWF0aW9uX2NvbnRleHQuaXNfZG9uZSgpOgogICAgICAgICAgc2VsZi5fZXhlY3V0b3IudmlzaWJsZV91cGRhdGVzLm9mZmVyKAogICAgICAgICAgICAgIF9FeGVjdXRvclNlcnZpY2VQYXJhbGxlbEV4ZWN1dG9yLl9WaXNpYmxlRXhlY3V0b3JVcGRhdGUoKSkKICAgICAgICBlbHNlOgogICAgICAgICAgIyBOb3RoaW5nIGlzIHNjaGVkdWxlZCBmb3IgZXhlY3V0aW9uLCBidXQgd2F0ZXJtYXJrcyBpbmNvbXBsZXRlLgogICAgICAgICAgc2VsZi5fZXhlY3V0b3IudmlzaWJsZV91cGRhdGVzLm9mZmVyKAogICAgICAgICAgICAgIF9FeGVjdXRvclNlcnZpY2VQYXJhbGxlbEV4ZWN1dG9yLl9WaXNpYmxlRXhlY3V0b3JVcGRhdGUoCiAgICAgICAgICAgICAgICAgIChFeGNlcHRpb24oJ01vbml0b3IgdGFzayBkZXRlY3RlZCBhIHBpcGVsaW5lIHN0YWxsLicpLAogICAgICAgICAgICAgICAgICAgTm9uZSwKICAgICAgICAgICAgICAgICAgIE5vbmUpKSkKICAgICAgICBzZWxmLl9leGVjdXRvci5leGVjdXRvcl9zZXJ2aWNlLnNodXRkb3duKCkKICAgICAgICByZXR1cm4gVHJ1ZQoKICAgIGRlZiBfZmlyZV90aW1lcnMoc2VsZik6CiAgICAgICIiIlNjaGVkdWxlcyB0cmlnZ2VyZWQgY29uc3VtZXJzIGlmIGFueSB0aW1lcnMgZmlyZWQuCgogICAgICBSZXR1cm5zOgogICAgICAgIFRydWUgaWYgdGltZXJzIGZpcmVkLgogICAgICAiIiIKICAgICAgdHJhbnNmb3JtX2ZpcmVkX3RpbWVycywgXyA9ICgKICAgICAgICAgIHNlbGYuX2V4ZWN1dG9yLmV2YWx1YXRpb25fY29udGV4dC5leHRyYWN0X2FsbF90aW1lcnMoKSkKICAgICAgZm9yIGFwcGxpZWRfcHRyYW5zZm9ybSwgZmlyZWRfdGltZXJzIGluIHRyYW5zZm9ybV9maXJlZF90aW1lcnM6CiAgICAgICAgIyBVc2UgYW4gZW1wdHkgY29tbWl0dGVkIGJ1bmRsZS4ganVzdCB0byB0cmlnZ2VyLgogICAgICAgIGVtcHR5X2J1bmRsZSA9ICgKICAgICAgICAgICAgc2VsZi5fZXhlY3V0b3IuZXZhbHVhdGlvbl9jb250ZXh0LmNyZWF0ZV9lbXB0eV9jb21taXR0ZWRfYnVuZGxlKAogICAgICAgICAgICAgICAgYXBwbGllZF9wdHJhbnNmb3JtLmlucHV0c1swXSkpCiAgICAgICAgdGltZXJfY29tcGxldGlvbl9jYWxsYmFjayA9IF9Db21wbGV0aW9uQ2FsbGJhY2soCiAgICAgICAgICAgIHNlbGYuX2V4ZWN1dG9yLmV2YWx1YXRpb25fY29udGV4dCwgc2VsZi5fZXhlY3V0b3IuYWxsX3VwZGF0ZXMsCiAgICAgICAgICAgIHRpbWVyX2ZpcmluZ3M9ZmlyZWRfdGltZXJzKQoKICAgICAgICBzZWxmLl9leGVjdXRvci5zY2hlZHVsZV9jb25zdW1wdGlvbigKICAgICAgICAgICAgYXBwbGllZF9wdHJhbnNmb3JtLCBlbXB0eV9idW5kbGUsIGZpcmVkX3RpbWVycywKICAgICAgICAgICAgdGltZXJfY29tcGxldGlvbl9jYWxsYmFjaykKICAgICAgcmV0dXJuIGJvb2wodHJhbnNmb3JtX2ZpcmVkX3RpbWVycykKCiAgICBkZWYgX2lzX2V4ZWN1dGluZyhzZWxmKToKICAgICAgIiIiQ2hlY2tzIHdoZXRoZXIgdGhlIGpvYiBpcyBzdGlsbCBleGVjdXRpbmcuCgogICAgICBSZXR1cm5zOgogICAgICAgIFRydWUgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIG5vbi1ibG9ja2VkIFRyYW5zZm9ybUV4ZWN1dG9yIGFjdGl2ZS4iIiIKCiAgICAgIGV4ZWN1dG9ycyA9IHNlbGYuX2V4ZWN1dG9yLnRyYW5zZm9ybV9leGVjdXRvcl9zZXJ2aWNlcy5leGVjdXRvcnMKICAgICAgaWYgbm90IGV4ZWN1dG9yczoKICAgICAgICAjIE5vdGhpbmcgaXMgZXhlY3V0aW5nLgogICAgICAgIHJldHVybiBGYWxzZQoKICAgICAgIyBFbnN1cmUgdGhhdCBhdCBsZWFzdCBvbmUgb2YgdGhvc2UgZXhlY3V0b3JzIGlzIG5vdCBibG9ja2VkLgogICAgICBmb3IgdHJhbnNmb3JtX2V4ZWN1dG9yIGluIGV4ZWN1dG9yczoKICAgICAgICBpZiBub3QgdHJhbnNmb3JtX2V4ZWN1dG9yLmJsb2NrZWQ6CiAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICByZXR1cm4gRmFsc2UKCiAgICBkZWYgX2FkZF93b3JrX2lmX25lY2Vzc2FyeShzZWxmLCB0aW1lcnNfZmlyZWQpOgogICAgICAiIiJBZGRzIG1vcmUgd29yayBmcm9tIHRoZSByb290cyBpZiBwaXBlbGluZSByZXF1aXJlcyBtb3JlIGlucHV0LgoKICAgICAgSWYgYWxsIGFjdGl2ZSBUcmFuc2Zvcm1FeGVjdXRvcnMgYXJlIGluIGEgYmxvY2tlZCBzdGF0ZSwgYWRkIG1vcmUgd29yawogICAgICBmcm9tIHJvb3Qgbm9kZXMgdGhhdCBtYXkgaGF2ZSBhZGRpdGlvbmFsIHdvcmsuIFRoaXMgZW5zdXJlcyB0aGF0IGlmIGEKICAgICAgcGlwZWxpbmUgaGFzIGVsZW1lbnRzIGF2YWlsYWJsZSBmcm9tIHRoZSByb290IG5vZGVzIGl0IHdpbGwgYWRkIHRob3NlCiAgICAgIGVsZW1lbnRzIHdoZW4gbmVjZXNzYXJ5LgoKICAgICAgQXJnczoKICAgICAgICB0aW1lcnNfZmlyZWQ6IFRydWUgaWYgYW55IHRpbWVycyBmaXJlZCBwcmlvciB0byB0aGlzIGNhbGwuCiAgICAgICIiIgogICAgICAjIElmIGFueSB0aW1lcnMgaGF2ZSBmaXJlZCwgdGhleSB3aWxsIGFkZCBtb3JlIHdvcms7IE5vIG5lZWQgdG8gYWRkIG1vcmUuCiAgICAgIGlmIHRpbWVyc19maXJlZDoKICAgICAgICByZXR1cm4KCiAgICAgIGlmIHNlbGYuX2lzX2V4ZWN1dGluZygpOgogICAgICAgICMgV2UgaGF2ZSBhdCBsZWFzdCBvbmUgZXhlY3V0b3IgdGhhdCBjYW4gcHJvY2VlZCB3aXRob3V0IGFkZGluZwogICAgICAgICMgYWRkaXRpb25hbCB3b3JrLgogICAgICAgIHJldHVybgoKICAgICAgIyBBbGwgY3VycmVudCBUcmFuc2Zvcm1FeGVjdXRvcnMgYXJlIGJsb2NrZWQ7IGFkZCBtb3JlIHdvcmsgZnJvbSBhbnkKICAgICAgIyBwZW5kaW5nIGJ1bmRsZXMuCiAgICAgIGZvciBhcHBsaWVkX3B0cmFuc2Zvcm0gaW4gc2VsZi5fZXhlY3V0b3IuYWxsX25vZGVzOgogICAgICAgIGlmIG5vdCBzZWxmLl9leGVjdXRvci5ldmFsdWF0aW9uX2NvbnRleHQuaXNfZG9uZShhcHBsaWVkX3B0cmFuc2Zvcm0pOgogICAgICAgICAgcGVuZGluZ19idW5kbGVzID0gc2VsZi5fZXhlY3V0b3Iubm9kZV90b19wZW5kaW5nX2J1bmRsZXMuZ2V0KAogICAgICAgICAgICAgIGFwcGxpZWRfcHRyYW5zZm9ybSwgW10pCiAgICAgICAgICBmb3IgYnVuZGxlIGluIHBlbmRpbmdfYnVuZGxlczoKICAgICAgICAgICAgc2VsZi5fZXhlY3V0b3Iuc2NoZWR1bGVfY29uc3VtcHRpb24oCiAgICAgICAgICAgICAgICBhcHBsaWVkX3B0cmFuc2Zvcm0sIGJ1bmRsZSwgW10sCiAgICAgICAgICAgICAgICBzZWxmLl9leGVjdXRvci5kZWZhdWx0X2NvbXBsZXRpb25fY2FsbGJhY2spCiAgICAgICAgICBzZWxmLl9leGVjdXRvci5ub2RlX3RvX3BlbmRpbmdfYnVuZGxlc1thcHBsaWVkX3B0cmFuc2Zvcm1dID0gW10KfXIchAAAKFg5AAAAX0V4ZWN1dG9yU2VydmljZVBhcmFsbGVsRXhlY3V0b3IuX0V4ZWN1dG9yVXBkYXRlLl9faW5pdF9fWAMAAABkZWZNBwJNFgKHWDQAAABfRXhlY3V0b3JTZXJ2aWNlLl9FeGVjdXRvclNlcnZpY2VXb3JrZXIuX3VwZGF0ZV9uYW1lWAMAAABkZWZLR0tOh1gaAAAAVHJhbnNmb3JtRXhlY3V0b3IuX19pbml0X19YAwAAAGRlZk0SAU0pAYdYQAAAAF9FeGVjdXRvclNlcnZpY2VQYXJhbGxlbEV4ZWN1dG9yLl9WaXNpYmxlRXhlY3V0b3JVcGRhdGUuX19pbml0X19YAwAAAGRlZk0eAk0iAodYFgAAAF9TZXJpYWxFdmFsdWF0aW9uU3RhdGVYBQAAAGNsYXNzS6NLxYdYNwAAAF9FeGVjdXRvclNlcnZpY2VQYXJhbGxlbEV4ZWN1dG9yLl9WaXNpYmxlRXhlY3V0b3JVcGRhdGVYBQAAAGNsYXNzTRcCTSICh1gfAAAAX1NlcmlhbEV2YWx1YXRpb25TdGF0ZS5jb21wbGV0ZVgDAAAAZGVmS7NLtodYIgAAAF9FeGVjdXRvclNlcnZpY2UuQ2FsbGFibGVUYXNrLmNhbGxYAwAAAGRlZksuSzCHWCEAAABfVHJhbnNmb3JtRXhlY3V0b3JTZXJ2aWNlcy5zZXJpYWxYAwAAAGRlZkvYS96HWDkAAABfRXhlY3V0b3JTZXJ2aWNlLl9FeGVjdXRvclNlcnZpY2VXb3JrZXIuX2dldF90YXNrX29yX25vbmVYAwAAAGRlZktPS1eHWCEAAABfQ29tcGxldGlvbkNhbGxiYWNrLmhhbmRsZV9yZXN1bHRYAwAAAGRlZkvxS/+HWBgAAABfUGFyYWxsZWxFdmFsdWF0aW9uU3RhdGVYBQAAAGNsYXNzS5dLoYdYIwAAAF9UcmFuc2Zvcm1FeGVjdXRvclNlcnZpY2VzLnBhcmFsbGVsWAMAAABkZWZL1UvXh1giAAAAX1RyYW5zZm9ybUV2YWx1YXRpb25TdGF0ZS5jb21wbGV0ZVgDAAAAZGVmS5NLlYdYGQAAAF9FeGVjdXRvclNlcnZpY2Uuc2h1dGRvd25YAwAAAGRlZkt4S4WHWCIAAABfRXhlY3V0b3JTZXJ2aWNlLkNhbGxhYmxlVGFzay5uYW1lWAMAAABkZWZLMUs0h1g8AAAAX0V4ZWN1dG9yU2VydmljZVBhcmFsbGVsRXhlY3V0b3Iuc2NoZWR1bGVfdW5wcm9jZXNzZWRfYnVuZGxlWAMAAABkZWZNzQFN0AGHWC0AAABfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5fTW9uaXRvclRhc2tYBQAAAGNsYXNzTSMCTbgCh1geAAAAVHJhbnNmb3JtRXhlY3V0b3IuYXR0ZW1wdF9jYWxsWAMAAABkZWZNaAFNhAGHWBcAAABfRXhlY3V0b3JTZXJ2aWNlLnN1Ym1pdFgDAAAAZGVmS29Lc4dYMAAAAF9FeGVjdXRvclNlcnZpY2UuX0V4ZWN1dG9yU2VydmljZVdvcmtlci5fX2luaXRfX1gDAAAAZGVmSztLRodYMgAAAF9FeGVjdXRvclNlcnZpY2VQYXJhbGxlbEV4ZWN1dG9yLl9UeXBlZFVwZGF0ZVF1ZXVlWAUAAABjbGFzc03kAU0DAodYJAAAAF9UcmFuc2Zvcm1FeGVjdXRvclNlcnZpY2VzLmV4ZWN1dG9yc1gDAAAAZGVmS99L4odYJwAAAF9FeGVjdXRvclNlcnZpY2UuX0V4ZWN1dG9yU2VydmljZVdvcmtlclgFAAAAY2xhc3NLNUtoh1g+AAAAX0V4ZWN1dG9yU2VydmljZVBhcmFsbGVsRXhlY3V0b3IuX01vbml0b3JUYXNrLl9zaG91bGRfc2h1dGRvd25YAwAAAGRlZk1LAk1xAodYHQAAAF9FeGVjdXRvclNlcnZpY2UuQ2FsbGFibGVUYXNrWAUAAABjbGFzc0ssSzSHWCAAAABfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvclgFAAAAY2xhc3NNlgFNuAKHWDcAAABfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5fVHlwZWRVcGRhdGVRdWV1ZS50YWtlWAMAAABkZWZN8wFN/wGHWBkAAABfVHJhbnNmb3JtRXZhbHVhdGlvblN0YXRlWAUAAABjbGFzc0uJS5WHWCQAAABfQ29tcGxldGlvbkNhbGxiYWNrLmhhbmRsZV9leGNlcHRpb25YAwAAAGRlZk0AAU0EAYdYMgAAAF9FeGVjdXRvclNlcnZpY2VQYXJhbGxlbEV4ZWN1dG9yLl9Nb25pdG9yVGFzay5uYW1lWAMAAABkZWZNKQJNLAKHWCEAAABfRXhlY3V0b3JTZXJ2aWNlLmF3YWl0X2NvbXBsZXRpb25YAwAAAGRlZkt0S3eHWBEAAABFeGVjdXRvci5fX2luaXRfX1gDAAAAZGVmTYkBTYsBh1gzAAAAX0V4ZWN1dG9yU2VydmljZVBhcmFsbGVsRXhlY3V0b3Iuc2NoZWR1bGVfY29uc3VtZXJzWAMAAABkZWZNxgFNzAGHWDUAAABfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5zY2hlZHVsZV9jb25zdW1wdGlvblgDAAAAZGVmTdEBTeMBh1gjAAAAX1RyYW5zZm9ybUV4ZWN1dG9yU2VydmljZXMuX19pbml0X19YAwAAAGRlZkvOS9SHWDcAAABfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5fVHlwZWRVcGRhdGVRdWV1ZS5wb2xsWAMAAABkZWZN6wFN8gGHWCYAAABfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5zdGFydFgDAAAAZGVmTasBTbgBh1gxAAAAX0V4ZWN1dG9yU2VydmljZVBhcmFsbGVsRXhlY3V0b3IucmVxdWVzdF9zaHV0ZG93blgDAAAAZGVmTcMBTcUBh1gwAAAAX0V4ZWN1dG9yU2VydmljZS5fRXhlY3V0b3JTZXJ2aWNlV29ya2VyLnNodXRkb3duWAMAAABkZWZLZktoh1gWAAAAVHJhbnNmb3JtRXhlY3V0b3IuY2FsbFgDAAAAZGVmTSoBTWcBh1gIAAAARXhlY3V0b3JYBQAAAGNsYXNzTYYBTZQBh1gcAAAAX0NvbXBsZXRpb25DYWxsYmFjay5fX2luaXRfX1gDAAAAZGVmS+xL8IdYOwAAAF9FeGVjdXRvclNlcnZpY2VQYXJhbGxlbEV4ZWN1dG9yLl9UeXBlZFVwZGF0ZVF1ZXVlLl9faW5pdF9fWAMAAABkZWZN5wFN6gGHWDEAAABfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5hd2FpdF9jb21wbGV0aW9uWAMAAABkZWZNuQFNwgGHWCkAAABfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5fX2luaXRfX1gDAAAAZGVmTZsBTaoBh1giAAAAX1RyYW5zZm9ybUV2YWx1YXRpb25TdGF0ZS5zY2hlZHVsZVgDAAAAZGVmS49LkodYEQAAAFRyYW5zZm9ybUV4ZWN1dG9yWAUAAABjbGFzc00GAU2EAYdYRAAAAF9FeGVjdXRvclNlcnZpY2VQYXJhbGxlbEV4ZWN1dG9yLl9Nb25pdG9yVGFzay5fYWRkX3dvcmtfaWZfbmVjZXNzYXJ5WAMAAABkZWZNmQJNuAKHWB8AAABfU2VyaWFsRXZhbHVhdGlvblN0YXRlLl9faW5pdF9fWAMAAABkZWZLrUuyh1gOAAAARXhlY3V0b3Iuc3RhcnRYAwAAAGRlZk2MAU2OAYdYIgAAAF9UcmFuc2Zvcm1FdmFsdWF0aW9uU3RhdGUuX19pbml0X19YAwAAAGRlZkuLS46HWBMAAABfQ29tcGxldGlvbkNhbGxiYWNrWAUAAABjbGFzc0vkTQQBh1gyAAAAX0V4ZWN1dG9yU2VydmljZVBhcmFsbGVsRXhlY3V0b3IuX01vbml0b3JUYXNrLmNhbGxYAwAAAGRlZk0tAk1KAodYHwAAAF9TZXJpYWxFdmFsdWF0aW9uU3RhdGUuc2NoZWR1bGVYAwAAAGRlZku3S7mHWDsAAABfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5fTW9uaXRvclRhc2suX2lzX2V4ZWN1dGluZ1gDAAAAZGVmTYgCTZgCh1g2AAAAX0V4ZWN1dG9yU2VydmljZVBhcmFsbGVsRXhlY3V0b3IuX01vbml0b3JUYXNrLl9faW5pdF9fWAMAAABkZWZNJgJNKAKHWDMAAABfU2VyaWFsRXZhbHVhdGlvblN0YXRlLl91cGRhdGVfY3VycmVudGx5X2V2YWx1YXRpbmdYAwAAAGRlZku6S8WHWBEAAABFeGVjdXRvci5zaHV0ZG93blgDAAAAZGVmTZIBTZQBh1gwAAAAX0V4ZWN1dG9yU2VydmljZVBhcmFsbGVsRXhlY3V0b3IuX0V4ZWN1dG9yVXBkYXRlWAUAAABjbGFzc00EAk0WAodYGQAAAF9FeGVjdXRvclNlcnZpY2UuX19pbml0X19YAwAAAGRlZktpS26HWDgAAABfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5fVHlwZWRVcGRhdGVRdWV1ZS5vZmZlclgDAAAAZGVmTQACTQMCh1gQAAAAX0V4ZWN1dG9yU2VydmljZVgFAAAAY2xhc3NLKUuFh1g6AAAAX0V4ZWN1dG9yU2VydmljZVBhcmFsbGVsRXhlY3V0b3IuX01vbml0b3JUYXNrLl9maXJlX3RpbWVyc1gDAAAAZGVmTXICTYcCh1gZAAAARXhlY3V0b3IuYXdhaXRfY29tcGxldGlvblgDAAAAZGVmTY8BTZEBh1gaAAAAX1RyYW5zZm9ybUV4ZWN1dG9yU2VydmljZXNYBQAAAGNsYXNzS8dL4odYKwAAAF9FeGVjdXRvclNlcnZpY2UuX0V4ZWN1dG9yU2VydmljZVdvcmtlci5ydW5YAwAAAGRlZktYS2WHdX1yHYQAAChYDgAAAEV4ZWN1dG9yLnN0YXJ0auloAABYHgAAAFRyYW5zZm9ybUV4ZWN1dG9yLmF0dGVtcHRfY2FsbGrpaAAAWBEAAABUcmFuc2Zvcm1FeGVjdXRvcmrpaAAAWBYAAABUcmFuc2Zvcm1FeGVjdXRvci5jYWxsauloAABYCAAAAEV4ZWN1dG9yauloAABYEQAAAEV4ZWN1dG9yLnNodXRkb3duauloAABYGQAAAEV4ZWN1dG9yLmF3YWl0X2NvbXBsZXRpb25q6WgAAHVqfWkAAFgjAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXhlY3V0b3JyHoQAAIWBch+EAAB9ciCEAABidFUzYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsubmV4bWFya191dGlsKFiuDAAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJVdGlsaXRpZXMgZm9yIHRoZSBOZXhtYXJrIHN1aXRlLgoKVGhlIE5leG1hcmsgc3VpdGUgaXMgYSBzZXJpZXMgb2YgcXVlcmllcyAoc3RyZWFtaW5nIHBpcGVsaW5lcykgcGVyZm9ybWVkCm9uIGEgc2ltdWxhdGlvbiBvZiBhdWN0aW9uIGV2ZW50cy4gVGhpcyB1dGlsIGluY2x1ZGVzOgoKICAtIEEgQ29tbWFuZCBjbGFzcyB1c2VkIHRvIHRlcm1pbmF0ZSB0aGUgc3RyZWFtaW5nIGpvYnMKICAgIGxhdW5jaGVkIGluIG5leG1hcmtfbGF1bmNoZXIucHkgYnkgdGhlIERpcmVjdFJ1bm5lci4KICAtIEEgUGFyc2VFdmVudEZuIERvRm4gdG8gcGFyc2UgZXZlbnRzIHJlY2VpdmVkIGZyb20gUHViU3ViLgoKVXNhZ2U6CgpUbyBydW4gYSBwcm9jZXNzIGZvciBhIGNlcnRhaW4gZHVyYXRpb24sIGRlZmluZSBpbiB0aGUgY29kZToKICBjb21tYW5kID0gQ29tbWFuZChwcm9jZXNzX3RvX3Rlcm1pbmF0ZSwgYXJncykKICBjb21tYW5kLnJ1bih0aW1lb3V0PWR1cmF0aW9uKQoKIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydApmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCgppbXBvcnQgbG9nZ2luZwppbXBvcnQgdGhyZWFkaW5nCgppbXBvcnQgYXBhY2hlX2JlYW0gYXMgYmVhbQpmcm9tIGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm1vZGVscyBpbXBvcnQgbmV4bWFya19tb2RlbAoKCmNsYXNzIENvbW1hbmQob2JqZWN0KToKICBkZWYgX19pbml0X18oc2VsZiwgY21kLCBhcmdzKToKICAgIHNlbGYuY21kID0gY21kCiAgICBzZWxmLmFyZ3MgPSBhcmdzCgogIGRlZiBydW4oc2VsZiwgdGltZW91dCk6CiAgICBkZWYgdGhyZWFkX3RhcmdldCgpOgogICAgICBsb2dnaW5nLmRlYnVnKCdTdGFydGluZyB0aHJlYWQgZm9yICVkIHNlY29uZHM6ICVzJywKICAgICAgICAgICAgICAgICAgICB0aW1lb3V0LCBzZWxmLmNtZC5fX25hbWVfXykKCiAgICAgIHNlbGYuY21kKCpzZWxmLmFyZ3MpCiAgICAgIGxvZ2dpbmcuaW5mbygnJWQgc2Vjb25kcyBlbGFwc2VkLiBUaHJlYWQgKCVzKSBmaW5pc2hlZC4nLAogICAgICAgICAgICAgICAgICAgdGltZW91dCwgc2VsZi5jbWQuX19uYW1lX18pCgogICAgdGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9dGhyZWFkX3RhcmdldCwgbmFtZT0nVGhyZWFkLXRpbWVvdXQnKQogICAgdGhyZWFkLmRhZW1vbiA9IFRydWUKICAgIHRocmVhZC5zdGFydCgpCiAgICB0aHJlYWQuam9pbih0aW1lb3V0KQoKCmNsYXNzIFBhcnNlRXZlbnRGbihiZWFtLkRvRm4pOgogICIiIlBhcnNlcyB0aGUgcmF3IGV2ZW50IGluZm8gaW50byBhIFB5dGhvbiBvYmplY3RzLgoKICBFYWNoIGV2ZW50IGxpbmUgaGFzIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgoKICAgIHBlcnNvbjogPGlkIHN0YXJ0aW5nIHdpdGggJ3AnPixuYW1lLGVtYWlsLGNyZWRpdF9jYXJkLGNpdHksIFwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSx0aW1lc3RhbXAsZXh0cmEKICAgIGF1Y3Rpb246IDxpZCBzdGFydGluZyB3aXRoICdhJz4saXRlbV9uYW1lLCBkZXNjcmlwdGlvbixpbml0aWFsX2JpZCwgXAogICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVfcHJpY2UsdGltZXN0YW1wLGV4cGlyZXMsc2VsbGVyLGNhdGVnb3J5LGV4dHJhCiAgICBiaWQ6IDxhdWN0aW9uIHN0YXJ0aW5nIHdpdGggJ2InPixiaWRkZXIscHJpY2UsdGltZXN0YW1wLGV4dHJhCgogIEZvciBleGFtcGxlOgoKICAgICdwMTIzNDUsbWFyaWEsbWFyaWFAbWFyaWEuY29tLDEyMzQtNTY3OC05MDEyLTM0NTYsIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bm55dmFsZSxDQSwxNTI4MDk4ODMxNTM2JwogICAgJ2ExMjM0NSxjYXI2NywyMDEyIGh5dW5kYWkgZWxhbnRyYSwxNTAwMCwyMDAwMCwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUyODA5ODgzMTUzNiwyMDE4MDYzMCxtYXJpYSx2ZWhpY2xlJwogICAgJ2IxMjM0NSxtYXJpYSwyMDAwMCwxNTI4MDk4ODMxNTM2JwogICIiIgoKICBkZWYgcHJvY2VzcyhzZWxmLCBlbGVtKToKICAgIG1vZGVsX2RpY3QgPSB7CiAgICAgICAgJ3AnOiBuZXhtYXJrX21vZGVsLlBlcnNvbiwKICAgICAgICAnYSc6IG5leG1hcmtfbW9kZWwuQXVjdGlvbiwKICAgICAgICAnYic6IG5leG1hcmtfbW9kZWwuQmlkLAogICAgfQogICAgcm93ID0gZWxlbS5zcGxpdCgnLCcpCiAgICBtb2RlbCA9IG1vZGVsX2RpY3QuZ2V0KGVsZW1bMF0pCiAgICBpZiBub3QgbW9kZWw6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgZXZlbnQ6ICVzLicgJSByb3cpCgogICAgZXZlbnQgPSBtb2RlbCgqcm93KQogICAgbG9nZ2luZy5kZWJ1ZygnUGFyc2VkIGV2ZW50OiAlcycsIGV2ZW50KQogICAgeWllbGQgZXZlbnQKCgpkZWYgZGlzcGxheShlbG0pOgogIGxvZ2dpbmcuZGVidWcoZWxtKQogIHJldHVybiBlbG0KfXIhhAAAKFgQAAAAQ29tbWFuZC5fX2luaXRfX1gDAAAAZGVmSy5LMYdYFAAAAFBhcnNlRXZlbnRGbi5wcm9jZXNzWAMAAABkZWZLVUtjh1gHAAAAZGlzcGxheVgDAAAAZGVmS2VLaIdYDAAAAFBhcnNlRXZlbnRGblgFAAAAY2xhc3NLQUtjh1gHAAAAQ29tbWFuZFgFAAAAY2xhc3NLLUs/h1gLAAAAQ29tbWFuZC5ydW5YAwAAAGRlZksySz+HWBkAAABDb21tYW5kLnJ1bi50aHJlYWRfdGFyZ2V0WAMAAABkZWZLM0s6h3V9ciKEAAAoWAsAAABDb21tYW5kLnJ1bmoRYAAAWAwAAABQYXJzZUV2ZW50Rm5qEWAAAFgHAAAAQ29tbWFuZGoRYAAAWBQAAABQYXJzZUV2ZW50Rm4ucHJvY2Vzc2oRYAAAWAcAAABkaXNwbGF5ahFgAAB1an1pAABYMwAAAGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm5leG1hcmtfdXRpbHIjhAAAhYFyJIQAAH1yJYQAAGJ0VTVhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5xdWVyaWVzLnF1ZXJ5MihY3wYAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiTmV4bWFyayBRdWVyeSAyOiBTZWxlY3QgYXVjdGlvbnMgYnkgYXVjdGlvbiBpZC4KClRoZSBOZXhtYXJrIHN1aXRlIGlzIGEgc2VyaWVzIG9mIHF1ZXJpZXMgKHN0cmVhbWluZyBwaXBlbGluZXMpIHBlcmZvcm1lZApvbiBhIHNpbXVsYXRpb24gb2YgYXVjdGlvbiBldmVudHMuCgpUaGlzIHF1ZXJ5IHNlbGVjdHMgYXVjdGlvbnMgKGl0ZW1zKSB0aGF0IGhhdmUgYSBwYXJ0aWN1bGFyIGlkLgpJdCBpbGx1c3RyYXRlcyBhIHNpbXBsZSBmaWx0ZXIuCiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBhcGFjaGVfYmVhbSBhcyBiZWFtCmZyb20gYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsubW9kZWxzIGltcG9ydCBuZXhtYXJrX21vZGVsCmZyb20gYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsubmV4bWFya191dGlsIGltcG9ydCBQYXJzZUV2ZW50Rm4KZnJvbSBhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5uZXhtYXJrX3V0aWwgaW1wb3J0IGRpc3BsYXkKCgpkZWYgbG9hZChyYXdfZXZlbnRzLCBtZXRhZGF0YT1Ob25lKToKICByZXR1cm4gKHJhd19ldmVudHMKICAgICAgICAgIHwgJ1BhcnNlRXZlbnRGbicgPj4gYmVhbS5QYXJEbyhQYXJzZUV2ZW50Rm4oKSkKICAgICAgICAgIHwgJ0ZpbHRlckluQXVjdGlvbnNXaXRoU2VsZWN0ZWRJZCcgPj4gYmVhbS5GaWx0ZXIoCiAgICAgICAgICAgICAgbGFtYmRhIGV2ZW50OiAoaXNpbnN0YW5jZShldmVudCwgbmV4bWFya19tb2RlbC5BdWN0aW9uKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBldmVudC5pZCA9PSBtZXRhZGF0YS5nZXQoJ2F1Y3Rpb25faWQnKSkpCiAgICAgICAgICB8ICdEaXNwbGF5UXVlcnkyJyA+PiBiZWFtLk1hcChkaXNwbGF5KQogICAgICAgICApICAjIHB5bGludDogZGlzYWJsZT1leHByZXNzaW9uLW5vdC1hc3NpZ25lZAp9ciaEAABYBAAAAGxvYWRYAwAAAGRlZksjSyuHc31yJ4QAAFgEAAAAbG9hZGpMWwAAc2p9aQAAWDUAAABhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5xdWVyaWVzLnF1ZXJ5MnIohAAAhYFyKYQAAH1yKoQAAGJ0VSBhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbShYmyoAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoiIiJHQ1MgZmlsZSBzeXN0ZW0gaW1wbGVtZW50YXRpb24gZm9yIGFjY2Vzc2luZyBmaWxlcyBvbiBHQ1MuIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKZnJvbSBidWlsdGlucyBpbXBvcnQgemlwCgpmcm9tIGZ1dHVyZS51dGlscyBpbXBvcnQgaXRlcml0ZW1zCgpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0gaW1wb3J0IEJlYW1JT0Vycm9yCmZyb20gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbSBpbXBvcnQgQ29tcHJlc3NlZEZpbGUKZnJvbSBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtIGltcG9ydCBDb21wcmVzc2lvblR5cGVzCmZyb20gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbSBpbXBvcnQgRmlsZU1ldGFkYXRhCmZyb20gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbSBpbXBvcnQgRmlsZVN5c3RlbQpmcm9tIGFwYWNoZV9iZWFtLmlvLmdjcCBpbXBvcnQgZ2NzaW8KCl9fYWxsX18gPSBbJ0dDU0ZpbGVTeXN0ZW0nXQoKCmNsYXNzIEdDU0ZpbGVTeXN0ZW0oRmlsZVN5c3RlbSk6CiAgIiIiQSBHQ1MgYGBGaWxlU3lzdGVtYGAgaW1wbGVtZW50YXRpb24gZm9yIGFjY2Vzc2luZyBmaWxlcyBvbiBHQ1MuCiAgIiIiCgogIENIVU5LX1NJWkUgPSBnY3Npby5NQVhfQkFUQ0hfT1BFUkFUSU9OX1NJWkUgICMgQ2h1Y2sgc2l6ZSBpbiBiYXRjaCBvcGVyYXRpb25zCiAgR0NTX1BSRUZJWCA9ICdnczovLycKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIHNjaGVtZShjbHMpOgogICAgIiIiVVJJIHNjaGVtZSBmb3IgdGhlIEZpbGVTeXN0ZW0KICAgICIiIgogICAgcmV0dXJuICdncycKCiAgZGVmIGpvaW4oc2VsZiwgYmFzZXBhdGgsICpwYXRocyk6CiAgICAiIiJKb2luIHR3byBvciBtb3JlIHBhdGhuYW1lIGNvbXBvbmVudHMgZm9yIHRoZSBmaWxlc3lzdGVtCgogICAgQXJnczoKICAgICAgYmFzZXBhdGg6IHN0cmluZyBwYXRoIG9mIHRoZSBmaXJzdCBjb21wb25lbnQgb2YgdGhlIHBhdGgKICAgICAgcGF0aHM6IHBhdGggY29tcG9uZW50cyB0byBiZSBhZGRlZAoKICAgIFJldHVybnM6IGZ1bGwgcGF0aCBhZnRlciBjb21iaW5pbmcgYWxsIHRoZSBwYXNzZWQgY29tcG9uZW50cwogICAgIiIiCiAgICBpZiBub3QgYmFzZXBhdGguc3RhcnRzd2l0aChHQ1NGaWxlU3lzdGVtLkdDU19QUkVGSVgpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdCYXNlcGF0aCAlciBtdXN0IGJlIEdDUyBwYXRoLicgJSBiYXNlcGF0aCkKICAgIHBhdGggPSBiYXNlcGF0aAogICAgZm9yIHAgaW4gcGF0aHM6CiAgICAgIHBhdGggPSBwYXRoLnJzdHJpcCgnLycpICsgJy8nICsgcC5sc3RyaXAoJy8nKQogICAgcmV0dXJuIHBhdGgKCiAgZGVmIHNwbGl0KHNlbGYsIHBhdGgpOgogICAgIiIiU3BsaXRzIHRoZSBnaXZlbiBwYXRoIGludG8gdHdvIHBhcnRzLgoKICAgIFNwbGl0cyB0aGUgcGF0aCBpbnRvIGEgcGFpciAoaGVhZCwgdGFpbCkgc3VjaCB0aGF0IHRhaWwgY29udGFpbnMgdGhlIGxhc3QKICAgIGNvbXBvbmVudCBvZiB0aGUgcGF0aCBhbmQgaGVhZCBjb250YWlucyBldmVyeXRoaW5nIHVwIHRvIHRoYXQuCgogICAgSGVhZCB3aWxsIGluY2x1ZGUgdGhlIEdDUyBwcmVmaXggKCdnczovLycpLgoKICAgIEFyZ3M6CiAgICAgIHBhdGg6IHBhdGggYXMgYSBzdHJpbmcKICAgIFJldHVybnM6CiAgICAgIGEgcGFpciBvZiBwYXRoIGNvbXBvbmVudHMgYXMgc3RyaW5ncy4KICAgICIiIgogICAgcGF0aCA9IHBhdGguc3RyaXAoKQogICAgaWYgbm90IHBhdGguc3RhcnRzd2l0aChHQ1NGaWxlU3lzdGVtLkdDU19QUkVGSVgpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdQYXRoICVyIG11c3QgYmUgR0NTIHBhdGguJyAlIHBhdGgpCgogICAgcHJlZml4X2xlbiA9IGxlbihHQ1NGaWxlU3lzdGVtLkdDU19QUkVGSVgpCiAgICBsYXN0X3NlcCA9IHBhdGhbcHJlZml4X2xlbjpdLnJmaW5kKCcvJykKICAgIGlmIGxhc3Rfc2VwID49IDA6CiAgICAgIGxhc3Rfc2VwICs9IHByZWZpeF9sZW4KCiAgICBpZiBsYXN0X3NlcCA+IDA6CiAgICAgIHJldHVybiAocGF0aFs6bGFzdF9zZXBdLCBwYXRoW2xhc3Rfc2VwICsgMTpdKQogICAgZWxpZiBsYXN0X3NlcCA8IDA6CiAgICAgIHJldHVybiAocGF0aCwgJycpCiAgICBlbHNlOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIHBhdGg6ICVzJyAlIHBhdGgpCgogIGRlZiBta2RpcnMoc2VsZiwgcGF0aCk6CiAgICAiIiJSZWN1cnNpdmVseSBjcmVhdGUgZGlyZWN0b3JpZXMgZm9yIHRoZSBwcm92aWRlZCBwYXRoLgoKICAgIEFyZ3M6CiAgICAgIHBhdGg6IHN0cmluZyBwYXRoIG9mIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIHRoYXQgc2hvdWxkIGJlIGNyZWF0ZWQKCiAgICBSYWlzZXM6CiAgICAgIElPRXJyb3IgaWYgbGVhZiBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMuCiAgICAiIiIKICAgIHBhc3MKCiAgZGVmIGhhc19kaXJzKHNlbGYpOgogICAgIiIiV2hldGhlciB0aGlzIEZpbGVTeXN0ZW0gc3VwcG9ydHMgZGlyZWN0b3JpZXMuIiIiCiAgICByZXR1cm4gRmFsc2UKCiAgZGVmIF9saXN0KHNlbGYsIGRpcl9vcl9wcmVmaXgpOgogICAgIiIiTGlzdCBmaWxlcyBpbiBhIGxvY2F0aW9uLgoKICAgIExpc3RpbmcgaXMgbm9uLXJlY3Vyc2l2ZSwgZm9yIGZpbGVzeXN0ZW1zIHRoYXQgc3VwcG9ydCBkaXJlY3Rvcmllcy4KCiAgICBBcmdzOgogICAgICBkaXJfb3JfcHJlZml4OiAoc3RyaW5nKSBBIGRpcmVjdG9yeSBvciBsb2NhdGlvbiBwcmVmaXggKGZvciBmaWxlc3lzdGVtcwogICAgICAgIHRoYXQgZG9uJ3QgaGF2ZSBkaXJlY3RvcmllcykuCgogICAgUmV0dXJuczoKICAgICAgR2VuZXJhdG9yIG9mIGBgRmlsZU1ldGFkYXRhYGAgb2JqZWN0cy4KCiAgICBSYWlzZXM6CiAgICAgIGBgQmVhbUlPRXJyb3JgYCBpZiBsaXN0aW5nIGZhaWxzLCBidXQgbm90IGlmIG5vIGZpbGVzIHdlcmUgZm91bmQuCiAgICAiIiIKICAgIHRyeToKICAgICAgZm9yIHBhdGgsIHNpemUgaW4gaXRlcml0ZW1zKGdjc2lvLkdjc0lPKCkubGlzdF9wcmVmaXgoZGlyX29yX3ByZWZpeCkpOgogICAgICAgIHlpZWxkIEZpbGVNZXRhZGF0YShwYXRoLCBzaXplKQogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOiAgIyBweWxpbnQ6IGRpc2FibGU9YnJvYWQtZXhjZXB0CiAgICAgIHJhaXNlIEJlYW1JT0Vycm9yKCJMaXN0IG9wZXJhdGlvbiBmYWlsZWQiLCB7ZGlyX29yX3ByZWZpeDogZX0pCgogIGRlZiBfcGF0aF9vcGVuKHNlbGYsIHBhdGgsIG1vZGUsIG1pbWVfdHlwZT0nYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywKICAgICAgICAgICAgICAgICBjb21wcmVzc2lvbl90eXBlPUNvbXByZXNzaW9uVHlwZXMuQVVUTyk6CiAgICAiIiJIZWxwZXIgZnVuY3Rpb25zIHRvIG9wZW4gYSBmaWxlIGluIHRoZSBwcm92aWRlZCBtb2RlLgogICAgIiIiCiAgICBjb21wcmVzc2lvbl90eXBlID0gRmlsZVN5c3RlbS5fZ2V0X2NvbXByZXNzaW9uX3R5cGUocGF0aCwgY29tcHJlc3Npb25fdHlwZSkKICAgIG1pbWVfdHlwZSA9IENvbXByZXNzaW9uVHlwZXMubWltZV90eXBlKGNvbXByZXNzaW9uX3R5cGUsIG1pbWVfdHlwZSkKICAgIHJhd19maWxlID0gZ2NzaW8uR2NzSU8oKS5vcGVuKHBhdGgsIG1vZGUsIG1pbWVfdHlwZT1taW1lX3R5cGUpCiAgICBpZiBjb21wcmVzc2lvbl90eXBlID09IENvbXByZXNzaW9uVHlwZXMuVU5DT01QUkVTU0VEOgogICAgICByZXR1cm4gcmF3X2ZpbGUKICAgIHJldHVybiBDb21wcmVzc2VkRmlsZShyYXdfZmlsZSwgY29tcHJlc3Npb25fdHlwZT1jb21wcmVzc2lvbl90eXBlKQoKICBkZWYgY3JlYXRlKHNlbGYsIHBhdGgsIG1pbWVfdHlwZT0nYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywKICAgICAgICAgICAgIGNvbXByZXNzaW9uX3R5cGU9Q29tcHJlc3Npb25UeXBlcy5BVVRPKToKICAgICIiIlJldHVybnMgYSB3cml0ZSBjaGFubmVsIGZvciB0aGUgZ2l2ZW4gZmlsZSBwYXRoLgoKICAgIEFyZ3M6CiAgICAgIHBhdGg6IHN0cmluZyBwYXRoIG9mIHRoZSBmaWxlIG9iamVjdCB0byBiZSB3cml0dGVuIHRvIHRoZSBzeXN0ZW0KICAgICAgbWltZV90eXBlOiBNSU1FIHR5cGUgdG8gc3BlY2lmeSB0aGUgdHlwZSBvZiBjb250ZW50IGluIHRoZSBmaWxlIG9iamVjdAogICAgICBjb21wcmVzc2lvbl90eXBlOiBUeXBlIG9mIGNvbXByZXNzaW9uIHRvIGJlIHVzZWQgZm9yIHRoaXMgb2JqZWN0CgogICAgUmV0dXJuczogZmlsZSBoYW5kbGUgd2l0aCBhIGNsb3NlIGZ1bmN0aW9uIGZvciB0aGUgdXNlciB0byB1c2UKICAgICIiIgogICAgcmV0dXJuIHNlbGYuX3BhdGhfb3BlbihwYXRoLCAnd2InLCBtaW1lX3R5cGUsIGNvbXByZXNzaW9uX3R5cGUpCgogIGRlZiBvcGVuKHNlbGYsIHBhdGgsIG1pbWVfdHlwZT0nYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywKICAgICAgICAgICBjb21wcmVzc2lvbl90eXBlPUNvbXByZXNzaW9uVHlwZXMuQVVUTyk6CiAgICAiIiJSZXR1cm5zIGEgcmVhZCBjaGFubmVsIGZvciB0aGUgZ2l2ZW4gZmlsZSBwYXRoLgoKICAgIEFyZ3M6CiAgICAgIHBhdGg6IHN0cmluZyBwYXRoIG9mIHRoZSBmaWxlIG9iamVjdCB0byBiZSB3cml0dGVuIHRvIHRoZSBzeXN0ZW0KICAgICAgbWltZV90eXBlOiBNSU1FIHR5cGUgdG8gc3BlY2lmeSB0aGUgdHlwZSBvZiBjb250ZW50IGluIHRoZSBmaWxlIG9iamVjdAogICAgICBjb21wcmVzc2lvbl90eXBlOiBUeXBlIG9mIGNvbXByZXNzaW9uIHRvIGJlIHVzZWQgZm9yIHRoaXMgb2JqZWN0CgogICAgUmV0dXJuczogZmlsZSBoYW5kbGUgd2l0aCBhIGNsb3NlIGZ1bmN0aW9uIGZvciB0aGUgdXNlciB0byB1c2UKICAgICIiIgogICAgcmV0dXJuIHNlbGYuX3BhdGhfb3BlbihwYXRoLCAncmInLCBtaW1lX3R5cGUsIGNvbXByZXNzaW9uX3R5cGUpCgogIGRlZiBjb3B5KHNlbGYsIHNvdXJjZV9maWxlX25hbWVzLCBkZXN0aW5hdGlvbl9maWxlX25hbWVzKToKICAgICIiIlJlY3Vyc2l2ZWx5IGNvcHkgdGhlIGZpbGUgdHJlZSBmcm9tIHRoZSBzb3VyY2UgdG8gdGhlIGRlc3RpbmF0aW9uCgogICAgQXJnczoKICAgICAgc291cmNlX2ZpbGVfbmFtZXM6IGxpc3Qgb2Ygc291cmNlIGZpbGUgb2JqZWN0cyB0aGF0IG5lZWRzIHRvIGJlIGNvcGllZAogICAgICBkZXN0aW5hdGlvbl9maWxlX25hbWVzOiBsaXN0IG9mIGRlc3RpbmF0aW9uIG9mIHRoZSBuZXcgb2JqZWN0CgogICAgUmFpc2VzOgogICAgICBgYEJlYW1JT0Vycm9yYGAgaWYgYW55IG9mIHRoZSBjb3B5IG9wZXJhdGlvbnMgZmFpbAogICAgIiIiCiAgICBlcnJfbXNnID0gKCJzb3VyY2VfZmlsZV9uYW1lcyBhbmQgZGVzdGluYXRpb25fZmlsZV9uYW1lcyBzaG91bGQgIgogICAgICAgICAgICAgICAiYmUgZXF1YWwgaW4gbGVuZ3RoIikKICAgIGFzc2VydCBsZW4oc291cmNlX2ZpbGVfbmFtZXMpID09IGxlbihkZXN0aW5hdGlvbl9maWxlX25hbWVzKSwgZXJyX21zZwoKICAgIGRlZiBfY29weV9wYXRoKHNvdXJjZSwgZGVzdGluYXRpb24pOgogICAgICAiIiJSZWN1cnNpdmVseSBjb3B5IHRoZSBmaWxlIHRyZWUgZnJvbSB0aGUgc291cmNlIHRvIHRoZSBkZXN0aW5hdGlvbgogICAgICAiIiIKICAgICAgaWYgbm90IGRlc3RpbmF0aW9uLnN0YXJ0c3dpdGgoR0NTRmlsZVN5c3RlbS5HQ1NfUFJFRklYKToKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdEZXN0aW5hdGlvbiAlciBtdXN0IGJlIEdDUyBwYXRoLicgJSBkZXN0aW5hdGlvbikKICAgICAgIyBVc2UgY29weV90cmVlIGlmIHRoZSBwYXRoIGVuZHMgd2l0aCAvIGFzIGl0IGlzIGEgZGlyZWN0b3J5CiAgICAgIGlmIHNvdXJjZS5lbmRzd2l0aCgnLycpOgogICAgICAgIGdjc2lvLkdjc0lPKCkuY29weXRyZWUoc291cmNlLCBkZXN0aW5hdGlvbikKICAgICAgZWxzZToKICAgICAgICBnY3Npby5HY3NJTygpLmNvcHkoc291cmNlLCBkZXN0aW5hdGlvbikKCiAgICBleGNlcHRpb25zID0ge30KICAgIGZvciBzb3VyY2UsIGRlc3RpbmF0aW9uIGluIHppcChzb3VyY2VfZmlsZV9uYW1lcywgZGVzdGluYXRpb25fZmlsZV9uYW1lcyk6CiAgICAgIHRyeToKICAgICAgICBfY29weV9wYXRoKHNvdXJjZSwgZGVzdGluYXRpb24pCiAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZTogICMgcHlsaW50OiBkaXNhYmxlPWJyb2FkLWV4Y2VwdAogICAgICAgIGV4Y2VwdGlvbnNbKHNvdXJjZSwgZGVzdGluYXRpb24pXSA9IGUKCiAgICBpZiBleGNlcHRpb25zOgogICAgICByYWlzZSBCZWFtSU9FcnJvcigiQ29weSBvcGVyYXRpb24gZmFpbGVkIiwgZXhjZXB0aW9ucykKCiAgZGVmIHJlbmFtZShzZWxmLCBzb3VyY2VfZmlsZV9uYW1lcywgZGVzdGluYXRpb25fZmlsZV9uYW1lcyk6CiAgICAiIiJSZW5hbWUgdGhlIGZpbGVzIGF0IHRoZSBzb3VyY2UgbGlzdCB0byB0aGUgZGVzdGluYXRpb24gbGlzdC4KICAgIFNvdXJjZSBhbmQgZGVzdGluYXRpb24gbGlzdHMgc2hvdWxkIGJlIG9mIHRoZSBzYW1lIHNpemUuCgogICAgQXJnczoKICAgICAgc291cmNlX2ZpbGVfbmFtZXM6IExpc3Qgb2YgZmlsZSBwYXRocyB0aGF0IG5lZWQgdG8gYmUgbW92ZWQKICAgICAgZGVzdGluYXRpb25fZmlsZV9uYW1lczogTGlzdCBvZiBkZXN0aW5hdGlvbl9maWxlX25hbWVzIGZvciB0aGUgZmlsZXMKCiAgICBSYWlzZXM6CiAgICAgIGBgQmVhbUlPRXJyb3JgYCBpZiBhbnkgb2YgdGhlIHJlbmFtZSBvcGVyYXRpb25zIGZhaWwKICAgICIiIgogICAgZXJyX21zZyA9ICgic291cmNlX2ZpbGVfbmFtZXMgYW5kIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXMgc2hvdWxkICIKICAgICAgICAgICAgICAgImJlIGVxdWFsIGluIGxlbmd0aCIpCiAgICBhc3NlcnQgbGVuKHNvdXJjZV9maWxlX25hbWVzKSA9PSBsZW4oZGVzdGluYXRpb25fZmlsZV9uYW1lcyksIGVycl9tc2cKCiAgICBnY3NfYmF0Y2hlcyA9IFtdCiAgICBnY3NfY3VycmVudF9iYXRjaCA9IFtdCiAgICBmb3Igc3JjLCBkZXN0IGluIHppcChzb3VyY2VfZmlsZV9uYW1lcywgZGVzdGluYXRpb25fZmlsZV9uYW1lcyk6CiAgICAgIGdjc19jdXJyZW50X2JhdGNoLmFwcGVuZCgoc3JjLCBkZXN0KSkKICAgICAgaWYgbGVuKGdjc19jdXJyZW50X2JhdGNoKSA9PSBzZWxmLkNIVU5LX1NJWkU6CiAgICAgICAgZ2NzX2JhdGNoZXMuYXBwZW5kKGdjc19jdXJyZW50X2JhdGNoKQogICAgICAgIGdjc19jdXJyZW50X2JhdGNoID0gW10KICAgIGlmIGdjc19jdXJyZW50X2JhdGNoOgogICAgICBnY3NfYmF0Y2hlcy5hcHBlbmQoZ2NzX2N1cnJlbnRfYmF0Y2gpCgogICAgIyBFeGVjdXRlIEdDUyByZW5hbWVzIGlmIGFueSBhbmQgcmV0dXJuIGV4Y2VwdGlvbnMuCiAgICBleGNlcHRpb25zID0ge30KICAgIGZvciBiYXRjaCBpbiBnY3NfYmF0Y2hlczoKICAgICAgY29weV9zdGF0dXNlcyA9IGdjc2lvLkdjc0lPKCkuY29weV9iYXRjaChiYXRjaCkKICAgICAgY29weV9zdWNjZWVkZWQgPSBbXQogICAgICBmb3Igc3JjLCBkZXN0LCBleGNlcHRpb24gaW4gY29weV9zdGF0dXNlczoKICAgICAgICBpZiBleGNlcHRpb246CiAgICAgICAgICBleGNlcHRpb25zWyhzcmMsIGRlc3QpXSA9IGV4Y2VwdGlvbgogICAgICAgIGVsc2U6CiAgICAgICAgICBjb3B5X3N1Y2NlZWRlZC5hcHBlbmQoKHNyYywgZGVzdCkpCiAgICAgIGRlbGV0ZV9iYXRjaCA9IFtzcmMgZm9yIHNyYywgZGVzdCBpbiBjb3B5X3N1Y2NlZWRlZF0KICAgICAgZGVsZXRlX3N0YXR1c2VzID0gZ2NzaW8uR2NzSU8oKS5kZWxldGVfYmF0Y2goZGVsZXRlX2JhdGNoKQogICAgICBmb3IgaSwgKHNyYywgZXhjZXB0aW9uKSBpbiBlbnVtZXJhdGUoZGVsZXRlX3N0YXR1c2VzKToKICAgICAgICBkZXN0ID0gY29weV9zdWNjZWVkZWRbaV1bMV0KICAgICAgICBpZiBleGNlcHRpb246CiAgICAgICAgICBleGNlcHRpb25zWyhzcmMsIGRlc3QpXSA9IGV4Y2VwdGlvbgoKICAgIGlmIGV4Y2VwdGlvbnM6CiAgICAgIHJhaXNlIEJlYW1JT0Vycm9yKCJSZW5hbWUgb3BlcmF0aW9uIGZhaWxlZCIsIGV4Y2VwdGlvbnMpCgogIGRlZiBleGlzdHMoc2VsZiwgcGF0aCk6CiAgICAiIiJDaGVjayBpZiB0aGUgcHJvdmlkZWQgcGF0aCBleGlzdHMgb24gdGhlIEZpbGVTeXN0ZW0uCgogICAgQXJnczoKICAgICAgcGF0aDogc3RyaW5nIHBhdGggdGhhdCBuZWVkcyB0byBiZSBjaGVja2VkLgoKICAgIFJldHVybnM6IGJvb2xlYW4gZmxhZyBpbmRpY2F0aW5nIGlmIHBhdGggZXhpc3RzCiAgICAiIiIKICAgIHJldHVybiBnY3Npby5HY3NJTygpLmV4aXN0cyhwYXRoKQoKICBkZWYgc2l6ZShzZWxmLCBwYXRoKToKICAgICIiIkdldCBzaXplIG9mIHBhdGggb24gdGhlIEZpbGVTeXN0ZW0uCgogICAgQXJnczoKICAgICAgcGF0aDogc3RyaW5nIHBhdGggaW4gcXVlc3Rpb24uCgogICAgUmV0dXJuczogaW50IHNpemUgb2YgcGF0aCBhY2NvcmRpbmcgdG8gdGhlIEZpbGVTeXN0ZW0uCgogICAgUmFpc2VzOgogICAgICBgYEJlYW1JT0Vycm9yYGAgaWYgcGF0aCBkb2Vzbid0IGV4aXN0LgogICAgIiIiCiAgICByZXR1cm4gZ2NzaW8uR2NzSU8oKS5zaXplKHBhdGgpCgogIGRlZiBsYXN0X3VwZGF0ZWQoc2VsZiwgcGF0aCk6CiAgICAiIiJHZXQgVU5JWCBFcG9jaCB0aW1lIGluIHNlY29uZHMgb24gdGhlIEZpbGVTeXN0ZW0uCgogICAgQXJnczoKICAgICAgcGF0aDogc3RyaW5nIHBhdGggb2YgZmlsZS4KCiAgICBSZXR1cm5zOiBmbG9hdCBVTklYIEVwb2NoIHRpbWUKCiAgICBSYWlzZXM6CiAgICAgIGBgQmVhbUlPRXJyb3JgYCBpZiBwYXRoIGRvZXNuJ3QgZXhpc3QuCiAgICAiIiIKICAgIHJldHVybiBnY3Npby5HY3NJTygpLmxhc3RfdXBkYXRlZChwYXRoKQoKICBkZWYgY2hlY2tzdW0oc2VsZiwgcGF0aCk6CiAgICAiIiJGZXRjaCBjaGVja3N1bSBtZXRhZGF0YSBvZiBhIGZpbGUgb24gdGhlCiAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkZpbGVTeXN0ZW1gLgoKICAgIEFyZ3M6CiAgICAgIHBhdGg6IHN0cmluZyBwYXRoIG9mIGEgZmlsZS4KCiAgICBSZXR1cm5zOiBzdHJpbmcgY29udGFpbmluZyBjaGVja3N1bQoKICAgIFJhaXNlczoKICAgICAgYGBCZWFtSU9FcnJvcmBgIGlmIHBhdGggaXNuJ3QgYSBmaWxlIG9yIGRvZXNuJ3QgZXhpc3QuCiAgICAiIiIKICAgIHRyeToKICAgICAgcmV0dXJuIGdjc2lvLkdjc0lPKCkuY2hlY2tzdW0ocGF0aCkKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZTogICMgcHlsaW50OiBkaXNhYmxlPWJyb2FkLWV4Y2VwdAogICAgICByYWlzZSBCZWFtSU9FcnJvcigiQ2hlY2tzdW0gb3BlcmF0aW9uIGZhaWxlZCIsIHtwYXRoOiBlfSkKCiAgZGVmIGRlbGV0ZShzZWxmLCBwYXRocyk6CiAgICAiIiJEZWxldGVzIGZpbGVzIG9yIGRpcmVjdG9yaWVzIGF0IHRoZSBwcm92aWRlZCBwYXRocy4KICAgIERpcmVjdG9yaWVzIHdpbGwgYmUgZGVsZXRlZCByZWN1cnNpdmVseS4KCiAgICBBcmdzOgogICAgICBwYXRoczogbGlzdCBvZiBwYXRocyB0aGF0IGdpdmUgdGhlIGZpbGUgb2JqZWN0cyB0byBiZSBkZWxldGVkCiAgICAiIiIKICAgIGRlZiBfZGVsZXRlX3BhdGgocGF0aCk6CiAgICAgICIiIlJlY3Vyc2l2ZWx5IGRlbGV0ZSB0aGUgZmlsZSBvciBkaXJlY3RvcnkgYXQgdGhlIHByb3ZpZGVkIHBhdGguCiAgICAgICIiIgogICAgICBpZiBwYXRoLmVuZHN3aXRoKCcvJyk6CiAgICAgICAgcGF0aF90b191c2UgPSBwYXRoICsgJyonCiAgICAgIGVsc2U6CiAgICAgICAgcGF0aF90b191c2UgPSBwYXRoCiAgICAgIG1hdGNoX3Jlc3VsdCA9IHNlbGYubWF0Y2goW3BhdGhfdG9fdXNlXSlbMF0KICAgICAgc3RhdHVzZXMgPSBnY3Npby5HY3NJTygpLmRlbGV0ZV9iYXRjaCgKICAgICAgICAgIFttLnBhdGggZm9yIG0gaW4gbWF0Y2hfcmVzdWx0Lm1ldGFkYXRhX2xpc3RdKQogICAgICBmYWlsdXJlcyA9IFtlIGZvciAoXywgZSkgaW4gc3RhdHVzZXMgaWYgZSBpcyBub3QgTm9uZV0KICAgICAgaWYgZmFpbHVyZXM6CiAgICAgICAgcmFpc2UgZmFpbHVyZXNbMF0KCiAgICBleGNlcHRpb25zID0ge30KICAgIGZvciBwYXRoIGluIHBhdGhzOgogICAgICB0cnk6CiAgICAgICAgX2RlbGV0ZV9wYXRoKHBhdGgpCiAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZTogICMgcHlsaW50OiBkaXNhYmxlPWJyb2FkLWV4Y2VwdAogICAgICAgIGV4Y2VwdGlvbnNbcGF0aF0gPSBlCgogICAgaWYgZXhjZXB0aW9uczoKICAgICAgcmFpc2UgQmVhbUlPRXJyb3IoIkRlbGV0ZSBvcGVyYXRpb24gZmFpbGVkIiwgZXhjZXB0aW9ucykKfXIrhAAAKFgUAAAAR0NTRmlsZVN5c3RlbS5yZW5hbWVYAwAAAGRlZkvJS/WHWBQAAABHQ1NGaWxlU3lzdGVtLmV4aXN0c1gDAAAAZGVmS/ZL/4dYFAAAAEdDU0ZpbGVTeXN0ZW0uc2NoZW1lWAMAAABkZWZLKksvh1gaAAAAR0NTRmlsZVN5c3RlbS5sYXN0X3VwZGF0ZWRYAwAAAGRlZk0NAU0ZAYdYFgAAAEdDU0ZpbGVTeXN0ZW0uaGFzX2RpcnNYAwAAAGRlZktoS2uHWBMAAABHQ1NGaWxlU3lzdGVtLnNwbGl0WAMAAABkZWZLQEtch1gTAAAAR0NTRmlsZVN5c3RlbS5fbGlzdFgDAAAAZGVmS2xLgIdYFAAAAEdDU0ZpbGVTeXN0ZW0uY3JlYXRlWAMAAABkZWZLjEuYh1gYAAAAR0NTRmlsZVN5c3RlbS5fcGF0aF9vcGVuWAMAAABkZWZLgUuLh1gSAAAAR0NTRmlsZVN5c3RlbS5qb2luWAMAAABkZWZLMEs/h1gUAAAAR0NTRmlsZVN5c3RlbS5kZWxldGVYAwAAAGRlZk0rAU1JAYdYDQAAAEdDU0ZpbGVTeXN0ZW1YBQAAAGNsYXNzSyNNSQGHWBIAAABHQ1NGaWxlU3lzdGVtLm9wZW5YAwAAAGRlZkuZS6WHWBIAAABHQ1NGaWxlU3lzdGVtLnNpemVYAwAAAGRlZk0AAU0MAYdYFAAAAEdDU0ZpbGVTeXN0ZW0ubWtkaXJzWAMAAABkZWZLXUtnh1ghAAAAR0NTRmlsZVN5c3RlbS5kZWxldGUuX2RlbGV0ZV9wYXRoWAMAAABkZWZNMgFNPwGHWBIAAABHQ1NGaWxlU3lzdGVtLmNvcHlYAwAAAGRlZkumS8iHWB0AAABHQ1NGaWxlU3lzdGVtLmNvcHkuX2NvcHlfcGF0aFgDAAAAZGVmS7RLvodYFgAAAEdDU0ZpbGVTeXN0ZW0uY2hlY2tzdW1YAwAAAGRlZk0aAU0qAYd1fXIshAAAKFgUAAAAR0NTRmlsZVN5c3RlbS5yZW5hbWVqJmAAAFgUAAAAR0NTRmlsZVN5c3RlbS5leGlzdHNqJmAAAFgUAAAAR0NTRmlsZVN5c3RlbS5zY2hlbWVqJmAAAFgaAAAAR0NTRmlsZVN5c3RlbS5sYXN0X3VwZGF0ZWRqJmAAAFgTAAAAR0NTRmlsZVN5c3RlbS5zcGxpdGomYAAAWBQAAABHQ1NGaWxlU3lzdGVtLmNyZWF0ZWomYAAAWBIAAABHQ1NGaWxlU3lzdGVtLmpvaW5qJmAAAFgUAAAAR0NTRmlsZVN5c3RlbS5kZWxldGVqJmAAAFgNAAAAR0NTRmlsZVN5c3RlbWomYAAAWBIAAABHQ1NGaWxlU3lzdGVtLm9wZW5qJmAAAFgSAAAAR0NTRmlsZVN5c3RlbS5zaXplaiZgAABYFAAAAEdDU0ZpbGVTeXN0ZW0ubWtkaXJzaiZgAABYEgAAAEdDU0ZpbGVTeXN0ZW0uY29weWomYAAAWBYAAABHQ1NGaWxlU3lzdGVtLmhhc19kaXJzaiZgAABYFgAAAEdDU0ZpbGVTeXN0ZW0uY2hlY2tzdW1qJmAAAHVqfWkAAFggAAAAYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW1yLYQAAIWBci6EAAB9ci+EAABidFUgYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGVyMIQAAChY8ykAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiVXNlci1mYWNpbmcgaW50ZXJmYWNlcyBmb3IgdGhlIEJlYW0gU3RhdGUgYW5kIFRpbWVyIEFQSXMuCgpFeHBlcmltZW50YWw7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBpdGVydG9vbHMKaW1wb3J0IHR5cGVzCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdAoKZnJvbSBhcGFjaGVfYmVhbS5jb2RlcnMgaW1wb3J0IENvZGVyCmZyb20gYXBhY2hlX2JlYW0uY29kZXJzIGltcG9ydCBjb2RlcnMKZnJvbSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkgaW1wb3J0IGJlYW1fcnVubmVyX2FwaV9wYjIKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRpbWV1dGlsIGltcG9ydCBUaW1lRG9tYWluCgoKY2xhc3MgU3RhdGVTcGVjKG9iamVjdCk6CiAgIiIiU3BlY2lmaWNhdGlvbiBmb3IgYSB1c2VyIERvRm4gc3RhdGUgY2VsbC4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJyVzKCVzKScgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHNlbGYubmFtZSkKCiAgZGVmIHRvX3J1bm5lcl9hcGkoc2VsZiwgY29udGV4dCk6CiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgoKY2xhc3MgQmFnU3RhdGVTcGVjKFN0YXRlU3BlYyk6CiAgIiIiU3BlY2lmaWNhdGlvbiBmb3IgYSB1c2VyIERvRm4gYmFnIHN0YXRlIGNlbGwuIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBjb2Rlcik6CiAgICBhc3NlcnQgaXNpbnN0YW5jZShuYW1lLCBzdHIpCiAgICBhc3NlcnQgaXNpbnN0YW5jZShjb2RlciwgQ29kZXIpCiAgICBzZWxmLm5hbWUgPSBuYW1lCiAgICBzZWxmLmNvZGVyID0gY29kZXIKCiAgZGVmIHRvX3J1bm5lcl9hcGkoc2VsZiwgY29udGV4dCk6CiAgICByZXR1cm4gYmVhbV9ydW5uZXJfYXBpX3BiMi5TdGF0ZVNwZWMoCiAgICAgICAgYmFnX3NwZWM9YmVhbV9ydW5uZXJfYXBpX3BiMi5CYWdTdGF0ZVNwZWMoCiAgICAgICAgICAgIGVsZW1lbnRfY29kZXJfaWQ9Y29udGV4dC5jb2RlcnMuZ2V0X2lkKHNlbGYuY29kZXIpKSkKCgpjbGFzcyBDb21iaW5pbmdWYWx1ZVN0YXRlU3BlYyhTdGF0ZVNwZWMpOgogICIiIlNwZWNpZmljYXRpb24gZm9yIGEgdXNlciBEb0ZuIGNvbWJpbmluZyB2YWx1ZSBzdGF0ZSBjZWxsLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgY29kZXIsIGNvbWJpbmVfZm4pOgogICAgIyBBdm9pZCBjaXJjdWxhciBpbXBvcnQuCiAgICBmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSBpbXBvcnQgQ29tYmluZUZuCgogICAgYXNzZXJ0IGlzaW5zdGFuY2UobmFtZSwgc3RyKQogICAgYXNzZXJ0IGlzaW5zdGFuY2UoY29kZXIsIENvZGVyKQogICAgc2VsZi5uYW1lID0gbmFtZQogICAgIyBUaGUgY29kZXIgaGVyZSBzaG91bGQgYmUgZm9yIHRoZSBhY2N1bXVsYXRvciB0eXBlIG9mIHRoZSBnaXZlbiBDb21iaW5lRm4uCiAgICBzZWxmLmNvZGVyID0gY29kZXIKICAgIHNlbGYuY29tYmluZV9mbiA9IENvbWJpbmVGbi5tYXliZV9mcm9tX2NhbGxhYmxlKGNvbWJpbmVfZm4pCgogIGRlZiB0b19ydW5uZXJfYXBpKHNlbGYsIGNvbnRleHQpOgogICAgcmV0dXJuIGJlYW1fcnVubmVyX2FwaV9wYjIuU3RhdGVTcGVjKAogICAgICAgIGNvbWJpbmluZ19zcGVjPWJlYW1fcnVubmVyX2FwaV9wYjIuQ29tYmluaW5nU3RhdGVTcGVjKAogICAgICAgICAgICBjb21iaW5lX2ZuPXNlbGYuY29tYmluZV9mbi50b19ydW5uZXJfYXBpKGNvbnRleHQpLAogICAgICAgICAgICBhY2N1bXVsYXRvcl9jb2Rlcl9pZD1jb250ZXh0LmNvZGVycy5nZXRfaWQoc2VsZi5jb2RlcikpKQoKCmNsYXNzIFRpbWVyU3BlYyhvYmplY3QpOgogICIiIlNwZWNpZmljYXRpb24gZm9yIGEgdXNlciBzdGF0ZWZ1bCBEb0ZuIHRpbWVyLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgdGltZV9kb21haW4pOgogICAgc2VsZi5uYW1lID0gbmFtZQogICAgaWYgdGltZV9kb21haW4gbm90IGluIChUaW1lRG9tYWluLldBVEVSTUFSSywgVGltZURvbWFpbi5SRUFMX1RJTUUpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdVbnN1cHBvcnRlZCBUaW1lRG9tYWluOiAlci4nICUgKHRpbWVfZG9tYWluLCkpCiAgICBzZWxmLnRpbWVfZG9tYWluID0gdGltZV9kb21haW4KICAgIHNlbGYuX2F0dGFjaGVkX2NhbGxiYWNrID0gTm9uZQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJyVzKCVzKScgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHNlbGYubmFtZSkKCiAgZGVmIHRvX3J1bm5lcl9hcGkoc2VsZiwgY29udGV4dCk6CiAgICByZXR1cm4gYmVhbV9ydW5uZXJfYXBpX3BiMi5UaW1lclNwZWMoCiAgICAgICAgdGltZV9kb21haW49VGltZURvbWFpbi50b19ydW5uZXJfYXBpKHNlbGYudGltZV9kb21haW4pLAogICAgICAgIHRpbWVyX2NvZGVyX2lkPWNvbnRleHQuY29kZXJzLmdldF9pZCgKICAgICAgICAgICAgY29kZXJzLl9UaW1lckNvZGVyKGNvZGVycy5TaW5nbGV0b25Db2RlcihOb25lKSkpKQoKCmRlZiBvbl90aW1lcih0aW1lcl9zcGVjKToKICAiIiJEZWNvcmF0b3IgZm9yIHRpbWVyIGZpcmluZyBEb0ZuIG1ldGhvZC4KCiAgVGhpcyBkZWNvcmF0b3IgYWxsb3dzIGEgdXNlciB0byBzcGVjaWZ5IGFuIG9uX3RpbWVyIHByb2Nlc3NpbmcgbWV0aG9kCiAgaW4gYSBzdGF0ZWZ1bCBEb0ZuLiAgU2FtcGxlIHVzYWdlOjoKCiAgICBjbGFzcyBNeURvRm4oRG9Gbik6CiAgICAgIFRJTUVSX1NQRUMgPSBUaW1lclNwZWMoJ3RpbWVyJywgVGltZURvbWFpbi5XQVRFUk1BUkspCgogICAgICBAb25fdGltZXIoVElNRVJfU1BFQykKICAgICAgZGVmIG15X3RpbWVyX2V4cGlyeV9jYWxsYmFjayhzZWxmKToKICAgICAgICBsb2dnaW5nLmluZm8oJ1RpbWVyIGV4cGlyZWQhJykKICAiIiIKCiAgaWYgbm90IGlzaW5zdGFuY2UodGltZXJfc3BlYywgVGltZXJTcGVjKToKICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0Bvbl90aW1lciBkZWNvcmF0b3IgZXhwZWN0ZWQgVGltZXJTcGVjLicpCgogIGRlZiBfaW5uZXIobWV0aG9kKToKICAgIGlmIG5vdCBjYWxsYWJsZShtZXRob2QpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdAb25fdGltZXIgZGVjb3JhdG9yIGV4cGVjdGVkIGNhbGxhYmxlLicpCiAgICBpZiB0aW1lcl9zcGVjLl9hdHRhY2hlZF9jYWxsYmFjazoKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICdNdWx0aXBsZSBvbl90aW1lciBjYWxsYmFja3MgcmVnaXN0ZXJlZCBmb3IgJXIuJyAlIHRpbWVyX3NwZWMpCiAgICB0aW1lcl9zcGVjLl9hdHRhY2hlZF9jYWxsYmFjayA9IG1ldGhvZAogICAgcmV0dXJuIG1ldGhvZAoKICByZXR1cm4gX2lubmVyCgoKZGVmIGdldF9kb2ZuX3NwZWNzKGRvZm4pOgogICIiIkdldHMgdGhlIHN0YXRlIGFuZCB0aW1lciBzcGVjcyBmb3IgYSBEb0ZuLCBpZiBhbnkuIiIiCgogICMgQXZvaWQgY2lyY3VsYXIgaW1wb3J0LgogIGZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5jb21tb24gaW1wb3J0IE1ldGhvZFdyYXBwZXIKICBmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSBpbXBvcnQgX0RvRm5QYXJhbQogIGZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlIGltcG9ydCBfU3RhdGVEb0ZuUGFyYW0KICBmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSBpbXBvcnQgX1RpbWVyRG9GblBhcmFtCgogIGFsbF9zdGF0ZV9zcGVjcyA9IHNldCgpCiAgYWxsX3RpbWVyX3NwZWNzID0gc2V0KCkKCiAgIyBWYWxpZGF0ZSBwYXJhbXMgdG8gcHJvY2VzcygpLCBzdGFydF9idW5kbGUoKSwgZmluaXNoX2J1bmRsZSgpIGFuZCB0bwogICMgYW55IG9uX3RpbWVyIGNhbGxiYWNrcy4KICBmb3IgbWV0aG9kX25hbWUgaW4gZGlyKGRvZm4pOgogICAgaWYgbm90IGlzaW5zdGFuY2UoZ2V0YXR0cihkb2ZuLCBtZXRob2RfbmFtZSwgTm9uZSksIHR5cGVzLk1ldGhvZFR5cGUpOgogICAgICBjb250aW51ZQogICAgbWV0aG9kID0gTWV0aG9kV3JhcHBlcihkb2ZuLCBtZXRob2RfbmFtZSkKICAgIHBhcmFtX2lkcyA9IFtkLnBhcmFtX2lkIGZvciBkIGluIG1ldGhvZC5kZWZhdWx0cwogICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZCwgX0RvRm5QYXJhbSldCiAgICBpZiBsZW4ocGFyYW1faWRzKSAhPSBsZW4oc2V0KHBhcmFtX2lkcykpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgJ0RvRm4gJXIgaGFzIGR1cGxpY2F0ZSAlcyBtZXRob2QgcGFyYW1ldGVyczogJXMuJyAlICgKICAgICAgICAgICAgICBkb2ZuLCBtZXRob2RfbmFtZSwgcGFyYW1faWRzKSkKICAgIGZvciBkIGluIG1ldGhvZC5kZWZhdWx0czoKICAgICAgaWYgaXNpbnN0YW5jZShkLCBfU3RhdGVEb0ZuUGFyYW0pOgogICAgICAgIGFsbF9zdGF0ZV9zcGVjcy5hZGQoZC5zdGF0ZV9zcGVjKQogICAgICBlbGlmIGlzaW5zdGFuY2UoZCwgX1RpbWVyRG9GblBhcmFtKToKICAgICAgICBhbGxfdGltZXJfc3BlY3MuYWRkKGQudGltZXJfc3BlYykKCiAgcmV0dXJuIGFsbF9zdGF0ZV9zcGVjcywgYWxsX3RpbWVyX3NwZWNzCgoKZGVmIGlzX3N0YXRlZnVsX2RvZm4oZG9mbik6CiAgIiIiRGV0ZXJtaW5lcyB3aGV0aGVyIGEgZ2l2ZW4gRG9GbiBpcyBhIHN0YXRlZnVsIERvRm4uIiIiCgogICMgQSBTdGF0ZWZ1bCBEb0ZuIGlzIGEgRG9GbiB0aGF0IHVzZXMgdXNlciBzdGF0ZSBvciB0aW1lcnMuCiAgYWxsX3N0YXRlX3NwZWNzLCBhbGxfdGltZXJfc3BlY3MgPSBnZXRfZG9mbl9zcGVjcyhkb2ZuKQogIHJldHVybiBib29sKGFsbF9zdGF0ZV9zcGVjcyBvciBhbGxfdGltZXJfc3BlY3MpCgoKZGVmIHZhbGlkYXRlX3N0YXRlZnVsX2RvZm4oZG9mbik6CiAgIiIiVmFsaWRhdGVzIHRoZSBwcm9wZXIgc3BlY2lmaWNhdGlvbiBvZiBhIHN0YXRlZnVsIERvRm4uIiIiCgogICMgR2V0IHN0YXRlIGFuZCB0aW1lciBzcGVjcy4KICBhbGxfc3RhdGVfc3BlY3MsIGFsbF90aW1lcl9zcGVjcyA9IGdldF9kb2ZuX3NwZWNzKGRvZm4pCgogICMgUmVqZWN0IERvRm5zIHRoYXQgaGF2ZSBtdWx0aXBsZSBzdGF0ZSBvciB0aW1lciBzcGVjcyB3aXRoIHRoZSBzYW1lIG5hbWUuCiAgaWYgbGVuKGFsbF9zdGF0ZV9zcGVjcykgIT0gbGVuKHNldChzLm5hbWUgZm9yIHMgaW4gYWxsX3N0YXRlX3NwZWNzKSk6CiAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICdEb0ZuICVyIGhhcyBtdWx0aXBsZSBTdGF0ZVNwZWNzIHdpdGggdGhlIHNhbWUgbmFtZTogJXMuJyAlICgKICAgICAgICAgICAgZG9mbiwgYWxsX3N0YXRlX3NwZWNzKSkKICBpZiBsZW4oYWxsX3RpbWVyX3NwZWNzKSAhPSBsZW4oc2V0KHMubmFtZSBmb3IgcyBpbiBhbGxfdGltZXJfc3BlY3MpKToKICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgJ0RvRm4gJXIgaGFzIG11bHRpcGxlIFRpbWVyU3BlY3Mgd2l0aCB0aGUgc2FtZSBuYW1lOiAlcy4nICUgKAogICAgICAgICAgICBkb2ZuLCBhbGxfdGltZXJfc3BlY3MpKQoKICAjIFJlamVjdCBEb0ZucyB0aGF0IHVzZSB0aW1lciBzcGVjcyB3aXRob3V0IGNvcnJlc3BvbmRpbmcgdGltZXIgY2FsbGJhY2tzLgogIGZvciB0aW1lcl9zcGVjIGluIGFsbF90aW1lcl9zcGVjczoKICAgIGlmIG5vdCB0aW1lcl9zcGVjLl9hdHRhY2hlZF9jYWxsYmFjazoKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICgnRG9GbiAlciBoYXMgYSBUaW1lclNwZWMgd2l0aG91dCBhbiBhc3NvY2lhdGVkIG9uX3RpbWVyICcKICAgICAgICAgICAnY2FsbGJhY2s6ICVzLicpICUgKGRvZm4sIHRpbWVyX3NwZWMpKQogICAgbWV0aG9kX25hbWUgPSB0aW1lcl9zcGVjLl9hdHRhY2hlZF9jYWxsYmFjay5fX25hbWVfXwogICAgaWYgKHRpbWVyX3NwZWMuX2F0dGFjaGVkX2NhbGxiYWNrICE9CiAgICAgICAgZ2V0YXR0cihkb2ZuLCBtZXRob2RfbmFtZSwgTm9uZSkuX19mdW5jX18pOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgKCdUaGUgb25fdGltZXIgY2FsbGJhY2sgZm9yICVzIGlzIG5vdCB0aGUgc3BlY2lmaWVkIC4lcyBtZXRob2QgJwogICAgICAgICAgICdmb3IgRG9GbiAlciAocGVyaGFwcyBpdCB3YXMgb3ZlcndyaXR0ZW4/KS4nKSAlICgKICAgICAgICAgICAgICAgdGltZXJfc3BlYywgbWV0aG9kX25hbWUsIGRvZm4pKQoKCmNsYXNzIFJ1bnRpbWVUaW1lcihvYmplY3QpOgogICIiIlRpbWVyIGludGVyZmFjZSBvYmplY3QgcGFzc2VkIHRvIHVzZXIgY29kZS4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHRpbWVyX3NwZWMpOgogICAgc2VsZi5fY2xlYXJlZCA9IEZhbHNlCiAgICBzZWxmLl9uZXdfdGltZXN0YW1wID0gTm9uZQoKICBkZWYgY2xlYXIoc2VsZik6CiAgICBzZWxmLl9jbGVhcmVkID0gVHJ1ZQogICAgc2VsZi5fbmV3X3RpbWVzdGFtcCA9IE5vbmUKCiAgZGVmIHNldChzZWxmLCB0aW1lc3RhbXApOgogICAgc2VsZi5fbmV3X3RpbWVzdGFtcCA9IHRpbWVzdGFtcAoKCmNsYXNzIFJ1bnRpbWVTdGF0ZShvYmplY3QpOgogICIiIlN0YXRlIGludGVyZmFjZSBvYmplY3QgcGFzc2VkIHRvIHVzZXIgY29kZS4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YXRlX3NwZWMsIHN0YXRlX3RhZywgY3VycmVudF92YWx1ZV9hY2Nlc3Nvcik6CiAgICBzZWxmLl9zdGF0ZV9zcGVjID0gc3RhdGVfc3BlYwogICAgc2VsZi5fc3RhdGVfdGFnID0gc3RhdGVfdGFnCiAgICBzZWxmLl9jdXJyZW50X3ZhbHVlX2FjY2Vzc29yID0gY3VycmVudF92YWx1ZV9hY2Nlc3NvcgoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGZvcl9zcGVjKHN0YXRlX3NwZWMsIHN0YXRlX3RhZywgY3VycmVudF92YWx1ZV9hY2Nlc3Nvcik6CiAgICBpZiBpc2luc3RhbmNlKHN0YXRlX3NwZWMsIEJhZ1N0YXRlU3BlYyk6CiAgICAgIHJldHVybiBCYWdSdW50aW1lU3RhdGUoc3RhdGVfc3BlYywgc3RhdGVfdGFnLCBjdXJyZW50X3ZhbHVlX2FjY2Vzc29yKQogICAgZWxpZiBpc2luc3RhbmNlKHN0YXRlX3NwZWMsIENvbWJpbmluZ1ZhbHVlU3RhdGVTcGVjKToKICAgICAgcmV0dXJuIENvbWJpbmluZ1ZhbHVlUnVudGltZVN0YXRlKHN0YXRlX3NwZWMsIHN0YXRlX3RhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfdmFsdWVfYWNjZXNzb3IpCiAgICBlbHNlOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIHN0YXRlIHNwZWM6ICVzJyAlIHN0YXRlX3NwZWMpCgogIGRlZiBfZW5jb2RlKHNlbGYsIHZhbHVlKToKICAgIHJldHVybiBzZWxmLl9zdGF0ZV9zcGVjLmNvZGVyLmVuY29kZSh2YWx1ZSkKCiAgZGVmIF9kZWNvZGUoc2VsZiwgdmFsdWUpOgogICAgcmV0dXJuIHNlbGYuX3N0YXRlX3NwZWMuY29kZXIuZGVjb2RlKHZhbHVlKQoKICBkZWYgcHJlZmV0Y2goc2VsZik6CiAgICAjIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGhlcmUgZG9lcyBub3RoaW5nLgogICAgcGFzcwoKCiMgU2VudGluZWwgZGVzaWduYXRpbmcgYW4gdW5yZWFkIHZhbHVlLgpVTlJFQURfVkFMVUUgPSBvYmplY3QoKQoKCmNsYXNzIEJhZ1J1bnRpbWVTdGF0ZShSdW50aW1lU3RhdGUpOgogICIiIkJhZyBzdGF0ZSBpbnRlcmZhY2Ugb2JqZWN0IHBhc3NlZCB0byB1c2VyIGNvZGUuIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBzdGF0ZV9zcGVjLCBzdGF0ZV90YWcsIGN1cnJlbnRfdmFsdWVfYWNjZXNzb3IpOgogICAgc3VwZXIoQmFnUnVudGltZVN0YXRlLCBzZWxmKS5fX2luaXRfXygKICAgICAgICBzdGF0ZV9zcGVjLCBzdGF0ZV90YWcsIGN1cnJlbnRfdmFsdWVfYWNjZXNzb3IpCiAgICBzZWxmLl9jYWNoZWRfdmFsdWUgPSBVTlJFQURfVkFMVUUKICAgIHNlbGYuX2NsZWFyZWQgPSBGYWxzZQogICAgc2VsZi5fbmV3X3ZhbHVlcyA9IFtdCgogIGRlZiByZWFkKHNlbGYpOgogICAgaWYgc2VsZi5fY2FjaGVkX3ZhbHVlIGlzIFVOUkVBRF9WQUxVRToKICAgICAgc2VsZi5fY2FjaGVkX3ZhbHVlID0gc2VsZi5fY3VycmVudF92YWx1ZV9hY2Nlc3NvcigpCiAgICBpZiBub3Qgc2VsZi5fY2xlYXJlZDoKICAgICAgZW5jb2RlZF92YWx1ZXMgPSBpdGVydG9vbHMuY2hhaW4oc2VsZi5fY2FjaGVkX3ZhbHVlLCBzZWxmLl9uZXdfdmFsdWVzKQogICAgZWxzZToKICAgICAgZW5jb2RlZF92YWx1ZXMgPSBzZWxmLl9uZXdfdmFsdWVzCiAgICByZXR1cm4gKHNlbGYuX2RlY29kZSh2KSBmb3IgdiBpbiBlbmNvZGVkX3ZhbHVlcykKCiAgZGVmIGFkZChzZWxmLCB2YWx1ZSk6CiAgICBzZWxmLl9uZXdfdmFsdWVzLmFwcGVuZChzZWxmLl9lbmNvZGUodmFsdWUpKQoKICBkZWYgY2xlYXIoc2VsZik6CiAgICBzZWxmLl9jbGVhcmVkID0gVHJ1ZQogICAgc2VsZi5fY2FjaGVkX3ZhbHVlID0gW10KICAgIHNlbGYuX25ld192YWx1ZXMgPSBbXQoKCmNsYXNzIENvbWJpbmluZ1ZhbHVlUnVudGltZVN0YXRlKFJ1bnRpbWVTdGF0ZSk6CiAgIiIiQ29tYmluaW5nIHZhbHVlIHN0YXRlIGludGVyZmFjZSBvYmplY3QgcGFzc2VkIHRvIHVzZXIgY29kZS4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YXRlX3NwZWMsIHN0YXRlX3RhZywgY3VycmVudF92YWx1ZV9hY2Nlc3Nvcik6CiAgICBzdXBlcihDb21iaW5pbmdWYWx1ZVJ1bnRpbWVTdGF0ZSwgc2VsZikuX19pbml0X18oCiAgICAgICAgc3RhdGVfc3BlYywgc3RhdGVfdGFnLCBjdXJyZW50X3ZhbHVlX2FjY2Vzc29yKQogICAgc2VsZi5fY3VycmVudF9hY2N1bXVsYXRvciA9IFVOUkVBRF9WQUxVRQogICAgc2VsZi5fbW9kaWZpZWQgPSBGYWxzZQogICAgc2VsZi5fY29tYmluZV9mbiA9IHN0YXRlX3NwZWMuY29tYmluZV9mbgoKICBkZWYgX3JlYWRfaW5pdGlhbF92YWx1ZShzZWxmKToKICAgIGlmIHNlbGYuX2N1cnJlbnRfYWNjdW11bGF0b3IgaXMgVU5SRUFEX1ZBTFVFOgogICAgICBleGlzdGluZ19hY2N1bXVsYXRvcnMgPSBsaXN0KAogICAgICAgICAgc2VsZi5fZGVjb2RlKGEpIGZvciBhIGluIHNlbGYuX2N1cnJlbnRfdmFsdWVfYWNjZXNzb3IoKSkKICAgICAgaWYgZXhpc3RpbmdfYWNjdW11bGF0b3JzOgogICAgICAgIHNlbGYuX2N1cnJlbnRfYWNjdW11bGF0b3IgPSBzZWxmLl9jb21iaW5lX2ZuLm1lcmdlX2FjY3VtdWxhdG9ycygKICAgICAgICAgICAgZXhpc3RpbmdfYWNjdW11bGF0b3JzKQogICAgICBlbHNlOgogICAgICAgIHNlbGYuX2N1cnJlbnRfYWNjdW11bGF0b3IgPSBzZWxmLl9jb21iaW5lX2ZuLmNyZWF0ZV9hY2N1bXVsYXRvcigpCgogIGRlZiByZWFkKHNlbGYpOgogICAgc2VsZi5fcmVhZF9pbml0aWFsX3ZhbHVlKCkKICAgIHJldHVybiBzZWxmLl9jb21iaW5lX2ZuLmV4dHJhY3Rfb3V0cHV0KHNlbGYuX2N1cnJlbnRfYWNjdW11bGF0b3IpCgogIGRlZiBhZGQoc2VsZiwgdmFsdWUpOgogICAgc2VsZi5fcmVhZF9pbml0aWFsX3ZhbHVlKCkKICAgIHNlbGYuX21vZGlmaWVkID0gVHJ1ZQogICAgc2VsZi5fY3VycmVudF9hY2N1bXVsYXRvciA9IHNlbGYuX2NvbWJpbmVfZm4uYWRkX2lucHV0KAogICAgICAgIHNlbGYuX2N1cnJlbnRfYWNjdW11bGF0b3IsIHZhbHVlKQoKICBkZWYgY2xlYXIoc2VsZik6CiAgICBzZWxmLl9tb2RpZmllZCA9IFRydWUKICAgIHNlbGYuX2N1cnJlbnRfYWNjdW11bGF0b3IgPSBzZWxmLl9jb21iaW5lX2ZuLmNyZWF0ZV9hY2N1bXVsYXRvcigpCgoKY2xhc3MgVXNlclN0YXRlQ29udGV4dChvYmplY3QpOgogICIiIldyYXBwZXIgYWxsb3dpbmcgdXNlciBzdGF0ZSBhbmQgdGltZXJzIHRvIGJlIGFjY2Vzc2VkIGJ5IGEgRG9Gbkludm9rZXIuIiIiCgogIGRlZiBnZXRfdGltZXIoc2VsZiwgdGltZXJfc3BlYywga2V5LCB3aW5kb3cpOgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCgogIGRlZiBnZXRfc3RhdGUoc2VsZiwgc3RhdGVfc3BlYywga2V5LCB3aW5kb3cpOgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCgogIGRlZiBjb21taXQoc2VsZik6CiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKfXIxhAAAKFgVAAAAUnVudGltZVN0YXRlLnByZWZldGNoWAMAAABkZWZL9Ev3h1gaAAAAVXNlclN0YXRlQ29udGV4dC5nZXRfc3RhdGVYAwAAAGRlZk1CAU1EAYdYHwAAAENvbWJpbmluZ1ZhbHVlUnVudGltZVN0YXRlLnJlYWRYAwAAAGRlZk0tAU0wAYdYDgAAAGdldF9kb2ZuX3NwZWNzWAMAAABkZWZLhUukh1gVAAAAUnVudGltZVRpbWVyLl9faW5pdF9fWAMAAABkZWZL0EvTh1gUAAAAUnVudGltZVN0YXRlLl9kZWNvZGVYAwAAAGRlZkvxS/OHWBcAAABDb21iaW5pbmdWYWx1ZVN0YXRlU3BlY1gFAAAAY2xhc3NLP0tSh1gMAAAAUnVudGltZVRpbWVyWAUAAABjbGFzc0vNS9qHWBUAAABCYWdTdGF0ZVNwZWMuX19pbml0X19YAwAAAGRlZkszSziHWBcAAABTdGF0ZVNwZWMudG9fcnVubmVyX2FwaVgDAAAAZGVmSyxLLodYJQAAAENvbWJpbmluZ1ZhbHVlU3RhdGVTcGVjLnRvX3J1bm5lcl9hcGlYAwAAAGRlZktNS1KHWBAAAABpc19zdGF0ZWZ1bF9kb2ZuWAMAAABkZWZLpkush1geAAAAQ29tYmluaW5nVmFsdWVSdW50aW1lU3RhdGUuYWRkWAMAAABkZWZNMQFNNgGHWAwAAABCYWdTdGF0ZVNwZWNYBQAAAGNsYXNzSzBLPYdYFAAAAEJhZ1J1bnRpbWVTdGF0ZS5yZWFkWAMAAABkZWZNBwFNDwGHWBcAAABVc2VyU3RhdGVDb250ZXh0LmNvbW1pdFgDAAAAZGVmTUUBTUcBh1gIAAAAb25fdGltZXJYAwAAAGRlZktoS4OHWBIAAABUaW1lclNwZWMuX19yZXByX19YAwAAAGRlZkteS2CHWBoAAABDb21iaW5pbmdWYWx1ZVJ1bnRpbWVTdGF0ZVgFAAAAY2xhc3NNGQFNOgGHWBAAAABSdW50aW1lVGltZXIuc2V0WAMAAABkZWZL2Evah1gjAAAAQ29tYmluaW5nVmFsdWVSdW50aW1lU3RhdGUuX19pbml0X19YAwAAAGRlZk0cAU0iAYdYFQAAAFJ1bnRpbWVTdGF0ZS5fX2luaXRfX1gDAAAAZGVmS99L44dYGAAAAEJhZ1J1bnRpbWVTdGF0ZS5fX2luaXRfX1gDAAAAZGVmTQABTQYBh1gPAAAAQmFnUnVudGltZVN0YXRlWAUAAABjbGFzc0v9TRcBh1gJAAAAU3RhdGVTcGVjWAUAAABjbGFzc0sjSy6HWBUAAABCYWdSdW50aW1lU3RhdGUuY2xlYXJYAwAAAGRlZk0TAU0XAYdYFgAAAHZhbGlkYXRlX3N0YXRlZnVsX2RvZm5YAwAAAGRlZkuuS8uHWAwAAABSdW50aW1lU3RhdGVYBQAAAGNsYXNzS9xL94dYFwAAAFRpbWVyU3BlYy50b19ydW5uZXJfYXBpWAMAAABkZWZLYUtmh1gTAAAAQmFnUnVudGltZVN0YXRlLmFkZFgDAAAAZGVmTRABTRIBh1gVAAAAUnVudGltZVN0YXRlLmZvcl9zcGVjWAMAAABkZWZL5Evth1gJAAAAVGltZXJTcGVjWAUAAABjbGFzc0tUS2aHWBIAAABTdGF0ZVNwZWMuX19yZXByX19YAwAAAGRlZkspSyuHWA8AAABvbl90aW1lci5faW5uZXJYAwAAAGRlZkt5S4GHWBIAAABTdGF0ZVNwZWMuX19pbml0X19YAwAAAGRlZksmSyiHWCAAAABDb21iaW5pbmdWYWx1ZVN0YXRlU3BlYy5fX2luaXRfX1gDAAAAZGVmS0JLTIdYEgAAAFRpbWVyU3BlYy5fX2luaXRfX1gDAAAAZGVmS1dLXYdYGgAAAEJhZ1N0YXRlU3BlYy50b19ydW5uZXJfYXBpWAMAAABkZWZLOUs9h1gQAAAAVXNlclN0YXRlQ29udGV4dFgFAAAAY2xhc3NNPAFNRwGHWBoAAABVc2VyU3RhdGVDb250ZXh0LmdldF90aW1lclgDAAAAZGVmTT8BTUEBh1gUAAAAUnVudGltZVN0YXRlLl9lbmNvZGVYAwAAAGRlZkvuS/CHWCAAAABDb21iaW5pbmdWYWx1ZVJ1bnRpbWVTdGF0ZS5jbGVhclgDAAAAZGVmTTcBTToBh1gSAAAAUnVudGltZVRpbWVyLmNsZWFyWAMAAABkZWZL1EvXh1guAAAAQ29tYmluaW5nVmFsdWVSdW50aW1lU3RhdGUuX3JlYWRfaW5pdGlhbF92YWx1ZVgDAAAAZGVmTSMBTSwBh3V9cjKEAAAoWBUAAABSdW50aW1lU3RhdGUucHJlZmV0Y2hqiGAAAFgaAAAAVXNlclN0YXRlQ29udGV4dC5nZXRfc3RhdGVqiGAAAFgfAAAAQ29tYmluaW5nVmFsdWVSdW50aW1lU3RhdGUucmVhZGqIYAAAWA4AAABnZXRfZG9mbl9zcGVjc2qIYAAAWBcAAABDb21iaW5pbmdWYWx1ZVN0YXRlU3BlY2qIYAAAWAwAAABSdW50aW1lVGltZXJqiGAAAFgXAAAAU3RhdGVTcGVjLnRvX3J1bm5lcl9hcGlqiGAAAFglAAAAQ29tYmluaW5nVmFsdWVTdGF0ZVNwZWMudG9fcnVubmVyX2FwaWqIYAAAWBAAAABpc19zdGF0ZWZ1bF9kb2ZuaohgAABYHgAAAENvbWJpbmluZ1ZhbHVlUnVudGltZVN0YXRlLmFkZGqIYAAAWAwAAABCYWdTdGF0ZVNwZWNqiGAAAFgUAAAAQmFnUnVudGltZVN0YXRlLnJlYWRqiGAAAFgXAAAAVXNlclN0YXRlQ29udGV4dC5jb21taXRqiGAAAFgIAAAAb25fdGltZXJqiGAAAFgTAAAAQmFnUnVudGltZVN0YXRlLmFkZGqIYAAAWBoAAABDb21iaW5pbmdWYWx1ZVJ1bnRpbWVTdGF0ZWqIYAAAWBAAAABSdW50aW1lVGltZXIuc2V0aohgAABYDwAAAEJhZ1J1bnRpbWVTdGF0ZWqIYAAAWAkAAABTdGF0ZVNwZWNqiGAAAFgVAAAAQmFnUnVudGltZVN0YXRlLmNsZWFyaohgAABYFgAAAHZhbGlkYXRlX3N0YXRlZnVsX2RvZm5qiGAAAFgMAAAAUnVudGltZVN0YXRlaohgAABYFwAAAFRpbWVyU3BlYy50b19ydW5uZXJfYXBpaohgAABYFQAAAFJ1bnRpbWVTdGF0ZS5mb3Jfc3BlY2qIYAAAWAkAAABUaW1lclNwZWNqiGAAAFgaAAAAQmFnU3RhdGVTcGVjLnRvX3J1bm5lcl9hcGlqiGAAAFgQAAAAVXNlclN0YXRlQ29udGV4dGqIYAAAWBoAAABVc2VyU3RhdGVDb250ZXh0LmdldF90aW1lcmqIYAAAWCAAAABDb21iaW5pbmdWYWx1ZVJ1bnRpbWVTdGF0ZS5jbGVhcmqIYAAAWBIAAABSdW50aW1lVGltZXIuY2xlYXJqiGAAAHVqfWkAAFggAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGVyM4QAAIWBcjSEAAB9cjWEAABidHI2hAAAVSxhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5oZWxwZXJfdHJhbnNmb3JtcyhYJw8AACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBjb2xsZWN0aW9ucwppbXBvcnQgaXRlcnRvb2xzCgppbXBvcnQgYXBhY2hlX2JlYW0gYXMgYmVhbQpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCB0eXBlaGludHMKZnJvbSBhcGFjaGVfYmVhbS5pbnRlcm5hbC51dGlsIGltcG9ydCBBcmd1bWVudFBsYWNlaG9sZGVyCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMgaW1wb3J0IF9DdXJyaWVkRm4KZnJvbSBhcGFjaGVfYmVhbS51dGlscy53aW5kb3dlZF92YWx1ZSBpbXBvcnQgV2luZG93ZWRWYWx1ZQoKCmNsYXNzIExpZnRlZENvbWJpbmVQZXJLZXkoYmVhbS5QVHJhbnNmb3JtKToKICAiIiJBbiBpbXBsZW1lbnRhdGlvbiBvZiBDb21iaW5lUGVyS2V5IHRoYXQgZG9lcyBtYXBwZXItc2lkZSBwcmUtY29tYmluaW5nLgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBjb21iaW5lX2ZuLCBhcmdzLCBrd2FyZ3MpOgogICAgYXJnc190b19jaGVjayA9IGl0ZXJ0b29scy5jaGFpbihhcmdzLCBrd2FyZ3MudmFsdWVzKCkpCiAgICBpZiBpc2luc3RhbmNlKGNvbWJpbmVfZm4sIF9DdXJyaWVkRm4pOgogICAgICBhcmdzX3RvX2NoZWNrID0gaXRlcnRvb2xzLmNoYWluKGFyZ3NfdG9fY2hlY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tYmluZV9mbi5hcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbWJpbmVfZm4ua3dhcmdzLnZhbHVlcygpKQogICAgaWYgYW55KGlzaW5zdGFuY2UoYXJnLCBBcmd1bWVudFBsYWNlaG9sZGVyKQogICAgICAgICAgIGZvciBhcmcgaW4gYXJnc190b19jaGVjayk6CiAgICAgICMgVGhpcyBpc24ndCBpbXBsZW1lbnRlZCBpbiBkYXRhZmxvdyBlaXRoZXIuLi4KICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignRGVmZXJyZWQgQ29tYmluZUZuIHNpZGUgaW5wdXRzLicpCiAgICBzZWxmLl9jb21iaW5lX2ZuID0gYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5jdXJyeV9jb21iaW5lX2ZuKAogICAgICAgIGNvbWJpbmVfZm4sIGFyZ3MsIGt3YXJncykKCiAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICByZXR1cm4gKAogICAgICAgIHBjb2xsCiAgICAgICAgfCBiZWFtLlBhckRvKFBhcnRpYWxHcm91cEJ5S2V5Q29tYmluaW5nVmFsdWVzKHNlbGYuX2NvbWJpbmVfZm4pKQogICAgICAgIHwgYmVhbS5Hcm91cEJ5S2V5KCkKICAgICAgICB8IGJlYW0uUGFyRG8oRmluaXNoQ29tYmluZShzZWxmLl9jb21iaW5lX2ZuKSkpCgoKY2xhc3MgUGFydGlhbEdyb3VwQnlLZXlDb21iaW5pbmdWYWx1ZXMoYmVhbS5Eb0ZuKToKICAiIiJBZ2dyZWdhdGVzIHZhbHVlcyBpbnRvIGEgcGVyLWtleS13aW5kb3cgY2FjaGUuCgogIEFzIGJ1bmRsZXMgYXJlIGluLW1lbW9yeS1zaXplZCwgd2UgZG9uJ3QgYm90aGVyIGZsdXNoaW5nIHVudGlsIHRoZSB2ZXJ5IGVuZC4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgY29tYmluZV9mbik6CiAgICBzZWxmLl9jb21iaW5lX2ZuID0gY29tYmluZV9mbgoKICBkZWYgc3RhcnRfYnVuZGxlKHNlbGYpOgogICAgc2VsZi5fY2FjaGUgPSBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdChzZWxmLl9jb21iaW5lX2ZuLmNyZWF0ZV9hY2N1bXVsYXRvcikKCiAgZGVmIHByb2Nlc3Moc2VsZiwgZWxlbWVudCwgd2luZG93PWJlYW0uRG9Gbi5XaW5kb3dQYXJhbSk6CiAgICBrLCB2aSA9IGVsZW1lbnQKICAgIHNlbGYuX2NhY2hlW2ssIHdpbmRvd10gPSBzZWxmLl9jb21iaW5lX2ZuLmFkZF9pbnB1dChzZWxmLl9jYWNoZVtrLCB3aW5kb3ddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpKQoKICBkZWYgZmluaXNoX2J1bmRsZShzZWxmKToKICAgIGZvciAoaywgdyksIHZhIGluIHNlbGYuX2NhY2hlLml0ZW1zKCk6CiAgICAgIHlpZWxkIFdpbmRvd2VkVmFsdWUoKGssIHZhKSwgdy5lbmQsICh3LCkpCgogIGRlZiBkZWZhdWx0X3R5cGVfaGludHMoc2VsZik6CiAgICBoaW50cyA9IHNlbGYuX2NvbWJpbmVfZm4uZ2V0X3R5cGVfaGludHMoKS5jb3B5KCkKICAgIEsgPSB0eXBlaGludHMuVHlwZVZhcmlhYmxlKCdLJykKICAgIGlmIGhpbnRzLmlucHV0X3R5cGVzOgogICAgICBhcmdzLCBrd2FyZ3MgPSBoaW50cy5pbnB1dF90eXBlcwogICAgICBhcmdzID0gKHR5cGVoaW50cy5UdXBsZVtLLCBhcmdzWzBdXSwpICsgYXJnc1sxOl0KICAgICAgaGludHMuc2V0X2lucHV0X3R5cGVzKCphcmdzLCAqKmt3YXJncykKICAgIGVsc2U6CiAgICAgIGhpbnRzLnNldF9pbnB1dF90eXBlcyh0eXBlaGludHMuVHVwbGVbSywgdHlwZWhpbnRzLkFueV0pCiAgICBoaW50cy5zZXRfb3V0cHV0X3R5cGVzKHR5cGVoaW50cy5UdXBsZVtLLCB0eXBlaGludHMuQW55XSkKICAgIHJldHVybiBoaW50cwoKCmNsYXNzIEZpbmlzaENvbWJpbmUoYmVhbS5Eb0ZuKToKICAiIiJNZXJnZXMgcGFydGlhbGx5IGNvbWJpbmVkIHJlc3VsdHMuCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbWJpbmVfZm4pOgogICAgc2VsZi5fY29tYmluZV9mbiA9IGNvbWJpbmVfZm4KCiAgZGVmIHByb2Nlc3Moc2VsZiwgZWxlbWVudCk6CiAgICBrLCB2cyA9IGVsZW1lbnQKICAgIHJldHVybiBbKAogICAgICAgIGssCiAgICAgICAgc2VsZi5fY29tYmluZV9mbi5leHRyYWN0X291dHB1dCgKICAgICAgICAgICAgc2VsZi5fY29tYmluZV9mbi5tZXJnZV9hY2N1bXVsYXRvcnModnMpKSldCgogIGRlZiBkZWZhdWx0X3R5cGVfaGludHMoc2VsZik6CiAgICBoaW50cyA9IHNlbGYuX2NvbWJpbmVfZm4uZ2V0X3R5cGVfaGludHMoKS5jb3B5KCkKICAgIEsgPSB0eXBlaGludHMuVHlwZVZhcmlhYmxlKCdLJykKICAgIGhpbnRzLnNldF9pbnB1dF90eXBlcyh0eXBlaGludHMuVHVwbGVbSywgdHlwZWhpbnRzLkFueV0pCiAgICBpZiBoaW50cy5vdXRwdXRfdHlwZXM6CiAgICAgIG1haW5fb3V0cHV0X3R5cGUgPSBoaW50cy5zaW1wbGVfb3V0cHV0X3R5cGUoJycpCiAgICAgIGhpbnRzLnNldF9vdXRwdXRfdHlwZXModHlwZWhpbnRzLlR1cGxlW0ssIG1haW5fb3V0cHV0X3R5cGVdKQogICAgcmV0dXJuIGhpbnRzCn1yN4QAAChYLQAAAFBhcnRpYWxHcm91cEJ5S2V5Q29tYmluaW5nVmFsdWVzLnN0YXJ0X2J1bmRsZVgDAAAAZGVmSz5LQIdYIAAAAEZpbmlzaENvbWJpbmUuZGVmYXVsdF90eXBlX2hpbnRzWAMAAABkZWZLZEtsh1goAAAAUGFydGlhbEdyb3VwQnlLZXlDb21iaW5pbmdWYWx1ZXMucHJvY2Vzc1gDAAAAZGVmS0FLRYdYFgAAAEZpbmlzaENvbWJpbmUuX19pbml0X19YAwAAAGRlZktaS1yHWA0AAABGaW5pc2hDb21iaW5lWAUAAABjbGFzc0tXS2yHWDMAAABQYXJ0aWFsR3JvdXBCeUtleUNvbWJpbmluZ1ZhbHVlcy5kZWZhdWx0X3R5cGVfaGludHNYAwAAAGRlZktKS1WHWBoAAABMaWZ0ZWRDb21iaW5lUGVyS2V5LmV4cGFuZFgDAAAAZGVmSy5LNIdYIAAAAFBhcnRpYWxHcm91cEJ5S2V5Q29tYmluaW5nVmFsdWVzWAUAAABjbGFzc0s2S1WHWBUAAABGaW5pc2hDb21iaW5lLnByb2Nlc3NYAwAAAGRlZktdS2OHWCkAAABQYXJ0aWFsR3JvdXBCeUtleUNvbWJpbmluZ1ZhbHVlcy5fX2luaXRfX1gDAAAAZGVmSztLPYdYLgAAAFBhcnRpYWxHcm91cEJ5S2V5Q29tYmluaW5nVmFsdWVzLmZpbmlzaF9idW5kbGVYAwAAAGRlZktGS0mHWBwAAABMaWZ0ZWRDb21iaW5lUGVyS2V5Ll9faW5pdF9fWAMAAABkZWZLIUsth1gTAAAATGlmdGVkQ29tYmluZVBlcktleVgFAAAAY2xhc3NLHks0h3V9cjiEAAAoWCAAAABGaW5pc2hDb21iaW5lLmRlZmF1bHRfdHlwZV9oaW50c2otYQAAWCgAAABQYXJ0aWFsR3JvdXBCeUtleUNvbWJpbmluZ1ZhbHVlcy5wcm9jZXNzai1hAABYLQAAAFBhcnRpYWxHcm91cEJ5S2V5Q29tYmluaW5nVmFsdWVzLnN0YXJ0X2J1bmRsZWotYQAAWA0AAABGaW5pc2hDb21iaW5lai1hAABYMwAAAFBhcnRpYWxHcm91cEJ5S2V5Q29tYmluaW5nVmFsdWVzLmRlZmF1bHRfdHlwZV9oaW50c2otYQAAWBoAAABMaWZ0ZWRDb21iaW5lUGVyS2V5LmV4cGFuZGotYQAAWCAAAABQYXJ0aWFsR3JvdXBCeUtleUNvbWJpbmluZ1ZhbHVlc2otYQAAWBUAAABGaW5pc2hDb21iaW5lLnByb2Nlc3NqLWEAAFguAAAAUGFydGlhbEdyb3VwQnlLZXlDb21iaW5pbmdWYWx1ZXMuZmluaXNoX2J1bmRsZWotYQAAWBMAAABMaWZ0ZWRDb21iaW5lUGVyS2V5ai1hAAB1an1pAABYLAAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmhlbHBlcl90cmFuc2Zvcm1zcjmEAACFgXI6hAAAfXI7hAAAYnRVGmFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljKFiMHwAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiIKVXNlci1mYWNpbmcgY2xhc3NlcyBmb3IgTWV0cmljcyBBUEkuCgpUaGUgY2xhc3NlcyBpbiB0aGlzIGZpbGUgYWxsb3cgdXNlcnMgdG8gZGVmaW5lIGFuZCB1c2UgbWV0cmljcyB0byBiZSBjb2xsZWN0ZWQKYW5kIGRpc3BsYXllZCBhcyBwYXJ0IG9mIHRoZWlyIHBpcGVsaW5lIGV4ZWN1dGlvbi4KCi0gTWV0cmljcyAtIFRoaXMgY2xhc3MgbGV0cyBwaXBlbGluZSBhbmQgdHJhbnNmb3JtIHdyaXRlcnMgY3JlYXRlIGFuZCBhY2Nlc3MKICAgIG1ldHJpYyBvYmplY3RzIHN1Y2ggYXMgY291bnRlcnMsIGRpc3RyaWJ1dGlvbnMsIGV0Yy4KIiIiCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgaW5zcGVjdApmcm9tIGJ1aWx0aW5zIGltcG9ydCBvYmplY3QKCmZyb20gYXBhY2hlX2JlYW0ubWV0cmljcy5leGVjdXRpb24gaW1wb3J0IE1ldHJpY3NFbnZpcm9ubWVudApmcm9tIGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZSBpbXBvcnQgQ291bnRlcgpmcm9tIGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZSBpbXBvcnQgRGlzdHJpYnV0aW9uCmZyb20gYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWNiYXNlIGltcG9ydCBHYXVnZQpmcm9tIGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZSBpbXBvcnQgTWV0cmljTmFtZQoKX19hbGxfXyA9IFsnTWV0cmljcycsICdNZXRyaWNzRmlsdGVyJ10KCgpjbGFzcyBNZXRyaWNzKG9iamVjdCk6CiAgIiIiTGV0cyB1c2VycyBjcmVhdGUvYWNjZXNzIG1ldHJpYyBvYmplY3RzIGR1cmluZyBwaXBlbGluZSBleGVjdXRpb24uIiIiCiAgQHN0YXRpY21ldGhvZAogIGRlZiBnZXRfbmFtZXNwYWNlKG5hbWVzcGFjZSk6CiAgICBpZiBpbnNwZWN0LmlzY2xhc3MobmFtZXNwYWNlKToKICAgICAgcmV0dXJuICd7fS57fScuZm9ybWF0KG5hbWVzcGFjZS5fX21vZHVsZV9fLCBuYW1lc3BhY2UuX19uYW1lX18pCiAgICBlbGlmIGlzaW5zdGFuY2UobmFtZXNwYWNlLCBzdHIpOgogICAgICByZXR1cm4gbmFtZXNwYWNlCiAgICBlbHNlOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdVbmtub3duIG5hbWVzcGFjZSB0eXBlJykKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBjb3VudGVyKG5hbWVzcGFjZSwgbmFtZSk6CiAgICAiIiJPYnRhaW5zIG9yIGNyZWF0ZXMgYSBDb3VudGVyIG1ldHJpYy4KCiAgICBBcmdzOgogICAgICBuYW1lc3BhY2U6IEEgY2xhc3Mgb3Igc3RyaW5nIHRoYXQgZ2l2ZXMgdGhlIG5hbWVzcGFjZSB0byBhIG1ldHJpYwogICAgICBuYW1lOiBBIHN0cmluZyB0aGF0IGdpdmVzIGEgdW5pcXVlIG5hbWUgdG8gYSBtZXRyaWMKCiAgICBSZXR1cm5zOgogICAgICBBIENvdW50ZXIgb2JqZWN0LgogICAgIiIiCiAgICBuYW1lc3BhY2UgPSBNZXRyaWNzLmdldF9uYW1lc3BhY2UobmFtZXNwYWNlKQogICAgcmV0dXJuIE1ldHJpY3MuRGVsZWdhdGluZ0NvdW50ZXIoTWV0cmljTmFtZShuYW1lc3BhY2UsIG5hbWUpKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGRpc3RyaWJ1dGlvbihuYW1lc3BhY2UsIG5hbWUpOgogICAgIiIiT2J0YWlucyBvciBjcmVhdGVzIGEgRGlzdHJpYnV0aW9uIG1ldHJpYy4KCiAgICBEaXN0cmlidXRpb24gbWV0cmljcyBhcmUgcmVzdHJpY3RlZCB0byBpbnRlZ2VyLW9ubHkgZGlzdHJpYnV0aW9ucy4KCiAgICBBcmdzOgogICAgICBuYW1lc3BhY2U6IEEgY2xhc3Mgb3Igc3RyaW5nIHRoYXQgZ2l2ZXMgdGhlIG5hbWVzcGFjZSB0byBhIG1ldHJpYwogICAgICBuYW1lOiBBIHN0cmluZyB0aGF0IGdpdmVzIGEgdW5pcXVlIG5hbWUgdG8gYSBtZXRyaWMKCiAgICBSZXR1cm5zOgogICAgICBBIERpc3RyaWJ1dGlvbiBvYmplY3QuCiAgICAiIiIKICAgIG5hbWVzcGFjZSA9IE1ldHJpY3MuZ2V0X25hbWVzcGFjZShuYW1lc3BhY2UpCiAgICByZXR1cm4gTWV0cmljcy5EZWxlZ2F0aW5nRGlzdHJpYnV0aW9uKE1ldHJpY05hbWUobmFtZXNwYWNlLCBuYW1lKSkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBnYXVnZShuYW1lc3BhY2UsIG5hbWUpOgogICAgIiIiT2J0YWlucyBvciBjcmVhdGVzIGEgR2F1Z2UgbWV0cmljLgoKICAgIEdhdWdlIG1ldHJpY3MgYXJlIHJlc3RyaWN0ZWQgdG8gaW50ZWdlci1vbmx5IHZhbHVlcy4KCiAgICBBcmdzOgogICAgICBuYW1lc3BhY2U6IEEgY2xhc3Mgb3Igc3RyaW5nIHRoYXQgZ2l2ZXMgdGhlIG5hbWVzcGFjZSB0byBhIG1ldHJpYwogICAgICBuYW1lOiBBIHN0cmluZyB0aGF0IGdpdmVzIGEgdW5pcXVlIG5hbWUgdG8gYSBtZXRyaWMKCiAgICBSZXR1cm5zOgogICAgICBBIERpc3RyaWJ1dGlvbiBvYmplY3QuCiAgICAiIiIKICAgIG5hbWVzcGFjZSA9IE1ldHJpY3MuZ2V0X25hbWVzcGFjZShuYW1lc3BhY2UpCiAgICByZXR1cm4gTWV0cmljcy5EZWxlZ2F0aW5nR2F1Z2UoTWV0cmljTmFtZShuYW1lc3BhY2UsIG5hbWUpKQoKICBjbGFzcyBEZWxlZ2F0aW5nQ291bnRlcihDb3VudGVyKToKICAgICIiIk1ldHJpY3MgQ291bnRlciB0aGF0IERlbGVnYXRlcyBmdW5jdGlvbmFsaXR5IHRvIE1ldHJpY3NFbnZpcm9ubWVudC4iIiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgbWV0cmljX25hbWUpOgogICAgICBzdXBlcihNZXRyaWNzLkRlbGVnYXRpbmdDb3VudGVyLCBzZWxmKS5fX2luaXRfXygpCiAgICAgIHNlbGYubWV0cmljX25hbWUgPSBtZXRyaWNfbmFtZQoKICAgIGRlZiBpbmMoc2VsZiwgbj0xKToKICAgICAgY29udGFpbmVyID0gTWV0cmljc0Vudmlyb25tZW50LmN1cnJlbnRfY29udGFpbmVyKCkKICAgICAgaWYgY29udGFpbmVyIGlzIG5vdCBOb25lOgogICAgICAgIGNvbnRhaW5lci5nZXRfY291bnRlcihzZWxmLm1ldHJpY19uYW1lKS5pbmMobikKCiAgY2xhc3MgRGVsZWdhdGluZ0Rpc3RyaWJ1dGlvbihEaXN0cmlidXRpb24pOgogICAgIiIiTWV0cmljcyBEaXN0cmlidXRpb24gRGVsZWdhdGVzIGZ1bmN0aW9uYWxpdHkgdG8gTWV0cmljc0Vudmlyb25tZW50LiIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRyaWNfbmFtZSk6CiAgICAgIHN1cGVyKE1ldHJpY3MuRGVsZWdhdGluZ0Rpc3RyaWJ1dGlvbiwgc2VsZikuX19pbml0X18oKQogICAgICBzZWxmLm1ldHJpY19uYW1lID0gbWV0cmljX25hbWUKCiAgICBkZWYgdXBkYXRlKHNlbGYsIHZhbHVlKToKICAgICAgY29udGFpbmVyID0gTWV0cmljc0Vudmlyb25tZW50LmN1cnJlbnRfY29udGFpbmVyKCkKICAgICAgaWYgY29udGFpbmVyIGlzIG5vdCBOb25lOgogICAgICAgIGNvbnRhaW5lci5nZXRfZGlzdHJpYnV0aW9uKHNlbGYubWV0cmljX25hbWUpLnVwZGF0ZSh2YWx1ZSkKCiAgY2xhc3MgRGVsZWdhdGluZ0dhdWdlKEdhdWdlKToKICAgICIiIk1ldHJpY3MgR2F1Z2UgdGhhdCBEZWxlZ2F0ZXMgZnVuY3Rpb25hbGl0eSB0byBNZXRyaWNzRW52aXJvbm1lbnQuIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG1ldHJpY19uYW1lKToKICAgICAgc3VwZXIoTWV0cmljcy5EZWxlZ2F0aW5nR2F1Z2UsIHNlbGYpLl9faW5pdF9fKCkKICAgICAgc2VsZi5tZXRyaWNfbmFtZSA9IG1ldHJpY19uYW1lCgogICAgZGVmIHNldChzZWxmLCB2YWx1ZSk6CiAgICAgIGNvbnRhaW5lciA9IE1ldHJpY3NFbnZpcm9ubWVudC5jdXJyZW50X2NvbnRhaW5lcigpCiAgICAgIGlmIGNvbnRhaW5lciBpcyBub3QgTm9uZToKICAgICAgICBjb250YWluZXIuZ2V0X2dhdWdlKHNlbGYubWV0cmljX25hbWUpLnNldCh2YWx1ZSkKCgpjbGFzcyBNZXRyaWNSZXN1bHRzKG9iamVjdCk6CiAgQ09VTlRFUlMgPSAiY291bnRlcnMiCiAgRElTVFJJQlVUSU9OUyA9ICJkaXN0cmlidXRpb25zIgogIEdBVUdFUyA9ICJnYXVnZXMiCgogIEBzdGF0aWNtZXRob2QKICBkZWYgX21hdGNoZXNfbmFtZShmaWx0ZXIsIG1ldHJpY19rZXkpOgogICAgaWYgbm90IGZpbHRlci5uYW1lcyBhbmQgbm90IGZpbHRlci5uYW1lc3BhY2VzOgogICAgICByZXR1cm4gVHJ1ZQoKICAgIGlmICgoZmlsdGVyLm5hbWVzcGFjZXMgYW5kCiAgICAgICAgIG1ldHJpY19rZXkubWV0cmljLm5hbWVzcGFjZSBpbiBmaWx0ZXIubmFtZXNwYWNlcykgb3IKICAgICAgICAoZmlsdGVyLm5hbWVzIGFuZAogICAgICAgICBtZXRyaWNfa2V5Lm1ldHJpYy5uYW1lIGluIGZpbHRlci5uYW1lcykpOgogICAgICByZXR1cm4gVHJ1ZQogICAgcmV0dXJuIEZhbHNlCgogIEBzdGF0aWNtZXRob2QKICBkZWYgX21hdGNoZXNfc3ViX3BhdGgoYWN0dWFsX3Njb3BlLCBmaWx0ZXJfc2NvcGUpOgogICAgc3RhcnRfcG9zID0gYWN0dWFsX3Njb3BlLmZpbmQoZmlsdGVyX3Njb3BlKQogICAgZW5kX3BvcyA9IHN0YXJ0X3BvcyArIGxlbihmaWx0ZXJfc2NvcGUpCgogICAgaWYgc3RhcnRfcG9zID09IC0xOgogICAgICByZXR1cm4gRmFsc2UgICMgTm8gbWF0Y2ggYXQgYWxsCiAgICBlbGlmIHN0YXJ0X3BvcyAhPSAwIGFuZCBhY3R1YWxfc2NvcGVbc3RhcnRfcG9zIC0gMV0gIT0gJy8nOgogICAgICByZXR1cm4gRmFsc2UgICMgVGhlIGZpcnN0IGVudHJ5IHdhcyBub3QgZXhhY3RseSBtYXRjaGVkCiAgICBlbGlmIGVuZF9wb3MgIT0gbGVuKGFjdHVhbF9zY29wZSkgYW5kIGFjdHVhbF9zY29wZVtlbmRfcG9zXSAhPSAnLyc6CiAgICAgIHJldHVybiBGYWxzZSAgIyBUaGUgbGFzdCBlbnRyeSB3YXMgbm90IGV4YWN0bHkgbWF0Y2hlZAogICAgcmV0dXJuIFRydWUKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBfbWF0Y2hlc19zY29wZShmaWx0ZXIsIG1ldHJpY19rZXkpOgogICAgaWYgbm90IGZpbHRlci5zdGVwczoKICAgICAgcmV0dXJuIFRydWUKCiAgICBmb3Igc3RlcCBpbiBmaWx0ZXIuc3RlcHM6CiAgICAgIGlmIE1ldHJpY1Jlc3VsdHMuX21hdGNoZXNfc3ViX3BhdGgobWV0cmljX2tleS5zdGVwLCBzdGVwKToKICAgICAgICByZXR1cm4gVHJ1ZQoKICAgIHJldHVybiBGYWxzZQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIG1hdGNoZXMoZmlsdGVyLCBtZXRyaWNfa2V5KToKICAgIGlmIGZpbHRlciBpcyBOb25lOgogICAgICByZXR1cm4gVHJ1ZQoKICAgIGlmIChNZXRyaWNSZXN1bHRzLl9tYXRjaGVzX25hbWUoZmlsdGVyLCBtZXRyaWNfa2V5KSBhbmQKICAgICAgICBNZXRyaWNSZXN1bHRzLl9tYXRjaGVzX3Njb3BlKGZpbHRlciwgbWV0cmljX2tleSkpOgogICAgICByZXR1cm4gVHJ1ZQogICAgcmV0dXJuIEZhbHNlCgogIGRlZiBxdWVyeShzZWxmLCBmaWx0ZXI9Tm9uZSk6CiAgICAiIiJRdWVyaWVzIHRoZSBydW5uZXIgZm9yIGV4aXN0aW5nIHVzZXIgbWV0cmljcyB0aGF0IG1hdGNoIHRoZSBmaWx0ZXIuCgogICAgSXQgc2hvdWxkIHJldHVybiBhIGRpY3Rpb25hcnksIHdpdGggbGlzdHMgb2YgZWFjaCBraW5kIG9mIG1ldHJpYywgYW5kCiAgICBlYWNoIGxpc3QgY29udGFpbnMgdGhlIGNvcnJlc3BvbmRpbmcga2luZCBvZiBNZXRyaWNSZXN1bHQuIExpa2Ugc286CgogICAgICAgIHsKICAgICAgICAgICJjb3VudGVycyI6IFtNZXRyaWNSZXN1bHQoY291bnRlcl9rZXksIGNvbW1pdHRlZCwgYXR0ZW1wdGVkKSwgLi4uXSwKICAgICAgICAgICJkaXN0cmlidXRpb25zIjogW01ldHJpY1Jlc3VsdChkaXN0X2tleSwgY29tbWl0dGVkLCBhdHRlbXB0ZWQpLCAuLi5dLAogICAgICAgICAgImdhdWdlcyI6IFtdICAvLyBFbXB0eSBsaXN0IGlmIG5vdGhpbmcgbWF0Y2hlZCB0aGUgZmlsdGVyLgogICAgICAgIH0KCiAgICBUaGUgY29tbWl0dGVkIC8gYXR0ZW1wdGVkIHZhbHVlcyBhcmUgRGlzdHJpYnV0aW9uUmVzdWx0IC8gR2F1Z2VSZXN1bHQgLyBpbnQKICAgIG9iamVjdHMuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCgpjbGFzcyBNZXRyaWNzRmlsdGVyKG9iamVjdCk6CiAgIiIiU2ltcGxlIG9iamVjdCB0byBmaWx0ZXIgbWV0cmljcyByZXN1bHRzLgoKICBUaGlzIGNsYXNzIGlzIGV4cGVyaW1lbnRhbC4gTm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgSWYgZmlsdGVycyBieSBtYXRjaGluZyBhIHJlc3VsdCdzIHN0ZXAtbmFtZXNwYWNlLW5hbWUgd2l0aCB0aHJlZSBpbnRlcm5hbAogIHNldHMuIE5vIGV4ZWN1dGlvbi9tYXRjaGluZyBsb2dpYyBpcyBhZGRlZCB0byB0aGlzIG9iamVjdCwgc28gdGhhdCBpdCBtYXkKICBiZSB1c2VkIHRvIGNvbnN0cnVjdCBhcmd1bWVudHMgYXMgYW4gUlBDIHJlcXVlc3QuIEl0IGlzIGxlZnQgZm9yIHJ1bm5lcnMKICB0byBpbXBsZW1lbnQgbWF0Y2hpbmcgbG9naWMgYnkgdGhlbXNlbHZlcy4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZik6CiAgICBzZWxmLl9uYW1lcyA9IHNldCgpCiAgICBzZWxmLl9uYW1lc3BhY2VzID0gc2V0KCkKICAgIHNlbGYuX3N0ZXBzID0gc2V0KCkKCiAgQHByb3BlcnR5CiAgZGVmIHN0ZXBzKHNlbGYpOgogICAgcmV0dXJuIGZyb3plbnNldChzZWxmLl9zdGVwcykKCiAgQHByb3BlcnR5CiAgZGVmIG5hbWVzKHNlbGYpOgogICAgcmV0dXJuIGZyb3plbnNldChzZWxmLl9uYW1lcykKCiAgQHByb3BlcnR5CiAgZGVmIG5hbWVzcGFjZXMoc2VsZik6CiAgICByZXR1cm4gZnJvemVuc2V0KHNlbGYuX25hbWVzcGFjZXMpCgogIGRlZiB3aXRoX25hbWUoc2VsZiwgbmFtZSk6CiAgICByZXR1cm4gc2VsZi53aXRoX25hbWVzKFtuYW1lXSkKCiAgZGVmIHdpdGhfbmFtZXMoc2VsZiwgbmFtZXMpOgogICAgaWYgaXNpbnN0YW5jZShuYW1lcywgc3RyKToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignTmFtZXMgbXVzdCBiZSBhIGNvbGxlY3Rpb24sIG5vdCBhIHN0cmluZycpCgogICAgc2VsZi5fbmFtZXMudXBkYXRlKG5hbWVzKQogICAgcmV0dXJuIHNlbGYKCiAgZGVmIHdpdGhfbmFtZXNwYWNlKHNlbGYsIG5hbWVzcGFjZSk6CiAgICByZXR1cm4gc2VsZi53aXRoX25hbWVzcGFjZXMoW25hbWVzcGFjZV0pCgogIGRlZiB3aXRoX25hbWVzcGFjZXMoc2VsZiwgbmFtZXNwYWNlcyk6CiAgICBpZiBpc2luc3RhbmNlKG5hbWVzcGFjZXMsIHN0cik6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ05hbWVzcGFjZXMgbXVzdCBiZSBhbiBpdGVyYWJsZSwgbm90IGEgc3RyaW5nJykKCiAgICBzZWxmLl9uYW1lc3BhY2VzLnVwZGF0ZShbTWV0cmljcy5nZXRfbmFtZXNwYWNlKG5zKSBmb3IgbnMgaW4gbmFtZXNwYWNlc10pCiAgICByZXR1cm4gc2VsZgoKICBkZWYgd2l0aF9zdGVwKHNlbGYsIHN0ZXApOgogICAgcmV0dXJuIHNlbGYud2l0aF9zdGVwcyhbc3RlcF0pCgogIGRlZiB3aXRoX3N0ZXBzKHNlbGYsIHN0ZXBzKToKICAgIGlmIGlzaW5zdGFuY2Uoc3RlcHMsIHN0cik6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1N0ZXBzIG11c3QgYmUgYW4gaXRlcmFibGUsIG5vdCBhIHN0cmluZycpCgogICAgc2VsZi5fc3RlcHMudXBkYXRlKHN0ZXBzKQogICAgcmV0dXJuIHNlbGYKfXI8hAAAKFgXAAAATWV0cmljc0ZpbHRlci53aXRoX3N0ZXBYAwAAAGRlZkv7S/2HWBUAAABNZXRyaWNSZXN1bHRzLm1hdGNoZXNYAwAAAGRlZkuwS7mHWBUAAABNZXRyaWNzLmdldF9uYW1lc3BhY2VYAwAAAGRlZksrSzOHWBsAAABNZXRyaWNSZXN1bHRzLl9tYXRjaGVzX25hbWVYAwAAAGRlZkuMS5eHWBcAAABNZXRyaWNzRmlsdGVyLndpdGhfbmFtZVgDAAAAZGVmS+dL6YdYGAAAAE1ldHJpY3NGaWx0ZXIud2l0aF9zdGVwc1gDAAAAZGVmS/5NBAGHWBMAAABNZXRyaWNzRmlsdGVyLm5hbWVzWAMAAABkZWZL30vih1glAAAATWV0cmljcy5EZWxlZ2F0aW5nRGlzdHJpYnV0aW9uLnVwZGF0ZVgDAAAAZGVmS3VLeYdYBwAAAE1ldHJpY3NYBQAAAGNsYXNzSylLhYdYEwAAAE1ldHJpY1Jlc3VsdHMucXVlcnlYAwAAAGRlZku6S8qHWB4AAABNZXRyaWNzLkRlbGVnYXRpbmdEaXN0cmlidXRpb25YBQAAAGNsYXNzS25LeYdYFgAAAE1ldHJpY3NGaWx0ZXIuX19pbml0X19YAwAAAGRlZkvWS9qHWBcAAABNZXRyaWNzLkRlbGVnYXRpbmdHYXVnZVgFAAAAY2xhc3NLekuFh1gYAAAATWV0cmljc0ZpbHRlci5uYW1lc3BhY2VzWAMAAABkZWZL40vmh1gNAAAATWV0cmljc0ZpbHRlclgFAAAAY2xhc3NLzE0EAYdYGwAAAE1ldHJpY3MuRGVsZWdhdGluZ0dhdWdlLnNldFgDAAAAZGVmS4FLhYdYEwAAAE1ldHJpY3NGaWx0ZXIuc3RlcHNYAwAAAGRlZkvbS96HWA0AAABNZXRyaWNzLmdhdWdlWAMAAABkZWZLUkthh1gcAAAATWV0cmljUmVzdWx0cy5fbWF0Y2hlc19zY29wZVgDAAAAZGVmS6VLr4dYHwAAAE1ldHJpY1Jlc3VsdHMuX21hdGNoZXNfc3ViX3BhdGhYAwAAAGRlZkuYS6SHWA0AAABNZXRyaWNSZXN1bHRzWAUAAABjbGFzc0uHS8qHWCcAAABNZXRyaWNzLkRlbGVnYXRpbmdEaXN0cmlidXRpb24uX19pbml0X19YAwAAAGRlZktxS3SHWB0AAABNZXRyaWNzRmlsdGVyLndpdGhfbmFtZXNwYWNlc1gDAAAAZGVmS/RL+odYIAAAAE1ldHJpY3MuRGVsZWdhdGluZ0dhdWdlLl9faW5pdF9fWAMAAABkZWZLfUuAh1gcAAAATWV0cmljc0ZpbHRlci53aXRoX25hbWVzcGFjZVgDAAAAZGVmS/FL84dYHQAAAE1ldHJpY3MuRGVsZWdhdGluZ0NvdW50ZXIuaW5jWAMAAABkZWZLaUtth1gPAAAATWV0cmljcy5jb3VudGVyWAMAAABkZWZLNEtBh1giAAAATWV0cmljcy5EZWxlZ2F0aW5nQ291bnRlci5fX2luaXRfX1gDAAAAZGVmS2VLaIdYGQAAAE1ldHJpY3MuRGVsZWdhdGluZ0NvdW50ZXJYBQAAAGNsYXNzS2JLbYdYGAAAAE1ldHJpY3NGaWx0ZXIud2l0aF9uYW1lc1gDAAAAZGVmS+pL8IdYFAAAAE1ldHJpY3MuZGlzdHJpYnV0aW9uWAMAAABkZWZLQktRh3V9cj2EAAAoWB0AAABNZXRyaWNzLkRlbGVnYXRpbmdDb3VudGVyLmluY2r+aAAAWAcAAABNZXRyaWNzav5oAABYDQAAAE1ldHJpY3MuZ2F1Z2Vq/mgAAFgeAAAATWV0cmljcy5EZWxlZ2F0aW5nRGlzdHJpYnV0aW9uav5oAABYFwAAAE1ldHJpY3MuRGVsZWdhdGluZ0dhdWdlav5oAABYFQAAAE1ldHJpY3MuZ2V0X25hbWVzcGFjZWr+aAAAWB0AAABNZXRyaWNzRmlsdGVyLndpdGhfbmFtZXNwYWNlc2r+aAAAWBcAAABNZXRyaWNzRmlsdGVyLndpdGhfbmFtZWr+aAAAWA8AAABNZXRyaWNzLmNvdW50ZXJq/mgAAFgXAAAATWV0cmljc0ZpbHRlci53aXRoX3N0ZXBq/mgAAFgUAAAATWV0cmljcy5kaXN0cmlidXRpb25q/mgAAFgYAAAATWV0cmljc0ZpbHRlci53aXRoX3N0ZXBzav5oAABYHAAAAE1ldHJpY3NGaWx0ZXIud2l0aF9uYW1lc3BhY2Vq/mgAAFgZAAAATWV0cmljcy5EZWxlZ2F0aW5nQ291bnRlcmr+aAAAWA0AAABNZXRyaWNzRmlsdGVyav5oAABYGwAAAE1ldHJpY3MuRGVsZWdhdGluZ0dhdWdlLnNldGr+aAAAWBgAAABNZXRyaWNzRmlsdGVyLndpdGhfbmFtZXNq/mgAAFglAAAATWV0cmljcy5EZWxlZ2F0aW5nRGlzdHJpYnV0aW9uLnVwZGF0ZWr+aAAAdWp9aQAAWBoAAABhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpY3I+hAAAhYFyP4QAAH1yQIQAAGJ0VTFhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9qb2JfYXBpX3BiMl9ncnBjKFiTFgAAZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKIyBHZW5lcmF0ZWQgYnkgdGhlIGdSUEMgUHl0aG9uIHByb3RvY29sIGNvbXBpbGVyIHBsdWdpbi4gRE8gTk9UIEVESVQhCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdAppbXBvcnQgZ3JwYwoKZnJvbSAuIGltcG9ydCBiZWFtX2pvYl9hcGlfcGIyIGFzIGJlYW1fX2pvYl9fYXBpX19wYjIKCgpjbGFzcyBKb2JTZXJ2aWNlU3R1YihvYmplY3QpOgogICIiIkpvYiBTZXJ2aWNlIGZvciBydW5uaW5nIFJ1bm5lckFQSSBwaXBlbGluZXMKICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGNoYW5uZWwpOgogICAgIiIiQ29uc3RydWN0b3IuCgogICAgQXJnczoKICAgICAgY2hhbm5lbDogQSBncnBjLkNoYW5uZWwuCiAgICAiIiIKICAgIHNlbGYuUHJlcGFyZSA9IGNoYW5uZWwudW5hcnlfdW5hcnkoCiAgICAgICAgJy9vcmcuYXBhY2hlLmJlYW0ubW9kZWwuam9iX21hbmFnZW1lbnQudjEuSm9iU2VydmljZS9QcmVwYXJlJywKICAgICAgICByZXF1ZXN0X3NlcmlhbGl6ZXI9YmVhbV9fam9iX19hcGlfX3BiMi5QcmVwYXJlSm9iUmVxdWVzdC5TZXJpYWxpemVUb1N0cmluZywKICAgICAgICByZXNwb25zZV9kZXNlcmlhbGl6ZXI9YmVhbV9fam9iX19hcGlfX3BiMi5QcmVwYXJlSm9iUmVzcG9uc2UuRnJvbVN0cmluZywKICAgICAgICApCiAgICBzZWxmLlJ1biA9IGNoYW5uZWwudW5hcnlfdW5hcnkoCiAgICAgICAgJy9vcmcuYXBhY2hlLmJlYW0ubW9kZWwuam9iX21hbmFnZW1lbnQudjEuSm9iU2VydmljZS9SdW4nLAogICAgICAgIHJlcXVlc3Rfc2VyaWFsaXplcj1iZWFtX19qb2JfX2FwaV9fcGIyLlJ1bkpvYlJlcXVlc3QuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICAgcmVzcG9uc2VfZGVzZXJpYWxpemVyPWJlYW1fX2pvYl9fYXBpX19wYjIuUnVuSm9iUmVzcG9uc2UuRnJvbVN0cmluZywKICAgICAgICApCiAgICBzZWxmLkdldFN0YXRlID0gY2hhbm5lbC51bmFyeV91bmFyeSgKICAgICAgICAnL29yZy5hcGFjaGUuYmVhbS5tb2RlbC5qb2JfbWFuYWdlbWVudC52MS5Kb2JTZXJ2aWNlL0dldFN0YXRlJywKICAgICAgICByZXF1ZXN0X3NlcmlhbGl6ZXI9YmVhbV9fam9iX19hcGlfX3BiMi5HZXRKb2JTdGF0ZVJlcXVlc3QuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICAgcmVzcG9uc2VfZGVzZXJpYWxpemVyPWJlYW1fX2pvYl9fYXBpX19wYjIuR2V0Sm9iU3RhdGVSZXNwb25zZS5Gcm9tU3RyaW5nLAogICAgICAgICkKICAgIHNlbGYuQ2FuY2VsID0gY2hhbm5lbC51bmFyeV91bmFyeSgKICAgICAgICAnL29yZy5hcGFjaGUuYmVhbS5tb2RlbC5qb2JfbWFuYWdlbWVudC52MS5Kb2JTZXJ2aWNlL0NhbmNlbCcsCiAgICAgICAgcmVxdWVzdF9zZXJpYWxpemVyPWJlYW1fX2pvYl9fYXBpX19wYjIuQ2FuY2VsSm9iUmVxdWVzdC5TZXJpYWxpemVUb1N0cmluZywKICAgICAgICByZXNwb25zZV9kZXNlcmlhbGl6ZXI9YmVhbV9fam9iX19hcGlfX3BiMi5DYW5jZWxKb2JSZXNwb25zZS5Gcm9tU3RyaW5nLAogICAgICAgICkKICAgIHNlbGYuR2V0U3RhdGVTdHJlYW0gPSBjaGFubmVsLnVuYXJ5X3N0cmVhbSgKICAgICAgICAnL29yZy5hcGFjaGUuYmVhbS5tb2RlbC5qb2JfbWFuYWdlbWVudC52MS5Kb2JTZXJ2aWNlL0dldFN0YXRlU3RyZWFtJywKICAgICAgICByZXF1ZXN0X3NlcmlhbGl6ZXI9YmVhbV9fam9iX19hcGlfX3BiMi5HZXRKb2JTdGF0ZVJlcXVlc3QuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICAgcmVzcG9uc2VfZGVzZXJpYWxpemVyPWJlYW1fX2pvYl9fYXBpX19wYjIuR2V0Sm9iU3RhdGVSZXNwb25zZS5Gcm9tU3RyaW5nLAogICAgICAgICkKICAgIHNlbGYuR2V0TWVzc2FnZVN0cmVhbSA9IGNoYW5uZWwudW5hcnlfc3RyZWFtKAogICAgICAgICcvb3JnLmFwYWNoZS5iZWFtLm1vZGVsLmpvYl9tYW5hZ2VtZW50LnYxLkpvYlNlcnZpY2UvR2V0TWVzc2FnZVN0cmVhbScsCiAgICAgICAgcmVxdWVzdF9zZXJpYWxpemVyPWJlYW1fX2pvYl9fYXBpX19wYjIuSm9iTWVzc2FnZXNSZXF1ZXN0LlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICAgIHJlc3BvbnNlX2Rlc2VyaWFsaXplcj1iZWFtX19qb2JfX2FwaV9fcGIyLkpvYk1lc3NhZ2VzUmVzcG9uc2UuRnJvbVN0cmluZywKICAgICAgICApCgoKY2xhc3MgSm9iU2VydmljZVNlcnZpY2VyKG9iamVjdCk6CiAgIiIiSm9iIFNlcnZpY2UgZm9yIHJ1bm5pbmcgUnVubmVyQVBJIHBpcGVsaW5lcwogICIiIgoKICBkZWYgUHJlcGFyZShzZWxmLCByZXF1ZXN0LCBjb250ZXh0KToKICAgICIiIlByZXBhcmUgYSBqb2IgZm9yIGV4ZWN1dGlvbi4gVGhlIGpvYiB3aWxsIG5vdCBiZSBleGVjdXRlZCB1bnRpbCBhIGNhbGwgaXMgbWFkZSB0byBydW4gd2l0aCB0aGUKICAgIHJldHVybmVkIHByZXBhcmF0aW9uSWQuCiAgICAiIiIKICAgIGNvbnRleHQuc2V0X2NvZGUoZ3JwYy5TdGF0dXNDb2RlLlVOSU1QTEVNRU5URUQpCiAgICBjb250ZXh0LnNldF9kZXRhaWxzKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCgogIGRlZiBSdW4oc2VsZiwgcmVxdWVzdCwgY29udGV4dCk6CiAgICAiIiJTdWJtaXQgdGhlIGpvYiBmb3IgZXhlY3V0aW9uCiAgICAiIiIKICAgIGNvbnRleHQuc2V0X2NvZGUoZ3JwYy5TdGF0dXNDb2RlLlVOSU1QTEVNRU5URUQpCiAgICBjb250ZXh0LnNldF9kZXRhaWxzKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCgogIGRlZiBHZXRTdGF0ZShzZWxmLCByZXF1ZXN0LCBjb250ZXh0KToKICAgICIiIkdldCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgam9iCiAgICAiIiIKICAgIGNvbnRleHQuc2V0X2NvZGUoZ3JwYy5TdGF0dXNDb2RlLlVOSU1QTEVNRU5URUQpCiAgICBjb250ZXh0LnNldF9kZXRhaWxzKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCgogIGRlZiBDYW5jZWwoc2VsZiwgcmVxdWVzdCwgY29udGV4dCk6CiAgICAiIiJDYW5jZWwgdGhlIGpvYgogICAgIiIiCiAgICBjb250ZXh0LnNldF9jb2RlKGdycGMuU3RhdHVzQ29kZS5VTklNUExFTUVOVEVEKQogICAgY29udGV4dC5zZXRfZGV0YWlscygnTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQoKICBkZWYgR2V0U3RhdGVTdHJlYW0oc2VsZiwgcmVxdWVzdCwgY29udGV4dCk6CiAgICAiIiJTdWJzY3JpYmUgdG8gYSBzdHJlYW0gb2Ygc3RhdGUgY2hhbmdlcyBvZiB0aGUgam9iLCB3aWxsIGltbWVkaWF0ZWx5IHJldHVybiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgam9iIGFzIHRoZSBmaXJzdCByZXNwb25zZS4KICAgICIiIgogICAgY29udGV4dC5zZXRfY29kZShncnBjLlN0YXR1c0NvZGUuVU5JTVBMRU1FTlRFRCkKICAgIGNvbnRleHQuc2V0X2RldGFpbHMoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKCiAgZGVmIEdldE1lc3NhZ2VTdHJlYW0oc2VsZiwgcmVxdWVzdCwgY29udGV4dCk6CiAgICAiIiJTdWJzY3JpYmUgdG8gYSBzdHJlYW0gb2Ygc3RhdGUgY2hhbmdlcyBhbmQgbWVzc2FnZXMgZnJvbSB0aGUgam9iCiAgICAiIiIKICAgIGNvbnRleHQuc2V0X2NvZGUoZ3JwYy5TdGF0dXNDb2RlLlVOSU1QTEVNRU5URUQpCiAgICBjb250ZXh0LnNldF9kZXRhaWxzKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCgoKZGVmIGFkZF9Kb2JTZXJ2aWNlU2VydmljZXJfdG9fc2VydmVyKHNlcnZpY2VyLCBzZXJ2ZXIpOgogIHJwY19tZXRob2RfaGFuZGxlcnMgPSB7CiAgICAgICdQcmVwYXJlJzogZ3JwYy51bmFyeV91bmFyeV9ycGNfbWV0aG9kX2hhbmRsZXIoCiAgICAgICAgICBzZXJ2aWNlci5QcmVwYXJlLAogICAgICAgICAgcmVxdWVzdF9kZXNlcmlhbGl6ZXI9YmVhbV9fam9iX19hcGlfX3BiMi5QcmVwYXJlSm9iUmVxdWVzdC5Gcm9tU3RyaW5nLAogICAgICAgICAgcmVzcG9uc2Vfc2VyaWFsaXplcj1iZWFtX19qb2JfX2FwaV9fcGIyLlByZXBhcmVKb2JSZXNwb25zZS5TZXJpYWxpemVUb1N0cmluZywKICAgICAgKSwKICAgICAgJ1J1bic6IGdycGMudW5hcnlfdW5hcnlfcnBjX21ldGhvZF9oYW5kbGVyKAogICAgICAgICAgc2VydmljZXIuUnVuLAogICAgICAgICAgcmVxdWVzdF9kZXNlcmlhbGl6ZXI9YmVhbV9fam9iX19hcGlfX3BiMi5SdW5Kb2JSZXF1ZXN0LkZyb21TdHJpbmcsCiAgICAgICAgICByZXNwb25zZV9zZXJpYWxpemVyPWJlYW1fX2pvYl9fYXBpX19wYjIuUnVuSm9iUmVzcG9uc2UuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICksCiAgICAgICdHZXRTdGF0ZSc6IGdycGMudW5hcnlfdW5hcnlfcnBjX21ldGhvZF9oYW5kbGVyKAogICAgICAgICAgc2VydmljZXIuR2V0U3RhdGUsCiAgICAgICAgICByZXF1ZXN0X2Rlc2VyaWFsaXplcj1iZWFtX19qb2JfX2FwaV9fcGIyLkdldEpvYlN0YXRlUmVxdWVzdC5Gcm9tU3RyaW5nLAogICAgICAgICAgcmVzcG9uc2Vfc2VyaWFsaXplcj1iZWFtX19qb2JfX2FwaV9fcGIyLkdldEpvYlN0YXRlUmVzcG9uc2UuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICksCiAgICAgICdDYW5jZWwnOiBncnBjLnVuYXJ5X3VuYXJ5X3JwY19tZXRob2RfaGFuZGxlcigKICAgICAgICAgIHNlcnZpY2VyLkNhbmNlbCwKICAgICAgICAgIHJlcXVlc3RfZGVzZXJpYWxpemVyPWJlYW1fX2pvYl9fYXBpX19wYjIuQ2FuY2VsSm9iUmVxdWVzdC5Gcm9tU3RyaW5nLAogICAgICAgICAgcmVzcG9uc2Vfc2VyaWFsaXplcj1iZWFtX19qb2JfX2FwaV9fcGIyLkNhbmNlbEpvYlJlc3BvbnNlLlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICApLAogICAgICAnR2V0U3RhdGVTdHJlYW0nOiBncnBjLnVuYXJ5X3N0cmVhbV9ycGNfbWV0aG9kX2hhbmRsZXIoCiAgICAgICAgICBzZXJ2aWNlci5HZXRTdGF0ZVN0cmVhbSwKICAgICAgICAgIHJlcXVlc3RfZGVzZXJpYWxpemVyPWJlYW1fX2pvYl9fYXBpX19wYjIuR2V0Sm9iU3RhdGVSZXF1ZXN0LkZyb21TdHJpbmcsCiAgICAgICAgICByZXNwb25zZV9zZXJpYWxpemVyPWJlYW1fX2pvYl9fYXBpX19wYjIuR2V0Sm9iU3RhdGVSZXNwb25zZS5TZXJpYWxpemVUb1N0cmluZywKICAgICAgKSwKICAgICAgJ0dldE1lc3NhZ2VTdHJlYW0nOiBncnBjLnVuYXJ5X3N0cmVhbV9ycGNfbWV0aG9kX2hhbmRsZXIoCiAgICAgICAgICBzZXJ2aWNlci5HZXRNZXNzYWdlU3RyZWFtLAogICAgICAgICAgcmVxdWVzdF9kZXNlcmlhbGl6ZXI9YmVhbV9fam9iX19hcGlfX3BiMi5Kb2JNZXNzYWdlc1JlcXVlc3QuRnJvbVN0cmluZywKICAgICAgICAgIHJlc3BvbnNlX3NlcmlhbGl6ZXI9YmVhbV9fam9iX19hcGlfX3BiMi5Kb2JNZXNzYWdlc1Jlc3BvbnNlLlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICApLAogIH0KICBnZW5lcmljX2hhbmRsZXIgPSBncnBjLm1ldGhvZF9oYW5kbGVyc19nZW5lcmljX2hhbmRsZXIoCiAgICAgICdvcmcuYXBhY2hlLmJlYW0ubW9kZWwuam9iX21hbmFnZW1lbnQudjEuSm9iU2VydmljZScsIHJwY19tZXRob2RfaGFuZGxlcnMpCiAgc2VydmVyLmFkZF9nZW5lcmljX3JwY19oYW5kbGVycygoZ2VuZXJpY19oYW5kbGVyLCkpCn1yQYQAAChYGgAAAEpvYlNlcnZpY2VTZXJ2aWNlci5QcmVwYXJlWAMAAABkZWZLN0s+h1gjAAAASm9iU2VydmljZVNlcnZpY2VyLkdldE1lc3NhZ2VTdHJlYW1YAwAAAGRlZktbS2GHWBsAAABKb2JTZXJ2aWNlU2VydmljZXIuR2V0U3RhdGVYAwAAAGRlZktGS0yHWBkAAABKb2JTZXJ2aWNlU2VydmljZXIuQ2FuY2VsWAMAAABkZWZLTUtTh1ghAAAASm9iU2VydmljZVNlcnZpY2VyLkdldFN0YXRlU3RyZWFtWAMAAABkZWZLVEtah1ggAAAAYWRkX0pvYlNlcnZpY2VTZXJ2aWNlcl90b19zZXJ2ZXJYAwAAAGRlZktjS4eHWA4AAABKb2JTZXJ2aWNlU3R1YlgFAAAAY2xhc3NLCUsxh1gSAAAASm9iU2VydmljZVNlcnZpY2VyWAUAAABjbGFzc0szS2GHWBcAAABKb2JTZXJ2aWNlU3R1Yi5fX2luaXRfX1gDAAAAZGVmSw1LMYdYFgAAAEpvYlNlcnZpY2VTZXJ2aWNlci5SdW5YAwAAAGRlZks/S0WHdX1yQoQAAChYIwAAAEpvYlNlcnZpY2VTZXJ2aWNlci5HZXRNZXNzYWdlU3RyZWFtWDEAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9qb2JfYXBpX3BiMl9ncnBjckOEAABYGgAAAEpvYlNlcnZpY2VTZXJ2aWNlci5QcmVwYXJlakOEAABYGQAAAEpvYlNlcnZpY2VTZXJ2aWNlci5DYW5jZWxqQ4QAAFghAAAASm9iU2VydmljZVNlcnZpY2VyLkdldFN0YXRlU3RyZWFtakOEAABYIAAAAGFkZF9Kb2JTZXJ2aWNlU2VydmljZXJfdG9fc2VydmVyakOEAABYDgAAAEpvYlNlcnZpY2VTdHViakOEAABYEgAAAEpvYlNlcnZpY2VTZXJ2aWNlcmpDhAAAWBYAAABKb2JTZXJ2aWNlU2VydmljZXIuUnVuakOEAABYGwAAAEpvYlNlcnZpY2VTZXJ2aWNlci5HZXRTdGF0ZWpDhAAAdWp9aQAAWDEAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9qb2JfYXBpX3BiMl9ncnBjckSEAACFgXJFhAAAfXJGhAAAYnRyR4QAAFU1YXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsucXVlcmllcy5xdWVyeTAoWI0FAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIk5leG1hcmsgUXVlcnkgMDogUGFzcyB0aHJvdWdoIChzZW5kIGFuZCByZWNlaXZlIGF1Y3Rpb24gZXZlbnRzKS4KClRoZSBOZXhtYXJrIHN1aXRlIGlzIGEgc2VyaWVzIG9mIHF1ZXJpZXMgKHN0cmVhbWluZyBwaXBlbGluZXMpIHBlcmZvcm1lZApvbiBhIHNpbXVsYXRpb24gb2YgYXVjdGlvbiBldmVudHMuCgpUaGlzIHF1ZXJ5IGlzIGEgcGFzcyB0aHJvdWdoIHRoYXQKc2ltcGx5IHBhcnNlcyB0aGUgZXZlbnRzIGdlbmVyYXRlZCBieSB0aGUgbGF1bmNoZXIuIEl0IHNlcnZlcyBhcyBhIHRlc3QKdG8gdmVyaWZ5IHRoZSBpbmZyYXN0cnVjdHVyZS4KIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGFwYWNoZV9iZWFtIGFzIGJlYW0KZnJvbSBhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5uZXhtYXJrX3V0aWwgaW1wb3J0IFBhcnNlRXZlbnRGbgoKCmRlZiBsb2FkKHJhd19ldmVudHMsIHF1ZXJ5X2FyZ3M9Tm9uZSk6CiAgcmV0dXJuIChyYXdfZXZlbnRzCiAgICAgICAgICB8ICdQYXJzZUV2ZW50Rm4nID4+IGJlYW0uUGFyRG8oUGFyc2VFdmVudEZuKCkpCiAgICAgICAgICkgICMgcHlsaW50OiBkaXNhYmxlPWV4cHJlc3Npb24tbm90LWFzc2lnbmVkCn1ySIQAAFgEAAAAbG9hZFgDAAAAZGVmSyJLJodzfXJJhAAAWAQAAABsb2FkanZbAABzan1pAABYNQAAAGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLnF1ZXJpZXMucXVlcnkwckqEAACFgXJLhAAAfXJMhAAAYnRVJ2FwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZXJNhAAAKFheNgAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJUcml2aWFsIHR5cGUgaW5mZXJlbmNlIGZvciBzaW1wbGUgZnVuY3Rpb25zLgoKRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoiIiIKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoKaW1wb3J0IGNvbGxlY3Rpb25zCmltcG9ydCBkaXMKaW1wb3J0IGluc3BlY3QKaW1wb3J0IHBwcmludAppbXBvcnQgc3lzCmltcG9ydCB0eXBlcwpmcm9tIGJ1aWx0aW5zIGltcG9ydCBvYmplY3QKZnJvbSBidWlsdGlucyBpbXBvcnQgemlwCmZyb20gZnVuY3Rvb2xzIGltcG9ydCByZWR1Y2UKCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzIGltcG9ydCBBbnkKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMgaW1wb3J0IHR5cGVoaW50cwoKIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24sIHVuZ3JvdXBlZC1pbXBvcnRzCnRyeTogICAgICAgICAgICAgICAgICAjIFB5dGhvbiAyCiAgaW1wb3J0IF9fYnVpbHRpbl9fIGFzIGJ1aWx0aW5zCmV4Y2VwdCBJbXBvcnRFcnJvcjogICAjIFB5dGhvbiAzCiAgaW1wb3J0IGJ1aWx0aW5zCiMgcHlsaW50OiBlbmFibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24sIHVuZ3JvdXBlZC1pbXBvcnRzCgoKY2xhc3MgVHlwZUluZmVyZW5jZUVycm9yKFZhbHVlRXJyb3IpOgogICIiIkVycm9yIHRvIHJhaXNlIHdoZW4gdHlwZSBpbmZlcmVuY2UgZmFpbGVkLiIiIgogIHBhc3MKCgpkZWYgaW5zdGFuY2VfdG9fdHlwZShvKToKICAiIiJHaXZlbiBhIFB5dGhvbiBvYmplY3QgbywgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHR5cGUgaGludC4KICAiIiIKICB0ID0gdHlwZShvKQogIGlmIG8gaXMgTm9uZToKICAgIHJldHVybiB0eXBlKE5vbmUpCiAgZWxpZiB0IG5vdCBpbiB0eXBlaGludHMuRElTQUxMT1dFRF9QUklNSVRJVkVfVFlQRVM6CiAgICAjIHB5bGludDogZGlzYWJsZT1kZXByZWNhdGVkLXR5cGVzLWZpZWxkCiAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdID09IDIgYW5kIHQgPT0gdHlwZXMuSW5zdGFuY2VUeXBlOgogICAgICByZXR1cm4gby5fX2NsYXNzX18KICAgIGlmIHQgPT0gQm91bmRNZXRob2Q6CiAgICAgIHJldHVybiB0eXBlcy5NZXRob2RUeXBlCiAgICByZXR1cm4gdAogIGVsaWYgdCA9PSB0dXBsZToKICAgIHJldHVybiB0eXBlaGludHMuVHVwbGVbW2luc3RhbmNlX3RvX3R5cGUoaXRlbSkgZm9yIGl0ZW0gaW4gb11dCiAgZWxpZiB0ID09IGxpc3Q6CiAgICByZXR1cm4gdHlwZWhpbnRzLkxpc3RbCiAgICAgICAgdHlwZWhpbnRzLlVuaW9uW1tpbnN0YW5jZV90b190eXBlKGl0ZW0pIGZvciBpdGVtIGluIG9dXQogICAgXQogIGVsaWYgdCA9PSBzZXQ6CiAgICByZXR1cm4gdHlwZWhpbnRzLlNldFsKICAgICAgICB0eXBlaGludHMuVW5pb25bW2luc3RhbmNlX3RvX3R5cGUoaXRlbSkgZm9yIGl0ZW0gaW4gb11dCiAgICBdCiAgZWxpZiB0ID09IGRpY3Q6CiAgICByZXR1cm4gdHlwZWhpbnRzLkRpY3RbCiAgICAgICAgdHlwZWhpbnRzLlVuaW9uW1tpbnN0YW5jZV90b190eXBlKGspIGZvciBrLCB2IGluIG8uaXRlbXMoKV1dLAogICAgICAgIHR5cGVoaW50cy5VbmlvbltbaW5zdGFuY2VfdG9fdHlwZSh2KSBmb3IgaywgdiBpbiBvLml0ZW1zKCldXSwKICAgIF0KICBlbHNlOgogICAgcmFpc2UgVHlwZUluZmVyZW5jZUVycm9yKCdVbmtub3duIGZvcmJpZGRlbiB0eXBlOiAlcycgJSB0KQoKCmRlZiB1bmlvbl9saXN0KHhzLCB5cyk6CiAgYXNzZXJ0IGxlbih4cykgPT0gbGVuKHlzKQogIHJldHVybiBbdW5pb24oeCwgeSkgZm9yIHgsIHkgaW4gemlwKHhzLCB5cyldCgoKY2xhc3MgQ29uc3Qob2JqZWN0KToKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKICAgIHNlbGYudmFsdWUgPSB2YWx1ZQogICAgc2VsZi50eXBlID0gaW5zdGFuY2VfdG9fdHlwZSh2YWx1ZSkKCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gaXNpbnN0YW5jZShvdGhlciwgQ29uc3QpIGFuZCBzZWxmLnZhbHVlID09IG90aGVyLnZhbHVlCgogIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgogICAgIyBUT0RPKEJFQU0tNTk0OSk6IE5lZWRlZCBmb3IgUHl0aG9uIDIgY29tcGF0aWJpbGl0eS4KICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaChzZWxmLnZhbHVlKQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJ0NvbnN0WyVzXScgJSBzdHIoc2VsZi52YWx1ZSlbOjEwMF0KCiAgQHN0YXRpY21ldGhvZAogIGRlZiB1bndyYXAoeCk6CiAgICBpZiBpc2luc3RhbmNlKHgsIENvbnN0KToKICAgICAgcmV0dXJuIHgudHlwZQogICAgcmV0dXJuIHgKCiAgQHN0YXRpY21ldGhvZAogIGRlZiB1bndyYXBfYWxsKHhzKToKICAgIHJldHVybiBbQ29uc3QudW53cmFwKHgpIGZvciB4IGluIHhzXQoKCmNsYXNzIEZyYW1lU3RhdGUob2JqZWN0KToKICAiIiJTdG9yZXMgdGhlIHN0YXRlIG9mIHRoZSBmcmFtZSBhdCBhIHBhcnRpY3VsYXIgcG9pbnQgb2YgZXhlY3V0aW9uLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgZiwgbG9jYWxfdmFycz1Ob25lLCBzdGFjaz0oKSk6CiAgICBzZWxmLmYgPSBmCiAgICBzZWxmLmNvID0gZi5fX2NvZGVfXwogICAgc2VsZi52YXJzID0gbGlzdChsb2NhbF92YXJzKQogICAgc2VsZi5zdGFjayA9IGxpc3Qoc3RhY2spCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuIGlzaW5zdGFuY2Uob3RoZXIsIEZyYW1lU3RhdGUpIGFuZCBzZWxmLl9fZGljdF9fID09IG90aGVyLl9fZGljdF9fCgogIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgogICAgIyBUT0RPKEJFQU0tNTk0OSk6IE5lZWRlZCBmb3IgUHl0aG9uIDIgY29tcGF0aWJpbGl0eS4KICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaCh0dXBsZShzb3J0ZWQoc2VsZi5fX2RpY3RfXy5pdGVtcygpKSkpCgogIGRlZiBjb3B5KHNlbGYpOgogICAgcmV0dXJuIEZyYW1lU3RhdGUoc2VsZi5mLCBzZWxmLnZhcnMsIHNlbGYuc3RhY2spCgogIGRlZiBjb25zdF90eXBlKHNlbGYsIGkpOgogICAgcmV0dXJuIENvbnN0KHNlbGYuY28uY29fY29uc3RzW2ldKQoKICBkZWYgY2xvc3VyZV90eXBlKHNlbGYsIGkpOgogICAgbmNlbGx2YXJzID0gbGVuKHNlbGYuY28uY29fY2VsbHZhcnMpCiAgICBpZiBpIDwgbmNlbGx2YXJzOgogICAgICByZXR1cm4gQW55CiAgICByZXR1cm4gQ29uc3Qoc2VsZi5mLl9fY2xvc3VyZV9fW2kgLSBuY2VsbHZhcnNdLmNlbGxfY29udGVudHMpCgogIGRlZiBnZXRfZ2xvYmFsKHNlbGYsIGkpOgogICAgbmFtZSA9IHNlbGYuZ2V0X25hbWUoaSkKICAgIGlmIG5hbWUgaW4gc2VsZi5mLl9fZ2xvYmFsc19fOgogICAgICByZXR1cm4gQ29uc3Qoc2VsZi5mLl9fZ2xvYmFsc19fW25hbWVdKQogICAgaWYgbmFtZSBpbiBidWlsdGlucy5fX2RpY3RfXzoKICAgICAgcmV0dXJuIENvbnN0KGJ1aWx0aW5zLl9fZGljdF9fW25hbWVdKQogICAgcmV0dXJuIEFueQoKICBkZWYgZ2V0X25hbWUoc2VsZiwgaSk6CiAgICByZXR1cm4gc2VsZi5jby5jb19uYW1lc1tpXQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJ1N0YWNrOiAlcyBWYXJzOiAlcycgJSAoc2VsZi5zdGFjaywgc2VsZi52YXJzKQoKICBkZWYgX19vcl9fKHNlbGYsIG90aGVyKToKICAgIGlmIHNlbGYgaXMgTm9uZToKICAgICAgcmV0dXJuIG90aGVyLmNvcHkoKQogICAgZWxpZiBvdGhlciBpcyBOb25lOgogICAgICByZXR1cm4gc2VsZi5jb3B5KCkKICAgIHJldHVybiBGcmFtZVN0YXRlKHNlbGYuZiwgdW5pb25fbGlzdChzZWxmLnZhcnMsIG90aGVyLnZhcnMpLCB1bmlvbl9saXN0KAogICAgICAgIHNlbGYuc3RhY2ssIG90aGVyLnN0YWNrKSkKCiAgZGVmIF9fcm9yX18oc2VsZiwgbGVmdCk6CiAgICByZXR1cm4gc2VsZiB8IGxlZnQKCgpkZWYgdW5pb24oYSwgYik6CiAgIiIiUmV0dXJucyB0aGUgdW5pb24gb2YgdHdvIHR5cGVzIG9yIENvbnN0IHZhbHVlcy4KICAiIiIKICBpZiBhID09IGI6CiAgICByZXR1cm4gYQogIGVsaWYgbm90IGE6CiAgICByZXR1cm4gYgogIGVsaWYgbm90IGI6CiAgICByZXR1cm4gYQogIGEgPSBDb25zdC51bndyYXAoYSkKICBiID0gQ29uc3QudW53cmFwKGIpCiAgIyBUT0RPKHJvYmVydHdiKTogV29yayB0aGlzIGludG8gdGhlIFVuaW9uIGNvZGUgaW4gYSBtb3JlIGdlbmVyaWMgd2F5LgogIGlmIHR5cGUoYSkgPT0gdHlwZShiKSBhbmQgZWxlbWVudF90eXBlKGEpID09IHR5cGVoaW50cy5VbmlvblsoKV06CiAgICByZXR1cm4gYgogIGVsaWYgdHlwZShhKSA9PSB0eXBlKGIpIGFuZCBlbGVtZW50X3R5cGUoYikgPT0gdHlwZWhpbnRzLlVuaW9uWygpXToKICAgIHJldHVybiBhCiAgcmV0dXJuIHR5cGVoaW50cy5VbmlvblthLCBiXQoKCmRlZiBlbGVtZW50X3R5cGUoaGludCk6CiAgIiIiUmV0dXJucyB0aGUgZWxlbWVudCB0eXBlIG9mIGEgY29tcG9zaXRlIHR5cGUuCiAgIiIiCiAgaGludCA9IENvbnN0LnVud3JhcChoaW50KQogIGlmIGlzaW5zdGFuY2UoaGludCwgdHlwZWhpbnRzLlNlcXVlbmNlVHlwZUNvbnN0cmFpbnQpOgogICAgcmV0dXJuIGhpbnQuaW5uZXJfdHlwZQogIGVsaWYgaXNpbnN0YW5jZShoaW50LCB0eXBlaGludHMuVHVwbGVIaW50LlR1cGxlQ29uc3RyYWludCk6CiAgICByZXR1cm4gdHlwZWhpbnRzLlVuaW9uW2hpbnQudHVwbGVfdHlwZXNdCiAgcmV0dXJuIEFueQoKCmRlZiBrZXlfdmFsdWVfdHlwZXMoa3ZfdHlwZSk6CiAgIiIiUmV0dXJucyB0aGUga2V5IGFuZCB2YWx1ZSB0eXBlIG9mIGEgS1YgdHlwZS4KICAiIiIKICAjIFRPRE8ocm9iZXJ0d2IpOiBVbmlvbnMgb2YgdHVwbGVzLCBldGMuCiAgIyBUT0RPKHJvYmVydHdiKTogQXNzZXJ0PwogIGlmIChpc2luc3RhbmNlKGt2X3R5cGUsIHR5cGVoaW50cy5UdXBsZUhpbnQuVHVwbGVDb25zdHJhaW50KQogICAgICBhbmQgbGVuKGt2X3R5cGUudHVwbGVfdHlwZXMpID09IDIpOgogICAgcmV0dXJuIGt2X3R5cGUudHVwbGVfdHlwZXMKICByZXR1cm4gQW55LCBBbnkKCgprbm93bl9yZXR1cm5fdHlwZXMgPSB7bGVuOiBpbnQsIGhhc2g6IGludCx9CgoKY2xhc3MgQm91bmRNZXRob2Qob2JqZWN0KToKICAiIiJVc2VkIHRvIGNyZWF0ZSBhIGJvdW5kIG1ldGhvZCB3aGVuIHdlIG9ubHkga25vdyB0aGUgdHlwZSBvZiB0aGUgaW5zdGFuY2UuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBmdW5jLCB0eXBlKToKICAgICIiIkluc3RhbnRpYXRlcyBhIGJvdW5kIG1ldGhvZCBvYmplY3QuCgogICAgQXJnczoKICAgICAgZnVuYyAodHlwZXMuRnVuY3Rpb25UeXBlKTogVGhlIG1ldGhvZCdzIHVuZGVybHlpbmcgZnVuY3Rpb24KICAgICAgdHlwZSAodHlwZSk6IFRoZSBjbGFzcyBvZiB0aGUgbWV0aG9kLgogICAgIiIiCiAgICBzZWxmLmZ1bmMgPSBmdW5jCiAgICBzZWxmLnR5cGUgPSB0eXBlCgoKZGVmIGhhc2hhYmxlKGMpOgogIHRyeToKICAgIGhhc2goYykKICAgIHJldHVybiBUcnVlCiAgZXhjZXB0IFR5cGVFcnJvcjoKICAgIHJldHVybiBGYWxzZQoKCmRlZiBpbmZlcl9yZXR1cm5fdHlwZShjLCBpbnB1dF90eXBlcywgZGVidWc9RmFsc2UsIGRlcHRoPTUpOgogICIiIkFuYWx5c2VzIGEgY2FsbGFibGUgdG8gZGVkdWNlIGl0cyByZXR1cm4gdHlwZS4KCiAgQXJnczoKICAgIGM6IEEgUHl0aG9uIGNhbGxhYmxlIHRvIGluZmVyIHRoZSByZXR1cm4gdHlwZSBvZi4KICAgIGlucHV0X3R5cGVzOiBBIHNlcXVlbmNlIG9mIGlucHV0cyBjb3JyZXNwb25kaW5nIHRvIHRoZSBpbnB1dCB0eXBlcy4KICAgIGRlYnVnOiBXaGV0aGVyIHRvIHByaW50IHZlcmJvc2UgZGVidWdnaW5nIGluZm9ybWF0aW9uLgogICAgZGVwdGg6IE1heGltdW0gaW5zcGVjdGlvbiBkZXB0aCBkdXJpbmcgdHlwZSBpbmZlcmVuY2UuCgogIFJldHVybnM6CiAgICBBIFR5cGVDb25zdHJhaW50IHRoYXQgdGhhdCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoaXMgZnVuY3Rpb24gd2lsbCAobGlrZWx5KQogICAgc2F0aXNmeSBnaXZlbiB0aGUgc3BlY2lmaWVkIGlucHV0cy4KICAiIiIKICB0cnk6CiAgICBpZiBoYXNoYWJsZShjKSBhbmQgYyBpbiBrbm93bl9yZXR1cm5fdHlwZXM6CiAgICAgIHJldHVybiBrbm93bl9yZXR1cm5fdHlwZXNbY10KICAgIGVsaWYgaXNpbnN0YW5jZShjLCB0eXBlcy5GdW5jdGlvblR5cGUpOgogICAgICByZXR1cm4gaW5mZXJfcmV0dXJuX3R5cGVfZnVuYyhjLCBpbnB1dF90eXBlcywgZGVidWcsIGRlcHRoKQogICAgZWxpZiBpc2luc3RhbmNlKGMsIHR5cGVzLk1ldGhvZFR5cGUpOgogICAgICBpZiBjLl9fc2VsZl9fIGlzIG5vdCBOb25lOgogICAgICAgIGlucHV0X3R5cGVzID0gW0NvbnN0KGMuX19zZWxmX18pXSArIGlucHV0X3R5cGVzCiAgICAgIHJldHVybiBpbmZlcl9yZXR1cm5fdHlwZV9mdW5jKGMuX19mdW5jX18sIGlucHV0X3R5cGVzLCBkZWJ1ZywgZGVwdGgpCiAgICBlbGlmIGlzaW5zdGFuY2UoYywgQm91bmRNZXRob2QpOgogICAgICBpbnB1dF90eXBlcyA9IFtjLnR5cGVdICsgaW5wdXRfdHlwZXMKICAgICAgcmV0dXJuIGluZmVyX3JldHVybl90eXBlX2Z1bmMoYy5mdW5jLCBpbnB1dF90eXBlcywgZGVidWcsIGRlcHRoKQogICAgZWxpZiBpbnNwZWN0LmlzY2xhc3MoYyk6CiAgICAgIGlmIGMgaW4gdHlwZWhpbnRzLkRJU0FMTE9XRURfUFJJTUlUSVZFX1RZUEVTOgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGxpc3Q6IHR5cGVoaW50cy5MaXN0W0FueV0sCiAgICAgICAgICAgIHNldDogdHlwZWhpbnRzLlNldFtBbnldLAogICAgICAgICAgICB0dXBsZTogdHlwZWhpbnRzLlR1cGxlW0FueSwgLi4uXSwKICAgICAgICAgICAgZGljdDogdHlwZWhpbnRzLkRpY3RbQW55LCBBbnldCiAgICAgICAgfVtjXQogICAgICByZXR1cm4gYwogICAgZWxzZToKICAgICAgcmV0dXJuIEFueQogIGV4Y2VwdCBUeXBlSW5mZXJlbmNlRXJyb3I6CiAgICByZXR1cm4gQW55CiAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgIGlmIGRlYnVnOgogICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKICAgICAgcmFpc2UKICAgIGVsc2U6CiAgICAgIHJldHVybiBBbnkKCgpkZWYgaW5mZXJfcmV0dXJuX3R5cGVfZnVuYyhmLCBpbnB1dF90eXBlcywgZGVidWc9RmFsc2UsIGRlcHRoPTApOgogICIiIkFuYWx5c2VzIGEgZnVuY3Rpb24gdG8gZGVkdWNlIGl0cyByZXR1cm4gdHlwZS4KCiAgQXJnczoKICAgIGY6IEEgUHl0aG9uIGZ1bmN0aW9uIG9iamVjdCB0byBpbmZlciB0aGUgcmV0dXJuIHR5cGUgb2YuCiAgICBpbnB1dF90eXBlczogQSBzZXF1ZW5jZSBvZiBpbnB1dHMgY29ycmVzcG9uZGluZyB0byB0aGUgaW5wdXQgdHlwZXMuCiAgICBkZWJ1ZzogV2hldGhlciB0byBwcmludCB2ZXJib3NlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4KICAgIGRlcHRoOiBNYXhpbXVtIGluc3BlY3Rpb24gZGVwdGggZHVyaW5nIHR5cGUgaW5mZXJlbmNlLgoKICBSZXR1cm5zOgogICAgQSBUeXBlQ29uc3RyYWludCB0aGF0IHRoYXQgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGlzIGZ1bmN0aW9uIHdpbGwgKGxpa2VseSkKICAgIHNhdGlzZnkgZ2l2ZW4gdGhlIHNwZWNpZmllZCBpbnB1dHMuCgogIFJhaXNlczoKICAgIFR5cGVJbmZlcmVuY2VFcnJvcjogaWYgbm8gdHlwZSBjYW4gYmUgaW5mZXJyZWQuCiAgIiIiCiAgaWYgZGVidWc6CiAgICBwcmludCgpCiAgICBwcmludChmLCBpZChmKSwgaW5wdXRfdHlwZXMpCiAgZnJvbSAuIGltcG9ydCBvcGNvZGVzCiAgc2ltcGxlX29wcyA9IGRpY3QoKGsudXBwZXIoKSwgdikgZm9yIGssIHYgaW4gb3Bjb2Rlcy5fX2RpY3RfXy5pdGVtcygpKQoKICBjbyA9IGYuX19jb2RlX18KICBjb2RlID0gY28uY29fY29kZQogIGVuZCA9IGxlbihjb2RlKQogIHBjID0gMAogIGV4dGVuZGVkX2FyZyA9IDAKICBmcmVlID0gTm9uZQoKICB5aWVsZHMgPSBzZXQoKQogIHJldHVybnMgPSBzZXQoKQogICMgVE9ETyhyb2JlcnR3Yik6IERlZmF1bHQgYXJncyB2aWEgaW5zcGVjdCBtb2R1bGUuCiAgbG9jYWxfdmFycyA9IGxpc3QoaW5wdXRfdHlwZXMpICsgW3R5cGVoaW50cy5VbmlvblsoKV1dICogKGxlbihjby5jb192YXJuYW1lcykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBsZW4oaW5wdXRfdHlwZXMpKQogIHN0YXRlID0gRnJhbWVTdGF0ZShmLCBsb2NhbF92YXJzKQogIHN0YXRlcyA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGxhbWJkYTogTm9uZSkKICBqdW1wcyA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGludCkKCiAgbGFzdF9wYyA9IC0xCiAgd2hpbGUgcGMgPCBlbmQ6CiAgICBzdGFydCA9IHBjCiAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdID09IDI6CiAgICAgIG9wID0gb3JkKGNvZGVbcGNdKQogICAgZWxzZToKICAgICAgb3AgPSBjb2RlW3BjXQogICAgaWYgZGVidWc6CiAgICAgIHByaW50KCctLT4nIGlmIHBjID09IGxhc3RfcGMgZWxzZSAnICAgICcsIGVuZD0nICcpCiAgICAgIHByaW50KHJlcHIocGMpLnJqdXN0KDQpLCBlbmQ9JyAnKQogICAgICBwcmludChkaXMub3BuYW1lW29wXS5sanVzdCgyMCksIGVuZD0nICcpCgogICAgcGMgKz0gMQogICAgaWYgb3AgPj0gZGlzLkhBVkVfQVJHVU1FTlQ6CiAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPT0gMjoKICAgICAgICBhcmcgPSBvcmQoY29kZVtwY10pICsgb3JkKGNvZGVbcGMgKyAxXSkgKiAyNTYgKyBleHRlbmRlZF9hcmcKICAgICAgZWxpZiBzeXMudmVyc2lvbl9pbmZvWzBdID09IDMgYW5kIHN5cy52ZXJzaW9uX2luZm9bMV0gPCA2OgogICAgICAgIGFyZyA9IGNvZGVbcGNdICsgY29kZVtwYyArIDFdICogMjU2ICsgZXh0ZW5kZWRfYXJnCiAgICAgIGVsc2U6CiAgICAgICAgcGFzcyAjIFRPRE8obHVrZS16aHUpOiBQeXRob24gMy42IGJ5dGVjb2RlIHRvIHdvcmRjb2RlIGNoYW5nZXMKICAgICAgZXh0ZW5kZWRfYXJnID0gMAogICAgICBwYyArPSAyCiAgICAgIGlmIG9wID09IGRpcy5FWFRFTkRFRF9BUkc6CiAgICAgICAgZXh0ZW5kZWRfYXJnID0gYXJnICogNjU1MzYKICAgICAgaWYgZGVidWc6CiAgICAgICAgcHJpbnQoc3RyKGFyZykucmp1c3QoNSksIGVuZD0nICcpCiAgICAgICAgaWYgb3AgaW4gZGlzLmhhc2NvbnN0OgogICAgICAgICAgcHJpbnQoJygnICsgcmVwcihjby5jb19jb25zdHNbYXJnXSkgKyAnKScsIGVuZD0nICcpCiAgICAgICAgZWxpZiBvcCBpbiBkaXMuaGFzbmFtZToKICAgICAgICAgIHByaW50KCcoJyArIGNvLmNvX25hbWVzW2FyZ10gKyAnKScsIGVuZD0nICcpCiAgICAgICAgZWxpZiBvcCBpbiBkaXMuaGFzanJlbDoKICAgICAgICAgIHByaW50KCcodG8gJyArIHJlcHIocGMgKyBhcmcpICsgJyknLCBlbmQ9JyAnKQogICAgICAgIGVsaWYgb3AgaW4gZGlzLmhhc2xvY2FsOgogICAgICAgICAgcHJpbnQoJygnICsgY28uY29fdmFybmFtZXNbYXJnXSArICcpJywgZW5kPScgJykKICAgICAgICBlbGlmIG9wIGluIGRpcy5oYXNjb21wYXJlOgogICAgICAgICAgcHJpbnQoJygnICsgZGlzLmNtcF9vcFthcmddICsgJyknLCBlbmQ9JyAnKQogICAgICAgIGVsaWYgb3AgaW4gZGlzLmhhc2ZyZWU6CiAgICAgICAgICBpZiBmcmVlIGlzIE5vbmU6CiAgICAgICAgICAgIGZyZWUgPSBjby5jb19jZWxsdmFycyArIGNvLmNvX2ZyZWV2YXJzCiAgICAgICAgICBwcmludCgnKCcgKyBmcmVlW2FyZ10gKyAnKScsIGVuZD0nICcpCgogICAgIyBBY3V0YWxseSBlbXVsYXRlIHRoZSBvcC4KICAgIGlmIHN0YXRlIGlzIE5vbmUgYW5kIHN0YXRlc1tzdGFydF0gaXMgTm9uZToKICAgICAgIyBObyBjb250cm9sIHJlYWNoZXMgaGVyZSAoeWV0KS4KICAgICAgaWYgZGVidWc6CiAgICAgICAgcHJpbnQoKQogICAgICBjb250aW51ZQogICAgc3RhdGUgfD0gc3RhdGVzW3N0YXJ0XQoKICAgIG9wbmFtZSA9IGRpcy5vcG5hbWVbb3BdCiAgICBqbXAgPSBqbXBfc3RhdGUgPSBOb25lCiAgICBpZiBvcG5hbWUuc3RhcnRzd2l0aCgnQ0FMTF9GVU5DVElPTicpOgogICAgICAjIEVhY2gga2V5d29yZCB0YWtlcyB1cCB0d28gYXJndW1lbnRzIG9uIHRoZSBzdGFjayAobmFtZSBhbmQgdmFsdWUpLgogICAgICBzdGFuZGFyZF9hcmdzID0gKGFyZyAmIDB4RkYpICsgMiAqIChhcmcgPj4gOCkKICAgICAgdmFyX2FyZ3MgPSAnVkFSJyBpbiBvcG5hbWUKICAgICAga3dfYXJncyA9ICdLVycgaW4gb3BuYW1lCiAgICAgIHBvcF9jb3VudCA9IHN0YW5kYXJkX2FyZ3MgKyB2YXJfYXJncyArIGt3X2FyZ3MgKyAxCiAgICAgIGlmIGRlcHRoIDw9IDA6CiAgICAgICAgcmV0dXJuX3R5cGUgPSBBbnkKICAgICAgZWxpZiBhcmcgPj4gODoKICAgICAgICAjIFRPRE8ocm9iZXJ0d2IpOiBIYW5kbGUgdGhpcyBjYXNlLgogICAgICAgIHJldHVybl90eXBlID0gQW55CiAgICAgIGVsaWYgaXNpbnN0YW5jZShzdGF0ZS5zdGFja1stcG9wX2NvdW50XSwgQ29uc3QpOgogICAgICAgICMgVE9ETyhyb2JlcnR3Yik6IEhhbmRsZSB0aGlzIGJldHRlci4KICAgICAgICBpZiB2YXJfYXJncyBvciBrd19hcmdzOgogICAgICAgICAgc3RhdGUuc3RhY2tbLTFdID0gQW55CiAgICAgICAgICBzdGF0ZS5zdGFja1stdmFyX2FyZ3MgLSBrd19hcmdzXSA9IEFueQogICAgICAgIHJldHVybl90eXBlID0gaW5mZXJfcmV0dXJuX3R5cGUoc3RhdGUuc3RhY2tbLXBvcF9jb3VudF0udmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdGFja1sxIC0gcG9wX2NvdW50Ol0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Zz1kZWJ1ZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoPWRlcHRoIC0gMSkKICAgICAgZWxzZToKICAgICAgICByZXR1cm5fdHlwZSA9IEFueQogICAgICBzdGF0ZS5zdGFja1stcG9wX2NvdW50Ol0gPSBbcmV0dXJuX3R5cGVdCiAgICBlbGlmIChvcG5hbWUgPT0gJ0JJTkFSWV9TVUJTQ1InCiAgICAgICAgICBhbmQgaXNpbnN0YW5jZShzdGF0ZS5zdGFja1sxXSwgQ29uc3QpCiAgICAgICAgICBhbmQgaXNpbnN0YW5jZShzdGF0ZS5zdGFja1swXSwgdHlwZWhpbnRzLkluZGV4YWJsZVR5cGVDb25zdHJhaW50KSk6CiAgICAgIGlmIGRlYnVnOgogICAgICAgIHByaW50KCJFeGVjdXRpbmcgc3BlY2lhbCBjYXNlIGJpbmFyeSBzdWJzY3JpcHQiKQogICAgICBpZHggPSBzdGF0ZS5zdGFjay5wb3AoKQogICAgICBzcmMgPSBzdGF0ZS5zdGFjay5wb3AoKQogICAgICB0cnk6CiAgICAgICAgc3RhdGUuc3RhY2suYXBwZW5kKHNyYy5fY29uc3RyYWludF9mb3JfaW5kZXgoaWR4LnZhbHVlKSkKICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgIGlmIGRlYnVnOgogICAgICAgICAgcHJpbnQoIkV4Y2VwdGlvbiB7MH0gZHVyaW5nIHNwZWNpYWwgY2FzZSBpbmRleGluZyIuZm9ybWF0KGUpKQogICAgICAgIHN0YXRlLnN0YWNrLmFwcGVuZChBbnkpCiAgICBlbGlmIG9wbmFtZSBpbiBzaW1wbGVfb3BzOgogICAgICBpZiBkZWJ1ZzoKICAgICAgICBwcmludCgiRXhlY3V0aW5nIHNpbXBsZSBvcCAiICsgb3BuYW1lKQogICAgICBzaW1wbGVfb3BzW29wbmFtZV0oc3RhdGUsIGFyZykKICAgIGVsaWYgb3BuYW1lID09ICdSRVRVUk5fVkFMVUUnOgogICAgICByZXR1cm5zLmFkZChzdGF0ZS5zdGFja1stMV0pCiAgICAgIHN0YXRlID0gTm9uZQogICAgZWxpZiBvcG5hbWUgPT0gJ1lJRUxEX1ZBTFVFJzoKICAgICAgeWllbGRzLmFkZChzdGF0ZS5zdGFja1stMV0pCiAgICBlbGlmIG9wbmFtZSA9PSAnSlVNUF9GT1JXQVJEJzoKICAgICAgam1wID0gcGMgKyBhcmcKICAgICAgam1wX3N0YXRlID0gc3RhdGUKICAgICAgc3RhdGUgPSBOb25lCiAgICBlbGlmIG9wbmFtZSA9PSAnSlVNUF9BQlNPTFVURSc6CiAgICAgIGptcCA9IGFyZwogICAgICBqbXBfc3RhdGUgPSBzdGF0ZQogICAgICBzdGF0ZSA9IE5vbmUKICAgIGVsaWYgb3BuYW1lIGluICgnUE9QX0pVTVBfSUZfVFJVRScsICdQT1BfSlVNUF9JRl9GQUxTRScpOgogICAgICBzdGF0ZS5zdGFjay5wb3AoKQogICAgICBqbXAgPSBhcmcKICAgICAgam1wX3N0YXRlID0gc3RhdGUuY29weSgpCiAgICBlbGlmIG9wbmFtZSBpbiAoJ0pVTVBfSUZfVFJVRV9PUl9QT1AnLCAnSlVNUF9JRl9GQUxTRV9PUl9QT1AnKToKICAgICAgam1wID0gYXJnCiAgICAgIGptcF9zdGF0ZSA9IHN0YXRlLmNvcHkoKQogICAgICBzdGF0ZS5zdGFjay5wb3AoKQogICAgZWxpZiBvcG5hbWUgPT0gJ0ZPUl9JVEVSJzoKICAgICAgam1wID0gcGMgKyBhcmcKICAgICAgam1wX3N0YXRlID0gc3RhdGUuY29weSgpCiAgICAgIGptcF9zdGF0ZS5zdGFjay5wb3AoKQogICAgICBzdGF0ZS5zdGFjay5hcHBlbmQoZWxlbWVudF90eXBlKHN0YXRlLnN0YWNrWy0xXSkpCiAgICBlbHNlOgogICAgICByYWlzZSBUeXBlSW5mZXJlbmNlRXJyb3IoJ3VuYWJsZSB0byBoYW5kbGUgJXMnICUgb3BuYW1lKQoKICAgIGlmIGptcCBpcyBub3QgTm9uZToKICAgICAgIyBUT0RPKHJvYmVydHdiKTogSXMgdGhpcyBndWVyZW50ZWVkIHRvIGNvbnZlcmdlPwogICAgICBuZXdfc3RhdGUgPSBzdGF0ZXNbam1wXSB8IGptcF9zdGF0ZQogICAgICBpZiBqbXAgPCBwYyBhbmQgbmV3X3N0YXRlICE9IHN0YXRlc1tqbXBdIGFuZCBqdW1wc1twY10gPCA1OgogICAgICAgIGp1bXBzW3BjXSArPSAxCiAgICAgICAgcGMgPSBqbXAKICAgICAgc3RhdGVzW2ptcF0gPSBuZXdfc3RhdGUKCiAgICBpZiBkZWJ1ZzoKICAgICAgcHJpbnQoKQogICAgICBwcmludChzdGF0ZSkKICAgICAgcHByaW50LnBwcmludChkaWN0KGl0ZW0gZm9yIGl0ZW0gaW4gc3RhdGVzLml0ZW1zKCkgaWYgaXRlbVsxXSkpCgogIGlmIHlpZWxkczoKICAgIHJlc3VsdCA9IHR5cGVoaW50cy5JdGVyYWJsZVtyZWR1Y2UodW5pb24sIENvbnN0LnVud3JhcF9hbGwoeWllbGRzKSldCiAgZWxzZToKICAgIHJlc3VsdCA9IHJlZHVjZSh1bmlvbiwgQ29uc3QudW53cmFwX2FsbChyZXR1cm5zKSkKCiAgaWYgZGVidWc6CiAgICBwcmludChmLCBpZChmKSwgaW5wdXRfdHlwZXMsICctPicsIHJlc3VsdCkKICByZXR1cm4gcmVzdWx0Cn1yToQAAChYBQAAAHVuaW9uWAMAAABkZWZLsEvBh1gWAAAAaW5mZXJfcmV0dXJuX3R5cGVfZnVuY1gDAAAAZGVmTSEBTdQBh1gRAAAARnJhbWVTdGF0ZS5fX25lX19YAwAAAGRlZkuDS4aHWA4AAABDb25zdC5fX3JlcHJfX1gDAAAAZGVmS2hLaodYDAAAAENvbnN0Ll9fZXFfX1gDAAAAZGVmS15LYIdYCgAAAHVuaW9uX2xpc3RYAwAAAGRlZktTS1aHWBMAAABGcmFtZVN0YXRlLl9faW5pdF9fWAMAAABkZWZLekt/h1gTAAAARnJhbWVTdGF0ZS5fX3JlcHJfX1gDAAAAZGVmS6FLo4dYFQAAAEZyYW1lU3RhdGUuY29uc3RfdHlwZVgDAAAAZGVmS41Lj4dYEgAAAEZyYW1lU3RhdGUuX19yb3JfX1gDAAAAZGVmS6xLrodYDgAAAENvbnN0Ll9faGFzaF9fWAMAAABkZWZLZUtnh1gMAAAAQ29uc3QuX19uZV9fWAMAAABkZWZLYUtkh1gLAAAAQm91bmRNZXRob2RYBQAAAGNsYXNzS9xL6YdYEQAAAEZyYW1lU3RhdGUuX19lcV9fWAMAAABkZWZLgEuCh1gTAAAARnJhbWVTdGF0ZS5nZXRfbmFtZVgDAAAAZGVmS55LoIdYDAAAAGVsZW1lbnRfdHlwZVgDAAAAZGVmS8NLzIdYEQAAAEZyYW1lU3RhdGUuX19vcl9fWAMAAABkZWZLpEurh1gQAAAAaW5zdGFuY2VfdG9fdHlwZVgDAAAAZGVmSzNLUYdYCAAAAGhhc2hhYmxlWAMAAABkZWZL60vxh1gXAAAARnJhbWVTdGF0ZS5jbG9zdXJlX3R5cGVYAwAAAGRlZkuQS5WHWAwAAABDb25zdC51bndyYXBYAwAAAGRlZktrS3CHWA4AAABDb25zdC5fX2luaXRfX1gDAAAAZGVmS1pLXYdYEAAAAENvbnN0LnVud3JhcF9hbGxYAwAAAGRlZktxS3SHWAoAAABGcmFtZVN0YXRlWAUAAABjbGFzc0t2S66HWA8AAABrZXlfdmFsdWVfdHlwZXNYAwAAAGRlZkvOS9eHWBQAAABCb3VuZE1ldGhvZC5fX2luaXRfX1gDAAAAZGVmS+BL6YdYDwAAAEZyYW1lU3RhdGUuY29weVgDAAAAZGVmS4pLjIdYEQAAAGluZmVyX3JldHVybl90eXBlWAMAAABkZWZL800fAYdYEwAAAEZyYW1lU3RhdGUuX19oYXNoX19YAwAAAGRlZkuHS4mHWBIAAABUeXBlSW5mZXJlbmNlRXJyb3JYBQAAAGNsYXNzSy5LMYdYFQAAAEZyYW1lU3RhdGUuZ2V0X2dsb2JhbFgDAAAAZGVmS5ZLnYdYBQAAAENvbnN0WAUAAABjbGFzc0tYS3SHdX1yT4QAAChYEAAAAENvbnN0LnVud3JhcF9hbGxqsWkAAFgLAAAAQm91bmRNZXRob2RqsWkAAFgKAAAAdW5pb25fbGlzdGqxaQAAWAoAAABGcmFtZVN0YXRlarFpAABYEwAAAEZyYW1lU3RhdGUuZ2V0X25hbWVqsWkAAFgPAAAAa2V5X3ZhbHVlX3R5cGVzarFpAABYDAAAAGVsZW1lbnRfdHlwZWqxaQAAWA8AAABGcmFtZVN0YXRlLmNvcHlqsWkAAFgFAAAAdW5pb25qsWkAAFgVAAAARnJhbWVTdGF0ZS5jb25zdF90eXBlarFpAABYFgAAAGluZmVyX3JldHVybl90eXBlX2Z1bmNqsWkAAFgQAAAAaW5zdGFuY2VfdG9fdHlwZWqxaQAAWAgAAABoYXNoYWJsZWqxaQAAWBcAAABGcmFtZVN0YXRlLmNsb3N1cmVfdHlwZWqxaQAAWBEAAABpbmZlcl9yZXR1cm5fdHlwZWqxaQAAWAwAAABDb25zdC51bndyYXBqsWkAAGpXgQAAarFpAABYFQAAAEZyYW1lU3RhdGUuZ2V0X2dsb2JhbGqxaQAAWAUAAABDb25zdGqxaQAAdWp9aQAAWCcAAABhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2VyUIQAAIWBclGEAAB9clKEAABidHJThAAAVS1hcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UoWKQpAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkRhdGFmbG93IG5hdGl2ZSBzb3VyY2VzIGFuZCBzaW5rcy4KCkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGxvZ2dpbmcKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0Cgpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBwdmFsdWUKZnJvbSBhcGFjaGVfYmVhbS5pbyBpbXBvcnQgaW9iYXNlCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgcHRyYW5zZm9ybQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheSBpbXBvcnQgSGFzRGlzcGxheURhdGEKCgpkZWYgX2RpY3RfcHJpbnRhYmxlX2ZpZWxkcyhkaWN0X29iamVjdCwgc2tpcF9maWVsZHMpOgogICIiIlJldHVybnMgYSBsaXN0IG9mIHN0cmluZ3MgZm9yIHRoZSBpbnRlcmVzdGluZyBmaWVsZHMgb2YgYSBkaWN0LiIiIgogIHJldHVybiBbJyVzPSVyJyAlIChuYW1lLCB2YWx1ZSkKICAgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBkaWN0X29iamVjdC5pdGVtcygpCiAgICAgICAgICAjIHdhbnQgdG8gb3V0cHV0IHZhbHVlIDAgYnV0IG5vdCBOb25lIG5vciBbXQogICAgICAgICAgaWYgKHZhbHVlIG9yIHZhbHVlID09IDApCiAgICAgICAgICBhbmQgbmFtZSBub3QgaW4gc2tpcF9maWVsZHNdCgoKX21pbm9yX2ZpZWxkcyA9IFsnY29kZXInLCAna2V5X2NvZGVyJywgJ3ZhbHVlX2NvZGVyJywKICAgICAgICAgICAgICAgICAnY29uZmlnX2J5dGVzJywgJ2VsZW1lbnRzJywKICAgICAgICAgICAgICAgICAnYXBwZW5kX3RyYWlsaW5nX25ld2xpbmVzJywgJ3N0cmlwX3RyYWlsaW5nX25ld2xpbmVzJywKICAgICAgICAgICAgICAgICAnY29tcHJlc3Npb25fdHlwZSddCgoKY2xhc3MgTmF0aXZlU291cmNlKGlvYmFzZS5Tb3VyY2VCYXNlKToKICAiIiJBIHNvdXJjZSBpbXBsZW1lbnRlZCBieSBEYXRhZmxvdyBzZXJ2aWNlLgoKICBUaGlzIGNsYXNzIGlzIHRvIGJlIG9ubHkgaW5oZXJpdGVkIGJ5IHNvdXJjZXMgbmF0aXZlbHkgaW1wbGVtZW50ZWQgYnkgQ2xvdWQKICBEYXRhZmxvdyBzZXJ2aWNlLCBoZW5jZSBzaG91bGQgbm90IGJlIHN1Yi1jbGFzc2VkIGJ5IHVzZXJzLgoKICBUaGlzIGNsYXNzIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBub3QgYmUgdXNlZCB0byBkZWZpbmUgbmV3IHNvdXJjZXMuCiAgIiIiCgogIGRlZiByZWFkZXIoc2VsZik6CiAgICAiIiJSZXR1cm5zIGEgTmF0aXZlU291cmNlUmVhZGVyIGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNvdXJjZS4iIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIGlzX2JvdW5kZWQoc2VsZik6CiAgICByZXR1cm4gVHJ1ZQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJzx7bmFtZX0ge3ZhbHN9PicuZm9ybWF0KAogICAgICAgIG5hbWU9c2VsZi5fX2NsYXNzX18uX19uYW1lX18sCiAgICAgICAgdmFscz0nLCAnLmpvaW4oX2RpY3RfcHJpbnRhYmxlX2ZpZWxkcyhzZWxmLl9fZGljdF9fLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21pbm9yX2ZpZWxkcykpKQoKCmNsYXNzIE5hdGl2ZVNvdXJjZVJlYWRlcihvYmplY3QpOgogICIiIkEgcmVhZGVyIGZvciBhIHNvdXJjZSBpbXBsZW1lbnRlZCBieSBEYXRhZmxvdyBzZXJ2aWNlLiIiIgoKICBkZWYgX19lbnRlcl9fKHNlbGYpOgogICAgIiIiT3BlbnMgZXZlcnl0aGluZyBuZWNlc3NhcnkgZm9yIGEgcmVhZGVyIHRvIGZ1bmN0aW9uIHByb3Blcmx5LiIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgX19leGl0X18oc2VsZiwgZXhjZXB0aW9uX3R5cGUsIGV4Y2VwdGlvbl92YWx1ZSwgdHJhY2ViYWNrKToKICAgICIiIkNsZWFucyB1cCBhZnRlciBhIHJlYWRlciBleGVjdXRlZC4iIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIF9faXRlcl9fKHNlbGYpOgogICAgIiIiUmV0dXJucyBhbiBpdGVyYXRvciBvdmVyIGFsbCB0aGUgcmVjb3JkcyBvZiB0aGUgc291cmNlLiIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBAcHJvcGVydHkKICBkZWYgcmV0dXJuc193aW5kb3dlZF92YWx1ZXMoc2VsZik6CiAgICAiIiJSZXR1cm5zIHdoZXRoZXIgdGhpcyByZWFkZXIgcmV0dXJucyB3aW5kb3dlZCB2YWx1ZXMuIiIiCiAgICByZXR1cm4gRmFsc2UKCiAgZGVmIGdldF9wcm9ncmVzcyhzZWxmKToKICAgICIiIlJldHVybnMgYSByZXByZXNlbnRhdGlvbiBvZiBob3cgZmFyIHRoZSByZWFkZXIgaGFzIHJlYWQuCgogICAgUmV0dXJuczoKICAgICAgQSBTb3VyY2VSZWFkZXJQcm9ncmVzcyBvYmplY3QgdGhhdCBnaXZlcyB0aGUgY3VycmVudCBwcm9ncmVzcyBvZiB0aGUKICAgICAgcmVhZGVyLgogICAgIiIiCiAgICByZXR1cm4KCiAgZGVmIHJlcXVlc3RfZHluYW1pY19zcGxpdChzZWxmLCBkeW5hbWljX3NwbGl0X3JlcXVlc3QpOgogICAgIiIiQXR0ZW1wdHMgdG8gc3BsaXQgdGhlIGlucHV0IGluIHR3byBwYXJ0cy4KCiAgICBUaGUgdHdvIHBhcnRzIGFyZSBuYW1lZCB0aGUgInByaW1hcnkiIHBhcnQgYW5kIHRoZSAicmVzaWR1YWwiIHBhcnQuIFRoZQogICAgY3VycmVudCAnTmF0aXZlU291cmNlUmVhZGVyJyBrZWVwcyBwcm9jZXNzaW5nIHRoZSBwcmltYXJ5IHBhcnQsIHdoaWxlIHRoZQogICAgcmVzaWR1YWwgcGFydCB3aWxsIGJlIHByb2Nlc3NlZCBlbHNld2hlcmUgKGUuZy4gcGVyaGFwcyBvbiBhIGRpZmZlcmVudAogICAgd29ya2VyKS4KCiAgICBUaGUgcHJpbWFyeSBhbmQgcmVzaWR1YWwgcGFydHMsIGlmIGNvbmNhdGVuYXRlZCwgbXVzdCByZXByZXNlbnQgdGhlCiAgICBzYW1lIGlucHV0IGFzIHRoZSBjdXJyZW50IGlucHV0IG9mIHRoaXMgJ05hdGl2ZVNvdXJjZVJlYWRlcicgYmVmb3JlIHRoaXMKICAgIGNhbGwuCgogICAgVGhlIGJvdW5kYXJ5IGJldHdlZW4gdGhlIHByaW1hcnkgcGFydCBhbmQgdGhlIHJlc2lkdWFsIHBhcnQgaXMKICAgIHNwZWNpZmllZCBpbiBhIGZyYW1ld29yay1zcGVjaWZpYyB3YXkgdXNpbmcgJ0R5bmFtaWNTcGxpdFJlcXVlc3QnIGUuZy4sCiAgICBpZiB0aGUgZnJhbWV3b3JrIHN1cHBvcnRzIHRoZSBub3Rpb24gb2YgcG9zaXRpb25zLCBpdCBtaWdodCBiZSBhCiAgICBwb3NpdGlvbiBhdCB3aGljaCB0aGUgaW5wdXQgaXMgYXNrZWQgdG8gc3BsaXQgaXRzZWxmICh3aGljaCBpcyBub3QKICAgIG5lY2Vzc2FyaWx5IHRoZSBzYW1lIHBvc2l0aW9uIGF0IHdoaWNoIGl0ICp3aWxsKiBzcGxpdCBpdHNlbGYpOyBpdAogICAgbWlnaHQgYmUgYW4gYXBwcm94aW1hdGUgZnJhY3Rpb24gb2YgaW5wdXQsIG9yIHNvbWV0aGluZyBlbHNlLgoKICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhICdEeW5hbWljU3BsaXRSZXN1bHQnLCB3aGljaCBlbmNvZGVzLCBpbiBhCiAgICBmcmFtZXdvcmstc3BlY2lmaWMgd2F5LCB0aGUgaW5mb3JtYXRpb24gc3VmZmljaWVudCB0byBjb25zdHJ1Y3QgYQogICAgZGVzY3JpcHRpb24gb2YgdGhlIHJlc3VsdGluZyBwcmltYXJ5IGFuZCByZXNpZHVhbCBpbnB1dHMuIEZvciBleGFtcGxlLCBpdAogICAgbWlnaHQsIGFnYWluLCBiZSBhIHBvc2l0aW9uIGRlbWFyY2F0aW5nIHRoZXNlIHBhcnRzLCBvciBpdCBtaWdodCBiZSBhIHBhaXIKICAgIG9mIGZ1bGx5LXNwZWNpZmllZCBpbnB1dCBkZXNjcmlwdGlvbnMsIG9yIHNvbWV0aGluZyBlbHNlLgoKICAgIEFmdGVyIGEgc3VjY2Vzc2Z1bCBjYWxsIHRvICdyZXF1ZXN0X2R5bmFtaWNfc3BsaXQoKScsIHN1YnNlcXVlbnQgY2FsbHMKICAgIHNob3VsZCBiZSBpbnRlcnByZXRlZCByZWxhdGl2ZSB0byB0aGUgbmV3IHByaW1hcnkuCgogICAgQXJnczoKICAgICAgZHluYW1pY19zcGxpdF9yZXF1ZXN0OiBBICdEeW5hbWljU3BsaXRSZXF1ZXN0JyBkZXNjcmliaW5nIHRoZSBzcGxpdAogICAgICAgIHJlcXVlc3QuCgogICAgUmV0dXJuczoKICAgICAgJ05vbmUnIGlmIHRoZSAnRHluYW1pY1NwbGl0UmVxdWVzdCcgY2Fubm90IGJlIGhvbm9yZWQgKGluIHRoYXQKICAgICAgY2FzZSB0aGUgaW5wdXQgcmVwcmVzZW50ZWQgYnkgdGhpcyAnTmF0aXZlU291cmNlUmVhZGVyJyBzdGF5cyB0aGUgc2FtZSksCiAgICAgIG9yIGEgJ0R5bmFtaWNTcGxpdFJlc3VsdCcgZGVzY3JpYmluZyBob3cgdGhlIGlucHV0IHdhcyBzcGxpdCBpbnRvIGEKICAgICAgcHJpbWFyeSBhbmQgcmVzaWR1YWwgcGFydC4KICAgICIiIgogICAgbG9nZ2luZy5kZWJ1ZygKICAgICAgICAnU291cmNlUmVhZGVyICVyIGRvZXMgbm90IHN1cHBvcnQgZHluYW1pYyBzcGxpdHRpbmcuIElnbm9yaW5nIGR5bmFtaWMgJwogICAgICAgICdzcGxpdCByZXF1ZXN0OiAlcicsCiAgICAgICAgc2VsZiwgZHluYW1pY19zcGxpdF9yZXF1ZXN0KQogICAgcmV0dXJuCgoKY2xhc3MgUmVhZGVyUHJvZ3Jlc3Mob2JqZWN0KToKICAiIiJBIHJlcHJlc2VudGF0aW9uIG9mIGhvdyBmYXIgYSBOYXRpdmVTb3VyY2VSZWFkZXIgaGFzIHJlYWQuIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBwb3NpdGlvbj1Ob25lLCBwZXJjZW50X2NvbXBsZXRlPU5vbmUsIHJlbWFpbmluZ190aW1lPU5vbmUsCiAgICAgICAgICAgICAgIGNvbnN1bWVkX3NwbGl0X3BvaW50cz1Ob25lLCByZW1haW5pbmdfc3BsaXRfcG9pbnRzPU5vbmUpOgoKICAgIHNlbGYuX3Bvc2l0aW9uID0gcG9zaXRpb24KCiAgICBpZiBwZXJjZW50X2NvbXBsZXRlIGlzIG5vdCBOb25lOgogICAgICBwZXJjZW50X2NvbXBsZXRlID0gZmxvYXQocGVyY2VudF9jb21wbGV0ZSkKICAgICAgaWYgcGVyY2VudF9jb21wbGV0ZSA8IDAgb3IgcGVyY2VudF9jb21wbGV0ZSA+IDE6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgJ1RoZSBwZXJjZW50X2NvbXBsZXRlIGFyZ3VtZW50IHdhcyAlZi4gTXVzdCBiZSBpbiByYW5nZSBbMCwgMV0uJwogICAgICAgICAgICAlIHBlcmNlbnRfY29tcGxldGUpCiAgICBzZWxmLl9wZXJjZW50X2NvbXBsZXRlID0gcGVyY2VudF9jb21wbGV0ZQoKICAgIHNlbGYuX3JlbWFpbmluZ190aW1lID0gcmVtYWluaW5nX3RpbWUKICAgIHNlbGYuX2NvbnN1bWVkX3NwbGl0X3BvaW50cyA9IGNvbnN1bWVkX3NwbGl0X3BvaW50cwogICAgc2VsZi5fcmVtYWluaW5nX3NwbGl0X3BvaW50cyA9IHJlbWFpbmluZ19zcGxpdF9wb2ludHMKCiAgQHByb3BlcnR5CiAgZGVmIHBvc2l0aW9uKHNlbGYpOgogICAgIiIiUmV0dXJucyBwcm9ncmVzcywgcmVwcmVzZW50ZWQgYXMgYSBSZWFkZXJQb3NpdGlvbiBvYmplY3QuIiIiCiAgICByZXR1cm4gc2VsZi5fcG9zaXRpb24KCiAgQHByb3BlcnR5CiAgZGVmIHBlcmNlbnRfY29tcGxldGUoc2VsZik6CiAgICAiIiJSZXR1cm5zIHByb2dyZXNzLCByZXByZXNlbnRlZCBhcyBhIHBlcmNlbnRhZ2Ugb2YgdG90YWwgd29yay4KCiAgICBQcm9ncmVzcyByYW5nZSBmcm9tIDAuMCAoYmVnaW5uaW5nLCBub3RoaW5nIGNvbXBsZXRlKSB0byAxLjAgKGVuZCBvZiB0aGUKICAgIHdvcmsgcmFuZ2UsIGVudGlyZSBXb3JrSXRlbSBjb21wbGV0ZSkuCgogICAgUmV0dXJuczoKICAgICAgUHJvZ3Jlc3MgcmVwcmVzZW50ZWQgYXMgYSBwZXJjZW50YWdlIG9mIHRvdGFsIHdvcmsuCiAgICAiIiIKICAgIHJldHVybiBzZWxmLl9wZXJjZW50X2NvbXBsZXRlCgogIEBwcm9wZXJ0eQogIGRlZiByZW1haW5pbmdfdGltZShzZWxmKToKICAgICIiIlJldHVybnMgcHJvZ3Jlc3MsIHJlcHJlc2VudGVkIGFzIGFuIGVzdGltYXRlZCB0aW1lIHJlbWFpbmluZy4iIiIKICAgIHJldHVybiBzZWxmLl9yZW1haW5pbmdfdGltZQoKICBAcHJvcGVydHkKICBkZWYgY29uc3VtZWRfc3BsaXRfcG9pbnRzKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX2NvbnN1bWVkX3NwbGl0X3BvaW50cwoKICBAcHJvcGVydHkKICBkZWYgcmVtYWluaW5nX3NwbGl0X3BvaW50cyhzZWxmKToKICAgIHJldHVybiBzZWxmLl9yZW1haW5pbmdfc3BsaXRfcG9pbnRzCgoKY2xhc3MgUmVhZGVyUG9zaXRpb24ob2JqZWN0KToKICAiIiJBIHJlcHJlc2VudGF0aW9uIG9mIHBvc2l0aW9uIGluIGFuIGl0ZXJhdGlvbiBvZiBhICdOYXRpdmVTb3VyY2VSZWFkZXInLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgZW5kPU5vbmUsIGtleT1Ob25lLCBieXRlX29mZnNldD1Ob25lLCByZWNvcmRfaW5kZXg9Tm9uZSwKICAgICAgICAgICAgICAgc2h1ZmZsZV9wb3NpdGlvbj1Ob25lLCBjb25jYXRfcG9zaXRpb249Tm9uZSk6CiAgICAiIiJJbml0aWFsaXplcyBSZWFkZXJQb3NpdGlvbi4KCiAgICBBIFJlYWRlclBvc2l0aW9uIG1heSBnZXQgaW5zdGFudGlhdGVkIGZvciBvbmUgb2YgdGhlc2UgcG9zaXRpb24gdHlwZXMuIE9ubHkKICAgIG9uZSBvZiB0aGVzZSBzaG91bGQgYmUgc3BlY2lmaWVkLgoKICAgIEFyZ3M6CiAgICAgIGVuZDogcG9zaXRpb24gaXMgcGFzdCBhbGwgb3RoZXIgcG9zaXRpb25zLiBGb3IgZXhhbXBsZSwgdGhpcyBtYXkgYmUgdXNlZAogICAgICAgIHRvIHJlcHJlc2VudCB0aGUgZW5kIHBvc2l0aW9uIG9mIGFuIHVuYm91bmRlZCByYW5nZS4KICAgICAga2V5OiBwb3NpdGlvbiBpcyBhIHN0cmluZyBrZXkuCiAgICAgIGJ5dGVfb2Zmc2V0OiBwb3NpdGlvbiBpcyBhIGJ5dGUgb2Zmc2V0LgogICAgICByZWNvcmRfaW5kZXg6IHBvc2l0aW9uIGlzIGEgcmVjb3JkIGluZGV4CiAgICAgIHNodWZmbGVfcG9zaXRpb246IHBvc2l0aW9uIGlzIGEgYmFzZTY0IGVuY29kZWQgc2h1ZmZsZSBwb3NpdGlvbi4KICAgICAgY29uY2F0X3Bvc2l0aW9uOiBwb3NpdGlvbiBpcyBhICdDb25jYXRQb3NpdGlvbicuCiAgICAiIiIKCiAgICBzZWxmLmVuZCA9IGVuZAogICAgc2VsZi5rZXkgPSBrZXkKICAgIHNlbGYuYnl0ZV9vZmZzZXQgPSBieXRlX29mZnNldAogICAgc2VsZi5yZWNvcmRfaW5kZXggPSByZWNvcmRfaW5kZXgKICAgIHNlbGYuc2h1ZmZsZV9wb3NpdGlvbiA9IHNodWZmbGVfcG9zaXRpb24KCiAgICBpZiBjb25jYXRfcG9zaXRpb24gaXMgbm90IE5vbmU6CiAgICAgIGFzc2VydCBpc2luc3RhbmNlKGNvbmNhdF9wb3NpdGlvbiwgQ29uY2F0UG9zaXRpb24pCiAgICBzZWxmLmNvbmNhdF9wb3NpdGlvbiA9IGNvbmNhdF9wb3NpdGlvbgoKCmNsYXNzIENvbmNhdFBvc2l0aW9uKG9iamVjdCk6CiAgIiIiQSBwb3NpdGlvbiB0aGF0IGVuY2Fwc3VsYXRlIGFuIGlubmVyIHBvc2l0aW9uIGFuZCBhbiBpbmRleC4KCiAgVGhpcyBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgcG9zaXRpb24gb2YgYSBzb3VyY2UgdGhhdCBlbmNhcHN1bGF0ZSBzZXZlcmFsCiAgb3RoZXIgc291cmNlcy4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGluZGV4LCBwb3NpdGlvbik6CiAgICAiIiJJbml0aWFsaXplcyBDb25jYXRQb3NpdGlvbi4KCiAgICBBcmdzOgogICAgICBpbmRleDogaW5kZXggb2YgdGhlIHNvdXJjZSBjdXJyZW50bHkgYmVpbmcgcmVhZC4KICAgICAgcG9zaXRpb246IGlubmVyIHBvc2l0aW9uIHdpdGhpbiB0aGUgc291cmNlIGN1cnJlbnRseSBiZWluZyByZWFkLgogICAgIiIiCgogICAgaWYgcG9zaXRpb24gaXMgbm90IE5vbmU6CiAgICAgIGFzc2VydCBpc2luc3RhbmNlKHBvc2l0aW9uLCBSZWFkZXJQb3NpdGlvbikKICAgIHNlbGYuaW5kZXggPSBpbmRleAogICAgc2VsZi5wb3NpdGlvbiA9IHBvc2l0aW9uCgoKY2xhc3MgRHluYW1pY1NwbGl0UmVxdWVzdChvYmplY3QpOgogICIiIlNwZWNpZmllcyBob3cgJ05hdGl2ZVNvdXJjZVJlYWRlci5yZXF1ZXN0X2R5bmFtaWNfc3BsaXQnIHNob3VsZCBzcGxpdC4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2dyZXNzKToKICAgIGFzc2VydCBpc2luc3RhbmNlKHByb2dyZXNzLCBSZWFkZXJQcm9ncmVzcykKICAgIHNlbGYucHJvZ3Jlc3MgPSBwcm9ncmVzcwoKCmNsYXNzIER5bmFtaWNTcGxpdFJlc3VsdChvYmplY3QpOgogIHBhc3MKCgpjbGFzcyBEeW5hbWljU3BsaXRSZXN1bHRXaXRoUG9zaXRpb24oRHluYW1pY1NwbGl0UmVzdWx0KToKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHN0b3BfcG9zaXRpb24pOgogICAgYXNzZXJ0IGlzaW5zdGFuY2Uoc3RvcF9wb3NpdGlvbiwgUmVhZGVyUG9zaXRpb24pCiAgICBzZWxmLnN0b3BfcG9zaXRpb24gPSBzdG9wX3Bvc2l0aW9uCgoKY2xhc3MgTmF0aXZlU2luayhIYXNEaXNwbGF5RGF0YSk6CiAgIiIiQSBzaW5rIGltcGxlbWVudGVkIGJ5IERhdGFmbG93IHNlcnZpY2UuCgogIFRoaXMgY2xhc3MgaXMgdG8gYmUgb25seSBpbmhlcml0ZWQgYnkgc2lua3MgbmF0aXZlbHkgaW1wbGVtZW50ZWQgYnkgQ2xvdWQKICBEYXRhZmxvdyBzZXJ2aWNlLCBoZW5jZSBzaG91bGQgbm90IGJlIHN1Yi1jbGFzc2VkIGJ5IHVzZXJzLgogICIiIgoKICBkZWYgd3JpdGVyKHNlbGYpOgogICAgIiIiUmV0dXJucyBhIFNpbmtXcml0ZXIgZm9yIHRoaXMgc291cmNlLiIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJzx7bmFtZX0ge3ZhbHN9PicuZm9ybWF0KAogICAgICAgIG5hbWU9c2VsZi5fX2NsYXNzX18uX19uYW1lX18sCiAgICAgICAgdmFscz1fZGljdF9wcmludGFibGVfZmllbGRzKHNlbGYuX19kaWN0X18sIF9taW5vcl9maWVsZHMpKQoKCmNsYXNzIE5hdGl2ZVNpbmtXcml0ZXIob2JqZWN0KToKICAiIiJBIHdyaXRlciBmb3IgYSBzaW5rIGltcGxlbWVudGVkIGJ5IERhdGFmbG93IHNlcnZpY2UuIiIiCgogIGRlZiBfX2VudGVyX18oc2VsZik6CiAgICAiIiJPcGVucyBldmVyeXRoaW5nIG5lY2Vzc2FyeSBmb3IgYSB3cml0ZXIgdG8gZnVuY3Rpb24gcHJvcGVybHkuIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiBfX2V4aXRfXyhzZWxmLCBleGNlcHRpb25fdHlwZSwgZXhjZXB0aW9uX3ZhbHVlLCB0cmFjZWJhY2spOgogICAgIiIiQ2xlYW5zIHVwIGFmdGVyIGEgd3JpdGVyIGV4ZWN1dGVkLiIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBAcHJvcGVydHkKICBkZWYgdGFrZXNfd2luZG93ZWRfdmFsdWVzKHNlbGYpOgogICAgIiIiUmV0dXJucyB3aGV0aGVyIHRoaXMgd3JpdGVyIHRha2VzIHdpbmRvd2VkIHZhbHVlcy4iIiIKICAgIHJldHVybiBGYWxzZQoKICBkZWYgV3JpdGUoc2VsZiwgbyk6ICAjIHB5bGludDogZGlzYWJsZT1pbnZhbGlkLW5hbWUKICAgICIiIldyaXRlcyBhIHJlY29yZCB0byB0aGUgc2luayBhc3NvY2lhdGVkIHdpdGggdGhpcyB3cml0ZXIuIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgoKY2xhc3MgX05hdGl2ZVdyaXRlKHB0cmFuc2Zvcm0uUFRyYW5zZm9ybSk6CiAgIiIiQSBQVHJhbnNmb3JtIGZvciB3cml0aW5nIHRvIGEgRGF0YWZsb3cgbmF0aXZlIHNpbmsuCgogIFRoZXNlIGFyZSBzaW5rcyB0aGF0IGFyZSBpbXBsZW1lbnRlZCBuYXRpdmVseSBieSB0aGUgRGF0YWZsb3cgc2VydmljZQogIGFuZCBoZW5jZSBzaG91bGQgbm90IGJlIHVwZGF0ZWQgYnkgdXNlcnMuIFRoZXNlIHNpbmtzIGFyZSBwcm9jZXNzZWQKICB1c2luZyBhIERhdGFmbG93IG5hdGl2ZSB3cml0ZSB0cmFuc2Zvcm0uCgogIEFwcGx5aW5nIHRoaXMgdHJhbnNmb3JtIHJlc3VsdHMgaW4gYSBgYHB2YWx1ZS5QRG9uZWBgLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgc2luayk6CiAgICAiIiJJbml0aWFsaXplcyBhIFdyaXRlIHRyYW5zZm9ybS4KCiAgICBBcmdzOgogICAgICBzaW5rOiBTaW5rIHRvIHVzZSBmb3IgdGhlIHdyaXRlCiAgICAiIiIKICAgIHN1cGVyKF9OYXRpdmVXcml0ZSwgc2VsZikuX19pbml0X18oKQogICAgc2VsZi5zaW5rID0gc2luawoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgIHNlbGYuX2NoZWNrX3Bjb2xsZWN0aW9uKHBjb2xsKQogICAgcmV0dXJuIHB2YWx1ZS5QRG9uZShwY29sbC5waXBlbGluZSkKfXJUhAAAKFgXAAAATmF0aXZlU291cmNlLmlzX2JvdW5kZWRYAwAAAGRlZks+S0CHWBMAAABfTmF0aXZlV3JpdGUuZXhwYW5kWAMAAABkZWZNRgFNSQGHWBoAAABOYXRpdmVTaW5rV3JpdGVyLl9fZW50ZXJfX1gDAAAAZGVmTSEBTSQBh1gTAAAATmF0aXZlU291cmNlLnJlYWRlclgDAAAAZGVmSzpLPYdYDAAAAF9OYXRpdmVXcml0ZVgFAAAAY2xhc3NNMwFNSQGHWB8AAABOYXRpdmVTb3VyY2VSZWFkZXIuZ2V0X3Byb2dyZXNzWAMAAABkZWZLXEtkh1gTAAAATmF0aXZlU2luay5fX3JlcHJfX1gDAAAAZGVmTRgBTRwBh1goAAAATmF0aXZlU291cmNlUmVhZGVyLnJlcXVlc3RfZHluYW1pY19zcGxpdFgDAAAAZGVmS2VLkIdYJwAAAER5bmFtaWNTcGxpdFJlc3VsdFdpdGhQb3NpdGlvbi5fX2luaXRfX1gDAAAAZGVmTQgBTQsBh1gQAAAATmF0aXZlU2lua1dyaXRlclgFAAAAY2xhc3NNHgFNMQGHWBwAAABOYXRpdmVTb3VyY2VSZWFkZXIuX19lbnRlcl9fWAMAAABkZWZLS0tOh1gcAAAARHluYW1pY1NwbGl0UmVxdWVzdC5fX2luaXRfX1gDAAAAZGVmS/1NAAGHWB0AAABSZWFkZXJQcm9ncmVzcy5yZW1haW5pbmdfdGltZVgDAAAAZGVmS7dLu4dYEgAAAER5bmFtaWNTcGxpdFJlc3VsdFgFAAAAY2xhc3NNAgFNBAGHWBsAAABOYXRpdmVTb3VyY2VSZWFkZXIuX19leGl0X19YAwAAAGRlZktPS1KHWBUAAABOYXRpdmVTb3VyY2UuX19yZXByX19YAwAAAGRlZktBS0aHWCoAAABOYXRpdmVTb3VyY2VSZWFkZXIucmV0dXJuc193aW5kb3dlZF92YWx1ZXNYAwAAAGRlZktXS1uHWA4AAABDb25jYXRQb3NpdGlvblgFAAAAY2xhc3NL5Ev3h1gRAAAATmF0aXZlU2luay53cml0ZXJYAwAAAGRlZk0UAU0XAYdYHwAAAFJlYWRlclByb2dyZXNzLnBlcmNlbnRfY29tcGxldGVYAwAAAGRlZkurS7aHWBIAAABOYXRpdmVTb3VyY2VSZWFkZXJYBQAAAGNsYXNzS0hLkIdYDgAAAFJlYWRlclBvc2l0aW9uWAUAAABjbGFzc0vFS+KHWBYAAABfZGljdF9wcmludGFibGVfZmllbGRzWAMAAABkZWZLIksph1geAAAARHluYW1pY1NwbGl0UmVzdWx0V2l0aFBvc2l0aW9uWAUAAABjbGFzc00GAU0LAYdYFwAAAFJlYWRlclByb2dyZXNzLl9faW5pdF9fWAMAAABkZWZLlUulh1gOAAAAUmVhZGVyUHJvZ3Jlc3NYBQAAAGNsYXNzS5JLw4dYJgAAAE5hdGl2ZVNpbmtXcml0ZXIudGFrZXNfd2luZG93ZWRfdmFsdWVzWAMAAABkZWZNKQFNLQGHWCUAAABSZWFkZXJQcm9ncmVzcy5yZW1haW5pbmdfc3BsaXRfcG9pbnRzWAMAAABkZWZLwEvDh1gVAAAAX05hdGl2ZVdyaXRlLl9faW5pdF9fWAMAAABkZWZNPQFNRQGHWBcAAABSZWFkZXJQb3NpdGlvbi5fX2luaXRfX1gDAAAAZGVmS8hL4odYDAAAAE5hdGl2ZVNvdXJjZVgFAAAAY2xhc3NLMUtGh1gbAAAATmF0aXZlU291cmNlUmVhZGVyLl9faXRlcl9fWAMAAABkZWZLU0tWh1gWAAAATmF0aXZlU2lua1dyaXRlci5Xcml0ZVgDAAAAZGVmTS4BTTEBh1gZAAAATmF0aXZlU2lua1dyaXRlci5fX2V4aXRfX1gDAAAAZGVmTSUBTSgBh1gTAAAARHluYW1pY1NwbGl0UmVxdWVzdFgFAAAAY2xhc3NL+U0AAYdYFwAAAENvbmNhdFBvc2l0aW9uLl9faW5pdF9fWAMAAABkZWZL60v3h1gXAAAAUmVhZGVyUHJvZ3Jlc3MucG9zaXRpb25YAwAAAGRlZkumS6qHWCQAAABSZWFkZXJQcm9ncmVzcy5jb25zdW1lZF9zcGxpdF9wb2ludHNYAwAAAGRlZku8S7+HWAoAAABOYXRpdmVTaW5rWAUAAABjbGFzc00NAU0cAYd1fXJVhAAAKFgSAAAARHluYW1pY1NwbGl0UmVzdWx0WC0AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2VyVoQAAFgOAAAAUmVhZGVyUG9zaXRpb25qVoQAAFgXAAAATmF0aXZlU291cmNlLmlzX2JvdW5kZWRqVoQAAFgeAAAARHluYW1pY1NwbGl0UmVzdWx0V2l0aFBvc2l0aW9ualaEAABYDAAAAE5hdGl2ZVNvdXJjZWpWhAAAWBMAAABOYXRpdmVTb3VyY2UucmVhZGVyalaEAABYDgAAAFJlYWRlclByb2dyZXNzalaEAABYHwAAAE5hdGl2ZVNvdXJjZVJlYWRlci5nZXRfcHJvZ3Jlc3NqVoQAAFgTAAAARHluYW1pY1NwbGl0UmVxdWVzdGpWhAAAWA4AAABDb25jYXRQb3NpdGlvbmpWhAAAWCgAAABOYXRpdmVTb3VyY2VSZWFkZXIucmVxdWVzdF9keW5hbWljX3NwbGl0alaEAABYEAAAAE5hdGl2ZVNpbmtXcml0ZXJqVoQAAFgRAAAATmF0aXZlU2luay53cml0ZXJqVoQAAFgWAAAATmF0aXZlU2lua1dyaXRlci5Xcml0ZWpWhAAAWBIAAABOYXRpdmVTb3VyY2VSZWFkZXJqVoQAAFgKAAAATmF0aXZlU2lua2pWhAAAdWp9aQAAWC0AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2VyV4QAAIWBcliEAAB9clmEAABidHJahAAAVS5hcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yKFgBIQAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJQaXBlbGluZSBvcHRpb25zIHZhbGlkYXRvci4KCkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KIiIiCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgcmUKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0Cgpmcm9tIGFwYWNoZV9iZWFtLmludGVybmFsIGltcG9ydCBwaWNrbGVyCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBEZWJ1Z09wdGlvbnMKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IEdvb2dsZUNsb3VkT3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgU2V0dXBPcHRpb25zCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBTdGFuZGFyZE9wdGlvbnMKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IFRlc3RPcHRpb25zCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBUeXBlT3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgV29ya2VyT3B0aW9ucwoKCmNsYXNzIFBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvcihvYmplY3QpOgogICIiIlZhbGlkYXRlcyBQaXBlbGluZU9wdGlvbnMuCgogIEdvZXMgdGhyb3VnaCBhIGxpc3Qgb2Yga25vd24gUGlwZWxpbmVPcHRpb24gc3ViY2xhc3Nlc3MgYW5kIGNhbGxzOjoKCiAgICB2YWxpZGF0ZSh2YWxpZGF0b3IpCgogIGlmIG9uZSBpcyBpbXBsZW1lbnRlZC4gQWdncmVnYXRlcyBhIGxpc3Qgb2YgdmFsaWRhdGlvbiBlcnJvcnMgZnJvbSBhbGwgYW5kCiAgcmV0dXJucyBhbiBhZ2dyZWdhdGVkIGxpc3QuCiAgIiIiCgogICMgVmFsaWRhdG9yIHdpbGwgY2FsbCB2YWxpZGF0ZSBvbiB0aGVzZSBzdWJjbGFzc2VzIG9mIFBpcGVsaW5lT3B0aW9ucwogIE9QVElPTlMgPSBbRGVidWdPcHRpb25zLCBHb29nbGVDbG91ZE9wdGlvbnMsIFNldHVwT3B0aW9ucywgU3RhbmRhcmRPcHRpb25zLAogICAgICAgICAgICAgVHlwZU9wdGlvbnMsIFdvcmtlck9wdGlvbnMsIFRlc3RPcHRpb25zXQoKICAjIFBvc3NpYmxlIHZhbGlkYXRpb24gZXJyb3JzLgogIEVSUl9NSVNTSU5HX09QVElPTiA9ICdNaXNzaW5nIHJlcXVpcmVkIG9wdGlvbjogJXMuJwogIEVSUl9NSVNTSU5HX0dDU19QQVRIID0gJ01pc3NpbmcgR0NTIHBhdGggb3B0aW9uOiAlcy4nCiAgRVJSX0lOVkFMSURfR0NTX1BBVEggPSAnSW52YWxpZCBHQ1MgcGF0aCAoJXMpLCBnaXZlbiBmb3IgdGhlIG9wdGlvbjogJXMuJwogIEVSUl9JTlZBTElEX0dDU19CVUNLRVQgPSAoCiAgICAgICdJbnZhbGlkIEdDUyBidWNrZXQgKCVzKSwgZ2l2ZW4gZm9yIHRoZSBvcHRpb246ICVzLiBTZWUgJwogICAgICAnaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vc3RvcmFnZS9kb2NzL2J1Y2tldG5hbWluZyAnCiAgICAgICdmb3IgbW9yZSBkZXRhaWxzLicpCiAgRVJSX0lOVkFMSURfR0NTX09CSkVDVCA9ICdJbnZhbGlkIEdDUyBvYmplY3QgKCVzKSwgZ2l2ZW4gZm9yIHRoZSBvcHRpb246ICVzLicKICBFUlJfSU5WQUxJRF9KT0JfTkFNRSA9ICgKICAgICAgJ0ludmFsaWQgam9iX25hbWUgKCVzKTsgdGhlIG5hbWUgbXVzdCBjb25zaXN0IG9mIG9ubHkgdGhlIGNoYXJhY3RlcnMgJwogICAgICAnWy1hLXowLTldLCBzdGFydGluZyB3aXRoIGEgbGV0dGVyIGFuZCBlbmRpbmcgd2l0aCBhIGxldHRlciBvciBudW1iZXInKQogIEVSUl9JTlZBTElEX1BST0pFQ1RfTlVNQkVSID0gKAogICAgICAnSW52YWxpZCBQcm9qZWN0IElEICglcykuIFBsZWFzZSBtYWtlIHN1cmUgeW91IHNwZWNpZmllZCB0aGUgUHJvamVjdCBJRCwgJwogICAgICAnbm90IHByb2plY3QgbnVtYmVyLicpCiAgRVJSX0lOVkFMSURfUFJPSkVDVF9JRCA9ICgKICAgICAgJ0ludmFsaWQgUHJvamVjdCBJRCAoJXMpLiBQbGVhc2UgbWFrZSBzdXJlIHlvdSBzcGVjaWZpZWQgdGhlIFByb2plY3QgSUQsICcKICAgICAgJ25vdCBwcm9qZWN0IGRlc2NyaXB0aW9uLicpCiAgRVJSX0lOVkFMSURfTk9UX1BPU0lUSVZFID0gKCdJbnZhbGlkIHZhbHVlICglcykgZm9yIG9wdGlvbjogJXMuIFZhbHVlIG5lZWRzICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RvIGJlIHBvc2l0aXZlLicpCiAgRVJSX0lOVkFMSURfVEVTVF9NQVRDSEVSX1RZUEUgPSAoCiAgICAgICdJbnZhbGlkIHZhbHVlICglcykgZm9yIG9wdGlvbjogJXMuIFBsZWFzZSBleHRlbmQgeW91ciBtYXRjaGVyIG9iamVjdCAnCiAgICAgICdmcm9tIGhhbWNyZXN0LmNvcmUuYmFzZV9tYXRjaGVyLkJhc2VNYXRjaGVyLicpCiAgRVJSX0lOVkFMSURfVEVTVF9NQVRDSEVSX1VOUElDS0xBQkxFID0gKAogICAgICAnSW52YWxpZCB2YWx1ZSAoJXMpIGZvciBvcHRpb246ICVzLiBQbGVhc2UgbWFrZSBzdXJlIHRoZSB0ZXN0IG1hdGNoZXIgJwogICAgICAnaXMgdW5waWNrbGFibGUuJykKCiAgIyBHQ1MgcGF0aCBzcGVjaWZpYyBwYXR0ZXJucy4KICBHQ1NfVVJJID0gJyg/UDxTQ0hFTUU+W146XSspOi8vKD9QPEJVQ0tFVD5bXi9dKykoLyg/UDxPQkpFQ1Q+LiopKT8nCiAgR0NTX0JVQ0tFVCA9ICdeW2EtejAtOV1bLV9hLXowLTkuXStbYS16MC05XSQnCiAgR0NTX1NDSEVNRSA9ICdncycKCiAgIyBHb29nbGVDbG91ZE9wdGlvbnMgc3BlY2lmaWMgcGF0dGVybnMuCiAgSk9CX1BBVFRFUk4gPSAnW2Etel0oWy1hLXowLTldKlthLXowLTldKT8nCiAgUFJPSkVDVF9JRF9QQVRURVJOID0gJ1thLXpdWy1hLXowLTk6Ll0rW2EtejAtOV0nCiAgUFJPSkVDVF9OVU1CRVJfUEFUVEVSTiA9ICdbMC05XSonCiAgRU5EUE9JTlRfUEFUVEVSTiA9IHInaHR0cHM6Ly9bXFNdKmdvb2dsZWFwaXNcLmNvbVsvXT8nCgogIGRlZiBfX2luaXRfXyhzZWxmLCBvcHRpb25zLCBydW5uZXIpOgogICAgc2VsZi5vcHRpb25zID0gb3B0aW9ucwogICAgc2VsZi5ydW5uZXIgPSBydW5uZXIKCiAgZGVmIHZhbGlkYXRlKHNlbGYpOgogICAgIiIiQ2FsbHMgdmFsaWRhdGUgb24gc3ViY2xhc3Nlc3MgYW5kIHJldHVybnMgYSBsaXN0IG9mIGVycm9ycy4KCiAgICB2YWxpZGF0ZSB3aWxsIGNhbGwgdmFsaWRhdGUgbWV0aG9kIG9uIHN1YmNsYXNzZXMsIGFjY3VtdWxhdGUgdGhlIHJldHVybmVkCiAgICBsaXN0IG9mIGVycm9ycywgYW5kIHJldHVybnMgdGhlIGFnZ3JlZ2F0ZSBsaXN0LgoKICAgIFJldHVybnM6CiAgICAgIEFnZ3JlZ2F0ZSBsaXN0IG9mIGVycm9ycyBhZnRlciBhbGwgY2FsbGluZyBhbGwgcG9zc2libGUgdmFsaWRhdGUgbWV0aG9kcy4KICAgICIiIgogICAgZXJyb3JzID0gW10KICAgIGZvciBjbHMgaW4gc2VsZi5PUFRJT05TOgogICAgICBpZiAndmFsaWRhdGUnIGluIGNscy5fX2RpY3RfXyBhbmQgY2FsbGFibGUoY2xzLl9fZGljdF9fWyd2YWxpZGF0ZSddKToKICAgICAgICBlcnJvcnMuZXh0ZW5kKHNlbGYub3B0aW9ucy52aWV3X2FzKGNscykudmFsaWRhdGUoc2VsZikpCiAgICByZXR1cm4gZXJyb3JzCgogIGRlZiBpc19zZXJ2aWNlX3J1bm5lcihzZWxmKToKICAgICIiIlRydWUgaWYgcGlwZWxpbmUgd2lsbCBleGVjdXRlIG9uIHRoZSBHb29nbGUgQ2xvdWQgRGF0YWZsb3cgc2VydmljZS4iIiIKICAgIGlzX3NlcnZpY2VfcnVubmVyID0gKHNlbGYucnVubmVyIGlzIG5vdCBOb25lIGFuZAogICAgICAgICAgICAgICAgICAgICAgICAgdHlwZShzZWxmLnJ1bm5lcikuX19uYW1lX18gaW4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEYXRhZmxvd1J1bm5lcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Rlc3REYXRhZmxvd1J1bm5lciddKQoKICAgIGRhdGFmbG93X2VuZHBvaW50ID0gKAogICAgICAgIHNlbGYub3B0aW9ucy52aWV3X2FzKEdvb2dsZUNsb3VkT3B0aW9ucykuZGF0YWZsb3dfZW5kcG9pbnQpCiAgICBpc19zZXJ2aWNlX2VuZHBvaW50ID0gKGRhdGFmbG93X2VuZHBvaW50IGlzIG5vdCBOb25lIGFuZAogICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmlzX2Z1bGxfc3RyaW5nX21hdGNoKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5FTkRQT0lOVF9QQVRURVJOLCBkYXRhZmxvd19lbmRwb2ludCkpCgogICAgcmV0dXJuIGlzX3NlcnZpY2VfcnVubmVyIGFuZCBpc19zZXJ2aWNlX2VuZHBvaW50CgogIGRlZiBpc19mdWxsX3N0cmluZ19tYXRjaChzZWxmLCBwYXR0ZXJuLCBzdHJpbmcpOgogICAgIiIiUmV0dXJucyBUcnVlIGlmIHRoZSBwYXR0ZXJuIG1hdGNoZXMgdGhlIHdob2xlIHN0cmluZy4iIiIKICAgIHBhdHRlcm4gPSAnXiVzJCcgJSBwYXR0ZXJuCiAgICByZXR1cm4gcmUuc2VhcmNoKHBhdHRlcm4sIHN0cmluZykgaXMgbm90IE5vbmUKCiAgZGVmIF92YWxpZGF0ZV9lcnJvcihzZWxmLCBlcnIsICphcmdzKToKICAgIHJldHVybiBbZXJyICUgYXJnc10KCiAgZGVmIHZhbGlkYXRlX2djc19wYXRoKHNlbGYsIHZpZXcsIGFyZ19uYW1lKToKICAgICIiIlZhbGlkYXRlcyBhIEdDUyBwYXRoIGFnYWluc3QgZ3M6Ly9idWNrZXQvb2JqZWN0IFVSSSBmb3JtYXQuIiIiCiAgICBhcmcgPSBnZXRhdHRyKHZpZXcsIGFyZ19uYW1lLCBOb25lKQogICAgaWYgYXJnIGlzIE5vbmU6CiAgICAgIHJldHVybiBzZWxmLl92YWxpZGF0ZV9lcnJvcihzZWxmLkVSUl9NSVNTSU5HX0dDU19QQVRILCBhcmdfbmFtZSkKICAgIG1hdGNoID0gcmUubWF0Y2goc2VsZi5HQ1NfVVJJLCBhcmcsIHJlLkRPVEFMTCkKICAgIGlmIG1hdGNoIGlzIE5vbmU6CiAgICAgIHJldHVybiBzZWxmLl92YWxpZGF0ZV9lcnJvcihzZWxmLkVSUl9JTlZBTElEX0dDU19QQVRILCBhcmcsIGFyZ19uYW1lKQoKICAgIHNjaGVtZSA9IG1hdGNoLmdyb3VwKCdTQ0hFTUUnKQogICAgYnVja2V0ID0gbWF0Y2guZ3JvdXAoJ0JVQ0tFVCcpCiAgICBnY3Nfb2JqZWN0ID0gbWF0Y2guZ3JvdXAoJ09CSkVDVCcpCgogICAgaWYgKChzY2hlbWUgaXMgTm9uZSkgb3IgKHNjaGVtZS5sb3dlcigpICE9IHNlbGYuR0NTX1NDSEVNRSkgb3IKICAgICAgICAoYnVja2V0IGlzIE5vbmUpKToKICAgICAgcmV0dXJuIHNlbGYuX3ZhbGlkYXRlX2Vycm9yKHNlbGYuRVJSX0lOVkFMSURfR0NTX1BBVEgsIGFyZywgYXJnX25hbWUpCgogICAgaWYgbm90IHNlbGYuaXNfZnVsbF9zdHJpbmdfbWF0Y2goc2VsZi5HQ1NfQlVDS0VULCBidWNrZXQpOgogICAgICByZXR1cm4gc2VsZi5fdmFsaWRhdGVfZXJyb3Ioc2VsZi5FUlJfSU5WQUxJRF9HQ1NfQlVDS0VULCBhcmcsIGFyZ19uYW1lKQogICAgaWYgZ2NzX29iamVjdCBpcyBOb25lIG9yICdcbicgaW4gZ2NzX29iamVjdCBvciAnXHInIGluIGdjc19vYmplY3Q6CiAgICAgIHJldHVybiBzZWxmLl92YWxpZGF0ZV9lcnJvcihzZWxmLkVSUl9JTlZBTElEX0dDU19PQkpFQ1QsIGFyZywgYXJnX25hbWUpCgogICAgcmV0dXJuIFtdCgogIGRlZiB2YWxpZGF0ZV9jbG91ZF9vcHRpb25zKHNlbGYsIHZpZXcpOgogICAgIiIiVmFsaWRhdGVzIGpvYl9uYW1lIGFuZCBwcm9qZWN0IGFyZ3VtZW50cy4iIiIKICAgIGVycm9ycyA9IFtdCiAgICBpZiAodmlldy5qb2JfbmFtZSBhbmQKICAgICAgICBub3Qgc2VsZi5pc19mdWxsX3N0cmluZ19tYXRjaChzZWxmLkpPQl9QQVRURVJOLCB2aWV3LmpvYl9uYW1lKSk6CiAgICAgIGVycm9ycy5leHRlbmQoc2VsZi5fdmFsaWRhdGVfZXJyb3Ioc2VsZi5FUlJfSU5WQUxJRF9KT0JfTkFNRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3LmpvYl9uYW1lKSkKICAgIHByb2plY3QgPSB2aWV3LnByb2plY3QKICAgIGlmIHByb2plY3QgaXMgTm9uZToKICAgICAgZXJyb3JzLmV4dGVuZChzZWxmLl92YWxpZGF0ZV9lcnJvcihzZWxmLkVSUl9NSVNTSU5HX09QVElPTiwgJ3Byb2plY3QnKSkKICAgIGVsc2U6CiAgICAgIGlmIHNlbGYuaXNfZnVsbF9zdHJpbmdfbWF0Y2goc2VsZi5QUk9KRUNUX05VTUJFUl9QQVRURVJOLCBwcm9qZWN0KToKICAgICAgICBlcnJvcnMuZXh0ZW5kKAogICAgICAgICAgICBzZWxmLl92YWxpZGF0ZV9lcnJvcihzZWxmLkVSUl9JTlZBTElEX1BST0pFQ1RfTlVNQkVSLCBwcm9qZWN0KSkKICAgICAgZWxpZiBub3Qgc2VsZi5pc19mdWxsX3N0cmluZ19tYXRjaChzZWxmLlBST0pFQ1RfSURfUEFUVEVSTiwgcHJvamVjdCk6CiAgICAgICAgZXJyb3JzLmV4dGVuZCgKICAgICAgICAgICAgc2VsZi5fdmFsaWRhdGVfZXJyb3Ioc2VsZi5FUlJfSU5WQUxJRF9QUk9KRUNUX0lELCBwcm9qZWN0KSkKICAgIGlmIHZpZXcudXBkYXRlOgogICAgICBpZiBub3Qgdmlldy5qb2JfbmFtZToKICAgICAgICBlcnJvcnMuZXh0ZW5kKHNlbGYuX3ZhbGlkYXRlX2Vycm9yKAogICAgICAgICAgICAnRXhpc3Rpbmcgam9iIG5hbWUgbXVzdCBiZSBwcm92aWRlZCB3aGVuIHVwZGF0aW5nIGEgcGlwZWxpbmUuJykpCiAgICByZXR1cm4gZXJyb3JzCgogIGRlZiB2YWxpZGF0ZV9vcHRpb25hbF9hcmd1bWVudF9wb3NpdGl2ZShzZWxmLCB2aWV3LCBhcmdfbmFtZSk6CiAgICAiIiJWYWxpZGF0ZXMgdGhhdCBhbiBvcHRpb25hbCBhcmd1bWVudCAoaWYgc2V0KSBoYXMgYSBwb3NpdGl2ZSB2YWx1ZS4iIiIKICAgIGFyZyA9IGdldGF0dHIodmlldywgYXJnX25hbWUsIE5vbmUpCiAgICBpZiBhcmcgaXMgbm90IE5vbmUgYW5kIGludChhcmcpIDw9IDA6CiAgICAgIHJldHVybiBzZWxmLl92YWxpZGF0ZV9lcnJvcihzZWxmLkVSUl9JTlZBTElEX05PVF9QT1NJVElWRSwgYXJnLCBhcmdfbmFtZSkKICAgIHJldHVybiBbXQoKICBkZWYgdmFsaWRhdGVfdGVzdF9tYXRjaGVyKHNlbGYsIHZpZXcsIGFyZ19uYW1lKToKICAgICIiIlZhbGlkYXRlcyB0aGF0IG9uX3N1Y2Nlc3NfbWF0Y2hlciBhcmd1bWVudCBpZiBzZXQuCgogICAgVmFsaWRhdGVzIHRoYXQgb25fc3VjY2Vzc19tYXRjaGVyIGlzIHVucGlja2xhYmxlIGFuZCBpcyBpbnN0YW5jZQogICAgb2YgYGhhbWNyZXN0LmNvcmUuYmFzZV9tYXRjaGVyLkJhc2VNYXRjaGVyYC4KICAgICIiIgogICAgIyBUaGlzIGlzIGEgdGVzdCBvbmx5IG1ldGhvZCBhbmQgcmVxdWlyZXMgaGFtY3Jlc3QKICAgIGZyb20gaGFtY3Jlc3QuY29yZS5iYXNlX21hdGNoZXIgaW1wb3J0IEJhc2VNYXRjaGVyCiAgICBwaWNrbGVkX21hdGNoZXIgPSB2aWV3Lm9uX3N1Y2Nlc3NfbWF0Y2hlcgogICAgZXJyb3JzID0gW10KICAgIHRyeToKICAgICAgbWF0Y2hlciA9IHBpY2tsZXIubG9hZHMocGlja2xlZF9tYXRjaGVyKQogICAgICBpZiBub3QgaXNpbnN0YW5jZShtYXRjaGVyLCBCYXNlTWF0Y2hlcik6CiAgICAgICAgZXJyb3JzLmV4dGVuZCgKICAgICAgICAgICAgc2VsZi5fdmFsaWRhdGVfZXJyb3IoCiAgICAgICAgICAgICAgICBzZWxmLkVSUl9JTlZBTElEX1RFU1RfTUFUQ0hFUl9UWVBFLCBtYXRjaGVyLCBhcmdfbmFtZSkpCiAgICBleGNlcHQ6ICAgIyBweWxpbnQ6IGRpc2FibGU9YmFyZS1leGNlcHQKICAgICAgZXJyb3JzLmV4dGVuZCgKICAgICAgICAgIHNlbGYuX3ZhbGlkYXRlX2Vycm9yKAogICAgICAgICAgICAgIHNlbGYuRVJSX0lOVkFMSURfVEVTVF9NQVRDSEVSX1VOUElDS0xBQkxFLAogICAgICAgICAgICAgIHBpY2tsZWRfbWF0Y2hlciwKICAgICAgICAgICAgICBhcmdfbmFtZSkpCiAgICByZXR1cm4gZXJyb3JzCn1yW4QAAChYLwAAAFBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci52YWxpZGF0ZV9jbG91ZF9vcHRpb25zWAMAAABkZWZLnEuyh1ghAAAAUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yLl9faW5pdF9fWAMAAABkZWZLWktdh1gYAAAAUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yWAUAAABjbGFzc0slS9GHWC4AAABQaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IudmFsaWRhdGVfdGVzdF9tYXRjaGVyWAMAAABkZWZLukvRh1gtAAAAUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yLmlzX2Z1bGxfc3RyaW5nX21hdGNoWAMAAABkZWZLfEuAh1goAAAAUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yLl92YWxpZGF0ZV9lcnJvclgDAAAAZGVmS4FLg4dYKgAAAFBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci52YWxpZGF0ZV9nY3NfcGF0aFgDAAAAZGVmS4RLm4dYPAAAAFBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci52YWxpZGF0ZV9vcHRpb25hbF9hcmd1bWVudF9wb3NpdGl2ZVgDAAAAZGVmS7NLuYdYKgAAAFBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci5pc19zZXJ2aWNlX3J1bm5lclgDAAAAZGVmS21Le4dYIQAAAFBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci52YWxpZGF0ZVgDAAAAZGVmS15LbId1fXJchAAAKFgvAAAAUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yLnZhbGlkYXRlX2Nsb3VkX29wdGlvbnNYLgAAAGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3JyXYQAAFgYAAAAUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yal2EAABYLgAAAFBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci52YWxpZGF0ZV90ZXN0X21hdGNoZXJqXYQAAFgtAAAAUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yLmlzX2Z1bGxfc3RyaW5nX21hdGNoal2EAABYKgAAAFBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci52YWxpZGF0ZV9nY3NfcGF0aGpdhAAAWDwAAABQaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IudmFsaWRhdGVfb3B0aW9uYWxfYXJndW1lbnRfcG9zaXRpdmVqXYQAAFgqAAAAUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yLmlzX3NlcnZpY2VfcnVubmVyal2EAABYIQAAAFBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci52YWxpZGF0ZWpdhAAAdWp9aQAAWC4AAABhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9ycl6EAACFgXJfhAAAfXJghAAAYnRyYYQAAFUaYXBhY2hlX2JlYW0udXRpbHMucHJvZmlsZXJyYoQAAChYvBUAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiQSBwcm9maWxlciBjb250ZXh0IG1hbmFnZXIgYmFzZWQgb24gY1Byb2ZpbGUuUHJvZmlsZSBvYmplY3RzLgoKRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoiIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgY1Byb2ZpbGUgICMgcHlsaW50OiBkaXNhYmxlPWJhZC1weXRob24zLWltcG9ydAppbXBvcnQgaW8KaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IG9zCmltcG9ydCBwc3RhdHMKaW1wb3J0IHJhbmRvbQppbXBvcnQgdGVtcGZpbGUKaW1wb3J0IHRpbWUKaW1wb3J0IHdhcm5pbmdzCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdApmcm9tIHRocmVhZGluZyBpbXBvcnQgVGltZXIKCmZyb20gYXBhY2hlX2JlYW0uaW8gaW1wb3J0IGZpbGVzeXN0ZW1zCgoKY2xhc3MgUHJvZmlsZShvYmplY3QpOgogICIiImNQcm9maWxlIHdyYXBwZXIgY29udGV4dCBmb3Igc2F2aW5nIGFuZCBsb2dnaW5nIHByb2ZpbGVyIHJlc3VsdHMuIiIiCgogIFNPUlRCWSA9ICdjdW11bGF0aXZlJwoKICBkZWYgX19pbml0X18oc2VsZiwgcHJvZmlsZV9pZCwgcHJvZmlsZV9sb2NhdGlvbj1Ob25lLCBsb2dfcmVzdWx0cz1GYWxzZSwKICAgICAgICAgICAgICAgZmlsZV9jb3B5X2ZuPU5vbmUsIHRpbWVfcHJlZml4PSclWS0lbS0lZF8lSF8lTV8lUy0nKToKICAgIHNlbGYuc3RhdHMgPSBOb25lCiAgICBzZWxmLnByb2ZpbGVfaWQgPSBzdHIocHJvZmlsZV9pZCkKICAgIHNlbGYucHJvZmlsZV9sb2NhdGlvbiA9IHByb2ZpbGVfbG9jYXRpb24KICAgIHNlbGYubG9nX3Jlc3VsdHMgPSBsb2dfcmVzdWx0cwogICAgc2VsZi5maWxlX2NvcHlfZm4gPSBmaWxlX2NvcHlfZm4gb3Igc2VsZi5kZWZhdWx0X2ZpbGVfY29weV9mbgogICAgc2VsZi50aW1lX3ByZWZpeCA9IHRpbWVfcHJlZml4CiAgICBzZWxmLnByb2ZpbGVfb3V0cHV0ID0gTm9uZQoKICBkZWYgX19lbnRlcl9fKHNlbGYpOgogICAgbG9nZ2luZy5pbmZvKCdTdGFydCBwcm9maWxpbmc6ICVzJywgc2VsZi5wcm9maWxlX2lkKQogICAgc2VsZi5wcm9maWxlID0gY1Byb2ZpbGUuUHJvZmlsZSgpCiAgICBzZWxmLnByb2ZpbGUuZW5hYmxlKCkKICAgIHJldHVybiBzZWxmCgogIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CiAgICBzZWxmLnByb2ZpbGUuZGlzYWJsZSgpCiAgICBsb2dnaW5nLmluZm8oJ1N0b3AgcHJvZmlsaW5nOiAlcycsIHNlbGYucHJvZmlsZV9pZCkKCiAgICBpZiBzZWxmLnByb2ZpbGVfbG9jYXRpb246CiAgICAgIGR1bXBfbG9jYXRpb24gPSBvcy5wYXRoLmpvaW4oCiAgICAgICAgICBzZWxmLnByb2ZpbGVfbG9jYXRpb24sCiAgICAgICAgICB0aW1lLnN0cmZ0aW1lKHNlbGYudGltZV9wcmVmaXggKyBzZWxmLnByb2ZpbGVfaWQpKQogICAgICBmZCwgZmlsZW5hbWUgPSB0ZW1wZmlsZS5ta3N0ZW1wKCkKICAgICAgdHJ5OgogICAgICAgIG9zLmNsb3NlKGZkKQogICAgICAgIHNlbGYucHJvZmlsZS5kdW1wX3N0YXRzKGZpbGVuYW1lKQogICAgICAgIGxvZ2dpbmcuaW5mbygnQ29weWluZyBwcm9maWxlciBkYXRhIHRvOiBbJXNdJywgZHVtcF9sb2NhdGlvbikKICAgICAgICBzZWxmLmZpbGVfY29weV9mbihmaWxlbmFtZSwgZHVtcF9sb2NhdGlvbikKICAgICAgZmluYWxseToKICAgICAgICBvcy5yZW1vdmUoZmlsZW5hbWUpCiAgICAgIHNlbGYucHJvZmlsZV9vdXRwdXQgPSBkdW1wX2xvY2F0aW9uCgogICAgaWYgc2VsZi5sb2dfcmVzdWx0czoKICAgICAgcyA9IGlvLlN0cmluZ0lPKCkKICAgICAgc2VsZi5zdGF0cyA9IHBzdGF0cy5TdGF0cygKICAgICAgICAgIHNlbGYucHJvZmlsZSwgc3RyZWFtPXMpLnNvcnRfc3RhdHMoUHJvZmlsZS5TT1JUQlkpCiAgICAgIHNlbGYuc3RhdHMucHJpbnRfc3RhdHMoKQogICAgICBsb2dnaW5nLmluZm8oJ1Byb2ZpbGVyIGRhdGE6IFslc10nLCBzLmdldHZhbHVlKCkpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZGVmYXVsdF9maWxlX2NvcHlfZm4oc3JjLCBkZXN0KToKICAgIGRlc3RfaGFuZGxlID0gZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMuY3JlYXRlKGRlc3QgKyAnLnRtcCcpCiAgICB0cnk6CiAgICAgIHdpdGggb3BlbihzcmMsICdyYicpIGFzIHNyY19oYW5kbGU6CiAgICAgICAgZGVzdF9oYW5kbGUud3JpdGUoc3JjX2hhbmRsZS5yZWFkKCkpCiAgICBmaW5hbGx5OgogICAgICBkZXN0X2hhbmRsZS5jbG9zZSgpCiAgICBmaWxlc3lzdGVtcy5GaWxlU3lzdGVtcy5yZW5hbWUoW2Rlc3QgKyAnLnRtcCddLCBbZGVzdF0pCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZmFjdG9yeV9mcm9tX29wdGlvbnMob3B0aW9ucyk6CiAgICBpZiBvcHRpb25zLnByb2ZpbGVfY3B1OgogICAgICBkZWYgY3JlYXRlX3Byb2ZpbGVyKHByb2ZpbGVfaWQsICoqa3dhcmdzKToKICAgICAgICBpZiByYW5kb20ucmFuZG9tKCkgPCBvcHRpb25zLnByb2ZpbGVfc2FtcGxlX3JhdGU6CiAgICAgICAgICByZXR1cm4gUHJvZmlsZShwcm9maWxlX2lkLCBvcHRpb25zLnByb2ZpbGVfbG9jYXRpb24sICoqa3dhcmdzKQogICAgICByZXR1cm4gY3JlYXRlX3Byb2ZpbGVyCgoKY2xhc3MgTWVtb3J5UmVwb3J0ZXIob2JqZWN0KToKICAiIiJBIG1lbW9yeSByZXBvcnRlciB0aGF0IHJlcG9ydHMgdGhlIG1lbW9yeSB1c2FnZSBhbmQgaGVhcCBwcm9maWxlLgogIFVzYWdlOjo6CgogICAgbXIgPSBNZW1vcnlSZXBvcnRlcihpbnRlcnZhbF9zZWNvbmQ9MzAuMCkKICAgIG1yLnN0YXJ0KCkKICAgIHdoaWxlIC4uLgogICAgICA8ZG8gc29tZXRoaW5nPgogICAgICAjIHRoaXMgd2lsbCByZXBvcnQgY29udGludW91c2x5IHdpdGggMzAgc2Vjb25kcyBiZXR3ZWVuIHJlcG9ydHMuCiAgICBtci5zdG9wKCkKCiAgTk9URTogQSByZXBvcnRlciB3aXRoIHN0YXJ0KCkgc2hvdWxkIGFsd2F5cyBzdG9wKCksIG9yIHRoZSBwYXJlbnQgcHJvY2VzcyBjYW4KICBuZXZlciBmaW5pc2guCgogIE9yIHNpbXBseSB0aGUgZm9sbG93aW5nIHdoaWNoIGRvZXMgc3RhcigpIGFuZCBzdG9wKCk6CiAgICB3aXRoIE1lbW9yeVJlcG9ydGVyKGludGVydmFsX3NlY29uZD0xMDApOgogICAgICB3aGlsZSAuLi4KICAgICAgICA8ZG8gc29tZSB0aGluZz4KCiAgQWxzbyBpdCBjb3VsZCByZXBvcnQgb24gZGVtYW5kIHdpdGhvdXQgY29udGludW91cyByZXBvcnRpbmcuOjoKCiAgICBtciA9IE1lbW9yeVJlcG9ydGVyKCkgICMgZGVmYXVsdCBpbnRlcnZhbCA2MHMgYnV0IG5vdCBzdGFydGVkLgogICAgPGRvIHNvbWV0aGluZz4KICAgIG1yLnJlcG9ydF9vbmNlKCkKICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGludGVydmFsX3NlY29uZD02MC4wKToKICAgICMgZ3VwcHkgbWlnaHQgbm90IGhhdmUgaW5zdGFsbGVkLiBodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvZ3VwcHkvMC4xLjEwCiAgICAjIFRoZSByZXBvcnRlciBjYW4gYmUgc2V0IHVwIG9ubHkgd2hlbiBndXBweSBpcyBpbnN0YWxsZWQgKGFuZCBndXBweSBjYW5ub3QKICAgICMgYmUgYWRkZWQgdG8gdGhlIHJlcXVpcmVkIHBhY2thZ2VzIGluIHNldHVwLnB5LCBzaW5jZSBpdCdzIG5vdCBhdmFpbGFibGUKICAgICMgaW4gYWxsIHBsYXRmb3JtcykuCiAgICB0cnk6CiAgICAgIGZyb20gZ3VwcHkgaW1wb3J0IGhweSAgIyBweWxpbnQ6IGRpc2FibGU9aW1wb3J0LWVycm9yCiAgICAgIHNlbGYuX2hweSA9IGhweQogICAgICBzZWxmLl9pbnRlcnZhbF9zZWNvbmQgPSBpbnRlcnZhbF9zZWNvbmQKICAgICAgc2VsZi5fdGltZXIgPSBOb25lCiAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgIHdhcm5pbmdzLndhcm4oJ2d1cHB5IGlzIG5vdCBpbnN0YWxsZWQ7IE1lbW9yeVJlcG9ydGVyIG5vdCBhdmFpbGFibGUuJykKICAgICAgc2VsZi5faHB5ID0gTm9uZQogICAgc2VsZi5fZW5hYmxlZCA9IEZhbHNlCgogIGRlZiBfX2VudGVyX18oc2VsZik6CiAgICBzZWxmLnN0YXJ0KCkKICAgIHJldHVybiBzZWxmCgogIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CiAgICBzZWxmLnN0b3AoKQoKICBkZWYgc3RhcnQoc2VsZik6CiAgICBpZiBzZWxmLl9lbmFibGVkIG9yIG5vdCBzZWxmLl9ocHk6CiAgICAgIHJldHVybgogICAgc2VsZi5fZW5hYmxlZCA9IFRydWUKCiAgICBkZWYgcmVwb3J0X3dpdGhfaW50ZXJ2YWwoKToKICAgICAgaWYgbm90IHNlbGYuX2VuYWJsZWQ6CiAgICAgICAgcmV0dXJuCiAgICAgIHNlbGYucmVwb3J0X29uY2UoKQogICAgICBzZWxmLl90aW1lciA9IFRpbWVyKHNlbGYuX2ludGVydmFsX3NlY29uZCwgcmVwb3J0X3dpdGhfaW50ZXJ2YWwpCiAgICAgIHNlbGYuX3RpbWVyLnN0YXJ0KCkKCiAgICBzZWxmLl90aW1lciA9IFRpbWVyKHNlbGYuX2ludGVydmFsX3NlY29uZCwgcmVwb3J0X3dpdGhfaW50ZXJ2YWwpCiAgICBzZWxmLl90aW1lci5zdGFydCgpCgogIGRlZiBzdG9wKHNlbGYpOgogICAgaWYgbm90IHNlbGYuX2VuYWJsZWQ6CiAgICAgIHJldHVybgogICAgc2VsZi5fdGltZXIuY2FuY2VsKCkKICAgIHNlbGYuX2VuYWJsZWQgPSBGYWxzZQoKICBkZWYgcmVwb3J0X29uY2Uoc2VsZik6CiAgICBpZiBub3Qgc2VsZi5faHB5OgogICAgICByZXR1cm4KICAgIHJlcG9ydF9zdGFydF90aW1lID0gdGltZS50aW1lKCkKICAgIGhlYXBfcHJvZmlsZSA9IHNlbGYuX2hweSgpLmhlYXAoKQogICAgbG9nZ2luZy5pbmZvKCcqKiogTWVtb3J5UmVwb3J0IEhlYXA6XG4gJXNcbiBNZW1vcnlSZXBvcnQgdG9vayAlLjFmIHNlY29uZHMnLAogICAgICAgICAgICAgICAgIGhlYXBfcHJvZmlsZSwgdGltZS50aW1lKCkgLSByZXBvcnRfc3RhcnRfdGltZSkKfXJjhAAAKFgOAAAATWVtb3J5UmVwb3J0ZXJYBQAAAGNsYXNzS2lLtYdYHAAAAFByb2ZpbGUuZmFjdG9yeV9mcm9tX29wdGlvbnNYAwAAAGRlZktgS2eHWBcAAABNZW1vcnlSZXBvcnRlci5fX2luaXRfX1gDAAAAZGVmS4NLkYdYFAAAAE1lbW9yeVJlcG9ydGVyLnN0YXJ0WAMAAABkZWZLmUunh1gaAAAATWVtb3J5UmVwb3J0ZXIucmVwb3J0X29uY2VYAwAAAGRlZkuuS7WHWBcAAABNZW1vcnlSZXBvcnRlci5fX2V4aXRfX1gDAAAAZGVmS5ZLmIdYBwAAAFByb2ZpbGVYBQAAAGNsYXNzSyhLZ4dYEAAAAFByb2ZpbGUuX19leGl0X19YAwAAAGRlZks9S1WHWBAAAABQcm9maWxlLl9faW5pdF9fWAMAAABkZWZLLUs2h1gRAAAAUHJvZmlsZS5fX2VudGVyX19YAwAAAGRlZks3SzyHWCkAAABNZW1vcnlSZXBvcnRlci5zdGFydC5yZXBvcnRfd2l0aF9pbnRlcnZhbFgDAAAAZGVmS55LpIdYEwAAAE1lbW9yeVJlcG9ydGVyLnN0b3BYAwAAAGRlZkuoS62HWBwAAABQcm9maWxlLmRlZmF1bHRfZmlsZV9jb3B5X2ZuWAMAAABkZWZLVktfh1gsAAAAUHJvZmlsZS5mYWN0b3J5X2Zyb21fb3B0aW9ucy5jcmVhdGVfcHJvZmlsZXJYAwAAAGRlZktjS2aHWBgAAABNZW1vcnlSZXBvcnRlci5fX2VudGVyX19YAwAAAGRlZkuSS5WHdX1yZIQAAChYDgAAAE1lbW9yeVJlcG9ydGVyagNhAABYHAAAAFByb2ZpbGUuZmFjdG9yeV9mcm9tX29wdGlvbnNqA2EAAFgUAAAATWVtb3J5UmVwb3J0ZXIuc3RhcnRqA2EAAFgaAAAATWVtb3J5UmVwb3J0ZXIucmVwb3J0X29uY2VqA2EAAFgTAAAATWVtb3J5UmVwb3J0ZXIuc3RvcGoDYQAAWAcAAABQcm9maWxlagNhAABYHAAAAFByb2ZpbGUuZGVmYXVsdF9maWxlX2NvcHlfZm5qA2EAAHVqfWkAAFgaAAAAYXBhY2hlX2JlYW0udXRpbHMucHJvZmlsZXJyZYQAAIWBcmaEAAB9cmeEAABidHJohAAAVSthcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfdXNlcnN0YXRlKFgzEgAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJTdXBwb3J0IGZvciB1c2VyIHN0YXRlIGluIHRoZSBCdW5kbGVCYXNlZERpcmVjdFJ1bm5lci4iIiIKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgdXNlcnN0YXRlCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyIGltcG9ydCBfTGlzdFN0YXRlVGFnCgoKY2xhc3MgRGlyZWN0VXNlclN0YXRlQ29udGV4dCh1c2Vyc3RhdGUuVXNlclN0YXRlQ29udGV4dCk6CiAgIiIidXNlcnN0YXRlLlVzZXJTdGF0ZUNvbnRleHQgZm9yIHRoZSBCdW5kbGVCYXNlZERpcmVjdFJ1bm5lci4KCiAgVGhlIERpcmVjdFVzZXJTdGF0ZUNvbnRleHQgYnVmZmVycyB1cCB1cGRhdGVzIHRoYXQgYXJlIHRvIGJlIGNvbW1pdHRlZAogIGJ5IHRoZSBUcmFuc2Zvcm1FdmFsdWF0b3IgYWZ0ZXIgcnVubmluZyBhIERvRm4uCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBzdGVwX2NvbnRleHQsIGRvZm4sIGtleV9jb2Rlcik6CiAgICBzZWxmLnN0ZXBfY29udGV4dCA9IHN0ZXBfY29udGV4dAogICAgc2VsZi5kb2ZuID0gZG9mbgogICAgc2VsZi5rZXlfY29kZXIgPSBrZXlfY29kZXIKCiAgICBzZWxmLmFsbF9zdGF0ZV9zcGVjcywgc2VsZi5hbGxfdGltZXJfc3BlY3MgPSAoCiAgICAgICAgdXNlcnN0YXRlLmdldF9kb2ZuX3NwZWNzKGRvZm4pKQogICAgc2VsZi5zdGF0ZV90YWdzID0ge30KICAgIGZvciBzdGF0ZV9zcGVjIGluIHNlbGYuYWxsX3N0YXRlX3NwZWNzOgogICAgICBzdGF0ZV9rZXkgPSAndXNlci8lcycgJSBzdGF0ZV9zcGVjLm5hbWUKICAgICAgaWYgaXNpbnN0YW5jZShzdGF0ZV9zcGVjLCB1c2Vyc3RhdGUuQmFnU3RhdGVTcGVjKToKICAgICAgICBzdGF0ZV90YWcgPSBfTGlzdFN0YXRlVGFnKHN0YXRlX2tleSkKICAgICAgZWxpZiBpc2luc3RhbmNlKHN0YXRlX3NwZWMsIHVzZXJzdGF0ZS5Db21iaW5pbmdWYWx1ZVN0YXRlU3BlYyk6CiAgICAgICAgc3RhdGVfdGFnID0gX0xpc3RTdGF0ZVRhZyhzdGF0ZV9rZXkpCiAgICAgIGVsc2U6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxpZCBzdGF0ZSBzcGVjOiAlcycgJSBzdGF0ZV9zcGVjKQogICAgICBzZWxmLnN0YXRlX3RhZ3Nbc3RhdGVfc3BlY10gPSBzdGF0ZV90YWcKCiAgICBzZWxmLmNhY2hlZF9zdGF0ZXMgPSB7fQogICAgc2VsZi5jYWNoZWRfdGltZXJzID0ge30KCiAgZGVmIGdldF90aW1lcihzZWxmLCB0aW1lcl9zcGVjLCBrZXksIHdpbmRvdyk6CiAgICBhc3NlcnQgdGltZXJfc3BlYyBpbiBzZWxmLmFsbF90aW1lcl9zcGVjcwogICAgZW5jb2RlZF9rZXkgPSBzZWxmLmtleV9jb2Rlci5lbmNvZGUoa2V5KQogICAgY2FjaGVfa2V5ID0gKGVuY29kZWRfa2V5LCB3aW5kb3csIHRpbWVyX3NwZWMpCiAgICBpZiBjYWNoZV9rZXkgbm90IGluIHNlbGYuY2FjaGVkX3RpbWVyczoKICAgICAgc2VsZi5jYWNoZWRfdGltZXJzW2NhY2hlX2tleV0gPSB1c2Vyc3RhdGUuUnVudGltZVRpbWVyKHRpbWVyX3NwZWMpCiAgICByZXR1cm4gc2VsZi5jYWNoZWRfdGltZXJzW2NhY2hlX2tleV0KCiAgZGVmIGdldF9zdGF0ZShzZWxmLCBzdGF0ZV9zcGVjLCBrZXksIHdpbmRvdyk6CiAgICBhc3NlcnQgc3RhdGVfc3BlYyBpbiBzZWxmLmFsbF9zdGF0ZV9zcGVjcwogICAgZW5jb2RlZF9rZXkgPSBzZWxmLmtleV9jb2Rlci5lbmNvZGUoa2V5KQogICAgY2FjaGVfa2V5ID0gKGVuY29kZWRfa2V5LCB3aW5kb3csIHN0YXRlX3NwZWMpCiAgICBpZiBjYWNoZV9rZXkgbm90IGluIHNlbGYuY2FjaGVkX3N0YXRlczoKICAgICAgc3RhdGVfdGFnID0gc2VsZi5zdGF0ZV90YWdzW3N0YXRlX3NwZWNdCiAgICAgIHZhbHVlX2FjY2Vzc29yID0gKAogICAgICAgICAgbGFtYmRhOiBzZWxmLl9nZXRfdW5kZXJseWluZ19zdGF0ZShzdGF0ZV9zcGVjLCBrZXksIHdpbmRvdykpCiAgICAgIHNlbGYuY2FjaGVkX3N0YXRlc1tjYWNoZV9rZXldID0gdXNlcnN0YXRlLlJ1bnRpbWVTdGF0ZS5mb3Jfc3BlYygKICAgICAgICAgIHN0YXRlX3NwZWMsIHN0YXRlX3RhZywgdmFsdWVfYWNjZXNzb3IpCiAgICByZXR1cm4gc2VsZi5jYWNoZWRfc3RhdGVzW2NhY2hlX2tleV0KCiAgZGVmIF9nZXRfdW5kZXJseWluZ19zdGF0ZShzZWxmLCBzdGF0ZV9zcGVjLCBrZXksIHdpbmRvdyk6CiAgICBzdGF0ZV90YWcgPSBzZWxmLnN0YXRlX3RhZ3Nbc3RhdGVfc3BlY10KICAgIGVuY29kZWRfa2V5ID0gc2VsZi5rZXlfY29kZXIuZW5jb2RlKGtleSkKICAgIHJldHVybiAoc2VsZi5zdGVwX2NvbnRleHQuZ2V0X2tleWVkX3N0YXRlKGVuY29kZWRfa2V5KQogICAgICAgICAgICAuZ2V0X3N0YXRlKHdpbmRvdywgc3RhdGVfdGFnKSkKCiAgZGVmIGNvbW1pdChzZWxmKToKICAgICMgQ29tbWl0IHN0YXRlIG1vZGlmaWNhdGlvbnMuCiAgICBmb3IgY2FjaGVfa2V5LCBydW50aW1lX3N0YXRlIGluIHNlbGYuY2FjaGVkX3N0YXRlcy5pdGVtcygpOgogICAgICBlbmNvZGVkX2tleSwgd2luZG93LCBzdGF0ZV9zcGVjID0gY2FjaGVfa2V5CiAgICAgIHN0YXRlID0gc2VsZi5zdGVwX2NvbnRleHQuZ2V0X2tleWVkX3N0YXRlKGVuY29kZWRfa2V5KQogICAgICBzdGF0ZV90YWcgPSBzZWxmLnN0YXRlX3RhZ3Nbc3RhdGVfc3BlY10KICAgICAgaWYgaXNpbnN0YW5jZShzdGF0ZV9zcGVjLCB1c2Vyc3RhdGUuQmFnU3RhdGVTcGVjKToKICAgICAgICBpZiBydW50aW1lX3N0YXRlLl9jbGVhcmVkOgogICAgICAgICAgc3RhdGUuY2xlYXJfc3RhdGUod2luZG93LCBzdGF0ZV90YWcpCiAgICAgICAgZm9yIG5ld192YWx1ZSBpbiBydW50aW1lX3N0YXRlLl9uZXdfdmFsdWVzOgogICAgICAgICAgc3RhdGUuYWRkX3N0YXRlKHdpbmRvdywgc3RhdGVfdGFnLCBuZXdfdmFsdWUpCiAgICAgIGVsaWYgaXNpbnN0YW5jZShzdGF0ZV9zcGVjLCB1c2Vyc3RhdGUuQ29tYmluaW5nVmFsdWVTdGF0ZVNwZWMpOgogICAgICAgIGlmIHJ1bnRpbWVfc3RhdGUuX21vZGlmaWVkOgogICAgICAgICAgc3RhdGUuY2xlYXJfc3RhdGUod2luZG93LCBzdGF0ZV90YWcpCiAgICAgICAgICBzdGF0ZS5hZGRfc3RhdGUoCiAgICAgICAgICAgICAgd2luZG93LCBzdGF0ZV90YWcsCiAgICAgICAgICAgICAgc3RhdGVfc3BlYy5jb2Rlci5lbmNvZGUocnVudGltZV9zdGF0ZS5fY3VycmVudF9hY2N1bXVsYXRvcikpCiAgICAgIGVsc2U6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxpZCBzdGF0ZSBzcGVjOiAlcycgJSBzdGF0ZV9zcGVjKQoKICAgICMgQ29tbWl0IG5ldyB0aW1lcnMuCiAgICBmb3IgY2FjaGVfa2V5LCBydW50aW1lX3RpbWVyIGluIHNlbGYuY2FjaGVkX3RpbWVycy5pdGVtcygpOgogICAgICBlbmNvZGVkX2tleSwgd2luZG93LCB0aW1lcl9zcGVjID0gY2FjaGVfa2V5CiAgICAgIHN0YXRlID0gc2VsZi5zdGVwX2NvbnRleHQuZ2V0X2tleWVkX3N0YXRlKGVuY29kZWRfa2V5KQogICAgICB0aW1lcl9uYW1lID0gJ3VzZXIvJXMnICUgdGltZXJfc3BlYy5uYW1lCiAgICAgIGlmIHJ1bnRpbWVfdGltZXIuX2NsZWFyZWQ6CiAgICAgICAgc3RhdGUuY2xlYXJfdGltZXIod2luZG93LCB0aW1lcl9uYW1lLCB0aW1lcl9zcGVjLnRpbWVfZG9tYWluKQogICAgICBpZiBydW50aW1lX3RpbWVyLl9uZXdfdGltZXN0YW1wIGlzIG5vdCBOb25lOgogICAgICAgICMgVE9ETyhjY3kpOiBhZGQgY29ycmVzcG9uZGluZyB3YXRlcm1hcmsgaG9sZHMgYWZ0ZXIgdGhlIERpcmVjdFJ1bm5lcgogICAgICAgICMgYWxsb3dzIGZvciBrZXllZCB3YXRlcm1hcmsgaG9sZHMuCiAgICAgICAgc3RhdGUuc2V0X3RpbWVyKHdpbmRvdywgdGltZXJfbmFtZSwgdGltZXJfc3BlYy50aW1lX2RvbWFpbiwKICAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZV90aW1lci5fbmV3X3RpbWVzdGFtcCkKfXJphAAAKFgWAAAARGlyZWN0VXNlclN0YXRlQ29udGV4dFgFAAAAY2xhc3NLGUtvh1gdAAAARGlyZWN0VXNlclN0YXRlQ29udGV4dC5jb21taXRYAwAAAGRlZktPS2+HWCAAAABEaXJlY3RVc2VyU3RhdGVDb250ZXh0LmdldF9zdGF0ZVgDAAAAZGVmSz1LSIdYHwAAAERpcmVjdFVzZXJTdGF0ZUNvbnRleHQuX19pbml0X19YAwAAAGRlZksgSzSHWCAAAABEaXJlY3RVc2VyU3RhdGVDb250ZXh0LmdldF90aW1lclgDAAAAZGVmSzVLPIdYLAAAAERpcmVjdFVzZXJTdGF0ZUNvbnRleHQuX2dldF91bmRlcmx5aW5nX3N0YXRlWAMAAABkZWZLSUtOh3V9cmqEAAAoWBYAAABEaXJlY3RVc2VyU3RhdGVDb250ZXh0attpAABYHQAAAERpcmVjdFVzZXJTdGF0ZUNvbnRleHQuY29tbWl0attpAABYIAAAAERpcmVjdFVzZXJTdGF0ZUNvbnRleHQuZ2V0X3N0YXRlattpAABYIAAAAERpcmVjdFVzZXJTdGF0ZUNvbnRleHQuZ2V0X3RpbWVyattpAAB1an1pAABYKwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF91c2Vyc3RhdGVya4QAAIWBcmyEAAB9cm2EAABidFUxYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5wdHJhbnNmb3JtX292ZXJyaWRlcyhYAggAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiUHRyYW5zZm9ybSBvdmVycmlkZXMgZm9yIERhdGFmbG93UnVubmVyLiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmZyb20gYXBhY2hlX2JlYW0uY29kZXJzIGltcG9ydCB0eXBlY29kZXJzCmZyb20gYXBhY2hlX2JlYW0ucGlwZWxpbmUgaW1wb3J0IFBUcmFuc2Zvcm1PdmVycmlkZQoKCmNsYXNzIENyZWF0ZVBUcmFuc2Zvcm1PdmVycmlkZShQVHJhbnNmb3JtT3ZlcnJpZGUpOgogICIiIkEgYGBQVHJhbnNmb3JtT3ZlcnJpZGVgYCBmb3IgYGBDcmVhdGVgYCBpbiBzdHJlYW1pbmcgbW9kZS4iIiIKCiAgZGVmIG1hdGNoZXMoc2VsZiwgYXBwbGllZF9wdHJhbnNmb3JtKToKICAgICMgSW1wb3J0ZWQgaGVyZSB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMuCiAgICAjIHB5bGludDogZGlzYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbgogICAgZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgQ3JlYXRlCiAgICBmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgU3RhbmRhcmRPcHRpb25zCgogICAgaWYgaXNpbnN0YW5jZShhcHBsaWVkX3B0cmFuc2Zvcm0udHJhbnNmb3JtLCBDcmVhdGUpOgogICAgICBzdGFuZGFyZF9vcHRpb25zID0gKGFwcGxpZWRfcHRyYW5zZm9ybQogICAgICAgICAgICAgICAgICAgICAgICAgIC5vdXRwdXRzW05vbmVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGVsaW5lLl9vcHRpb25zCiAgICAgICAgICAgICAgICAgICAgICAgICAgLnZpZXdfYXMoU3RhbmRhcmRPcHRpb25zKSkKICAgICAgcmV0dXJuIHN0YW5kYXJkX29wdGlvbnMuc3RyZWFtaW5nCiAgICBlbHNlOgogICAgICByZXR1cm4gRmFsc2UKCiAgZGVmIGdldF9yZXBsYWNlbWVudF90cmFuc2Zvcm0oc2VsZiwgcHRyYW5zZm9ybSk6CiAgICAjIEltcG9ydGVkIGhlcmUgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLgogICAgIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KICAgIGZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uc3RyZWFtaW5nX2NyZWF0ZSBpbXBvcnQgXAogICAgICBTdHJlYW1pbmdDcmVhdGUKICAgIGNvZGVyID0gdHlwZWNvZGVycy5yZWdpc3RyeS5nZXRfY29kZXIocHRyYW5zZm9ybS5nZXRfb3V0cHV0X3R5cGUoKSkKICAgIHJldHVybiBTdHJlYW1pbmdDcmVhdGUocHRyYW5zZm9ybS52YWx1ZXMsIGNvZGVyKQp9cm6EAAAoWDIAAABDcmVhdGVQVHJhbnNmb3JtT3ZlcnJpZGUuZ2V0X3JlcGxhY2VtZW50X3RyYW5zZm9ybVgDAAAAZGVmSyxLM4dYGAAAAENyZWF0ZVBUcmFuc2Zvcm1PdmVycmlkZVgFAAAAY2xhc3NLGkszh1ggAAAAQ3JlYXRlUFRyYW5zZm9ybU92ZXJyaWRlLm1hdGNoZXNYAwAAAGRlZksdSyuHdX1yb4QAAChYMgAAAENyZWF0ZVBUcmFuc2Zvcm1PdmVycmlkZS5nZXRfcmVwbGFjZW1lbnRfdHJhbnNmb3JtWDEAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LnB0cmFuc2Zvcm1fb3ZlcnJpZGVzcnCEAABYGAAAAENyZWF0ZVBUcmFuc2Zvcm1PdmVycmlkZWpwhAAAWCAAAABDcmVhdGVQVHJhbnNmb3JtT3ZlcnJpZGUubWF0Y2hlc2pwhAAAdWp9aQAAWCwAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lcnJxhAAAhYFycoQAAH1yc4QAAGJ0cnSEAABVF2FwYWNoZV9iZWFtLnRvb2xzLnV0aWxzKFj6EAAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIlV0aWxpdHkgZnVuY3Rpb25zIGZvciBhbGwgbWljcm9iZW5jaG1hcmtzLiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCgppbXBvcnQgY29sbGVjdGlvbnMKaW1wb3J0IGdjCmltcG9ydCBvcwppbXBvcnQgdGltZQoKaW1wb3J0IG51bXB5CgoKZGVmIGNoZWNrX2NvbXBpbGVkKG1vZHVsZSk6CiAgIiIiQ2hlY2sgd2hldGhlciBnaXZlbiBtb2R1bGUgaGFzIGJlZW4gY29tcGlsZWQuCiAgQXJnczoKICAgIG1vZHVsZTogc3RyaW5nLCBtb2R1bGUgbmFtZQogICIiIgogIGNoZWNrX21vZHVsZSA9IF9faW1wb3J0X18obW9kdWxlLCBnbG9iYWxzKCksIGxvY2FscygpLCAtMSkKICBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KGNoZWNrX21vZHVsZS5fX2ZpbGVfXylbLTFdCiAgaWYgZXh0IGluICgnLnB5JywgJy5weWMnKToKICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKICAgICAgICAiUHJvZmlsaW5nIHVuY29tcGlsZWQgY29kZS5cbiIKICAgICAgICAiVG8gY29tcGlsZSBiZWFtLCBydW4gIgogICAgICAgICIncGlwIGluc3RhbGwgQ3l0aG9uOyBweXRob24gc2V0dXAucHkgYnVpbGRfZXh0IC0taW5wbGFjZSciKQoKCmNsYXNzIEJlbmNobWFya0NvbmZpZygKICAgIGNvbGxlY3Rpb25zLm5hbWVkdHVwbGUoCiAgICAgICAgIkJlbmNobWFya0NvbmZpZyIsIFsiYmVuY2htYXJrIiwgInNpemUiLCAibnVtX3J1bnMiXSkpOgogICIiIgogIEF0dHJpYnV0ZXM6CiAgICBiZW5jaG1hcms6IGEgY2FsbGFibGUgdGhhdCB0YWtlcyBhbiBpbnQgYXJndW1lbnQgLSBiZW5jaG1hcmsgc2l6ZSwKICAgICAgYW5kIHJldHVybnMgYSBjYWxsYWJsZS4gQSByZXR1cm5lZCBjYWxsYWJsZSBtdXN0IHJ1biB0aGUgY29kZSBiZWluZwogICAgICBiZW5jaG1hcmtlZCBvbiBhbiBpbnB1dCBvZiBzcGVjaWZpZWQgc2l6ZS4KCiAgICAgIEZvciBleGFtcGxlLCBvbmUgY2FuIGltcGxlbWVudCBhIGJlbmNobWFyayBhczoKCiAgICAgIGNsYXNzIE15QmVuY2htYXJrKG9iamVjdCk6CiAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNpemUpOgogICAgICAgICAgW2RvIG5lY2Vzc2FyeSBpbml0aWFsaXphdGlvbl0KICAgICAgICBkZWYgX19jYWxsX18oc2VsZik6CiAgICAgICAgICBbcnVuIHRoZSBjb2RlIGluIHF1ZXN0aW9uXQoKICAgIHNpemU6IGludCwgYSBzaXplIG9mIHRoZSBpbnB1dC4gQWdncmVnYXRlZCBwZXItZWxlbWVudCBtZXRyaWNzCiAgICAgIGFyZSBjb3VudGVkIGJhc2VkIG9uIHRoZSBzaXplIG9mIHRoZSBpbnB1dC4KICAgIG51bV9ydW5zOiBpbnQsIG51bWJlciBvZiB0aW1lcyB0byBydW4gZWFjaCBiZW5jaG1hcmsuCiAgIiIiCgogIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgcmV0dXJuICIlcywgJXMgZWxlbWVudChzKSIgJSAoCiAgICAgICAgZ2V0YXR0cihzZWxmLmJlbmNobWFyaywgJ19fbmFtZV9fJywgc3RyKHNlbGYuYmVuY2htYXJrKSksCiAgICAgICAgc3RyKHNlbGYuc2l6ZSkpCgoKZGVmIHJ1bl9iZW5jaG1hcmtzKGJlbmNobWFya19zdWl0ZSwgdmVyYm9zZT1UcnVlKToKICAiIiJSdW5zIGJlbmNobWFya3MsIGFuZCBjb2xsZWN0cyBleGVjdXRpb24gdGltZXMuCgogIEEgc2ltcGxlIGluc3RydW1lbnRhdGlvbiB0byBydW4gYSBjYWxsYWJsZSBzZXZlcmFsIHRpbWVzLCBjb2xsZWN0IGFuZCBwcmludAogIGl0cyBleGVjdXRpb24gdGltZXMuCgogIEFyZ3M6CiAgICBiZW5jaG1hcmtfc3VpdGU6IEEgbGlzdCBvZiBCZW5jaG1hcmtDb25maWcuCiAgICB2ZXJib3NlOiBib29sLCB3aGV0aGVyIHRvIHByaW50IGJlbmNobWFyayByZXN1bHRzIHRvIHN0ZG91dC4KCiAgUmV0dXJuczoKICAgIEEgZGljdGlvbmFyeSBvZiB0aGUgZm9ybSBzdHJpbmcgLT4gbGlzdCBvZiBmbG9hdHMuIEtleXMgb2YgdGhlIGRpY3Rpb25hcnkKICAgIGFyZSBiZW5jaG1hcmsgbmFtZXMsIHZhbHVlcyBhcmUgZXhlY3V0aW9uIHRpbWVzIGluIHNlY29uZHMgZm9yIGVhY2ggcnVuLgogICIiIgoKICBkZWYgcnVuKGJlbmNobWFya19mbiwgc2l6ZSk6CiAgICAjIENvbnRhaW4gZWFjaCBydW4gb2YgYSBiZW5jaG1hcmsgaW5zaWRlIGEgZnVuY3Rpb24gc28gdGhhdCBhbnkgdGVtcG9yYXJ5CiAgICAjIG9iamVjdHMgY2FuIGJlIGdhcmJhZ2UtY29sbGVjdGVkIGFmdGVyIHRoZSBydW4uCiAgICBiZW5jaG1hcmtfaW5zdGFuY2VfY2FsbGFibGUgPSBiZW5jaG1hcmtfZm4oc2l6ZSkKICAgIHN0YXJ0ID0gdGltZS50aW1lKCkKICAgIF8gPSBiZW5jaG1hcmtfaW5zdGFuY2VfY2FsbGFibGUoKQogICAgcmV0dXJuIHRpbWUudGltZSgpIC0gc3RhcnQKCiAgY29zdF9zZXJpZXMgPSBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdChsaXN0KQogIGZvciBiZW5jaG1hcmtfY29uZmlnIGluIGJlbmNobWFya19zdWl0ZToKICAgIG5hbWUgPSBzdHIoYmVuY2htYXJrX2NvbmZpZykKICAgIG51bV9ydW5zID0gYmVuY2htYXJrX2NvbmZpZy5udW1fcnVucwogICAgc2l6ZSA9IGJlbmNobWFya19jb25maWcuc2l6ZQogICAgZm9yIHJ1bl9pZCBpbiByYW5nZShudW1fcnVucyk6CiAgICAgICMgRG8gYSBwcm9hY3RpdmUgR0MgYmVmb3JlIGVhY2ggcnVuIHRvIG1pbmltaXplIHNpZGUtZWZmZWN0cyBvZiBkaWZmZXJlbnQKICAgICAgIyBydW5zLgogICAgICBnYy5jb2xsZWN0KCkKICAgICAgdGltZV9jb3N0ID0gcnVuKGJlbmNobWFya19jb25maWcuYmVuY2htYXJrLCBzaXplKQogICAgICBjb3N0X3Nlcmllc1tuYW1lXS5hcHBlbmQodGltZV9jb3N0KQogICAgICBpZiB2ZXJib3NlOgogICAgICAgIHBlcl9lbGVtZW50X2Nvc3QgPSB0aW1lX2Nvc3QgLyBzaXplCiAgICAgICAgcHJpbnQoIiVzOiBydW4gJWQgb2YgJWQsIHBlciBlbGVtZW50IHRpbWUgY29zdDogJWcgc2VjIiAlICgKICAgICAgICAgICAgbmFtZSwgcnVuX2lkICsgMSwgbnVtX3J1bnMsIHBlcl9lbGVtZW50X2Nvc3QpKQogICAgaWYgdmVyYm9zZToKICAgICAgcHJpbnQoIiIpCgogIGlmIHZlcmJvc2U6CiAgICBwYWRfbGVuZ3RoID0gbWF4KFtsZW4oc3RyKGJjKSkgZm9yIGJjIGluIGJlbmNobWFya19zdWl0ZV0pCgogICAgZm9yIGJlbmNobWFya19jb25maWcgaW4gYmVuY2htYXJrX3N1aXRlOgogICAgICBuYW1lID0gc3RyKGJlbmNobWFya19jb25maWcpCiAgICAgIHBlcl9lbGVtZW50X21lZGlhbl9jb3N0ID0gKAogICAgICAgICAgbnVtcHkubWVkaWFuKGNvc3Rfc2VyaWVzW25hbWVdKSAvIGJlbmNobWFya19jb25maWcuc2l6ZSkKICAgICAgc3RkID0gbnVtcHkuc3RkKGNvc3Rfc2VyaWVzW25hbWVdKSAvIGJlbmNobWFya19jb25maWcuc2l6ZQoKICAgICAgcHJpbnQoIiVzOiBwZXIgZWxlbWVudCBtZWRpYW4gdGltZSBjb3N0OiAlZyBzZWMsIHJlbGF0aXZlIHN0ZDogJS4yZiUlIiAlICgKICAgICAgICAgIG5hbWUubGp1c3QocGFkX2xlbmd0aCwgIiAiKSwgcGVyX2VsZW1lbnRfbWVkaWFuX2Nvc3QsCiAgICAgICAgICBzdGQgKiAxMDAgLyBwZXJfZWxlbWVudF9tZWRpYW5fY29zdCkpCgogIHJldHVybiBjb3N0X3Nlcmllcwp9cnWEAAAoWA4AAABjaGVja19jb21waWxlZFgDAAAAZGVmSyBLLIdYFwAAAEJlbmNobWFya0NvbmZpZy5fX3N0cl9fWAMAAABkZWZLREtIh1gOAAAAcnVuX2JlbmNobWFya3NYAwAAAGRlZktKS4GHWA8AAABCZW5jaG1hcmtDb25maWdYBQAAAGNsYXNzSy5LSIdYEgAAAHJ1bl9iZW5jaG1hcmtzLnJ1blgDAAAAZGVmS1lLYId1fXJ2hAAAKFgOAAAAY2hlY2tfY29tcGlsZWRqcWIAAFgOAAAAcnVuX2JlbmNobWFya3NqcWIAAFgPAAAAQmVuY2htYXJrQ29uZmlnanFiAAB1an1pAABYFwAAAGFwYWNoZV9iZWFtLnRvb2xzLnV0aWxzcneEAACFgXJ4hAAAfXJ5hAAAYnRVLmFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnRyYW5zZm9ybV9ldmFsdWF0b3IoWHuWAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkFuIGV2YWx1YXRvciBvZiBhIHNwZWNpZmljIGFwcGxpY2F0aW9uIG9mIGEgdHJhbnNmb3JtLiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBjb2xsZWN0aW9ucwppbXBvcnQgbG9nZ2luZwppbXBvcnQgcmFuZG9tCmltcG9ydCB0aW1lCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdAoKZnJvbSBmdXR1cmUudXRpbHMgaW1wb3J0IGl0ZXJpdGVtcwoKaW1wb3J0IGFwYWNoZV9iZWFtLmlvIGFzIGlvCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IGNvZGVycwpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBwdmFsdWUKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgdHlwZWhpbnRzCmZyb20gYXBhY2hlX2JlYW0uaW50ZXJuYWwgaW1wb3J0IHBpY2tsZXIKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzIGltcG9ydCBjb21tb24KZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmNvbW1vbiBpbXBvcnQgRG9GblJ1bm5lcgpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuY29tbW9uIGltcG9ydCBEb0ZuU3RhdGUKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UgaW1wb3J0IF9OYXRpdmVXcml0ZSAgIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2Vzcwpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9ydW5uZXIgaW1wb3J0IF9EaXJlY3RSZWFkRnJvbVB1YlN1Ygpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9ydW5uZXIgaW1wb3J0IF9TdHJlYW1pbmdHcm91cEFsc29CeVdpbmRvdwpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9ydW5uZXIgaW1wb3J0IF9TdHJlYW1pbmdHcm91cEJ5S2V5T25seQpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF91c2Vyc3RhdGUgaW1wb3J0IERpcmVjdFVzZXJTdGF0ZUNvbnRleHQKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lciBpbXBvcnQgUHJvY2Vzc0VsZW1lbnRzCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIgaW1wb3J0IFByb2Nlc3NGbgpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyIGltcG9ydCBTREZQcm9jZXNzRWxlbWVudEludm9rZXIKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC51dGlsIGltcG9ydCBLZXllZFdvcmtJdGVtCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudXRpbCBpbXBvcnQgVHJhbnNmb3JtUmVzdWx0CmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Qud2F0ZXJtYXJrX21hbmFnZXIgaW1wb3J0IFdhdGVybWFya01hbmFnZXIKZnJvbSBhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtIGltcG9ydCBFbGVtZW50RXZlbnQKZnJvbSBhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtIGltcG9ydCBQcm9jZXNzaW5nVGltZUV2ZW50CmZyb20gYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbSBpbXBvcnQgVGVzdFN0cmVhbQpmcm9tIGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9zdHJlYW0gaW1wb3J0IFdhdGVybWFya0V2ZW50CmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgY29yZQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlciBpbXBvcnQgVGltZURvbWFpbgpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlciBpbXBvcnQgX0NvbWJpbmluZ1ZhbHVlU3RhdGVUYWcKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIgaW1wb3J0IF9MaXN0U3RhdGVUYWcKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIgaW1wb3J0IGNyZWF0ZV90cmlnZ2VyX2RyaXZlcgpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlIGltcG9ydCBnZXRfZG9mbl9zcGVjcwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlIGltcG9ydCBpc19zdGF0ZWZ1bF9kb2ZuCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cgaW1wb3J0IEdsb2JhbFdpbmRvd3MKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdyBpbXBvcnQgV2luZG93ZWRWYWx1ZQpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2sgaW1wb3J0IFR5cGVDaGVja0Vycm9yCmZyb20gYXBhY2hlX2JlYW0udXRpbHMgaW1wb3J0IGNvdW50ZXJzCmZyb20gYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wIGltcG9ydCBNSU5fVElNRVNUQU1QCmZyb20gYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wIGltcG9ydCBUaW1lc3RhbXAKCgpjbGFzcyBUcmFuc2Zvcm1FdmFsdWF0b3JSZWdpc3RyeShvYmplY3QpOgogICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgQ3JlYXRlcyBpbnN0YW5jZXMgb2YgVHJhbnNmb3JtRXZhbHVhdG9yIGZvciB0aGUgYXBwbGljYXRpb24gb2YgYSB0cmFuc2Zvcm0uCiAgIiIiCgogIF90ZXN0X2V2YWx1YXRvcnNfb3ZlcnJpZGVzID0ge30KCiAgZGVmIF9faW5pdF9fKHNlbGYsIGV2YWx1YXRpb25fY29udGV4dCk6CiAgICBhc3NlcnQgZXZhbHVhdGlvbl9jb250ZXh0CiAgICBzZWxmLl9ldmFsdWF0aW9uX2NvbnRleHQgPSBldmFsdWF0aW9uX2NvbnRleHQKICAgIHNlbGYuX2V2YWx1YXRvcnMgPSB7CiAgICAgICAgaW8uUmVhZDogX0JvdW5kZWRSZWFkRXZhbHVhdG9yLAogICAgICAgIF9EaXJlY3RSZWFkRnJvbVB1YlN1YjogX1B1YlN1YlJlYWRFdmFsdWF0b3IsCiAgICAgICAgY29yZS5GbGF0dGVuOiBfRmxhdHRlbkV2YWx1YXRvciwKICAgICAgICBjb3JlLlBhckRvOiBfUGFyRG9FdmFsdWF0b3IsCiAgICAgICAgY29yZS5fR3JvdXBCeUtleU9ubHk6IF9Hcm91cEJ5S2V5T25seUV2YWx1YXRvciwKICAgICAgICBfU3RyZWFtaW5nR3JvdXBCeUtleU9ubHk6IF9TdHJlYW1pbmdHcm91cEJ5S2V5T25seUV2YWx1YXRvciwKICAgICAgICBfU3RyZWFtaW5nR3JvdXBBbHNvQnlXaW5kb3c6IF9TdHJlYW1pbmdHcm91cEFsc29CeVdpbmRvd0V2YWx1YXRvciwKICAgICAgICBfTmF0aXZlV3JpdGU6IF9OYXRpdmVXcml0ZUV2YWx1YXRvciwKICAgICAgICBUZXN0U3RyZWFtOiBfVGVzdFN0cmVhbUV2YWx1YXRvciwKICAgICAgICBQcm9jZXNzRWxlbWVudHM6IF9Qcm9jZXNzRWxlbWVudHNFdmFsdWF0b3IKICAgIH0KICAgIHNlbGYuX2V2YWx1YXRvcnMudXBkYXRlKHNlbGYuX3Rlc3RfZXZhbHVhdG9yc19vdmVycmlkZXMpCiAgICBzZWxmLl9yb290X2J1bmRsZV9wcm92aWRlcnMgPSB7CiAgICAgICAgY29yZS5QVHJhbnNmb3JtOiBEZWZhdWx0Um9vdEJ1bmRsZVByb3ZpZGVyLAogICAgICAgIFRlc3RTdHJlYW06IF9UZXN0U3RyZWFtUm9vdEJ1bmRsZVByb3ZpZGVyLAogICAgfQoKICBkZWYgZ2V0X2V2YWx1YXRvcigKICAgICAgc2VsZiwgYXBwbGllZF9wdHJhbnNmb3JtLCBpbnB1dF9jb21taXR0ZWRfYnVuZGxlLAogICAgICBzaWRlX2lucHV0cyk6CiAgICAiIiJSZXR1cm5zIGEgVHJhbnNmb3JtRXZhbHVhdG9yIHN1aXRhYmxlIGZvciBwcm9jZXNzaW5nIGdpdmVuIGlucHV0cy4iIiIKICAgIGFzc2VydCBhcHBsaWVkX3B0cmFuc2Zvcm0KICAgIGFzc2VydCBib29sKGFwcGxpZWRfcHRyYW5zZm9ybS5zaWRlX2lucHV0cykgPT0gYm9vbChzaWRlX2lucHV0cykKCiAgICAjIFdhbGsgdXAgdGhlIGNsYXNzIGhpZXJhcmNoeSB0byBmaW5kIGFuIGV2YWx1YWJsZSB0eXBlLiBUaGlzIGlzIG5lY2Vzc2FyeQogICAgIyBmb3Igc3VwcG9ydGluZyBzdWItY2xhc3NlcyBvZiBjb3JlIHRyYW5zZm9ybXMuCiAgICBmb3IgY2xzIGluIGFwcGxpZWRfcHRyYW5zZm9ybS50cmFuc2Zvcm0uX19jbGFzc19fLm1ybygpOgogICAgICBldmFsdWF0b3IgPSBzZWxmLl9ldmFsdWF0b3JzLmdldChjbHMpCiAgICAgIGlmIGV2YWx1YXRvcjoKICAgICAgICBicmVhawoKICAgIGlmIG5vdCBldmFsdWF0b3I6CiAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoCiAgICAgICAgICAnRXhlY3V0aW9uIG9mIFslc10gbm90IGltcGxlbWVudGVkIGluIHJ1bm5lciAlcy4nICUgKAogICAgICAgICAgICAgIHR5cGUoYXBwbGllZF9wdHJhbnNmb3JtLnRyYW5zZm9ybSksIHNlbGYpKQogICAgcmV0dXJuIGV2YWx1YXRvcihzZWxmLl9ldmFsdWF0aW9uX2NvbnRleHQsIGFwcGxpZWRfcHRyYW5zZm9ybSwKICAgICAgICAgICAgICAgICAgICAgaW5wdXRfY29tbWl0dGVkX2J1bmRsZSwgc2lkZV9pbnB1dHMpCgogIGRlZiBnZXRfcm9vdF9idW5kbGVfcHJvdmlkZXIoc2VsZiwgYXBwbGllZF9wdHJhbnNmb3JtKToKICAgIHByb3ZpZGVyX2NscyA9IE5vbmUKICAgIGZvciBjbHMgaW4gYXBwbGllZF9wdHJhbnNmb3JtLnRyYW5zZm9ybS5fX2NsYXNzX18ubXJvKCk6CiAgICAgIHByb3ZpZGVyX2NscyA9IHNlbGYuX3Jvb3RfYnVuZGxlX3Byb3ZpZGVycy5nZXQoY2xzKQogICAgICBpZiBwcm92aWRlcl9jbHM6CiAgICAgICAgYnJlYWsKICAgIGlmIG5vdCBwcm92aWRlcl9jbHM6CiAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoCiAgICAgICAgICAnUm9vdCBwcm92aWRlciBmb3IgWyVzXSBub3QgaW1wbGVtZW50ZWQgaW4gcnVubmVyICVzJyAlICgKICAgICAgICAgICAgICB0eXBlKGFwcGxpZWRfcHRyYW5zZm9ybS50cmFuc2Zvcm0pLCBzZWxmKSkKICAgIHJldHVybiBwcm92aWRlcl9jbHMoc2VsZi5fZXZhbHVhdGlvbl9jb250ZXh0LCBhcHBsaWVkX3B0cmFuc2Zvcm0pCgogIGRlZiBzaG91bGRfZXhlY3V0ZV9zZXJpYWxseShzZWxmLCBhcHBsaWVkX3B0cmFuc2Zvcm0pOgogICAgIiIiUmV0dXJucyBUcnVlIGlmIHRoaXMgYXBwbGllZF9wdHJhbnNmb3JtIHNob3VsZCBydW4gb25lIGJ1bmRsZSBhdCBhIHRpbWUuCgogICAgU29tZSBUcmFuc2Zvcm1FdmFsdWF0b3JzIHVzZSBhIGdsb2JhbCBzdGF0ZSBvYmplY3QgdG8ga2VlcCB0cmFjayBvZiB0aGVpcgogICAgZ2xvYmFsIGV4ZWN1dGlvbiBzdGF0ZS4gRm9yIGV4YW1wbGUgZXZhbHVhdG9yIGZvciBfR3JvdXBCeUtleU9ubHkgdXNlcyB0aGlzCiAgICBzdGF0ZSBhcyBhbiBpbiBtZW1vcnkgZGljdGlvbmFyeSB0byBidWZmZXIga2V5cy4KCiAgICBTZXJpYWxseSBleGVjdXRlZCBldmFsdWF0b3JzIHdpbGwgYWN0IGFzIHN5bmNpbmcgcG9pbnQgaW4gdGhlIGdyYXBoIGFuZAogICAgZXhlY3V0aW9uIHdpbGwgbm90IG1vdmUgZm9yd2FyZCB1bnRpbCB0aGV5IHJlY2VpdmUgYWxsIG9mIHRoZWlyIGlucHV0cy4gT25jZQogICAgdGhleSByZWNlaXZlIGFsbCBvZiB0aGVpciBpbnB1dCwgdGhleSB3aWxsIHJlbGVhc2UgdGhlIGNvbWJpbmVkIG91dHB1dC4KICAgIFRoZWlyIG91dHB1dCBtYXkgY29uc2lzdCBvZiBtdWx0aXBsZSBidW5kbGVzIGFzIHRoZXkgbWF5IGRpdmlkZSB0aGVpciBvdXRwdXQKICAgIGludG8gcGllY2VzIGJlZm9yZSByZWxlYXNpbmcuCgogICAgQXJnczoKICAgICAgYXBwbGllZF9wdHJhbnNmb3JtOiBUcmFuc2Zvcm0gdG8gYmUgdXNlZCBmb3IgZXhlY3V0aW9uLgoKICAgIFJldHVybnM6CiAgICAgIFRydWUgaWYgZXhlY3V0b3Igc2hvdWxkIGV4ZWN1dGUgYXBwbGllZF9wdHJhbnNmb3JtIHNlcmlhbGx5LgogICAgIiIiCiAgICBpZiBpc2luc3RhbmNlKGFwcGxpZWRfcHRyYW5zZm9ybS50cmFuc2Zvcm0sCiAgICAgICAgICAgICAgICAgIChjb3JlLl9Hcm91cEJ5S2V5T25seSwKICAgICAgICAgICAgICAgICAgIF9TdHJlYW1pbmdHcm91cEJ5S2V5T25seSwKICAgICAgICAgICAgICAgICAgIF9TdHJlYW1pbmdHcm91cEFsc29CeVdpbmRvdywKICAgICAgICAgICAgICAgICAgIF9OYXRpdmVXcml0ZSkpOgogICAgICByZXR1cm4gVHJ1ZQogICAgZWxpZiAoaXNpbnN0YW5jZShhcHBsaWVkX3B0cmFuc2Zvcm0udHJhbnNmb3JtLCBjb3JlLlBhckRvKSBhbmQKICAgICAgICAgIGlzX3N0YXRlZnVsX2RvZm4oYXBwbGllZF9wdHJhbnNmb3JtLnRyYW5zZm9ybS5kb2ZuKSk6CiAgICAgIHJldHVybiBUcnVlCiAgICByZXR1cm4gRmFsc2UKCgpjbGFzcyBSb290QnVuZGxlUHJvdmlkZXIob2JqZWN0KToKICAiIiJQcm92aWRlcyBidW5kbGVzIGZvciB0aGUgaW5pdGlhbCBleGVjdXRpb24gb2YgYSByb290IHRyYW5zZm9ybS4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGV2YWx1YXRpb25fY29udGV4dCwgYXBwbGllZF9wdHJhbnNmb3JtKToKICAgIHNlbGYuX2V2YWx1YXRpb25fY29udGV4dCA9IGV2YWx1YXRpb25fY29udGV4dAogICAgc2VsZi5fYXBwbGllZF9wdHJhbnNmb3JtID0gYXBwbGllZF9wdHJhbnNmb3JtCgogIGRlZiBnZXRfcm9vdF9idW5kbGVzKHNlbGYpOgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKCmNsYXNzIERlZmF1bHRSb290QnVuZGxlUHJvdmlkZXIoUm9vdEJ1bmRsZVByb3ZpZGVyKToKICAiIiJQcm92aWRlcyBhbiBlbXB0eSBidW5kbGUgYnkgZGVmYXVsdCBmb3Igcm9vdCB0cmFuc2Zvcm1zLiIiIgoKICBkZWYgZ2V0X3Jvb3RfYnVuZGxlcyhzZWxmKToKICAgIGlucHV0X25vZGUgPSBwdmFsdWUuUEJlZ2luKHNlbGYuX2FwcGxpZWRfcHRyYW5zZm9ybS50cmFuc2Zvcm0ucGlwZWxpbmUpCiAgICBlbXB0eV9idW5kbGUgPSAoCiAgICAgICAgc2VsZi5fZXZhbHVhdGlvbl9jb250ZXh0LmNyZWF0ZV9lbXB0eV9jb21taXR0ZWRfYnVuZGxlKGlucHV0X25vZGUpKQogICAgcmV0dXJuIFtlbXB0eV9idW5kbGVdCgoKY2xhc3MgX1Rlc3RTdHJlYW1Sb290QnVuZGxlUHJvdmlkZXIoUm9vdEJ1bmRsZVByb3ZpZGVyKToKICAiIiJQcm92aWRlcyBhbiBpbml0aWFsIGJ1bmRsZSBmb3IgdGhlIFRlc3RTdHJlYW0gZXZhbHVhdG9yLiIiIgoKICBkZWYgZ2V0X3Jvb3RfYnVuZGxlcyhzZWxmKToKICAgIHRlc3Rfc3RyZWFtID0gc2VsZi5fYXBwbGllZF9wdHJhbnNmb3JtLnRyYW5zZm9ybQogICAgYnVuZGxlcyA9IFtdCiAgICBpZiBsZW4odGVzdF9zdHJlYW0uZXZlbnRzKSA+IDA6CiAgICAgIGJ1bmRsZSA9IHNlbGYuX2V2YWx1YXRpb25fY29udGV4dC5jcmVhdGVfYnVuZGxlKAogICAgICAgICAgcHZhbHVlLlBCZWdpbihzZWxmLl9hcHBsaWVkX3B0cmFuc2Zvcm0udHJhbnNmb3JtLnBpcGVsaW5lKSkKICAgICAgIyBFeHBsaWNpdGx5IHNldCB0aW1lc3RhbXAgdG8gTUlOX1RJTUVTVEFNUCB0byBlbnN1cmUgdGhhdCB3ZSBob2xkIHRoZQogICAgICAjIHdhdGVybWFyay4KICAgICAgYnVuZGxlLmFkZChHbG9iYWxXaW5kb3dzLndpbmRvd2VkX3ZhbHVlKDAsIHRpbWVzdGFtcD1NSU5fVElNRVNUQU1QKSkKICAgICAgYnVuZGxlLmNvbW1pdChOb25lKQogICAgICBidW5kbGVzLmFwcGVuZChidW5kbGUpCiAgICByZXR1cm4gYnVuZGxlcwoKCmNsYXNzIF9UcmFuc2Zvcm1FdmFsdWF0b3Iob2JqZWN0KToKICAiIiJBbiBldmFsdWF0b3Igb2YgYSBzcGVjaWZpYyBhcHBsaWNhdGlvbiBvZiBhIHRyYW5zZm9ybS4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGV2YWx1YXRpb25fY29udGV4dCwgYXBwbGllZF9wdHJhbnNmb3JtLAogICAgICAgICAgICAgICBpbnB1dF9jb21taXR0ZWRfYnVuZGxlLCBzaWRlX2lucHV0cyk6CiAgICBzZWxmLl9ldmFsdWF0aW9uX2NvbnRleHQgPSBldmFsdWF0aW9uX2NvbnRleHQKICAgIHNlbGYuX2FwcGxpZWRfcHRyYW5zZm9ybSA9IGFwcGxpZWRfcHRyYW5zZm9ybQogICAgc2VsZi5faW5wdXRfY29tbWl0dGVkX2J1bmRsZSA9IGlucHV0X2NvbW1pdHRlZF9idW5kbGUKICAgIHNlbGYuX3NpZGVfaW5wdXRzID0gc2lkZV9pbnB1dHMKICAgIHNlbGYuX2V4cGFuZF9vdXRwdXRzKCkKICAgIHNlbGYuX2V4ZWN1dGlvbl9jb250ZXh0ID0gZXZhbHVhdGlvbl9jb250ZXh0LmdldF9leGVjdXRpb25fY29udGV4dCgKICAgICAgICBhcHBsaWVkX3B0cmFuc2Zvcm0pCiAgICBzZWxmLl9zdGVwX2NvbnRleHQgPSBzZWxmLl9leGVjdXRpb25fY29udGV4dC5nZXRfc3RlcF9jb250ZXh0KCkKCiAgZGVmIF9leHBhbmRfb3V0cHV0cyhzZWxmKToKICAgIG91dHB1dHMgPSBzZXQoKQogICAgZm9yIHB2YWwgaW4gc2VsZi5fYXBwbGllZF9wdHJhbnNmb3JtLm91dHB1dHMudmFsdWVzKCk6CiAgICAgIGlmIGlzaW5zdGFuY2UocHZhbCwgcHZhbHVlLkRvT3V0cHV0c1R1cGxlKToKICAgICAgICBwdmFscyA9ICh2IGZvciB2IGluIHB2YWwpCiAgICAgIGVsc2U6CiAgICAgICAgcHZhbHMgPSAocHZhbCwpCiAgICAgIGZvciB2IGluIHB2YWxzOgogICAgICAgIG91dHB1dHMuYWRkKHYpCiAgICBzZWxmLl9vdXRwdXRzID0gZnJvemVuc2V0KG91dHB1dHMpCgogIGRlZiBfc3BsaXRfbGlzdF9pbnRvX2J1bmRsZXMoCiAgICAgIHNlbGYsIG91dHB1dF9wY29sbGVjdGlvbiwgZWxlbWVudHMsIG1heF9lbGVtZW50X3Blcl9idW5kbGUsCiAgICAgIGVsZW1lbnRfc2l6ZV9mbik6CiAgICAiIiJTcGxpdHMgZWxlbWVudHMsIGFuIGl0ZXJhYmxlLCBpbnRvIG11bHRpcGxlIG91dHB1dCBidW5kbGVzLgoKICAgIEFyZ3M6CiAgICAgIG91dHB1dF9wY29sbGVjdGlvbjogUENvbGxlY3Rpb24gdGhhdCB0aGUgZWxlbWVudHMgYmVsb25nIHRvLgogICAgICBlbGVtZW50czogZWxlbWVudHMgdG8gYmUgY2h1bmtlZCBpbnRvIGJ1bmRsZXMuCiAgICAgIG1heF9lbGVtZW50X3Blcl9idW5kbGU6IChhcHByb3hpbWF0ZWx5KSB0aGUgbWF4aW11bSBlbGVtZW50IHBlciBidW5kbGUuCiAgICAgICAgSWYgaXQgaXMgTm9uZSwgb25seSBhIHNpbmdsZSBidW5kbGUgd2lsbCBiZSBwcm9kdWNlZC4KICAgICAgZWxlbWVudF9zaXplX2ZuOiBGdW5jdGlvbiB0byByZXR1cm4gdGhlIHNpemUgb2YgYSBnaXZlbiBlbGVtZW50LgoKICAgIFJldHVybnM6CiAgICAgIExpc3Qgb2Ygb3V0cHV0IHVuY29tbWl0dGVkIGJ1bmRsZXMgd2l0aCBhdCBsZWFzdCBvbmUgYnVuZGxlLgogICAgIiIiCiAgICBidW5kbGUgPSBzZWxmLl9ldmFsdWF0aW9uX2NvbnRleHQuY3JlYXRlX2J1bmRsZShvdXRwdXRfcGNvbGxlY3Rpb24pCiAgICBidW5kbGVfc2l6ZSA9IDAKICAgIGJ1bmRsZXMgPSBbYnVuZGxlXQogICAgZm9yIGVsZW1lbnQgaW4gZWxlbWVudHM6CiAgICAgIGlmIG1heF9lbGVtZW50X3Blcl9idW5kbGUgYW5kIGJ1bmRsZV9zaXplID49IG1heF9lbGVtZW50X3Blcl9idW5kbGU6CiAgICAgICAgYnVuZGxlID0gc2VsZi5fZXZhbHVhdGlvbl9jb250ZXh0LmNyZWF0ZV9idW5kbGUob3V0cHV0X3Bjb2xsZWN0aW9uKQogICAgICAgIGJ1bmRsZV9zaXplID0gMAogICAgICAgIGJ1bmRsZXMuYXBwZW5kKGJ1bmRsZSkKCiAgICAgIGJ1bmRsZS5vdXRwdXQoZWxlbWVudCkKICAgICAgYnVuZGxlX3NpemUgKz0gZWxlbWVudF9zaXplX2ZuKGVsZW1lbnQpCiAgICByZXR1cm4gYnVuZGxlcwoKICBkZWYgc3RhcnRfYnVuZGxlKHNlbGYpOgogICAgIiIiU3RhcnRzIGEgbmV3IGJ1bmRsZS4iIiIKICAgIHBhc3MKCiAgZGVmIHByb2Nlc3NfdGltZXJfd3JhcHBlcihzZWxmLCB0aW1lcl9maXJpbmcpOgogICAgIiIiUHJvY2VzcyB0aW1lciBieSBjbGVhcmluZyBhbmQgdGhlbiBjYWxsaW5nIHByb2Nlc3NfdGltZXIoKS4KCiAgICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2l0aCBhbnkgdGltZXIgZmlyaW5nIGFuZCBjbGVhcnMgdGhlIGRlbGl2ZXJlZAogICAgdGltZXIgZnJvbSB0aGUga2V5ZWQgc3RhdGUgYW5kIHRoZW4gY2FsbHMgcHJvY2Vzc190aW1lcigpLiAgVGhlIGRlZmF1bHQKICAgIHByb2Nlc3NfdGltZXIoKSBpbXBsZW1lbnRhdGlvbiBlbWl0cyBhIEtleWVkV29ya0l0ZW0gZm9yIHRoZSBwYXJ0aWN1bGFyCiAgICB0aW1lciBhbmQgcGFzc2VzIGl0IHRvIHByb2Nlc3NfZWxlbWVudCgpLiAgRXZhbHVhdG9yIHN1YmNsYXNzZXMgd2hpY2gKICAgIGRlc2lyZSBkaWZmZXJlbnQgdGltZXIgZGVsaXZlcnkgc2VtYW50aWNzIGNhbiBvdmVycmlkZSBwcm9jZXNzX3RpbWVyKCkuCiAgICAiIiIKICAgIHN0YXRlID0gc2VsZi5fc3RlcF9jb250ZXh0LmdldF9rZXllZF9zdGF0ZSh0aW1lcl9maXJpbmcuZW5jb2RlZF9rZXkpCiAgICBzdGF0ZS5jbGVhcl90aW1lcigKICAgICAgICB0aW1lcl9maXJpbmcud2luZG93LCB0aW1lcl9maXJpbmcubmFtZSwgdGltZXJfZmlyaW5nLnRpbWVfZG9tYWluKQogICAgc2VsZi5wcm9jZXNzX3RpbWVyKHRpbWVyX2ZpcmluZykKCiAgZGVmIHByb2Nlc3NfdGltZXIoc2VsZiwgdGltZXJfZmlyaW5nKToKICAgICIiIkRlZmF1bHQgcHJvY2Vzc190aW1lcigpIGltcGwuIGdlbmVyYXRpbmcgS2V5ZWRXb3JrSXRlbSBlbGVtZW50LiIiIgogICAgc2VsZi5wcm9jZXNzX2VsZW1lbnQoCiAgICAgICAgR2xvYmFsV2luZG93cy53aW5kb3dlZF92YWx1ZSgKICAgICAgICAgICAgS2V5ZWRXb3JrSXRlbSh0aW1lcl9maXJpbmcuZW5jb2RlZF9rZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfZmlyaW5ncz1bdGltZXJfZmlyaW5nXSkpKQoKICBkZWYgcHJvY2Vzc19lbGVtZW50KHNlbGYsIGVsZW1lbnQpOgogICAgIiIiUHJvY2Vzc2VzIGEgbmV3IGVsZW1lbnQgYXMgcGFydCBvZiB0aGUgY3VycmVudCBidW5kbGUuIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCclcyBkbyBub3QgcHJvY2VzcyBlbGVtZW50cy4nICUgdHlwZShzZWxmKSkKCiAgZGVmIGZpbmlzaF9idW5kbGUoc2VsZik6CiAgICAiIiJGaW5pc2hlcyB0aGUgYnVuZGxlIGFuZCBwcm9kdWNlcyBvdXRwdXQuIiIiCiAgICBwYXNzCgoKY2xhc3MgX0JvdW5kZWRSZWFkRXZhbHVhdG9yKF9UcmFuc2Zvcm1FdmFsdWF0b3IpOgogICIiIlRyYW5zZm9ybUV2YWx1YXRvciBmb3IgYm91bmRlZCBSZWFkIHRyYW5zZm9ybS4iIiIKCiAgIyBBZnRlciBzb21lIGJlbmNobWFya3MsIDEwMDAgd2FzIG9wdGltYWwgYW1vbmcgezEwMCwxMDAwLDEwMDAwfQogIE1BWF9FTEVNRU5UX1BFUl9CVU5ETEUgPSAxMDAwCgogIGRlZiBfX2luaXRfXyhzZWxmLCBldmFsdWF0aW9uX2NvbnRleHQsIGFwcGxpZWRfcHRyYW5zZm9ybSwKICAgICAgICAgICAgICAgaW5wdXRfY29tbWl0dGVkX2J1bmRsZSwgc2lkZV9pbnB1dHMpOgogICAgYXNzZXJ0IG5vdCBzaWRlX2lucHV0cwogICAgc2VsZi5fc291cmNlID0gYXBwbGllZF9wdHJhbnNmb3JtLnRyYW5zZm9ybS5zb3VyY2UKICAgIHNlbGYuX3NvdXJjZS5waXBlbGluZV9vcHRpb25zID0gZXZhbHVhdGlvbl9jb250ZXh0LnBpcGVsaW5lX29wdGlvbnMKICAgIHN1cGVyKF9Cb3VuZGVkUmVhZEV2YWx1YXRvciwgc2VsZikuX19pbml0X18oCiAgICAgICAgZXZhbHVhdGlvbl9jb250ZXh0LCBhcHBsaWVkX3B0cmFuc2Zvcm0sIGlucHV0X2NvbW1pdHRlZF9idW5kbGUsCiAgICAgICAgc2lkZV9pbnB1dHMpCgogIGRlZiBmaW5pc2hfYnVuZGxlKHNlbGYpOgogICAgYXNzZXJ0IGxlbihzZWxmLl9vdXRwdXRzKSA9PSAxCiAgICBvdXRwdXRfcGNvbGxlY3Rpb24gPSBsaXN0KHNlbGYuX291dHB1dHMpWzBdCgogICAgZGVmIF9yZWFkX3ZhbHVlc190b19idW5kbGVzKHJlYWRlcik6CiAgICAgIHJlYWRfcmVzdWx0ID0gW0dsb2JhbFdpbmRvd3Mud2luZG93ZWRfdmFsdWUoZSkgZm9yIGUgaW4gcmVhZGVyXQogICAgICByZXR1cm4gc2VsZi5fc3BsaXRfbGlzdF9pbnRvX2J1bmRsZXMoCiAgICAgICAgICBvdXRwdXRfcGNvbGxlY3Rpb24sIHJlYWRfcmVzdWx0LAogICAgICAgICAgX0JvdW5kZWRSZWFkRXZhbHVhdG9yLk1BWF9FTEVNRU5UX1BFUl9CVU5ETEUsIGxhbWJkYSBfOiAxKQoKICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5fc291cmNlLCBpby5pb2Jhc2UuQm91bmRlZFNvdXJjZSk6CiAgICAgICMgR2V0dGluZyBhIFJhbmdlVHJhY2tlciBmb3IgdGhlIGRlZmF1bHQgcmFuZ2Ugb2YgdGhlIHNvdXJjZSBhbmQgcmVhZGluZwogICAgICAjIHRoZSBmdWxsIHNvdXJjZSB1c2luZyB0aGF0LgogICAgICByYW5nZV90cmFja2VyID0gc2VsZi5fc291cmNlLmdldF9yYW5nZV90cmFja2VyKE5vbmUsIE5vbmUpCiAgICAgIHJlYWRlciA9IHNlbGYuX3NvdXJjZS5yZWFkKHJhbmdlX3RyYWNrZXIpCiAgICAgIGJ1bmRsZXMgPSBfcmVhZF92YWx1ZXNfdG9fYnVuZGxlcyhyZWFkZXIpCiAgICBlbHNlOgogICAgICB3aXRoIHNlbGYuX3NvdXJjZS5yZWFkZXIoKSBhcyByZWFkZXI6CiAgICAgICAgYnVuZGxlcyA9IF9yZWFkX3ZhbHVlc190b19idW5kbGVzKHJlYWRlcikKCiAgICByZXR1cm4gVHJhbnNmb3JtUmVzdWx0KHNlbGYsIGJ1bmRsZXMsIFtdLCBOb25lLCBOb25lKQoKCmNsYXNzIF9UZXN0U3RyZWFtRXZhbHVhdG9yKF9UcmFuc2Zvcm1FdmFsdWF0b3IpOgogICIiIlRyYW5zZm9ybUV2YWx1YXRvciBmb3IgdGhlIFRlc3RTdHJlYW0gdHJhbnNmb3JtLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgZXZhbHVhdGlvbl9jb250ZXh0LCBhcHBsaWVkX3B0cmFuc2Zvcm0sCiAgICAgICAgICAgICAgIGlucHV0X2NvbW1pdHRlZF9idW5kbGUsIHNpZGVfaW5wdXRzKToKICAgIGFzc2VydCBub3Qgc2lkZV9pbnB1dHMKICAgIHNlbGYudGVzdF9zdHJlYW0gPSBhcHBsaWVkX3B0cmFuc2Zvcm0udHJhbnNmb3JtCiAgICBzdXBlcihfVGVzdFN0cmVhbUV2YWx1YXRvciwgc2VsZikuX19pbml0X18oCiAgICAgICAgZXZhbHVhdGlvbl9jb250ZXh0LCBhcHBsaWVkX3B0cmFuc2Zvcm0sIGlucHV0X2NvbW1pdHRlZF9idW5kbGUsCiAgICAgICAgc2lkZV9pbnB1dHMpCgogIGRlZiBzdGFydF9idW5kbGUoc2VsZik6CiAgICBzZWxmLmN1cnJlbnRfaW5kZXggPSAtMQogICAgc2VsZi53YXRlcm1hcmsgPSBNSU5fVElNRVNUQU1QCiAgICBzZWxmLmJ1bmRsZXMgPSBbXQoKICBkZWYgcHJvY2Vzc19lbGVtZW50KHNlbGYsIGVsZW1lbnQpOgogICAgaW5kZXggPSBlbGVtZW50LnZhbHVlCiAgICBzZWxmLndhdGVybWFyayA9IGVsZW1lbnQudGltZXN0YW1wCiAgICBhc3NlcnQgaXNpbnN0YW5jZShpbmRleCwgaW50KQogICAgYXNzZXJ0IDAgPD0gaW5kZXggPD0gbGVuKHNlbGYudGVzdF9zdHJlYW0uZXZlbnRzKQogICAgc2VsZi5jdXJyZW50X2luZGV4ID0gaW5kZXgKICAgIGV2ZW50ID0gc2VsZi50ZXN0X3N0cmVhbS5ldmVudHNbc2VsZi5jdXJyZW50X2luZGV4XQogICAgaWYgaXNpbnN0YW5jZShldmVudCwgRWxlbWVudEV2ZW50KToKICAgICAgYXNzZXJ0IGxlbihzZWxmLl9vdXRwdXRzKSA9PSAxCiAgICAgIG91dHB1dF9wY29sbGVjdGlvbiA9IGxpc3Qoc2VsZi5fb3V0cHV0cylbMF0KICAgICAgYnVuZGxlID0gc2VsZi5fZXZhbHVhdGlvbl9jb250ZXh0LmNyZWF0ZV9idW5kbGUob3V0cHV0X3Bjb2xsZWN0aW9uKQogICAgICBmb3IgdHYgaW4gZXZlbnQudGltZXN0YW1wZWRfdmFsdWVzOgogICAgICAgIGJ1bmRsZS5vdXRwdXQoCiAgICAgICAgICAgIEdsb2JhbFdpbmRvd3Mud2luZG93ZWRfdmFsdWUodHYudmFsdWUsIHRpbWVzdGFtcD10di50aW1lc3RhbXApKQogICAgICBzZWxmLmJ1bmRsZXMuYXBwZW5kKGJ1bmRsZSkKICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgV2F0ZXJtYXJrRXZlbnQpOgogICAgICBhc3NlcnQgZXZlbnQubmV3X3dhdGVybWFyayA+PSBzZWxmLndhdGVybWFyawogICAgICBzZWxmLndhdGVybWFyayA9IGV2ZW50Lm5ld193YXRlcm1hcmsKICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgUHJvY2Vzc2luZ1RpbWVFdmVudCk6CiAgICAgIHNlbGYuX2V2YWx1YXRpb25fY29udGV4dC5fd2F0ZXJtYXJrX21hbmFnZXIuX2Nsb2NrLmFkdmFuY2VfdGltZSgKICAgICAgICAgIGV2ZW50LmFkdmFuY2VfYnkpCiAgICBlbHNlOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIFRlc3RTdHJlYW0gZXZlbnQ6ICVzLicgJSBldmVudCkKCiAgZGVmIGZpbmlzaF9idW5kbGUoc2VsZik6CiAgICB1bnByb2Nlc3NlZF9idW5kbGVzID0gW10KICAgIGhvbGQgPSBOb25lCiAgICBpZiBzZWxmLmN1cnJlbnRfaW5kZXggPCBsZW4oc2VsZi50ZXN0X3N0cmVhbS5ldmVudHMpIC0gMToKICAgICAgdW5wcm9jZXNzZWRfYnVuZGxlID0gc2VsZi5fZXZhbHVhdGlvbl9jb250ZXh0LmNyZWF0ZV9idW5kbGUoCiAgICAgICAgICBwdmFsdWUuUEJlZ2luKHNlbGYuX2FwcGxpZWRfcHRyYW5zZm9ybS50cmFuc2Zvcm0ucGlwZWxpbmUpKQogICAgICB1bnByb2Nlc3NlZF9idW5kbGUuYWRkKEdsb2JhbFdpbmRvd3Mud2luZG93ZWRfdmFsdWUoCiAgICAgICAgICBzZWxmLmN1cnJlbnRfaW5kZXggKyAxLCB0aW1lc3RhbXA9c2VsZi53YXRlcm1hcmspKQogICAgICB1bnByb2Nlc3NlZF9idW5kbGVzLmFwcGVuZCh1bnByb2Nlc3NlZF9idW5kbGUpCiAgICAgIGhvbGQgPSBzZWxmLndhdGVybWFyawoKICAgIHJldHVybiBUcmFuc2Zvcm1SZXN1bHQoCiAgICAgICAgc2VsZiwgc2VsZi5idW5kbGVzLCB1bnByb2Nlc3NlZF9idW5kbGVzLCBOb25lLCB7Tm9uZTogaG9sZH0pCgoKY2xhc3MgX1B1YlN1YlN1YnNjcmlwdGlvbldyYXBwZXIob2JqZWN0KToKICAiIiJXcmFwcGVyIGZvciBtYW5hZ2luZyB0ZW1wb3JhcnkgUHViU3ViIHN1YnNjcmlwdGlvbnMuIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9qZWN0LCBzaG9ydF90b3BpY19uYW1lLCBzaG9ydF9zdWJfbmFtZSk6CiAgICAiIiJJbml0aWFsaXplIHN1YnNjcmlwdGlvbiB3cmFwcGVyLgoKICAgIElmIHN1Yl9uYW1lIGlzIE5vbmUsIHdpbGwgY3JlYXRlIGEgdGVtcG9yYXJ5IHN1YnNjcmlwdGlvbiB0byB0b3BpY19uYW1lLgoKICAgIEFyZ3M6CiAgICAgIHByb2plY3Q6IEdDUCBwcm9qZWN0IG5hbWUgZm9yIHRvcGljIGFuZCBzdWJzY3JpcHRpb24uIE1heSBiZSBOb25lLgogICAgICAgIFJlcXVpcmVkIGlmIHN1Yl9uYW1lIGlzIE5vbmUuCiAgICAgIHNob3J0X3RvcGljX25hbWU6IFZhbGlkIHRvcGljIG5hbWUgd2l0aG91dAogICAgICAgICdwcm9qZWN0cy97cHJvamVjdH0vdG9waWNzLycgcHJlZml4LiBNYXkgYmUgTm9uZS4KICAgICAgICBSZXF1aXJlZCBpZiBzdWJfbmFtZSBpcyBOb25lLgogICAgICBzaG9ydF9zdWJfbmFtZTogVmFsaWQgc3Vic2NyaXB0aW9uIG5hbWUgd2l0aG91dAogICAgICAgICdwcm9qZWN0cy97cHJvamVjdH0vc3Vic2NyaXB0aW9ucy8nIHByZWZpeC4gTWF5IGJlIE5vbmUuCiAgICAiIiIKICAgIGZyb20gZ29vZ2xlLmNsb3VkIGltcG9ydCBwdWJzdWIKICAgIHNlbGYuc3ViX2NsaWVudCA9IHB1YnN1Yi5TdWJzY3JpYmVyQ2xpZW50KCkKCiAgICBpZiBzaG9ydF9zdWJfbmFtZSBpcyBOb25lOgogICAgICBzZWxmLnN1Yl9uYW1lID0gc2VsZi5zdWJfY2xpZW50LnN1YnNjcmlwdGlvbl9wYXRoKAogICAgICAgICAgcHJvamVjdCwgJ2JlYW1fJWRfJXgnICUgKGludCh0aW1lLnRpbWUoKSksIHJhbmRvbS5yYW5kcmFuZ2UoMSA8PCAzMikpKQogICAgICB0b3BpY19uYW1lID0gc2VsZi5zdWJfY2xpZW50LnRvcGljX3BhdGgocHJvamVjdCwgc2hvcnRfdG9waWNfbmFtZSkKICAgICAgc2VsZi5zdWJfY2xpZW50LmNyZWF0ZV9zdWJzY3JpcHRpb24oc2VsZi5zdWJfbmFtZSwgdG9waWNfbmFtZSkKICAgICAgc2VsZi5fc2hvdWxkX2NsZWFudXAgPSBUcnVlCiAgICBlbHNlOgogICAgICBzZWxmLnN1Yl9uYW1lID0gc2VsZi5zdWJfY2xpZW50LnN1YnNjcmlwdGlvbl9wYXRoKHByb2plY3QsIHNob3J0X3N1Yl9uYW1lKQogICAgICBzZWxmLl9zaG91bGRfY2xlYW51cCA9IEZhbHNlCgogIGRlZiBfX2RlbF9fKHNlbGYpOgogICAgaWYgc2VsZi5fc2hvdWxkX2NsZWFudXA6CiAgICAgIHNlbGYuc3ViX2NsaWVudC5kZWxldGVfc3Vic2NyaXB0aW9uKHNlbGYuc3ViX25hbWUpCgoKY2xhc3MgX1B1YlN1YlJlYWRFdmFsdWF0b3IoX1RyYW5zZm9ybUV2YWx1YXRvcik6CiAgIiIiVHJhbnNmb3JtRXZhbHVhdG9yIGZvciBQdWJTdWIgcmVhZC4iIiIKCiAgIyBBIG1hcHBpbmcgb2YgdHJhbnNmb3JtIHRvIF9QdWJTdWJTdWJzY3JpcHRpb25XcmFwcGVyLgogIF9zdWJzY3JpcHRpb25fY2FjaGUgPSB7fQoKICBkZWYgX19pbml0X18oc2VsZiwgZXZhbHVhdGlvbl9jb250ZXh0LCBhcHBsaWVkX3B0cmFuc2Zvcm0sCiAgICAgICAgICAgICAgIGlucHV0X2NvbW1pdHRlZF9idW5kbGUsIHNpZGVfaW5wdXRzKToKICAgIGFzc2VydCBub3Qgc2lkZV9pbnB1dHMKICAgIHN1cGVyKF9QdWJTdWJSZWFkRXZhbHVhdG9yLCBzZWxmKS5fX2luaXRfXygKICAgICAgICBldmFsdWF0aW9uX2NvbnRleHQsIGFwcGxpZWRfcHRyYW5zZm9ybSwgaW5wdXRfY29tbWl0dGVkX2J1bmRsZSwKICAgICAgICBzaWRlX2lucHV0cykKCiAgICBzZWxmLnNvdXJjZSA9IHNlbGYuX2FwcGxpZWRfcHRyYW5zZm9ybS50cmFuc2Zvcm0uX3NvdXJjZQogICAgaWYgc2VsZi5zb3VyY2UuaWRfbGFiZWw6CiAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoCiAgICAgICAgICAnRGlyZWN0UnVubmVyOiBpZF9sYWJlbCBpcyBub3Qgc3VwcG9ydGVkIGZvciBQdWJTdWIgcmVhZHMnKQogICAgc2VsZi5fc3ViX25hbWUgPSBfUHViU3ViUmVhZEV2YWx1YXRvci5nZXRfc3Vic2NyaXB0aW9uKAogICAgICAgIHNlbGYuX2FwcGxpZWRfcHRyYW5zZm9ybSwgc2VsZi5zb3VyY2UucHJvamVjdCwgc2VsZi5zb3VyY2UudG9waWNfbmFtZSwKICAgICAgICBzZWxmLnNvdXJjZS5zdWJzY3JpcHRpb25fbmFtZSkKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIGdldF9zdWJzY3JpcHRpb24oY2xzLCB0cmFuc2Zvcm0sIHByb2plY3QsIHRvcGljLCBzaG9ydF9zdWJfbmFtZSk6CiAgICBpZiB0cmFuc2Zvcm0gbm90IGluIGNscy5fc3Vic2NyaXB0aW9uX2NhY2hlOgogICAgICB3cmFwcGVyID0gX1B1YlN1YlN1YnNjcmlwdGlvbldyYXBwZXIocHJvamVjdCwgdG9waWMsIHNob3J0X3N1Yl9uYW1lKQogICAgICBjbHMuX3N1YnNjcmlwdGlvbl9jYWNoZVt0cmFuc2Zvcm1dID0gd3JhcHBlcgogICAgcmV0dXJuIGNscy5fc3Vic2NyaXB0aW9uX2NhY2hlW3RyYW5zZm9ybV0uc3ViX25hbWUKCiAgZGVmIHN0YXJ0X2J1bmRsZShzZWxmKToKICAgIHBhc3MKCiAgZGVmIHByb2Nlc3NfZWxlbWVudChzZWxmLCBlbGVtZW50KToKICAgIHBhc3MKCiAgZGVmIF9yZWFkX2Zyb21fcHVic3ViKHNlbGYsIHRpbWVzdGFtcF9hdHRyaWJ1dGUpOgogICAgZnJvbSBhcGFjaGVfYmVhbS5pby5nY3AucHVic3ViIGltcG9ydCBQdWJzdWJNZXNzYWdlCiAgICBmcm9tIGdvb2dsZS5jbG91ZCBpbXBvcnQgcHVic3ViCiAgICAjIEJlY2F1c2Ugb2YgdGhlIEF1dG9BY2ssIHdlIGFyZSBub3QgYWJsZSB0byByZXJlYWQgbWVzc2FnZXMgaWYgdGhpcwogICAgIyBldmFsdWF0b3IgZmFpbHMgd2l0aCBhbiBleGNlcHRpb24gYmVmb3JlIGVtaXR0aW5nIGEgYnVuZGxlLiBIb3dldmVyLAogICAgIyB0aGUgRGlyZWN0UnVubmVyIGN1cnJlbnRseSBkb2Vzbid0IHJldHJ5IHdvcmsgaXRlbXMgYW55d2F5LCBzbyB0aGUKICAgICMgcGlwZWxpbmUgd291bGQgZW50ZXIgYW4gaW5jb25zaXN0ZW50IHN0YXRlIG9uIGFueSBlcnJvci4KICAgIHN1Yl9jbGllbnQgPSBwdWJzdWIuU3Vic2NyaWJlckNsaWVudCgpCiAgICByZXNwb25zZSA9IHN1Yl9jbGllbnQucHVsbChzZWxmLl9zdWJfbmFtZSwgbWF4X21lc3NhZ2VzPTEwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX2ltbWVkaWF0ZWx5PVRydWUpCgogICAgZGVmIF9nZXRfZWxlbWVudChtZXNzYWdlKToKICAgICAgcGFyc2VkX21lc3NhZ2UgPSBQdWJzdWJNZXNzYWdlLl9mcm9tX21lc3NhZ2UobWVzc2FnZSkKICAgICAgaWYgKHRpbWVzdGFtcF9hdHRyaWJ1dGUgYW5kCiAgICAgICAgICB0aW1lc3RhbXBfYXR0cmlidXRlIGluIHBhcnNlZF9tZXNzYWdlLmF0dHJpYnV0ZXMpOgogICAgICAgIHJmYzMzMzlfb3JfbWlsbGkgPSBwYXJzZWRfbWVzc2FnZS5hdHRyaWJ1dGVzW3RpbWVzdGFtcF9hdHRyaWJ1dGVdCiAgICAgICAgdHJ5OgogICAgICAgICAgdGltZXN0YW1wID0gVGltZXN0YW1wLmZyb21fcmZjMzMzOShyZmMzMzM5X29yX21pbGxpKQogICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgdHJ5OgogICAgICAgICAgICB0aW1lc3RhbXAgPSBUaW1lc3RhbXAobWljcm9zPWludChyZmMzMzM5X29yX21pbGxpKSAqIDEwMDApCiAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgogICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdCYWQgdGltZXN0YW1wIHZhbHVlOiAlcycgJSBlKQogICAgICBlbHNlOgogICAgICAgIHRpbWVzdGFtcCA9IFRpbWVzdGFtcChtZXNzYWdlLnB1Ymxpc2hfdGltZS5zZWNvbmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnB1Ymxpc2hfdGltZS5uYW5vcyAvLyAxMDAwKQoKICAgICAgcmV0dXJuIHRpbWVzdGFtcCwgcGFyc2VkX21lc3NhZ2UKCiAgICByZXN1bHRzID0gW19nZXRfZWxlbWVudChybS5tZXNzYWdlKSBmb3Igcm0gaW4gcmVzcG9uc2UucmVjZWl2ZWRfbWVzc2FnZXNdCiAgICBhY2tfaWRzID0gW3JtLmFja19pZCBmb3Igcm0gaW4gcmVzcG9uc2UucmVjZWl2ZWRfbWVzc2FnZXNdCiAgICBpZiBhY2tfaWRzOgogICAgICBzdWJfY2xpZW50LmFja25vd2xlZGdlKHNlbGYuX3N1Yl9uYW1lLCBhY2tfaWRzKQoKICAgIHJldHVybiByZXN1bHRzCgogIGRlZiBmaW5pc2hfYnVuZGxlKHNlbGYpOgogICAgZGF0YSA9IHNlbGYuX3JlYWRfZnJvbV9wdWJzdWIoc2VsZi5zb3VyY2UudGltZXN0YW1wX2F0dHJpYnV0ZSkKICAgIGlmIGRhdGE6CiAgICAgIG91dHB1dF9wY29sbGVjdGlvbiA9IGxpc3Qoc2VsZi5fb3V0cHV0cylbMF0KICAgICAgYnVuZGxlID0gc2VsZi5fZXZhbHVhdGlvbl9jb250ZXh0LmNyZWF0ZV9idW5kbGUob3V0cHV0X3Bjb2xsZWN0aW9uKQogICAgICAjIFRPRE8oY2N5KTogUmVzcGVjdCB0aGUgUHViU3ViIHNvdXJjZSdzIGlkX2xhYmVsIGZpZWxkLgogICAgICBmb3IgdGltZXN0YW1wLCBtZXNzYWdlIGluIGRhdGE6CiAgICAgICAgaWYgc2VsZi5zb3VyY2Uud2l0aF9hdHRyaWJ1dGVzOgogICAgICAgICAgZWxlbWVudCA9IG1lc3NhZ2UKICAgICAgICBlbHNlOgogICAgICAgICAgZWxlbWVudCA9IG1lc3NhZ2UuZGF0YQogICAgICAgIGJ1bmRsZS5vdXRwdXQoCiAgICAgICAgICAgIEdsb2JhbFdpbmRvd3Mud2luZG93ZWRfdmFsdWUoZWxlbWVudCwgdGltZXN0YW1wPXRpbWVzdGFtcCkpCiAgICAgIGJ1bmRsZXMgPSBbYnVuZGxlXQogICAgZWxzZToKICAgICAgYnVuZGxlcyA9IFtdCiAgICBpZiBzZWxmLl9hcHBsaWVkX3B0cmFuc2Zvcm0uaW5wdXRzOgogICAgICBpbnB1dF9wdmFsdWUgPSBzZWxmLl9hcHBsaWVkX3B0cmFuc2Zvcm0uaW5wdXRzWzBdCiAgICBlbHNlOgogICAgICBpbnB1dF9wdmFsdWUgPSBwdmFsdWUuUEJlZ2luKHNlbGYuX2FwcGxpZWRfcHRyYW5zZm9ybS50cmFuc2Zvcm0ucGlwZWxpbmUpCiAgICB1bnByb2Nlc3NlZF9idW5kbGUgPSBzZWxmLl9ldmFsdWF0aW9uX2NvbnRleHQuY3JlYXRlX2J1bmRsZSgKICAgICAgICBpbnB1dF9wdmFsdWUpCgogICAgIyBUT0RPKHVkaW0pOiBDb3JyZWN0IHZhbHVlIGZvciB3YXRlcm1hcmsgaG9sZC4KICAgIHJldHVybiBUcmFuc2Zvcm1SZXN1bHQoc2VsZiwgYnVuZGxlcywgW3VucHJvY2Vzc2VkX2J1bmRsZV0sIE5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHtOb25lOiBUaW1lc3RhbXAub2YodGltZS50aW1lKCkpfSkKCgpjbGFzcyBfRmxhdHRlbkV2YWx1YXRvcihfVHJhbnNmb3JtRXZhbHVhdG9yKToKICAiIiJUcmFuc2Zvcm1FdmFsdWF0b3IgZm9yIEZsYXR0ZW4gdHJhbnNmb3JtLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgZXZhbHVhdGlvbl9jb250ZXh0LCBhcHBsaWVkX3B0cmFuc2Zvcm0sCiAgICAgICAgICAgICAgIGlucHV0X2NvbW1pdHRlZF9idW5kbGUsIHNpZGVfaW5wdXRzKToKICAgIGFzc2VydCBub3Qgc2lkZV9pbnB1dHMKICAgIHN1cGVyKF9GbGF0dGVuRXZhbHVhdG9yLCBzZWxmKS5fX2luaXRfXygKICAgICAgICBldmFsdWF0aW9uX2NvbnRleHQsIGFwcGxpZWRfcHRyYW5zZm9ybSwgaW5wdXRfY29tbWl0dGVkX2J1bmRsZSwKICAgICAgICBzaWRlX2lucHV0cykKCiAgZGVmIHN0YXJ0X2J1bmRsZShzZWxmKToKICAgIGFzc2VydCBsZW4oc2VsZi5fb3V0cHV0cykgPT0gMQogICAgb3V0cHV0X3Bjb2xsZWN0aW9uID0gbGlzdChzZWxmLl9vdXRwdXRzKVswXQogICAgc2VsZi5idW5kbGUgPSBzZWxmLl9ldmFsdWF0aW9uX2NvbnRleHQuY3JlYXRlX2J1bmRsZShvdXRwdXRfcGNvbGxlY3Rpb24pCgogIGRlZiBwcm9jZXNzX2VsZW1lbnQoc2VsZiwgZWxlbWVudCk6CiAgICBzZWxmLmJ1bmRsZS5vdXRwdXQoZWxlbWVudCkKCiAgZGVmIGZpbmlzaF9idW5kbGUoc2VsZik6CiAgICBidW5kbGVzID0gW3NlbGYuYnVuZGxlXQogICAgcmV0dXJuIFRyYW5zZm9ybVJlc3VsdChzZWxmLCBidW5kbGVzLCBbXSwgTm9uZSwgTm9uZSkKCgpjbGFzcyBfVGFnZ2VkUmVjZWl2ZXJzKGRpY3QpOgogICIiIlJlY2VpdmVkIFBhckRvIG91dHB1dCBhbmQgcmVkaXJlY3QgdG8gdGhlIGFzc29jaWF0ZWQgb3V0cHV0IGJ1bmRsZS4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGV2YWx1YXRpb25fY29udGV4dCk6CiAgICBzZWxmLl9ldmFsdWF0aW9uX2NvbnRleHQgPSBldmFsdWF0aW9uX2NvbnRleHQKICAgIHNlbGYuX251bGxfcmVjZWl2ZXIgPSBOb25lCiAgICBzdXBlcihfVGFnZ2VkUmVjZWl2ZXJzLCBzZWxmKS5fX2luaXRfXygpCgogIGNsYXNzIE51bGxSZWNlaXZlcihjb21tb24uUmVjZWl2ZXIpOgogICAgIiIiSWdub3JlcyB1bmRlY2xhcmVkIG91dHB1dHMsIGRlZmF1bHQgZXhlY3V0aW9uIG1vZGUuIiIiCgogICAgZGVmIHJlY2VpdmUoc2VsZiwgZWxlbWVudCk6CiAgICAgIHBhc3MKCiAgY2xhc3MgX0luTWVtb3J5UmVjZWl2ZXIoY29tbW9uLlJlY2VpdmVyKToKICAgICIiIkJ1ZmZlcnMgdW5kZWNsYXJlZCBvdXRwdXRzIHRvIHRoZSBnaXZlbiBkaWN0aW9uYXJ5LiIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YXJnZXQsIHRhZyk6CiAgICAgIHNlbGYuX3RhcmdldCA9IHRhcmdldAogICAgICBzZWxmLl90YWcgPSB0YWcKCiAgICBkZWYgcmVjZWl2ZShzZWxmLCBlbGVtZW50KToKICAgICAgc2VsZi5fdGFyZ2V0W3NlbGYuX3RhZ10uYXBwZW5kKGVsZW1lbnQpCgogIGRlZiBfX21pc3NpbmdfXyhzZWxmLCBrZXkpOgogICAgaWYgbm90IHNlbGYuX251bGxfcmVjZWl2ZXI6CiAgICAgIHNlbGYuX251bGxfcmVjZWl2ZXIgPSBfVGFnZ2VkUmVjZWl2ZXJzLk51bGxSZWNlaXZlcigpCiAgICByZXR1cm4gc2VsZi5fbnVsbF9yZWNlaXZlcgoKCmNsYXNzIF9QYXJEb0V2YWx1YXRvcihfVHJhbnNmb3JtRXZhbHVhdG9yKToKICAiIiJUcmFuc2Zvcm1FdmFsdWF0b3IgZm9yIFBhckRvIHRyYW5zZm9ybS4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGV2YWx1YXRpb25fY29udGV4dCwgYXBwbGllZF9wdHJhbnNmb3JtLAogICAgICAgICAgICAgICBpbnB1dF9jb21taXR0ZWRfYnVuZGxlLCBzaWRlX2lucHV0cywKICAgICAgICAgICAgICAgcGVyZm9ybV9kb2ZuX3BpY2tsZV90ZXN0PVRydWUpOgogICAgc3VwZXIoX1BhckRvRXZhbHVhdG9yLCBzZWxmKS5fX2luaXRfXygKICAgICAgICBldmFsdWF0aW9uX2NvbnRleHQsIGFwcGxpZWRfcHRyYW5zZm9ybSwgaW5wdXRfY29tbWl0dGVkX2J1bmRsZSwKICAgICAgICBzaWRlX2lucHV0cykKICAgICMgVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIFNERiBpbXBsZW1lbnRhdGlvbi4gU0RGIGltcGxlbWVudGF0aW9uIGFkZHMgc3RhdGUKICAgICMgdG8gdGhlIFNERiB0aGF0IGlzIG5vdCBwaWNrbGFibGUuCiAgICBzZWxmLl9wZXJmb3JtX2RvZm5fcGlja2xlX3Rlc3QgPSBwZXJmb3JtX2RvZm5fcGlja2xlX3Rlc3QKCiAgZGVmIHN0YXJ0X2J1bmRsZShzZWxmKToKICAgIHRyYW5zZm9ybSA9IHNlbGYuX2FwcGxpZWRfcHRyYW5zZm9ybS50cmFuc2Zvcm0KCiAgICBzZWxmLl90YWdnZWRfcmVjZWl2ZXJzID0gX1RhZ2dlZFJlY2VpdmVycyhzZWxmLl9ldmFsdWF0aW9uX2NvbnRleHQpCiAgICBmb3Igb3V0cHV0X3RhZyBpbiBzZWxmLl9hcHBsaWVkX3B0cmFuc2Zvcm0ub3V0cHV0czoKICAgICAgb3V0cHV0X3Bjb2xsZWN0aW9uID0gcHZhbHVlLlBDb2xsZWN0aW9uKE5vbmUsIHRhZz1vdXRwdXRfdGFnKQogICAgICBvdXRwdXRfcGNvbGxlY3Rpb24ucHJvZHVjZXIgPSBzZWxmLl9hcHBsaWVkX3B0cmFuc2Zvcm0KICAgICAgc2VsZi5fdGFnZ2VkX3JlY2VpdmVyc1tvdXRwdXRfdGFnXSA9ICgKICAgICAgICAgIHNlbGYuX2V2YWx1YXRpb25fY29udGV4dC5jcmVhdGVfYnVuZGxlKG91dHB1dF9wY29sbGVjdGlvbikpCiAgICAgIHNlbGYuX3RhZ2dlZF9yZWNlaXZlcnNbb3V0cHV0X3RhZ10udGFnID0gb3V0cHV0X3RhZwoKICAgIHNlbGYuX2NvdW50ZXJfZmFjdG9yeSA9IGNvdW50ZXJzLkNvdW50ZXJGYWN0b3J5KCkKCiAgICAjIFRPRE8oYWFsdGF5KTogQ29uc2lkZXIgc3RvcmluZyB0aGUgc2VyaWFsaXplZCBmb3JtIGFzIGFuIG9wdGltaXphdGlvbi4KICAgIGRvZm4gPSAocGlja2xlci5sb2FkcyhwaWNrbGVyLmR1bXBzKHRyYW5zZm9ybS5kb2ZuKSkKICAgICAgICAgICAgaWYgc2VsZi5fcGVyZm9ybV9kb2ZuX3BpY2tsZV90ZXN0IGVsc2UgdHJhbnNmb3JtLmRvZm4pCgogICAgYXJncyA9IHRyYW5zZm9ybS5hcmdzIGlmIGhhc2F0dHIodHJhbnNmb3JtLCAnYXJncycpIGVsc2UgW10KICAgIGt3YXJncyA9IHRyYW5zZm9ybS5rd2FyZ3MgaWYgaGFzYXR0cih0cmFuc2Zvcm0sICdrd2FyZ3MnKSBlbHNlIHt9CgogICAgc2VsZi51c2VyX3N0YXRlX2NvbnRleHQgPSBOb25lCiAgICBzZWxmLnVzZXJfdGltZXJfbWFwID0ge30KICAgIGlmIGlzX3N0YXRlZnVsX2RvZm4oZG9mbik6CiAgICAgIGt2X3R5cGVfaGludCA9IHNlbGYuX2FwcGxpZWRfcHRyYW5zZm9ybS5pbnB1dHNbMF0uZWxlbWVudF90eXBlCiAgICAgIGlmIGt2X3R5cGVfaGludCBhbmQga3ZfdHlwZV9oaW50ICE9IHR5cGVoaW50cy5Bbnk6CiAgICAgICAgY29kZXIgPSBjb2RlcnMucmVnaXN0cnkuZ2V0X2NvZGVyKGt2X3R5cGVfaGludCkKICAgICAgICBzZWxmLmtleV9jb2RlciA9IGNvZGVyLmtleV9jb2RlcigpCiAgICAgIGVsc2U6CiAgICAgICAgc2VsZi5rZXlfY29kZXIgPSBjb2RlcnMucmVnaXN0cnkuZ2V0X2NvZGVyKHR5cGVoaW50cy5BbnkpCgogICAgICBzZWxmLnVzZXJfc3RhdGVfY29udGV4dCA9IERpcmVjdFVzZXJTdGF0ZUNvbnRleHQoCiAgICAgICAgICBzZWxmLl9zdGVwX2NvbnRleHQsIGRvZm4sIHNlbGYua2V5X2NvZGVyKQogICAgICBfLCBhbGxfdGltZXJfc3BlY3MgPSBnZXRfZG9mbl9zcGVjcyhkb2ZuKQogICAgICBmb3IgdGltZXJfc3BlYyBpbiBhbGxfdGltZXJfc3BlY3M6CiAgICAgICAgc2VsZi51c2VyX3RpbWVyX21hcFsndXNlci8lcycgJSB0aW1lcl9zcGVjLm5hbWVdID0gdGltZXJfc3BlYwoKICAgIHNlbGYucnVubmVyID0gRG9GblJ1bm5lcigKICAgICAgICBkb2ZuLCBhcmdzLCBrd2FyZ3MsCiAgICAgICAgc2VsZi5fc2lkZV9pbnB1dHMsCiAgICAgICAgc2VsZi5fYXBwbGllZF9wdHJhbnNmb3JtLmlucHV0c1swXS53aW5kb3dpbmcsCiAgICAgICAgdGFnZ2VkX3JlY2VpdmVycz1zZWxmLl90YWdnZWRfcmVjZWl2ZXJzLAogICAgICAgIHN0ZXBfbmFtZT1zZWxmLl9hcHBsaWVkX3B0cmFuc2Zvcm0uZnVsbF9sYWJlbCwKICAgICAgICBzdGF0ZT1Eb0ZuU3RhdGUoc2VsZi5fY291bnRlcl9mYWN0b3J5KSwKICAgICAgICB1c2VyX3N0YXRlX2NvbnRleHQ9c2VsZi51c2VyX3N0YXRlX2NvbnRleHQpCiAgICBzZWxmLnJ1bm5lci5zdGFydCgpCgogIGRlZiBwcm9jZXNzX3RpbWVyKHNlbGYsIHRpbWVyX2ZpcmluZyk6CiAgICBpZiB0aW1lcl9maXJpbmcubmFtZSBub3QgaW4gc2VsZi51c2VyX3RpbWVyX21hcDoKICAgICAgbG9nZ2luZy53YXJuaW5nKCdVbmtub3duIHRpbWVyIGZpcmVkOiAlcycsIHRpbWVyX2ZpcmluZykKICAgIHRpbWVyX3NwZWMgPSBzZWxmLnVzZXJfdGltZXJfbWFwW3RpbWVyX2ZpcmluZy5uYW1lXQogICAgc2VsZi5ydW5uZXIucHJvY2Vzc191c2VyX3RpbWVyKAogICAgICAgIHRpbWVyX3NwZWMsIHNlbGYua2V5X2NvZGVyLmRlY29kZSh0aW1lcl9maXJpbmcuZW5jb2RlZF9rZXkpLAogICAgICAgIHRpbWVyX2ZpcmluZy53aW5kb3csIHRpbWVyX2ZpcmluZy50aW1lc3RhbXApCgogIGRlZiBwcm9jZXNzX2VsZW1lbnQoc2VsZiwgZWxlbWVudCk6CiAgICBzZWxmLnJ1bm5lci5wcm9jZXNzKGVsZW1lbnQpCgogIGRlZiBmaW5pc2hfYnVuZGxlKHNlbGYpOgogICAgc2VsZi5ydW5uZXIuZmluaXNoKCkKICAgIGJ1bmRsZXMgPSBsaXN0KHNlbGYuX3RhZ2dlZF9yZWNlaXZlcnMudmFsdWVzKCkpCiAgICByZXN1bHRfY291bnRlcnMgPSBzZWxmLl9jb3VudGVyX2ZhY3RvcnkuZ2V0X2NvdW50ZXJzKCkKICAgIGlmIHNlbGYudXNlcl9zdGF0ZV9jb250ZXh0OgogICAgICBzZWxmLnVzZXJfc3RhdGVfY29udGV4dC5jb21taXQoKQogICAgcmV0dXJuIFRyYW5zZm9ybVJlc3VsdCgKICAgICAgICBzZWxmLCBidW5kbGVzLCBbXSwgcmVzdWx0X2NvdW50ZXJzLCBOb25lKQoKCmNsYXNzIF9Hcm91cEJ5S2V5T25seUV2YWx1YXRvcihfVHJhbnNmb3JtRXZhbHVhdG9yKToKICAiIiJUcmFuc2Zvcm1FdmFsdWF0b3IgZm9yIF9Hcm91cEJ5S2V5T25seSB0cmFuc2Zvcm0uIiIiCgogIE1BWF9FTEVNRU5UX1BFUl9CVU5ETEUgPSBOb25lCiAgRUxFTUVOVFNfVEFHID0gX0xpc3RTdGF0ZVRhZygnZWxlbWVudHMnKQogIENPTVBMRVRJT05fVEFHID0gX0NvbWJpbmluZ1ZhbHVlU3RhdGVUYWcoJ2NvbXBsZXRlZCcsIGFueSkKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGV2YWx1YXRpb25fY29udGV4dCwgYXBwbGllZF9wdHJhbnNmb3JtLAogICAgICAgICAgICAgICBpbnB1dF9jb21taXR0ZWRfYnVuZGxlLCBzaWRlX2lucHV0cyk6CiAgICBhc3NlcnQgbm90IHNpZGVfaW5wdXRzCiAgICBzdXBlcihfR3JvdXBCeUtleU9ubHlFdmFsdWF0b3IsIHNlbGYpLl9faW5pdF9fKAogICAgICAgIGV2YWx1YXRpb25fY29udGV4dCwgYXBwbGllZF9wdHJhbnNmb3JtLCBpbnB1dF9jb21taXR0ZWRfYnVuZGxlLAogICAgICAgIHNpZGVfaW5wdXRzKQoKICBkZWYgX2lzX2ZpbmFsX2J1bmRsZShzZWxmKToKICAgIHJldHVybiAoc2VsZi5fZXhlY3V0aW9uX2NvbnRleHQud2F0ZXJtYXJrcy5pbnB1dF93YXRlcm1hcmsKICAgICAgICAgICAgPT0gV2F0ZXJtYXJrTWFuYWdlci5XQVRFUk1BUktfUE9TX0lORikKCiAgZGVmIHN0YXJ0X2J1bmRsZShzZWxmKToKICAgIHNlbGYuZ2xvYmFsX3N0YXRlID0gc2VsZi5fc3RlcF9jb250ZXh0LmdldF9rZXllZF9zdGF0ZShOb25lKQoKICAgIGFzc2VydCBsZW4oc2VsZi5fb3V0cHV0cykgPT0gMQogICAgc2VsZi5vdXRwdXRfcGNvbGxlY3Rpb24gPSBsaXN0KHNlbGYuX291dHB1dHMpWzBdCgogICAgIyBUaGUgb3V0cHV0IHR5cGUgb2YgYSBHcm91cEJ5S2V5IHdpbGwgYmUgS1ZbQW55LCBBbnldIG9yIG1vcmUgc3BlY2lmaWMuCiAgICAjIFRPRE8oQkVBTS0yNzE3KTogSW5mZXIgY29kZXJzIGVhcmxpZXIuCiAgICBrdl90eXBlX2hpbnQgPSAoCiAgICAgICAgc2VsZi5fYXBwbGllZF9wdHJhbnNmb3JtLm91dHB1dHNbTm9uZV0uZWxlbWVudF90eXBlCiAgICAgICAgb3IKICAgICAgICBzZWxmLl9hcHBsaWVkX3B0cmFuc2Zvcm0udHJhbnNmb3JtLmdldF90eXBlX2hpbnRzKCkuaW5wdXRfdHlwZXNbMF1bMF0pCiAgICBzZWxmLmtleV9jb2RlciA9IGNvZGVycy5yZWdpc3RyeS5nZXRfY29kZXIoa3ZfdHlwZV9oaW50LnR1cGxlX3R5cGVzWzBdKQoKICBkZWYgcHJvY2Vzc190aW1lcihzZWxmLCB0aW1lcl9maXJpbmcpOgogICAgIyBXZSBkbyBub3QgbmVlZCB0byBlbWl0IGEgS2V5ZWRXb3JrSXRlbSB0byBwcm9jZXNzX2VsZW1lbnQoKS4KICAgIHBhc3MKCiAgZGVmIHByb2Nlc3NfZWxlbWVudChzZWxmLCBlbGVtZW50KToKICAgIGFzc2VydCBub3Qgc2VsZi5nbG9iYWxfc3RhdGUuZ2V0X3N0YXRlKAogICAgICAgIE5vbmUsIF9Hcm91cEJ5S2V5T25seUV2YWx1YXRvci5DT01QTEVUSU9OX1RBRykKICAgIGlmIChpc2luc3RhbmNlKGVsZW1lbnQsIFdpbmRvd2VkVmFsdWUpCiAgICAgICAgYW5kIGlzaW5zdGFuY2UoZWxlbWVudC52YWx1ZSwgY29sbGVjdGlvbnMuSXRlcmFibGUpCiAgICAgICAgYW5kIGxlbihlbGVtZW50LnZhbHVlKSA9PSAyKToKICAgICAgaywgdiA9IGVsZW1lbnQudmFsdWUKICAgICAgZW5jb2RlZF9rID0gc2VsZi5rZXlfY29kZXIuZW5jb2RlKGspCiAgICAgIHN0YXRlID0gc2VsZi5fc3RlcF9jb250ZXh0LmdldF9rZXllZF9zdGF0ZShlbmNvZGVkX2spCiAgICAgIHN0YXRlLmFkZF9zdGF0ZShOb25lLCBfR3JvdXBCeUtleU9ubHlFdmFsdWF0b3IuRUxFTUVOVFNfVEFHLCB2KQogICAgZWxzZToKICAgICAgcmFpc2UgVHlwZUNoZWNrRXJyb3IoJ0lucHV0IHRvIF9Hcm91cEJ5S2V5T25seSBtdXN0IGJlIGEgUENvbGxlY3Rpb24gb2YgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnd2luZG93ZWQga2V5LXZhbHVlIHBhaXJzLiBJbnN0ZWFkIHJlY2VpdmVkOiAlci4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICUgZWxlbWVudCkKCiAgZGVmIGZpbmlzaF9idW5kbGUoc2VsZik6CiAgICBpZiBzZWxmLl9pc19maW5hbF9idW5kbGUoKToKICAgICAgaWYgc2VsZi5nbG9iYWxfc3RhdGUuZ2V0X3N0YXRlKAogICAgICAgICAgTm9uZSwgX0dyb3VwQnlLZXlPbmx5RXZhbHVhdG9yLkNPTVBMRVRJT05fVEFHKToKICAgICAgICAjIElnbm9yZSBlbXB0eSBidW5kbGVzIGFmdGVyIGVtaXR0aW5nIG91dHB1dC4gKFRoaXMgbWF5IGhhcHBlbiBiZWNhdXNlCiAgICAgICAgIyBlbXB0eSBidW5kbGVzIGRvIG5vdCBhZmZlY3QgaW5wdXQgd2F0ZXJtYXJrcy4pCiAgICAgICAgYnVuZGxlcyA9IFtdCiAgICAgIGVsc2U6CiAgICAgICAgZ2JrX3Jlc3VsdCA9IFtdCiAgICAgICAgIyBUT0RPKGNjeSk6IHBlcmhhcHMgd2UgY2FuIGNsZWFuIHRoaXMgdXAgdG8gbm90IHVzZSB0aGlzCiAgICAgICAgIyBpbnRlcm5hbCBhdHRyaWJ1dGUgb2YgdGhlIERpcmVjdFN0ZXBDb250ZXh0LgogICAgICAgIGZvciBlbmNvZGVkX2sgaW4gc2VsZi5fc3RlcF9jb250ZXh0LmV4aXN0aW5nX2tleWVkX3N0YXRlOgogICAgICAgICAgIyBJZ25vcmUgZ2xvYmFsIHN0YXRlLgogICAgICAgICAgaWYgZW5jb2RlZF9rIGlzIE5vbmU6CiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICBrID0gc2VsZi5rZXlfY29kZXIuZGVjb2RlKGVuY29kZWRfaykKICAgICAgICAgIHN0YXRlID0gc2VsZi5fc3RlcF9jb250ZXh0LmdldF9rZXllZF9zdGF0ZShlbmNvZGVkX2spCiAgICAgICAgICB2cyA9IHN0YXRlLmdldF9zdGF0ZShOb25lLCBfR3JvdXBCeUtleU9ubHlFdmFsdWF0b3IuRUxFTUVOVFNfVEFHKQogICAgICAgICAgZ2JrX3Jlc3VsdC5hcHBlbmQoR2xvYmFsV2luZG93cy53aW5kb3dlZF92YWx1ZSgoaywgdnMpKSkKCiAgICAgICAgZGVmIGxlbl9lbGVtZW50X2ZuKGVsZW1lbnQpOgogICAgICAgICAgXywgdiA9IGVsZW1lbnQudmFsdWUKICAgICAgICAgIHJldHVybiBsZW4odikKCiAgICAgICAgYnVuZGxlcyA9IHNlbGYuX3NwbGl0X2xpc3RfaW50b19idW5kbGVzKAogICAgICAgICAgICBzZWxmLm91dHB1dF9wY29sbGVjdGlvbiwgZ2JrX3Jlc3VsdCwKICAgICAgICAgICAgX0dyb3VwQnlLZXlPbmx5RXZhbHVhdG9yLk1BWF9FTEVNRU5UX1BFUl9CVU5ETEUsIGxlbl9lbGVtZW50X2ZuKQoKICAgICAgc2VsZi5nbG9iYWxfc3RhdGUuYWRkX3N0YXRlKAogICAgICAgICAgTm9uZSwgX0dyb3VwQnlLZXlPbmx5RXZhbHVhdG9yLkNPTVBMRVRJT05fVEFHLCBUcnVlKQogICAgICBob2xkID0gV2F0ZXJtYXJrTWFuYWdlci5XQVRFUk1BUktfUE9TX0lORgogICAgZWxzZToKICAgICAgYnVuZGxlcyA9IFtdCiAgICAgIGhvbGQgPSBXYXRlcm1hcmtNYW5hZ2VyLldBVEVSTUFSS19ORUdfSU5GCiAgICAgIHNlbGYuZ2xvYmFsX3N0YXRlLnNldF90aW1lcigKICAgICAgICAgIE5vbmUsICcnLCBUaW1lRG9tYWluLldBVEVSTUFSSywgV2F0ZXJtYXJrTWFuYWdlci5XQVRFUk1BUktfUE9TX0lORikKCiAgICByZXR1cm4gVHJhbnNmb3JtUmVzdWx0KHNlbGYsIGJ1bmRsZXMsIFtdLCBOb25lLCB7Tm9uZTogaG9sZH0pCgoKY2xhc3MgX1N0cmVhbWluZ0dyb3VwQnlLZXlPbmx5RXZhbHVhdG9yKF9UcmFuc2Zvcm1FdmFsdWF0b3IpOgogICIiIlRyYW5zZm9ybUV2YWx1YXRvciBmb3IgX1N0cmVhbWluZ0dyb3VwQnlLZXlPbmx5IHRyYW5zZm9ybS4KCiAgVGhlIF9Hcm91cEJ5S2V5T25seUV2YWx1YXRvciBidWZmZXJzIGVsZW1lbnRzIHVudGlsIGl0cyBpbnB1dCB3YXRlcm1hcmsgZ29lcwogIHRvIGluZmluaXR5LCB3aGljaCBpcyBzdWl0YWJsZSBmb3IgYmF0Y2ggbW9kZSBleGVjdXRpb24uIER1cmluZyBzdHJlYW1pbmcKICBtb2RlIGV4ZWN1dGlvbiwgd2UgZW1pdCBlYWNoIGJ1bmRsZSBhcyBpdCBjb21lcyB0byB0aGUgbmV4dCB0cmFuc2Zvcm0uCiAgIiIiCgogIE1BWF9FTEVNRU5UX1BFUl9CVU5ETEUgPSBOb25lCgogIGRlZiBfX2luaXRfXyhzZWxmLCBldmFsdWF0aW9uX2NvbnRleHQsIGFwcGxpZWRfcHRyYW5zZm9ybSwKICAgICAgICAgICAgICAgaW5wdXRfY29tbWl0dGVkX2J1bmRsZSwgc2lkZV9pbnB1dHMpOgogICAgYXNzZXJ0IG5vdCBzaWRlX2lucHV0cwogICAgc3VwZXIoX1N0cmVhbWluZ0dyb3VwQnlLZXlPbmx5RXZhbHVhdG9yLCBzZWxmKS5fX2luaXRfXygKICAgICAgICBldmFsdWF0aW9uX2NvbnRleHQsIGFwcGxpZWRfcHRyYW5zZm9ybSwgaW5wdXRfY29tbWl0dGVkX2J1bmRsZSwKICAgICAgICBzaWRlX2lucHV0cykKCiAgZGVmIHN0YXJ0X2J1bmRsZShzZWxmKToKICAgIHNlbGYuZ2JrX2l0ZW1zID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QobGlzdCkKCiAgICBhc3NlcnQgbGVuKHNlbGYuX291dHB1dHMpID09IDEKICAgIHNlbGYub3V0cHV0X3Bjb2xsZWN0aW9uID0gbGlzdChzZWxmLl9vdXRwdXRzKVswXQoKICAgICMgVGhlIGlucHV0IHR5cGUgb2YgYSBHcm91cEJ5S2V5IHdpbGwgYmUgS1ZbQW55LCBBbnldIG9yIG1vcmUgc3BlY2lmaWMuCiAgICBrdl90eXBlX2hpbnQgPSBzZWxmLl9hcHBsaWVkX3B0cmFuc2Zvcm0uaW5wdXRzWzBdLmVsZW1lbnRfdHlwZQogICAga2V5X3R5cGVfaGludCA9IChrdl90eXBlX2hpbnQudHVwbGVfdHlwZXNbMF0gaWYga3ZfdHlwZV9oaW50CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgdHlwZWhpbnRzLkFueSkKICAgIHNlbGYua2V5X2NvZGVyID0gY29kZXJzLnJlZ2lzdHJ5LmdldF9jb2RlcihrZXlfdHlwZV9oaW50KQoKICBkZWYgcHJvY2Vzc19lbGVtZW50KHNlbGYsIGVsZW1lbnQpOgogICAgaWYgKGlzaW5zdGFuY2UoZWxlbWVudCwgV2luZG93ZWRWYWx1ZSkKICAgICAgICBhbmQgaXNpbnN0YW5jZShlbGVtZW50LnZhbHVlLCBjb2xsZWN0aW9ucy5JdGVyYWJsZSkKICAgICAgICBhbmQgbGVuKGVsZW1lbnQudmFsdWUpID09IDIpOgogICAgICBrLCB2ID0gZWxlbWVudC52YWx1ZQogICAgICBzZWxmLmdia19pdGVtc1tzZWxmLmtleV9jb2Rlci5lbmNvZGUoayldLmFwcGVuZCh2KQogICAgZWxzZToKICAgICAgcmFpc2UgVHlwZUNoZWNrRXJyb3IoJ0lucHV0IHRvIF9Hcm91cEJ5S2V5T25seSBtdXN0IGJlIGEgUENvbGxlY3Rpb24gb2YgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnd2luZG93ZWQga2V5LXZhbHVlIHBhaXJzLiBJbnN0ZWFkIHJlY2VpdmVkOiAlci4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICUgZWxlbWVudCkKCiAgZGVmIGZpbmlzaF9idW5kbGUoc2VsZik6CiAgICBidW5kbGVzID0gW10KICAgIGJ1bmRsZSA9IE5vbmUKICAgIGZvciBlbmNvZGVkX2ssIHZzIGluIGl0ZXJpdGVtcyhzZWxmLmdia19pdGVtcyk6CiAgICAgIGlmIG5vdCBidW5kbGU6CiAgICAgICAgYnVuZGxlID0gc2VsZi5fZXZhbHVhdGlvbl9jb250ZXh0LmNyZWF0ZV9idW5kbGUoCiAgICAgICAgICAgIHNlbGYub3V0cHV0X3Bjb2xsZWN0aW9uKQogICAgICAgIGJ1bmRsZXMuYXBwZW5kKGJ1bmRsZSkKICAgICAga3dpID0gS2V5ZWRXb3JrSXRlbShlbmNvZGVkX2ssIGVsZW1lbnRzPXZzKQogICAgICBidW5kbGUuYWRkKEdsb2JhbFdpbmRvd3Mud2luZG93ZWRfdmFsdWUoa3dpKSkKCiAgICByZXR1cm4gVHJhbnNmb3JtUmVzdWx0KHNlbGYsIGJ1bmRsZXMsIFtdLCBOb25lLCBOb25lKQoKCmNsYXNzIF9TdHJlYW1pbmdHcm91cEFsc29CeVdpbmRvd0V2YWx1YXRvcihfVHJhbnNmb3JtRXZhbHVhdG9yKToKICAiIiJUcmFuc2Zvcm1FdmFsdWF0b3IgZm9yIHRoZSBfU3RyZWFtaW5nR3JvdXBBbHNvQnlXaW5kb3cgdHJhbnNmb3JtLgoKICBUaGlzIGV2YWx1YXRvciBpcyBvbmx5IHVzZWQgaW4gc3RyZWFtaW5nIG1vZGUuICBJbiBiYXRjaCBtb2RlLCB0aGUKICBHcm91cEFsc29CeVdpbmRvdyBvcGVyYXRpb24gaXMgZXZhbHVhdGVkIGFzIGEgbm9ybWFsIERvRm4sIGFzIGRlZmluZWQKICBpbiB0cmFuc2Zvcm1zL2NvcmUucHkuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBldmFsdWF0aW9uX2NvbnRleHQsIGFwcGxpZWRfcHRyYW5zZm9ybSwKICAgICAgICAgICAgICAgaW5wdXRfY29tbWl0dGVkX2J1bmRsZSwgc2lkZV9pbnB1dHMpOgogICAgYXNzZXJ0IG5vdCBzaWRlX2lucHV0cwogICAgc3VwZXIoX1N0cmVhbWluZ0dyb3VwQWxzb0J5V2luZG93RXZhbHVhdG9yLCBzZWxmKS5fX2luaXRfXygKICAgICAgICBldmFsdWF0aW9uX2NvbnRleHQsIGFwcGxpZWRfcHRyYW5zZm9ybSwgaW5wdXRfY29tbWl0dGVkX2J1bmRsZSwKICAgICAgICBzaWRlX2lucHV0cykKCiAgZGVmIHN0YXJ0X2J1bmRsZShzZWxmKToKICAgIGFzc2VydCBsZW4oc2VsZi5fb3V0cHV0cykgPT0gMQogICAgc2VsZi5vdXRwdXRfcGNvbGxlY3Rpb24gPSBsaXN0KHNlbGYuX291dHB1dHMpWzBdCiAgICBzZWxmLmRyaXZlciA9IGNyZWF0ZV90cmlnZ2VyX2RyaXZlcigKICAgICAgICBzZWxmLl9hcHBsaWVkX3B0cmFuc2Zvcm0udHJhbnNmb3JtLndpbmRvd2luZywKICAgICAgICBjbG9jaz1zZWxmLl9ldmFsdWF0aW9uX2NvbnRleHQuX3dhdGVybWFya19tYW5hZ2VyLl9jbG9jaykKICAgIHNlbGYuZ2Fid19pdGVtcyA9IFtdCiAgICBzZWxmLmtleWVkX2hvbGRzID0ge30KCiAgICAjIFRoZSBpbnB1dCB0eXBlICh3aGljaCBpcyB0aGUgc2FtZSBhcyB0aGUgb3V0cHV0IHR5cGUpIG9mIGEKICAgICMgR3JvdXBBbHNvQnlXaW5kb3cgd2lsbCBiZSBLVltBbnksIEl0ZXJbQW55XV0gb3IgbW9yZSBzcGVjaWZpYy4KICAgIGt2X3R5cGVfaGludCA9IHNlbGYuX2FwcGxpZWRfcHRyYW5zZm9ybS5vdXRwdXRzW05vbmVdLmVsZW1lbnRfdHlwZQogICAga2V5X3R5cGVfaGludCA9IChrdl90eXBlX2hpbnQudHVwbGVfdHlwZXNbMF0gaWYga3ZfdHlwZV9oaW50CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgdHlwZWhpbnRzLkFueSkKICAgIHNlbGYua2V5X2NvZGVyID0gY29kZXJzLnJlZ2lzdHJ5LmdldF9jb2RlcihrZXlfdHlwZV9oaW50KQoKICBkZWYgcHJvY2Vzc19lbGVtZW50KHNlbGYsIGVsZW1lbnQpOgogICAga3dpID0gZWxlbWVudC52YWx1ZQogICAgYXNzZXJ0IGlzaW5zdGFuY2Uoa3dpLCBLZXllZFdvcmtJdGVtKSwga3dpCiAgICBlbmNvZGVkX2ssIHRpbWVyX2ZpcmluZ3MsIHZzID0gKAogICAgICAgIGt3aS5lbmNvZGVkX2tleSwga3dpLnRpbWVyX2ZpcmluZ3MsIGt3aS5lbGVtZW50cykKICAgIGsgPSBzZWxmLmtleV9jb2Rlci5kZWNvZGUoZW5jb2RlZF9rKQogICAgc3RhdGUgPSBzZWxmLl9zdGVwX2NvbnRleHQuZ2V0X2tleWVkX3N0YXRlKGVuY29kZWRfaykKCiAgICBmb3IgdGltZXJfZmlyaW5nIGluIHRpbWVyX2ZpcmluZ3M6CiAgICAgIGZvciB3dmFsdWUgaW4gc2VsZi5kcml2ZXIucHJvY2Vzc190aW1lcigKICAgICAgICAgIHRpbWVyX2ZpcmluZy53aW5kb3csIHRpbWVyX2ZpcmluZy5uYW1lLCB0aW1lcl9maXJpbmcudGltZV9kb21haW4sCiAgICAgICAgICB0aW1lcl9maXJpbmcudGltZXN0YW1wLCBzdGF0ZSk6CiAgICAgICAgc2VsZi5nYWJ3X2l0ZW1zLmFwcGVuZCh3dmFsdWUud2l0aF92YWx1ZSgoaywgd3ZhbHVlLnZhbHVlKSkpCiAgICBpZiB2czoKICAgICAgZm9yIHd2YWx1ZSBpbiBzZWxmLmRyaXZlci5wcm9jZXNzX2VsZW1lbnRzKHN0YXRlLCB2cywgTUlOX1RJTUVTVEFNUCk6CiAgICAgICAgc2VsZi5nYWJ3X2l0ZW1zLmFwcGVuZCh3dmFsdWUud2l0aF92YWx1ZSgoaywgd3ZhbHVlLnZhbHVlKSkpCgogICAgc2VsZi5rZXllZF9ob2xkc1tlbmNvZGVkX2tdID0gc3RhdGUuZ2V0X2VhcmxpZXN0X2hvbGQoKQoKICBkZWYgZmluaXNoX2J1bmRsZShzZWxmKToKICAgIGJ1bmRsZXMgPSBbXQogICAgaWYgc2VsZi5nYWJ3X2l0ZW1zOgogICAgICBidW5kbGUgPSBzZWxmLl9ldmFsdWF0aW9uX2NvbnRleHQuY3JlYXRlX2J1bmRsZShzZWxmLm91dHB1dF9wY29sbGVjdGlvbikKICAgICAgZm9yIGl0ZW0gaW4gc2VsZi5nYWJ3X2l0ZW1zOgogICAgICAgIGJ1bmRsZS5hZGQoaXRlbSkKICAgICAgYnVuZGxlcy5hcHBlbmQoYnVuZGxlKQoKICAgIHJldHVybiBUcmFuc2Zvcm1SZXN1bHQoc2VsZiwgYnVuZGxlcywgW10sIE5vbmUsIHNlbGYua2V5ZWRfaG9sZHMpCgoKY2xhc3MgX05hdGl2ZVdyaXRlRXZhbHVhdG9yKF9UcmFuc2Zvcm1FdmFsdWF0b3IpOgogICIiIlRyYW5zZm9ybUV2YWx1YXRvciBmb3IgX05hdGl2ZVdyaXRlIHRyYW5zZm9ybS4iIiIKCiAgRUxFTUVOVFNfVEFHID0gX0xpc3RTdGF0ZVRhZygnZWxlbWVudHMnKQoKICBkZWYgX19pbml0X18oc2VsZiwgZXZhbHVhdGlvbl9jb250ZXh0LCBhcHBsaWVkX3B0cmFuc2Zvcm0sCiAgICAgICAgICAgICAgIGlucHV0X2NvbW1pdHRlZF9idW5kbGUsIHNpZGVfaW5wdXRzKToKICAgIGFzc2VydCBub3Qgc2lkZV9pbnB1dHMKICAgIHN1cGVyKF9OYXRpdmVXcml0ZUV2YWx1YXRvciwgc2VsZikuX19pbml0X18oCiAgICAgICAgZXZhbHVhdGlvbl9jb250ZXh0LCBhcHBsaWVkX3B0cmFuc2Zvcm0sIGlucHV0X2NvbW1pdHRlZF9idW5kbGUsCiAgICAgICAgc2lkZV9pbnB1dHMpCgogICAgYXNzZXJ0IGFwcGxpZWRfcHRyYW5zZm9ybS50cmFuc2Zvcm0uc2luawogICAgc2VsZi5fc2luayA9IGFwcGxpZWRfcHRyYW5zZm9ybS50cmFuc2Zvcm0uc2luawoKICBAcHJvcGVydHkKICBkZWYgX2lzX2ZpbmFsX2J1bmRsZShzZWxmKToKICAgIHJldHVybiAoc2VsZi5fZXhlY3V0aW9uX2NvbnRleHQud2F0ZXJtYXJrcy5pbnB1dF93YXRlcm1hcmsKICAgICAgICAgICAgPT0gV2F0ZXJtYXJrTWFuYWdlci5XQVRFUk1BUktfUE9TX0lORikKCiAgQHByb3BlcnR5CiAgZGVmIF9oYXNfYWxyZWFkeV9wcm9kdWNlZF9vdXRwdXQoc2VsZik6CiAgICByZXR1cm4gKHNlbGYuX2V4ZWN1dGlvbl9jb250ZXh0LndhdGVybWFya3Mub3V0cHV0X3dhdGVybWFyawogICAgICAgICAgICA9PSBXYXRlcm1hcmtNYW5hZ2VyLldBVEVSTUFSS19QT1NfSU5GKQoKICBkZWYgc3RhcnRfYnVuZGxlKHNlbGYpOgogICAgc2VsZi5nbG9iYWxfc3RhdGUgPSBzZWxmLl9zdGVwX2NvbnRleHQuZ2V0X2tleWVkX3N0YXRlKE5vbmUpCgogIGRlZiBwcm9jZXNzX3RpbWVyKHNlbGYsIHRpbWVyX2ZpcmluZyk6CiAgICAjIFdlIGRvIG5vdCBuZWVkIHRvIGVtaXQgYSBLZXllZFdvcmtJdGVtIHRvIHByb2Nlc3NfZWxlbWVudCgpLgogICAgcGFzcwoKICBkZWYgcHJvY2Vzc19lbGVtZW50KHNlbGYsIGVsZW1lbnQpOgogICAgc2VsZi5nbG9iYWxfc3RhdGUuYWRkX3N0YXRlKAogICAgICAgIE5vbmUsIF9OYXRpdmVXcml0ZUV2YWx1YXRvci5FTEVNRU5UU19UQUcsIGVsZW1lbnQpCgogIGRlZiBmaW5pc2hfYnVuZGxlKHNlbGYpOgogICAgIyBmaW5pc2hfYnVuZGxlIHdpbGwgYXBwZW5kIGluY29taW5nIGJ1bmRsZXMgaW4gbWVtb3J5IHVudGlsIGFsbCB0aGUgYnVuZGxlcwogICAgIyBjYXJyeWluZyBkYXRhIGlzIHByb2Nlc3NlZC4gVGhpcyBpcyBkb25lIHRvIHByb2R1Y2Ugb25seSBhIHNpbmdsZSBvdXRwdXQKICAgICMgc2hhcmQgKHNvbWUgdGVzdHMgZGVwZW5kcyBvbiB0aGlzIGJlaGF2aW9yKS4gSXQgaXMgcG9zc2libGUgdG8gaGF2ZQogICAgIyBpbmNvbWluZyBlbXB0eSBidW5kbGVzIGFmdGVyIHRoZSBvdXRwdXQgaXMgcHJvZHVjZWQsIHRoZXNlIGJ1bmRsZXMgd2lsbCBiZQogICAgIyBpZ25vcmVkIGFuZCB3b3VsZCBub3QgZ2VuZXJhdGUgYWRkaXRpb25hbCBvdXRwdXQgZmlsZXMuCiAgICAjIFRPRE8oYWx0YXkpOiBEbyBub3Qgd2FpdCB1bnRpbCB0aGUgbGFzdCBidW5kbGUgdG8gd3JpdGUgaW4gYSBzaW5nbGUgc2hhcmQuCiAgICBpZiBzZWxmLl9pc19maW5hbF9idW5kbGU6CiAgICAgIGVsZW1lbnRzID0gc2VsZi5nbG9iYWxfc3RhdGUuZ2V0X3N0YXRlKAogICAgICAgICAgTm9uZSwgX05hdGl2ZVdyaXRlRXZhbHVhdG9yLkVMRU1FTlRTX1RBRykKICAgICAgaWYgc2VsZi5faGFzX2FscmVhZHlfcHJvZHVjZWRfb3V0cHV0OgogICAgICAgICMgSWdub3JlIGVtcHR5IGJ1bmRsZXMgdGhhdCBhcnJpdmUgYWZ0ZXIgdGhlIG91dHB1dCBpcyBwcm9kdWNlZC4KICAgICAgICBhc3NlcnQgZWxlbWVudHMgPT0gW10KICAgICAgZWxzZToKICAgICAgICBzZWxmLl9zaW5rLnBpcGVsaW5lX29wdGlvbnMgPSBzZWxmLl9ldmFsdWF0aW9uX2NvbnRleHQucGlwZWxpbmVfb3B0aW9ucwogICAgICAgIHdpdGggc2VsZi5fc2luay53cml0ZXIoKSBhcyB3cml0ZXI6CiAgICAgICAgICBmb3IgdiBpbiBlbGVtZW50czoKICAgICAgICAgICAgd3JpdGVyLldyaXRlKHYudmFsdWUpCiAgICAgIGhvbGQgPSBXYXRlcm1hcmtNYW5hZ2VyLldBVEVSTUFSS19QT1NfSU5GCiAgICBlbHNlOgogICAgICBob2xkID0gV2F0ZXJtYXJrTWFuYWdlci5XQVRFUk1BUktfTkVHX0lORgogICAgICBzZWxmLmdsb2JhbF9zdGF0ZS5zZXRfdGltZXIoCiAgICAgICAgICBOb25lLCAnJywgVGltZURvbWFpbi5XQVRFUk1BUkssIFdhdGVybWFya01hbmFnZXIuV0FURVJNQVJLX1BPU19JTkYpCgogICAgcmV0dXJuIFRyYW5zZm9ybVJlc3VsdChzZWxmLCBbXSwgW10sIE5vbmUsIHtOb25lOiBob2xkfSkKCgpjbGFzcyBfUHJvY2Vzc0VsZW1lbnRzRXZhbHVhdG9yKF9UcmFuc2Zvcm1FdmFsdWF0b3IpOgogICIiIkFuIGV2YWx1YXRvciBmb3Igc2RmX2RpcmVjdF9ydW5uZXIuUHJvY2Vzc0VsZW1lbnRzIHRyYW5zZm9ybS4iIiIKCiAgIyBNYXhpbXVtIG51bWJlciBvZiBlbGVtZW50cyB0aGF0IHdpbGwgYmUgcHJvZHVjZWQgYnkgYSBTcGxpdHRhYmxlIERvRm4gYmVmb3JlCiAgIyBhIGNoZWNrcG9pbnQgaXMgcmVxdWVzdGVkIGJ5IHRoZSBydW5uZXIuCiAgREVGQVVMVF9NQVhfTlVNX09VVFBVVFMgPSAxMDAKICAjIE1heGltdW0gZHVyYXRpb24gYSBTcGxpdHRhYmxlIERvRm4gd2lsbCBwcm9jZXNzIGFuIGVsZW1lbnQgYmVmb3JlIGEKICAjIGNoZWNrcG9pbnQgaXMgcmVxdWVzdGVkIGJ5IHRoZSBydW5uZXIuCiAgREVGQVVMVF9NQVhfRFVSQVRJT04gPSAxCgogIGRlZiBfX2luaXRfXyhzZWxmLCBldmFsdWF0aW9uX2NvbnRleHQsIGFwcGxpZWRfcHRyYW5zZm9ybSwKICAgICAgICAgICAgICAgaW5wdXRfY29tbWl0dGVkX2J1bmRsZSwgc2lkZV9pbnB1dHMpOgogICAgc3VwZXIoX1Byb2Nlc3NFbGVtZW50c0V2YWx1YXRvciwgc2VsZikuX19pbml0X18oCiAgICAgICAgZXZhbHVhdGlvbl9jb250ZXh0LCBhcHBsaWVkX3B0cmFuc2Zvcm0sIGlucHV0X2NvbW1pdHRlZF9idW5kbGUsCiAgICAgICAgc2lkZV9pbnB1dHMpCgogICAgcHJvY2Vzc19lbGVtZW50c190cmFuc2Zvcm0gPSBhcHBsaWVkX3B0cmFuc2Zvcm0udHJhbnNmb3JtCiAgICBhc3NlcnQgaXNpbnN0YW5jZShwcm9jZXNzX2VsZW1lbnRzX3RyYW5zZm9ybSwgUHJvY2Vzc0VsZW1lbnRzKQoKICAgICMgUmVwbGFjaW5nIHRoZSBkb19mbiBvZiB0aGUgdHJhbnNmb3JtIHdpdGggYSB3cmFwcGVyIGRvX2ZuIHRoYXQgcGVyZm9ybXMKICAgICMgU0RGIG1hZ2ljLgogICAgdHJhbnNmb3JtID0gYXBwbGllZF9wdHJhbnNmb3JtLnRyYW5zZm9ybQogICAgc2RmID0gdHJhbnNmb3JtLnNkZgogICAgc2VsZi5fcHJvY2Vzc19mbiA9IHRyYW5zZm9ybS5uZXdfcHJvY2Vzc19mbihzZGYpCiAgICB0cmFuc2Zvcm0uZG9mbiA9IHNlbGYuX3Byb2Nlc3NfZm4KCiAgICBhc3NlcnQgaXNpbnN0YW5jZShzZWxmLl9wcm9jZXNzX2ZuLCBQcm9jZXNzRm4pCgogICAgc2VsZi5fcHJvY2Vzc19mbi5zdGVwX2NvbnRleHQgPSBzZWxmLl9zdGVwX2NvbnRleHQKCiAgICBwcm9jZXNzX2VsZW1lbnRfaW52b2tlciA9ICgKICAgICAgICBTREZQcm9jZXNzRWxlbWVudEludm9rZXIoCiAgICAgICAgICAgIG1heF9udW1fb3V0cHV0cz1zZWxmLkRFRkFVTFRfTUFYX05VTV9PVVRQVVRTLAogICAgICAgICAgICBtYXhfZHVyYXRpb249c2VsZi5ERUZBVUxUX01BWF9EVVJBVElPTikpCiAgICBzZWxmLl9wcm9jZXNzX2ZuLnNldF9wcm9jZXNzX2VsZW1lbnRfaW52b2tlcihwcm9jZXNzX2VsZW1lbnRfaW52b2tlcikKCiAgICBzZWxmLl9wYXJfZG9fZXZhbHVhdG9yID0gX1BhckRvRXZhbHVhdG9yKAogICAgICAgIGV2YWx1YXRpb25fY29udGV4dCwgYXBwbGllZF9wdHJhbnNmb3JtLCBpbnB1dF9jb21taXR0ZWRfYnVuZGxlLAogICAgICAgIHNpZGVfaW5wdXRzLCBwZXJmb3JtX2RvZm5fcGlja2xlX3Rlc3Q9RmFsc2UpCiAgICBzZWxmLmtleWVkX2hvbGRzID0ge30KCiAgZGVmIHN0YXJ0X2J1bmRsZShzZWxmKToKICAgIHNlbGYuX3Bhcl9kb19ldmFsdWF0b3Iuc3RhcnRfYnVuZGxlKCkKCiAgZGVmIHByb2Nlc3NfZWxlbWVudChzZWxmLCBlbGVtZW50KToKICAgIGFzc2VydCBpc2luc3RhbmNlKGVsZW1lbnQsIFdpbmRvd2VkVmFsdWUpCiAgICBhc3NlcnQgbGVuKGVsZW1lbnQud2luZG93cykgPT0gMQogICAgd2luZG93ID0gZWxlbWVudC53aW5kb3dzWzBdCiAgICBpZiBpc2luc3RhbmNlKGVsZW1lbnQudmFsdWUsIEtleWVkV29ya0l0ZW0pOgogICAgICBrZXkgPSBlbGVtZW50LnZhbHVlLmVuY29kZWRfa2V5CiAgICBlbHNlOgogICAgICAjIElmIG5vdCBhIGBLZXllZFdvcmtJdGVtYCwgdGhpcyBtdXN0IGJlIGEgdHVwbGUgd2hlcmUga2V5IGlzIGEgcmFuZG9tbHkKICAgICAgIyBnZW5lcmF0ZWQga2V5IGFuZCB0aGUgdmFsdWUgaXMgYSBgV2luZG93ZWRWYWx1ZWAgdGhhdCBjb250YWlucyBhbgogICAgICAjIGBFbGVtZW50QW5kUmVzdHJpY3Rpb25gIG9iamVjdC4KICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZWxlbWVudC52YWx1ZSwgdHVwbGUpCiAgICAgIGtleSA9IGVsZW1lbnQudmFsdWVbMF0KCiAgICBzZWxmLl9wYXJfZG9fZXZhbHVhdG9yLnByb2Nlc3NfZWxlbWVudChlbGVtZW50KQoKICAgIHN0YXRlID0gc2VsZi5fc3RlcF9jb250ZXh0LmdldF9rZXllZF9zdGF0ZShrZXkpCiAgICBzZWxmLmtleWVkX2hvbGRzW2tleV0gPSBzdGF0ZS5nZXRfc3RhdGUoCiAgICAgICAgd2luZG93LCBzZWxmLl9wcm9jZXNzX2ZuLndhdGVybWFya19ob2xkX3RhZykKCiAgZGVmIGZpbmlzaF9idW5kbGUoc2VsZik6CiAgICBwYXJfZG9fcmVzdWx0ID0gc2VsZi5fcGFyX2RvX2V2YWx1YXRvci5maW5pc2hfYnVuZGxlKCkKCiAgICB0cmFuc2Zvcm1fcmVzdWx0ID0gVHJhbnNmb3JtUmVzdWx0KAogICAgICAgIHNlbGYsIHBhcl9kb19yZXN1bHQudW5jb21taXR0ZWRfb3V0cHV0X2J1bmRsZXMsCiAgICAgICAgcGFyX2RvX3Jlc3VsdC51bnByb2Nlc3NlZF9idW5kbGVzLCBwYXJfZG9fcmVzdWx0LmNvdW50ZXJzLAogICAgICAgIHBhcl9kb19yZXN1bHQua2V5ZWRfd2F0ZXJtYXJrX2hvbGRzLAogICAgICAgIHBhcl9kb19yZXN1bHQudW5kZWNsYXJlZF90YWdfdmFsdWVzKQogICAgZm9yIGtleSBpbiBzZWxmLmtleWVkX2hvbGRzOgogICAgICB0cmFuc2Zvcm1fcmVzdWx0LmtleWVkX3dhdGVybWFya19ob2xkc1trZXldID0gc2VsZi5rZXllZF9ob2xkc1trZXldCiAgICByZXR1cm4gdHJhbnNmb3JtX3Jlc3VsdAp9cnqEAAAoWBwAAABfVHJhbnNmb3JtRXZhbHVhdG9yLl9faW5pdF9fWAMAAABkZWZLykvUh1gaAAAAX0ZsYXR0ZW5FdmFsdWF0b3IuX19pbml0X19YAwAAAGRlZk0DAk0JAodYHAAAAF9UYWdnZWRSZWNlaXZlcnMuX19taXNzaW5nX19YAwAAAGRlZk0vAk0zAodYKgAAAF9UYWdnZWRSZWNlaXZlcnMuX0luTWVtb3J5UmVjZWl2ZXIucmVjZWl2ZVgDAAAAZGVmTSwCTS4Ch1gdAAAAX1B1YlN1YlJlYWRFdmFsdWF0b3IuX19pbml0X19YAwAAAGRlZk2kAU2yAYdYKQAAAF9UcmFuc2Zvcm1FdmFsdWF0b3IucHJvY2Vzc190aW1lcl93cmFwcGVyWAMAAABkZWZNAAFNDQGHWCIAAABfUHJvY2Vzc0VsZW1lbnRzRXZhbHVhdG9yLl9faW5pdF9fWAMAAABkZWZNnANNugOHWCEAAABfVGVzdFN0cmVhbUV2YWx1YXRvci5zdGFydF9idW5kbGVYAwAAAGRlZk1PAU1TAYdYJAAAAF9TdHJlYW1pbmdHcm91cEFsc29CeVdpbmRvd0V2YWx1YXRvclgFAAAAY2xhc3NNFgNNUQOHWDIAAABfU3RyZWFtaW5nR3JvdXBBbHNvQnlXaW5kb3dFdmFsdWF0b3IuZmluaXNoX2J1bmRsZVgDAAAAZGVmTUgDTVEDh1gjAAAAVHJhbnNmb3JtRXZhbHVhdG9yUmVnaXN0cnkuX19pbml0X19YAwAAAGRlZktMS2CHWBsAAABSb290QnVuZGxlUHJvdmlkZXIuX19pbml0X19YAwAAAGRlZkukS6eHWCMAAABfTmF0aXZlV3JpdGVFdmFsdWF0b3IucHJvY2Vzc190aW1lclgDAAAAZGVmTW8DTXIDh1gsAAAAX1RyYW5zZm9ybUV2YWx1YXRvci5fc3BsaXRfbGlzdF9pbnRvX2J1bmRsZXNYAwAAAGRlZkvgS/uHWDsAAABfQm91bmRlZFJlYWRFdmFsdWF0b3IuZmluaXNoX2J1bmRsZS5fcmVhZF92YWx1ZXNfdG9fYnVuZGxlc1gDAAAAZGVmTTEBTTYBh1gdAAAAX1Rlc3RTdHJlYW1FdmFsdWF0b3IuX19pbml0X19YAwAAAGRlZk1HAU1OAYdYFQAAAF9Cb3VuZGVkUmVhZEV2YWx1YXRvclgFAAAAY2xhc3NNHgFNQgGHWCMAAABfVHJhbnNmb3JtRXZhbHVhdG9yLnByb2Nlc3NfZWxlbWVudFgDAAAAZGVmTRUBTRgBh1gkAAAAX1B1YlN1YlJlYWRFdmFsdWF0b3IucHJvY2Vzc19lbGVtZW50WAMAAABkZWZNvQFNvwGHWCMAAABfVHJhbnNmb3JtRXZhbHVhdG9yLl9leHBhbmRfb3V0cHV0c1gDAAAAZGVmS9VL34dYEAAAAF9UYWdnZWRSZWNlaXZlcnNYBQAAAGNsYXNzTRcCTTMCh1gUAAAAX1Rlc3RTdHJlYW1FdmFsdWF0b3JYBQAAAGNsYXNzTUQBTXkBh1glAAAAX05hdGl2ZVdyaXRlRXZhbHVhdG9yLnByb2Nlc3NfZWxlbWVudFgDAAAAZGVmTXMDTXYDh1gpAAAAX1Byb2Nlc3NFbGVtZW50c0V2YWx1YXRvci5wcm9jZXNzX2VsZW1lbnRYAwAAAGRlZk2+A03QA4dYIQAAAF9TdHJlYW1pbmdHcm91cEJ5S2V5T25seUV2YWx1YXRvclgFAAAAY2xhc3NN4AJNFAOHWCoAAABEZWZhdWx0Um9vdEJ1bmRsZVByb3ZpZGVyLmdldF9yb290X2J1bmRsZXNYAwAAAGRlZkuvS7SHWBIAAABSb290QnVuZGxlUHJvdmlkZXJYBQAAAGNsYXNzS6FLqodYIgAAAF9QdWJTdWJSZWFkRXZhbHVhdG9yLmZpbmlzaF9idW5kbGVYAwAAAGRlZk3kAU3+AYdYHgAAAF9OYXRpdmVXcml0ZUV2YWx1YXRvci5fX2luaXRfX1gDAAAAZGVmTVgDTWEDh1gyAAAAX05hdGl2ZVdyaXRlRXZhbHVhdG9yLl9oYXNfYWxyZWFkeV9wcm9kdWNlZF9vdXRwdXRYAwAAAGRlZk1nA01rA4dYIgAAAF9OYXRpdmVXcml0ZUV2YWx1YXRvci5zdGFydF9idW5kbGVYAwAAAGRlZk1sA01uA4dYHQAAAF9QYXJEb0V2YWx1YXRvci5wcm9jZXNzX3RpbWVyWAMAAABkZWZNcAJNdwKHWCMAAABfUHViU3ViU3Vic2NyaXB0aW9uV3JhcHBlci5fX2luaXRfX1gDAAAAZGVmTX4BTZgBh1ggAAAAX1RyYW5zZm9ybUV2YWx1YXRvci5zdGFydF9idW5kbGVYAwAAAGRlZkv8S/+HWBQAAABfUHViU3ViUmVhZEV2YWx1YXRvclgFAAAAY2xhc3NNngFN/gGHWDEAAABfU3RyZWFtaW5nR3JvdXBCeUtleU9ubHlFdmFsdWF0b3IucHJvY2Vzc19lbGVtZW50WAMAAABkZWZN/QJNBwOHWCMAAABSb290QnVuZGxlUHJvdmlkZXIuZ2V0X3Jvb3RfYnVuZGxlc1gDAAAAZGVmS6hLqodYJgAAAF9OYXRpdmVXcml0ZUV2YWx1YXRvci5faXNfZmluYWxfYnVuZGxlWAMAAABkZWZNYgNNZgOHWCMAAABfTmF0aXZlV3JpdGVFdmFsdWF0b3IuZmluaXNoX2J1bmRsZVgDAAAAZGVmTXcDTZADh1gZAAAAX1RhZ2dlZFJlY2VpdmVycy5fX2luaXRfX1gDAAAAZGVmTRoCTR4Ch1gfAAAAX0ZsYXR0ZW5FdmFsdWF0b3IuZmluaXNoX2J1bmRsZVgDAAAAZGVmTRICTRUCh1goAAAAVHJhbnNmb3JtRXZhbHVhdG9yUmVnaXN0cnkuZ2V0X2V2YWx1YXRvclgDAAAAZGVmS2FLdYdYGgAAAF9QdWJTdWJTdWJzY3JpcHRpb25XcmFwcGVyWAUAAABjbGFzc017AU2cAYdYIgAAAF9UZXN0U3RyZWFtRXZhbHVhdG9yLmZpbmlzaF9idW5kbGVYAwAAAGRlZk1sAU15AYdYNQAAAF9Hcm91cEJ5S2V5T25seUV2YWx1YXRvci5maW5pc2hfYnVuZGxlLmxlbl9lbGVtZW50X2ZuWAMAAABkZWZNzAJNzwKHWBwAAABfUGFyRG9FdmFsdWF0b3Iuc3RhcnRfYnVuZGxlWAMAAABkZWZNQgJNbwKHWCEAAABfVHJhbnNmb3JtRXZhbHVhdG9yLnByb2Nlc3NfdGltZXJYAwAAAGRlZk0OAU0UAYdYGgAAAFRyYW5zZm9ybUV2YWx1YXRvclJlZ2lzdHJ5WAUAAABjbGFzc0tES5+HWB4AAABfQm91bmRlZFJlYWRFdmFsdWF0b3IuX19pbml0X19YAwAAAGRlZk0kAU0sAYdYIQAAAF9UcmFuc2Zvcm1FdmFsdWF0b3IuZmluaXNoX2J1bmRsZVgDAAAAZGVmTRkBTRwBh1gTAAAAX1RyYW5zZm9ybUV2YWx1YXRvclgFAAAAY2xhc3NLx00cAYdYMQAAAF9TdHJlYW1pbmdHcm91cEFsc29CeVdpbmRvd0V2YWx1YXRvci5zdGFydF9idW5kbGVYAwAAAGRlZk0lA000A4dYJQAAAF9Hcm91cEJ5S2V5T25seUV2YWx1YXRvci5zdGFydF9idW5kbGVYAwAAAGRlZk2XAk2kAodYJgAAAF9QdWJTdWJSZWFkRXZhbHVhdG9yLl9yZWFkX2Zyb21fcHVic3ViWAMAAABkZWZNwAFN4wGHWB0AAABfUGFyRG9FdmFsdWF0b3IuZmluaXNoX2J1bmRsZVgDAAAAZGVmTXsCTYMCh1gzAAAAX1B1YlN1YlJlYWRFdmFsdWF0b3IuX3JlYWRfZnJvbV9wdWJzdWIuX2dldF9lbGVtZW50WAMAAABkZWZNywFN3AGHWCEAAABfUHViU3ViUmVhZEV2YWx1YXRvci5zdGFydF9idW5kbGVYAwAAAGRlZk26AU28AYdYJgAAAF9Hcm91cEJ5S2V5T25seUV2YWx1YXRvci5maW5pc2hfYnVuZGxlWAMAAABkZWZNuAJN3gKHWCYAAABfUHJvY2Vzc0VsZW1lbnRzRXZhbHVhdG9yLnN0YXJ0X2J1bmRsZVgDAAAAZGVmTbsDTb0Dh1gYAAAAX0dyb3VwQnlLZXlPbmx5RXZhbHVhdG9yWAUAAABjbGFzc02FAk3eAodYKwAAAF9UYWdnZWRSZWNlaXZlcnMuX0luTWVtb3J5UmVjZWl2ZXIuX19pbml0X19YAwAAAGRlZk0oAk0rAodYMwAAAFRyYW5zZm9ybUV2YWx1YXRvclJlZ2lzdHJ5LmdldF9yb290X2J1bmRsZV9wcm92aWRlclgDAAAAZGVmS3ZLgYdYKgAAAF9TdHJlYW1pbmdHcm91cEJ5S2V5T25seUV2YWx1YXRvci5fX2luaXRfX1gDAAAAZGVmTeoCTfACh1giAAAAX1B1YlN1YlN1YnNjcmlwdGlvbldyYXBwZXIuX19kZWxfX1gDAAAAZGVmTZkBTZwBh1gnAAAAX1Byb2Nlc3NFbGVtZW50c0V2YWx1YXRvci5maW5pc2hfYnVuZGxlWAMAAABkZWZN0QNN3AOHWA8AAABfUGFyRG9FdmFsdWF0b3JYBQAAAGNsYXNzTTUCTYMCh1gdAAAAX1RhZ2dlZFJlY2VpdmVycy5OdWxsUmVjZWl2ZXJYBQAAAGNsYXNzTR8CTSQCh1goAAAAX0dyb3VwQnlLZXlPbmx5RXZhbHVhdG9yLnByb2Nlc3NfZWxlbWVudFgDAAAAZGVmTakCTbcCh1gZAAAAX1Byb2Nlc3NFbGVtZW50c0V2YWx1YXRvclgFAAAAY2xhc3NNkgNN3AOHWCMAAABfQm91bmRlZFJlYWRFdmFsdWF0b3IuZmluaXNoX2J1bmRsZVgDAAAAZGVmTS0BTUIBh1guAAAAX1N0cmVhbWluZ0dyb3VwQnlLZXlPbmx5RXZhbHVhdG9yLnN0YXJ0X2J1bmRsZVgDAAAAZGVmTfECTfwCh1ghAAAAX0ZsYXR0ZW5FdmFsdWF0b3IucHJvY2Vzc19lbGVtZW50WAMAAABkZWZNDwJNEQKHWBgAAABfUGFyRG9FdmFsdWF0b3IuX19pbml0X19YAwAAAGRlZk04Ak1BAodYIQAAAF9Hcm91cEJ5S2V5T25seUV2YWx1YXRvci5fX2luaXRfX1gDAAAAZGVmTYwCTZICh1gtAAAAX1N0cmVhbWluZ0dyb3VwQWxzb0J5V2luZG93RXZhbHVhdG9yLl9faW5pdF9fWAMAAABkZWZNHgNNJAOHWB4AAABfRmxhdHRlbkV2YWx1YXRvci5zdGFydF9idW5kbGVYAwAAAGRlZk0KAk0OAodYGQAAAERlZmF1bHRSb290QnVuZGxlUHJvdmlkZXJYBQAAAGNsYXNzS6xLtIdYKQAAAF9Hcm91cEJ5S2V5T25seUV2YWx1YXRvci5faXNfZmluYWxfYnVuZGxlWAMAAABkZWZNkwJNlgKHWCYAAABfR3JvdXBCeUtleU9ubHlFdmFsdWF0b3IucHJvY2Vzc190aW1lclgDAAAAZGVmTaUCTagCh1giAAAAX1RhZ2dlZFJlY2VpdmVycy5fSW5NZW1vcnlSZWNlaXZlclgFAAAAY2xhc3NNJQJNLgKHWB0AAABfVGVzdFN0cmVhbVJvb3RCdW5kbGVQcm92aWRlclgFAAAAY2xhc3NLtkvFh1guAAAAX1Rlc3RTdHJlYW1Sb290QnVuZGxlUHJvdmlkZXIuZ2V0X3Jvb3RfYnVuZGxlc1gDAAAAZGVmS7lLxYdYJAAAAF9UZXN0U3RyZWFtRXZhbHVhdG9yLnByb2Nlc3NfZWxlbWVudFgDAAAAZGVmTVQBTWsBh1glAAAAX1B1YlN1YlJlYWRFdmFsdWF0b3IuZ2V0X3N1YnNjcmlwdGlvblgDAAAAZGVmTbMBTbkBh1gVAAAAX05hdGl2ZVdyaXRlRXZhbHVhdG9yWAUAAABjbGFzc01TA02QA4dYJQAAAF9UYWdnZWRSZWNlaXZlcnMuTnVsbFJlY2VpdmVyLnJlY2VpdmVYAwAAAGRlZk0iAk0kAodYMgAAAFRyYW5zZm9ybUV2YWx1YXRvclJlZ2lzdHJ5LnNob3VsZF9leGVjdXRlX3NlcmlhbGx5WAMAAABkZWZLgkufh1gvAAAAX1N0cmVhbWluZ0dyb3VwQnlLZXlPbmx5RXZhbHVhdG9yLmZpbmlzaF9idW5kbGVYAwAAAGRlZk0IA00UA4dYHwAAAF9QYXJEb0V2YWx1YXRvci5wcm9jZXNzX2VsZW1lbnRYAwAAAGRlZk14Ak16AodYEQAAAF9GbGF0dGVuRXZhbHVhdG9yWAUAAABjbGFzc00AAk0VAodYNAAAAF9TdHJlYW1pbmdHcm91cEFsc29CeVdpbmRvd0V2YWx1YXRvci5wcm9jZXNzX2VsZW1lbnRYAwAAAGRlZk01A01HA4d1fXJ7hAAAKFgqAAAARGVmYXVsdFJvb3RCdW5kbGVQcm92aWRlci5nZXRfcm9vdF9idW5kbGVzahpqAABYMwAAAFRyYW5zZm9ybUV2YWx1YXRvclJlZ2lzdHJ5LmdldF9yb290X2J1bmRsZV9wcm92aWRlcmoaagAAWCMAAABSb290QnVuZGxlUHJvdmlkZXIuZ2V0X3Jvb3RfYnVuZGxlc2oaagAAWBoAAABUcmFuc2Zvcm1FdmFsdWF0b3JSZWdpc3RyeWoaagAAWDIAAABUcmFuc2Zvcm1FdmFsdWF0b3JSZWdpc3RyeS5zaG91bGRfZXhlY3V0ZV9zZXJpYWxseWoaagAAWBIAAABSb290QnVuZGxlUHJvdmlkZXJqGmoAAFgoAAAAVHJhbnNmb3JtRXZhbHVhdG9yUmVnaXN0cnkuZ2V0X2V2YWx1YXRvcmoaagAAWBkAAABEZWZhdWx0Um9vdEJ1bmRsZVByb3ZpZGVyahpqAAB1an1pAABYLgAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnRyYW5zZm9ybV9ldmFsdWF0b3JyfIQAAIWBcn2EAAB9cn6EAABidFUjYXBhY2hlX2JlYW0uaW50ZXJuYWwuZ2NwLmpzb25fdmFsdWUoWNoXAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkpTT04gY29udmVyc2lvbiB1dGlsaXR5IGZ1bmN0aW9ucy4iIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0Cgpmcm9tIHBhc3QuYnVpbHRpbnMgaW1wb3J0IGxvbmcKZnJvbSBwYXN0LmJ1aWx0aW5zIGltcG9ydCB1bmljb2RlCgpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIgaW1wb3J0IFZhbHVlUHJvdmlkZXIKCiMgUHJvdGVjdCBhZ2FpbnN0IGVudmlyb25tZW50cyB3aGVyZSBhcGl0b29scyBsaWJyYXJ5IGlzIG5vdCBhdmFpbGFibGUuCiMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCnRyeToKICBmcm9tIGFwaXRvb2xzLmJhc2UucHkgaW1wb3J0IGV4dHJhX3R5cGVzCmV4Y2VwdCBJbXBvcnRFcnJvcjoKICBleHRyYV90eXBlcyA9IE5vbmUKIyBweWxpbnQ6IGVuYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbgoKCl9NQVhJTlQ2NCA9ICgxIDw8IDYzKSAtIDEKX01JTklOVDY0ID0gLSAoMSA8PCA2MykKCgpkZWYgZ2V0X3R5cGVkX3ZhbHVlX2Rlc2NyaXB0b3Iob2JqKToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIENvbnZlcnRzIGEgYmFzaWMgdHlwZSBpbnRvIGEgQHR5cGUvdmFsdWUgZGljdGlvbmFyeS4KCiAgQXJnczoKICAgIG9iajogQSBiYXNlc3RyaW5nLCBib29sLCBpbnQsIG9yIGZsb2F0IHRvIGJlIGNvbnZlcnRlZC4KCiAgUmV0dXJuczoKICAgIEEgZGljdGlvbmFyeSBjb250YWluaW5nIHRoZSBrZXlzIGBgQHR5cGVgYCBhbmQgYGB2YWx1ZWBgIHdpdGggdGhlIHZhbHVlIGZvcgogICAgdGhlIGBgQHR5cGVgYCBvZiBhcHByb3ByaWF0ZSB0eXBlLgoKICBSYWlzZXM6CiAgICB+ZXhjZXB0aW9ucy5UeXBlRXJyb3I6IGlmIHRoZSBQeXRob24gb2JqZWN0IGhhcyBhIHR5cGUgdGhhdCBpcyBub3QKICAgICAgc3VwcG9ydGVkLgogICIiIgogIGlmIGlzaW5zdGFuY2Uob2JqLCAoc3RyLCB1bmljb2RlKSk6CiAgICB0eXBlX25hbWUgPSAnVGV4dCcKICBlbGlmIGlzaW5zdGFuY2Uob2JqLCBib29sKToKICAgIHR5cGVfbmFtZSA9ICdCb29sZWFuJwogIGVsaWYgaXNpbnN0YW5jZShvYmosIGludCk6CiAgICB0eXBlX25hbWUgPSAnSW50ZWdlcicKICBlbGlmIGlzaW5zdGFuY2Uob2JqLCBmbG9hdCk6CiAgICB0eXBlX25hbWUgPSAnRmxvYXQnCiAgZWxzZToKICAgIHJhaXNlIFR5cGVFcnJvcignQ2Fubm90IGdldCBhIHR5cGUgZGVzY3JpcHRvciBmb3IgJXMuJyAlIHJlcHIob2JqKSkKICByZXR1cm4geydAdHlwZSc6ICdodHRwOi8vc2NoZW1hLm9yZy8lcycgJSB0eXBlX25hbWUsICd2YWx1ZSc6IG9ian0KCgpkZWYgdG9fanNvbl92YWx1ZShvYmosIHdpdGhfdHlwZT1GYWxzZSk6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBDb252ZXJ0cyBQeXRob24gb2JqZWN0cyBpbnRvIGV4dHJhX3R5cGVzLkpzb25WYWx1ZSBvYmplY3RzLgoKICBBcmdzOgogICAgb2JqOiBQeXRob24gb2JqZWN0IHRvIGJlIGNvbnZlcnRlZC4gQ2FuIGJlIDpkYXRhOmBOb25lYC4KICAgIHdpdGhfdHlwZTogSWYgdHJ1ZSB0aGVuIHRoZSBiYXNpYyB0eXBlcyAoYGBzdHJpbmdgYCwgYGBpbnRgYCwgYGBmbG9hdGBgLAogICAgICBgYGJvb2xgYCkgd2lsbCBiZSB3cmFwcGVkIGluIGBgQHR5cGU6dmFsdWVgYCBkaWN0aW9uYXJpZXMuIE90aGVyd2lzZSB0aGUKICAgICAgc3RyYWlnaHQgdmFsdWUgaXMgZW5jb2RlZCBpbnRvIGEgYGBKc29uVmFsdWVgYC4KCiAgUmV0dXJuczoKICAgIEEgYGBKc29uVmFsdWVgYCBvYmplY3QgdXNpbmcgYGBKc29uVmFsdWVgYCwgYGBKc29uQXJyYXlgYCBhbmQgYGBKc29uT2JqZWN0YGAKICAgIHR5cGVzIGZvciB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMsIGxpc3RzLCBvciBkaWN0aW9uYXJpZXMuCgogIFJhaXNlczoKICAgIH5leGNlcHRpb25zLlR5cGVFcnJvcjogaWYgdGhlIFB5dGhvbiBvYmplY3QgY29udGFpbnMgYSB0eXBlIHRoYXQgaXMgbm90CiAgICAgIHN1cHBvcnRlZC4KCiAgVGhlIHR5cGVzIHN1cHBvcnRlZCBhcmUgYGBzdHJgYCwgYGBib29sYGAsIGBgbGlzdGBgLCBgYHR1cGxlYGAsIGBgZGljdGBgLCBhbmQKICBgYE5vbmVgYC4gVGhlIERhdGFmbG93IEFQSSByZXF1aXJlcyBKc29uVmFsdWUocykgaW4gbWFueSBwbGFjZXMsIGFuZCBpdCBpcwogIHF1aXRlIGNvbnZlbmllbnQgdG8gYmUgYWJsZSB0byBzcGVjaWZ5IHRoZXNlIGhpZXJhcmNoaWNhbCBvYmplY3RzIHVzaW5nCiAgUHl0aG9uIHN5bnRheC4KICAiIiIKICBpZiBvYmogaXMgTm9uZToKICAgIHJldHVybiBleHRyYV90eXBlcy5Kc29uVmFsdWUoaXNfbnVsbD1UcnVlKQogIGVsaWYgaXNpbnN0YW5jZShvYmosIChsaXN0LCB0dXBsZSkpOgogICAgcmV0dXJuIGV4dHJhX3R5cGVzLkpzb25WYWx1ZSgKICAgICAgICBhcnJheV92YWx1ZT1leHRyYV90eXBlcy5Kc29uQXJyYXkoCiAgICAgICAgICAgIGVudHJpZXM9W3RvX2pzb25fdmFsdWUobywgd2l0aF90eXBlPXdpdGhfdHlwZSkgZm9yIG8gaW4gb2JqXSkpCiAgZWxpZiBpc2luc3RhbmNlKG9iaiwgZGljdCk6CiAgICBqc29uX29iamVjdCA9IGV4dHJhX3R5cGVzLkpzb25PYmplY3QoKQogICAgZm9yIGssIHYgaW4gb2JqLml0ZW1zKCk6CiAgICAgIGpzb25fb2JqZWN0LnByb3BlcnRpZXMuYXBwZW5kKAogICAgICAgICAgZXh0cmFfdHlwZXMuSnNvbk9iamVjdC5Qcm9wZXJ0eSgKICAgICAgICAgICAgICBrZXk9aywgdmFsdWU9dG9fanNvbl92YWx1ZSh2LCB3aXRoX3R5cGU9d2l0aF90eXBlKSkpCiAgICByZXR1cm4gZXh0cmFfdHlwZXMuSnNvblZhbHVlKG9iamVjdF92YWx1ZT1qc29uX29iamVjdCkKICBlbGlmIHdpdGhfdHlwZToKICAgIHJldHVybiB0b19qc29uX3ZhbHVlKGdldF90eXBlZF92YWx1ZV9kZXNjcmlwdG9yKG9iaiksIHdpdGhfdHlwZT1GYWxzZSkKICBlbGlmIGlzaW5zdGFuY2Uob2JqLCAoc3RyLCB1bmljb2RlKSk6CiAgICByZXR1cm4gZXh0cmFfdHlwZXMuSnNvblZhbHVlKHN0cmluZ192YWx1ZT1vYmopCiAgZWxpZiBpc2luc3RhbmNlKG9iaiwgYnl0ZXMpOgogICAgcmV0dXJuIGV4dHJhX3R5cGVzLkpzb25WYWx1ZShzdHJpbmdfdmFsdWU9b2JqLmRlY29kZSgndXRmOCcpKQogIGVsaWYgaXNpbnN0YW5jZShvYmosIGJvb2wpOgogICAgcmV0dXJuIGV4dHJhX3R5cGVzLkpzb25WYWx1ZShib29sZWFuX3ZhbHVlPW9iaikKICBlbGlmIGlzaW5zdGFuY2Uob2JqLCAoaW50LCBsb25nKSk6CiAgICBpZiBfTUlOSU5UNjQgPD0gb2JqIDw9IF9NQVhJTlQ2NDoKICAgICAgcmV0dXJuIGV4dHJhX3R5cGVzLkpzb25WYWx1ZShpbnRlZ2VyX3ZhbHVlPW9iaikKICAgIGVsc2U6CiAgICAgIHJhaXNlIFR5cGVFcnJvcignQ2FuIG5vdCBlbmNvZGUge30gYXMgYSA2NC1iaXQgaW50ZWdlcicuZm9ybWF0KG9iaikpCiAgZWxpZiBpc2luc3RhbmNlKG9iaiwgZmxvYXQpOgogICAgcmV0dXJuIGV4dHJhX3R5cGVzLkpzb25WYWx1ZShkb3VibGVfdmFsdWU9b2JqKQogIGVsaWYgaXNpbnN0YW5jZShvYmosIFZhbHVlUHJvdmlkZXIpOgogICAgaWYgb2JqLmlzX2FjY2Vzc2libGUoKToKICAgICAgcmV0dXJuIHRvX2pzb25fdmFsdWUob2JqLmdldCgpKQogICAgcmV0dXJuIGV4dHJhX3R5cGVzLkpzb25WYWx1ZShpc19udWxsPVRydWUpCiAgZWxzZToKICAgIHJhaXNlIFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgJXMgdG8gYSBKU09OIHZhbHVlLicgJSByZXByKG9iaikpCgoKZGVmIGZyb21fanNvbl92YWx1ZSh2KToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIENvbnZlcnRzIGBgZXh0cmFfdHlwZXMuSnNvblZhbHVlYGAgb2JqZWN0cyBpbnRvIFB5dGhvbiBvYmplY3RzLgoKICBBcmdzOgogICAgdjogYGBKc29uVmFsdWVgYCBvYmplY3QgdG8gYmUgY29udmVydGVkLgoKICBSZXR1cm5zOgogICAgQSBQeXRob24gb2JqZWN0IHN0cnVjdHVyZWQgYXMgdmFsdWVzLCBsaXN0cywgYW5kIGRpY3Rpb25hcmllcyBjb3JyZXNwb25kaW5nCiAgICB0byBgYEpzb25WYWx1ZWBgLCBgYEpzb25BcnJheWBgIGFuZCBgYEpzb25PYmplY3RgYCB0eXBlcy4KCiAgUmFpc2VzOgogICAgfmV4Y2VwdGlvbnMuVHlwZUVycm9yOiBpZiB0aGUgYGBKc29uVmFsdWVgYCBvYmplY3QgY29udGFpbnMgYSB0eXBlIHRoYXQgaXMKICAgICAgbm90IHN1cHBvcnRlZC4KCiAgVGhlIHR5cGVzIHN1cHBvcnRlZCBhcmUgYGBzdHJgYCwgYGBib29sYGAsIGBgbGlzdGBgLCBgYGRpY3RgYCwgYW5kIGBgTm9uZWBgLgogIFRoZSBEYXRhZmxvdyBBUEkgcmV0dXJucyBKc29uVmFsdWUocykgaW4gbWFueSBwbGFjZXMgYW5kIGl0IGlzIHF1aXRlCiAgY29udmVuaWVudCB0byBiZSBhYmxlIHRvIGNvbnZlcnQgdGhlc2UgaGllcmFyY2hpY2FsIG9iamVjdHMgdG8gbXVjaCBzaW1wbGVyCiAgUHl0aG9uIG9iamVjdHMuCiAgIiIiCiAgaWYgaXNpbnN0YW5jZSh2LCBleHRyYV90eXBlcy5Kc29uVmFsdWUpOgogICAgaWYgdi5zdHJpbmdfdmFsdWUgaXMgbm90IE5vbmU6CiAgICAgIHJldHVybiB2LnN0cmluZ192YWx1ZQogICAgZWxpZiB2LmJvb2xlYW5fdmFsdWUgaXMgbm90IE5vbmU6CiAgICAgIHJldHVybiB2LmJvb2xlYW5fdmFsdWUKICAgIGVsaWYgdi5pbnRlZ2VyX3ZhbHVlIGlzIG5vdCBOb25lOgogICAgICByZXR1cm4gdi5pbnRlZ2VyX3ZhbHVlCiAgICBlbGlmIHYuZG91YmxlX3ZhbHVlIGlzIG5vdCBOb25lOgogICAgICByZXR1cm4gdi5kb3VibGVfdmFsdWUKICAgIGVsaWYgdi5hcnJheV92YWx1ZSBpcyBub3QgTm9uZToKICAgICAgcmV0dXJuIGZyb21fanNvbl92YWx1ZSh2LmFycmF5X3ZhbHVlKQogICAgZWxpZiB2Lm9iamVjdF92YWx1ZSBpcyBub3QgTm9uZToKICAgICAgcmV0dXJuIGZyb21fanNvbl92YWx1ZSh2Lm9iamVjdF92YWx1ZSkKICAgIGVsaWYgdi5pc19udWxsOgogICAgICByZXR1cm4gTm9uZQogIGVsaWYgaXNpbnN0YW5jZSh2LCBleHRyYV90eXBlcy5Kc29uQXJyYXkpOgogICAgcmV0dXJuIFtmcm9tX2pzb25fdmFsdWUoZSkgZm9yIGUgaW4gdi5lbnRyaWVzXQogIGVsaWYgaXNpbnN0YW5jZSh2LCBleHRyYV90eXBlcy5Kc29uT2JqZWN0KToKICAgIHJldHVybiB7cC5rZXk6IGZyb21fanNvbl92YWx1ZShwLnZhbHVlKSBmb3IgcCBpbiB2LnByb3BlcnRpZXN9CiAgcmFpc2UgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCAlcyBmcm9tIGEgSlNPTiB2YWx1ZS4nICUgcmVwcih2KSkKfXJ/hAAAKFgNAAAAdG9fanNvbl92YWx1ZVgDAAAAZGVmS0VLf4dYGgAAAGdldF90eXBlZF92YWx1ZV9kZXNjcmlwdG9yWAMAAABkZWZLKEtDh1gPAAAAZnJvbV9qc29uX3ZhbHVlWAMAAABkZWZLgUuqh3V9coCEAAAoWA0AAAB0b19qc29uX3ZhbHVlWCMAAABhcGFjaGVfYmVhbS5pbnRlcm5hbC5nY3AuanNvbl92YWx1ZXKBhAAAWBoAAABnZXRfdHlwZWRfdmFsdWVfZGVzY3JpcHRvcmqBhAAAWA8AAABmcm9tX2pzb25fdmFsdWVqgYQAAHVqfWkAAFgjAAAAYXBhY2hlX2JlYW0uaW50ZXJuYWwuZ2NwLmpzb25fdmFsdWVygoQAAIWBcoOEAAB9coSEAABidHKFhAAAVS1hcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X21ldHJpY3MoWPUhAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIgpEYXRhZmxvd1J1bm5lciBpbXBsZW1lbnRhdGlvbiBvZiBNZXRyaWNSZXN1bHRzLiBJdCBpcyBpbiBjaGFyZ2Ugb2YKcmVzcG9uZGluZyB0byBxdWVyaWVzIG9mIGN1cnJlbnQgbWV0cmljcyBieSBnb2luZyB0byB0aGUgZGF0YWZsb3cKc2VydmljZS4KIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IG51bWJlcnMKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKCmZyb20gZnV0dXJlLnV0aWxzIGltcG9ydCBpdGVyaXRlbXMKCmZyb20gYXBhY2hlX2JlYW0ubWV0cmljcy5jZWxscyBpbXBvcnQgRGlzdHJpYnV0aW9uRGF0YQpmcm9tIGFwYWNoZV9iZWFtLm1ldHJpY3MuY2VsbHMgaW1wb3J0IERpc3RyaWJ1dGlvblJlc3VsdApmcm9tIGFwYWNoZV9iZWFtLm1ldHJpY3MuZXhlY3V0aW9uIGltcG9ydCBNZXRyaWNLZXkKZnJvbSBhcGFjaGVfYmVhbS5tZXRyaWNzLmV4ZWN1dGlvbiBpbXBvcnQgTWV0cmljUmVzdWx0CmZyb20gYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWMgaW1wb3J0IE1ldHJpY1Jlc3VsdHMKZnJvbSBhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpY2Jhc2UgaW1wb3J0IE1ldHJpY05hbWUKCgpkZWYgX2dldF9tYXRjaChwcm90bywgZmlsdGVyX2ZuKToKICAiIiJGaW5kcyBhbmQgcmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IG1hdGNoZXMgYSBxdWVyeS4KCiAgSWYgbm8gZWxlbWVudCBtYXRjaGVzIHRoZSBxdWVyeSwgaXQgdGhyb3dzIFZhbHVlRXJyb3IuCiAgSWYgbW9yZSB0aGFuIG9uZSBlbGVtZW50IG1hdGNoZXMgdGhlIHF1ZXJ5LCBpdCByZXR1cm5zIG9ubHkgdGhlIGZpcnN0LgogICIiIgogIHF1ZXJ5ID0gW2VsbSBmb3IgZWxtIGluIHByb3RvIGlmIGZpbHRlcl9mbihlbG0pXQogIGlmIGxlbihxdWVyeSkgPT0gMDoKICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIGVsZW1lbnQnKQogIGVsaWYgbGVuKHF1ZXJ5KSA+IDE6CiAgICByYWlzZSBWYWx1ZUVycm9yKCdUb28gbWFueSBtYXRjaGVzJykKCiAgcmV0dXJuIHF1ZXJ5WzBdCgoKY2xhc3MgRGF0YWZsb3dNZXRyaWNzKE1ldHJpY1Jlc3VsdHMpOgogICIiIkltcGxlbWVudGF0aW9uIG9mIE1ldHJpY1Jlc3VsdHMgY2xhc3MgZm9yIHRoZSBEYXRhZmxvdyBydW5uZXIuIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhZmxvd19jbGllbnQ9Tm9uZSwgam9iX3Jlc3VsdD1Ob25lLCBqb2JfZ3JhcGg9Tm9uZSk6CiAgICAiIiJJbml0aWFsaXplIHRoZSBEYXRhZmxvdyBtZXRyaWNzIG9iamVjdC4KCiAgICBBcmdzOgogICAgICBkYXRhZmxvd19jbGllbnQ6IGFwaWNsaWVudC5EYXRhZmxvd0FwcGxpY2F0aW9uQ2xpZW50IHRvIGludGVyYWN0IHdpdGggdGhlCiAgICAgICAgZGF0YWZsb3cgc2VydmljZS4KICAgICAgam9iX3Jlc3VsdDogRGF0YWZsb3dQaXBlbGluZVJlc3VsdCB3aXRoIHRoZSBzdGF0ZSBhbmQgaWQgaW5mb3JtYXRpb24gb2YKICAgICAgICB0aGUgam9iLgogICAgICBqb2JfZ3JhcGg6IGFwaWNsaWVudC5Kb2IgaW5zdGFuY2UgdG8gYmUgYWJsZSB0byB0cmFuc2xhdGUgYmV0d2VlbiBpbnRlcm5hbAogICAgICAgIHN0ZXAgbmFtZXMgKGUuZy4gInMyIiksIGFuZCB1c2VyIHN0ZXAgbmFtZXMgKGUuZy4gInNwbGl0IikuCiAgICAiIiIKICAgIHN1cGVyKERhdGFmbG93TWV0cmljcywgc2VsZikuX19pbml0X18oKQogICAgc2VsZi5fZGF0YWZsb3dfY2xpZW50ID0gZGF0YWZsb3dfY2xpZW50CiAgICBzZWxmLmpvYl9yZXN1bHQgPSBqb2JfcmVzdWx0CiAgICBzZWxmLl9xdWVyaWVkX2FmdGVyX3Rlcm1pbmF0aW9uID0gRmFsc2UKICAgIHNlbGYuX2NhY2hlZF9tZXRyaWNzID0gTm9uZQogICAgc2VsZi5fam9iX2dyYXBoID0gam9iX2dyYXBoCgogIEBzdGF0aWNtZXRob2QKICBkZWYgX2lzX2NvdW50ZXIobWV0cmljX3Jlc3VsdCk6CiAgICByZXR1cm4gaXNpbnN0YW5jZShtZXRyaWNfcmVzdWx0LmF0dGVtcHRlZCwgbnVtYmVycy5OdW1iZXIpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgX2lzX2Rpc3RyaWJ1dGlvbihtZXRyaWNfcmVzdWx0KToKICAgIHJldHVybiBpc2luc3RhbmNlKG1ldHJpY19yZXN1bHQuYXR0ZW1wdGVkLCBEaXN0cmlidXRpb25SZXN1bHQpCgogIGRlZiBfdHJhbnNsYXRlX3N0ZXBfbmFtZShzZWxmLCBpbnRlcm5hbF9uYW1lKToKICAgICIiIlRyYW5zbGF0ZSBiZXR3ZWVuIGludGVybmFsIHN0ZXAgbmFtZXMgKGUuZy4gInMxIikgYW5kIHVzZXIgc3RlcCBuYW1lcy4iIiIKICAgIGlmIG5vdCBzZWxmLl9qb2JfZ3JhcGg6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0NvdWxkIG5vdCB0cmFuc2xhdGUgdGhlIGludGVybmFsIHN0ZXAgbmFtZS4nKQoKICAgIHRyeToKICAgICAgc3RlcCA9IF9nZXRfbWF0Y2goc2VsZi5fam9iX2dyYXBoLnByb3RvLnN0ZXBzLAogICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgeDogeC5uYW1lID09IGludGVybmFsX25hbWUpCiAgICAgIHVzZXJfc3RlcF9uYW1lID0gX2dldF9tYXRjaCgKICAgICAgICAgIHN0ZXAucHJvcGVydGllcy5hZGRpdGlvbmFsUHJvcGVydGllcywKICAgICAgICAgIGxhbWJkYSB4OiB4LmtleSA9PSAndXNlcl9uYW1lJykudmFsdWUuc3RyaW5nX3ZhbHVlCiAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgcmFpc2UgVmFsdWVFcnJvcignQ291bGQgbm90IHRyYW5zbGF0ZSB0aGUgaW50ZXJuYWwgc3RlcCBuYW1lLicpCiAgICByZXR1cm4gdXNlcl9zdGVwX25hbWUKCiAgZGVmIF9nZXRfbWV0cmljX2tleShzZWxmLCBtZXRyaWMpOgogICAgIiIiUG9wdWxhdGUgdGhlIE1ldHJpY0tleSBvYmplY3QgZm9yIGEgcXVlcmllZCBtZXRyaWMgcmVzdWx0LiIiIgogICAgdHJ5OgogICAgICAjIElmIFZhbHVlRXJyb3IgaXMgdGhyb3duIHdpdGhpbiB0aGlzIHRyeS1ibG9jaywgaXQgaXMgYmVjYXVzZSBvZgogICAgICAjIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogICAgICAjIDEuIFVuYWJsZSB0byB0cmFuc2xhdGUgdGhlIHN0ZXAgbmFtZS4gT25seSBoYXBwZW5pbmcgd2l0aCBpbXByb3Blcmx5CiAgICAgICMgICBmb3JtYXR0ZWQgam9iIGdyYXBoICh1bmxpa2VseSksIG9yIHN0ZXAgbmFtZSBub3QgYmVpbmcgdGhlIGludGVybmFsCiAgICAgICMgICBzdGVwIG5hbWUgKG9ubHkgaGFwcGVucyBmb3IgdW5zdHJ1Y3R1cmVkLW5hbWVkIG1ldHJpY3MpLgogICAgICAjIDIuIFVuYWJsZSB0byB1bnBhY2sgW3N0ZXBdIG9yIFtuYW1lc3BhY2VdOyB3aGljaCBzaG91bGQgb25seSBoYXBwZW4KICAgICAgIyAgIGZvciB1bnN0cnVjdHVyZWQgbmFtZXMuCiAgICAgIHN0ZXAgPSBfZ2V0X21hdGNoKG1ldHJpYy5uYW1lLmNvbnRleHQuYWRkaXRpb25hbFByb3BlcnRpZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSB4OiB4LmtleSA9PSAnc3RlcCcpLnZhbHVlCiAgICAgIHN0ZXAgPSBzZWxmLl90cmFuc2xhdGVfc3RlcF9uYW1lKHN0ZXApCiAgICAgIG5hbWVzcGFjZSA9IF9nZXRfbWF0Y2gobWV0cmljLm5hbWUuY29udGV4dC5hZGRpdGlvbmFsUHJvcGVydGllcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgeDogeC5rZXkgPT0gJ25hbWVzcGFjZScpLnZhbHVlCiAgICAgIG5hbWUgPSBtZXRyaWMubmFtZS5uYW1lCiAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgcmV0dXJuIE5vbmUKCiAgICByZXR1cm4gTWV0cmljS2V5KHN0ZXAsIE1ldHJpY05hbWUobmFtZXNwYWNlLCBuYW1lKSkKCiAgZGVmIF9wb3B1bGF0ZV9tZXRyaWNfcmVzdWx0cyhzZWxmLCByZXNwb25zZSk6CiAgICAiIiJUYWtlIGEgbGlzdCBvZiBtZXRyaWNzLCBhbmQgY29udmVydCBpdCB0byBhIGxpc3Qgb2YgTWV0cmljUmVzdWx0LiIiIgogICAgdXNlcl9tZXRyaWNzID0gW21ldHJpYwogICAgICAgICAgICAgICAgICAgIGZvciBtZXRyaWMgaW4gcmVzcG9uc2UubWV0cmljcwogICAgICAgICAgICAgICAgICAgIGlmIG1ldHJpYy5uYW1lLm9yaWdpbiA9PSAndXNlciddCgogICAgIyBHZXQgdGhlIHRlbnRhdGl2ZS9jb21taXR0ZWQgdmVyc2lvbnMgb2YgZXZlcnkgbWV0cmljIHRvZ2V0aGVyLgogICAgbWV0cmljc19ieV9uYW1lID0gZGVmYXVsdGRpY3QobGFtYmRhOiB7fSkKICAgIGZvciBtZXRyaWMgaW4gdXNlcl9tZXRyaWNzOgogICAgICBpZiAobWV0cmljLm5hbWUubmFtZS5lbmRzd2l0aCgnW01JTl0nKSBvcgogICAgICAgICAgbWV0cmljLm5hbWUubmFtZS5lbmRzd2l0aCgnW01BWF0nKSBvcgogICAgICAgICAgbWV0cmljLm5hbWUubmFtZS5lbmRzd2l0aCgnW01FQU5dJykgb3IKICAgICAgICAgIG1ldHJpYy5uYW1lLm5hbWUuZW5kc3dpdGgoJ1tDT1VOVF0nKSk6CiAgICAgICAgIyBUaGUgRGF0YWZsb3cgU2VydmljZSBwcmVzZW50cyBkaXN0cmlidXRpb24gbWV0cmljcyBpbiB0d28gd2F5czoKICAgICAgICAjIE9uZSB3YXkgaXMgYXMgYSBzaW5nbGUgZGlzdHJpYnV0aW9uIG9iamVjdCB3aXRoIGFsbCBpdHMgZmllbGRzLCBhbmQKICAgICAgICAjIGFub3RoZXIgd2F5IGlzIGFzIGZvdXIgZGlmZmVyZW50IHNjYWxhciBtZXRyaWNzIGxhYmVsZWQgYXMgW01JTl0sCiAgICAgICAgIyBbTUFYXSwgW0NPVU5UXSwgW01FQU5dLgogICAgICAgICMgVE9ETyhwYWJsb2VtKSByZW1vdmUgdGhlc2Ugd2hlbiBkaXN0cmlidXRpb25zIGFyZSBub3QgYmVpbmcgYnJva2VuIHVwCiAgICAgICAgIyAgaW4gdGhlIHNlcnZpY2UuCiAgICAgICAgIyBUaGUgc2Vjb25kIHdheSBpcyBvbmx5IHVzZWZ1bCBmb3IgdGhlIFVJLCBhbmQgc2hvdWxkIGJlIGlnbm9yZWQuCiAgICAgICAgY29udGludWUKICAgICAgaXNfdGVudGF0aXZlID0gW3Byb3AKICAgICAgICAgICAgICAgICAgICAgIGZvciBwcm9wIGluIG1ldHJpYy5uYW1lLmNvbnRleHQuYWRkaXRpb25hbFByb3BlcnRpZXMKICAgICAgICAgICAgICAgICAgICAgIGlmIHByb3Aua2V5ID09ICd0ZW50YXRpdmUnIGFuZCBwcm9wLnZhbHVlID09ICd0cnVlJ10KICAgICAgdGVudGF0aXZlX29yX2NvbW1pdHRlZCA9ICd0ZW50YXRpdmUnIGlmIGlzX3RlbnRhdGl2ZSBlbHNlICdjb21taXR0ZWQnCgogICAgICBtZXRyaWNfa2V5ID0gc2VsZi5fZ2V0X21ldHJpY19rZXkobWV0cmljKQogICAgICBpZiBtZXRyaWNfa2V5IGlzIE5vbmU6CiAgICAgICAgY29udGludWUKICAgICAgbWV0cmljc19ieV9uYW1lW21ldHJpY19rZXldW3RlbnRhdGl2ZV9vcl9jb21taXR0ZWRdID0gbWV0cmljCgogICAgIyBOb3cgd2UgY3JlYXRlIHRoZSBNZXRyaWNSZXN1bHQgZWxlbWVudHMuCiAgICByZXN1bHQgPSBbXQogICAgZm9yIG1ldHJpY19rZXksIG1ldHJpYyBpbiBpdGVyaXRlbXMobWV0cmljc19ieV9uYW1lKToKICAgICAgYXR0ZW1wdGVkID0gc2VsZi5fZ2V0X21ldHJpY192YWx1ZShtZXRyaWNbJ3RlbnRhdGl2ZSddKQogICAgICBjb21taXR0ZWQgPSBzZWxmLl9nZXRfbWV0cmljX3ZhbHVlKG1ldHJpY1snY29tbWl0dGVkJ10pCiAgICAgIGlmIGF0dGVtcHRlZCBpcyBOb25lIG9yIGNvbW1pdHRlZCBpcyBOb25lOgogICAgICAgIGNvbnRpbnVlCiAgICAgIHJlc3VsdC5hcHBlbmQoTWV0cmljUmVzdWx0KG1ldHJpY19rZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dGVtcHRlZD1hdHRlbXB0ZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdHRlZD1jb21taXR0ZWQpKQoKICAgIHJldHVybiByZXN1bHQKCiAgZGVmIF9nZXRfbWV0cmljX3ZhbHVlKHNlbGYsIG1ldHJpYyk6CiAgICAiIiJHZXQgYSBtZXRyaWMgcmVzdWx0IG9iamVjdCBmcm9tIGEgTWV0cmljVXBkYXRlIGZyb20gRGF0YWZsb3cgQVBJLiIiIgogICAgaWYgbWV0cmljIGlzIE5vbmU6CiAgICAgIHJldHVybiBOb25lCgogICAgaWYgbWV0cmljLnNjYWxhciBpcyBub3QgTm9uZToKICAgICAgcmV0dXJuIG1ldHJpYy5zY2FsYXIuaW50ZWdlcl92YWx1ZQogICAgZWxpZiBtZXRyaWMuZGlzdHJpYnV0aW9uIGlzIG5vdCBOb25lOgogICAgICBkaXN0X2NvdW50ID0gX2dldF9tYXRjaChtZXRyaWMuZGlzdHJpYnV0aW9uLm9iamVjdF92YWx1ZS5wcm9wZXJ0aWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgeDogeC5rZXkgPT0gJ2NvdW50JykudmFsdWUuaW50ZWdlcl92YWx1ZQogICAgICBkaXN0X21pbiA9IF9nZXRfbWF0Y2gobWV0cmljLmRpc3RyaWJ1dGlvbi5vYmplY3RfdmFsdWUucHJvcGVydGllcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSB4OiB4LmtleSA9PSAnbWluJykudmFsdWUuaW50ZWdlcl92YWx1ZQogICAgICBkaXN0X21heCA9IF9nZXRfbWF0Y2gobWV0cmljLmRpc3RyaWJ1dGlvbi5vYmplY3RfdmFsdWUucHJvcGVydGllcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSB4OiB4LmtleSA9PSAnbWF4JykudmFsdWUuaW50ZWdlcl92YWx1ZQogICAgICBkaXN0X3N1bSA9IF9nZXRfbWF0Y2gobWV0cmljLmRpc3RyaWJ1dGlvbi5vYmplY3RfdmFsdWUucHJvcGVydGllcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSB4OiB4LmtleSA9PSAnc3VtJykudmFsdWUuaW50ZWdlcl92YWx1ZQogICAgICByZXR1cm4gRGlzdHJpYnV0aW9uUmVzdWx0KAogICAgICAgICAgRGlzdHJpYnV0aW9uRGF0YSgKICAgICAgICAgICAgICBkaXN0X3N1bSwgZGlzdF9jb3VudCwgZGlzdF9taW4sIGRpc3RfbWF4KSkKICAgIGVsc2U6CiAgICAgIHJldHVybiBOb25lCgogIGRlZiBfZ2V0X21ldHJpY3NfZnJvbV9kYXRhZmxvdyhzZWxmKToKICAgICIiIlJldHVybiBjYWNoZWQgbWV0cmljcyBvciBxdWVyeSB0aGUgZGF0YWZsb3cgc2VydmljZS4iIiIKICAgIHRyeToKICAgICAgam9iX2lkID0gc2VsZi5qb2JfcmVzdWx0LmpvYl9pZCgpCiAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgIGpvYl9pZCA9IE5vbmUKICAgIGlmIG5vdCBqb2JfaWQ6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0NhbiBub3QgcXVlcnkgbWV0cmljcy4gSm9iIGlkIGlzIHVua25vd24uJykKCiAgICBpZiBzZWxmLl9jYWNoZWRfbWV0cmljczoKICAgICAgcmV0dXJuIHNlbGYuX2NhY2hlZF9tZXRyaWNzCgogICAgam9iX21ldHJpY3MgPSBzZWxmLl9kYXRhZmxvd19jbGllbnQuZ2V0X2pvYl9tZXRyaWNzKGpvYl9pZCkKICAgICMgSWYgdGhlIGpvYiBoYXMgdGVybWluYXRlZCwgbWV0cmljcyB3aWxsIG5vdCBjaGFuZ2UgYW5kIHdlIGNhbiBjYWNoZSB0aGVtLgogICAgaWYgc2VsZi5qb2JfcmVzdWx0LmlzX2luX3Rlcm1pbmFsX3N0YXRlKCk6CiAgICAgIHNlbGYuX2NhY2hlZF9tZXRyaWNzID0gam9iX21ldHJpY3MKICAgIHJldHVybiBqb2JfbWV0cmljcwoKICBkZWYgcXVlcnkoc2VsZiwgZmlsdGVyPU5vbmUpOgogICAgcmVzcG9uc2UgPSBzZWxmLl9nZXRfbWV0cmljc19mcm9tX2RhdGFmbG93KCkKICAgIG1ldHJpY19yZXN1bHRzID0gc2VsZi5fcG9wdWxhdGVfbWV0cmljX3Jlc3VsdHMocmVzcG9uc2UpCiAgICByZXR1cm4ge3NlbGYuQ09VTlRFUlM6IFtlbG0gZm9yIGVsbSBpbiBtZXRyaWNfcmVzdWx0cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5tYXRjaGVzKGZpbHRlciwgZWxtLmtleSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBEYXRhZmxvd01ldHJpY3MuX2lzX2NvdW50ZXIoZWxtKV0sCiAgICAgICAgICAgIHNlbGYuRElTVFJJQlVUSU9OUzogW2VsbSBmb3IgZWxtIGluIG1ldHJpY19yZXN1bHRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYubWF0Y2hlcyhmaWx0ZXIsIGVsbS5rZXkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBEYXRhZmxvd01ldHJpY3MuX2lzX2Rpc3RyaWJ1dGlvbihlbG0pXSwKICAgICAgICAgICAgc2VsZi5HQVVHRVM6IFtdfSAgIyBUT0RPKHBhYmxvZW0pOiBBZGQgR2F1Z2Ugc3VwcG9ydCBmb3IgZGF0YWZsb3cuCn1yhoQAAChYFQAAAERhdGFmbG93TWV0cmljcy5xdWVyeVgDAAAAZGVmS8tL1YdYCgAAAF9nZXRfbWF0Y2hYAwAAAGRlZksnSzSHWA8AAABEYXRhZmxvd01ldHJpY3NYBQAAAGNsYXNzSzZL1YdYIAAAAERhdGFmbG93TWV0cmljcy5faXNfZGlzdHJpYnV0aW9uWAMAAABkZWZLT0tSh1goAAAARGF0YWZsb3dNZXRyaWNzLl9wb3B1bGF0ZV9tZXRyaWNfcmVzdWx0c1gDAAAAZGVmS3dLoodYGAAAAERhdGFmbG93TWV0cmljcy5fX2luaXRfX1gDAAAAZGVmSzlLSodYIQAAAERhdGFmbG93TWV0cmljcy5fZ2V0X21ldHJpY192YWx1ZVgDAAAAZGVmS6NLuIdYJAAAAERhdGFmbG93TWV0cmljcy5fdHJhbnNsYXRlX3N0ZXBfbmFtZVgDAAAAZGVmS1NLYYdYGwAAAERhdGFmbG93TWV0cmljcy5faXNfY291bnRlclgDAAAAZGVmS0tLTodYHwAAAERhdGFmbG93TWV0cmljcy5fZ2V0X21ldHJpY19rZXlYAwAAAGRlZktiS3aHWCoAAABEYXRhZmxvd01ldHJpY3MuX2dldF9tZXRyaWNzX2Zyb21fZGF0YWZsb3dYAwAAAGRlZku5S8qHdX1yh4QAAChYDwAAAERhdGFmbG93TWV0cmljc1gtAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19tZXRyaWNzcoiEAABYFQAAAERhdGFmbG93TWV0cmljcy5xdWVyeWqIhAAAdWp9aQAAWC0AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X21ldHJpY3NyiYQAAIWBcoqEAAB9couEAABidHKMhAAAVR9hcGFjaGVfYmVhbS5pby5oYWRvb3BmaWxlc3lzdGVtKFgkLwAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiI6Y2xhc3M6YH5hcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkZpbGVTeXN0ZW1gIGltcGxlbWVudGF0aW9uIGZvciBhY2Nlc3NpbmcKSGFkb29wIERpc3RyaWJ1dGVkIEZpbGUgU3lzdGVtIGZpbGVzLiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBpbwppbXBvcnQgbG9nZ2luZwppbXBvcnQgcG9zaXhwYXRoCmltcG9ydCByZQpmcm9tIGJ1aWx0aW5zIGltcG9ydCB6aXAKCmltcG9ydCBoZGZzCgpmcm9tIGFwYWNoZV9iZWFtLmlvIGltcG9ydCBmaWxlc3lzdGVtaW8KZnJvbSBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtIGltcG9ydCBCZWFtSU9FcnJvcgpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0gaW1wb3J0IENvbXByZXNzZWRGaWxlCmZyb20gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbSBpbXBvcnQgQ29tcHJlc3Npb25UeXBlcwpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0gaW1wb3J0IEZpbGVNZXRhZGF0YQpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0gaW1wb3J0IEZpbGVTeXN0ZW0KZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IEhhZG9vcEZpbGVTeXN0ZW1PcHRpb25zCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBQaXBlbGluZU9wdGlvbnMKCl9fYWxsX18gPSBbJ0hhZG9vcEZpbGVTeXN0ZW0nXQoKX0hERlNfUFJFRklYID0gJ2hkZnM6LycKX1VSTF9SRSA9IHJlLmNvbXBpbGUocideJyArIF9IREZTX1BSRUZJWCArIHInKC8uKiknKQpfQ09QWV9CVUZGRVJfU0laRSA9IDIgKiogMTYKX0RFRkFVTFRfQlVGRkVSX1NJWkUgPSAyMCAqIDEwMjQgKiAxMDI0CgojIFdlYkhERlMgRmlsZUNoZWNrc3VtIHByb3BlcnR5IGNvbnN0YW50cy4KX0ZJTEVfQ0hFQ0tTVU1fQUxHT1JJVEhNID0gJ2FsZ29yaXRobScKX0ZJTEVfQ0hFQ0tTVU1fQllURVMgPSAnYnl0ZXMnCl9GSUxFX0NIRUNLU1VNX0xFTkdUSCA9ICdsZW5ndGgnCiMgV2ViSERGUyBGaWxlU3RhdHVzIHByb3BlcnR5IGNvbnN0YW50cy4KX0ZJTEVfU1RBVFVTX0xFTkdUSCA9ICdsZW5ndGgnCl9GSUxFX1NUQVRVU19QQVRIX1NVRkZJWCA9ICdwYXRoU3VmZml4JwpfRklMRV9TVEFUVVNfVFlQRSA9ICd0eXBlJwpfRklMRV9TVEFUVVNfVFlQRV9ESVJFQ1RPUlkgPSAnRElSRUNUT1JZJwpfRklMRV9TVEFUVVNfVFlQRV9GSUxFID0gJ0ZJTEUnCgoKY2xhc3MgSGRmc0Rvd25sb2FkZXIoZmlsZXN5c3RlbWlvLkRvd25sb2FkZXIpOgoKICBkZWYgX19pbml0X18oc2VsZiwgaGRmc19jbGllbnQsIHBhdGgpOgogICAgc2VsZi5faGRmc19jbGllbnQgPSBoZGZzX2NsaWVudAogICAgc2VsZi5fcGF0aCA9IHBhdGgKICAgIHNlbGYuX3NpemUgPSBzZWxmLl9oZGZzX2NsaWVudC5zdGF0dXMocGF0aClbX0ZJTEVfU1RBVFVTX0xFTkdUSF0KCiAgQHByb3BlcnR5CiAgZGVmIHNpemUoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fc2l6ZQoKICBkZWYgZ2V0X3JhbmdlKHNlbGYsIHN0YXJ0LCBlbmQpOgogICAgd2l0aCBzZWxmLl9oZGZzX2NsaWVudC5yZWFkKAogICAgICAgIHNlbGYuX3BhdGgsIG9mZnNldD1zdGFydCwgbGVuZ3RoPWVuZCAtIHN0YXJ0ICsgMSkgYXMgcmVhZGVyOgogICAgICByZXR1cm4gcmVhZGVyLnJlYWQoKQoKCmNsYXNzIEhkZnNVcGxvYWRlcihmaWxlc3lzdGVtaW8uVXBsb2FkZXIpOgoKICBkZWYgX19pbml0X18oc2VsZiwgaGRmc19jbGllbnQsIHBhdGgpOgogICAgc2VsZi5faGRmc19jbGllbnQgPSBoZGZzX2NsaWVudAogICAgaWYgc2VsZi5faGRmc19jbGllbnQuc3RhdHVzKHBhdGgsIHN0cmljdD1GYWxzZSkgaXMgbm90IE5vbmU6CiAgICAgIHJhaXNlIEJlYW1JT0Vycm9yKCdQYXRoIGFscmVhZHkgZXhpc3RzOiAlcycgJSBwYXRoKQoKICAgIHNlbGYuX2hhbmRsZV9jb250ZXh0ID0gc2VsZi5faGRmc19jbGllbnQud3JpdGUocGF0aCkKICAgIHNlbGYuX2hhbmRsZSA9IHNlbGYuX2hhbmRsZV9jb250ZXh0Ll9fZW50ZXJfXygpCgogIGRlZiBwdXQoc2VsZiwgZGF0YSk6CiAgICBzZWxmLl9oYW5kbGUud3JpdGUoZGF0YSkKCiAgZGVmIGZpbmlzaChzZWxmKToKICAgIHNlbGYuX2hhbmRsZS5fX2V4aXRfXyhOb25lLCBOb25lLCBOb25lKQogICAgc2VsZi5faGFuZGxlID0gTm9uZQogICAgc2VsZi5faGFuZGxlX2NvbnRleHQgPSBOb25lCgoKY2xhc3MgSGFkb29wRmlsZVN5c3RlbShGaWxlU3lzdGVtKToKICAiIiJgYEZpbGVTeXN0ZW1gYCBpbXBsZW1lbnRhdGlvbiB0aGF0IHN1cHBvcnRzIEhERlMuCgogIFVSTCBhcmd1bWVudHMgdG8gbWV0aG9kcyBleHBlY3Qgc3RyaW5ncyBzdGFydGluZyB3aXRoIGBgaGRmczovL2BgLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgcGlwZWxpbmVfb3B0aW9ucyk6CiAgICAiIiJJbml0aWFsaXplcyBhIGNvbm5lY3Rpb24gdG8gSERGUy4KCiAgICBDb25uZWN0aW9uIGNvbmZpZ3VyYXRpb24gaXMgZG9uZSBieSBwYXNzaW5nIHBpcGVsaW5lIG9wdGlvbnMuCiAgICBTZWUgOmNsYXNzOmB+YXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLkhhZG9vcEZpbGVTeXN0ZW1PcHRpb25zYC4KICAgICIiIgogICAgc3VwZXIoSGFkb29wRmlsZVN5c3RlbSwgc2VsZikuX19pbml0X18ocGlwZWxpbmVfb3B0aW9ucykKICAgIGxvZ2dpbmcuZ2V0TG9nZ2VyKCdoZGZzLmNsaWVudCcpLnNldExldmVsKGxvZ2dpbmcuV0FSTikKICAgIGlmIHBpcGVsaW5lX29wdGlvbnMgaXMgTm9uZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigncGlwZWxpbmVfb3B0aW9ucyBpcyBub3Qgc2V0JykKICAgIGlmIGlzaW5zdGFuY2UocGlwZWxpbmVfb3B0aW9ucywgUGlwZWxpbmVPcHRpb25zKToKICAgICAgaGRmc19vcHRpb25zID0gcGlwZWxpbmVfb3B0aW9ucy52aWV3X2FzKEhhZG9vcEZpbGVTeXN0ZW1PcHRpb25zKQogICAgICBoZGZzX2hvc3QgPSBoZGZzX29wdGlvbnMuaGRmc19ob3N0CiAgICAgIGhkZnNfcG9ydCA9IGhkZnNfb3B0aW9ucy5oZGZzX3BvcnQKICAgICAgaGRmc191c2VyID0gaGRmc19vcHRpb25zLmhkZnNfdXNlcgogICAgZWxzZToKICAgICAgaGRmc19ob3N0ID0gcGlwZWxpbmVfb3B0aW9ucy5nZXQoJ2hkZnNfaG9zdCcpCiAgICAgIGhkZnNfcG9ydCA9IHBpcGVsaW5lX29wdGlvbnMuZ2V0KCdoZGZzX3BvcnQnKQogICAgICBoZGZzX3VzZXIgPSBwaXBlbGluZV9vcHRpb25zLmdldCgnaGRmc191c2VyJykKCiAgICBpZiBoZGZzX2hvc3QgaXMgTm9uZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignaGRmc19ob3N0IGlzIG5vdCBzZXQnKQogICAgaWYgaGRmc19wb3J0IGlzIE5vbmU6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2hkZnNfcG9ydCBpcyBub3Qgc2V0JykKICAgIGlmIGhkZnNfdXNlciBpcyBOb25lOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdoZGZzX3VzZXIgaXMgbm90IHNldCcpCiAgICBzZWxmLl9oZGZzX2NsaWVudCA9IGhkZnMuSW5zZWN1cmVDbGllbnQoCiAgICAgICAgJ2h0dHA6Ly8lczolcycgJSAoaGRmc19ob3N0LCBzdHIoaGRmc19wb3J0KSksIHVzZXI9aGRmc191c2VyKQoKICBAY2xhc3NtZXRob2QKICBkZWYgc2NoZW1lKGNscyk6CiAgICByZXR1cm4gJ2hkZnMnCgogIEBzdGF0aWNtZXRob2QKICBkZWYgX3BhcnNlX3VybCh1cmwpOgogICAgIiIiVmVyaWZpZXMgdGhhdCB1cmwgYmVnaW5zIHdpdGggaGRmczovLyBwcmVmaXgsIHN0cmlwcyBpdCBhbmQgYWRkcyBhCiAgICBsZWFkaW5nIC8uCgogICAgUmFpc2VzOgogICAgICBWYWx1ZUVycm9yIGlmIHVybCBkb2Vzbid0IGJlZ2luIHdpdGggaGRmczovLy4KCiAgICBBcmdzOgogICAgICB1cmw6IEEgVVJMIGluIHRoZSBmb3JtIGhkZnM6Ly9wYXRoLy4uLgoKICAgIFJldHVybnM6CiAgICAgIEZvciBhbiBpbnB1dCBvZiAnaGRmczovL3BhdGgvLi4uJywgd2lsbCByZXR1cm4gJy9wYXRoLy4uLicuCiAgICAiIiIKICAgIG0gPSBfVVJMX1JFLm1hdGNoKHVybCkKICAgIGlmIG0gaXMgTm9uZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignQ291bGQgbm90IHBhcnNlIHVybDogJXMnICUgdXJsKQogICAgcmV0dXJuIG0uZ3JvdXAoMSkKCiAgZGVmIGpvaW4oc2VsZiwgYmFzZV91cmwsICpwYXRocyk6CiAgICAiIiJKb2luIHR3byBvciBtb3JlIHBhdGhuYW1lIGNvbXBvbmVudHMuCgogICAgQXJnczoKICAgICAgYmFzZV91cmw6IHN0cmluZyBwYXRoIG9mIHRoZSBmaXJzdCBjb21wb25lbnQgb2YgdGhlIHBhdGguCiAgICAgICAgTXVzdCBzdGFydCB3aXRoIGhkZnM6Ly8uCiAgICAgIHBhdGhzOiBwYXRoIGNvbXBvbmVudHMgdG8gYmUgYWRkZWQKCiAgICBSZXR1cm5zOgogICAgICBGdWxsIHVybCBhZnRlciBjb21iaW5pbmcgYWxsIHRoZSBwYXNzZWQgY29tcG9uZW50cy4KICAgICIiIgogICAgYmFzZXBhdGggPSBzZWxmLl9wYXJzZV91cmwoYmFzZV91cmwpCiAgICByZXR1cm4gX0hERlNfUFJFRklYICsgc2VsZi5fam9pbihiYXNlcGF0aCwgKnBhdGhzKQoKICBkZWYgX2pvaW4oc2VsZiwgYmFzZXBhdGgsICpwYXRocyk6CiAgICByZXR1cm4gcG9zaXhwYXRoLmpvaW4oYmFzZXBhdGgsICpwYXRocykKCiAgZGVmIHNwbGl0KHNlbGYsIHVybCk6CiAgICByZWxfcGF0aCA9IHNlbGYuX3BhcnNlX3VybCh1cmwpCiAgICBoZWFkLCB0YWlsID0gcG9zaXhwYXRoLnNwbGl0KHJlbF9wYXRoKQogICAgcmV0dXJuIF9IREZTX1BSRUZJWCArIGhlYWQsIHRhaWwKCiAgZGVmIG1rZGlycyhzZWxmLCB1cmwpOgogICAgcGF0aCA9IHNlbGYuX3BhcnNlX3VybCh1cmwpCiAgICBpZiBzZWxmLl9leGlzdHMocGF0aCk6CiAgICAgIHJhaXNlIEJlYW1JT0Vycm9yKCdQYXRoIGFscmVhZHkgZXhpc3RzOiAlcycgJSBwYXRoKQogICAgcmV0dXJuIHNlbGYuX21rZGlycyhwYXRoKQoKICBkZWYgX21rZGlycyhzZWxmLCBwYXRoKToKICAgIHNlbGYuX2hkZnNfY2xpZW50Lm1ha2VkaXJzKHBhdGgpCgogIGRlZiBoYXNfZGlycyhzZWxmKToKICAgIHJldHVybiBUcnVlCgogIGRlZiBfbGlzdChzZWxmLCB1cmwpOgogICAgdHJ5OgogICAgICBwYXRoID0gc2VsZi5fcGFyc2VfdXJsKHVybCkKICAgICAgZm9yIHJlcyBpbiBzZWxmLl9oZGZzX2NsaWVudC5saXN0KHBhdGgsIHN0YXR1cz1UcnVlKToKICAgICAgICB5aWVsZCBGaWxlTWV0YWRhdGEoX0hERlNfUFJFRklYICsgc2VsZi5fam9pbihwYXRoLCByZXNbMF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICByZXNbMV1bX0ZJTEVfU1RBVFVTX0xFTkdUSF0pCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6ICAjIHB5bGludDogZGlzYWJsZT1icm9hZC1leGNlcHQKICAgICAgcmFpc2UgQmVhbUlPRXJyb3IoJ0xpc3Qgb3BlcmF0aW9uIGZhaWxlZCcsIHt1cmw6IGV9KQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIF9hZGRfY29tcHJlc3Npb24oc3RyZWFtLCBwYXRoLCBtaW1lX3R5cGUsIGNvbXByZXNzaW9uX3R5cGUpOgogICAgaWYgbWltZV90eXBlICE9ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nOgogICAgICBsb2dnaW5nLndhcm5pbmcoJ01pbWUgdHlwZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIEdvdCBub24tZGVmYXVsdCBtaW1lX3R5cGU6JwogICAgICAgICAgICAgICAgICAgICAgJyAlcycsIG1pbWVfdHlwZSkKICAgIGlmIGNvbXByZXNzaW9uX3R5cGUgPT0gQ29tcHJlc3Npb25UeXBlcy5BVVRPOgogICAgICBjb21wcmVzc2lvbl90eXBlID0gQ29tcHJlc3Npb25UeXBlcy5kZXRlY3RfY29tcHJlc3Npb25fdHlwZShwYXRoKQogICAgaWYgY29tcHJlc3Npb25fdHlwZSAhPSBDb21wcmVzc2lvblR5cGVzLlVOQ09NUFJFU1NFRDoKICAgICAgcmV0dXJuIENvbXByZXNzZWRGaWxlKHN0cmVhbSkKCiAgICByZXR1cm4gc3RyZWFtCgogIGRlZiBjcmVhdGUoc2VsZiwgdXJsLCBtaW1lX3R5cGU9J2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsCiAgICAgICAgICAgICBjb21wcmVzc2lvbl90eXBlPUNvbXByZXNzaW9uVHlwZXMuQVVUTyk6CiAgICAiIiIKICAgIFJldHVybnM6CiAgICAgIEEgUHl0aG9uIEZpbGUtbGlrZSBvYmplY3QuCiAgICAiIiIKICAgIHBhdGggPSBzZWxmLl9wYXJzZV91cmwodXJsKQogICAgcmV0dXJuIHNlbGYuX2NyZWF0ZShwYXRoLCBtaW1lX3R5cGUsIGNvbXByZXNzaW9uX3R5cGUpCgogIGRlZiBfY3JlYXRlKHNlbGYsIHBhdGgsIG1pbWVfdHlwZT0nYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywKICAgICAgICAgICAgICBjb21wcmVzc2lvbl90eXBlPUNvbXByZXNzaW9uVHlwZXMuQVVUTyk6CiAgICBzdHJlYW0gPSBpby5CdWZmZXJlZFdyaXRlcigKICAgICAgICBmaWxlc3lzdGVtaW8uVXBsb2FkZXJTdHJlYW0oCiAgICAgICAgICAgIEhkZnNVcGxvYWRlcihzZWxmLl9oZGZzX2NsaWVudCwgcGF0aCkpLAogICAgICAgIGJ1ZmZlcl9zaXplPV9ERUZBVUxUX0JVRkZFUl9TSVpFKQogICAgcmV0dXJuIHNlbGYuX2FkZF9jb21wcmVzc2lvbihzdHJlYW0sIHBhdGgsIG1pbWVfdHlwZSwgY29tcHJlc3Npb25fdHlwZSkKCiAgZGVmIG9wZW4oc2VsZiwgdXJsLCBtaW1lX3R5cGU9J2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsCiAgICAgICAgICAgY29tcHJlc3Npb25fdHlwZT1Db21wcmVzc2lvblR5cGVzLkFVVE8pOgogICAgIiIiCiAgICBSZXR1cm5zOgogICAgICBBIFB5dGhvbiBGaWxlLWxpa2Ugb2JqZWN0LgogICAgIiIiCiAgICBwYXRoID0gc2VsZi5fcGFyc2VfdXJsKHVybCkKICAgIHJldHVybiBzZWxmLl9vcGVuKHBhdGgsIG1pbWVfdHlwZSwgY29tcHJlc3Npb25fdHlwZSkKCiAgZGVmIF9vcGVuKHNlbGYsIHBhdGgsIG1pbWVfdHlwZT0nYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywKICAgICAgICAgICAgY29tcHJlc3Npb25fdHlwZT1Db21wcmVzc2lvblR5cGVzLkFVVE8pOgogICAgc3RyZWFtID0gaW8uQnVmZmVyZWRSZWFkZXIoCiAgICAgICAgZmlsZXN5c3RlbWlvLkRvd25sb2FkZXJTdHJlYW0oCiAgICAgICAgICAgIEhkZnNEb3dubG9hZGVyKHNlbGYuX2hkZnNfY2xpZW50LCBwYXRoKSksCiAgICAgICAgYnVmZmVyX3NpemU9X0RFRkFVTFRfQlVGRkVSX1NJWkUpCiAgICByZXR1cm4gc2VsZi5fYWRkX2NvbXByZXNzaW9uKHN0cmVhbSwgcGF0aCwgbWltZV90eXBlLCBjb21wcmVzc2lvbl90eXBlKQoKICBkZWYgY29weShzZWxmLCBzb3VyY2VfZmlsZV9uYW1lcywgZGVzdGluYXRpb25fZmlsZV9uYW1lcyk6CiAgICAiIiIKICAgIEl0IGlzIGFuIGVycm9yIGlmIGFueSBmaWxlIHRvIGNvcHkgYWxyZWFkeSBleGlzdHMgYXQgdGhlIGRlc3RpbmF0aW9uLgoKICAgIFJhaXNlcyBgYEJlYW1JT0Vycm9yYGAgaWYgYW55IGVycm9yIG9jY3VycmVkLgoKICAgIEFyZ3M6CiAgICAgIHNvdXJjZV9maWxlX25hbWVzOiBpdGVyYWJsZSBvZiBVUkxzLgogICAgICBkZXN0aW5hdGlvbl9maWxlX25hbWVzOiBpdGVyYWJsZSBvZiBVUkxzLgogICAgIiIiCiAgICBpZiBsZW4oc291cmNlX2ZpbGVfbmFtZXMpICE9IGxlbihkZXN0aW5hdGlvbl9maWxlX25hbWVzKToKICAgICAgcmFpc2UgQmVhbUlPRXJyb3IoCiAgICAgICAgICAnc291cmNlX2ZpbGVfbmFtZXMgYW5kIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXMgc2hvdWxkICcKICAgICAgICAgICdiZSBlcXVhbCBpbiBsZW5ndGg6ICVkICE9ICVkJyAlICgKICAgICAgICAgICAgICBsZW4oc291cmNlX2ZpbGVfbmFtZXMpLCBsZW4oZGVzdGluYXRpb25fZmlsZV9uYW1lcykpKQoKICAgIGRlZiBfY29weV9maWxlKHNvdXJjZSwgZGVzdGluYXRpb24pOgogICAgICB3aXRoIHNlbGYuX29wZW4oc291cmNlKSBhcyBmMToKICAgICAgICB3aXRoIHNlbGYuX2NyZWF0ZShkZXN0aW5hdGlvbikgYXMgZjI6CiAgICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICBidWYgPSBmMS5yZWFkKF9DT1BZX0JVRkZFUl9TSVpFKQogICAgICAgICAgICBpZiBub3QgYnVmOgogICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgIGYyLndyaXRlKGJ1ZikKCiAgICBkZWYgX2NvcHlfcGF0aChzb3VyY2UsIGRlc3RpbmF0aW9uKToKICAgICAgIiIiUmVjdXJzaXZlbHkgY29weSB0aGUgZmlsZSB0cmVlIGZyb20gdGhlIHNvdXJjZSB0byB0aGUgZGVzdGluYXRpb24uIiIiCiAgICAgIGlmIHNlbGYuX2hkZnNfY2xpZW50LnN0YXR1cygKICAgICAgICAgIHNvdXJjZSlbX0ZJTEVfU1RBVFVTX1RZUEVdICE9IF9GSUxFX1NUQVRVU19UWVBFX0RJUkVDVE9SWToKICAgICAgICBfY29weV9maWxlKHNvdXJjZSwgZGVzdGluYXRpb24pCiAgICAgICAgcmV0dXJuCgogICAgICBmb3IgcGF0aCwgZGlycywgZmlsZXMgaW4gc2VsZi5faGRmc19jbGllbnQud2Fsayhzb3VyY2UpOgogICAgICAgIGZvciBkaXIgaW4gZGlyczoKICAgICAgICAgIG5ld19kaXIgPSBzZWxmLl9qb2luKGRlc3RpbmF0aW9uLCBkaXIpCiAgICAgICAgICBpZiBub3Qgc2VsZi5fZXhpc3RzKG5ld19kaXIpOgogICAgICAgICAgICBzZWxmLl9ta2RpcnMobmV3X2RpcikKCiAgICAgICAgcmVsX3BhdGggPSBwb3NpeHBhdGgucmVscGF0aChwYXRoLCBzb3VyY2UpCiAgICAgICAgaWYgcmVsX3BhdGggPT0gJy4nOgogICAgICAgICAgcmVsX3BhdGggPSAnJwogICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgogICAgICAgICAgX2NvcHlfZmlsZShzZWxmLl9qb2luKHBhdGgsIGZpbGUpLAogICAgICAgICAgICAgICAgICAgICBzZWxmLl9qb2luKGRlc3RpbmF0aW9uLCByZWxfcGF0aCwgZmlsZSkpCgogICAgZXhjZXB0aW9ucyA9IHt9CiAgICBmb3Igc291cmNlLCBkZXN0aW5hdGlvbiBpbiB6aXAoc291cmNlX2ZpbGVfbmFtZXMsIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXMpOgogICAgICB0cnk6CiAgICAgICAgcmVsX3NvdXJjZSA9IHNlbGYuX3BhcnNlX3VybChzb3VyY2UpCiAgICAgICAgcmVsX2Rlc3RpbmF0aW9uID0gc2VsZi5fcGFyc2VfdXJsKGRlc3RpbmF0aW9uKQogICAgICAgIF9jb3B5X3BhdGgocmVsX3NvdXJjZSwgcmVsX2Rlc3RpbmF0aW9uKQogICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6ICAjIHB5bGludDogZGlzYWJsZT1icm9hZC1leGNlcHQKICAgICAgICBleGNlcHRpb25zWyhzb3VyY2UsIGRlc3RpbmF0aW9uKV0gPSBlCgogICAgaWYgZXhjZXB0aW9uczoKICAgICAgcmFpc2UgQmVhbUlPRXJyb3IoJ0NvcHkgb3BlcmF0aW9uIGZhaWxlZCcsIGV4Y2VwdGlvbnMpCgogIGRlZiByZW5hbWUoc2VsZiwgc291cmNlX2ZpbGVfbmFtZXMsIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXMpOgogICAgZXhjZXB0aW9ucyA9IHt9CiAgICBmb3Igc291cmNlLCBkZXN0aW5hdGlvbiBpbiB6aXAoc291cmNlX2ZpbGVfbmFtZXMsIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXMpOgogICAgICB0cnk6CiAgICAgICAgcmVsX3NvdXJjZSA9IHNlbGYuX3BhcnNlX3VybChzb3VyY2UpCiAgICAgICAgcmVsX2Rlc3RpbmF0aW9uID0gc2VsZi5fcGFyc2VfdXJsKGRlc3RpbmF0aW9uKQogICAgICAgIHRyeToKICAgICAgICAgIHNlbGYuX2hkZnNfY2xpZW50LnJlbmFtZShyZWxfc291cmNlLCByZWxfZGVzdGluYXRpb24pCiAgICAgICAgZXhjZXB0IGhkZnMuSGRmc0Vycm9yIGFzIGU6CiAgICAgICAgICByYWlzZSBCZWFtSU9FcnJvcigKICAgICAgICAgICAgICAnbGliaGRmcyBlcnJvciBpbiByZW5hbWluZyAlcyB0byAlcycgJSAoc291cmNlLCBkZXN0aW5hdGlvbiksIGUpCiAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZTogICMgcHlsaW50OiBkaXNhYmxlPWJyb2FkLWV4Y2VwdAogICAgICAgIGV4Y2VwdGlvbnNbKHNvdXJjZSwgZGVzdGluYXRpb24pXSA9IGUKCiAgICBpZiBleGNlcHRpb25zOgogICAgICByYWlzZSBCZWFtSU9FcnJvcignUmVuYW1lIG9wZXJhdGlvbiBmYWlsZWQnLCBleGNlcHRpb25zKQoKICBkZWYgZXhpc3RzKHNlbGYsIHVybCk6CiAgICAiIiJDaGVja3MgZXhpc3RlbmNlIG9mIHVybCBpbiBIREZTLgoKICAgIEFyZ3M6CiAgICAgIHVybDogU3RyaW5nIGluIHRoZSBmb3JtIGhkZnM6Ly8uLi4KCiAgICBSZXR1cm5zOgogICAgICBUcnVlIGlmIHVybCBleGlzdHMgYXMgYSBmaWxlIG9yIGRpcmVjdG9yeSBpbiBIREZTLgogICAgIiIiCiAgICBwYXRoID0gc2VsZi5fcGFyc2VfdXJsKHVybCkKICAgIHJldHVybiBzZWxmLl9leGlzdHMocGF0aCkKCiAgZGVmIF9leGlzdHMoc2VsZiwgcGF0aCk6CiAgICAiIiJSZXR1cm5zIFRydWUgaWYgcGF0aCBleGlzdHMgYXMgYSBmaWxlIG9yIGRpcmVjdG9yeSBpbiBIREZTLgoKICAgIEFyZ3M6CiAgICAgIHBhdGg6IFN0cmluZyBpbiB0aGUgZm9ybSAvLi4uCiAgICAiIiIKICAgIHJldHVybiBzZWxmLl9oZGZzX2NsaWVudC5zdGF0dXMocGF0aCwgc3RyaWN0PUZhbHNlKSBpcyBub3QgTm9uZQoKICBkZWYgc2l6ZShzZWxmLCB1cmwpOgogICAgcGF0aCA9IHNlbGYuX3BhcnNlX3VybCh1cmwpCiAgICBzdGF0dXMgPSBzZWxmLl9oZGZzX2NsaWVudC5zdGF0dXMocGF0aCwgc3RyaWN0PUZhbHNlKQogICAgaWYgc3RhdHVzIGlzIE5vbmU6CiAgICAgIHJhaXNlIEJlYW1JT0Vycm9yKCdGaWxlIG5vdCBmb3VuZDogJXMnICUgdXJsKQogICAgcmV0dXJuIHN0YXR1c1tfRklMRV9TVEFUVVNfTEVOR1RIXQoKICBkZWYgbGFzdF91cGRhdGVkKHNlbGYsIHVybCk6CiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiBjaGVja3N1bShzZWxmLCB1cmwpOgogICAgIiIiRmV0Y2hlcyBhIGNoZWNrc3VtIGRlc2NyaXB0aW9uIGZvciBhIFVSTC4KCiAgICBSZXR1cm5zOgogICAgICBTdHJpbmcgZGVzY3JpYmluZyB0aGUgY2hlY2tzdW0uCiAgICAiIiIKICAgIHBhdGggPSBzZWxmLl9wYXJzZV91cmwodXJsKQogICAgZmlsZV9jaGVja3N1bSA9IHNlbGYuX2hkZnNfY2xpZW50LmNoZWNrc3VtKHBhdGgpCiAgICByZXR1cm4gJyVzLSVkLSVzJyAlICgKICAgICAgICBmaWxlX2NoZWNrc3VtW19GSUxFX0NIRUNLU1VNX0FMR09SSVRITV0sCiAgICAgICAgZmlsZV9jaGVja3N1bVtfRklMRV9DSEVDS1NVTV9MRU5HVEhdLAogICAgICAgIGZpbGVfY2hlY2tzdW1bX0ZJTEVfQ0hFQ0tTVU1fQllURVNdLAogICAgKQoKICBkZWYgZGVsZXRlKHNlbGYsIHVybHMpOgogICAgZXhjZXB0aW9ucyA9IHt9CiAgICBmb3IgdXJsIGluIHVybHM6CiAgICAgIHRyeToKICAgICAgICBwYXRoID0gc2VsZi5fcGFyc2VfdXJsKHVybCkKICAgICAgICBzZWxmLl9oZGZzX2NsaWVudC5kZWxldGUocGF0aCwgcmVjdXJzaXZlPVRydWUpCiAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZTogICMgcHlsaW50OiBkaXNhYmxlPWJyb2FkLWV4Y2VwdAogICAgICAgIGV4Y2VwdGlvbnNbdXJsXSA9IGUKCiAgICBpZiBleGNlcHRpb25zOgogICAgICByYWlzZSBCZWFtSU9FcnJvcigiRGVsZXRlIG9wZXJhdGlvbiBmYWlsZWQiLCBleGNlcHRpb25zKQp9co2EAAAoWBAAAABIYWRvb3BGaWxlU3lzdGVtWAUAAABjbGFzc0tfTXMBh1gZAAAASGFkb29wRmlsZVN5c3RlbS5oYXNfZGlyc1gDAAAAZGVmS7hLuodYFQAAAEhhZG9vcEZpbGVTeXN0ZW0ub3BlblgDAAAAZGVmS+FL6YdYGAAAAEhhZG9vcEZpbGVTeXN0ZW0uX2NyZWF0ZVgDAAAAZGVmS9lL4IdYFwAAAEhhZG9vcEZpbGVTeXN0ZW0ubWtkaXJzWAMAAABkZWZLr0u0h1gYAAAASGFkb29wRmlsZVN5c3RlbS5fZXhpc3RzWAMAAABkZWZNSAFNTwGHWCEAAABIYWRvb3BGaWxlU3lzdGVtLl9hZGRfY29tcHJlc3Npb25YAwAAAGRlZkvES8+HWBgAAABIYWRvb3BGaWxlU3lzdGVtLl9ta2RpcnNYAwAAAGRlZku1S7eHWBcAAABIYWRvb3BGaWxlU3lzdGVtLmRlbGV0ZVgDAAAAZGVmTWgBTXMBh1gWAAAASGFkb29wRmlsZVN5c3RlbS5zcGxpdFgDAAAAZGVmS6pLrodYFwAAAEhhZG9vcEZpbGVTeXN0ZW0ucmVuYW1lWAMAAABkZWZNKwFNOwGHWBgAAABIZGZzRG93bmxvYWRlci5nZXRfcmFuZ2VYAwAAAGRlZktGS0qHWBkAAABIYWRvb3BGaWxlU3lzdGVtLmNoZWNrc3VtWAMAAABkZWZNWgFNZwGHWBUAAABIYWRvb3BGaWxlU3lzdGVtLmpvaW5YAwAAAGRlZkuZS6aHWBUAAABIYWRvb3BGaWxlU3lzdGVtLnNpemVYAwAAAGRlZk1QAU1WAYdYEwAAAEhkZnNVcGxvYWRlci5maW5pc2hYAwAAAGRlZktZS12HWBcAAABIYWRvb3BGaWxlU3lzdGVtLnNjaGVtZVgDAAAAZGVmS4JLhYdYFgAAAEhhZG9vcEZpbGVTeXN0ZW0uX2xpc3RYAwAAAGRlZku7S8OHWB0AAABIYWRvb3BGaWxlU3lzdGVtLmxhc3RfdXBkYXRlZFgDAAAAZGVmTVcBTVkBh1ggAAAASGFkb29wRmlsZVN5c3RlbS5jb3B5Ll9jb3B5X2ZpbGVYAwAAAGRlZk0CAU0KAYdYGQAAAEhhZG9vcEZpbGVTeXN0ZW0uX19pbml0X19YAwAAAGRlZktlS4GHWBsAAABIYWRvb3BGaWxlU3lzdGVtLl9wYXJzZV91cmxYAwAAAGRlZkuGS5iHWAwAAABIZGZzVXBsb2FkZXJYBQAAAGNsYXNzS0xLXYdYFQAAAEhhZG9vcEZpbGVTeXN0ZW0uY29weVgDAAAAZGVmS/JNKgGHWBYAAABIYWRvb3BGaWxlU3lzdGVtLl9qb2luWAMAAABkZWZLp0uph1gQAAAASGRmc1VwbG9hZGVyLnB1dFgDAAAAZGVmS1ZLWIdYFwAAAEhkZnNEb3dubG9hZGVyLl9faW5pdF9fWAMAAABkZWZLPUtBh1gVAAAASGRmc1VwbG9hZGVyLl9faW5pdF9fWAMAAABkZWZLTktVh1gXAAAASGFkb29wRmlsZVN5c3RlbS5jcmVhdGVYAwAAAGRlZkvQS9iHWBMAAABIZGZzRG93bmxvYWRlci5zaXplWAMAAABkZWZLQktFh1gWAAAASGFkb29wRmlsZVN5c3RlbS5fb3BlblgDAAAAZGVmS+pL8YdYIAAAAEhhZG9vcEZpbGVTeXN0ZW0uY29weS5fY29weV9wYXRoWAMAAABkZWZNCwFNHgGHWBcAAABIYWRvb3BGaWxlU3lzdGVtLmV4aXN0c1gDAAAAZGVmTTwBTUcBh1gOAAAASGRmc0Rvd25sb2FkZXJYBQAAAGNsYXNzSztLSod1fXKOhAAAKFgXAAAASGFkb29wRmlsZVN5c3RlbS5kZWxldGVqQmEAAFgQAAAASGFkb29wRmlsZVN5c3RlbWpCYQAAWBcAAABIYWRvb3BGaWxlU3lzdGVtLnJlbmFtZWpCYQAAWBkAAABIYWRvb3BGaWxlU3lzdGVtLmhhc19kaXJzakJhAABYGQAAAEhhZG9vcEZpbGVTeXN0ZW0uY2hlY2tzdW1qQmEAAFgVAAAASGFkb29wRmlsZVN5c3RlbS5vcGVuakJhAABYFQAAAEhhZG9vcEZpbGVTeXN0ZW0uY29weWpCYQAAWB0AAABIYWRvb3BGaWxlU3lzdGVtLmxhc3RfdXBkYXRlZGpCYQAAWBYAAABIYWRvb3BGaWxlU3lzdGVtLnNwbGl0akJhAABYFwAAAEhhZG9vcEZpbGVTeXN0ZW0uY3JlYXRlakJhAABYFwAAAEhhZG9vcEZpbGVTeXN0ZW0uZXhpc3RzakJhAABYFQAAAEhhZG9vcEZpbGVTeXN0ZW0uam9pbmpCYQAAWBUAAABIYWRvb3BGaWxlU3lzdGVtLnNpemVqQmEAAFgXAAAASGFkb29wRmlsZVN5c3RlbS5zY2hlbWVqQmEAAFgXAAAASGFkb29wRmlsZVN5c3RlbS5ta2RpcnNqQmEAAHVqfWkAAFgfAAAAYXBhY2hlX2JlYW0uaW8uaGFkb29wZmlsZXN5c3RlbXKPhAAAhYFykIQAAH1ykYQAAGJ0VSxhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lcihY3dQAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiQSBydW5uZXIgaW1wbGVtZW50YXRpb24gdGhhdCBzdWJtaXRzIGEgam9iIGZvciByZW1vdGUgZXhlY3V0aW9uLgoKVGhlIHJ1bm5lciB3aWxsIGNyZWF0ZSBhIEpTT04gZGVzY3JpcHRpb24gb2YgdGhlIGpvYiBncmFwaCBhbmQgdGhlbiBzdWJtaXQgaXQKdG8gdGhlIERhdGFmbG93IFNlcnZpY2UgZm9yIHJlbW90ZSBleGVjdXRpb24gYnkgYSB3b3JrZXIuCiIiIgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydApmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCgppbXBvcnQgbG9nZ2luZwppbXBvcnQgdGhyZWFkaW5nCmltcG9ydCB0aW1lCmltcG9ydCB0cmFjZWJhY2sKZnJvbSBidWlsdGlucyBpbXBvcnQgaGV4CmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0Cgpmcm9tIGZ1dHVyZS5tb3Zlcy51cmxsaWIucGFyc2UgaW1wb3J0IHF1b3RlCmZyb20gZnV0dXJlLm1vdmVzLnVybGxpYi5wYXJzZSBpbXBvcnQgdW5xdW90ZQpmcm9tIGZ1dHVyZS51dGlscyBpbXBvcnQgaXRlcml0ZW1zCgppbXBvcnQgYXBhY2hlX2JlYW0gYXMgYmVhbQpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBjb2RlcnMKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgZXJyb3IKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgcHZhbHVlCmZyb20gYXBhY2hlX2JlYW0uaW50ZXJuYWwgaW1wb3J0IHBpY2tsZXIKZnJvbSBhcGFjaGVfYmVhbS5pbnRlcm5hbC5nY3AgaW1wb3J0IGpzb25fdmFsdWUKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IERlYnVnT3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgU2V0dXBPcHRpb25zCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBTdGFuZGFyZE9wdGlvbnMKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IFRlc3RPcHRpb25zCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBXb3JrZXJPcHRpb25zCmZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkgaW1wb3J0IGNvbW1vbl91cm5zCmZyb20gYXBhY2hlX2JlYW0ucHZhbHVlIGltcG9ydCBBc1NpZGVJbnB1dApmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuaW50ZXJuYWwgaW1wb3J0IG5hbWVzCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5pbnRlcm5hbC5jbGllbnRzIGltcG9ydCBkYXRhZmxvdyBhcyBkYXRhZmxvd19hcGkKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmludGVybmFsLm5hbWVzIGltcG9ydCBQcm9wZXJ0eU5hbWVzCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5pbnRlcm5hbC5uYW1lcyBpbXBvcnQgVHJhbnNmb3JtTmFtZXMKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lciBpbXBvcnQgUGlwZWxpbmVSZXN1bHQKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lciBpbXBvcnQgUGlwZWxpbmVSdW5uZXIKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lciBpbXBvcnQgUGlwZWxpbmVTdGF0ZQpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyIGltcG9ydCBQVmFsdWVDYWNoZQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IHdpbmRvdwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheSBpbXBvcnQgRGlzcGxheURhdGEKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMgaW1wb3J0IHR5cGVoaW50cwpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzIGltcG9ydCBwcm90b191dGlscwpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzLnBsdWdpbiBpbXBvcnQgQmVhbVBsdWdpbgoKX19hbGxfXyA9IFsnRGF0YWZsb3dSdW5uZXInXQoKCmNsYXNzIERhdGFmbG93UnVubmVyKFBpcGVsaW5lUnVubmVyKToKICAiIiJBIHJ1bm5lciB0aGF0IGNyZWF0ZXMgam9iIGdyYXBocyBhbmQgc3VibWl0cyB0aGVtIGZvciByZW1vdGUgZXhlY3V0aW9uLgoKICBFdmVyeSBleGVjdXRpb24gb2YgdGhlIHJ1bigpIG1ldGhvZCB3aWxsIHN1Ym1pdCBhbiBpbmRlcGVuZGVudCBqb2IgZm9yCiAgcmVtb3RlIGV4ZWN1dGlvbiB0aGF0IGNvbnNpc3RzIG9mIHRoZSBub2RlcyByZWFjaGFibGUgZnJvbSB0aGUgcGFzc2VkIGluCiAgbm9kZSBhcmd1bWVudCBvciBlbnRpcmUgZ3JhcGggaWYgbm9kZSBpcyBOb25lLiBUaGUgcnVuKCkgbWV0aG9kIHJldHVybnMKICBhZnRlciB0aGUgc2VydmljZSBjcmVhdGVkIHRoZSBqb2IgYW5kICB3aWxsIG5vdCB3YWl0IGZvciB0aGUgam9iIHRvIGZpbmlzaAogIGlmIGJsb2NraW5nIGlzIHNldCB0byBGYWxzZS4KICAiIiIKCiAgIyBBIGxpc3Qgb2YgUFRyYW5zZm9ybU92ZXJyaWRlIG9iamVjdHMgdG8gYmUgYXBwbGllZCBiZWZvcmUgcnVubmluZyBhIHBpcGVsaW5lCiAgIyB1c2luZyBEYXRhZmxvd1J1bm5lci4KICAjIEN1cnJlbnRseSB0aGlzIG9ubHkgd29ya3MgZm9yIG92ZXJyaWRlcyB3aGVyZSB0aGUgaW5wdXQgYW5kIG91dHB1dCB0eXBlcyBkbwogICMgbm90IGNoYW5nZS4KICAjIEZvciBpbnRlcm5hbCBTREsgdXNlIG9ubHkuIFRoaXMgc2hvdWxkIG5vdCBiZSB1cGRhdGVkIGJ5IEJlYW0gcGlwZWxpbmUKICAjIGF1dGhvcnMuCgogICMgSW1wb3J0ZWQgaGVyZSB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMuCiAgIyBUT0RPOiBSZW1vdmUgdGhlIGFwYWNoZV9iZWFtLnBpcGVsaW5lIGRlcGVuZGVuY3kgaW4gQ3JlYXRlUFRyYW5zZm9ybU92ZXJyaWRlCiAgZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LnB0cmFuc2Zvcm1fb3ZlcnJpZGVzIGltcG9ydCBDcmVhdGVQVHJhbnNmb3JtT3ZlcnJpZGUKCiAgX1BUUkFOU0ZPUk1fT1ZFUlJJREVTID0gWwogICAgICBDcmVhdGVQVHJhbnNmb3JtT3ZlcnJpZGUoKSwKICBdCgogIGRlZiBfX2luaXRfXyhzZWxmLCBjYWNoZT1Ob25lKToKICAgICMgQ2FjaGUgb2YgQ2xvdWRXb3JrZmxvd1N0ZXAgcHJvdG9zIGdlbmVyYXRlZCB3aGlsZSB0aGUgcnVubmVyCiAgICAjICJleGVjdXRlcyIgYSBwaXBlbGluZS4KICAgIHNlbGYuX2NhY2hlID0gY2FjaGUgaWYgY2FjaGUgaXMgbm90IE5vbmUgZWxzZSBQVmFsdWVDYWNoZSgpCiAgICBzZWxmLl91bmlxdWVfc3RlcF9pZCA9IDAKCiAgZGVmIF9nZXRfdW5pcXVlX3N0ZXBfbmFtZShzZWxmKToKICAgIHNlbGYuX3VuaXF1ZV9zdGVwX2lkICs9IDEKICAgIHJldHVybiAncyVzJyAlIHNlbGYuX3VuaXF1ZV9zdGVwX2lkCgogIEBzdGF0aWNtZXRob2QKICBkZWYgcG9sbF9mb3Jfam9iX2NvbXBsZXRpb24ocnVubmVyLCByZXN1bHQsIGR1cmF0aW9uKToKICAgICIiIlBvbGxzIGZvciB0aGUgc3BlY2lmaWVkIGpvYiB0byBmaW5pc2ggcnVubmluZyAoc3VjY2Vzc2Z1bGx5IG9yIG5vdCkuCgogICAgVXBkYXRlcyB0aGUgcmVzdWx0IHdpdGggdGhlIG5ldyBqb2IgaW5mb3JtYXRpb24gYmVmb3JlIHJldHVybmluZy4KCiAgICBBcmdzOgogICAgICBydW5uZXI6IERhdGFmbG93UnVubmVyIGluc3RhbmNlIHRvIHVzZSBmb3IgcG9sbGluZyBqb2Igc3RhdGUuCiAgICAgIHJlc3VsdDogRGF0YWZsb3dQaXBlbGluZVJlc3VsdCBpbnN0YW5jZSB1c2VkIGZvciBqb2IgaW5mb3JtYXRpb24uCiAgICAgIGR1cmF0aW9uIChpbnQpOiBUaGUgdGltZSB0byB3YWl0IChpbiBtaWxsaXNlY29uZHMpIGZvciBqb2IgdG8gZmluaXNoLgogICAgICAgIElmIGl0IGlzIHNldCB0byA6ZGF0YTpgTm9uZWAsIGl0IHdpbGwgd2FpdCBpbmRlZmluaXRlbHkgdW50aWwgdGhlIGpvYgogICAgICAgIGlzIGZpbmlzaGVkLgogICAgIiIiCiAgICBsYXN0X21lc3NhZ2VfdGltZSA9IE5vbmUKICAgIGN1cnJlbnRfc2Vlbl9tZXNzYWdlcyA9IHNldCgpCgogICAgbGFzdF9lcnJvcl9yYW5rID0gZmxvYXQoJy1pbmYnKQogICAgbGFzdF9lcnJvcl9tc2cgPSBOb25lCiAgICBsYXN0X2pvYl9zdGF0ZSA9IE5vbmUKICAgICMgSG93IGxvbmcgdG8gd2FpdCBhZnRlciBwaXBlbGluZSBmYWlsdXJlIGZvciB0aGUgZXJyb3IKICAgICMgbWVzc2FnZSB0byBzaG93IHVwIGdpdmluZyB0aGUgcmVhc29uIGZvciB0aGUgZmFpbHVyZS4KICAgICMgSXQgdHlwaWNhbGx5IHRha2VzIGFib3V0IDMwIHNlY29uZHMuCiAgICBmaW5hbF9jb3VudGRvd25fdGltZXJfc2VjcyA9IDUwLjAKICAgIHNsZWVwX3NlY3MgPSA1LjAKCiAgICAjIFRyeSB0byBwcmlvcml0aXplIHRoZSB1c2VyLWxldmVsIHRyYWNlYmFjaywgaWYgYW55LgogICAgZGVmIHJhbmtfZXJyb3IobXNnKToKICAgICAgaWYgJ3dvcmsgaXRlbSB3YXMgYXR0ZW1wdGVkJyBpbiBtc2c6CiAgICAgICAgcmV0dXJuIC0xCiAgICAgIGVsaWYgJ1RyYWNlYmFjaycgaW4gbXNnOgogICAgICAgIHJldHVybiAxCiAgICAgIHJldHVybiAwCgogICAgaWYgZHVyYXRpb246CiAgICAgIHN0YXJ0X3NlY3MgPSB0aW1lLnRpbWUoKQogICAgICBkdXJhdGlvbl9zZWNzID0gZHVyYXRpb24gLy8gMTAwMAoKICAgIGpvYl9pZCA9IHJlc3VsdC5qb2JfaWQoKQogICAgd2hpbGUgVHJ1ZToKICAgICAgcmVzcG9uc2UgPSBydW5uZXIuZGF0YWZsb3dfY2xpZW50LmdldF9qb2Ioam9iX2lkKQogICAgICAjIElmIGdldCgpIGlzIGNhbGxlZCB2ZXJ5IHNvb24gYWZ0ZXIgQ3JlYXRlKCkgdGhlIHJlc3BvbnNlIG1heSBub3QgY29udGFpbgogICAgICAjIGFuIGluaXRpYWxpemVkICdjdXJyZW50U3RhdGUnIGZpZWxkLgogICAgICBpZiByZXNwb25zZS5jdXJyZW50U3RhdGUgaXMgbm90IE5vbmU6CiAgICAgICAgaWYgcmVzcG9uc2UuY3VycmVudFN0YXRlICE9IGxhc3Rfam9iX3N0YXRlOgogICAgICAgICAgbG9nZ2luZy5pbmZvKCdKb2IgJXMgaXMgaW4gc3RhdGUgJXMnLCBqb2JfaWQsIHJlc3BvbnNlLmN1cnJlbnRTdGF0ZSkKICAgICAgICAgIGxhc3Rfam9iX3N0YXRlID0gcmVzcG9uc2UuY3VycmVudFN0YXRlCiAgICAgICAgaWYgc3RyKHJlc3BvbnNlLmN1cnJlbnRTdGF0ZSkgIT0gJ0pPQl9TVEFURV9SVU5OSU5HJzoKICAgICAgICAgICMgU3RvcCBjaGVja2luZyBmb3IgbmV3IG1lc3NhZ2VzIG9uIHRpbWVvdXQsIGV4cGxhbmF0b3J5CiAgICAgICAgICAjIG1lc3NhZ2UgcmVjZWl2ZWQsIHN1Y2Nlc3MsIG9yIGEgdGVybWluYWwgam9iIHN0YXRlIGNhdXNlZAogICAgICAgICAgIyBieSB0aGUgdXNlciB0aGF0IHRoZXJlZm9yZSBkb2Vzbid0IHJlcXVpcmUgZXhwbGFuYXRpb24uCiAgICAgICAgICBpZiAoZmluYWxfY291bnRkb3duX3RpbWVyX3NlY3MgPD0gMC4wCiAgICAgICAgICAgICAgb3IgbGFzdF9lcnJvcl9tc2cgaXMgbm90IE5vbmUKICAgICAgICAgICAgICBvciBzdHIocmVzcG9uc2UuY3VycmVudFN0YXRlKSA9PSAnSk9CX1NUQVRFX0RPTkUnCiAgICAgICAgICAgICAgb3Igc3RyKHJlc3BvbnNlLmN1cnJlbnRTdGF0ZSkgPT0gJ0pPQl9TVEFURV9DQU5DRUxMRUQnCiAgICAgICAgICAgICAgb3Igc3RyKHJlc3BvbnNlLmN1cnJlbnRTdGF0ZSkgPT0gJ0pPQl9TVEFURV9VUERBVEVEJwogICAgICAgICAgICAgIG9yIHN0cihyZXNwb25zZS5jdXJyZW50U3RhdGUpID09ICdKT0JfU1RBVEVfRFJBSU5FRCcpOgogICAgICAgICAgICBicmVhawoKICAgICAgICAgICMgQ2hlY2sgdGhhdCBqb2IgaXMgaW4gYSBwb3N0LXByZXBhcmF0aW9uIHN0YXRlIGJlZm9yZSBzdGFydGluZyB0aGUKICAgICAgICAgICMgZmluYWwgY291bnRkb3duLgogICAgICAgICAgaWYgKHN0cihyZXNwb25zZS5jdXJyZW50U3RhdGUpIG5vdCBpbiAoCiAgICAgICAgICAgICAgJ0pPQl9TVEFURV9QRU5ESU5HJywgJ0pPQl9TVEFURV9RVUVVRUQnKSk6CiAgICAgICAgICAgICMgVGhlIGpvYiBoYXMgZmFpbGVkOyBlbnN1cmUgd2Ugc2VlIGFueSBmaW5hbCBlcnJvciBtZXNzYWdlcy4KICAgICAgICAgICAgc2xlZXBfc2VjcyA9IDEuMCAgICAgICMgcG9sbCBmYXN0ZXIgZHVyaW5nIHRoZSBmaW5hbCBjb3VudGRvd24KICAgICAgICAgICAgZmluYWxfY291bnRkb3duX3RpbWVyX3NlY3MgLT0gc2xlZXBfc2VjcwoKICAgICAgdGltZS5zbGVlcChzbGVlcF9zZWNzKQoKICAgICAgIyBHZXQgYWxsIG1lc3NhZ2VzIHNpbmNlIGJlZ2lubmluZyBvZiB0aGUgam9iIHJ1biBvciBzaW5jZSBsYXN0IG1lc3NhZ2UuCiAgICAgIHBhZ2VfdG9rZW4gPSBOb25lCiAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgbWVzc2FnZXMsIHBhZ2VfdG9rZW4gPSBydW5uZXIuZGF0YWZsb3dfY2xpZW50Lmxpc3RfbWVzc2FnZXMoCiAgICAgICAgICAgIGpvYl9pZCwgcGFnZV90b2tlbj1wYWdlX3Rva2VuLCBzdGFydF90aW1lPWxhc3RfbWVzc2FnZV90aW1lKQogICAgICAgIGZvciBtIGluIG1lc3NhZ2VzOgogICAgICAgICAgbWVzc2FnZSA9ICclczogJXM6ICVzJyAlIChtLnRpbWUsIG0ubWVzc2FnZUltcG9ydGFuY2UsIG0ubWVzc2FnZVRleHQpCgogICAgICAgICAgaWYgbm90IGxhc3RfbWVzc2FnZV90aW1lIG9yIG0udGltZSA+IGxhc3RfbWVzc2FnZV90aW1lOgogICAgICAgICAgICBsYXN0X21lc3NhZ2VfdGltZSA9IG0udGltZQogICAgICAgICAgICBjdXJyZW50X3NlZW5fbWVzc2FnZXMgPSBzZXQoKQoKICAgICAgICAgIGlmIG1lc3NhZ2UgaW4gY3VycmVudF9zZWVuX21lc3NhZ2VzOgogICAgICAgICAgICAjIFNraXAgdGhlIG1lc3NhZ2UgaWYgaXQgaGFzIGFscmVhZHkgYmVlbiBzZWVuIGF0IHRoZSBjdXJyZW50CiAgICAgICAgICAgICMgdGltZS4gVGhpcyBjb3VsZCBiZSB0aGUgY2FzZSBzaW5jZSB0aGUgbGlzdF9tZXNzYWdlcyBBUEkgaXMKICAgICAgICAgICAgIyBxdWVyaWVkIHN0YXJ0aW5nIGF0IGxhc3RfbWVzc2FnZV90aW1lLgogICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgZWxzZToKICAgICAgICAgICAgY3VycmVudF9zZWVuX21lc3NhZ2VzLmFkZChtZXNzYWdlKQogICAgICAgICAgIyBTa2lwIGVtcHR5IG1lc3NhZ2VzLgogICAgICAgICAgaWYgbS5tZXNzYWdlSW1wb3J0YW5jZSBpcyBOb25lOgogICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgbG9nZ2luZy5pbmZvKG1lc3NhZ2UpCiAgICAgICAgICBpZiBzdHIobS5tZXNzYWdlSW1wb3J0YW5jZSkgPT0gJ0pPQl9NRVNTQUdFX0VSUk9SJzoKICAgICAgICAgICAgaWYgcmFua19lcnJvcihtLm1lc3NhZ2VUZXh0KSA+PSBsYXN0X2Vycm9yX3Jhbms6CiAgICAgICAgICAgICAgbGFzdF9lcnJvcl9yYW5rID0gcmFua19lcnJvcihtLm1lc3NhZ2VUZXh0KQogICAgICAgICAgICAgIGxhc3RfZXJyb3JfbXNnID0gbS5tZXNzYWdlVGV4dAogICAgICAgIGlmIG5vdCBwYWdlX3Rva2VuOgogICAgICAgICAgYnJlYWsKCiAgICAgIGlmIGR1cmF0aW9uOgogICAgICAgIHBhc3NlZF9zZWNzID0gdGltZS50aW1lKCkgLSBzdGFydF9zZWNzCiAgICAgICAgaWYgcGFzc2VkX3NlY3MgPiBkdXJhdGlvbl9zZWNzOgogICAgICAgICAgbG9nZ2luZy53YXJuaW5nKCdUaW1pbmcgb3V0IG9uIHdhaXRpbmcgZm9yIGpvYiAlcyBhZnRlciAlZCBzZWNvbmRzJywKICAgICAgICAgICAgICAgICAgICAgICAgICBqb2JfaWQsIHBhc3NlZF9zZWNzKQogICAgICAgICAgYnJlYWsKCiAgICByZXN1bHQuX2pvYiA9IHJlc3BvbnNlCiAgICBydW5uZXIubGFzdF9lcnJvcl9tc2cgPSBsYXN0X2Vycm9yX21zZwoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGdyb3VwX2J5X2tleV9pbnB1dF92aXNpdG9yKCk6CiAgICAjIEltcG9ydGVkIGhlcmUgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLgogICAgZnJvbSBhcGFjaGVfYmVhbS5waXBlbGluZSBpbXBvcnQgUGlwZWxpbmVWaXNpdG9yCgogICAgY2xhc3MgR3JvdXBCeUtleUlucHV0VmlzaXRvcihQaXBlbGluZVZpc2l0b3IpOgogICAgICAiIiJBIHZpc2l0b3IgdGhhdCByZXBsYWNlcyBgQW55YCBlbGVtZW50IHR5cGUgZm9yIGlucHV0IGBQQ29sbGVjdGlvbmAgb2YKICAgICAgYSBgR3JvdXBCeUtleWAgb3IgYF9Hcm91cEJ5S2V5T25seWAgd2l0aCBhIGBLVmAgdHlwZS4KCiAgICAgIFRPRE8oQkVBTS0xMTUpOiBPbmNlIFB5dGhvbiBTRGsgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBuZXcgUnVubmVyIEFQSSwKICAgICAgd2UgY291bGQgZGlyZWN0bHkgcmVwbGFjZSB0aGUgY29kZXIgaW5zdGVhZCBvZiBtdXRhdGluZyB0aGUgZWxlbWVudCB0eXBlLgogICAgICAiIiIKCiAgICAgIGRlZiBlbnRlcl9jb21wb3NpdGVfdHJhbnNmb3JtKHNlbGYsIHRyYW5zZm9ybV9ub2RlKToKICAgICAgICBzZWxmLnZpc2l0X3RyYW5zZm9ybSh0cmFuc2Zvcm1fbm9kZSkKCiAgICAgIGRlZiB2aXNpdF90cmFuc2Zvcm0oc2VsZiwgdHJhbnNmb3JtX25vZGUpOgogICAgICAgICMgSW1wb3J0ZWQgaGVyZSB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMuCiAgICAgICAgIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KICAgICAgICBmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSBpbXBvcnQgR3JvdXBCeUtleSwgX0dyb3VwQnlLZXlPbmx5CiAgICAgICAgaWYgaXNpbnN0YW5jZSh0cmFuc2Zvcm1fbm9kZS50cmFuc2Zvcm0sIChHcm91cEJ5S2V5LCBfR3JvdXBCeUtleU9ubHkpKToKICAgICAgICAgIHBjb2xsID0gdHJhbnNmb3JtX25vZGUuaW5wdXRzWzBdCiAgICAgICAgICBwY29sbC5lbGVtZW50X3R5cGUgPSB0eXBlaGludHMuY29lcmNlX3RvX2t2X3R5cGUoCiAgICAgICAgICAgICAgcGNvbGwuZWxlbWVudF90eXBlLCB0cmFuc2Zvcm1fbm9kZS5mdWxsX2xhYmVsKQogICAgICAgICAga2V5X3R5cGUsIHZhbHVlX3R5cGUgPSBwY29sbC5lbGVtZW50X3R5cGUudHVwbGVfdHlwZXMKICAgICAgICAgIGlmIHRyYW5zZm9ybV9ub2RlLm91dHB1dHM6CiAgICAgICAgICAgIHRyYW5zZm9ybV9ub2RlLm91dHB1dHNbTm9uZV0uZWxlbWVudF90eXBlID0gdHlwZWhpbnRzLktWWwogICAgICAgICAgICAgICAga2V5X3R5cGUsIHR5cGVoaW50cy5JdGVyYWJsZVt2YWx1ZV90eXBlXV0KCiAgICByZXR1cm4gR3JvdXBCeUtleUlucHV0VmlzaXRvcigpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgc2lkZV9pbnB1dF92aXNpdG9yKCk6CiAgICAjIEltcG9ydGVkIGhlcmUgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLgogICAgIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KICAgIGZyb20gYXBhY2hlX2JlYW0ucGlwZWxpbmUgaW1wb3J0IFBpcGVsaW5lVmlzaXRvcgogICAgZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgaW1wb3J0IFBhckRvCgogICAgY2xhc3MgU2lkZUlucHV0VmlzaXRvcihQaXBlbGluZVZpc2l0b3IpOgogICAgICAiIiJFbnN1cmVzIGlucHV0IGBQQ29sbGVjdGlvbmAgdXNlZCBhcyBhIHNpZGUgaW5wdXRzIGhhcyBhIGBLVmAgdHlwZS4KCiAgICAgIFRPRE8oQkVBTS0xMTUpOiBPbmNlIFB5dGhvbiBTREsgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBuZXcgUnVubmVyIEFQSSwKICAgICAgd2UgY291bGQgZGlyZWN0bHkgcmVwbGFjZSB0aGUgY29kZXIgaW5zdGVhZCBvZiBtdXRhdGluZyB0aGUgZWxlbWVudCB0eXBlLgogICAgICAiIiIKICAgICAgZGVmIHZpc2l0X3RyYW5zZm9ybShzZWxmLCB0cmFuc2Zvcm1fbm9kZSk6CiAgICAgICAgaWYgaXNpbnN0YW5jZSh0cmFuc2Zvcm1fbm9kZS50cmFuc2Zvcm0sIFBhckRvKToKICAgICAgICAgIG5ld19zaWRlX2lucHV0cyA9IFtdCiAgICAgICAgICBmb3IgaXgsIHNpZGVfaW5wdXQgaW4gZW51bWVyYXRlKHRyYW5zZm9ybV9ub2RlLnNpZGVfaW5wdXRzKToKICAgICAgICAgICAgYWNjZXNzX3BhdHRlcm4gPSBzaWRlX2lucHV0Ll9zaWRlX2lucHV0X2RhdGEoKS5hY2Nlc3NfcGF0dGVybgogICAgICAgICAgICBpZiBhY2Nlc3NfcGF0dGVybiA9PSBjb21tb25fdXJucy5zaWRlX2lucHV0cy5JVEVSQUJMRS51cm46CiAgICAgICAgICAgICAgIyBBZGQgYSBtYXAgdG8gKCcnLCB2YWx1ZSkgYXMgRGF0YWZsb3cgY3VycmVudGx5IG9ubHkgaGFuZGxlcwogICAgICAgICAgICAgICMga2V5ZWQgc2lkZSBpbnB1dHMuCiAgICAgICAgICAgICAgcGlwZWxpbmUgPSBzaWRlX2lucHV0LnB2YWx1ZS5waXBlbGluZQogICAgICAgICAgICAgIG5ld19zaWRlX2lucHV0ID0gX0RhdGFmbG93SXRlcmFibGVTaWRlSW5wdXQoc2lkZV9pbnB1dCkKICAgICAgICAgICAgICBuZXdfc2lkZV9pbnB1dC5wdmFsdWUgPSBiZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbigKICAgICAgICAgICAgICAgICAgcGlwZWxpbmUsCiAgICAgICAgICAgICAgICAgIGVsZW1lbnRfdHlwZT10eXBlaGludHMuS1ZbCiAgICAgICAgICAgICAgICAgICAgICBzdHIsIHNpZGVfaW5wdXQucHZhbHVlLmVsZW1lbnRfdHlwZV0pCiAgICAgICAgICAgICAgcGFyZW50ID0gdHJhbnNmb3JtX25vZGUucGFyZW50IG9yIHBpcGVsaW5lLl9yb290X3RyYW5zZm9ybSgpCiAgICAgICAgICAgICAgbWFwX3RvX3ZvaWRfa2V5ID0gYmVhbS5waXBlbGluZS5BcHBsaWVkUFRyYW5zZm9ybSgKICAgICAgICAgICAgICAgICAgcGlwZWxpbmUsCiAgICAgICAgICAgICAgICAgIGJlYW0uTWFwKGxhbWJkYSB4OiAoJycsIHgpKSwKICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtX25vZGUuZnVsbF9sYWJlbCArICcvTWFwVG9Wb2lkS2V5JXMnICUgaXgsCiAgICAgICAgICAgICAgICAgIChzaWRlX2lucHV0LnB2YWx1ZSwpKQogICAgICAgICAgICAgIG5ld19zaWRlX2lucHV0LnB2YWx1ZS5wcm9kdWNlciA9IG1hcF90b192b2lkX2tleQogICAgICAgICAgICAgIG1hcF90b192b2lkX2tleS5hZGRfb3V0cHV0KG5ld19zaWRlX2lucHV0LnB2YWx1ZSkKICAgICAgICAgICAgICBwYXJlbnQuYWRkX3BhcnQobWFwX3RvX3ZvaWRfa2V5KQogICAgICAgICAgICBlbGlmIGFjY2Vzc19wYXR0ZXJuID09IGNvbW1vbl91cm5zLnNpZGVfaW5wdXRzLk1VTFRJTUFQLnVybjoKICAgICAgICAgICAgICAjIEVuc3VyZSB0aGUgaW5wdXQgY29kZXIgaXMgYSBLViBjb2RlciBhbmQgcGF0Y2ggdXAgdGhlCiAgICAgICAgICAgICAgIyBhY2Nlc3MgcGF0dGVybiB0byBhcHBlYXNlIERhdGFmbG93LgogICAgICAgICAgICAgIHNpZGVfaW5wdXQucHZhbHVlLmVsZW1lbnRfdHlwZSA9IHR5cGVoaW50cy5jb2VyY2VfdG9fa3ZfdHlwZSgKICAgICAgICAgICAgICAgICAgc2lkZV9pbnB1dC5wdmFsdWUuZWxlbWVudF90eXBlLCB0cmFuc2Zvcm1fbm9kZS5mdWxsX2xhYmVsKQogICAgICAgICAgICAgIG5ld19zaWRlX2lucHV0ID0gX0RhdGFmbG93TXVsdGltYXBTaWRlSW5wdXQoc2lkZV9pbnB1dCkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgICAgICAgICAnVW5zdXBwb3J0ZWQgYWNjZXNzIHBhdHRlcm4gZm9yICVyOiAlcicgJQogICAgICAgICAgICAgICAgICAodHJhbnNmb3JtX25vZGUuZnVsbF9sYWJlbCwgYWNjZXNzX3BhdHRlcm4pKQogICAgICAgICAgICBuZXdfc2lkZV9pbnB1dHMuYXBwZW5kKG5ld19zaWRlX2lucHV0KQogICAgICAgICAgdHJhbnNmb3JtX25vZGUuc2lkZV9pbnB1dHMgPSBuZXdfc2lkZV9pbnB1dHMKICAgICAgICAgIHRyYW5zZm9ybV9ub2RlLnRyYW5zZm9ybS5zaWRlX2lucHV0cyA9IG5ld19zaWRlX2lucHV0cwoKICAgIHJldHVybiBTaWRlSW5wdXRWaXNpdG9yKCkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBmbGF0dGVuX2lucHV0X3Zpc2l0b3IoKToKICAgICMgSW1wb3J0ZWQgaGVyZSB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMuCiAgICBmcm9tIGFwYWNoZV9iZWFtLnBpcGVsaW5lIGltcG9ydCBQaXBlbGluZVZpc2l0b3IKCiAgICBjbGFzcyBGbGF0dGVuSW5wdXRWaXNpdG9yKFBpcGVsaW5lVmlzaXRvcik6CiAgICAgICIiIkEgdmlzaXRvciB0aGF0IHJlcGxhY2VzIHRoZSBlbGVtZW50IHR5cGUgZm9yIGlucHV0IGBgUENvbGxlY3Rpb25zYGBzIG9mCiAgICAgICBhIGBgRmxhdHRlbmBgIHRyYW5zZm9ybSB3aXRoIHRoYXQgb2YgdGhlIG91dHB1dCBgYFBDb2xsZWN0aW9uYGAuCiAgICAgICIiIgoKICAgICAgZGVmIHZpc2l0X3RyYW5zZm9ybShzZWxmLCB0cmFuc2Zvcm1fbm9kZSk6CiAgICAgICAgIyBJbXBvcnRlZCBoZXJlIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llcy4KICAgICAgICAjIHB5bGludDogZGlzYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbgogICAgICAgIGZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IEZsYXR0ZW4KICAgICAgICBpZiBpc2luc3RhbmNlKHRyYW5zZm9ybV9ub2RlLnRyYW5zZm9ybSwgRmxhdHRlbik6CiAgICAgICAgICBvdXRwdXRfcGNvbGwgPSB0cmFuc2Zvcm1fbm9kZS5vdXRwdXRzW05vbmVdCiAgICAgICAgICBmb3IgaW5wdXRfcGNvbGwgaW4gdHJhbnNmb3JtX25vZGUuaW5wdXRzOgogICAgICAgICAgICBpbnB1dF9wY29sbC5lbGVtZW50X3R5cGUgPSBvdXRwdXRfcGNvbGwuZWxlbWVudF90eXBlCgogICAgcmV0dXJuIEZsYXR0ZW5JbnB1dFZpc2l0b3IoKQoKICBkZWYgcnVuX3BpcGVsaW5lKHNlbGYsIHBpcGVsaW5lLCBvcHRpb25zKToKICAgICIiIlJlbW90ZWx5IGV4ZWN1dGVzIGVudGlyZSBwaXBlbGluZSBvciBwYXJ0cyByZWFjaGFibGUgZnJvbSBub2RlLiIiIgogICAgIyBJbXBvcnQgaGVyZSB0byBhdm9pZCBhZGRpbmcgdGhlIGRlcGVuZGVuY3kgZm9yIGxvY2FsIHJ1bm5pbmcgc2NlbmFyaW9zLgogICAgdHJ5OgogICAgICAjIHB5bGludDogZGlzYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbgogICAgICBmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuaW50ZXJuYWwgaW1wb3J0IGFwaWNsaWVudAogICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICByYWlzZSBJbXBvcnRFcnJvcigKICAgICAgICAgICdHb29nbGUgQ2xvdWQgRGF0YWZsb3cgcnVubmVyIG5vdCBhdmFpbGFibGUsICcKICAgICAgICAgICdwbGVhc2UgaW5zdGFsbCBhcGFjaGVfYmVhbVtnY3BdJykKCiAgICAjIENvbnZlcnQgYWxsIHNpZGUgaW5wdXRzIGludG8gYSBmb3JtIGFjY2VwdGFibGUgdG8gRGF0YWZsb3cuCiAgICBpZiBhcGljbGllbnQuX3VzZV9mbmFwaShvcHRpb25zKSBhbmQgKAogICAgICAgIG5vdCBhcGljbGllbnQuX3VzZV91bmlmaWVkX3dvcmtlcihvcHRpb25zKSk6CiAgICAgIHBpcGVsaW5lLnZpc2l0KHNlbGYuc2lkZV9pbnB1dF92aXNpdG9yKCkpCgogICAgIyBQZXJmb3JtaW5nIGNvbmZpZ3VyZWQgUFRyYW5zZm9ybSBvdmVycmlkZXMuICBOb3RlIHRoYXQgdGhpcyBpcyBjdXJyZW50bHkKICAgICMgZG9uZSBiZWZvcmUgUnVubmVyIEFQSSBzZXJpYWxpemF0aW9uLCBzaW5jZSB0aGUgbmV3IHByb3RvIG5lZWRzIHRvIGNvbnRhaW4KICAgICMgYW55IGFkZGVkIFBUcmFuc2Zvcm1zLgogICAgcGlwZWxpbmUucmVwbGFjZV9hbGwoRGF0YWZsb3dSdW5uZXIuX1BUUkFOU0ZPUk1fT1ZFUlJJREVTKQoKICAgICMgU25hcHNob3QgdGhlIHBpcGVsaW5lIGluIGEgcG9ydGFibGUgcHJvdG8uCiAgICBzZWxmLnByb3RvX3BpcGVsaW5lLCBzZWxmLnByb3RvX2NvbnRleHQgPSBwaXBlbGluZS50b19ydW5uZXJfYXBpKAogICAgICAgIHJldHVybl9jb250ZXh0PVRydWUpCgogICAgIyBBZGQgc2V0dXBfb3B0aW9ucyBmb3IgYWxsIHRoZSBCZWFtUGx1Z2luIGltcG9ydHMKICAgIHNldHVwX29wdGlvbnMgPSBvcHRpb25zLnZpZXdfYXMoU2V0dXBPcHRpb25zKQogICAgcGx1Z2lucyA9IEJlYW1QbHVnaW4uZ2V0X2FsbF9wbHVnaW5fcGF0aHMoKQogICAgaWYgc2V0dXBfb3B0aW9ucy5iZWFtX3BsdWdpbnMgaXMgbm90IE5vbmU6CiAgICAgIHBsdWdpbnMgPSBsaXN0KHNldChwbHVnaW5zICsgc2V0dXBfb3B0aW9ucy5iZWFtX3BsdWdpbnMpKQogICAgc2V0dXBfb3B0aW9ucy5iZWFtX3BsdWdpbnMgPSBwbHVnaW5zCgogICAgIyBFbGV2YXRlICJtaW5fY3B1X3BsYXRmb3JtIiB0byBwaXBlbGluZSBvcHRpb24sIGJ1dCB1c2luZyB0aGUgZXhpc3RpbmcKICAgICMgZXhwZXJpbWVudC4KICAgIGRlYnVnX29wdGlvbnMgPSBvcHRpb25zLnZpZXdfYXMoRGVidWdPcHRpb25zKQogICAgd29ya2VyX29wdGlvbnMgPSBvcHRpb25zLnZpZXdfYXMoV29ya2VyT3B0aW9ucykKICAgIGlmIHdvcmtlcl9vcHRpb25zLm1pbl9jcHVfcGxhdGZvcm06CiAgICAgIGV4cGVyaW1lbnRzID0gWyJtaW5fY3B1X3BsYXRmb3JtPSVzIiAlIHdvcmtlcl9vcHRpb25zLm1pbl9jcHVfcGxhdGZvcm1dCiAgICAgIGlmIGRlYnVnX29wdGlvbnMuZXhwZXJpbWVudHMgaXMgbm90IE5vbmU6CiAgICAgICAgZXhwZXJpbWVudHMgPSBsaXN0KHNldChleHBlcmltZW50cyArIGRlYnVnX29wdGlvbnMuZXhwZXJpbWVudHMpKQogICAgICBkZWJ1Z19vcHRpb25zLmV4cGVyaW1lbnRzID0gZXhwZXJpbWVudHMKCiAgICBzZWxmLmpvYiA9IGFwaWNsaWVudC5Kb2Iob3B0aW9ucywgc2VsZi5wcm90b19waXBlbGluZSkKCiAgICAjIERhdGFmbG93IHJ1bm5lciByZXF1aXJlcyBhIEtWIHR5cGUgZm9yIEdCSyBpbnB1dHMsIGhlbmNlIHdlIGVuZm9yY2UgdGhhdAogICAgIyBoZXJlLgogICAgcGlwZWxpbmUudmlzaXQoc2VsZi5ncm91cF9ieV9rZXlfaW5wdXRfdmlzaXRvcigpKQoKICAgICMgRGF0YWZsb3cgcnVubmVyIHJlcXVpcmVzIG91dHB1dCB0eXBlIG9mIHRoZSBGbGF0dGVuIHRvIGJlIHRoZSBzYW1lIGFzIHRoZQogICAgIyBpbnB1dHMsIGhlbmNlIHdlIGVuZm9yY2UgdGhhdCBoZXJlLgogICAgcGlwZWxpbmUudmlzaXQoc2VsZi5mbGF0dGVuX2lucHV0X3Zpc2l0b3IoKSkKCiAgICAjIFRoZSBzdXBlcmNsYXNzJ3MgcnVuIHdpbGwgdHJpZ2dlciBhIHRyYXZlcnNhbCBvZiBhbGwgcmVhY2hhYmxlIG5vZGVzLgogICAgc3VwZXIoRGF0YWZsb3dSdW5uZXIsIHNlbGYpLnJ1bl9waXBlbGluZShwaXBlbGluZSwgb3B0aW9ucykKCiAgICB0ZXN0X29wdGlvbnMgPSBvcHRpb25zLnZpZXdfYXMoVGVzdE9wdGlvbnMpCiAgICAjIElmIGl0IGlzIGEgZHJ5IHJ1biwgcmV0dXJuIHdpdGhvdXQgc3VibWl0dGluZyB0aGUgam9iLgogICAgaWYgdGVzdF9vcHRpb25zLmRyeV9ydW46CiAgICAgIHJldHVybiBOb25lCgogICAgIyBHZXQgYSBEYXRhZmxvdyBBUEkgY2xpZW50IGFuZCBzZXQgaXRzIG9wdGlvbnMKICAgIHNlbGYuZGF0YWZsb3dfY2xpZW50ID0gYXBpY2xpZW50LkRhdGFmbG93QXBwbGljYXRpb25DbGllbnQob3B0aW9ucykKCiAgICBkYXRhZmxvd193b3JrZXJfamFyID0gZ2V0YXR0cih3b3JrZXJfb3B0aW9ucywgJ2RhdGFmbG93X3dvcmtlcl9qYXInLCBOb25lKQogICAgaWYgZGF0YWZsb3dfd29ya2VyX2phciBpcyBub3QgTm9uZToKICAgICAgaWYgbm90IGFwaWNsaWVudC5fdXNlX2ZuYXBpKG9wdGlvbnMpOgogICAgICAgIGxvZ2dpbmcuZmF0YWwoCiAgICAgICAgICAgICdUeXBpY2FsIGVuZCB1c2VycyBzaG91bGQgbm90IHVzZSB0aGlzIHdvcmtlciBqYXIgZmVhdHVyZS4gJwogICAgICAgICAgICAnSXQgY2FuIG9ubHkgYmUgdXNlZCB3aGVuIGZuYXBpIGlzIGVuYWJsZWQuJykKCiAgICAgIGV4cGVyaW1lbnRzID0gWyJ1c2Vfc3RhZ2VkX2RhdGFmbG93X3dvcmtlcl9qYXIiXQogICAgICBpZiBkZWJ1Z19vcHRpb25zLmV4cGVyaW1lbnRzIGlzIG5vdCBOb25lOgogICAgICAgIGV4cGVyaW1lbnRzID0gbGlzdChzZXQoZXhwZXJpbWVudHMgKyBkZWJ1Z19vcHRpb25zLmV4cGVyaW1lbnRzKSkKICAgICAgZGVidWdfb3B0aW9ucy5leHBlcmltZW50cyA9IGV4cGVyaW1lbnRzCgogICAgIyBDcmVhdGUgdGhlIGpvYiBkZXNjcmlwdGlvbiBhbmQgc2VuZCBhIHJlcXVlc3QgdG8gdGhlIHNlcnZpY2UuIFRoZSByZXN1bHQKICAgICMgY2FuIGJlIE5vbmUgaWYgdGhlcmUgaXMgbm8gbmVlZCB0byBzZW5kIGEgcmVxdWVzdCB0byB0aGUgc2VydmljZSAoZS5nLgogICAgIyB0ZW1wbGF0ZSBjcmVhdGlvbikuIElmIGEgcmVxdWVzdCB3YXMgc2VudCBhbmQgZmFpbGVkIHRoZW4gdGhlIGNhbGwgd2lsbAogICAgIyByYWlzZSBhbiBleGNlcHRpb24uCiAgICByZXN1bHQgPSBEYXRhZmxvd1BpcGVsaW5lUmVzdWx0KAogICAgICAgIHNlbGYuZGF0YWZsb3dfY2xpZW50LmNyZWF0ZV9qb2Ioc2VsZi5qb2IpLCBzZWxmKQoKICAgICMgVE9ETyhCRUFNLTQyNzQpOiBDaXJjdWxhciBpbXBvcnQgcnVubmVycy1tZXRyaWNzLiBSZXF1aXJlcyByZWZhY3RvcmluZy4KICAgIGZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19tZXRyaWNzIGltcG9ydCBEYXRhZmxvd01ldHJpY3MKICAgIHNlbGYuX21ldHJpY3MgPSBEYXRhZmxvd01ldHJpY3Moc2VsZi5kYXRhZmxvd19jbGllbnQsIHJlc3VsdCwgc2VsZi5qb2IpCiAgICByZXN1bHQubWV0cmljX3Jlc3VsdHMgPSBzZWxmLl9tZXRyaWNzCiAgICByZXR1cm4gcmVzdWx0CgogIGRlZiBfZ2V0X3R5cGVoaW50X2Jhc2VkX2VuY29kaW5nKHNlbGYsIHR5cGVoaW50LCB3aW5kb3dfY29kZXIsIHVzZV9mbmFwaSk6CiAgICAiIiJSZXR1cm5zIGFuIGVuY29kaW5nIGJhc2VkIG9uIGEgdHlwZWhpbnQgb2JqZWN0LiIiIgogICAgcmV0dXJuIHNlbGYuX2dldF9jbG91ZF9lbmNvZGluZygKICAgICAgICBzZWxmLl9nZXRfY29kZXIodHlwZWhpbnQsIHdpbmRvd19jb2Rlcj13aW5kb3dfY29kZXIpLCB1c2VfZm5hcGkpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgX2dldF9jb2Rlcih0eXBlaGludCwgd2luZG93X2NvZGVyKToKICAgICIiIlJldHVybnMgYSBjb2RlciBiYXNlZCBvbiBhIHR5cGVoaW50IG9iamVjdC4iIiIKICAgIGlmIHdpbmRvd19jb2RlcjoKICAgICAgcmV0dXJuIGNvZGVycy5XaW5kb3dlZFZhbHVlQ29kZXIoCiAgICAgICAgICBjb2RlcnMucmVnaXN0cnkuZ2V0X2NvZGVyKHR5cGVoaW50KSwKICAgICAgICAgIHdpbmRvd19jb2Rlcj13aW5kb3dfY29kZXIpCiAgICByZXR1cm4gY29kZXJzLnJlZ2lzdHJ5LmdldF9jb2Rlcih0eXBlaGludCkKCiAgZGVmIF9nZXRfY2xvdWRfZW5jb2Rpbmcoc2VsZiwgY29kZXIsIHVzZV9mbmFwaSk6CiAgICAiIiJSZXR1cm5zIGFuIGVuY29kaW5nIGJhc2VkIG9uIGEgY29kZXIgb2JqZWN0LiIiIgogICAgaWYgbm90IGlzaW5zdGFuY2UoY29kZXIsIGNvZGVycy5Db2Rlcik6CiAgICAgIHJhaXNlIFR5cGVFcnJvcignQ29kZXIgb2JqZWN0IG11c3QgaW5oZXJpdCBmcm9tIGNvZGVycy5Db2RlcjogJXMuJyAlCiAgICAgICAgICAgICAgICAgICAgICBzdHIoY29kZXIpKQogICAgcmV0dXJuIGNvZGVyLmFzX2Nsb3VkX29iamVjdChzZWxmLnByb3RvX2NvbnRleHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNvZGVycyBpZiB1c2VfZm5hcGkgZWxzZSBOb25lKQoKICBkZWYgX2dldF9zaWRlX2lucHV0X2VuY29kaW5nKHNlbGYsIGlucHV0X2VuY29kaW5nKToKICAgICIiIlJldHVybnMgYW4gZW5jb2RpbmcgZm9yIHRoZSBvdXRwdXQgb2YgYSB2aWV3IHRyYW5zZm9ybS4KCiAgICBBcmdzOgogICAgICBpbnB1dF9lbmNvZGluZzogZW5jb2Rpbmcgb2YgY3VycmVudCB0cmFuc2Zvcm0ncyBpbnB1dC4gU2lkZSBpbnB1dHMgbmVlZAogICAgICAgIHRoaXMgYmVjYXVzZSB0aGUgc2VydmljZSB3aWxsIGNoZWNrIHRoYXQgaW5wdXQgYW5kIG91dHB1dCB0eXBlcyBtYXRjaC4KCiAgICBSZXR1cm5zOgogICAgICBBbiBlbmNvZGluZyB0aGF0IG1hdGNoZXMgdGhlIG91dHB1dCBhbmQgaW5wdXQgZW5jb2RpbmcuIFRoaXMgaXMgZXNzZW50aWFsCiAgICAgIGZvciB0aGUgVmlldyB0cmFuc2Zvcm1zIGludHJvZHVjZWQgdG8gcHJvZHVjZSBzaWRlIGlucHV0cyB0byBhIFBhckRvLgogICAgIiIiCiAgICByZXR1cm4gewogICAgICAgICdAdHlwZSc6ICdraW5kOnN0cmVhbScsCiAgICAgICAgJ2NvbXBvbmVudF9lbmNvZGluZ3MnOiBbaW5wdXRfZW5jb2RpbmddLAogICAgICAgICdpc19zdHJlYW1fbGlrZSc6IHsKICAgICAgICAgICAgJ3ZhbHVlJzogVHJ1ZQogICAgICAgIH0sCiAgICB9CgogIGRlZiBfZ2V0X2VuY29kZWRfb3V0cHV0X2NvZGVyKHNlbGYsIHRyYW5zZm9ybV9ub2RlLCB3aW5kb3dfdmFsdWU9VHJ1ZSk6CiAgICAiIiJSZXR1cm5zIHRoZSBjbG91ZCBlbmNvZGluZyBvZiB0aGUgY29kZXIgZm9yIHRoZSBvdXRwdXQgb2YgYSB0cmFuc2Zvcm0uIiIiCiAgICBpZiAobGVuKHRyYW5zZm9ybV9ub2RlLm91dHB1dHMpID09IDEKICAgICAgICBhbmQgdHJhbnNmb3JtX25vZGUub3V0cHV0c1tOb25lXS5lbGVtZW50X3R5cGUgaXMgbm90IE5vbmUpOgogICAgICAjIFRPRE8ocm9iZXJ0d2IpOiBIYW5kbGUgdHlwZSBoaW50cyBmb3IgbXVsdGktb3V0cHV0IHRyYW5zZm9ybXMuCiAgICAgIGVsZW1lbnRfdHlwZSA9IHRyYW5zZm9ybV9ub2RlLm91dHB1dHNbTm9uZV0uZWxlbWVudF90eXBlCiAgICBlbHNlOgogICAgICAjIFRPRE8oc2lsdml1Yyk6IFJlbW92ZSB0aGlzIGJyYW5jaCAoYW5kIGFzc2VydCkgd2hlbiB0eXBlaGludHMgYXJlCiAgICAgICMgcHJvcGFnYXRlZCBldmVyeXdoZXJlLiBSZXR1cm5pbmcgYW4gJ0FueScgYXMgdHlwZSBoaW50IHdpbGwgdHJpZ2dlcgogICAgICAjIHVzYWdlIG9mIHRoZSBmYWxsYmFjayBjb2RlciAoaS5lLiwgY1BpY2tsZXIpLgogICAgICBlbGVtZW50X3R5cGUgPSB0eXBlaGludHMuQW55CiAgICBpZiB3aW5kb3dfdmFsdWU6CiAgICAgIHdpbmRvd19jb2RlciA9ICgKICAgICAgICAgIHRyYW5zZm9ybV9ub2RlLm91dHB1dHNbTm9uZV0ud2luZG93aW5nLndpbmRvd2ZuLmdldF93aW5kb3dfY29kZXIoKSkKICAgIGVsc2U6CiAgICAgIHdpbmRvd19jb2RlciA9IE5vbmUKICAgIGZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5pbnRlcm5hbCBpbXBvcnQgYXBpY2xpZW50CiAgICB1c2VfZm5hcGkgPSBhcGljbGllbnQuX3VzZV9mbmFwaSgKICAgICAgICB0cmFuc2Zvcm1fbm9kZS5vdXRwdXRzLnZhbHVlcygpWzBdLnBpcGVsaW5lLl9vcHRpb25zKQogICAgcmV0dXJuIHNlbGYuX2dldF90eXBlaGludF9iYXNlZF9lbmNvZGluZyhlbGVtZW50X3R5cGUsIHdpbmRvd19jb2RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlX2ZuYXBpKQoKICBkZWYgX2FkZF9zdGVwKHNlbGYsIHN0ZXBfa2luZCwgc3RlcF9sYWJlbCwgdHJhbnNmb3JtX25vZGUsIHNpZGVfdGFncz0oKSk6CiAgICAiIiJDcmVhdGVzIGEgU3RlcCBvYmplY3QgYW5kIGFkZHMgaXQgdG8gdGhlIGNhY2hlLiIiIgogICAgIyBJbXBvcnQgaGVyZSB0byBhdm9pZCBhZGRpbmcgdGhlIGRlcGVuZGVuY3kgZm9yIGxvY2FsIHJ1bm5pbmcgc2NlbmFyaW9zLgogICAgIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KICAgIGZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5pbnRlcm5hbCBpbXBvcnQgYXBpY2xpZW50CiAgICBzdGVwID0gYXBpY2xpZW50LlN0ZXAoc3RlcF9raW5kLCBzZWxmLl9nZXRfdW5pcXVlX3N0ZXBfbmFtZSgpKQogICAgc2VsZi5qb2IucHJvdG8uc3RlcHMuYXBwZW5kKHN0ZXAucHJvdG8pCiAgICBzdGVwLmFkZF9wcm9wZXJ0eShQcm9wZXJ0eU5hbWVzLlVTRVJfTkFNRSwgc3RlcF9sYWJlbCkKICAgICMgQ2FjaGUgdGhlIG5vZGUvc3RlcCBhc3NvY2lhdGlvbiBmb3IgdGhlIG1haW4gb3V0cHV0IG9mIHRoZSB0cmFuc2Zvcm0gbm9kZS4KICAgIHNlbGYuX2NhY2hlLmNhY2hlX291dHB1dCh0cmFuc2Zvcm1fbm9kZSwgTm9uZSwgc3RlcCkKICAgICMgSWYgc2lkZV90YWdzIGlzIG5vdCAoKSB0aGVuIHRoaXMgaXMgYSBtdWx0aS1vdXRwdXQgdHJhbnNmb3JtIG5vZGUgYW5kIHdlCiAgICAjIG5lZWQgdG8gY2FjaGUgdGhlIChub2RlLCB0YWcsIHN0ZXApIGZvciBlYWNoIG9mIHRoZSB0YWdzIHVzZWQgdG8gYWNjZXNzCiAgICAjIHRoZSBvdXRwdXRzLiBUaGlzIGlzIGVzc2VudGlhbCBiZWNhdXNlIHRoZSBrZXlzIHVzZWQgdG8gc2VhcmNoIGluIHRoZQogICAgIyBjYWNoZSBhbHdheXMgY29udGFpbiB0aGUgdGFnLgogICAgZm9yIHRhZyBpbiBzaWRlX3RhZ3M6CiAgICAgIHNlbGYuX2NhY2hlLmNhY2hlX291dHB1dCh0cmFuc2Zvcm1fbm9kZSwgdGFnLCBzdGVwKQoKICAgICMgRmluYWxseSwgd2UgYWRkIHRoZSBkaXNwbGF5IGRhdGEgaXRlbXMgdG8gdGhlIHBpcGVsaW5lIHN0ZXAuCiAgICAjIElmIHRoZSB0cmFuc2Zvcm0gY29udGFpbnMgbm8gZGlzcGxheSBkYXRhIHRoZW4gYW4gZW1wdHkgbGlzdCBpcyBhZGRlZC4KICAgIHN0ZXAuYWRkX3Byb3BlcnR5KAogICAgICAgIFByb3BlcnR5TmFtZXMuRElTUExBWV9EQVRBLAogICAgICAgIFtpdGVtLmdldF9kaWN0KCkgZm9yIGl0ZW0gaW4KICAgICAgICAgRGlzcGxheURhdGEuY3JlYXRlX2Zyb20odHJhbnNmb3JtX25vZGUudHJhbnNmb3JtKS5pdGVtc10pCgogICAgcmV0dXJuIHN0ZXAKCiAgZGVmIF9hZGRfc2luZ2xldG9uX3N0ZXAoCiAgICAgIHNlbGYsIGxhYmVsLCBmdWxsX2xhYmVsLCB0YWcsIGlucHV0X3N0ZXAsIHdpbmRvd2luZ19zdHJhdGVneSk6CiAgICAiIiJDcmVhdGVzIGEgQ29sbGVjdGlvblRvU2luZ2xldG9uIHN0ZXAgdXNlZCB0byBoYW5kbGUgUGFyRG8gc2lkZSBpbnB1dHMuIiIiCiAgICAjIEltcG9ydCBoZXJlIHRvIGF2b2lkIGFkZGluZyB0aGUgZGVwZW5kZW5jeSBmb3IgbG9jYWwgcnVubmluZyBzY2VuYXJpb3MuCiAgICBmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuaW50ZXJuYWwgaW1wb3J0IGFwaWNsaWVudAogICAgc3RlcCA9IGFwaWNsaWVudC5TdGVwKFRyYW5zZm9ybU5hbWVzLkNPTExFQ1RJT05fVE9fU0lOR0xFVE9OLCBsYWJlbCkKICAgIHNlbGYuam9iLnByb3RvLnN0ZXBzLmFwcGVuZChzdGVwLnByb3RvKQogICAgc3RlcC5hZGRfcHJvcGVydHkoUHJvcGVydHlOYW1lcy5VU0VSX05BTUUsIGZ1bGxfbGFiZWwpCiAgICBzdGVwLmFkZF9wcm9wZXJ0eSgKICAgICAgICBQcm9wZXJ0eU5hbWVzLlBBUkFMTEVMX0lOUFVULAogICAgICAgIHsnQHR5cGUnOiAnT3V0cHV0UmVmZXJlbmNlJywKICAgICAgICAgUHJvcGVydHlOYW1lcy5TVEVQX05BTUU6IGlucHV0X3N0ZXAucHJvdG8ubmFtZSwKICAgICAgICAgUHJvcGVydHlOYW1lcy5PVVRQVVRfTkFNRTogaW5wdXRfc3RlcC5nZXRfb3V0cHV0KHRhZyl9KQogICAgc3RlcC5lbmNvZGluZyA9IHNlbGYuX2dldF9zaWRlX2lucHV0X2VuY29kaW5nKGlucHV0X3N0ZXAuZW5jb2RpbmcpCiAgICBzdGVwLmFkZF9wcm9wZXJ0eSgKICAgICAgICBQcm9wZXJ0eU5hbWVzLk9VVFBVVF9JTkZPLAogICAgICAgIFt7UHJvcGVydHlOYW1lcy5VU0VSX05BTUU6ICgKICAgICAgICAgICAgJyVzLiVzJyAlIChmdWxsX2xhYmVsLCBQcm9wZXJ0eU5hbWVzLk9VVFBVVCkpLAogICAgICAgICAgUHJvcGVydHlOYW1lcy5FTkNPRElORzogc3RlcC5lbmNvZGluZywKICAgICAgICAgIFByb3BlcnR5TmFtZXMuT1VUUFVUX05BTUU6IFByb3BlcnR5TmFtZXMuT1VUfV0pCiAgICBzdGVwLmFkZF9wcm9wZXJ0eSgKICAgICAgICBQcm9wZXJ0eU5hbWVzLldJTkRPV0lOR19TVFJBVEVHWSwKICAgICAgICBzZWxmLnNlcmlhbGl6ZV93aW5kb3dpbmdfc3RyYXRlZ3kod2luZG93aW5nX3N0cmF0ZWd5KSkKICAgIHJldHVybiBzdGVwCgogIGRlZiBydW5fSW1wdWxzZShzZWxmLCB0cmFuc2Zvcm1fbm9kZSwgb3B0aW9ucyk6CiAgICBzdGFuZGFyZF9vcHRpb25zID0gb3B0aW9ucy52aWV3X2FzKFN0YW5kYXJkT3B0aW9ucykKICAgIHN0ZXAgPSBzZWxmLl9hZGRfc3RlcCgKICAgICAgICBUcmFuc2Zvcm1OYW1lcy5SRUFELCB0cmFuc2Zvcm1fbm9kZS5mdWxsX2xhYmVsLCB0cmFuc2Zvcm1fbm9kZSkKICAgIGlmIHN0YW5kYXJkX29wdGlvbnMuc3RyZWFtaW5nOgogICAgICBzdGVwLmFkZF9wcm9wZXJ0eShQcm9wZXJ0eU5hbWVzLkZPUk1BVCwgJ3B1YnN1YicpCiAgICAgIHN0ZXAuYWRkX3Byb3BlcnR5KFByb3BlcnR5TmFtZXMuUFVCU1VCX1NVQlNDUklQVElPTiwgJ19zdGFydGluZ19zaWduYWwvJykKICAgIGVsc2U6CiAgICAgIHN0ZXAuYWRkX3Byb3BlcnR5KFByb3BlcnR5TmFtZXMuRk9STUFULCAnaW1wdWxzZScpCiAgICAgIGVuY29kZWRfaW1wdWxzZV9lbGVtZW50ID0gY29kZXJzLldpbmRvd2VkVmFsdWVDb2RlcigKICAgICAgICAgIGNvZGVycy5CeXRlc0NvZGVyKCksCiAgICAgICAgICBjb2RlcnMuY29kZXJzLkdsb2JhbFdpbmRvd0NvZGVyKCkpLmdldF9pbXBsKCkuZW5jb2RlX25lc3RlZCgKICAgICAgICAgICAgICB3aW5kb3cuR2xvYmFsV2luZG93cy53aW5kb3dlZF92YWx1ZShiJycpKQogICAgICBzdGVwLmFkZF9wcm9wZXJ0eShQcm9wZXJ0eU5hbWVzLklNUFVMU0VfRUxFTUVOVCwKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ieXRlX2FycmF5X3RvX2pzb25fc3RyaW5nKGVuY29kZWRfaW1wdWxzZV9lbGVtZW50KSkKCiAgICBzdGVwLmVuY29kaW5nID0gc2VsZi5fZ2V0X2VuY29kZWRfb3V0cHV0X2NvZGVyKHRyYW5zZm9ybV9ub2RlKQogICAgc3RlcC5hZGRfcHJvcGVydHkoCiAgICAgICAgUHJvcGVydHlOYW1lcy5PVVRQVVRfSU5GTywKICAgICAgICBbe1Byb3BlcnR5TmFtZXMuVVNFUl9OQU1FOiAoCiAgICAgICAgICAgICclcy4lcycgJSAoCiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1fbm9kZS5mdWxsX2xhYmVsLCBQcm9wZXJ0eU5hbWVzLk9VVCkpLAogICAgICAgICAgUHJvcGVydHlOYW1lcy5FTkNPRElORzogc3RlcC5lbmNvZGluZywKICAgICAgICAgIFByb3BlcnR5TmFtZXMuT1VUUFVUX05BTUU6IFByb3BlcnR5TmFtZXMuT1VUfV0pCgogIGRlZiBydW5fRmxhdHRlbihzZWxmLCB0cmFuc2Zvcm1fbm9kZSwgb3B0aW9ucyk6CiAgICBzdGVwID0gc2VsZi5fYWRkX3N0ZXAoVHJhbnNmb3JtTmFtZXMuRkxBVFRFTiwKICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1fbm9kZS5mdWxsX2xhYmVsLCB0cmFuc2Zvcm1fbm9kZSkKICAgIGlucHV0cyA9IFtdCiAgICBmb3Igb25lX2lucHV0IGluIHRyYW5zZm9ybV9ub2RlLmlucHV0czoKICAgICAgaW5wdXRfc3RlcCA9IHNlbGYuX2NhY2hlLmdldF9wdmFsdWUob25lX2lucHV0KQogICAgICBpbnB1dHMuYXBwZW5kKAogICAgICAgICAgeydAdHlwZSc6ICdPdXRwdXRSZWZlcmVuY2UnLAogICAgICAgICAgIFByb3BlcnR5TmFtZXMuU1RFUF9OQU1FOiBpbnB1dF9zdGVwLnByb3RvLm5hbWUsCiAgICAgICAgICAgUHJvcGVydHlOYW1lcy5PVVRQVVRfTkFNRTogaW5wdXRfc3RlcC5nZXRfb3V0cHV0KG9uZV9pbnB1dC50YWcpfSkKICAgIHN0ZXAuYWRkX3Byb3BlcnR5KFByb3BlcnR5TmFtZXMuSU5QVVRTLCBpbnB1dHMpCiAgICBzdGVwLmVuY29kaW5nID0gc2VsZi5fZ2V0X2VuY29kZWRfb3V0cHV0X2NvZGVyKHRyYW5zZm9ybV9ub2RlKQogICAgc3RlcC5hZGRfcHJvcGVydHkoCiAgICAgICAgUHJvcGVydHlOYW1lcy5PVVRQVVRfSU5GTywKICAgICAgICBbe1Byb3BlcnR5TmFtZXMuVVNFUl9OQU1FOiAoCiAgICAgICAgICAgICclcy4lcycgJSAodHJhbnNmb3JtX25vZGUuZnVsbF9sYWJlbCwgUHJvcGVydHlOYW1lcy5PVVQpKSwKICAgICAgICAgIFByb3BlcnR5TmFtZXMuRU5DT0RJTkc6IHN0ZXAuZW5jb2RpbmcsCiAgICAgICAgICBQcm9wZXJ0eU5hbWVzLk9VVFBVVF9OQU1FOiBQcm9wZXJ0eU5hbWVzLk9VVH1dKQoKICBkZWYgYXBwbHlfV3JpdGVUb0JpZ1F1ZXJ5KHNlbGYsIHRyYW5zZm9ybSwgcGNvbGwsIG9wdGlvbnMpOgogICAgIyBNYWtlIHN1cmUgdGhpcyBpcyB0aGUgV3JpdGVUb0JpZ1F1ZXJ5IGNsYXNzIHRoYXQgd2UgZXhwZWN0ZWQKICAgIGlmIG5vdCBpc2luc3RhbmNlKHRyYW5zZm9ybSwgYmVhbS5pby5Xcml0ZVRvQmlnUXVlcnkpOgogICAgICByZXR1cm4gc2VsZi5hcHBseV9QVHJhbnNmb3JtKHRyYW5zZm9ybSwgcGNvbGwsIG9wdGlvbnMpCiAgICBzdGFuZGFyZF9vcHRpb25zID0gb3B0aW9ucy52aWV3X2FzKFN0YW5kYXJkT3B0aW9ucykKICAgIGlmIHN0YW5kYXJkX29wdGlvbnMuc3RyZWFtaW5nOgogICAgICBpZiAodHJhbnNmb3JtLndyaXRlX2Rpc3Bvc2l0aW9uID09CiAgICAgICAgICBiZWFtLmlvLkJpZ1F1ZXJ5RGlzcG9zaXRpb24uV1JJVEVfVFJVTkNBVEUpOgogICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignQ2FuIG5vdCB1c2Ugd3JpdGUgdHJ1bmNhdGlvbiBtb2RlIGluIHN0cmVhbWluZycpCiAgICAgIHJldHVybiBzZWxmLmFwcGx5X1BUcmFuc2Zvcm0odHJhbnNmb3JtLCBwY29sbCwgb3B0aW9ucykKICAgIGVsc2U6CiAgICAgIHJldHVybiBwY29sbCAgfCAnV3JpdGVUb0JpZ1F1ZXJ5JyA+PiBiZWFtLmlvLldyaXRlKAogICAgICAgICAgYmVhbS5pby5CaWdRdWVyeVNpbmsoCiAgICAgICAgICAgICAgdHJhbnNmb3JtLnRhYmxlX3JlZmVyZW5jZS50YWJsZUlkLAogICAgICAgICAgICAgIHRyYW5zZm9ybS50YWJsZV9yZWZlcmVuY2UuZGF0YXNldElkLAogICAgICAgICAgICAgIHRyYW5zZm9ybS50YWJsZV9yZWZlcmVuY2UucHJvamVjdElkLAogICAgICAgICAgICAgIHRyYW5zZm9ybS5zY2hlbWEsCiAgICAgICAgICAgICAgdHJhbnNmb3JtLmNyZWF0ZV9kaXNwb3NpdGlvbiwKICAgICAgICAgICAgICB0cmFuc2Zvcm0ud3JpdGVfZGlzcG9zaXRpb24pKQoKICBkZWYgYXBwbHlfR3JvdXBCeUtleShzZWxmLCB0cmFuc2Zvcm0sIHBjb2xsLCBvcHRpb25zKToKICAgICMgSW5mZXIgY29kZXIgb2YgcGFyZW50LgogICAgIwogICAgIyBUT0RPKGNjeSk6IG1ha2UgQ29kZXIgaW5mZXJlbmNlIGFuZCBjaGVja2luZyBsZXNzIHNwZWNpYWxpemVkIGFuZCBtb3JlCiAgICAjIGNvbXByZWhlbnNpdmUuCiAgICBwYXJlbnQgPSBwY29sbC5wcm9kdWNlcgogICAgaWYgcGFyZW50OgogICAgICBjb2RlciA9IHBhcmVudC50cmFuc2Zvcm0uX2luZmVyX291dHB1dF9jb2RlcigpICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCiAgICBpZiBub3QgY29kZXI6CiAgICAgIGNvZGVyID0gc2VsZi5fZ2V0X2NvZGVyKHBjb2xsLmVsZW1lbnRfdHlwZSBvciB0eXBlaGludHMuQW55LCBOb25lKQogICAgaWYgbm90IGNvZGVyLmlzX2t2X2NvZGVyKCk6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoKCdDb2RlciBmb3IgdGhlIEdyb3VwQnlLZXkgb3BlcmF0aW9uICIlcyIgaXMgbm90IGEgJwogICAgICAgICAgICAgICAgICAgICAgICAna2V5LXZhbHVlIGNvZGVyOiAlcy4nKSAlICh0cmFuc2Zvcm0ubGFiZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVyKSkKICAgICMgVE9ETyhyb2JlcnR3Yik6IFVwZGF0ZSB0aGUgY29kZXIgaXRzZWxmIGlmIGl0IGNoYW5nZWQuCiAgICBjb2RlcnMucmVnaXN0cnkudmVyaWZ5X2RldGVybWluaXN0aWMoCiAgICAgICAgY29kZXIua2V5X2NvZGVyKCksICdHcm91cEJ5S2V5IG9wZXJhdGlvbiAiJXMiJyAlIHRyYW5zZm9ybS5sYWJlbCkKCiAgICByZXR1cm4gcHZhbHVlLlBDb2xsZWN0aW9uKHBjb2xsLnBpcGVsaW5lKQoKICBkZWYgcnVuX0dyb3VwQnlLZXkoc2VsZiwgdHJhbnNmb3JtX25vZGUsIG9wdGlvbnMpOgogICAgaW5wdXRfdGFnID0gdHJhbnNmb3JtX25vZGUuaW5wdXRzWzBdLnRhZwogICAgaW5wdXRfc3RlcCA9IHNlbGYuX2NhY2hlLmdldF9wdmFsdWUodHJhbnNmb3JtX25vZGUuaW5wdXRzWzBdKQogICAgc3RlcCA9IHNlbGYuX2FkZF9zdGVwKAogICAgICAgIFRyYW5zZm9ybU5hbWVzLkdST1VQLCB0cmFuc2Zvcm1fbm9kZS5mdWxsX2xhYmVsLCB0cmFuc2Zvcm1fbm9kZSkKICAgIHN0ZXAuYWRkX3Byb3BlcnR5KAogICAgICAgIFByb3BlcnR5TmFtZXMuUEFSQUxMRUxfSU5QVVQsCiAgICAgICAgeydAdHlwZSc6ICdPdXRwdXRSZWZlcmVuY2UnLAogICAgICAgICBQcm9wZXJ0eU5hbWVzLlNURVBfTkFNRTogaW5wdXRfc3RlcC5wcm90by5uYW1lLAogICAgICAgICBQcm9wZXJ0eU5hbWVzLk9VVFBVVF9OQU1FOiBpbnB1dF9zdGVwLmdldF9vdXRwdXQoaW5wdXRfdGFnKX0pCiAgICBzdGVwLmVuY29kaW5nID0gc2VsZi5fZ2V0X2VuY29kZWRfb3V0cHV0X2NvZGVyKHRyYW5zZm9ybV9ub2RlKQogICAgc3RlcC5hZGRfcHJvcGVydHkoCiAgICAgICAgUHJvcGVydHlOYW1lcy5PVVRQVVRfSU5GTywKICAgICAgICBbe1Byb3BlcnR5TmFtZXMuVVNFUl9OQU1FOiAoCiAgICAgICAgICAgICclcy4lcycgJSAodHJhbnNmb3JtX25vZGUuZnVsbF9sYWJlbCwgUHJvcGVydHlOYW1lcy5PVVQpKSwKICAgICAgICAgIFByb3BlcnR5TmFtZXMuRU5DT0RJTkc6IHN0ZXAuZW5jb2RpbmcsCiAgICAgICAgICBQcm9wZXJ0eU5hbWVzLk9VVFBVVF9OQU1FOiBQcm9wZXJ0eU5hbWVzLk9VVH1dKQogICAgd2luZG93aW5nID0gdHJhbnNmb3JtX25vZGUudHJhbnNmb3JtLmdldF93aW5kb3dpbmcoCiAgICAgICAgdHJhbnNmb3JtX25vZGUuaW5wdXRzKQogICAgc3RlcC5hZGRfcHJvcGVydHkoCiAgICAgICAgUHJvcGVydHlOYW1lcy5TRVJJQUxJWkVEX0ZOLAogICAgICAgIHNlbGYuc2VyaWFsaXplX3dpbmRvd2luZ19zdHJhdGVneSh3aW5kb3dpbmcpKQoKICBkZWYgcnVuX1BhckRvKHNlbGYsIHRyYW5zZm9ybV9ub2RlLCBvcHRpb25zKToKICAgIHRyYW5zZm9ybSA9IHRyYW5zZm9ybV9ub2RlLnRyYW5zZm9ybQogICAgaW5wdXRfdGFnID0gdHJhbnNmb3JtX25vZGUuaW5wdXRzWzBdLnRhZwogICAgaW5wdXRfc3RlcCA9IHNlbGYuX2NhY2hlLmdldF9wdmFsdWUodHJhbnNmb3JtX25vZGUuaW5wdXRzWzBdKQoKICAgICMgQXR0YWNoIHNpZGUgaW5wdXRzLgogICAgc2lfZGljdCA9IHt9CiAgICBzaV9sYWJlbHMgPSB7fQogICAgZnVsbF9sYWJlbF9jb3VudHMgPSBkZWZhdWx0ZGljdChpbnQpCiAgICBsb29rdXBfbGFiZWwgPSBsYW1iZGEgc2lkZV9wdmFsOiBzaV9sYWJlbHNbc2lkZV9wdmFsXQogICAgbmFtZWRfaW5wdXRzID0gdHJhbnNmb3JtX25vZGUubmFtZWRfaW5wdXRzKCkKICAgIGxhYmVsX3JlbmFtZXMgPSB7fQogICAgZm9yIGl4LCBzaWRlX3B2YWwgaW4gZW51bWVyYXRlKHRyYW5zZm9ybV9ub2RlLnNpZGVfaW5wdXRzKToKICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uoc2lkZV9wdmFsLCBBc1NpZGVJbnB1dCkKICAgICAgc3RlcF9uYW1lID0gJ1NpZGVJbnB1dC0nICsgc2VsZi5fZ2V0X3VuaXF1ZV9zdGVwX25hbWUoKQogICAgICBzaV9sYWJlbCA9ICdzaWRlJWQtJXMnICUgKGl4LCB0cmFuc2Zvcm1fbm9kZS5mdWxsX2xhYmVsKQogICAgICBvbGRfbGFiZWwgPSAnc2lkZSVkJyAlIGl4CiAgICAgIGxhYmVsX3JlbmFtZXNbb2xkX2xhYmVsXSA9IHNpX2xhYmVsCiAgICAgIGFzc2VydCBvbGRfbGFiZWwgaW4gbmFtZWRfaW5wdXRzCiAgICAgIHBjb2xsZWN0aW9uX2xhYmVsID0gJyVzLiVzJyAlICgKICAgICAgICAgIHNpZGVfcHZhbC5wdmFsdWUucHJvZHVjZXIuZnVsbF9sYWJlbC5zcGxpdCgnLycpWy0xXSwKICAgICAgICAgIHNpZGVfcHZhbC5wdmFsdWUudGFnIGlmIHNpZGVfcHZhbC5wdmFsdWUudGFnIGVsc2UgJ291dCcpCiAgICAgIHNpX2Z1bGxfbGFiZWwgPSAnJXMvJXMoJXMuJXMpJyAlICh0cmFuc2Zvcm1fbm9kZS5mdWxsX2xhYmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lkZV9wdmFsLl9fY2xhc3NfXy5fX25hbWVfXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjb2xsZWN0aW9uX2xhYmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbF9sYWJlbF9jb3VudHNbcGNvbGxlY3Rpb25fbGFiZWxdKQoKICAgICAgIyBDb3VudCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBzYW1lIFBDb2xsZWN0aW9uIGlzIGEgc2lkZSBpbnB1dAogICAgICAjIHRvIHRoZSBzYW1lIFBhckRvLgogICAgICBmdWxsX2xhYmVsX2NvdW50c1twY29sbGVjdGlvbl9sYWJlbF0gKz0gMQoKICAgICAgc2VsZi5fYWRkX3NpbmdsZXRvbl9zdGVwKAogICAgICAgICAgc3RlcF9uYW1lLCBzaV9mdWxsX2xhYmVsLCBzaWRlX3B2YWwucHZhbHVlLnRhZywKICAgICAgICAgIHNlbGYuX2NhY2hlLmdldF9wdmFsdWUoc2lkZV9wdmFsLnB2YWx1ZSksCiAgICAgICAgICBzaWRlX3B2YWwucHZhbHVlLndpbmRvd2luZykKICAgICAgc2lfZGljdFtzaV9sYWJlbF0gPSB7CiAgICAgICAgICAnQHR5cGUnOiAnT3V0cHV0UmVmZXJlbmNlJywKICAgICAgICAgIFByb3BlcnR5TmFtZXMuU1RFUF9OQU1FOiBzdGVwX25hbWUsCiAgICAgICAgICBQcm9wZXJ0eU5hbWVzLk9VVFBVVF9OQU1FOiBQcm9wZXJ0eU5hbWVzLk9VVH0KICAgICAgc2lfbGFiZWxzW3NpZGVfcHZhbF0gPSBzaV9sYWJlbAoKICAgICMgTm93IGNyZWF0ZSB0aGUgc3RlcCBmb3IgdGhlIFBhckRvIHRyYW5zZm9ybSBiZWluZyBoYW5kbGVkLgogICAgdHJhbnNmb3JtX25hbWUgPSB0cmFuc2Zvcm1fbm9kZS5mdWxsX2xhYmVsLnJzcGxpdCgnLycsIDEpWy0xXQogICAgc3RlcCA9IHNlbGYuX2FkZF9zdGVwKAogICAgICAgIFRyYW5zZm9ybU5hbWVzLkRPLAogICAgICAgIHRyYW5zZm9ybV9ub2RlLmZ1bGxfbGFiZWwgKyAoCiAgICAgICAgICAgICcve30nLmZvcm1hdCh0cmFuc2Zvcm1fbmFtZSkKICAgICAgICAgICAgaWYgdHJhbnNmb3JtX25vZGUuc2lkZV9pbnB1dHMgZWxzZSAnJyksCiAgICAgICAgdHJhbnNmb3JtX25vZGUsCiAgICAgICAgdHJhbnNmb3JtX25vZGUudHJhbnNmb3JtLm91dHB1dF90YWdzKQogICAgIyBJbXBvcnQgaGVyZSB0byBhdm9pZCBhZGRpbmcgdGhlIGRlcGVuZGVuY3kgZm9yIGxvY2FsIHJ1bm5pbmcgc2NlbmFyaW9zLgogICAgIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KICAgIGZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5pbnRlcm5hbCBpbXBvcnQgYXBpY2xpZW50CiAgICB0cmFuc2Zvcm1fcHJvdG8gPSBzZWxmLnByb3RvX2NvbnRleHQudHJhbnNmb3Jtcy5nZXRfcHJvdG8odHJhbnNmb3JtX25vZGUpCiAgICB0cmFuc2Zvcm1faWQgPSBzZWxmLnByb3RvX2NvbnRleHQudHJhbnNmb3Jtcy5nZXRfaWQodHJhbnNmb3JtX25vZGUpCiAgICAjIFRoZSBkYXRhIHRyYW5zbWl0dGVkIGluIFNFUklBTElaRURfRk4gaXMgZGlmZmVyZW50IGRlcGVuZGluZyBvbiB3aGV0aGVyCiAgICAjIHRoaXMgaXMgYSBmbmFwaSBwaXBlbGluZSBvciBub3QuCiAgICBpZiAoYXBpY2xpZW50Ll91c2VfZm5hcGkob3B0aW9ucykgYW5kCiAgICAgICAgKHRyYW5zZm9ybV9wcm90by5zcGVjLnVybiA9PSBjb21tb25fdXJucy5wcmltaXRpdmVzLlBBUl9ETy51cm4gb3IKICAgICAgICAgYXBpY2xpZW50Ll91c2VfdW5pZmllZF93b3JrZXIob3B0aW9ucykpKToKICAgICAgIyBQYXRjaCBzaWRlIGlucHV0IGlkcyB0byBiZSB1bmlxdWUgYWNyb3NzIGEgZ2l2ZW4gcGlwZWxpbmUuCiAgICAgIGlmIChsYWJlbF9yZW5hbWVzIGFuZAogICAgICAgICAgdHJhbnNmb3JtX3Byb3RvLnNwZWMudXJuID09IGNvbW1vbl91cm5zLnByaW1pdGl2ZXMuUEFSX0RPLnVybik6CiAgICAgICAgIyBQYXRjaCBQVHJhbnNmb3JtIHByb3RvLgogICAgICAgIGZvciBvbGQsIG5ldyBpbiBpdGVyaXRlbXMobGFiZWxfcmVuYW1lcyk6CiAgICAgICAgICB0cmFuc2Zvcm1fcHJvdG8uaW5wdXRzW25ld10gPSB0cmFuc2Zvcm1fcHJvdG8uaW5wdXRzW29sZF0KICAgICAgICAgIGRlbCB0cmFuc2Zvcm1fcHJvdG8uaW5wdXRzW29sZF0KCiAgICAgICAgIyBQYXRjaCBQYXJEbyBwcm90by4KICAgICAgICBwcm90b190eXBlLCBfID0gYmVhbS5QVHJhbnNmb3JtLl9rbm93bl91cm5zW3RyYW5zZm9ybV9wcm90by5zcGVjLnVybl0KICAgICAgICBwcm90byA9IHByb3RvX3V0aWxzLnBhcnNlX0J5dGVzKHRyYW5zZm9ybV9wcm90by5zcGVjLnBheWxvYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b190eXBlKQogICAgICAgIGZvciBvbGQsIG5ldyBpbiBpdGVyaXRlbXMobGFiZWxfcmVuYW1lcyk6CiAgICAgICAgICBwcm90by5zaWRlX2lucHV0c1tuZXddLkNvcHlGcm9tKHByb3RvLnNpZGVfaW5wdXRzW29sZF0pCiAgICAgICAgICBkZWwgcHJvdG8uc2lkZV9pbnB1dHNbb2xkXQogICAgICAgIHRyYW5zZm9ybV9wcm90by5zcGVjLnBheWxvYWQgPSBwcm90by5TZXJpYWxpemVUb1N0cmluZygpCiAgICAgICAgIyBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgcGlwZWxpbmUgcHJvdG8uCiAgICAgICAgZGVsIHNlbGYucHJvdG9fcGlwZWxpbmUuY29tcG9uZW50cy50cmFuc2Zvcm1zW3RyYW5zZm9ybV9pZF0KICAgICAgICAoc2VsZi5wcm90b19waXBlbGluZS5jb21wb25lbnRzLnRyYW5zZm9ybXNbdHJhbnNmb3JtX2lkXQogICAgICAgICAuQ29weUZyb20odHJhbnNmb3JtX3Byb3RvKSkKICAgICAgc2VyaWFsaXplZF9kYXRhID0gdHJhbnNmb3JtX2lkCiAgICBlbHNlOgogICAgICBzZXJpYWxpemVkX2RhdGEgPSBwaWNrbGVyLmR1bXBzKAogICAgICAgICAgc2VsZi5fcGFyZG9fZm5fZGF0YSh0cmFuc2Zvcm1fbm9kZSwgbG9va3VwX2xhYmVsKSkKICAgIHN0ZXAuYWRkX3Byb3BlcnR5KFByb3BlcnR5TmFtZXMuU0VSSUFMSVpFRF9GTiwgc2VyaWFsaXplZF9kYXRhKQogICAgc3RlcC5hZGRfcHJvcGVydHkoCiAgICAgICAgUHJvcGVydHlOYW1lcy5QQVJBTExFTF9JTlBVVCwKICAgICAgICB7J0B0eXBlJzogJ091dHB1dFJlZmVyZW5jZScsCiAgICAgICAgIFByb3BlcnR5TmFtZXMuU1RFUF9OQU1FOiBpbnB1dF9zdGVwLnByb3RvLm5hbWUsCiAgICAgICAgIFByb3BlcnR5TmFtZXMuT1VUUFVUX05BTUU6IGlucHV0X3N0ZXAuZ2V0X291dHB1dChpbnB1dF90YWcpfSkKICAgICMgQWRkIHNpZGUgaW5wdXRzIGlmIGFueS4KICAgIHN0ZXAuYWRkX3Byb3BlcnR5KFByb3BlcnR5TmFtZXMuTk9OX1BBUkFMTEVMX0lOUFVUUywgc2lfZGljdCkKCiAgICAjIEdlbmVyYXRlIGRlc2NyaXB0aW9uIGZvciB0aGUgb3V0cHV0cy4gVGhlIG91dHB1dCBuYW1lcwogICAgIyB3aWxsIGJlICdvdXQnIGZvciBtYWluIG91dHB1dCBhbmQgJ291dF88dGFnPicgZm9yIGEgdGFnZ2VkIG91dHB1dC4KICAgICMgVXNpbmcgJ291dCcgYXMgYSB0YWcgd2lsbCBub3QgY2xhc2ggd2l0aCB0aGUgbmFtZSBmb3IgbWFpbiBzaW5jZSBpdCB3aWxsCiAgICAjIGJlIHRyYW5zZm9ybWVkIGludG8gJ291dF9vdXQnIGludGVybmFsbHkuCiAgICBvdXRwdXRzID0gW10KICAgIHN0ZXAuZW5jb2RpbmcgPSBzZWxmLl9nZXRfZW5jb2RlZF9vdXRwdXRfY29kZXIodHJhbnNmb3JtX25vZGUpCgogICAgIyBBZGQgdGhlIG1haW4gb3V0cHV0IHRvIHRoZSBkZXNjcmlwdGlvbi4KICAgIG91dHB1dHMuYXBwZW5kKAogICAgICAgIHtQcm9wZXJ0eU5hbWVzLlVTRVJfTkFNRTogKAogICAgICAgICAgICAnJXMuJXMnICUgKHRyYW5zZm9ybV9ub2RlLmZ1bGxfbGFiZWwsIFByb3BlcnR5TmFtZXMuT1VUKSksCiAgICAgICAgIFByb3BlcnR5TmFtZXMuRU5DT0RJTkc6IHN0ZXAuZW5jb2RpbmcsCiAgICAgICAgIFByb3BlcnR5TmFtZXMuT1VUUFVUX05BTUU6IFByb3BlcnR5TmFtZXMuT1VUfSkKICAgIGZvciBzaWRlX3RhZyBpbiB0cmFuc2Zvcm0ub3V0cHV0X3RhZ3M6CiAgICAgICMgVGhlIGFzc3VtcHRpb24gaGVyZSBpcyB0aGF0IGFsbCBvdXRwdXRzIHdpbGwgaGF2ZSB0aGUgc2FtZSB0eXBlaGludAogICAgICAjIGFuZCBjb2RlciBhcyB0aGUgbWFpbiBvdXRwdXQuIFRoaXMgaXMgY2VydGFpbmx5IHRoZSBjYXNlIHJpZ2h0IG5vdwogICAgICAjIGJ1dCBjb25jZWl2YWJseSBpdCBjb3VsZCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4KICAgICAgb3V0cHV0cy5hcHBlbmQoCiAgICAgICAgICB7UHJvcGVydHlOYW1lcy5VU0VSX05BTUU6ICgKICAgICAgICAgICAgICAnJXMuJXMnICUgKHRyYW5zZm9ybV9ub2RlLmZ1bGxfbGFiZWwsIHNpZGVfdGFnKSksCiAgICAgICAgICAgUHJvcGVydHlOYW1lcy5FTkNPRElORzogc3RlcC5lbmNvZGluZywKICAgICAgICAgICBQcm9wZXJ0eU5hbWVzLk9VVFBVVF9OQU1FOiAoCiAgICAgICAgICAgICAgICclc18lcycgJSAoUHJvcGVydHlOYW1lcy5PVVQsIHNpZGVfdGFnKSl9KQoKICAgIHN0ZXAuYWRkX3Byb3BlcnR5KFByb3BlcnR5TmFtZXMuT1VUUFVUX0lORk8sIG91dHB1dHMpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgX3BhcmRvX2ZuX2RhdGEodHJhbnNmb3JtX25vZGUsIGdldF9sYWJlbCk6CiAgICB0cmFuc2Zvcm0gPSB0cmFuc2Zvcm1fbm9kZS50cmFuc2Zvcm0KICAgIHNpX3RhZ3NfYW5kX3R5cGVzID0gWyAgIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcwogICAgICAgIChnZXRfbGFiZWwoc2lkZV9wdmFsKSwgc2lkZV9wdmFsLl9fY2xhc3NfXywgc2lkZV9wdmFsLl92aWV3X29wdGlvbnMoKSkKICAgICAgICBmb3Igc2lkZV9wdmFsIGluIHRyYW5zZm9ybV9ub2RlLnNpZGVfaW5wdXRzXQogICAgcmV0dXJuICh0cmFuc2Zvcm0uZm4sIHRyYW5zZm9ybS5hcmdzLCB0cmFuc2Zvcm0ua3dhcmdzLCBzaV90YWdzX2FuZF90eXBlcywKICAgICAgICAgICAgdHJhbnNmb3JtX25vZGUuaW5wdXRzWzBdLndpbmRvd2luZykKCiAgZGVmIGFwcGx5X0NvbWJpbmVWYWx1ZXMoc2VsZiwgdHJhbnNmb3JtLCBwY29sbCwgb3B0aW9ucyk6CiAgICByZXR1cm4gcHZhbHVlLlBDb2xsZWN0aW9uKHBjb2xsLnBpcGVsaW5lKQoKICBkZWYgcnVuX0NvbWJpbmVWYWx1ZXMoc2VsZiwgdHJhbnNmb3JtX25vZGUsIG9wdGlvbnMpOgogICAgdHJhbnNmb3JtID0gdHJhbnNmb3JtX25vZGUudHJhbnNmb3JtCiAgICBpbnB1dF90YWcgPSB0cmFuc2Zvcm1fbm9kZS5pbnB1dHNbMF0udGFnCiAgICBpbnB1dF9zdGVwID0gc2VsZi5fY2FjaGUuZ2V0X3B2YWx1ZSh0cmFuc2Zvcm1fbm9kZS5pbnB1dHNbMF0pCiAgICBzdGVwID0gc2VsZi5fYWRkX3N0ZXAoCiAgICAgICAgVHJhbnNmb3JtTmFtZXMuQ09NQklORSwgdHJhbnNmb3JtX25vZGUuZnVsbF9sYWJlbCwgdHJhbnNmb3JtX25vZGUpCgogICAgIyBUaGUgZGF0YSB0cmFuc21pdHRlZCBpbiBTRVJJQUxJWkVEX0ZOIGlzIGRpZmZlcmVudCBkZXBlbmRpbmcgb24gd2hldGhlcgogICAgIyB0aGlzIGlzIGEgZm5hcGkgcGlwZWxpbmUgb3Igbm90LgogICAgZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmludGVybmFsIGltcG9ydCBhcGljbGllbnQKICAgIHVzZV9mbmFwaSA9IGFwaWNsaWVudC5fdXNlX2ZuYXBpKG9wdGlvbnMpCiAgICBpZiB1c2VfZm5hcGk6CiAgICAgICMgRm5hcGkgcGlwZWxpbmVzIHNlbmQgdGhlIHRyYW5zZm9ybSBJRCBvZiB0aGUgQ29tYmluZVZhbHVlcyB0cmFuc2Zvcm0ncwogICAgICAjIHBhcmVudCBjb21wb3NpdGUgYmVjYXVzZSBEYXRhZmxvdyBleHBlY3RzIHRoZSBJRCBvZiBhIENvbWJpbmVQZXJLZXkKICAgICAgIyB0cmFuc2Zvcm0uCiAgICAgIHNlcmlhbGl6ZWRfZGF0YSA9IHNlbGYucHJvdG9fY29udGV4dC50cmFuc2Zvcm1zLmdldF9pZCgKICAgICAgICAgIHRyYW5zZm9ybV9ub2RlLnBhcmVudCkKICAgIGVsc2U6CiAgICAgICMgQ29tYmluZXIgZnVuY3Rpb25zIGRvIG5vdCB0YWtlIGRlZmVycmVkIHNpZGUtaW5wdXRzIChpLmUuIFBWYWx1ZXMpIGFuZAogICAgICAjIHRoZXJlZm9yZSB0aGUgY29kZSB0byBoYW5kbGUgZXh0cmEgYXJncy9rd2FyZ3MgaXMgc2ltcGxlciB0aGFuIGZvciB0aGUKICAgICAgIyBEb0ZuJ3Mgb2YgdGhlIFBhckRvIHRyYW5zZm9ybS4gSW4gdGhlIGxhc3QsIGVtcHR5IGFyZ3VtZW50IGlzIHdoZXJlCiAgICAgICMgc2lkZSBpbnB1dHMgaW5mb3JtYXRpb24gd291bGQgZ28uCiAgICAgIHNlcmlhbGl6ZWRfZGF0YSA9IHBpY2tsZXIuZHVtcHMoKHRyYW5zZm9ybS5mbiwgdHJhbnNmb3JtLmFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5rd2FyZ3MsICgpKSkKICAgIHN0ZXAuYWRkX3Byb3BlcnR5KFByb3BlcnR5TmFtZXMuU0VSSUFMSVpFRF9GTiwgc2VyaWFsaXplZF9kYXRhKQogICAgc3RlcC5hZGRfcHJvcGVydHkoCiAgICAgICAgUHJvcGVydHlOYW1lcy5QQVJBTExFTF9JTlBVVCwKICAgICAgICB7J0B0eXBlJzogJ091dHB1dFJlZmVyZW5jZScsCiAgICAgICAgIFByb3BlcnR5TmFtZXMuU1RFUF9OQU1FOiBpbnB1dF9zdGVwLnByb3RvLm5hbWUsCiAgICAgICAgIFByb3BlcnR5TmFtZXMuT1VUUFVUX05BTUU6IGlucHV0X3N0ZXAuZ2V0X291dHB1dChpbnB1dF90YWcpfSkKICAgICMgTm90ZSB0aGF0IHRoZSBhY2N1bXVsYXRvciBtdXN0IG5vdCBoYXZlIGEgV2luZG93ZWRWYWx1ZSBlbmNvZGluZywgd2hpbGUKICAgICMgdGhlIG91dHB1dCBvZiB0aGlzIHN0ZXAgZG9lcyBpbiBmYWN0IGhhdmUgYSBXaW5kb3dlZFZhbHVlIGVuY29kaW5nLgogICAgYWNjdW11bGF0b3JfZW5jb2RpbmcgPSBzZWxmLl9nZXRfY2xvdWRfZW5jb2RpbmcoCiAgICAgICAgdHJhbnNmb3JtX25vZGUudHJhbnNmb3JtLmZuLmdldF9hY2N1bXVsYXRvcl9jb2RlcigpLCB1c2VfZm5hcGkpCiAgICBvdXRwdXRfZW5jb2RpbmcgPSBzZWxmLl9nZXRfZW5jb2RlZF9vdXRwdXRfY29kZXIodHJhbnNmb3JtX25vZGUpCgogICAgc3RlcC5lbmNvZGluZyA9IG91dHB1dF9lbmNvZGluZwogICAgc3RlcC5hZGRfcHJvcGVydHkoUHJvcGVydHlOYW1lcy5FTkNPRElORywgYWNjdW11bGF0b3JfZW5jb2RpbmcpCiAgICAjIEdlbmVyYXRlIGRlc2NyaXB0aW9uIGZvciBtYWluIG91dHB1dCAnb3V0LicKICAgIG91dHB1dHMgPSBbXQogICAgIyBBZGQgdGhlIG1haW4gb3V0cHV0IHRvIHRoZSBkZXNjcmlwdGlvbi4KICAgIG91dHB1dHMuYXBwZW5kKAogICAgICAgIHtQcm9wZXJ0eU5hbWVzLlVTRVJfTkFNRTogKAogICAgICAgICAgICAnJXMuJXMnICUgKHRyYW5zZm9ybV9ub2RlLmZ1bGxfbGFiZWwsIFByb3BlcnR5TmFtZXMuT1VUKSksCiAgICAgICAgIFByb3BlcnR5TmFtZXMuRU5DT0RJTkc6IHN0ZXAuZW5jb2RpbmcsCiAgICAgICAgIFByb3BlcnR5TmFtZXMuT1VUUFVUX05BTUU6IFByb3BlcnR5TmFtZXMuT1VUfSkKICAgIHN0ZXAuYWRkX3Byb3BlcnR5KFByb3BlcnR5TmFtZXMuT1VUUFVUX0lORk8sIG91dHB1dHMpCgogIGRlZiBhcHBseV9SZWFkKHNlbGYsIHRyYW5zZm9ybSwgcGJlZ2luLCBvcHRpb25zKToKICAgIGlmIGhhc2F0dHIodHJhbnNmb3JtLnNvdXJjZSwgJ2Zvcm1hdCcpOgogICAgICAjIENvbnNpZGVyIG5hdGl2ZSBSZWFkIHRvIGJlIGEgcHJpbWl0aXZlIGZvciBkYXRhZmxvdy4KICAgICAgcmV0dXJuIGJlYW0ucHZhbHVlLlBDb2xsZWN0aW9uKHBiZWdpbi5waXBlbGluZSkKICAgIGVsc2U6CiAgICAgIGRlYnVnX29wdGlvbnMgPSBvcHRpb25zLnZpZXdfYXMoRGVidWdPcHRpb25zKQogICAgICBpZiAoCiAgICAgICAgICBkZWJ1Z19vcHRpb25zLmV4cGVyaW1lbnRzIGFuZAogICAgICAgICAgJ2JlYW1fZm5fYXBpJyBpbiBkZWJ1Z19vcHRpb25zLmV4cGVyaW1lbnRzCiAgICAgICk6CiAgICAgICAgIyBFeHBhbmQgYWNjb3JkaW5nIHRvIEZuQVBJIHByaW1pdGl2ZXMuCiAgICAgICAgcmV0dXJuIHNlbGYuYXBwbHlfUFRyYW5zZm9ybSh0cmFuc2Zvcm0sIHBiZWdpbiwgb3B0aW9ucykKICAgICAgZWxzZToKICAgICAgICAjIEN1c3RvbSBSZWFkIGlzIGFsc28gYSBwcmltaXRpdmUgZm9yIG5vbi1GbkFQSSBvbiBkYXRhZmxvdy4KICAgICAgICByZXR1cm4gYmVhbS5wdmFsdWUuUENvbGxlY3Rpb24ocGJlZ2luLnBpcGVsaW5lKQoKICBkZWYgcnVuX1JlYWQoc2VsZiwgdHJhbnNmb3JtX25vZGUsIG9wdGlvbnMpOgogICAgdHJhbnNmb3JtID0gdHJhbnNmb3JtX25vZGUudHJhbnNmb3JtCiAgICBzdGVwID0gc2VsZi5fYWRkX3N0ZXAoCiAgICAgICAgVHJhbnNmb3JtTmFtZXMuUkVBRCwgdHJhbnNmb3JtX25vZGUuZnVsbF9sYWJlbCwgdHJhbnNmb3JtX25vZGUpCiAgICAjIFRPRE8obWFpcmJlayk6IHJlZmFjdG9yIGlmLWVsc2UgdHJlZSB0byB1c2UgcmVnaXN0ZXJhYmxlIGZ1bmN0aW9ucy4KICAgICMgSW5pdGlhbGl6ZSB0aGUgc291cmNlIHNwZWNpZmljIHByb3BlcnRpZXMuCgogICAgc3RhbmRhcmRfb3B0aW9ucyA9IG9wdGlvbnMudmlld19hcyhTdGFuZGFyZE9wdGlvbnMpCiAgICBpZiBub3QgaGFzYXR0cih0cmFuc2Zvcm0uc291cmNlLCAnZm9ybWF0Jyk6CiAgICAgICMgSWYgYSBmb3JtYXQgaXMgbm90IHNldCwgd2UgYXNzdW1lIHRoZSBzb3VyY2UgdG8gYmUgYSBjdXN0b20gc291cmNlLgogICAgICBzb3VyY2VfZGljdCA9IHt9CgogICAgICBzb3VyY2VfZGljdFsnc3BlYyddID0gewogICAgICAgICAgJ0B0eXBlJzogbmFtZXMuU09VUkNFX1RZUEUsCiAgICAgICAgICBuYW1lcy5TRVJJQUxJWkVEX1NPVVJDRV9LRVk6IHBpY2tsZXIuZHVtcHModHJhbnNmb3JtLnNvdXJjZSkKICAgICAgfQoKICAgICAgdHJ5OgogICAgICAgIHNvdXJjZV9kaWN0WydtZXRhZGF0YSddID0gewogICAgICAgICAgICAnZXN0aW1hdGVkX3NpemVfYnl0ZXMnOiBqc29uX3ZhbHVlLmdldF90eXBlZF92YWx1ZV9kZXNjcmlwdG9yKAogICAgICAgICAgICAgICAgdHJhbnNmb3JtLnNvdXJjZS5lc3RpbWF0ZV9zaXplKCkpCiAgICAgICAgfQogICAgICBleGNlcHQgZXJyb3IuUnVudGltZVZhbHVlUHJvdmlkZXJFcnJvcjoKICAgICAgICAjIFNpemUgZXN0aW1hdGlvbiBpcyBiZXN0IGVmZm9ydCwgYW5kIHRoaXMgZXJyb3IgaXMgYnkgdmFsdWUgcHJvdmlkZXIuCiAgICAgICAgbG9nZ2luZy5pbmZvKAogICAgICAgICAgICAnQ291bGQgbm90IGVzdGltYXRlIHNpemUgb2Ygc291cmNlICVyIGR1ZSB0byAnICsgXAogICAgICAgICAgICAnUnVudGltZVZhbHVlUHJvdmlkZXJFcnJvcicsIHRyYW5zZm9ybS5zb3VyY2UpCiAgICAgIGV4Y2VwdCBFeGNlcHRpb246ICAjIHB5bGludDogZGlzYWJsZT1icm9hZC1leGNlcHQKICAgICAgICAjIFNpemUgZXN0aW1hdGlvbiBpcyBiZXN0IGVmZm9ydC4gU28gd2UgbG9nIHRoZSBlcnJvciBhbmQgY29udGludWUuCiAgICAgICAgbG9nZ2luZy5pbmZvKAogICAgICAgICAgICAnQ291bGQgbm90IGVzdGltYXRlIHNpemUgb2Ygc291cmNlICVyIGR1ZSB0byBhbiBleGNlcHRpb246ICVzJywKICAgICAgICAgICAgdHJhbnNmb3JtLnNvdXJjZSwgdHJhY2ViYWNrLmZvcm1hdF9leGMoKSkKCiAgICAgIHN0ZXAuYWRkX3Byb3BlcnR5KFByb3BlcnR5TmFtZXMuU09VUkNFX1NURVBfSU5QVVQsCiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9kaWN0KQogICAgZWxpZiB0cmFuc2Zvcm0uc291cmNlLmZvcm1hdCA9PSAndGV4dCc6CiAgICAgIHN0ZXAuYWRkX3Byb3BlcnR5KFByb3BlcnR5TmFtZXMuRklMRV9QQVRURVJOLCB0cmFuc2Zvcm0uc291cmNlLnBhdGgpCiAgICBlbGlmIHRyYW5zZm9ybS5zb3VyY2UuZm9ybWF0ID09ICdiaWdxdWVyeSc6CiAgICAgIGlmIHN0YW5kYXJkX29wdGlvbnMuc3RyZWFtaW5nOgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0JpZ1F1ZXJ5IHNvdXJjZSBpcyBub3QgY3VycmVudGx5IGF2YWlsYWJsZSBmb3IgdXNlICcKICAgICAgICAgICAgICAgICAgICAgICAgICdpbiBzdHJlYW1pbmcgcGlwZWxpbmVzLicpCiAgICAgIHN0ZXAuYWRkX3Byb3BlcnR5KFByb3BlcnR5TmFtZXMuQklHUVVFUllfRVhQT1JUX0ZPUk1BVCwgJ0ZPUk1BVF9BVlJPJykKICAgICAgIyBUT0RPKHNpbHZpdWMpOiBBZGQgdGFibGUgdmFsaWRhdGlvbiBpZiB0cmFuc2Zvcm0uc291cmNlLnZhbGlkYXRlLgogICAgICBpZiB0cmFuc2Zvcm0uc291cmNlLnRhYmxlX3JlZmVyZW5jZSBpcyBub3QgTm9uZToKICAgICAgICBzdGVwLmFkZF9wcm9wZXJ0eShQcm9wZXJ0eU5hbWVzLkJJR1FVRVJZX0RBVEFTRVQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnNvdXJjZS50YWJsZV9yZWZlcmVuY2UuZGF0YXNldElkKQogICAgICAgIHN0ZXAuYWRkX3Byb3BlcnR5KFByb3BlcnR5TmFtZXMuQklHUVVFUllfVEFCTEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnNvdXJjZS50YWJsZV9yZWZlcmVuY2UudGFibGVJZCkKICAgICAgICAjIElmIHByb2plY3Qgb3duaW5nIHRoZSB0YWJsZSB3YXMgbm90IHNwZWNpZmllZCB0aGVuIHRoZSBwcm9qZWN0IG93bmluZwogICAgICAgICMgdGhlIHdvcmtmbG93IChjdXJyZW50IHByb2plY3QpIHdpbGwgYmUgdXNlZC4KICAgICAgICBpZiB0cmFuc2Zvcm0uc291cmNlLnRhYmxlX3JlZmVyZW5jZS5wcm9qZWN0SWQgaXMgbm90IE5vbmU6CiAgICAgICAgICBzdGVwLmFkZF9wcm9wZXJ0eShQcm9wZXJ0eU5hbWVzLkJJR1FVRVJZX1BST0pFQ1QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uc291cmNlLnRhYmxlX3JlZmVyZW5jZS5wcm9qZWN0SWQpCiAgICAgIGVsaWYgdHJhbnNmb3JtLnNvdXJjZS5xdWVyeSBpcyBub3QgTm9uZToKICAgICAgICBzdGVwLmFkZF9wcm9wZXJ0eShQcm9wZXJ0eU5hbWVzLkJJR1FVRVJZX1FVRVJZLCB0cmFuc2Zvcm0uc291cmNlLnF1ZXJ5KQogICAgICAgIHN0ZXAuYWRkX3Byb3BlcnR5KFByb3BlcnR5TmFtZXMuQklHUVVFUllfVVNFX0xFR0FDWV9TUUwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnNvdXJjZS51c2VfbGVnYWN5X3NxbCkKICAgICAgICBzdGVwLmFkZF9wcm9wZXJ0eShQcm9wZXJ0eU5hbWVzLkJJR1FVRVJZX0ZMQVRURU5fUkVTVUxUUywKICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uc291cmNlLmZsYXR0ZW5fcmVzdWx0cykKICAgICAgZWxzZToKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdCaWdRdWVyeSBzb3VyY2UgJXIgbXVzdCBzcGVjaWZ5IGVpdGhlciBhIHRhYmxlIG9yJwogICAgICAgICAgICAgICAgICAgICAgICAgJyBhIHF1ZXJ5JyAlIHRyYW5zZm9ybS5zb3VyY2UpCiAgICBlbGlmIHRyYW5zZm9ybS5zb3VyY2UuZm9ybWF0ID09ICdwdWJzdWInOgogICAgICBpZiBub3Qgc3RhbmRhcmRfb3B0aW9ucy5zdHJlYW1pbmc6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQ2xvdWQgUHViL1N1YiBpcyBjdXJyZW50bHkgYXZhaWxhYmxlIGZvciB1c2UgJwogICAgICAgICAgICAgICAgICAgICAgICAgJ29ubHkgaW4gc3RyZWFtaW5nIHBpcGVsaW5lcy4nKQogICAgICAjIE9ubHkgb25lIG9mIHRvcGljIG9yIHN1YnNjcmlwdGlvbiBzaG91bGQgYmUgc2V0LgogICAgICBpZiB0cmFuc2Zvcm0uc291cmNlLmZ1bGxfc3Vic2NyaXB0aW9uOgogICAgICAgIHN0ZXAuYWRkX3Byb3BlcnR5KFByb3BlcnR5TmFtZXMuUFVCU1VCX1NVQlNDUklQVElPTiwKICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uc291cmNlLmZ1bGxfc3Vic2NyaXB0aW9uKQogICAgICBlbGlmIHRyYW5zZm9ybS5zb3VyY2UuZnVsbF90b3BpYzoKICAgICAgICBzdGVwLmFkZF9wcm9wZXJ0eShQcm9wZXJ0eU5hbWVzLlBVQlNVQl9UT1BJQywKICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uc291cmNlLmZ1bGxfdG9waWMpCiAgICAgIGlmIHRyYW5zZm9ybS5zb3VyY2UuaWRfbGFiZWw6CiAgICAgICAgc3RlcC5hZGRfcHJvcGVydHkoUHJvcGVydHlOYW1lcy5QVUJTVUJfSURfTEFCRUwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnNvdXJjZS5pZF9sYWJlbCkKICAgICAgaWYgdHJhbnNmb3JtLnNvdXJjZS53aXRoX2F0dHJpYnV0ZXM6CiAgICAgICAgIyBTZXR0aW5nIHRoaXMgcHJvcGVydHkgc2lnbmFscyBEYXRhZmxvdyBydW5uZXIgdG8gcmV0dXJuIGZ1bGwKICAgICAgICAjIFB1YnN1Yk1lc3NhZ2VzIGluc3RlYWQgb2YganVzdCB0aGUgZGF0YSBwYXJ0IG9mIHRoZSBwYXlsb2FkLgogICAgICAgIHN0ZXAuYWRkX3Byb3BlcnR5KFByb3BlcnR5TmFtZXMuUFVCU1VCX1NFUklBTElaRURfQVRUUklCVVRFU19GTiwgJycpCiAgICAgIGlmIHRyYW5zZm9ybS5zb3VyY2UudGltZXN0YW1wX2F0dHJpYnV0ZSBpcyBub3QgTm9uZToKICAgICAgICBzdGVwLmFkZF9wcm9wZXJ0eShQcm9wZXJ0eU5hbWVzLlBVQlNVQl9USU1FU1RBTVBfQVRUUklCVVRFLAogICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5zb3VyY2UudGltZXN0YW1wX2F0dHJpYnV0ZSkKICAgIGVsc2U6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnU291cmNlICVyIGhhcyB1bmV4cGVjdGVkIGZvcm1hdCAlcy4nICUgKAogICAgICAgICAgICAgIHRyYW5zZm9ybS5zb3VyY2UsIHRyYW5zZm9ybS5zb3VyY2UuZm9ybWF0KSkKCiAgICBpZiBub3QgaGFzYXR0cih0cmFuc2Zvcm0uc291cmNlLCAnZm9ybWF0Jyk6CiAgICAgIHN0ZXAuYWRkX3Byb3BlcnR5KFByb3BlcnR5TmFtZXMuRk9STUFULCBuYW1lcy5TT1VSQ0VfRk9STUFUKQogICAgZWxzZToKICAgICAgc3RlcC5hZGRfcHJvcGVydHkoUHJvcGVydHlOYW1lcy5GT1JNQVQsIHRyYW5zZm9ybS5zb3VyY2UuZm9ybWF0KQoKICAgICMgV3JhcCBjb2RlciBpbiBXaW5kb3dlZFZhbHVlQ29kZXI6IHRoaXMgaXMgbmVjZXNzYXJ5IGFzIHRoZSBlbmNvZGluZyBvZiBhCiAgICAjIHN0ZXAgc2hvdWxkIGJlIHRoZSB0eXBlIG9mIHZhbHVlIG91dHB1dHRlZCBieSBlYWNoIHN0ZXAuICBSZWFkIHN0ZXBzCiAgICAjIGF1dG9tYXRpY2FsbHkgd3JhcCBvdXRwdXQgdmFsdWVzIGluIGEgV2luZG93ZWRWYWx1ZSB3cmFwcGVyLCBpZiBuZWNlc3NhcnkuCiAgICAjIFRoaXMgaXMgYWxzbyBuZWNlc3NhcnkgZm9yIHByb3BlciBlbmNvZGluZyBmb3Igc2l6ZSBlc3RpbWF0aW9uLgogICAgIyBVc2luZyBhIEdsb2JhbFdpbmRvd0NvZGVyIGFzIGEgcGxhY2UgaG9sZGVyIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQKICAgICMgUGlja2xlQ29kZXIgYmVjYXVzZSBHbG9iYWxXaW5kb3dDb2RlciBpcyBrbm93biBjb2Rlci4KICAgICMgVE9ETyhyb2JlcnR3Yik6IFF1ZXJ5IHRoZSBjb2xsZWN0aW9uIGZvciB0aGUgd2luZG93Zm4gdG8gZXh0cmFjdCB0aGUKICAgICMgY29ycmVjdCBjb2Rlci4KICAgIGNvZGVyID0gY29kZXJzLldpbmRvd2VkVmFsdWVDb2RlcigKICAgICAgICBjb2RlcnMucmVnaXN0cnkuZ2V0X2NvZGVyKHRyYW5zZm9ybV9ub2RlLm91dHB1dHNbTm9uZV0uZWxlbWVudF90eXBlKSwKICAgICAgICBjb2RlcnMuY29kZXJzLkdsb2JhbFdpbmRvd0NvZGVyKCkpCgogICAgZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmludGVybmFsIGltcG9ydCBhcGljbGllbnQKICAgIHVzZV9mbmFwaSA9IGFwaWNsaWVudC5fdXNlX2ZuYXBpKG9wdGlvbnMpCiAgICBzdGVwLmVuY29kaW5nID0gc2VsZi5fZ2V0X2Nsb3VkX2VuY29kaW5nKGNvZGVyLCB1c2VfZm5hcGkpCiAgICBzdGVwLmFkZF9wcm9wZXJ0eSgKICAgICAgICBQcm9wZXJ0eU5hbWVzLk9VVFBVVF9JTkZPLAogICAgICAgIFt7UHJvcGVydHlOYW1lcy5VU0VSX05BTUU6ICgKICAgICAgICAgICAgJyVzLiVzJyAlICh0cmFuc2Zvcm1fbm9kZS5mdWxsX2xhYmVsLCBQcm9wZXJ0eU5hbWVzLk9VVCkpLAogICAgICAgICAgUHJvcGVydHlOYW1lcy5FTkNPRElORzogc3RlcC5lbmNvZGluZywKICAgICAgICAgIFByb3BlcnR5TmFtZXMuT1VUUFVUX05BTUU6IFByb3BlcnR5TmFtZXMuT1VUfV0pCgogIGRlZiBydW5fX05hdGl2ZVdyaXRlKHNlbGYsIHRyYW5zZm9ybV9ub2RlLCBvcHRpb25zKToKICAgIHRyYW5zZm9ybSA9IHRyYW5zZm9ybV9ub2RlLnRyYW5zZm9ybQogICAgaW5wdXRfdGFnID0gdHJhbnNmb3JtX25vZGUuaW5wdXRzWzBdLnRhZwogICAgaW5wdXRfc3RlcCA9IHNlbGYuX2NhY2hlLmdldF9wdmFsdWUodHJhbnNmb3JtX25vZGUuaW5wdXRzWzBdKQogICAgc3RlcCA9IHNlbGYuX2FkZF9zdGVwKAogICAgICAgIFRyYW5zZm9ybU5hbWVzLldSSVRFLCB0cmFuc2Zvcm1fbm9kZS5mdWxsX2xhYmVsLCB0cmFuc2Zvcm1fbm9kZSkKICAgICMgVE9ETyhtYWlyYmVrKTogcmVmYWN0b3IgaWYtZWxzZSB0cmVlIHRvIHVzZSByZWdpc3RlcmFibGUgZnVuY3Rpb25zLgogICAgIyBJbml0aWFsaXplIHRoZSBzaW5rIHNwZWNpZmljIHByb3BlcnRpZXMuCiAgICBpZiB0cmFuc2Zvcm0uc2luay5mb3JtYXQgPT0gJ3RleHQnOgogICAgICAjIE5vdGUgdGhhdCBpdCBpcyBpbXBvcnRhbnQgdG8gdXNlIHR5cGVkIHByb3BlcnRpZXMgKEB0eXBlL3ZhbHVlIGRpY3RzKQogICAgICAjIGZvciBub24tc3RyaW5nIHByb3BlcnRpZXMgYW5kIGFsc28gZm9yIGVtcHR5IHN0cmluZ3MuIEZvciBleGFtcGxlLAogICAgICAjIGluIHRoZSBjb2RlIGJlbG93IHRoZSBudW1fc2hhcmRzIG11c3QgaGF2ZSB0eXBlIGFuZCBhbHNvCiAgICAgICMgZmlsZV9uYW1lX3N1ZmZpeCBhbmQgc2hhcmRfbmFtZV90ZW1wbGF0ZSAoY291bGQgYmUgZW1wdHkgc3RyaW5ncykuCiAgICAgIHN0ZXAuYWRkX3Byb3BlcnR5KAogICAgICAgICAgUHJvcGVydHlOYW1lcy5GSUxFX05BTUVfUFJFRklYLCB0cmFuc2Zvcm0uc2luay5maWxlX25hbWVfcHJlZml4LAogICAgICAgICAgd2l0aF90eXBlPVRydWUpCiAgICAgIHN0ZXAuYWRkX3Byb3BlcnR5KAogICAgICAgICAgUHJvcGVydHlOYW1lcy5GSUxFX05BTUVfU1VGRklYLCB0cmFuc2Zvcm0uc2luay5maWxlX25hbWVfc3VmZml4LAogICAgICAgICAgd2l0aF90eXBlPVRydWUpCiAgICAgIHN0ZXAuYWRkX3Byb3BlcnR5KAogICAgICAgICAgUHJvcGVydHlOYW1lcy5TSEFSRF9OQU1FX1RFTVBMQVRFLCB0cmFuc2Zvcm0uc2luay5zaGFyZF9uYW1lX3RlbXBsYXRlLAogICAgICAgICAgd2l0aF90eXBlPVRydWUpCiAgICAgIGlmIHRyYW5zZm9ybS5zaW5rLm51bV9zaGFyZHMgPiAwOgogICAgICAgIHN0ZXAuYWRkX3Byb3BlcnR5KAogICAgICAgICAgICBQcm9wZXJ0eU5hbWVzLk5VTV9TSEFSRFMsIHRyYW5zZm9ybS5zaW5rLm51bV9zaGFyZHMsIHdpdGhfdHlwZT1UcnVlKQogICAgICAjIFRPRE8oc2lsdml1Yyk6IEltcGxlbWVudCBzaW5rIHZhbGlkYXRpb24uCiAgICAgIHN0ZXAuYWRkX3Byb3BlcnR5KFByb3BlcnR5TmFtZXMuVkFMSURBVEVfU0lOSywgRmFsc2UsIHdpdGhfdHlwZT1UcnVlKQogICAgZWxpZiB0cmFuc2Zvcm0uc2luay5mb3JtYXQgPT0gJ2JpZ3F1ZXJ5JzoKICAgICAgIyBUT0RPKHNpbHZpdWMpOiBBZGQgdGFibGUgdmFsaWRhdGlvbiBpZiB0cmFuc2Zvcm0uc2luay52YWxpZGF0ZS4KICAgICAgc3RlcC5hZGRfcHJvcGVydHkoUHJvcGVydHlOYW1lcy5CSUdRVUVSWV9EQVRBU0VULAogICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uc2luay50YWJsZV9yZWZlcmVuY2UuZGF0YXNldElkKQogICAgICBzdGVwLmFkZF9wcm9wZXJ0eShQcm9wZXJ0eU5hbWVzLkJJR1FVRVJZX1RBQkxFLAogICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uc2luay50YWJsZV9yZWZlcmVuY2UudGFibGVJZCkKICAgICAgIyBJZiBwcm9qZWN0IG93bmluZyB0aGUgdGFibGUgd2FzIG5vdCBzcGVjaWZpZWQgdGhlbiB0aGUgcHJvamVjdCBvd25pbmcKICAgICAgIyB0aGUgd29ya2Zsb3cgKGN1cnJlbnQgcHJvamVjdCkgd2lsbCBiZSB1c2VkLgogICAgICBpZiB0cmFuc2Zvcm0uc2luay50YWJsZV9yZWZlcmVuY2UucHJvamVjdElkIGlzIG5vdCBOb25lOgogICAgICAgIHN0ZXAuYWRkX3Byb3BlcnR5KFByb3BlcnR5TmFtZXMuQklHUVVFUllfUFJPSkVDVCwKICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uc2luay50YWJsZV9yZWZlcmVuY2UucHJvamVjdElkKQogICAgICBzdGVwLmFkZF9wcm9wZXJ0eShQcm9wZXJ0eU5hbWVzLkJJR1FVRVJZX0NSRUFURV9ESVNQT1NJVElPTiwKICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnNpbmsuY3JlYXRlX2Rpc3Bvc2l0aW9uKQogICAgICBzdGVwLmFkZF9wcm9wZXJ0eShQcm9wZXJ0eU5hbWVzLkJJR1FVRVJZX1dSSVRFX0RJU1BPU0lUSU9OLAogICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uc2luay53cml0ZV9kaXNwb3NpdGlvbikKICAgICAgaWYgdHJhbnNmb3JtLnNpbmsudGFibGVfc2NoZW1hIGlzIG5vdCBOb25lOgogICAgICAgIHN0ZXAuYWRkX3Byb3BlcnR5KAogICAgICAgICAgICBQcm9wZXJ0eU5hbWVzLkJJR1FVRVJZX1NDSEVNQSwgdHJhbnNmb3JtLnNpbmsuc2NoZW1hX2FzX2pzb24oKSkKICAgIGVsaWYgdHJhbnNmb3JtLnNpbmsuZm9ybWF0ID09ICdwdWJzdWInOgogICAgICBzdGFuZGFyZF9vcHRpb25zID0gb3B0aW9ucy52aWV3X2FzKFN0YW5kYXJkT3B0aW9ucykKICAgICAgaWYgbm90IHN0YW5kYXJkX29wdGlvbnMuc3RyZWFtaW5nOgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0Nsb3VkIFB1Yi9TdWIgaXMgY3VycmVudGx5IGF2YWlsYWJsZSBmb3IgdXNlICcKICAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5IGluIHN0cmVhbWluZyBwaXBlbGluZXMuJykKICAgICAgc3RlcC5hZGRfcHJvcGVydHkoUHJvcGVydHlOYW1lcy5QVUJTVUJfVE9QSUMsIHRyYW5zZm9ybS5zaW5rLmZ1bGxfdG9waWMpCiAgICAgIGlmIHRyYW5zZm9ybS5zaW5rLmlkX2xhYmVsOgogICAgICAgIHN0ZXAuYWRkX3Byb3BlcnR5KFByb3BlcnR5TmFtZXMuUFVCU1VCX0lEX0xBQkVMLAogICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5zaW5rLmlkX2xhYmVsKQogICAgICBpZiB0cmFuc2Zvcm0uc2luay53aXRoX2F0dHJpYnV0ZXM6CiAgICAgICAgIyBTZXR0aW5nIHRoaXMgcHJvcGVydHkgc2lnbmFscyBEYXRhZmxvdyBydW5uZXIgdGhhdCB0aGUgUENvbGxlY3Rpb24KICAgICAgICAjIGNvbnRhaW5zIFB1YnN1Yk1lc3NhZ2Ugb2JqZWN0cyBpbnN0ZWFkIG9mIGp1c3QgcmF3IGRhdGEuCiAgICAgICAgc3RlcC5hZGRfcHJvcGVydHkoUHJvcGVydHlOYW1lcy5QVUJTVUJfU0VSSUFMSVpFRF9BVFRSSUJVVEVTX0ZOLCAnJykKICAgICAgaWYgdHJhbnNmb3JtLnNpbmsudGltZXN0YW1wX2F0dHJpYnV0ZSBpcyBub3QgTm9uZToKICAgICAgICBzdGVwLmFkZF9wcm9wZXJ0eShQcm9wZXJ0eU5hbWVzLlBVQlNVQl9USU1FU1RBTVBfQVRUUklCVVRFLAogICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5zaW5rLnRpbWVzdGFtcF9hdHRyaWJ1dGUpCiAgICBlbHNlOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgJ1NpbmsgJXIgaGFzIHVuZXhwZWN0ZWQgZm9ybWF0ICVzLicgJSAoCiAgICAgICAgICAgICAgdHJhbnNmb3JtLnNpbmssIHRyYW5zZm9ybS5zaW5rLmZvcm1hdCkpCiAgICBzdGVwLmFkZF9wcm9wZXJ0eShQcm9wZXJ0eU5hbWVzLkZPUk1BVCwgdHJhbnNmb3JtLnNpbmsuZm9ybWF0KQoKICAgICMgV3JhcCBjb2RlciBpbiBXaW5kb3dlZFZhbHVlQ29kZXI6IHRoaXMgaXMgbmVjZXNzYXJ5IGZvciBwcm9wZXIgZW5jb2RpbmcKICAgICMgZm9yIHNpemUgZXN0aW1hdGlvbi4gVXNpbmcgYSBHbG9iYWxXaW5kb3dDb2RlciBhcyBhIHBsYWNlIGhvbGRlciBpbnN0ZWFkCiAgICAjIG9mIHRoZSBkZWZhdWx0IFBpY2tsZUNvZGVyIGJlY2F1c2UgR2xvYmFsV2luZG93Q29kZXIgaXMga25vd24gY29kZXIuCiAgICAjIFRPRE8ocm9iZXJ0d2IpOiBRdWVyeSB0aGUgY29sbGVjdGlvbiBmb3IgdGhlIHdpbmRvd2ZuIHRvIGV4dHJhY3QgdGhlCiAgICAjIGNvcnJlY3QgY29kZXIuCiAgICBjb2RlciA9IGNvZGVycy5XaW5kb3dlZFZhbHVlQ29kZXIodHJhbnNmb3JtLnNpbmsuY29kZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZXJzLmNvZGVycy5HbG9iYWxXaW5kb3dDb2RlcigpKQogICAgZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmludGVybmFsIGltcG9ydCBhcGljbGllbnQKICAgIHVzZV9mbmFwaSA9IGFwaWNsaWVudC5fdXNlX2ZuYXBpKG9wdGlvbnMpCiAgICBzdGVwLmVuY29kaW5nID0gc2VsZi5fZ2V0X2Nsb3VkX2VuY29kaW5nKGNvZGVyLCB1c2VfZm5hcGkpCiAgICBzdGVwLmFkZF9wcm9wZXJ0eShQcm9wZXJ0eU5hbWVzLkVOQ09ESU5HLCBzdGVwLmVuY29kaW5nKQogICAgc3RlcC5hZGRfcHJvcGVydHkoCiAgICAgICAgUHJvcGVydHlOYW1lcy5QQVJBTExFTF9JTlBVVCwKICAgICAgICB7J0B0eXBlJzogJ091dHB1dFJlZmVyZW5jZScsCiAgICAgICAgIFByb3BlcnR5TmFtZXMuU1RFUF9OQU1FOiBpbnB1dF9zdGVwLnByb3RvLm5hbWUsCiAgICAgICAgIFByb3BlcnR5TmFtZXMuT1VUUFVUX05BTUU6IGlucHV0X3N0ZXAuZ2V0X291dHB1dChpbnB1dF90YWcpfSkKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIHNlcmlhbGl6ZV93aW5kb3dpbmdfc3RyYXRlZ3koY2xzLCB3aW5kb3dpbmcpOgogICAgZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzIGltcG9ydCBwaXBlbGluZV9jb250ZXh0CiAgICBmcm9tIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaSBpbXBvcnQgYmVhbV9ydW5uZXJfYXBpX3BiMgogICAgY29udGV4dCA9IHBpcGVsaW5lX2NvbnRleHQuUGlwZWxpbmVDb250ZXh0KCkKICAgIHdpbmRvd2luZ19wcm90byA9IHdpbmRvd2luZy50b19ydW5uZXJfYXBpKGNvbnRleHQpCiAgICByZXR1cm4gY2xzLmJ5dGVfYXJyYXlfdG9fanNvbl9zdHJpbmcoCiAgICAgICAgYmVhbV9ydW5uZXJfYXBpX3BiMi5NZXNzYWdlV2l0aENvbXBvbmVudHMoCiAgICAgICAgICAgIGNvbXBvbmVudHM9Y29udGV4dC50b19ydW5uZXJfYXBpKCksCiAgICAgICAgICAgIHdpbmRvd2luZ19zdHJhdGVneT13aW5kb3dpbmdfcHJvdG8pLlNlcmlhbGl6ZVRvU3RyaW5nKCkpCgogIEBjbGFzc21ldGhvZAogIGRlZiBkZXNlcmlhbGl6ZV93aW5kb3dpbmdfc3RyYXRlZ3koY2xzLCBzZXJpYWxpemVkX2RhdGEpOgogICAgIyBJbXBvcnRlZCBoZXJlIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llcy4KICAgICMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCiAgICBmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMgaW1wb3J0IHBpcGVsaW5lX2NvbnRleHQKICAgIGZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpIGltcG9ydCBiZWFtX3J1bm5lcl9hcGlfcGIyCiAgICBmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSBpbXBvcnQgV2luZG93aW5nCiAgICBwcm90byA9IGJlYW1fcnVubmVyX2FwaV9wYjIuTWVzc2FnZVdpdGhDb21wb25lbnRzKCkKICAgIHByb3RvLlBhcnNlRnJvbVN0cmluZyhjbHMuanNvbl9zdHJpbmdfdG9fYnl0ZV9hcnJheShzZXJpYWxpemVkX2RhdGEpKQogICAgcmV0dXJuIFdpbmRvd2luZy5mcm9tX3J1bm5lcl9hcGkoCiAgICAgICAgcHJvdG8ud2luZG93aW5nX3N0cmF0ZWd5LAogICAgICAgIHBpcGVsaW5lX2NvbnRleHQuUGlwZWxpbmVDb250ZXh0KHByb3RvLmNvbXBvbmVudHMpKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGJ5dGVfYXJyYXlfdG9fanNvbl9zdHJpbmcocmF3X2J5dGVzKToKICAgICIiIkltcGxlbWVudHMgb3JnLmFwYWNoZS5iZWFtLnNkay51dGlsLlN0cmluZ1V0aWxzLmJ5dGVBcnJheVRvSnNvblN0cmluZy4iIiIKICAgIHJldHVybiBxdW90ZShyYXdfYnl0ZXMpCgogIEBzdGF0aWNtZXRob2QKICBkZWYganNvbl9zdHJpbmdfdG9fYnl0ZV9hcnJheShlbmNvZGVkX3N0cmluZyk6CiAgICAiIiJJbXBsZW1lbnRzIG9yZy5hcGFjaGUuYmVhbS5zZGsudXRpbC5TdHJpbmdVdGlscy5qc29uU3RyaW5nVG9CeXRlQXJyYXkuIiIiCiAgICByZXR1cm4gdW5xdW90ZShlbmNvZGVkX3N0cmluZykKCgpjbGFzcyBfRGF0YWZsb3dTaWRlSW5wdXQoYmVhbS5wdmFsdWUuQXNTaWRlSW5wdXQpOgogICIiIldyYXBzIGEgc2lkZSBpbnB1dCBhcyBhIGRhdGFmbG93LWNvbXBhdGlibGUgc2lkZSBpbnB1dC4iIiIKCiAgIyBEYXRhZmxvdyBkb2VzIG5vdCB5ZXQgYWNjZXB0IHRoZSBzaGFyZWQgdXJuIGRlZmluaXRpb24gZm9yIGFjY2Vzcy4KICBEQVRBRkxPV19NVUxUSU1BUF9VUk4gPSAndXJuOmJlYW06c2lkZWlucHV0Om1hdGVyaWFsaXphdGlvbjptdWx0aW1hcDowLjEnCgogIGRlZiBfdmlld19vcHRpb25zKHNlbGYpOgogICAgcmV0dXJuIHsKICAgICAgICAnZGF0YSc6IHNlbGYuX2RhdGEsCiAgICB9CgogIGRlZiBfc2lkZV9pbnB1dF9kYXRhKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX2RhdGEKCgpjbGFzcyBfRGF0YWZsb3dJdGVyYWJsZVNpZGVJbnB1dChfRGF0YWZsb3dTaWRlSW5wdXQpOgogICIiIldyYXBzIGFuIGl0ZXJhYmxlIHNpZGUgaW5wdXQgYXMgZGF0YWZsb3ctY29tcGF0aWJsZSBzaWRlIGlucHV0LiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgaXRlcmFibGVfc2lkZV9pbnB1dCk6CiAgICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCiAgICBzaWRlX2lucHV0X2RhdGEgPSBpdGVyYWJsZV9zaWRlX2lucHV0Ll9zaWRlX2lucHV0X2RhdGEoKQogICAgYXNzZXJ0ICgKICAgICAgICBzaWRlX2lucHV0X2RhdGEuYWNjZXNzX3BhdHRlcm4gPT0gY29tbW9uX3VybnMuc2lkZV9pbnB1dHMuSVRFUkFCTEUudXJuKQogICAgaXRlcmFibGVfdmlld19mbiA9IHNpZGVfaW5wdXRfZGF0YS52aWV3X2ZuCiAgICBzZWxmLl9kYXRhID0gYmVhbS5wdmFsdWUuU2lkZUlucHV0RGF0YSgKICAgICAgICBzZWxmLkRBVEFGTE9XX01VTFRJTUFQX1VSTiwKICAgICAgICBzaWRlX2lucHV0X2RhdGEud2luZG93X21hcHBpbmdfZm4sCiAgICAgICAgbGFtYmRhIG11bHRpbWFwOiBpdGVyYWJsZV92aWV3X2ZuKG11bHRpbWFwWycnXSkpCgoKY2xhc3MgX0RhdGFmbG93TXVsdGltYXBTaWRlSW5wdXQoX0RhdGFmbG93U2lkZUlucHV0KToKICAiIiJXcmFwcyBhIG11bHRpbWFwIHNpZGUgaW5wdXQgYXMgZGF0YWZsb3ctY29tcGF0aWJsZSBzaWRlIGlucHV0LiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgc2lkZV9pbnB1dCk6CiAgICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCiAgICBzZWxmLnB2YWx1ZSA9IHNpZGVfaW5wdXQucHZhbHVlCiAgICBzaWRlX2lucHV0X2RhdGEgPSBzaWRlX2lucHV0Ll9zaWRlX2lucHV0X2RhdGEoKQogICAgYXNzZXJ0ICgKICAgICAgICBzaWRlX2lucHV0X2RhdGEuYWNjZXNzX3BhdHRlcm4gPT0gY29tbW9uX3VybnMuc2lkZV9pbnB1dHMuTVVMVElNQVAudXJuKQogICAgc2VsZi5fZGF0YSA9IGJlYW0ucHZhbHVlLlNpZGVJbnB1dERhdGEoCiAgICAgICAgc2VsZi5EQVRBRkxPV19NVUxUSU1BUF9VUk4sCiAgICAgICAgc2lkZV9pbnB1dF9kYXRhLndpbmRvd19tYXBwaW5nX2ZuLAogICAgICAgIHNpZGVfaW5wdXRfZGF0YS52aWV3X2ZuKQoKCmNsYXNzIERhdGFmbG93UGlwZWxpbmVSZXN1bHQoUGlwZWxpbmVSZXN1bHQpOgogICIiIlJlcHJlc2VudHMgdGhlIHN0YXRlIG9mIGEgcGlwZWxpbmUgcnVuIG9uIHRoZSBEYXRhZmxvdyBzZXJ2aWNlLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgam9iLCBydW5uZXIpOgogICAgIiIiSW5pdGlhbGl6ZSBhIG5ldyBEYXRhZmxvd1BpcGVsaW5lUmVzdWx0IGluc3RhbmNlLgoKICAgIEFyZ3M6CiAgICAgIGpvYjogSm9iIG1lc3NhZ2UgZnJvbSB0aGUgRGF0YWZsb3cgQVBJLiBDb3VsZCBiZSA6ZGF0YTpgTm9uZWAgaWYgYSBqb2IKICAgICAgICByZXF1ZXN0IHdhcyBub3Qgc2VudCB0byBEYXRhZmxvdyBzZXJ2aWNlIChlLmcuIHRlbXBsYXRlIGpvYnMpLgogICAgICBydW5uZXI6IERhdGFmbG93UnVubmVyIGluc3RhbmNlLgogICAgIiIiCiAgICBzZWxmLl9qb2IgPSBqb2IKICAgIHNlbGYuX3J1bm5lciA9IHJ1bm5lcgogICAgc2VsZi5tZXRyaWNfcmVzdWx0cyA9IE5vbmUKCiAgZGVmIF91cGRhdGVfam9iKHNlbGYpOgogICAgIyBXZSBuZWVkIHRoZSBqb2IgaWQgdG8gYmUgYWJsZSB0byB1cGRhdGUgam9iIGluZm9ybWF0aW9uLiBUaGVyZSBpcyBubyBuZWVkCiAgICAjIHRvIHVwZGF0ZSB0aGUgam9iIGlmIHdlIGFyZSBpbiBhIGtub3duIHRlcm1pbmFsIHN0YXRlLgogICAgaWYgc2VsZi5oYXNfam9iIGFuZCBub3Qgc2VsZi5pc19pbl90ZXJtaW5hbF9zdGF0ZSgpOgogICAgICBzZWxmLl9qb2IgPSBzZWxmLl9ydW5uZXIuZGF0YWZsb3dfY2xpZW50LmdldF9qb2Ioc2VsZi5qb2JfaWQoKSkKCiAgZGVmIGpvYl9pZChzZWxmKToKICAgIHJldHVybiBzZWxmLl9qb2IuaWQKCiAgZGVmIG1ldHJpY3Moc2VsZik6CiAgICByZXR1cm4gc2VsZi5tZXRyaWNfcmVzdWx0cwoKICBAcHJvcGVydHkKICBkZWYgaGFzX2pvYihzZWxmKToKICAgIHJldHVybiBzZWxmLl9qb2IgaXMgbm90IE5vbmUKCiAgZGVmIF9nZXRfam9iX3N0YXRlKHNlbGYpOgogICAgdmFsdWVzX2VudW0gPSBkYXRhZmxvd19hcGkuSm9iLkN1cnJlbnRTdGF0ZVZhbHVlVmFsdWVzRW51bQoKICAgICMgVE9ETzogTW92ZSB0aGlzIHRhYmxlIHRvIGEgYW5vdGhlciBsb2NhdGlvbi4KICAgICMgT3JkZXJlZCBieSB0aGUgZW51bSB2YWx1ZXMuCiAgICBhcGlfam9ic3RhdGVfbWFwID0gewogICAgICAgIHZhbHVlc19lbnVtLkpPQl9TVEFURV9VTktOT1dOOiBQaXBlbGluZVN0YXRlLlVOS05PV04sCiAgICAgICAgdmFsdWVzX2VudW0uSk9CX1NUQVRFX1NUT1BQRUQ6IFBpcGVsaW5lU3RhdGUuU1RPUFBFRCwKICAgICAgICB2YWx1ZXNfZW51bS5KT0JfU1RBVEVfUlVOTklORzogUGlwZWxpbmVTdGF0ZS5SVU5OSU5HLAogICAgICAgIHZhbHVlc19lbnVtLkpPQl9TVEFURV9ET05FOiBQaXBlbGluZVN0YXRlLkRPTkUsCiAgICAgICAgdmFsdWVzX2VudW0uSk9CX1NUQVRFX0ZBSUxFRDogUGlwZWxpbmVTdGF0ZS5GQUlMRUQsCiAgICAgICAgdmFsdWVzX2VudW0uSk9CX1NUQVRFX0NBTkNFTExFRDogUGlwZWxpbmVTdGF0ZS5DQU5DRUxMRUQsCiAgICAgICAgdmFsdWVzX2VudW0uSk9CX1NUQVRFX1VQREFURUQ6IFBpcGVsaW5lU3RhdGUuVVBEQVRFRCwKICAgICAgICB2YWx1ZXNfZW51bS5KT0JfU1RBVEVfRFJBSU5JTkc6IFBpcGVsaW5lU3RhdGUuRFJBSU5JTkcsCiAgICAgICAgdmFsdWVzX2VudW0uSk9CX1NUQVRFX0RSQUlORUQ6IFBpcGVsaW5lU3RhdGUuRFJBSU5FRCwKICAgICAgICB2YWx1ZXNfZW51bS5KT0JfU1RBVEVfUEVORElORzogUGlwZWxpbmVTdGF0ZS5QRU5ESU5HLAogICAgICAgIHZhbHVlc19lbnVtLkpPQl9TVEFURV9DQU5DRUxMSU5HOiBQaXBlbGluZVN0YXRlLkNBTkNFTExJTkcsCiAgICB9CgogICAgcmV0dXJuIChhcGlfam9ic3RhdGVfbWFwW3NlbGYuX2pvYi5jdXJyZW50U3RhdGVdIGlmIHNlbGYuX2pvYi5jdXJyZW50U3RhdGUKICAgICAgICAgICAgZWxzZSBQaXBlbGluZVN0YXRlLlVOS05PV04pCgogIEBwcm9wZXJ0eQogIGRlZiBzdGF0ZShzZWxmKToKICAgICIiIlJldHVybiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgcmVtb3RlIGpvYi4KCiAgICBSZXR1cm5zOgogICAgICBBIFBpcGVsaW5lU3RhdGUgb2JqZWN0LgogICAgIiIiCiAgICBpZiBub3Qgc2VsZi5oYXNfam9iOgogICAgICByZXR1cm4gUGlwZWxpbmVTdGF0ZS5VTktOT1dOCgogICAgc2VsZi5fdXBkYXRlX2pvYigpCgogICAgcmV0dXJuIHNlbGYuX2dldF9qb2Jfc3RhdGUoKQoKICBkZWYgaXNfaW5fdGVybWluYWxfc3RhdGUoc2VsZik6CiAgICBpZiBub3Qgc2VsZi5oYXNfam9iOgogICAgICByZXR1cm4gVHJ1ZQoKICAgIHJldHVybiBQaXBlbGluZVN0YXRlLmlzX3Rlcm1pbmFsKHNlbGYuX2dldF9qb2Jfc3RhdGUoKSkKCiAgZGVmIHdhaXRfdW50aWxfZmluaXNoKHNlbGYsIGR1cmF0aW9uPU5vbmUpOgogICAgaWYgbm90IHNlbGYuaXNfaW5fdGVybWluYWxfc3RhdGUoKToKICAgICAgaWYgbm90IHNlbGYuaGFzX2pvYjoKICAgICAgICByYWlzZSBJT0Vycm9yKCdGYWlsZWQgdG8gZ2V0IHRoZSBEYXRhZmxvdyBqb2IgaWQuJykKCiAgICAgIHRocmVhZCA9IHRocmVhZGluZy5UaHJlYWQoCiAgICAgICAgICB0YXJnZXQ9RGF0YWZsb3dSdW5uZXIucG9sbF9mb3Jfam9iX2NvbXBsZXRpb24sCiAgICAgICAgICBhcmdzPShzZWxmLl9ydW5uZXIsIHNlbGYsIGR1cmF0aW9uKSkKCiAgICAgICMgTWFyayB0aGUgdGhyZWFkIGFzIGEgZGFlbW9uIHRocmVhZCBzbyBhIGtleWJvYXJkIGludGVycnVwdCBvbiB0aGUgbWFpbgogICAgICAjIHRocmVhZCB3aWxsIHRlcm1pbmF0ZSBldmVyeXRoaW5nLiBUaGlzIGlzIGFsc28gdGhlIHJlYXNvbiB3ZSB3aWxsIG5vdAogICAgICAjIHVzZSB0aHJlYWQuam9pbigpIHRvIHdhaXQgZm9yIHRoZSBwb2xsaW5nIHRocmVhZC4KICAgICAgdGhyZWFkLmRhZW1vbiA9IFRydWUKICAgICAgdGhyZWFkLnN0YXJ0KCkKICAgICAgd2hpbGUgdGhyZWFkLmlzQWxpdmUoKToKICAgICAgICB0aW1lLnNsZWVwKDUuMCkKCiAgICAgICMgVE9ETzogTWVyZ2UgdGhlIHRlcm1pbmF0aW9uIGNvZGUgaW4gcG9sbF9mb3Jfam9iX2NvbXBsZXRpb24gYW5kCiAgICAgICMgaXNfaW5fdGVybWluYWxfc3RhdGUuCiAgICAgIHRlcm1pbmF0ZWQgPSBzZWxmLmlzX2luX3Rlcm1pbmFsX3N0YXRlKCkKICAgICAgYXNzZXJ0IGR1cmF0aW9uIG9yIHRlcm1pbmF0ZWQsICgKICAgICAgICAgICdKb2IgZGlkIG5vdCByZWFjaCB0byBhIHRlcm1pbmFsIHN0YXRlIGFmdGVyIHdhaXRpbmcgaW5kZWZpbml0ZWx5LicpCgogICAgICBpZiB0ZXJtaW5hdGVkIGFuZCBzZWxmLnN0YXRlICE9IFBpcGVsaW5lU3RhdGUuRE9ORToKICAgICAgICAjIFRPRE8oQkVBTS0xMjkwKTogQ29uc2lkZXIgY29udmVydGluZyB0aGlzIHRvIGFuIGVycm9yIGxvZyBiYXNlZCBvbgogICAgICAgICMgdGhlcmVzb2x1dGlvbiBvZiB0aGUgaXNzdWUuCiAgICAgICAgcmFpc2UgRGF0YWZsb3dSdW50aW1lRXhjZXB0aW9uKAogICAgICAgICAgICAnRGF0YWZsb3cgcGlwZWxpbmUgZmFpbGVkLiBTdGF0ZTogJXMsIEVycm9yOlxuJXMnICUKICAgICAgICAgICAgKHNlbGYuc3RhdGUsIGdldGF0dHIoc2VsZi5fcnVubmVyLCAnbGFzdF9lcnJvcl9tc2cnLCBOb25lKSksIHNlbGYpCiAgICByZXR1cm4gc2VsZi5zdGF0ZQoKICBkZWYgY2FuY2VsKHNlbGYpOgogICAgaWYgbm90IHNlbGYuaGFzX2pvYjoKICAgICAgcmFpc2UgSU9FcnJvcignRmFpbGVkIHRvIGdldCB0aGUgRGF0YWZsb3cgam9iIGlkLicpCgogICAgc2VsZi5fdXBkYXRlX2pvYigpCgogICAgaWYgc2VsZi5pc19pbl90ZXJtaW5hbF9zdGF0ZSgpOgogICAgICBsb2dnaW5nLndhcm5pbmcoCiAgICAgICAgICAnQ2FuY2VsIGZhaWxlZCBiZWNhdXNlIGpvYiAlcyBpcyBhbHJlYWR5IHRlcm1pbmF0ZWQgaW4gc3RhdGUgJXMuJywKICAgICAgICAgIHNlbGYuam9iX2lkKCksIHNlbGYuc3RhdGUpCiAgICBlbHNlOgogICAgICBpZiBub3Qgc2VsZi5fcnVubmVyLmRhdGFmbG93X2NsaWVudC5tb2RpZnlfam9iX3N0YXRlKAogICAgICAgICAgc2VsZi5qb2JfaWQoKSwgJ0pPQl9TVEFURV9DQU5DRUxMRUQnKToKICAgICAgICBjYW5jZWxfZmFpbGVkX21lc3NhZ2UgPSAoCiAgICAgICAgICAgICdGYWlsZWQgdG8gY2FuY2VsIGpvYiAlcywgcGxlYXNlIGdvIHRvIHRoZSBEZXZlbG9wZXJzIENvbnNvbGUgdG8gJwogICAgICAgICAgICAnY2FuY2VsIGl0IG1hbnVhbGx5LicpICUgc2VsZi5qb2JfaWQoKQogICAgICAgIGxvZ2dpbmcuZXJyb3IoY2FuY2VsX2ZhaWxlZF9tZXNzYWdlKQogICAgICAgIHJhaXNlIERhdGFmbG93UnVudGltZUV4Y2VwdGlvbihjYW5jZWxfZmFpbGVkX21lc3NhZ2UsIHNlbGYpCgogICAgcmV0dXJuIHNlbGYuc3RhdGUKCiAgZGVmIF9fc3RyX18oc2VsZik6CiAgICByZXR1cm4gJzwlcyAlcyAlcz4nICUgKAogICAgICAgIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLAogICAgICAgIHNlbGYuam9iX2lkKCksCiAgICAgICAgc2VsZi5zdGF0ZSkKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICc8JXMgJXMgYXQgJXM+JyAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZi5fam9iLCBoZXgoaWQoc2VsZikpKQoKCmNsYXNzIERhdGFmbG93UnVudGltZUV4Y2VwdGlvbihFeGNlcHRpb24pOgogICIiIkluZGljYXRlcyBhbiBlcnJvciBoYXMgb2NjdXJyZWQgaW4gcnVubmluZyB0aGlzIHBpcGVsaW5lLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgbXNnLCByZXN1bHQpOgogICAgc3VwZXIoRGF0YWZsb3dSdW50aW1lRXhjZXB0aW9uLCBzZWxmKS5fX2luaXRfXyhtc2cpCiAgICBzZWxmLnJlc3VsdCA9IHJlc3VsdAp9cpKEAAAoWEIAAABEYXRhZmxvd1J1bm5lci5zaWRlX2lucHV0X3Zpc2l0b3IuU2lkZUlucHV0VmlzaXRvci52aXNpdF90cmFuc2Zvcm1YAwAAAGRlZkv+TSIBh1gOAAAARGF0YWZsb3dSdW5uZXJYBQAAAGNsYXNzS0NNGgSHWCcAAABEYXRhZmxvd1J1bm5lci5fZ2V0X3NpZGVfaW5wdXRfZW5jb2RpbmdYAwAAAGRlZk2oAU26AYdYIwAAAF9EYXRhZmxvd011bHRpbWFwU2lkZUlucHV0Ll9faW5pdF9fWAMAAABkZWZNPQRNRwSHWCMAAABfRGF0YWZsb3dJdGVyYWJsZVNpZGVJbnB1dC5fX2luaXRfX1gDAAAAZGVmTS4ETTgEh1geAAAARGF0YWZsb3dQaXBlbGluZVJlc3VsdC5fX3N0cl9fWAMAAABkZWZNxgRNywSHWB4AAABEYXRhZmxvd1BpcGVsaW5lUmVzdWx0Lmhhc19qb2JYAwAAAGRlZk1kBE1nBIdYGwAAAERhdGFmbG93UnVubmVyLnJ1bl9waXBlbGluZVgDAAAAZGVmTToBTZEBh1gSAAAAX0RhdGFmbG93U2lkZUlucHV0WAUAAABjbGFzc00cBE0pBIdYGgAAAF9EYXRhZmxvd011bHRpbWFwU2lkZUlucHV0WAUAAABjbGFzc006BE1HBIdYKAAAAERhdGFmbG93UnVubmVyLmJ5dGVfYXJyYXlfdG9fanNvbl9zdHJpbmdYAwAAAGRlZk0RBE0VBIdYSAAAAERhdGFmbG93UnVubmVyLmZsYXR0ZW5faW5wdXRfdmlzaXRvci5GbGF0dGVuSW5wdXRWaXNpdG9yLnZpc2l0X3RyYW5zZm9ybVgDAAAAZGVmTS8BTTcBh1ggAAAAX0RhdGFmbG93U2lkZUlucHV0Ll92aWV3X29wdGlvbnNYAwAAAGRlZk0iBE0mBIdYJgAAAERhdGFmbG93UnVubmVyLnBvbGxfZm9yX2pvYl9jb21wbGV0aW9uWAMAAABkZWZLZkvRh1g4AAAARGF0YWZsb3dSdW5uZXIuZmxhdHRlbl9pbnB1dF92aXNpdG9yLkZsYXR0ZW5JbnB1dFZpc2l0b3JYBQAAAGNsYXNzTSoBTTcBh1gWAAAARGF0YWZsb3dQaXBlbGluZVJlc3VsdFgFAAAAY2xhc3NNSQRNzgSHWB0AAABEYXRhZmxvd1BpcGVsaW5lUmVzdWx0LmNhbmNlbFgDAAAAZGVmTbEETcUEh1gfAAAARGF0YWZsb3dQaXBlbGluZVJlc3VsdC5fX2luaXRfX1gDAAAAZGVmTUwETVcEh1goAAAARGF0YWZsb3dQaXBlbGluZVJlc3VsdC53YWl0X3VudGlsX2ZpbmlzaFgDAAAAZGVmTZIETbAEh1gtAAAARGF0YWZsb3dSdW5uZXIuZGVzZXJpYWxpemVfd2luZG93aW5nX3N0cmF0ZWd5WAMAAABkZWZNBARNEASHWEAAAABEYXRhZmxvd1J1bm5lci5ncm91cF9ieV9rZXlfaW5wdXRfdmlzaXRvci5Hcm91cEJ5S2V5SW5wdXRWaXNpdG9yWAUAAABjbGFzc0vXS+6HWCIAAABEYXRhZmxvd1J1bm5lci5fZ2V0X2Nsb3VkX2VuY29kaW5nWAMAAABkZWZNoAFNpwGHWBoAAABEYXRhZmxvd1J1bm5lci5ydW5fSW1wdWxzZVgDAAAAZGVmTQQCTRwCh1gaAAAAX0RhdGFmbG93SXRlcmFibGVTaWRlSW5wdXRYBQAAAGNsYXNzTSsETTgEh1gYAAAARGF0YWZsb3dSdW50aW1lRXhjZXB0aW9uWAUAAABjbGFzc03QBE3WBIdYJAAAAERhdGFmbG93UnVubmVyLl9nZXRfdW5pcXVlX3N0ZXBfbmFtZVgDAAAAZGVmS2JLZYdYGQAAAERhdGFmbG93UnVubmVyLmFwcGx5X1JlYWRYAwAAAGRlZk0iA00xA4dYUAAAAERhdGFmbG93UnVubmVyLmdyb3VwX2J5X2tleV9pbnB1dF92aXNpdG9yLkdyb3VwQnlLZXlJbnB1dFZpc2l0b3IudmlzaXRfdHJhbnNmb3JtWAMAAABkZWZL4kvuh1grAAAARGF0YWZsb3dSdW5uZXIuX2dldF90eXBlaGludF9iYXNlZF9lbmNvZGluZ1gDAAAAZGVmTZIBTZYBh1gcAAAARGF0YWZsb3dQaXBlbGluZVJlc3VsdC5zdGF0ZVgDAAAAZGVmTX4ETYsEh1giAAAARGF0YWZsb3dSdW5uZXIuYXBwbHlfQ29tYmluZVZhbHVlc1gDAAAAZGVmTe8CTfECh1gXAAAARGF0YWZsb3dSdW5uZXIuX19pbml0X19YAwAAAGRlZktcS2GHWCgAAABEYXRhZmxvd1J1bm5lci5qc29uX3N0cmluZ190b19ieXRlX2FycmF5WAMAAABkZWZNFgRNGgSHWCkAAABEYXRhZmxvd1J1bm5lci5ncm91cF9ieV9rZXlfaW5wdXRfdmlzaXRvclgDAAAAZGVmS9JL8IdYGAAAAERhdGFmbG93UnVubmVyLl9hZGRfc3RlcFgDAAAAZGVmTdEBTeoBh1gjAAAAX0RhdGFmbG93U2lkZUlucHV0Ll9zaWRlX2lucHV0X2RhdGFYAwAAAGRlZk0nBE0pBIdYKAAAAERhdGFmbG93UnVubmVyLl9nZXRfZW5jb2RlZF9vdXRwdXRfY29kZXJYAwAAAGRlZk27AU3QAYdYHwAAAERhdGFmbG93UGlwZWxpbmVSZXN1bHQuX19yZXByX19YAwAAAGRlZk3MBE3OBIdYHgAAAERhdGFmbG93UGlwZWxpbmVSZXN1bHQubWV0cmljc1gDAAAAZGVmTWEETWMEh1gxAAAARGF0YWZsb3dSdW5uZXIucG9sbF9mb3Jfam9iX2NvbXBsZXRpb24ucmFua19lcnJvclgDAAAAZGVmS4BLhodYJQAAAERhdGFmbG93UGlwZWxpbmVSZXN1bHQuX2dldF9qb2Jfc3RhdGVYAwAAAGRlZk1oBE19BIdYKwAAAERhdGFmbG93UGlwZWxpbmVSZXN1bHQuaXNfaW5fdGVybWluYWxfc3RhdGVYAwAAAGRlZk2MBE2RBIdYGAAAAERhdGFmbG93UnVubmVyLnJ1bl9QYXJEb1gDAAAAZGVmTW8CTeUCh1gfAAAARGF0YWZsb3dSdW5uZXIucnVuX19OYXRpdmVXcml0ZVgDAAAAZGVmTaUDTfgDh1haAAAARGF0YWZsb3dSdW5uZXIuZ3JvdXBfYnlfa2V5X2lucHV0X3Zpc2l0b3IuR3JvdXBCeUtleUlucHV0VmlzaXRvci5lbnRlcl9jb21wb3NpdGVfdHJhbnNmb3JtWAMAAABkZWZL30vhh1grAAAARGF0YWZsb3dSdW5uZXIuc2VyaWFsaXplX3dpbmRvd2luZ19zdHJhdGVneVgDAAAAZGVmTfkDTQMEh1giAAAARGF0YWZsb3dSdW5uZXIuX2FkZF9zaW5nbGV0b25fc3RlcFgDAAAAZGVmTesBTQMCh1ghAAAARGF0YWZsb3dSdW50aW1lRXhjZXB0aW9uLl9faW5pdF9fWAMAAABkZWZN0wRN1gSHWCQAAABEYXRhZmxvd1J1bm5lci5mbGF0dGVuX2lucHV0X3Zpc2l0b3JYAwAAAGRlZk0lAU05AYdYHQAAAERhdGFmbG93UGlwZWxpbmVSZXN1bHQuam9iX2lkWAMAAABkZWZNXgRNYASHWDIAAABEYXRhZmxvd1J1bm5lci5zaWRlX2lucHV0X3Zpc2l0b3IuU2lkZUlucHV0VmlzaXRvclgFAAAAY2xhc3NL+E0iAYdYFwAAAERhdGFmbG93UnVubmVyLnJ1bl9SZWFkWAMAAABkZWZNMgNNpAOHWCQAAABEYXRhZmxvd1J1bm5lci5hcHBseV9Xcml0ZVRvQmlnUXVlcnlYAwAAAGRlZk0wAk1DAodYIQAAAERhdGFmbG93UnVubmVyLnNpZGVfaW5wdXRfdmlzaXRvclgDAAAAZGVmS/FNJAGHWB8AAABEYXRhZmxvd1J1bm5lci5hcHBseV9Hcm91cEJ5S2V5WAMAAABkZWZNRAJNVwKHWB0AAABEYXRhZmxvd1J1bm5lci5fcGFyZG9fZm5fZGF0YVgDAAAAZGVmTeYCTe4Ch1ggAAAARGF0YWZsb3dSdW5uZXIucnVuX0NvbWJpbmVWYWx1ZXNYAwAAAGRlZk3yAk0hA4dYIgAAAERhdGFmbG93UGlwZWxpbmVSZXN1bHQuX3VwZGF0ZV9qb2JYAwAAAGRlZk1YBE1dBIdYHQAAAERhdGFmbG93UnVubmVyLnJ1bl9Hcm91cEJ5S2V5WAMAAABkZWZNWAJNbgKHWBkAAABEYXRhZmxvd1J1bm5lci5fZ2V0X2NvZGVyWAMAAABkZWZNlwFNnwGHWBoAAABEYXRhZmxvd1J1bm5lci5ydW5fRmxhdHRlblgDAAAAZGVmTR0CTS8Ch3V9cpOEAAAoWA4AAABEYXRhZmxvd1J1bm5lclgsAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXJylIQAAFgrAAAARGF0YWZsb3dSdW5uZXIuc2VyaWFsaXplX3dpbmRvd2luZ19zdHJhdGVneWqUhAAAWCIAAABEYXRhZmxvd1J1bm5lci5hcHBseV9Db21iaW5lVmFsdWVzapSEAABYKAAAAERhdGFmbG93UnVubmVyLmJ5dGVfYXJyYXlfdG9fanNvbl9zdHJpbmdqlIQAAFgkAAAARGF0YWZsb3dSdW5uZXIuZmxhdHRlbl9pbnB1dF92aXNpdG9yapSEAABYKAAAAERhdGFmbG93UnVubmVyLmpzb25fc3RyaW5nX3RvX2J5dGVfYXJyYXlqlIQAAFgXAAAARGF0YWZsb3dSdW5uZXIucnVuX1JlYWRqlIQAAFgfAAAARGF0YWZsb3dSdW5uZXIucnVuX19OYXRpdmVXcml0ZWqUhAAAWCQAAABEYXRhZmxvd1J1bm5lci5hcHBseV9Xcml0ZVRvQmlnUXVlcnlqlIQAAFgpAAAARGF0YWZsb3dSdW5uZXIuZ3JvdXBfYnlfa2V5X2lucHV0X3Zpc2l0b3JqlIQAAFgtAAAARGF0YWZsb3dSdW5uZXIuZGVzZXJpYWxpemVfd2luZG93aW5nX3N0cmF0ZWd5apSEAABYGwAAAERhdGFmbG93UnVubmVyLnJ1bl9waXBlbGluZWqUhAAAWCEAAABEYXRhZmxvd1J1bm5lci5zaWRlX2lucHV0X3Zpc2l0b3JqlIQAAFgfAAAARGF0YWZsb3dSdW5uZXIuYXBwbHlfR3JvdXBCeUtleWqUhAAAWBoAAABEYXRhZmxvd1J1bm5lci5ydW5fSW1wdWxzZWqUhAAAWCAAAABEYXRhZmxvd1J1bm5lci5ydW5fQ29tYmluZVZhbHVlc2qUhAAAWBkAAABEYXRhZmxvd1J1bm5lci5hcHBseV9SZWFkapSEAABYGAAAAERhdGFmbG93UnVubmVyLnJ1bl9QYXJEb2qUhAAAWCYAAABEYXRhZmxvd1J1bm5lci5wb2xsX2Zvcl9qb2JfY29tcGxldGlvbmqUhAAAWB0AAABEYXRhZmxvd1J1bm5lci5ydW5fR3JvdXBCeUtleWqUhAAAWBoAAABEYXRhZmxvd1J1bm5lci5ydW5fRmxhdHRlbmqUhAAAdWp9aQAAWCwAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lcnKVhAAAhYFyloQAAH1yl4QAAGJ0cpiEAABVF2FwYWNoZV9iZWFtLnV0aWxzLnJldHJ5KFgpIQAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJSZXRyeSBkZWNvcmF0b3JzIGZvciBjYWxscyByYWlzaW5nIGV4Y2VwdGlvbnMuCgpGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgpUaGlzIG1vZHVsZSBpcyB1c2VkIG1vc3RseSB0byBkZWNvcmF0ZSBhbGwgaW50ZWdyYXRpb24gcG9pbnRzIHdoZXJlIHRoZSBjb2RlCm1ha2VzIGNhbGxzIHRvIHJlbW90ZSBzZXJ2aWNlcy4gU2VhcmNoaW5nIHRocm91Z2ggdGhlIGNvZGUgYmFzZSBmb3IgQHJldHJ5CnNob3VsZCBmaW5kIGFsbCBzdWNoIHBsYWNlcy4gRm9yIHRoaXMgcmVhc29uIGV2ZW4gcGxhY2VzIHdoZXJlIHJldHJ5IGlzIG5vdApuZWVkZWQgcmlnaHQgbm93IHVzZSBhIEByZXRyeS5ub19yZXRyaWVzIGRlY29yYXRvci4KIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHJhbmRvbQppbXBvcnQgc3lzCmltcG9ydCB0aW1lCmltcG9ydCB0cmFjZWJhY2sKZnJvbSBidWlsdGlucyBpbXBvcnQgbmV4dApmcm9tIGJ1aWx0aW5zIGltcG9ydCBvYmplY3QKZnJvbSBidWlsdGlucyBpbXBvcnQgcmFuZ2UKCmZyb20gZnV0dXJlLnV0aWxzIGltcG9ydCByYWlzZV93aXRoX3RyYWNlYmFjawoKZnJvbSBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtIGltcG9ydCBCZWFtSU9FcnJvcgoKIyBQcm90ZWN0IGFnYWluc3QgZW52aXJvbm1lbnRzIHdoZXJlIGFwaXRvb2xzIGxpYnJhcnkgaXMgbm90IGF2YWlsYWJsZS4KIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KIyBUT0RPKHNvdXJhYmhiYWphaik6IFJlbW92ZSB0aGUgR0NQIHNwZWNpZmljIGVycm9yIGNvZGUgdG8gYSBzdWJtb2R1bGUKdHJ5OgogIGZyb20gYXBpdG9vbHMuYmFzZS5weS5leGNlcHRpb25zIGltcG9ydCBIdHRwRXJyb3IKZXhjZXB0IEltcG9ydEVycm9yOgogIEh0dHBFcnJvciA9IE5vbmUKIyBweWxpbnQ6IGVuYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbgoKCmNsYXNzIFBlcm1hbmVudEV4Y2VwdGlvbihFeGNlcHRpb24pOgogICIiIkJhc2UgY2xhc3MgZm9yIGV4Y2VwdGlvbnMgdGhhdCBzaG91bGQgbm90IGJlIHJldHJpZWQuIiIiCiAgcGFzcwoKCmNsYXNzIEZ1enplZEV4cG9uZW50aWFsSW50ZXJ2YWxzKG9iamVjdCk6CiAgIiIiSXRlcmFibGUgZm9yIGludGVydmFscyB0aGF0IGFyZSBleHBvbmVudGlhbGx5IHNwYWNlZCwgd2l0aCBmdXp6aW5nLgoKICBPbiBpdGVyYXRpb24sIHlpZWxkcyByZXRyeSBpbnRlcnZhbCBsZW5ndGhzLCBpbiBzZWNvbmRzLiBFdmVyeSBpdGVyYXRpb24gb3ZlcgogIHRoaXMgaXRlcmFibGUgd2lsbCB5aWVsZCBkaWZmZXJlbnRseSBmdXp6ZWQgaW50ZXJ2YWwgbGVuZ3RocywgYXMgbG9uZyBhcyBmdXp6CiAgaXMgbm9uemVyby4KCiAgQXJnczoKICAgIGluaXRpYWxfZGVsYXlfc2VjczogVGhlIGRlbGF5IGJlZm9yZSB0aGUgZmlyc3QgcmV0cnksIGluIHNlY29uZHMuCiAgICBudW1fcmV0cmllczogVGhlIHRvdGFsIG51bWJlciBvZiB0aW1lcyB0byByZXRyeS4KICAgIGZhY3RvcjogVGhlIGV4cG9uZW50aWFsIGZhY3RvciB0byB1c2Ugb24gc3Vic2VxdWVudCByZXRyaWVzLgogICAgICBEZWZhdWx0IGlzIDIgKGRvdWJsaW5nKS4KICAgIGZ1eno6IEEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLCBpbmRpY2F0aW5nIHRoZSBmcmFjdGlvbiBvZiBmdXp6LiBGb3IgYQogICAgICBnaXZlbiBkZWxheSBkLCB0aGUgZnV6emVkIGRlbGF5IGlzIHJhbmRvbWx5IGNob3NlbiBiZXR3ZWVuCiAgICAgIFsoMSAtIGZ1enopICogZCwgZF0uCiAgICBtYXhfZGVsYXlfc2VjczogTWF4aW11bSBkZWxheSAoaW4gc2Vjb25kcykuIEFmdGVyIHRoaXMgbGltaXQgaXMgcmVhY2hlZCwKICAgICAgZnVydGhlciB0cmllcyB1c2UgbWF4X2RlbGF5X3NlYyBpbnN0ZWFkIG9mIGV4cG9uZW50aWFsbHkgaW5jcmVhc2luZwogICAgICB0aGUgdGltZS4gRGVmYXVsdHMgdG8gMSBob3VyLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgaW5pdGlhbF9kZWxheV9zZWNzLCBudW1fcmV0cmllcywgZmFjdG9yPTIsIGZ1eno9MC41LAogICAgICAgICAgICAgICBtYXhfZGVsYXlfc2Vjcz02MCAqIDYwICogMSk6CiAgICBzZWxmLl9pbml0aWFsX2RlbGF5X3NlY3MgPSBpbml0aWFsX2RlbGF5X3NlY3MKICAgIGlmIG51bV9yZXRyaWVzID4gMTAwMDA6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ251bV9yZXRyaWVzIHBhcmFtZXRlciBjYW5ub3QgZXhjZWVkIDEwMDAwLicpCiAgICBzZWxmLl9udW1fcmV0cmllcyA9IG51bV9yZXRyaWVzCiAgICBzZWxmLl9mYWN0b3IgPSBmYWN0b3IKICAgIGlmIG5vdCAwIDw9IGZ1enogPD0gMToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignZnV6eiBwYXJhbWV0ZXIgZXhwZWN0ZWQgdG8gYmUgaW4gWzAsIDFdIHJhbmdlLicpCiAgICBzZWxmLl9mdXp6ID0gZnV6egogICAgc2VsZi5fbWF4X2RlbGF5X3NlY3MgPSBtYXhfZGVsYXlfc2VjcwoKICBkZWYgX19pdGVyX18oc2VsZik6CiAgICBjdXJyZW50X2RlbGF5X3NlY3MgPSBtaW4oc2VsZi5fbWF4X2RlbGF5X3NlY3MsIHNlbGYuX2luaXRpYWxfZGVsYXlfc2VjcykKICAgIGZvciBfIGluIHJhbmdlKHNlbGYuX251bV9yZXRyaWVzKToKICAgICAgZnV6el9tdWx0aXBsaWVyID0gMSAtIHNlbGYuX2Z1enogKyByYW5kb20ucmFuZG9tKCkgKiBzZWxmLl9mdXp6CiAgICAgIHlpZWxkIGN1cnJlbnRfZGVsYXlfc2VjcyAqIGZ1enpfbXVsdGlwbGllcgogICAgICBjdXJyZW50X2RlbGF5X3NlY3MgPSBtaW4oCiAgICAgICAgICBzZWxmLl9tYXhfZGVsYXlfc2VjcywgY3VycmVudF9kZWxheV9zZWNzICogc2VsZi5fZmFjdG9yKQoKCmRlZiByZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2ZpbHRlcihleGNlcHRpb24pOgogICIiIkZpbHRlciBhbGxvd2luZyByZXRyaWVzIG9uIHNlcnZlciBlcnJvcnMgYW5kIG5vbi1IdHRwRXJyb3JzLiIiIgogIGlmIChIdHRwRXJyb3IgaXMgbm90IE5vbmUpIGFuZCBpc2luc3RhbmNlKGV4Y2VwdGlvbiwgSHR0cEVycm9yKToKICAgIHJldHVybiBleGNlcHRpb24uc3RhdHVzX2NvZGUgPj0gNTAwCiAgcmV0dXJuIG5vdCBpc2luc3RhbmNlKGV4Y2VwdGlvbiwgUGVybWFuZW50RXhjZXB0aW9uKQoKCmRlZiByZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2FuZF90aW1lb3V0X2ZpbHRlcihleGNlcHRpb24pOgogIGlmIEh0dHBFcnJvciBpcyBub3QgTm9uZSBhbmQgaXNpbnN0YW5jZShleGNlcHRpb24sIEh0dHBFcnJvcik6CiAgICBpZiBleGNlcHRpb24uc3RhdHVzX2NvZGUgPT0gNDA4OiAgIyA0MDggUmVxdWVzdCBUaW1lb3V0CiAgICAgIHJldHVybiBUcnVlCiAgcmV0dXJuIHJldHJ5X29uX3NlcnZlcl9lcnJvcnNfZmlsdGVyKGV4Y2VwdGlvbikKCgpkZWYgcmV0cnlfb25fYmVhbV9pb19lcnJvcl9maWx0ZXIoZXhjZXB0aW9uKToKICAiIiJGaWx0ZXIgYWxsb3dpbmcgcmV0cmllcyBvbiBCZWFtIElPIGVycm9ycy4iIiIKICByZXR1cm4gaXNpbnN0YW5jZShleGNlcHRpb24sIEJlYW1JT0Vycm9yKQoKClNFUlZFUl9FUlJPUl9PUl9USU1FT1VUX0NPREVTID0gWzQwOCwgNTAwLCA1MDIsIDUwMywgNTA0LCA1OTgsIDU5OV0KCgpjbGFzcyBDbG9jayhvYmplY3QpOgogICIiIkEgc2ltcGxlIGNsb2NrIGltcGxlbWVudGluZyBzbGVlcCgpLiIiIgoKICBkZWYgc2xlZXAoc2VsZiwgdmFsdWUpOgogICAgdGltZS5zbGVlcCh2YWx1ZSkKCgpkZWYgbm9fcmV0cmllcyhmdW4pOgogICIiIkEgcmV0cnkgZGVjb3JhdG9yIGZvciBwbGFjZXMgd2hlcmUgd2UgZG8gbm90IHdhbnQgcmV0cmllcy4iIiIKICByZXR1cm4gd2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmKAogICAgICByZXRyeV9maWx0ZXI9bGFtYmRhIF86IEZhbHNlLCBjbG9jaz1Ob25lKShmdW4pCgoKZGVmIHdpdGhfZXhwb25lbnRpYWxfYmFja29mZigKICAgIG51bV9yZXRyaWVzPTcsIGluaXRpYWxfZGVsYXlfc2Vjcz01LjAsIGxvZ2dlcj1sb2dnaW5nLndhcm5pbmcsCiAgICByZXRyeV9maWx0ZXI9cmV0cnlfb25fc2VydmVyX2Vycm9yc19maWx0ZXIsCiAgICBjbG9jaz1DbG9jaygpLCBmdXp6PVRydWUsIGZhY3Rvcj0yLCBtYXhfZGVsYXlfc2Vjcz02MCAqIDYwKToKICAiIiJEZWNvcmF0b3Igd2l0aCBhcmd1bWVudHMgdGhhdCBjb250cm9sIHRoZSByZXRyeSBsb2dpYy4KCiAgQXJnczoKICAgIG51bV9yZXRyaWVzOiBUaGUgdG90YWwgbnVtYmVyIG9mIHRpbWVzIHRvIHJldHJ5LgogICAgaW5pdGlhbF9kZWxheV9zZWNzOiBUaGUgZGVsYXkgYmVmb3JlIHRoZSBmaXJzdCByZXRyeSwgaW4gc2Vjb25kcy4KICAgIGxvZ2dlcjogQSBjYWxsYWJsZSB1c2VkIHRvIHJlcG9ydCBhbiBleGNlcHRpb24uIE11c3QgaGF2ZSB0aGUgc2FtZSBzaWduYXR1cmUKICAgICAgYXMgZnVuY3Rpb25zIGluIHRoZSBzdGFuZGFyZCBsb2dnaW5nIG1vZHVsZS4gVGhlIGRlZmF1bHQgaXMKICAgICAgbG9nZ2luZy53YXJuaW5nLgogICAgcmV0cnlfZmlsdGVyOiBBIGNhbGxhYmxlIGdldHRpbmcgdGhlIGV4Y2VwdGlvbiByYWlzZWQgYW5kIHJldHVybmluZyBUcnVlCiAgICAgIGlmIHRoZSByZXRyeSBzaG91bGQgaGFwcGVuLiBGb3IgaW5zdGFuY2Ugd2UgZG8gbm90IHdhbnQgdG8gcmV0cnkgb24KICAgICAgNDA0IEh0dHAgZXJyb3JzIG1vc3Qgb2YgdGhlIHRpbWUuIFRoZSBkZWZhdWx0IHZhbHVlIHdpbGwgcmV0dXJuIHRydWUKICAgICAgZm9yIHNlcnZlciBlcnJvcnMgKEhUVFAgc3RhdHVzIGNvZGUgPj0gNTAwKSBhbmQgbm9uIEh0dHAgZXJyb3JzLgogICAgY2xvY2s6IEEgY2xvY2sgb2JqZWN0IGltcGxlbWVudGluZyBhIHNsZWVwIG1ldGhvZC4gVGhlIGRlZmF1bHQgY2xvY2sgd2lsbAogICAgICB1c2UgdGltZS5zbGVlcCgpLgogICAgZnV6ejogVHJ1ZSBpZiB0aGUgZGVsYXkgc2hvdWxkIGJlIGZ1enplZCAoZGVmYXVsdCkuIER1cmluZyB0ZXN0aW5nIEZhbHNlCiAgICAgIGNhbiBiZSB1c2VkIHNvIHRoYXQgdGhlIGRlbGF5cyBhcmUgbm90IHJhbmRvbWl6ZWQuCiAgICBmYWN0b3I6IFRoZSBleHBvbmVudGlhbCBmYWN0b3IgdG8gdXNlIG9uIHN1YnNlcXVlbnQgcmV0cmllcy4KICAgICAgRGVmYXVsdCBpcyAyIChkb3VibGluZykuCiAgICBtYXhfZGVsYXlfc2VjczogTWF4aW11bSBkZWxheSAoaW4gc2Vjb25kcykuIEFmdGVyIHRoaXMgbGltaXQgaXMgcmVhY2hlZCwKICAgICAgZnVydGhlciB0cmllcyB1c2UgbWF4X2RlbGF5X3NlYyBpbnN0ZWFkIG9mIGV4cG9uZW50aWFsbHkgaW5jcmVhc2luZwogICAgICB0aGUgdGltZS4gRGVmYXVsdHMgdG8gMSBob3VyLgoKICBSZXR1cm5zOgogICAgQXMgcGVyIFB5dGhvbiBkZWNvcmF0b3JzIHdpdGggYXJndW1lbnRzIHBhdHRlcm4gcmV0dXJucyBhIGRlY29yYXRvcgogICAgZm9yIHRoZSBmdW5jdGlvbiB3aGljaCBpbiB0dXJuIHdpbGwgcmV0dXJuIHRoZSB3cmFwcGVkIChkZWNvcmF0ZWQpIGZ1bmN0aW9uLgoKICBUaGUgZGVjb3JhdG9yIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgb24gY2FsbGFibGVzIHRoYXQgbWFrZSBIVFRQIG9yIFJQQwogIHJlcXVlc3RzIHRoYXQgY2FuIHRlbXBvcmFyaWx5IHRpbWVvdXQgb3IgaGF2ZSB0cmFuc2llbnQgZXJyb3JzLiBGb3IgaW5zdGFuY2UKICB0aGUgbWFrZV9odHRwX3JlcXVlc3QoKSBjYWxsIGJlbG93IHdpbGwgYmUgcmV0cmllZCAxNiB0aW1lcyB3aXRoIGV4cG9uZW50aWFsCiAgYmFja29mZiBhbmQgZnV6emluZyBvZiB0aGUgZGVsYXkgaW50ZXJ2YWwgKGRlZmF1bHQgc2V0dGluZ3MpLgoKICBmcm9tIGFwYWNoZV9iZWFtLnV0aWxzIGltcG9ydCByZXRyeQogICMgLi4uCiAgQHJldHJ5LndpdGhfZXhwb25lbnRpYWxfYmFja29mZigpCiAgbWFrZV9odHRwX3JlcXVlc3QoYXJncykKICAiIiIKCiAgZGVmIHJlYWxfZGVjb3JhdG9yKGZ1bik6CiAgICAiIiJUaGUgcmVhbCBkZWNvcmF0b3Igd2hvc2UgcHVycG9zZSBpcyB0byByZXR1cm4gdGhlIHdyYXBwZWQgZnVuY3Rpb24uIiIiCiAgICBkZWYgd3JhcHBlcigqYXJncywgKiprd2FyZ3MpOgogICAgICByZXRyeV9pbnRlcnZhbHMgPSBpdGVyKAogICAgICAgICAgRnV6emVkRXhwb25lbnRpYWxJbnRlcnZhbHMoCiAgICAgICAgICAgICAgaW5pdGlhbF9kZWxheV9zZWNzLCBudW1fcmV0cmllcywgZmFjdG9yLAogICAgICAgICAgICAgIGZ1eno9MC41IGlmIGZ1enogZWxzZSAwLCBtYXhfZGVsYXlfc2Vjcz1tYXhfZGVsYXlfc2VjcykpCiAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgdHJ5OgogICAgICAgICAgcmV0dXJuIGZ1bigqYXJncywgKiprd2FyZ3MpCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleG46ICAjIHB5bGludDogZGlzYWJsZT1icm9hZC1leGNlcHQKICAgICAgICAgIGlmIG5vdCByZXRyeV9maWx0ZXIoZXhuKToKICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICMgR2V0IHRoZSB0cmFjZWJhY2sgb2JqZWN0IGZvciB0aGUgY3VycmVudCBleGNlcHRpb24uIFRoZQogICAgICAgICAgIyBzeXMuZXhjX2luZm8oKSBmdW5jdGlvbiByZXR1cm5zIGEgdHVwbGUgd2l0aCB0aHJlZSBlbGVtZW50czoKICAgICAgICAgICMgZXhjZXB0aW9uIHR5cGUsIGV4Y2VwdGlvbiB2YWx1ZSwgYW5kIGV4Y2VwdGlvbiB0cmFjZWJhY2suCiAgICAgICAgICBleG5fdHJhY2ViYWNrID0gc3lzLmV4Y19pbmZvKClbMl0KICAgICAgICAgIHRyeToKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgIHNsZWVwX2ludGVydmFsID0gbmV4dChyZXRyeV9pbnRlcnZhbHMpCiAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgogICAgICAgICAgICAgICMgUmUtcmFpc2UgdGhlIG9yaWdpbmFsIGV4Y2VwdGlvbiBzaW5jZSB3ZSBmaW5pc2hlZCB0aGUgcmV0cmllcy4KICAgICAgICAgICAgICByYWlzZV93aXRoX3RyYWNlYmFjayhleG4sIGV4bl90cmFjZWJhY2spCgogICAgICAgICAgICBsb2dnZXIoCiAgICAgICAgICAgICAgICAnUmV0cnkgd2l0aCBleHBvbmVudGlhbCBiYWNrb2ZmOiB3YWl0aW5nIGZvciAlcyBzZWNvbmRzIGJlZm9yZSAnCiAgICAgICAgICAgICAgICAncmV0cnlpbmcgJXMgYmVjYXVzZSB3ZSBjYXVnaHQgZXhjZXB0aW9uOiAlcyAnCiAgICAgICAgICAgICAgICAnVHJhY2ViYWNrIGZvciBhYm92ZSBleGNlcHRpb24gKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4lcycsCiAgICAgICAgICAgICAgICBzbGVlcF9pbnRlcnZhbCwKICAgICAgICAgICAgICAgIGdldGF0dHIoZnVuLCAnX19uYW1lX18nLCBzdHIoZnVuKSksCiAgICAgICAgICAgICAgICAnJy5qb2luKHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uX29ubHkoZXhuLl9fY2xhc3NfXywgZXhuKSksCiAgICAgICAgICAgICAgICAnJy5qb2luKHRyYWNlYmFjay5mb3JtYXRfdGIoZXhuX3RyYWNlYmFjaykpKQogICAgICAgICAgICBjbG9jay5zbGVlcChzbGVlcF9pbnRlcnZhbCkKICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICMgVHJhY2ViYWNrIG9iamVjdHMgaW4gbG9jYWxzIGNhbiBjYXVzZSByZWZlcmVuY2UgY3ljbGVzIHRoYXQgd2lsbAogICAgICAgICAgICAjIHByZXZlbnQgZ2FyYmFnZSBjb2xsZWN0aW9uLiBDbGVhciBpdCBub3cgc2luY2Ugd2UgZG8gbm90IG5lZWQKICAgICAgICAgICAgIyBpdCBhbnltb3JlLgogICAgICAgICAgICBleG5fdHJhY2ViYWNrID0gTm9uZQoKICAgIHJldHVybiB3cmFwcGVyCgogIHJldHVybiByZWFsX2RlY29yYXRvcgp9cpmEAAAoWCMAAABGdXp6ZWRFeHBvbmVudGlhbEludGVydmFscy5fX2l0ZXJfX1gDAAAAZGVmS1pLYYdYIwAAAEZ1enplZEV4cG9uZW50aWFsSW50ZXJ2YWxzLl9faW5pdF9fWAMAAABkZWZLTktZh1gSAAAAUGVybWFuZW50RXhjZXB0aW9uWAUAAABjbGFzc0s1SziHWAsAAABDbG9jay5zbGVlcFgDAAAAZGVmS3xLfodYBQAAAENsb2NrWAUAAABjbGFzc0t5S36HWCcAAAB3aXRoX2V4cG9uZW50aWFsX2JhY2tvZmYucmVhbF9kZWNvcmF0b3JYAwAAAGRlZkuvS9eHWC8AAAB3aXRoX2V4cG9uZW50aWFsX2JhY2tvZmYucmVhbF9kZWNvcmF0b3Iud3JhcHBlclgDAAAAZGVmS7FL1YdYCgAAAG5vX3JldHJpZXNYAwAAAGRlZkuAS4SHWCkAAAByZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2FuZF90aW1lb3V0X2ZpbHRlclgDAAAAZGVmS2pLb4dYGgAAAEZ1enplZEV4cG9uZW50aWFsSW50ZXJ2YWxzWAUAAABjbGFzc0s6S2GHWB0AAAByZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2ZpbHRlclgDAAAAZGVmS2NLaIdYGAAAAHdpdGhfZXhwb25lbnRpYWxfYmFja29mZlgDAAAAZGVmS4ZL2YdYHQAAAHJldHJ5X29uX2JlYW1faW9fZXJyb3JfZmlsdGVyWAMAAABkZWZLcUt0h3V9cpqEAAAoakZ+AABqbGEAAFgLAAAAQ2xvY2suc2xlZXBqbGEAAFgFAAAAQ2xvY2tqbGEAAFgKAAAAbm9fcmV0cmllc2psYQAAWCkAAAByZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2FuZF90aW1lb3V0X2ZpbHRlcmpsYQAAWBoAAABGdXp6ZWRFeHBvbmVudGlhbEludGVydmFsc2psYQAAWB0AAAByZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2ZpbHRlcmpsYQAAWBgAAAB3aXRoX2V4cG9uZW50aWFsX2JhY2tvZmZqbGEAAFgdAAAAcmV0cnlfb25fYmVhbV9pb19lcnJvcl9maWx0ZXJqbGEAAHVqfWkAAFgXAAAAYXBhY2hlX2JlYW0udXRpbHMucmV0cnlym4QAAIWBcpyEAAB9cp2EAABidHKehAAAVRthcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXAoWNkiAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIlRpbWVzdGFtcCB1dGlsaXRpZXMuCgpGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgoKaW1wb3J0IGRhdGV0aW1lCmltcG9ydCBmdW5jdG9vbHMKaW1wb3J0IHJlCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdAoKaW1wb3J0IHB5dHoKZnJvbSBwYXN0LmJ1aWx0aW5zIGltcG9ydCBsb25nCgpmcm9tIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5IGltcG9ydCBjb21tb25fdXJucwoKCkBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcKY2xhc3MgVGltZXN0YW1wKG9iamVjdCk6CiAgIiIiUmVwcmVzZW50cyBhIFVuaXggc2Vjb25kIHRpbWVzdGFtcCB3aXRoIG1pY3Jvc2Vjb25kIGdyYW51bGFyaXR5LgoKICBDYW4gYmUgdHJlYXRlZCBpbiBjb21tb24gdGltZXN0YW1wIGFyaXRobWV0aWMgb3BlcmF0aW9ucyBhcyBhIG51bWVyaWMgdHlwZS4KCiAgSW50ZXJuYWxseSBzdG9yZXMgYSB0aW1lIGludGVydmFsIGFzIGFuIGludCBvZiBtaWNyb3NlY29uZHMuIFRoaXMgc3RyYXRlZ3kKICBpcyBuZWNlc3Nhcnkgc2luY2UgZmxvYXRpbmcgcG9pbnQgdmFsdWVzIGxvc2UgcHJlY2lzaW9uIHdoZW4gc3RvcmluZyB2YWx1ZXMsCiAgZXNwZWNpYWxseSBhZnRlciBhcml0aG1ldGljIG9wZXJhdGlvbnMgKGZvciBleGFtcGxlLCAxMDAwMDAwMCAlIDAuMSBldmFsdWF0ZXMKICB0byAwLjA5OTk5OTk5OTQ0NDg4ODUpLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgc2Vjb25kcz0wLCBtaWNyb3M9MCk6CiAgICBpZiBub3QgaXNpbnN0YW5jZShzZWNvbmRzLCAoaW50LCBsb25nLCBmbG9hdCkpOgogICAgICByYWlzZSBUeXBlRXJyb3IoJ0Nhbm5vdCBpbnRlcnByZXQgJXMgJXMgYXMgc2Vjb25kcy4nICUgKAogICAgICAgICAgc2Vjb25kcywgdHlwZShzZWNvbmRzKSkpCiAgICBpZiBub3QgaXNpbnN0YW5jZShtaWNyb3MsIChpbnQsIGxvbmcsIGZsb2F0KSk6CiAgICAgIHJhaXNlIFR5cGVFcnJvcignQ2Fubm90IGludGVycHJldCAlcyAlcyBhcyBtaWNyb3MuJyAlICgKICAgICAgICAgIG1pY3JvcywgdHlwZShtaWNyb3MpKSkKICAgIHNlbGYubWljcm9zID0gaW50KHNlY29uZHMgKiAxMDAwMDAwKSArIGludChtaWNyb3MpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgb2Yoc2Vjb25kcyk6CiAgICAiIiJSZXR1cm4gdGhlIFRpbWVzdGFtcCBmb3IgdGhlIGdpdmVuIG51bWJlciBvZiBzZWNvbmRzLgoKICAgIElmIHRoZSBpbnB1dCBpcyBhbHJlYWR5IGEgVGltZXN0YW1wLCB0aGUgaW5wdXQgaXRzZWxmIHdpbGwgYmUgcmV0dXJuZWQuCgogICAgQXJnczoKICAgICAgc2Vjb25kczogTnVtYmVyIG9mIHNlY29uZHMgYXMgaW50LCBmbG9hdCwgbG9uZywgb3IgVGltZXN0YW1wLgoKICAgIFJldHVybnM6CiAgICAgIENvcnJlc3BvbmRpbmcgVGltZXN0YW1wIG9iamVjdC4KICAgICIiIgoKICAgIGlmIG5vdCBpc2luc3RhbmNlKHNlY29uZHMsIChpbnQsIGxvbmcsIGZsb2F0LCBUaW1lc3RhbXApKToKICAgICAgcmFpc2UgVHlwZUVycm9yKCdDYW5ub3QgaW50ZXJwcmV0ICVzICVzIGFzIFRpbWVzdGFtcC4nICUgKAogICAgICAgICAgc2Vjb25kcywgdHlwZShzZWNvbmRzKSkpCiAgICBpZiBpc2luc3RhbmNlKHNlY29uZHMsIFRpbWVzdGFtcCk6CiAgICAgIHJldHVybiBzZWNvbmRzCiAgICByZXR1cm4gVGltZXN0YW1wKHNlY29uZHMpCgogIFJGQ18zMzM5X1JFID0gcmUuY29tcGlsZSgKICAgICAgcideKFxkezR9KS0oXGR7Mn0pLShcZHsyfSlUKFxkezJ9KTooXGR7Mn0pOihcZHsyfSkoPzpcLihcZCspKT9aJCcpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgX2Vwb2NoX2RhdGV0aW1lX3V0YygpOgogICAgcmV0dXJuIGRhdGV0aW1lLmRhdGV0aW1lLmZyb210aW1lc3RhbXAoMCwgcHl0ei51dGMpCgogIEBjbGFzc21ldGhvZAogIGRlZiBmcm9tX3V0Y19kYXRldGltZShjbHMsIGR0KToKICAgICIiIkNyZWF0ZSBhIGBgVGltZXN0YW1wYGAgaW5zdGFuY2UgZnJvbSBhIGBgZGF0ZXRpbWUuZGF0ZXRpbWVgYCBvYmplY3QuCgogICAgQXJnczoKICAgICAgZHQ6IEEgYGBkYXRldGltZS5kYXRldGltZWBgIG9iamVjdCBpbiBVVEMgKG9mZnNldC1hd2FyZSkuCiAgICAiIiIKICAgIGlmIGR0LnR6aW5mbyAhPSBweXR6LnV0YzoKICAgICAgcmFpc2UgVmFsdWVFcnJvcignZHQgbm90IGluIFVUQzogJXMnICUgZHQpCiAgICBkdXJhdGlvbiA9IGR0IC0gY2xzLl9lcG9jaF9kYXRldGltZV91dGMoKQogICAgcmV0dXJuIFRpbWVzdGFtcChkdXJhdGlvbi50b3RhbF9zZWNvbmRzKCkpCgogIEBjbGFzc21ldGhvZAogIGRlZiBmcm9tX3JmYzMzMzkoY2xzLCByZmMzMzM5KToKICAgICIiIkNyZWF0ZSBhIGBgVGltZXN0YW1wYGAgaW5zdGFuY2UgZnJvbSBhbiBSRkMgMzMzOSBjb21wbGlhbnQgc3RyaW5nLgoKICAgIEFyZ3M6CiAgICAgIHJmYzMzMzk6IFN0cmluZyBpbiBSRkMgMzMzOSBmb3JtLgogICAgIiIiCiAgICBkdF9hcmdzID0gW10KICAgIG1hdGNoID0gY2xzLlJGQ18zMzM5X1JFLm1hdGNoKHJmYzMzMzkpCiAgICBpZiBtYXRjaCBpcyBOb25lOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdDb3VsZCBub3QgcGFyc2UgUkZDIDMzMzkgc3RyaW5nOiAlcycgJSByZmMzMzM5KQogICAgZm9yIHMgaW4gbWF0Y2guZ3JvdXBzKCk6CiAgICAgIGlmIHMgaXMgbm90IE5vbmU6CiAgICAgICAgZHRfYXJncy5hcHBlbmQoaW50KHMpKQogICAgICBlbHNlOgogICAgICAgIGR0X2FyZ3MuYXBwZW5kKDApCiAgICBkdF9hcmdzICs9IChweXR6LnV0YywgKQogICAgZHQgPSBkYXRldGltZS5kYXRldGltZSgqZHRfYXJncykKICAgIHJldHVybiBjbHMuZnJvbV91dGNfZGF0ZXRpbWUoZHQpCgogIGRlZiBwcmVkZWNlc3NvcihzZWxmKToKICAgICIiIlJldHVybnMgdGhlIGxhcmdlc3QgdGltZXN0YW1wIHNtYWxsZXIgdGhhbiBzZWxmLiIiIgogICAgcmV0dXJuIFRpbWVzdGFtcChtaWNyb3M9c2VsZi5taWNyb3MgLSAxKQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICBtaWNyb3MgPSBzZWxmLm1pY3JvcwogICAgc2lnbiA9ICcnCiAgICBpZiBtaWNyb3MgPCAwOgogICAgICBzaWduID0gJy0nCiAgICAgIG1pY3JvcyA9IC1taWNyb3MKICAgIGludF9wYXJ0ID0gbWljcm9zIC8vIDEwMDAwMDAKICAgIGZyYWNfcGFydCA9IG1pY3JvcyAlIDEwMDAwMDAKICAgIGlmIGZyYWNfcGFydDoKICAgICAgcmV0dXJuICdUaW1lc3RhbXAoJXMlZC4lMDZkKScgJSAoc2lnbiwgaW50X3BhcnQsIGZyYWNfcGFydCkKICAgIHJldHVybiAnVGltZXN0YW1wKCVzJWQpJyAlIChzaWduLCBpbnRfcGFydCkKCiAgZGVmIHRvX3V0Y19kYXRldGltZShzZWxmKToKICAgICMgV2UgY2FuJ3QgZWFzaWx5IGNvbnN0cnVjdCBhIGRhdGV0aW1lIG9iamVjdCBmcm9tIG1pY3Jvc2Vjb25kcywgc28gd2UKICAgICMgY3JlYXRlIG9uZSBhdCB0aGUgZXBvY2ggYW5kIGFkZCBhbiBhcHByb3ByaWF0ZSB0aW1lZGVsdGEgaW50ZXJ2YWwuCiAgICByZXR1cm4gc2VsZi5fZXBvY2hfZGF0ZXRpbWVfdXRjKCkucmVwbGFjZSh0emluZm89Tm9uZSkgKyBkYXRldGltZS50aW1lZGVsdGEoCiAgICAgICAgbWljcm9zZWNvbmRzPXNlbGYubWljcm9zKQoKICBkZWYgdG9fcmZjMzMzOShzZWxmKToKICAgICMgQXBwZW5kICdaJyBmb3IgVVRDIHRpbWV6b25lLgogICAgcmV0dXJuIHNlbGYudG9fdXRjX2RhdGV0aW1lKCkuaXNvZm9ybWF0KCkgKyAnWicKCiAgZGVmIF9fZmxvYXRfXyhzZWxmKToKICAgICMgTm90ZSB0aGF0IHRoZSByZXR1cm5lZCB2YWx1ZSBtYXkgaGF2ZSBsb3N0IHByZWNpc2lvbi4KICAgIHJldHVybiBzZWxmLm1pY3JvcyAvIDEwMDAwMDAKCiAgZGVmIF9faW50X18oc2VsZik6CiAgICAjIE5vdGUgdGhhdCB0aGUgcmV0dXJuZWQgdmFsdWUgbWF5IGhhdmUgbG9zdCBwcmVjaXNpb24uCiAgICByZXR1cm4gc2VsZi5taWNyb3MgLy8gMTAwMDAwMAoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgICMgQWxsb3cgY29tcGFyaXNvbnMgYmV0d2VlbiBEdXJhdGlvbiBhbmQgVGltZXN0YW1wIHZhbHVlcy4KICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBEdXJhdGlvbik6CiAgICAgIG90aGVyID0gVGltZXN0YW1wLm9mKG90aGVyKQogICAgcmV0dXJuIHNlbGYubWljcm9zID09IG90aGVyLm1pY3JvcwoKICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKICAgICMgVE9ETyhCRUFNLTU5NDkpOiBOZWVkZWQgZm9yIFB5dGhvbiAyIGNvbXBhdGliaWxpdHkuCiAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKCiAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CiAgICAjIEFsbG93IGNvbXBhcmlzb25zIGJldHdlZW4gRHVyYXRpb24gYW5kIFRpbWVzdGFtcCB2YWx1ZXMuCiAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgRHVyYXRpb24pOgogICAgICBvdGhlciA9IFRpbWVzdGFtcC5vZihvdGhlcikKICAgIHJldHVybiBzZWxmLm1pY3JvcyA8IG90aGVyLm1pY3JvcwoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaChzZWxmLm1pY3JvcykKCiAgZGVmIF9fYWRkX18oc2VsZiwgb3RoZXIpOgogICAgb3RoZXIgPSBEdXJhdGlvbi5vZihvdGhlcikKICAgIHJldHVybiBUaW1lc3RhbXAobWljcm9zPXNlbGYubWljcm9zICsgb3RoZXIubWljcm9zKQoKICBkZWYgX19yYWRkX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuIHNlbGYgKyBvdGhlcgoKICBkZWYgX19zdWJfXyhzZWxmLCBvdGhlcik6CiAgICBvdGhlciA9IER1cmF0aW9uLm9mKG90aGVyKQogICAgcmV0dXJuIFRpbWVzdGFtcChtaWNyb3M9c2VsZi5taWNyb3MgLSBvdGhlci5taWNyb3MpCgogIGRlZiBfX21vZF9fKHNlbGYsIG90aGVyKToKICAgIG90aGVyID0gRHVyYXRpb24ub2Yob3RoZXIpCiAgICByZXR1cm4gRHVyYXRpb24obWljcm9zPXNlbGYubWljcm9zICUgb3RoZXIubWljcm9zKQoKCk1JTl9USU1FU1RBTVAgPSBUaW1lc3RhbXAobWljcm9zPWludCgKICAgIGNvbW1vbl91cm5zLmNvbnN0YW50cy5NSU5fVElNRVNUQU1QX01JTExJUy5jb25zdGFudCkqMTAwMCkKTUFYX1RJTUVTVEFNUCA9IFRpbWVzdGFtcChtaWNyb3M9aW50KAogICAgY29tbW9uX3VybnMuY29uc3RhbnRzLk1BWF9USU1FU1RBTVBfTUlMTElTLmNvbnN0YW50KSoxMDAwKQoKCkBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcKY2xhc3MgRHVyYXRpb24ob2JqZWN0KToKICAiIiJSZXByZXNlbnRzIGEgc2Vjb25kIGR1cmF0aW9uIHdpdGggbWljcm9zZWNvbmQgZ3JhbnVsYXJpdHkuCgogIENhbiBiZSB0cmVhdGVkIGluIGNvbW1vbiBhcml0aG1ldGljIG9wZXJhdGlvbnMgYXMgYSBudW1lcmljIHR5cGUuCgogIEludGVybmFsbHkgc3RvcmVzIGEgdGltZSBpbnRlcnZhbCBhcyBhbiBpbnQgb2YgbWljcm9zZWNvbmRzLiBUaGlzIHN0cmF0ZWd5CiAgaXMgbmVjZXNzYXJ5IHNpbmNlIGZsb2F0aW5nIHBvaW50IHZhbHVlcyBsb3NlIHByZWNpc2lvbiB3aGVuIHN0b3JpbmcgdmFsdWVzLAogIGVzcGVjaWFsbHkgYWZ0ZXIgYXJpdGhtZXRpYyBvcGVyYXRpb25zIChmb3IgZXhhbXBsZSwgMTAwMDAwMDAgJSAwLjEgZXZhbHVhdGVzCiAgdG8gMC4wOTk5OTk5OTk0NDQ4ODg1KS4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHNlY29uZHM9MCwgbWljcm9zPTApOgogICAgc2VsZi5taWNyb3MgPSBpbnQoc2Vjb25kcyAqIDEwMDAwMDApICsgaW50KG1pY3JvcykKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBvZihzZWNvbmRzKToKICAgICIiIlJldHVybiB0aGUgRHVyYXRpb24gZm9yIHRoZSBnaXZlbiBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSBVbml4IGVwb2NoLgoKICAgIElmIHRoZSBpbnB1dCBpcyBhbHJlYWR5IGEgRHVyYXRpb24sIHRoZSBpbnB1dCBpdHNlbGYgd2lsbCBiZSByZXR1cm5lZC4KCiAgICBBcmdzOgogICAgICBzZWNvbmRzOiBOdW1iZXIgb2Ygc2Vjb25kcyBhcyBpbnQsIGZsb2F0IG9yIER1cmF0aW9uLgoKICAgIFJldHVybnM6CiAgICAgIENvcnJlc3BvbmRpbmcgRHVyYXRpb24gb2JqZWN0LgogICAgIiIiCgogICAgaWYgaXNpbnN0YW5jZShzZWNvbmRzLCBUaW1lc3RhbXApOgogICAgICByYWlzZSBUeXBlRXJyb3IoJ0Nhbm5vdCBpbnRlcnByZXQgJXMgYXMgRHVyYXRpb24uJyAlIHNlY29uZHMpCiAgICBpZiBpc2luc3RhbmNlKHNlY29uZHMsIER1cmF0aW9uKToKICAgICAgcmV0dXJuIHNlY29uZHMKICAgIHJldHVybiBEdXJhdGlvbihzZWNvbmRzKQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICBtaWNyb3MgPSBzZWxmLm1pY3JvcwogICAgc2lnbiA9ICcnCiAgICBpZiBtaWNyb3MgPCAwOgogICAgICBzaWduID0gJy0nCiAgICAgIG1pY3JvcyA9IC1taWNyb3MKICAgIGludF9wYXJ0ID0gbWljcm9zIC8vIDEwMDAwMDAKICAgIGZyYWNfcGFydCA9IG1pY3JvcyAlIDEwMDAwMDAKICAgIGlmIGZyYWNfcGFydDoKICAgICAgcmV0dXJuICdEdXJhdGlvbiglcyVkLiUwNmQpJyAlIChzaWduLCBpbnRfcGFydCwgZnJhY19wYXJ0KQogICAgcmV0dXJuICdEdXJhdGlvbiglcyVkKScgJSAoc2lnbiwgaW50X3BhcnQpCgogIGRlZiBfX2Zsb2F0X18oc2VsZik6CiAgICAjIE5vdGUgdGhhdCB0aGUgcmV0dXJuZWQgdmFsdWUgbWF5IGhhdmUgbG9zdCBwcmVjaXNpb24uCiAgICByZXR1cm4gc2VsZi5taWNyb3MgLyAxMDAwMDAwCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgIyBBbGxvdyBjb21wYXJpc29ucyBiZXR3ZWVuIER1cmF0aW9uIGFuZCBUaW1lc3RhbXAgdmFsdWVzLgogICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFRpbWVzdGFtcCk6CiAgICAgIG90aGVyID0gRHVyYXRpb24ub2Yob3RoZXIpCiAgICByZXR1cm4gc2VsZi5taWNyb3MgPT0gb3RoZXIubWljcm9zCgogIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgogICAgIyBUT0RPKEJFQU0tNTk0OSk6IE5lZWRlZCBmb3IgUHl0aG9uIDIgY29tcGF0aWJpbGl0eS4KICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgoKICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKICAgICMgQWxsb3cgY29tcGFyaXNvbnMgYmV0d2VlbiBEdXJhdGlvbiBhbmQgVGltZXN0YW1wIHZhbHVlcy4KICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBUaW1lc3RhbXApOgogICAgICBvdGhlciA9IER1cmF0aW9uLm9mKG90aGVyKQogICAgcmV0dXJuIHNlbGYubWljcm9zIDwgb3RoZXIubWljcm9zCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKHNlbGYubWljcm9zKQoKICBkZWYgX19uZWdfXyhzZWxmKToKICAgIHJldHVybiBEdXJhdGlvbihtaWNyb3M9LXNlbGYubWljcm9zKQoKICBkZWYgX19hZGRfXyhzZWxmLCBvdGhlcik6CiAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBUaW1lc3RhbXApOgogICAgICByZXR1cm4gb3RoZXIgKyBzZWxmCiAgICBvdGhlciA9IER1cmF0aW9uLm9mKG90aGVyKQogICAgcmV0dXJuIER1cmF0aW9uKG1pY3Jvcz1zZWxmLm1pY3JvcyArIG90aGVyLm1pY3JvcykKCiAgZGVmIF9fcmFkZF9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiBzZWxmICsgb3RoZXIKCiAgZGVmIF9fc3ViX18oc2VsZiwgb3RoZXIpOgogICAgb3RoZXIgPSBEdXJhdGlvbi5vZihvdGhlcikKICAgIHJldHVybiBEdXJhdGlvbihtaWNyb3M9c2VsZi5taWNyb3MgLSBvdGhlci5taWNyb3MpCgogIGRlZiBfX3JzdWJfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gLShzZWxmIC0gb3RoZXIpCgogIGRlZiBfX211bF9fKHNlbGYsIG90aGVyKToKICAgIG90aGVyID0gRHVyYXRpb24ub2Yob3RoZXIpCiAgICByZXR1cm4gRHVyYXRpb24obWljcm9zPXNlbGYubWljcm9zICogb3RoZXIubWljcm9zIC8vIDEwMDAwMDApCgogIGRlZiBfX3JtdWxfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gc2VsZiAqIG90aGVyCgogIGRlZiBfX21vZF9fKHNlbGYsIG90aGVyKToKICAgIG90aGVyID0gRHVyYXRpb24ub2Yob3RoZXIpCiAgICByZXR1cm4gRHVyYXRpb24obWljcm9zPXNlbGYubWljcm9zICUgb3RoZXIubWljcm9zKQoKCiMgVGhlIG1pbmltdW0gZ3JhbnVsYXJpdHkgLyBpbnRlcnZhbCBleHByZXNzaWJsZSBpbiBhIFRpbWVzdGFtcCAvIER1cmF0aW9uCiMgb2JqZWN0LgpUSU1FX0dSQU5VTEFSSVRZID0gRHVyYXRpb24obWljcm9zPTEpCn1yn4QAAChYEAAAAER1cmF0aW9uLl9fbmVnX19YAwAAAGRlZk0FAU0HAYdYEgAAAFRpbWVzdGFtcC5fX3JlcHJfX1gDAAAAZGVmS3lLhIdYEQAAAER1cmF0aW9uLl9faW5pdF9fWAMAAABkZWZLzEvOh1gRAAAARHVyYXRpb24uX19yc3ViX19YAwAAAGRlZk0VAU0XAYdYEgAAAFRpbWVzdGFtcC5fX2hhc2hfX1gDAAAAZGVmS6dLqYdYEAAAAER1cmF0aW9uLl9fc3ViX19YAwAAAGRlZk0RAU0UAYdYEwAAAFRpbWVzdGFtcC5fX2Zsb2F0X19YAwAAAGRlZkuPS5KHWBkAAABUaW1lc3RhbXAudG9fdXRjX2RhdGV0aW1lWAMAAABkZWZLhUuKh1gQAAAARHVyYXRpb24uX19tb2RfX1gDAAAAZGVmTR8BTSIBh1gPAAAARHVyYXRpb24uX19sdF9fWAMAAABkZWZL/E0BAYdYCwAAAER1cmF0aW9uLm9mWAMAAABkZWZLz0vhh1gRAAAAVGltZXN0YW1wLl9fYWRkX19YAwAAAGRlZkuqS62HWAwAAABUaW1lc3RhbXAub2ZYAwAAAGRlZks6S02HWBEAAABEdXJhdGlvbi5fX3JhZGRfX1gDAAAAZGVmTQ4BTRABh1gQAAAAVGltZXN0YW1wLl9fZXFfX1gDAAAAZGVmS5dLnIdYEQAAAFRpbWVzdGFtcC5fX21vZF9fWAMAAABkZWZLtUu4h1gQAAAARHVyYXRpb24uX19tdWxfX1gDAAAAZGVmTRgBTRsBh1gQAAAAVGltZXN0YW1wLl9fbmVfX1gDAAAAZGVmS51LoIdYFAAAAFRpbWVzdGFtcC50b19yZmMzMzM5WAMAAABkZWZLi0uOh1gWAAAAVGltZXN0YW1wLmZyb21fcmZjMzMzOVgDAAAAZGVmS2FLdIdYGwAAAFRpbWVzdGFtcC5mcm9tX3V0Y19kYXRldGltZVgDAAAAZGVmS1VLYIdYHQAAAFRpbWVzdGFtcC5fZXBvY2hfZGF0ZXRpbWVfdXRjWAMAAABkZWZLUUtUh1gSAAAARHVyYXRpb24uX19mbG9hdF9fWAMAAABkZWZL7kvxh1gJAAAAVGltZXN0YW1wWAUAAABjbGFzc0slS7iHWBEAAABEdXJhdGlvbi5fX2hhc2hfX1gDAAAAZGVmTQIBTQQBh1gPAAAARHVyYXRpb24uX19uZV9fWAMAAABkZWZL+Ev7h1gRAAAARHVyYXRpb24uX19ybXVsX19YAwAAAGRlZk0cAU0eAYdYEQAAAER1cmF0aW9uLl9fcmVwcl9fWAMAAABkZWZL4kvth1gQAAAARHVyYXRpb24uX19hZGRfX1gDAAAAZGVmTQgBTQ0Bh1gIAAAARHVyYXRpb25YBQAAAGNsYXNzS8BNIgGHWBUAAABUaW1lc3RhbXAucHJlZGVjZXNzb3JYAwAAAGRlZkt1S3iHWBEAAABUaW1lc3RhbXAuX19zdWJfX1gDAAAAZGVmS7FLtIdYDwAAAER1cmF0aW9uLl9fZXFfX1gDAAAAZGVmS/JL94dYEQAAAFRpbWVzdGFtcC5fX2ludF9fWAMAAABkZWZLk0uWh1gSAAAAVGltZXN0YW1wLl9faW5pdF9fWAMAAABkZWZLMUs5h1gSAAAAVGltZXN0YW1wLl9fcmFkZF9fWAMAAABkZWZLrkuwh1gQAAAAVGltZXN0YW1wLl9fbHRfX1gDAAAAZGVmS6FLpod1fXKghAAAKFgUAAAAVGltZXN0YW1wLnRvX3JmYzMzMzlqgWEAAFgVAAAAVGltZXN0YW1wLnByZWRlY2Vzc29yaoFhAABYFgAAAFRpbWVzdGFtcC5mcm9tX3JmYzMzMzlqgWEAAFgbAAAAVGltZXN0YW1wLmZyb21fdXRjX2RhdGV0aW1laoFhAABYCQAAAFRpbWVzdGFtcGqBYQAAWAgAAABEdXJhdGlvbmqBYQAAWAsAAABEdXJhdGlvbi5vZmqBYQAAWAwAAABUaW1lc3RhbXAub2ZqgWEAAFgZAAAAVGltZXN0YW1wLnRvX3V0Y19kYXRldGltZWqBYQAAdWp9aQAAWBsAAABhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXByoYQAAIWBcqKEAAB9cqOEAABidHKkhAAAVSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jbG9jayhYJAYAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiQ2xvY2sgaW1wbGVtZW50YXRpb25zIGZvciByZWFsIHRpbWUgcHJvY2Vzc2luZyBhbmQgdGVzdGluZy4KCkZvciBpbnRlcm5hbCB1c2Ugb25seS4gTm8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KIiIiCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgdGltZQpmcm9tIGJ1aWx0aW5zIGltcG9ydCBvYmplY3QKCgpjbGFzcyBDbG9jayhvYmplY3QpOgogIGRlZiB0aW1lKHNlbGYpOgogICAgIiIiUmV0dXJucyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgZXBvY2guIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKCiAgZGVmIGFkdmFuY2VfdGltZShzZWxmLCBhZHZhbmNlX2J5KToKICAgICIiIkFkdmFuY2VzIHRoZSBjbG9jayBieSBhIG51bWJlciBvZiBzZWNvbmRzLiIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCgoKY2xhc3MgUmVhbENsb2NrKG9iamVjdCk6CiAgZGVmIHRpbWUoc2VsZik6CiAgICByZXR1cm4gdGltZS50aW1lKCkKCgpjbGFzcyBUZXN0Q2xvY2sob2JqZWN0KToKICAiIiJDbG9jayB1c2VkIGZvciBUZXN0aW5nIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIGN1cnJlbnRfdGltZT0wKToKICAgIHNlbGYuX2N1cnJlbnRfdGltZSA9IGN1cnJlbnRfdGltZQoKICBkZWYgdGltZShzZWxmKToKICAgIHJldHVybiBzZWxmLl9jdXJyZW50X3RpbWUKCiAgZGVmIGFkdmFuY2VfdGltZShzZWxmLCBhZHZhbmNlX2J5KToKICAgIHNlbGYuX2N1cnJlbnRfdGltZSArPSBhZHZhbmNlX2J5Cn1ypYQAAChYEgAAAFRlc3RDbG9jay5fX2luaXRfX1gDAAAAZGVmSy1LL4dYDgAAAFJlYWxDbG9jay50aW1lWAMAAABkZWZLJ0sph1gWAAAAVGVzdENsb2NrLmFkdmFuY2VfdGltZVgDAAAAZGVmSzNLNYdYCQAAAFJlYWxDbG9ja1gFAAAAY2xhc3NLJksph1gFAAAAQ2xvY2tYBQAAAGNsYXNzSxxLJIdYCQAAAFRlc3RDbG9ja1gFAAAAY2xhc3NLK0s1h1gSAAAAQ2xvY2suYWR2YW5jZV90aW1lWAMAAABkZWZLIUskh1gOAAAAVGVzdENsb2NrLnRpbWVYAwAAAGRlZkswSzKHWAoAAABDbG9jay50aW1lWAMAAABkZWZLHUsgh3V9cqaEAAAoWBYAAABUZXN0Q2xvY2suYWR2YW5jZV90aW1lag9mAABYDgAAAFJlYWxDbG9jay50aW1lag9mAABYCQAAAFJlYWxDbG9ja2oPZgAAWAUAAABDbG9ja2oPZgAAWAkAAABUZXN0Q2xvY2tqD2YAAFgSAAAAQ2xvY2suYWR2YW5jZV90aW1lag9mAABYDgAAAFRlc3RDbG9jay50aW1lag9mAABYCgAAAENsb2NrLnRpbWVqD2YAAHVqfWkAAFggAAAAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuY2xvY2typ4QAAIWBcqiEAAB9cqmEAABidFUdYXBhY2hlX2JlYW0ucnVubmVycy5qb2IudXRpbHMoWJYEAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIlV0aWxpdHkgZnVuY3Rpb25zIGZvciBlZmZpY2llbnRseSBwcm9jZXNzaW5nIHdpdGggdGhlIGpvYiBBUEkKIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGpzb24KCmZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCBqc29uX2Zvcm1hdApmcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgc3RydWN0X3BiMgoKCmRlZiBkaWN0X3RvX3N0cnVjdChkaWN0X29iaik6CiAgcmV0dXJuIGpzb25fZm9ybWF0LlBhcnNlRGljdChkaWN0X29iaiwgc3RydWN0X3BiMi5TdHJ1Y3QoKSkKCgpkZWYgc3RydWN0X3RvX2RpY3Qoc3RydWN0X29iaik6CiAgcmV0dXJuIGpzb24ubG9hZHMoanNvbl9mb3JtYXQuTWVzc2FnZVRvSnNvbihzdHJ1Y3Rfb2JqKSkKfXKqhAAAKFgOAAAAZGljdF90b19zdHJ1Y3RYAwAAAGRlZksdSx+HWA4AAABzdHJ1Y3RfdG9fZGljdFgDAAAAZGVmSyFLI4d1fXKrhAAAKFgOAAAAZGljdF90b19zdHJ1Y3RYHQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuam9iLnV0aWxzcqyEAABYDgAAAHN0cnVjdF90b19kaWN0aqyEAAB1an1pAABYHQAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuam9iLnV0aWxzcq2EAACFgXKuhAAAfXKvhAAAYnRysIQAAFU7YXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsubW9kZWxzLm5leG1hcmtfbW9kZWwoWK8KAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIk5leG1hcmsgbW9kZWwuCgpUaGUgbmV4bWFyayBzdWl0ZSBpcyBhIHNlcmllcyBvZiBxdWVyaWVzIChzdHJlYW1pbmcgcGlwZWxpbmVzKSBwZXJmb3JtZWQKb24gYSBzaW11bGF0aW9uIG9mIGF1Y3Rpb24gZXZlbnRzLiBUaGUgbW9kZWwgaW5jbHVkZXMgdGhlIHRocmVlIHJvbGVzIHRoYXQKZ2VuZXJhdGUgZXZlbnRzOgoKICAtIFRoZSBwZXJzb24gd2hvIHN0YXJ0cyBhbmQgYXVjdGlvbiBvciBtYWtlcyBhIGJpZCAoUGVyc29uKS4KICAtIFRoZSBhdWN0aW9uIGl0ZW0gKEF1Y3Rpb24pLgogIC0gVGhlIGJpZCBvbiBhbiBpdGVtIGZvciBhdWN0aW9uIChCaWQpLgoKIiIiCgoKY2xhc3MgUGVyc29uKG9iamVjdCk6CiAgIkF1dGhvciBvZiBhbiBhdWN0aW9uIG9yIGEgYmlkLiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGlkLCBuYW1lLCBlbWFpbCwgY3JlZGl0X2NhcmQsCiAgICAgICAgICAgICAgIGNpdHksIHN0YXRlLCB0aW1lc3RhbXAsIGV4dHJhPU5vbmUpOgogICAgc2VsZi5pZCA9IGlkCiAgICBzZWxmLm5hbWUgPSBuYW1lCiAgICBzZWxmLmVtYWlsID0gZW1haWwgICAgIyBrZXkKICAgIHNlbGYuY3JlZGl0X2NhcmQgPSBjcmVkaXRfY2FyZAogICAgc2VsZi5jaXR5ID0gY2l0eQogICAgc2VsZi5zdGF0ZSA9IHN0YXRlCiAgICBzZWxmLnRpbWVzdGFtcCA9IHRpbWVzdGFtcAogICAgc2VsZi5leHRyYSA9IGV4dHJhCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnUGVyc29uKHtpZH0sIHtlbWFpbH0pJy5mb3JtYXQoKip7J2lkJzogc2VsZi5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VtYWlsJzogc2VsZi5lbWFpbH0pCgoKY2xhc3MgQXVjdGlvbihvYmplY3QpOgogICJJdGVtIGZvciBhdWN0aW9uLiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGlkLCBpdGVtX25hbWUsIGRlc2NyaXB0aW9uLCBpbml0aWFsX2JpZCwgcmVzZXJ2ZV9wcmljZSwKICAgICAgICAgICAgICAgdGltZXN0YW1wLCBleHBpcmVzLCBzZWxsZXIsIGNhdGVnb3J5LCBleHRyYT1Ob25lKToKICAgIHNlbGYuaWQgPSBpZAogICAgc2VsZi5pdGVtX25hbWUgPSBpdGVtX25hbWUgICAgICAjIGtleQogICAgc2VsZi5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uCiAgICBzZWxmLmluaXRpYWxfYmlkID0gaW5pdGlhbF9iaWQKICAgIHNlbGYucmVzZXJ2ZV9wcmljZSA9IHJlc2VydmVfcHJpY2UKICAgIHNlbGYudGltZXN0YW1wID0gdGltZXN0YW1wCiAgICBzZWxmLmV4cGlyZXMgPSBleHBpcmVzCiAgICBzZWxmLnNlbGxlciA9IHNlbGxlcgogICAgc2VsZi5jYXRlZ29yeSA9IGNhdGVnb3J5CiAgICBzZWxmLmV4dHJhID0gZXh0cmEKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICdBdWN0aW9uKHtpZH0sIHtpdGVtX25hbWV9KScuZm9ybWF0KCoqeydpZCc6IHNlbGYuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2l0ZW1fbmFtZSc6IHNlbGYuaXRlbV9uYW1lfSkKCgpjbGFzcyBCaWQob2JqZWN0KToKICAiQSBiaWQgZm9yIGFuIGl0ZW0gZm9yIGF1Y3Rpb24uIgoKICBkZWYgX19pbml0X18oc2VsZiwgYXVjdGlvbiwgYmlkZGVyLCBwcmljZSwgdGltZXN0YW1wLCBleHRyYT1Ob25lKToKICAgIHNlbGYuYXVjdGlvbiA9IGF1Y3Rpb24gICAgIyBrZXkKICAgIHNlbGYuYmlkZGVyID0gYmlkZGVyCiAgICBzZWxmLnByaWNlID0gcHJpY2UKICAgIHNlbGYudGltZXN0YW1wID0gdGltZXN0YW1wCiAgICBzZWxmLmV4dHJhID0gZXh0cmEKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICdCaWQoe2F1Y3Rpb259LCB7YmlkZGVyfSwge3ByaWNlfSknLmZvcm1hdCgKICAgICAgICAqKnsnYXVjdGlvbic6IHNlbGYuYXVjdGlvbiwKICAgICAgICAgICAnYmlkZGVyJzogc2VsZi5iaWRkZXIsCiAgICAgICAgICAgJ3ByaWNlJzogc2VsZi5wcmljZX0pCn1ysYQAAChYDwAAAFBlcnNvbi5fX2luaXRfX1gDAAAAZGVmSyJLLIdYBgAAAFBlcnNvblgFAAAAY2xhc3NLH0swh1gQAAAAQXVjdGlvbi5fX2luaXRfX1gDAAAAZGVmSzVLQYdYEAAAAEF1Y3Rpb24uX19yZXByX19YAwAAAGRlZktCS0WHWAwAAABCaWQuX19yZXByX19YAwAAAGRlZktRS1aHWAwAAABCaWQuX19pbml0X19YAwAAAGRlZktKS1CHWAMAAABCaWRYBQAAAGNsYXNzS0dLVodYBwAAAEF1Y3Rpb25YBQAAAGNsYXNzSzJLRYdYDwAAAFBlcnNvbi5fX3JlcHJfX1gDAAAAZGVmSy1LMId1fXKyhAAAKFgGAAAAUGVyc29uaqthAABYAwAAAEJpZGqrYQAAWAcAAABBdWN0aW9uaqthAAB1an1pAABYOwAAAGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm1vZGVscy5uZXhtYXJrX21vZGVscrOEAACFgXK0hAAAfXK1hAAAYnRVN2FwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLnN0cmVhbWluZ19jcmVhdGUoWDMKAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkNyZWF0ZSB0cmFuc2Zvcm0gZm9yIHN0cmVhbWluZy4iIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0Cgpmcm9tIGJ1aWx0aW5zIGltcG9ydCBtYXAKCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IERvRm4KZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgUGFyRG8KZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgUFRyYW5zZm9ybQpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBXaW5kb3dpbmcKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgcHZhbHVlCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cgaW1wb3J0IEdsb2JhbFdpbmRvd3MKCgpjbGFzcyBTdHJlYW1pbmdDcmVhdGUoUFRyYW5zZm9ybSk6CiAgIiIiQSBzcGVjaWFsaXplZCBpbXBsZW1lbnRhdGlvbiBmb3IgYGBDcmVhdGVgYCB0cmFuc2Zvcm0gaW4gc3RyZWFtaW5nIG1vZGUuCgogIE5vdGU6IFRoZXJlIGlzIG5vIHVuYm91bmRlZCBzb3VyY2UgQVBJIGluIHB5dGhvbiB0byB3cmFwIHRoZSBDcmVhdGUgc291cmNlLAogIHNvIHdlIG1hcCB0aGlzIHRvIGNvbXBvc2l0ZSBvZiBJbXB1bHNlIHByaW1pdGl2ZSBhbmQgYW4gU0RGLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWVzLCBjb2Rlcik6CiAgICBzZWxmLmNvZGVyID0gY29kZXIKICAgIHNlbGYuZW5jb2RlZF92YWx1ZXMgPSBsaXN0KG1hcChjb2Rlci5lbmNvZGUsIHZhbHVlcykpCgogIGNsYXNzIERlY29kZUFuZEVtaXREb0ZuKERvRm4pOgogICAgIiIiQSBEb0ZuIHdoaWNoIHN0b3JlcyBlbmNvZGVkIHZlcnNpb25zIG9mIGVsZW1lbnRzLgoKICAgIEl0IGFsc28gc3RvcmVzIGEgQ29kZXIgdG8gZGVjb2RlIGFuZCBlbWl0IHRob3NlIGVsZW1lbnRzLgogICAgVE9ETzogQkVBTS0yNDIyIC0gTWFrZSB0aGlzIGEgU3BsaXR0YWJsZURvRm4uCiAgICAiIiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgZW5jb2RlZF92YWx1ZXMsIGNvZGVyKToKICAgICAgc2VsZi5lbmNvZGVkX3ZhbHVlcyA9IGVuY29kZWRfdmFsdWVzCiAgICAgIHNlbGYuY29kZXIgPSBjb2RlcgoKICAgIGRlZiBwcm9jZXNzKHNlbGYsIHVudXNlZF9lbGVtZW50KToKICAgICAgZm9yIGVuY29kZWRfdmFsdWUgaW4gc2VsZi5lbmNvZGVkX3ZhbHVlczoKICAgICAgICB5aWVsZCBzZWxmLmNvZGVyLmRlY29kZShlbmNvZGVkX3ZhbHVlKQoKICBjbGFzcyBJbXB1bHNlKFBUcmFuc2Zvcm0pOgogICAgIiIiVGhlIERhdGFmbG93IHNwZWNpZmljIG92ZXJyaWRlIGZvciB0aGUgaW1wdWxzZSBwcmltaXRpdmUuIiIiCgogICAgZGVmIGV4cGFuZChzZWxmLCBwYmVnaW4pOgogICAgICBhc3NlcnQgaXNpbnN0YW5jZShwYmVnaW4sIHB2YWx1ZS5QQmVnaW4pLCAoCiAgICAgICAgICAnSW5wdXQgdG8gSW1wdWxzZSB0cmFuc2Zvcm0gbXVzdCBiZSBhIFBCZWdpbiBidXQgZm91bmQgJXMnICUgcGJlZ2luKQogICAgICByZXR1cm4gcHZhbHVlLlBDb2xsZWN0aW9uKHBiZWdpbi5waXBlbGluZSkKCiAgICBkZWYgZ2V0X3dpbmRvd2luZyhzZWxmLCBpbnB1dHMpOgogICAgICByZXR1cm4gV2luZG93aW5nKEdsb2JhbFdpbmRvd3MoKSkKCiAgICBkZWYgaW5mZXJfb3V0cHV0X3R5cGUoc2VsZiwgdW51c2VkX2lucHV0X3R5cGUpOgogICAgICByZXR1cm4gYnl0ZXMKCiAgZGVmIGV4cGFuZChzZWxmLCBwYmVnaW4pOgogICAgcmV0dXJuIChwYmVnaW4KICAgICAgICAgICAgfCAnSW1wdWxzZScgPj4gc2VsZi5JbXB1bHNlKCkKICAgICAgICAgICAgfCAnRGVjb2RlIFZhbHVlcycgPj4gUGFyRG8oCiAgICAgICAgICAgICAgICBzZWxmLkRlY29kZUFuZEVtaXREb0ZuKHNlbGYuZW5jb2RlZF92YWx1ZXMsIHNlbGYuY29kZXIpKSkKfXK2hAAAKFgpAAAAU3RyZWFtaW5nQ3JlYXRlLkRlY29kZUFuZEVtaXREb0ZuLnByb2Nlc3NYAwAAAGRlZks2SzmHWCoAAABTdHJlYW1pbmdDcmVhdGUuRGVjb2RlQW5kRW1pdERvRm4uX19pbml0X19YAwAAAGRlZksySzWHWCEAAABTdHJlYW1pbmdDcmVhdGUuRGVjb2RlQW5kRW1pdERvRm5YBQAAAGNsYXNzSytLOYdYDwAAAFN0cmVhbWluZ0NyZWF0ZVgFAAAAY2xhc3NLIEtNh1gXAAAAU3RyZWFtaW5nQ3JlYXRlLkltcHVsc2VYBQAAAGNsYXNzSzpLR4dYFgAAAFN0cmVhbWluZ0NyZWF0ZS5leHBhbmRYAwAAAGRlZktIS02HWCkAAABTdHJlYW1pbmdDcmVhdGUuSW1wdWxzZS5pbmZlcl9vdXRwdXRfdHlwZVgDAAAAZGVmS0VLR4dYJQAAAFN0cmVhbWluZ0NyZWF0ZS5JbXB1bHNlLmdldF93aW5kb3dpbmdYAwAAAGRlZktCS0SHWB4AAABTdHJlYW1pbmdDcmVhdGUuSW1wdWxzZS5leHBhbmRYAwAAAGRlZks9S0GHWBgAAABTdHJlYW1pbmdDcmVhdGUuX19pbml0X19YAwAAAGRlZksnSyqHdX1yt4QAAChYKQAAAFN0cmVhbWluZ0NyZWF0ZS5EZWNvZGVBbmRFbWl0RG9Gbi5wcm9jZXNzWDcAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5zdHJlYW1pbmdfY3JlYXRlcriEAABYIQAAAFN0cmVhbWluZ0NyZWF0ZS5EZWNvZGVBbmRFbWl0RG9Gbmq4hAAAWA8AAABTdHJlYW1pbmdDcmVhdGVquIQAAFgXAAAAU3RyZWFtaW5nQ3JlYXRlLkltcHVsc2VquIQAAFgWAAAAU3RyZWFtaW5nQ3JlYXRlLmV4cGFuZGq4hAAAWCkAAABTdHJlYW1pbmdDcmVhdGUuSW1wdWxzZS5pbmZlcl9vdXRwdXRfdHlwZWq4hAAAWCUAAABTdHJlYW1pbmdDcmVhdGUuSW1wdWxzZS5nZXRfd2luZG93aW5nariEAABYHgAAAFN0cmVhbWluZ0NyZWF0ZS5JbXB1bHNlLmV4cGFuZGq4hAAAdWp9aQAAWDcAAABhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5zdHJlYW1pbmdfY3JlYXRlcrmEAACFgXK6hAAAfXK7hAAAYnRyvIQAAFUZYXBhY2hlX2JlYW0uaW8uZ2NwLnB1YnN1YihYuzsAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoiIiJHb29nbGUgQ2xvdWQgUHViU3ViIHNvdXJjZXMgYW5kIHNpbmtzLgoKQ2xvdWQgUHViL1N1YiBzb3VyY2VzIGFuZCBzaW5rcyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZCBvbmx5IGluIHN0cmVhbWluZwpwaXBlbGluZXMsIGR1cmluZyByZW1vdGUgZXhlY3V0aW9uLgoKVGhpcyBBUEkgaXMgY3VycmVudGx5IHVuZGVyIGRldmVsb3BtZW50IGFuZCBpcyBzdWJqZWN0IHRvIGNoYW5nZS4KIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IHJlCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdAoKZnJvbSBwYXN0LmJ1aWx0aW5zIGltcG9ydCB1bmljb2RlCgpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBjb2RlcnMKZnJvbSBhcGFjaGVfYmVhbS5pby5pb2Jhc2UgaW1wb3J0IFJlYWQKZnJvbSBhcGFjaGVfYmVhbS5pby5pb2Jhc2UgaW1wb3J0IFdyaXRlCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8gaW1wb3J0IGlvYmFzZSBhcyBkYXRhZmxvd19pbwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IE1hcApmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IFBUcmFuc2Zvcm0KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXkgaW1wb3J0IERpc3BsYXlEYXRhSXRlbQpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzLmFubm90YXRpb25zIGltcG9ydCBkZXByZWNhdGVkCgp0cnk6CiAgZnJvbSBnb29nbGUuY2xvdWQgaW1wb3J0IHB1YnN1YgpleGNlcHQgSW1wb3J0RXJyb3I6CiAgcHVic3ViID0gTm9uZQoKX19hbGxfXyA9IFsnUHVic3ViTWVzc2FnZScsICdSZWFkRnJvbVB1YlN1YicsICdSZWFkU3RyaW5nc0Zyb21QdWJTdWInLAogICAgICAgICAgICdXcml0ZVN0cmluZ3NUb1B1YlN1YicsICdXcml0ZVRvUHViU3ViJ10KCgpjbGFzcyBQdWJzdWJNZXNzYWdlKG9iamVjdCk6CiAgIiIiUmVwcmVzZW50cyBhIENsb3VkIFB1Yi9TdWIgbWVzc2FnZS4KCiAgTWVzc2FnZSBwYXlsb2FkIGluY2x1ZGVzIHRoZSBkYXRhIGFuZCBhdHRyaWJ1dGVzIGZpZWxkcy4gRm9yIHRoZSBwYXlsb2FkIHRvIGJlCiAgdmFsaWQsIGF0IGxlYXN0IG9uZSBvZiBpdHMgZmllbGRzIG11c3QgYmUgbm9uLWVtcHR5LgoKICBUaGlzIGludGVyZmFjZSBpcyBleHBlcmltZW50YWwuIE5vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIEF0dHJpYnV0ZXM6CiAgICBkYXRhOiAoYnl0ZXMpIE1lc3NhZ2UgZGF0YS4gTWF5IGJlIE5vbmUuCiAgICBhdHRyaWJ1dGVzOiAoZGljdCkgS2V5LXZhbHVlIG1hcCBvZiBzdHIgdG8gc3RyLCBjb250YWluaW5nIGJvdGggdXNlci1kZWZpbmVkCiAgICAgIGFuZCBzZXJ2aWNlIGdlbmVyYXRlZCBhdHRyaWJ1dGVzIChzdWNoIGFzIGlkX2xhYmVsIGFuZAogICAgICB0aW1lc3RhbXBfYXR0cmlidXRlKS4gTWF5IGJlIE5vbmUuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhLCBhdHRyaWJ1dGVzKToKICAgIGlmIGRhdGEgaXMgTm9uZSBhbmQgbm90IGF0dHJpYnV0ZXM6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0VpdGhlciBkYXRhICglcikgb3IgYXR0cmlidXRlcyAoJXIpIG11c3QgYmUgc2V0LicsCiAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwgYXR0cmlidXRlcykKICAgIHNlbGYuZGF0YSA9IGRhdGEKICAgIHNlbGYuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMKCiAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgcmV0dXJuIGhhc2goKHNlbGYuZGF0YSwgZnJvemVuc2V0KHNlbGYuYXR0cmlidXRlcy5pdGVtcygpKSkpCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuIGlzaW5zdGFuY2Uob3RoZXIsIFB1YnN1Yk1lc3NhZ2UpIGFuZCAoCiAgICAgICAgc2VsZi5kYXRhID09IG90aGVyLmRhdGEgYW5kCiAgICAgICAgc2VsZi5hdHRyaWJ1dGVzID09IG90aGVyLmF0dHJpYnV0ZXMpCgogIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgogICAgIyBUT0RPKEJFQU0tNTk0OSk6IE5lZWRlZCBmb3IgUHl0aG9uIDIgY29tcGF0aWJpbGl0eS4KICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJ1B1YnN1Yk1lc3NhZ2UoJXMsICVzKScgJSAoc2VsZi5kYXRhLCBzZWxmLmF0dHJpYnV0ZXMpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgX2Zyb21fcHJvdG9fc3RyKHByb3RvX21zZyk6CiAgICAiIiJDb25zdHJ1Y3QgZnJvbSBzZXJpYWxpemVkIGZvcm0gb2YgYGBQdWJzdWJNZXNzYWdlYGAuCgogICAgQXJnczoKICAgICAgcHJvdG9fbXNnOiBTdHJpbmcgY29udGFpbmluZyBhIHNlcmlhbGl6ZWQgcHJvdG9idWYgb2YgdHlwZQogICAgICBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vcHVic3ViL2RvY3MvcmVmZXJlbmNlL3JwYy9nb29nbGUucHVic3ViLnYxI2dvb2dsZS5wdWJzdWIudjEuUHVic3ViTWVzc2FnZQoKICAgIFJldHVybnM6CiAgICAgIEEgbmV3IFB1YnN1Yk1lc3NhZ2Ugb2JqZWN0LgogICAgIiIiCiAgICBtc2cgPSBwdWJzdWIudHlwZXMucHVic3ViX3BiMi5QdWJzdWJNZXNzYWdlKCkKICAgIG1zZy5QYXJzZUZyb21TdHJpbmcocHJvdG9fbXNnKQogICAgIyBDb252ZXJ0IFNjYWxhck1hcENvbnRhaW5lciB0byBkaWN0LgogICAgYXR0cmlidXRlcyA9IGRpY3QoKGtleSwgbXNnLmF0dHJpYnV0ZXNba2V5XSkgZm9yIGtleSBpbiBtc2cuYXR0cmlidXRlcykKICAgIHJldHVybiBQdWJzdWJNZXNzYWdlKG1zZy5kYXRhLCBhdHRyaWJ1dGVzKQoKICBkZWYgX3RvX3Byb3RvX3N0cihzZWxmKToKICAgICIiIkdldCBzZXJpYWxpemVkIGZvcm0gb2YgYGBQdWJzdWJNZXNzYWdlYGAuCgogICAgQXJnczoKICAgICAgcHJvdG9fbXNnOiBzdHIgY29udGFpbmluZyBhIHNlcmlhbGl6ZWQgcHJvdG9idWYuCgogICAgUmV0dXJuczoKICAgICAgQSBzdHIgY29udGFpbmluZyBhIHNlcmlhbGl6ZWQgcHJvdG9idWYgb2YgdHlwZQogICAgICBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vcHVic3ViL2RvY3MvcmVmZXJlbmNlL3JwYy9nb29nbGUucHVic3ViLnYxI2dvb2dsZS5wdWJzdWIudjEuUHVic3ViTWVzc2FnZQogICAgICBjb250YWluaW5nIHRoZSBwYXlsb2FkIG9mIHRoaXMgb2JqZWN0LgogICAgIiIiCiAgICBtc2cgPSBwdWJzdWIudHlwZXMucHVic3ViX3BiMi5QdWJzdWJNZXNzYWdlKCkKICAgIG1zZy5kYXRhID0gc2VsZi5kYXRhCiAgICBmb3Iga2V5LCB2YWx1ZSBpbiBzZWxmLmF0dHJpYnV0ZXMuaXRlcml0ZW1zKCk6CiAgICAgIG1zZy5hdHRyaWJ1dGVzW2tleV0gPSB2YWx1ZQogICAgcmV0dXJuIG1zZy5TZXJpYWxpemVUb1N0cmluZygpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgX2Zyb21fbWVzc2FnZShtc2cpOgogICAgIiIiQ29uc3RydWN0IGZyb20gYGBnb29nbGUuY2xvdWQucHVic3ViX3YxLnN1YnNjcmliZXIubWVzc2FnZS5NZXNzYWdlYGAuCgogICAgaHR0cHM6Ly9nb29nbGVhcGlzLmdpdGh1Yi5pby9nb29nbGUtY2xvdWQtcHl0aG9uL2xhdGVzdC9wdWJzdWIvc3Vic2NyaWJlci9hcGkvbWVzc2FnZS5odG1sCiAgICAiIiIKICAgICMgQ29udmVydCBTY2FsYXJNYXBDb250YWluZXIgdG8gZGljdC4KICAgIGF0dHJpYnV0ZXMgPSBkaWN0KChrZXksIG1zZy5hdHRyaWJ1dGVzW2tleV0pIGZvciBrZXkgaW4gbXNnLmF0dHJpYnV0ZXMpCiAgICByZXR1cm4gUHVic3ViTWVzc2FnZShtc2cuZGF0YSwgYXR0cmlidXRlcykKCgpjbGFzcyBSZWFkRnJvbVB1YlN1YihQVHJhbnNmb3JtKToKICAiIiJBIGBgUFRyYW5zZm9ybWBgIGZvciByZWFkaW5nIGZyb20gQ2xvdWQgUHViL1N1Yi4iIiIKICAjIEltcGxlbWVudGF0aW9uIG5vdGU6IFRoaXMgYGBQVHJhbnNmb3JtYGAgaXMgb3ZlcnJpZGRlbiBieSBEaXJlY3RydW5uZXIuCgogIGRlZiBfX2luaXRfXyhzZWxmLCB0b3BpYz1Ob25lLCBzdWJzY3JpcHRpb249Tm9uZSwgaWRfbGFiZWw9Tm9uZSwKICAgICAgICAgICAgICAgd2l0aF9hdHRyaWJ1dGVzPUZhbHNlLCB0aW1lc3RhbXBfYXR0cmlidXRlPU5vbmUpOgogICAgIiIiSW5pdGlhbGl6ZXMgYGBSZWFkRnJvbVB1YlN1YmBgLgoKICAgIEFyZ3M6CiAgICAgIHRvcGljOiBDbG91ZCBQdWIvU3ViIHRvcGljIGluIHRoZSBmb3JtCiAgICAgICAgInByb2plY3RzLzxwcm9qZWN0Pi90b3BpY3MvPHRvcGljPiIuIElmIHByb3ZpZGVkLCBzdWJzY3JpcHRpb24gbXVzdCBiZQogICAgICAgIE5vbmUuCiAgICAgIHN1YnNjcmlwdGlvbjogRXhpc3RpbmcgQ2xvdWQgUHViL1N1YiBzdWJzY3JpcHRpb24gdG8gdXNlIGluIHRoZQogICAgICAgIGZvcm0gInByb2plY3RzLzxwcm9qZWN0Pi9zdWJzY3JpcHRpb25zLzxzdWJzY3JpcHRpb24+Ii4gSWYgbm90CiAgICAgICAgc3BlY2lmaWVkLCBhIHRlbXBvcmFyeSBzdWJzY3JpcHRpb24gd2lsbCBiZSBjcmVhdGVkIGZyb20gdGhlIHNwZWNpZmllZAogICAgICAgIHRvcGljLiBJZiBwcm92aWRlZCwgdG9waWMgbXVzdCBiZSBOb25lLgogICAgICBpZF9sYWJlbDogVGhlIGF0dHJpYnV0ZSBvbiBpbmNvbWluZyBQdWIvU3ViIG1lc3NhZ2VzIHRvIHVzZSBhcyBhIHVuaXF1ZQogICAgICAgIHJlY29yZCBpZGVudGlmaWVyLiBXaGVuIHNwZWNpZmllZCwgdGhlIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlICh3aGljaAogICAgICAgIGNhbiBiZSBhbnkgc3RyaW5nIHRoYXQgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgcmVjb3JkKSB3aWxsIGJlIHVzZWQgZm9yCiAgICAgICAgZGVkdXBsaWNhdGlvbiBvZiBtZXNzYWdlcy4gSWYgbm90IHByb3ZpZGVkLCB3ZSBjYW5ub3QgZ3VhcmFudGVlCiAgICAgICAgdGhhdCBubyBkdXBsaWNhdGUgZGF0YSB3aWxsIGJlIGRlbGl2ZXJlZCBvbiB0aGUgUHViL1N1YiBzdHJlYW0uIEluIHRoaXMKICAgICAgICBjYXNlLCBkZWR1cGxpY2F0aW9uIG9mIHRoZSBzdHJlYW0gd2lsbCBiZSBzdHJpY3RseSBiZXN0IGVmZm9ydC4KICAgICAgd2l0aF9hdHRyaWJ1dGVzOgogICAgICAgIFRydWUgLSBvdXRwdXQgZWxlbWVudHMgd2lsbCBiZSA6Y2xhc3M6YH5QdWJzdWJNZXNzYWdlYCBvYmplY3RzLgogICAgICAgIEZhbHNlIC0gb3V0cHV0IGVsZW1lbnRzIHdpbGwgYmUgb2YgdHlwZSBgYGJ5dGVzYGAgKG1lc3NhZ2UKICAgICAgICBkYXRhIG9ubHkpLgogICAgICB0aW1lc3RhbXBfYXR0cmlidXRlOiBNZXNzYWdlIHZhbHVlIHRvIHVzZSBhcyBlbGVtZW50IHRpbWVzdGFtcC4gSWYgTm9uZSwKICAgICAgICB1c2VzIG1lc3NhZ2UgcHVibGlzaGluZyB0aW1lIGFzIHRoZSB0aW1lc3RhbXAuCgogICAgICAgIFRpbWVzdGFtcCB2YWx1ZXMgc2hvdWxkIGJlIGluIG9uZSBvZiB0d28gZm9ybWF0czoKCiAgICAgICAgLSBBIG51bWVyaWNhbCB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2UgdGhlCiAgICAgICAgICBVbml4IGVwb2NoLgogICAgICAgIC0gQSBzdHJpbmcgaW4gUkZDIDMzMzkgZm9ybWF0LCBVVEMgdGltZXpvbmUuIEV4YW1wbGU6CiAgICAgICAgICBgYDIwMTUtMTAtMjlUMjM6NDE6NDEuMTIzWmBgLiBUaGUgc3ViLXNlY29uZCBjb21wb25lbnQgb2YgdGhlCiAgICAgICAgICB0aW1lc3RhbXAgaXMgb3B0aW9uYWwsIGFuZCBkaWdpdHMgYmV5b25kIHRoZSBmaXJzdCB0aHJlZSAoaS5lLiwgdGltZQogICAgICAgICAgdW5pdHMgc21hbGxlciB0aGFuIG1pbGxpc2Vjb25kcykgbWF5IGJlIGlnbm9yZWQuCiAgICAiIiIKICAgIHN1cGVyKFJlYWRGcm9tUHViU3ViLCBzZWxmKS5fX2luaXRfXygpCiAgICBzZWxmLndpdGhfYXR0cmlidXRlcyA9IHdpdGhfYXR0cmlidXRlcwogICAgc2VsZi5fc291cmNlID0gX1B1YlN1YlNvdXJjZSgKICAgICAgICB0b3BpYz10b3BpYywKICAgICAgICBzdWJzY3JpcHRpb249c3Vic2NyaXB0aW9uLAogICAgICAgIGlkX2xhYmVsPWlkX2xhYmVsLAogICAgICAgIHdpdGhfYXR0cmlidXRlcz1zZWxmLndpdGhfYXR0cmlidXRlcywKICAgICAgICB0aW1lc3RhbXBfYXR0cmlidXRlPXRpbWVzdGFtcF9hdHRyaWJ1dGUpCgogIGRlZiBleHBhbmQoc2VsZiwgcHZhbHVlKToKICAgIHBjb2xsID0gcHZhbHVlLnBpcGVsaW5lIHwgUmVhZChzZWxmLl9zb3VyY2UpCiAgICBwY29sbC5lbGVtZW50X3R5cGUgPSBieXRlcwogICAgaWYgc2VsZi53aXRoX2F0dHJpYnV0ZXM6CiAgICAgIHBjb2xsID0gcGNvbGwgfCBNYXAoUHVic3ViTWVzc2FnZS5fZnJvbV9wcm90b19zdHIpCiAgICAgIHBjb2xsLmVsZW1lbnRfdHlwZSA9IFB1YnN1Yk1lc3NhZ2UKICAgIHJldHVybiBwY29sbAoKICBkZWYgdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoc2VsZiwgY29udGV4dCk6CiAgICAjIFJlcXVpcmVkIGFzIHRoaXMgaXMgaWRlbnRpZmllZCBieSB0eXBlIGluIFBUcmFuc2Zvcm1PdmVycmlkZXMuCiAgICAjIFRPRE8oQkVBTS0zODEyKTogVXNlIGFuIGFjdHVhbCBVUk4gaGVyZS4KICAgIHJldHVybiBzZWxmLnRvX3J1bm5lcl9hcGlfcGlja2xlZChjb250ZXh0KQoKCkBkZXByZWNhdGVkKHNpbmNlPScyLjcuMCcsIGV4dHJhX21lc3NhZ2U9J1VzZSBSZWFkRnJvbVB1YlN1YiBpbnN0ZWFkLicpCmRlZiBSZWFkU3RyaW5nc0Zyb21QdWJTdWIodG9waWM9Tm9uZSwgc3Vic2NyaXB0aW9uPU5vbmUsIGlkX2xhYmVsPU5vbmUpOgogIHJldHVybiBfUmVhZFN0cmluZ3NGcm9tUHViU3ViKHRvcGljLCBzdWJzY3JpcHRpb24sIGlkX2xhYmVsKQoKCmNsYXNzIF9SZWFkU3RyaW5nc0Zyb21QdWJTdWIoUFRyYW5zZm9ybSk6CiAgIiIiVGhpcyBjbGFzcyBpcyBkZXByZWNhdGVkLiBVc2UgYGBSZWFkRnJvbVB1YlN1YmBgIGluc3RlYWQuIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCB0b3BpYz1Ob25lLCBzdWJzY3JpcHRpb249Tm9uZSwgaWRfbGFiZWw9Tm9uZSk6CiAgICBzdXBlcihfUmVhZFN0cmluZ3NGcm9tUHViU3ViLCBzZWxmKS5fX2luaXRfXygpCiAgICBzZWxmLnRvcGljID0gdG9waWMKICAgIHNlbGYuc3Vic2NyaXB0aW9uID0gc3Vic2NyaXB0aW9uCiAgICBzZWxmLmlkX2xhYmVsID0gaWRfbGFiZWwKCiAgZGVmIGV4cGFuZChzZWxmLCBwdmFsdWUpOgogICAgcCA9IChwdmFsdWUucGlwZWxpbmUKICAgICAgICAgfCBSZWFkRnJvbVB1YlN1YihzZWxmLnRvcGljLCBzZWxmLnN1YnNjcmlwdGlvbiwgc2VsZi5pZF9sYWJlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoX2F0dHJpYnV0ZXM9RmFsc2UpCiAgICAgICAgIHwgJ0RlY29kZVN0cmluZycgPj4gTWFwKGxhbWJkYSBiOiBiLmRlY29kZSgndXRmLTgnKSkpCiAgICBwLmVsZW1lbnRfdHlwZSA9IHVuaWNvZGUKICAgIHJldHVybiBwCgoKQGRlcHJlY2F0ZWQoc2luY2U9JzIuNy4wJywgZXh0cmFfbWVzc2FnZT0nVXNlIFdyaXRlVG9QdWJTdWIgaW5zdGVhZC4nKQpkZWYgV3JpdGVTdHJpbmdzVG9QdWJTdWIodG9waWMpOgogIHJldHVybiBfV3JpdGVTdHJpbmdzVG9QdWJTdWIodG9waWMpCgoKY2xhc3MgX1dyaXRlU3RyaW5nc1RvUHViU3ViKFBUcmFuc2Zvcm0pOgogICIiIlRoaXMgY2xhc3MgaXMgZGVwcmVjYXRlZC4gVXNlIGBgV3JpdGVUb1B1YlN1YmBgIGluc3RlYWQuIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCB0b3BpYyk6CiAgICAiIiJJbml0aWFsaXplcyBgYF9Xcml0ZVN0cmluZ3NUb1B1YlN1YmBgLgoKICAgIEF0dHJpYnV0ZXM6CiAgICAgIHRvcGljOiBDbG91ZCBQdWIvU3ViIHRvcGljIGluIHRoZSBmb3JtICIvdG9waWNzLzxwcm9qZWN0Pi88dG9waWM+Ii4KICAgICIiIgogICAgc3VwZXIoX1dyaXRlU3RyaW5nc1RvUHViU3ViLCBzZWxmKS5fX2luaXRfXygpCiAgICBzZWxmLl9zaW5rID0gX1B1YlN1YlNpbmsodG9waWMsIGlkX2xhYmVsPU5vbmUsIHdpdGhfYXR0cmlidXRlcz1GYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXBfYXR0cmlidXRlPU5vbmUpCgogIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgcGNvbGwgPSBwY29sbCB8ICdFbmNvZGVTdHJpbmcnID4+IE1hcChsYW1iZGEgczogcy5lbmNvZGUoJ3V0Zi04JykpCiAgICBwY29sbC5lbGVtZW50X3R5cGUgPSBieXRlcwogICAgcmV0dXJuIHBjb2xsIHwgV3JpdGUoc2VsZi5fc2luaykKCgpjbGFzcyBXcml0ZVRvUHViU3ViKFBUcmFuc2Zvcm0pOgogICIiIkEgYGBQVHJhbnNmb3JtYGAgZm9yIHdyaXRpbmcgbWVzc2FnZXMgdG8gQ2xvdWQgUHViL1N1Yi4iIiIKICAjIEltcGxlbWVudGF0aW9uIG5vdGU6IFRoaXMgYGBQVHJhbnNmb3JtYGAgaXMgb3ZlcnJpZGRlbiBieSBEaXJlY3RydW5uZXIuCgogIGRlZiBfX2luaXRfXyhzZWxmLCB0b3BpYywgd2l0aF9hdHRyaWJ1dGVzPUZhbHNlLCBpZF9sYWJlbD1Ob25lLAogICAgICAgICAgICAgICB0aW1lc3RhbXBfYXR0cmlidXRlPU5vbmUpOgogICAgIiIiSW5pdGlhbGl6ZXMgYGBXcml0ZVRvUHViU3ViYGAuCgogICAgQXJnczoKICAgICAgdG9waWM6IENsb3VkIFB1Yi9TdWIgdG9waWMgaW4gdGhlIGZvcm0gIi90b3BpY3MvPHByb2plY3Q+Lzx0b3BpYz4iLgogICAgICB3aXRoX2F0dHJpYnV0ZXM6CiAgICAgICAgVHJ1ZSAtIGlucHV0IGVsZW1lbnRzIHdpbGwgYmUgOmNsYXNzOmB+UHVic3ViTWVzc2FnZWAgb2JqZWN0cy4KICAgICAgICBGYWxzZSAtIGlucHV0IGVsZW1lbnRzIHdpbGwgYmUgb2YgdHlwZSBgYGJ5dGVzYGAgKG1lc3NhZ2UKICAgICAgICBkYXRhIG9ubHkpLgogICAgICBpZF9sYWJlbDogSWYgc2V0LCB3aWxsIHNldCBhbiBhdHRyaWJ1dGUgZm9yIGVhY2ggQ2xvdWQgUHViL1N1YiBtZXNzYWdlCiAgICAgICAgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBhbmQgYSB1bmlxdWUgdmFsdWUuIFRoaXMgYXR0cmlidXRlIGNhbiB0aGVuIGJlIHVzZWQKICAgICAgICBpbiBhIFJlYWRGcm9tUHViU3ViIFBUcmFuc2Zvcm0gdG8gZGVkdXBsaWNhdGUgbWVzc2FnZXMuCiAgICAgIHRpbWVzdGFtcF9hdHRyaWJ1dGU6IElmIHNldCwgd2lsbCBzZXQgYW4gYXR0cmlidXRlIGZvciBlYWNoIENsb3VkIFB1Yi9TdWIKICAgICAgICBtZXNzYWdlIHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIHRoZSBtZXNzYWdlJ3MgcHVibGlzaCB0aW1lIGFzIHRoZSB2YWx1ZS4KICAgICIiIgogICAgc3VwZXIoV3JpdGVUb1B1YlN1Yiwgc2VsZikuX19pbml0X18oKQogICAgc2VsZi53aXRoX2F0dHJpYnV0ZXMgPSB3aXRoX2F0dHJpYnV0ZXMKICAgIHNlbGYuaWRfbGFiZWwgPSBpZF9sYWJlbAogICAgc2VsZi50aW1lc3RhbXBfYXR0cmlidXRlID0gdGltZXN0YW1wX2F0dHJpYnV0ZQogICAgc2VsZi5fc2luayA9IF9QdWJTdWJTaW5rKHRvcGljLCBpZF9sYWJlbCwgd2l0aF9hdHRyaWJ1dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcF9hdHRyaWJ1dGUpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgdG9fcHJvdG9fc3RyKGVsZW1lbnQpOgogICAgaWYgbm90IGlzaW5zdGFuY2UoZWxlbWVudCwgUHVic3ViTWVzc2FnZSk6CiAgICAgIHJhaXNlIFR5cGVFcnJvcignVW5leHBlY3RlZCBlbGVtZW50LiBUeXBlOiAlcyAoZXhwZWN0ZWQ6IFB1YnN1Yk1lc3NhZ2UpLCAnCiAgICAgICAgICAgICAgICAgICAgICAndmFsdWU6ICVyJyAlICh0eXBlKGVsZW1lbnQpLCBlbGVtZW50KSkKICAgIHJldHVybiBlbGVtZW50Ll90b19wcm90b19zdHIoKQoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgIGlmIHNlbGYud2l0aF9hdHRyaWJ1dGVzOgogICAgICBwY29sbCA9IHBjb2xsIHwgJ1RvUHJvdG9idWYnID4+IE1hcChzZWxmLnRvX3Byb3RvX3N0cikKCiAgICAjIFdpdGhvdXQgYXR0cmlidXRlcywgbWVzc2FnZSBkYXRhIGlzIHdyaXR0ZW4gYXMtaXMuIFdpdGggYXR0cmlidXRlcywKICAgICMgbWVzc2FnZSBkYXRhICsgYXR0cmlidXRlcyBhcmUgcGFzc2VkIGFzIGEgc2VyaWFsaXplZCBwcm90b2J1ZiBzdHJpbmcgKHNlZQogICAgIyBgYFB1YnN1Yk1lc3NhZ2UuX3RvX3Byb3RvX3N0cmBgIGZvciBleGFjdCBwcm90b2J1ZiBtZXNzYWdlIHR5cGUpLgogICAgcGNvbGwuZWxlbWVudF90eXBlID0gYnl0ZXMKICAgIHJldHVybiBwY29sbCB8IFdyaXRlKHNlbGYuX3NpbmspCgogIGRlZiB0b19ydW5uZXJfYXBpX3BhcmFtZXRlcihzZWxmLCBjb250ZXh0KToKICAgICMgUmVxdWlyZWQgYXMgdGhpcyBpcyBpZGVudGlmaWVkIGJ5IHR5cGUgaW4gUFRyYW5zZm9ybU92ZXJyaWRlcy4KICAgICMgVE9ETyhCRUFNLTM4MTIpOiBVc2UgYW4gYWN0dWFsIFVSTiBoZXJlLgogICAgcmV0dXJuIHNlbGYudG9fcnVubmVyX2FwaV9waWNrbGVkKGNvbnRleHQpCgoKUFJPSkVDVF9JRF9SRUdFWFAgPSAnW2Etel1bLWEtejAtOTouXXs0LDYxfVthLXowLTldJwpTVUJTQ1JJUFRJT05fUkVHRVhQID0gJ3Byb2plY3RzLyhbXi9dKykvc3Vic2NyaXB0aW9ucy8oLispJwpUT1BJQ19SRUdFWFAgPSAncHJvamVjdHMvKFteL10rKS90b3BpY3MvKC4rKScKCgpkZWYgcGFyc2VfdG9waWMoZnVsbF90b3BpYyk6CiAgbWF0Y2ggPSByZS5tYXRjaChUT1BJQ19SRUdFWFAsIGZ1bGxfdG9waWMpCiAgaWYgbm90IG1hdGNoOgogICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAnUHViU3ViIHRvcGljIG11c3QgYmUgaW4gdGhlIGZvcm0gInByb2plY3RzLzxwcm9qZWN0Pi90b3BpY3MnCiAgICAgICAgJy88dG9waWM+IiAoZ290ICVyKS4nICUgZnVsbF90b3BpYykKICBwcm9qZWN0LCB0b3BpY19uYW1lID0gbWF0Y2guZ3JvdXAoMSksIG1hdGNoLmdyb3VwKDIpCiAgaWYgbm90IHJlLm1hdGNoKFBST0pFQ1RfSURfUkVHRVhQLCBwcm9qZWN0KToKICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgUHViU3ViIHByb2plY3QgbmFtZTogJXIuJyAlIHByb2plY3QpCiAgcmV0dXJuIHByb2plY3QsIHRvcGljX25hbWUKCgpkZWYgcGFyc2Vfc3Vic2NyaXB0aW9uKGZ1bGxfc3Vic2NyaXB0aW9uKToKICBtYXRjaCA9IHJlLm1hdGNoKFNVQlNDUklQVElPTl9SRUdFWFAsIGZ1bGxfc3Vic2NyaXB0aW9uKQogIGlmIG5vdCBtYXRjaDoKICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgJ1B1YlN1YiBzdWJzY3JpcHRpb24gbXVzdCBiZSBpbiB0aGUgZm9ybSAicHJvamVjdHMvPHByb2plY3Q+JwogICAgICAgICcvc3Vic2NyaXB0aW9ucy88c3Vic2NyaXB0aW9uPiIgKGdvdCAlcikuJyAlIGZ1bGxfc3Vic2NyaXB0aW9uKQogIHByb2plY3QsIHN1YnNjcmlwdGlvbl9uYW1lID0gbWF0Y2guZ3JvdXAoMSksIG1hdGNoLmdyb3VwKDIpCiAgaWYgbm90IHJlLm1hdGNoKFBST0pFQ1RfSURfUkVHRVhQLCBwcm9qZWN0KToKICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgUHViU3ViIHByb2plY3QgbmFtZTogJXIuJyAlIHByb2plY3QpCiAgcmV0dXJuIHByb2plY3QsIHN1YnNjcmlwdGlvbl9uYW1lCgoKY2xhc3MgX1B1YlN1YlNvdXJjZShkYXRhZmxvd19pby5OYXRpdmVTb3VyY2UpOgogICIiIlNvdXJjZSBmb3IgYSBDbG91ZCBQdWIvU3ViIHRvcGljIG9yIHN1YnNjcmlwdGlvbi4KCiAgVGhpcyBgYE5hdGl2ZVNvdXJjZWBgIGlzIG92ZXJyaWRkZW4gYnkgYSBuYXRpdmUgUHVic3ViIGltcGxlbWVudGF0aW9uLgoKICBBdHRyaWJ1dGVzOgogICAgd2l0aF9hdHRyaWJ1dGVzOiBJZiBGYWxzZSwgd2lsbCBmZXRjaCBqdXN0IG1lc3NhZ2UgZGF0YS4gT3RoZXJ3aXNlLAogICAgICBmZXRjaGVzIGBgUHVic3ViTWVzc2FnZWBgIHByb3RvYnVmcy4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHRvcGljPU5vbmUsIHN1YnNjcmlwdGlvbj1Ob25lLCBpZF9sYWJlbD1Ob25lLAogICAgICAgICAgICAgICB3aXRoX2F0dHJpYnV0ZXM9RmFsc2UsIHRpbWVzdGFtcF9hdHRyaWJ1dGU9Tm9uZSk6CiAgICBzZWxmLmNvZGVyID0gY29kZXJzLkJ5dGVzQ29kZXIoKQogICAgc2VsZi5mdWxsX3RvcGljID0gdG9waWMKICAgIHNlbGYuZnVsbF9zdWJzY3JpcHRpb24gPSBzdWJzY3JpcHRpb24KICAgIHNlbGYudG9waWNfbmFtZSA9IE5vbmUKICAgIHNlbGYuc3Vic2NyaXB0aW9uX25hbWUgPSBOb25lCiAgICBzZWxmLmlkX2xhYmVsID0gaWRfbGFiZWwKICAgIHNlbGYud2l0aF9hdHRyaWJ1dGVzID0gd2l0aF9hdHRyaWJ1dGVzCiAgICBzZWxmLnRpbWVzdGFtcF9hdHRyaWJ1dGUgPSB0aW1lc3RhbXBfYXR0cmlidXRlCgogICAgIyBQZXJmb3JtIHNvbWUgdmFsaWRhdGlvbiBvbiB0aGUgdG9waWMgYW5kIHN1YnNjcmlwdGlvbi4KICAgIGlmIG5vdCAodG9waWMgb3Igc3Vic2NyaXB0aW9uKToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignRWl0aGVyIGEgdG9waWMgb3Igc3Vic2NyaXB0aW9uIG11c3QgYmUgcHJvdmlkZWQuJykKICAgIGlmIHRvcGljIGFuZCBzdWJzY3JpcHRpb246CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ09ubHkgb25lIG9mIHRvcGljIG9yIHN1YnNjcmlwdGlvbiBzaG91bGQgYmUgcHJvdmlkZWQuJykKCiAgICBpZiB0b3BpYzoKICAgICAgc2VsZi5wcm9qZWN0LCBzZWxmLnRvcGljX25hbWUgPSBwYXJzZV90b3BpYyh0b3BpYykKICAgIGlmIHN1YnNjcmlwdGlvbjoKICAgICAgc2VsZi5wcm9qZWN0LCBzZWxmLnN1YnNjcmlwdGlvbl9uYW1lID0gcGFyc2Vfc3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbikKCiAgQHByb3BlcnR5CiAgZGVmIGZvcm1hdChzZWxmKToKICAgICIiIlNvdXJjZSBmb3JtYXQgbmFtZSByZXF1aXJlZCBmb3IgcmVtb3RlIGV4ZWN1dGlvbi4iIiIKICAgIHJldHVybiAncHVic3ViJwoKICBkZWYgZGlzcGxheV9kYXRhKHNlbGYpOgogICAgcmV0dXJuIHsnaWRfbGFiZWwnOgogICAgICAgICAgICBEaXNwbGF5RGF0YUl0ZW0oc2VsZi5pZF9sYWJlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPSdJRCBMYWJlbCBBdHRyaWJ1dGUnKS5kcm9wX2lmX25vbmUoKSwKICAgICAgICAgICAgJ3RvcGljJzoKICAgICAgICAgICAgRGlzcGxheURhdGFJdGVtKHNlbGYuZnVsbF90b3BpYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPSdQdWJzdWIgVG9waWMnKS5kcm9wX2lmX25vbmUoKSwKICAgICAgICAgICAgJ3N1YnNjcmlwdGlvbic6CiAgICAgICAgICAgIERpc3BsYXlEYXRhSXRlbShzZWxmLmZ1bGxfc3Vic2NyaXB0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9J1B1YnN1YiBTdWJzY3JpcHRpb24nKS5kcm9wX2lmX25vbmUoKSwKICAgICAgICAgICAgJ3dpdGhfYXR0cmlidXRlcyc6CiAgICAgICAgICAgIERpc3BsYXlEYXRhSXRlbShzZWxmLndpdGhfYXR0cmlidXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPSdXaXRoIEF0dHJpYnV0ZXMnKS5kcm9wX2lmX25vbmUoKSwKICAgICAgICAgICAgJ3RpbWVzdGFtcF9hdHRyaWJ1dGUnOgogICAgICAgICAgICBEaXNwbGF5RGF0YUl0ZW0oc2VsZi50aW1lc3RhbXBfYXR0cmlidXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9J1RpbWVzdGFtcCBBdHRyaWJ1dGUnKS5kcm9wX2lmX25vbmUoKSwKICAgICAgICAgICB9CgogIGRlZiByZWFkZXIoc2VsZik6CiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiBpc19ib3VuZGVkKHNlbGYpOgogICAgcmV0dXJuIEZhbHNlCgoKY2xhc3MgX1B1YlN1YlNpbmsoZGF0YWZsb3dfaW8uTmF0aXZlU2luayk6CiAgIiIiU2luayBmb3IgYSBDbG91ZCBQdWIvU3ViIHRvcGljLgoKICBUaGlzIGBgTmF0aXZlU291cmNlYGAgaXMgb3ZlcnJpZGRlbiBieSBhIG5hdGl2ZSBQdWJzdWIgaW1wbGVtZW50YXRpb24uCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCB0b3BpYywgaWRfbGFiZWwsIHdpdGhfYXR0cmlidXRlcywgdGltZXN0YW1wX2F0dHJpYnV0ZSk6CiAgICBzZWxmLmNvZGVyID0gY29kZXJzLkJ5dGVzQ29kZXIoKQogICAgc2VsZi5mdWxsX3RvcGljID0gdG9waWMKICAgIHNlbGYuaWRfbGFiZWwgPSBpZF9sYWJlbAogICAgc2VsZi53aXRoX2F0dHJpYnV0ZXMgPSB3aXRoX2F0dHJpYnV0ZXMKICAgIHNlbGYudGltZXN0YW1wX2F0dHJpYnV0ZSA9IHRpbWVzdGFtcF9hdHRyaWJ1dGUKCiAgICBzZWxmLnByb2plY3QsIHNlbGYudG9waWNfbmFtZSA9IHBhcnNlX3RvcGljKHRvcGljKQoKICBAcHJvcGVydHkKICBkZWYgZm9ybWF0KHNlbGYpOgogICAgIiIiU2luayBmb3JtYXQgbmFtZSByZXF1aXJlZCBmb3IgcmVtb3RlIGV4ZWN1dGlvbi4iIiIKICAgIHJldHVybiAncHVic3ViJwoKICBkZWYgZGlzcGxheV9kYXRhKHNlbGYpOgogICAgcmV0dXJuIHsKICAgICAgICAndG9waWMnOiBEaXNwbGF5RGF0YUl0ZW0oc2VsZi5mdWxsX3RvcGljLCBsYWJlbD0nUHVic3ViIFRvcGljJyksCiAgICAgICAgJ2lkX2xhYmVsJzogRGlzcGxheURhdGFJdGVtKHNlbGYuaWRfbGFiZWwsIGxhYmVsPSdJRCBMYWJlbCBBdHRyaWJ1dGUnKSwKICAgICAgICAnd2l0aF9hdHRyaWJ1dGVzJzogRGlzcGxheURhdGFJdGVtKAogICAgICAgICAgICBzZWxmLndpdGhfYXR0cmlidXRlcywgbGFiZWw9J1dpdGggQXR0cmlidXRlcycpLmRyb3BfaWZfbm9uZSgpLAogICAgICAgICd0aW1lc3RhbXBfYXR0cmlidXRlJzogRGlzcGxheURhdGFJdGVtKAogICAgICAgICAgICBzZWxmLnRpbWVzdGFtcF9hdHRyaWJ1dGUsIGxhYmVsPSdUaW1lc3RhbXAgQXR0cmlidXRlJyksCiAgICB9CgogIGRlZiB3cml0ZXIoc2VsZik6CiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCn1yvYQAAChYGgAAAF9QdWJTdWJTb3VyY2UuZGlzcGxheV9kYXRhWAMAAABkZWZNZAFNdQGHWBQAAABXcml0ZVRvUHViU3ViLmV4cGFuZFgDAAAAZGVmTRIBTRsBh1gUAAAAX1B1YlN1YlNpbmsuX19pbml0X19YAwAAAGRlZk2DAU2LAYdYGAAAAF9QdWJTdWJTaW5rLmRpc3BsYXlfZGF0YVgDAAAAZGVmTZEBTZoBh1gUAAAAUHVic3ViTWVzc2FnZS5fX25lX19YAwAAAGRlZktQS1OHWBUAAABSZWFkU3RyaW5nc0Zyb21QdWJTdWJYAwAAAGRlZkvBS8SHWBYAAABQdWJzdWJNZXNzYWdlLl9faGFzaF9fWAMAAABkZWZLSEtKh1gcAAAAX1dyaXRlU3RyaW5nc1RvUHViU3ViLmV4cGFuZFgDAAAAZGVmS+pL7odYFAAAAF9QdWJTdWJTb3VyY2UucmVhZGVyWAMAAABkZWZNdgFNeAGHWB4AAABfV3JpdGVTdHJpbmdzVG9QdWJTdWIuX19pbml0X19YAwAAAGRlZkvgS+mHWBYAAABfUHViU3ViU291cmNlLl9faW5pdF9fWAMAAABkZWZNSQFNXgGHWBsAAABQdWJzdWJNZXNzYWdlLl90b19wcm90b19zdHJYAwAAAGRlZktoS3iHWBIAAABfUHViU3ViU2luay53cml0ZXJYAwAAAGRlZk2bAU2dAYdYFAAAAF9QdWJTdWJTb3VyY2UuZm9ybWF0WAMAAABkZWZNXwFNYwGHWBQAAABQdWJzdWJNZXNzYWdlLl9fZXFfX1gDAAAAZGVmS0tLT4dYFQAAAF9Xcml0ZVN0cmluZ3NUb1B1YlN1YlgFAAAAY2xhc3NL3Uvuh1gWAAAAV3JpdGVUb1B1YlN1Yi5fX2luaXRfX1gDAAAAZGVmS/RNCgGHWB0AAABfUmVhZFN0cmluZ3NGcm9tUHViU3ViLmV4cGFuZFgDAAAAZGVmS89L1odYGgAAAFdyaXRlVG9QdWJTdWIudG9fcHJvdG9fc3RyWAMAAABkZWZNCwFNEQGHWB8AAABfUmVhZFN0cmluZ3NGcm9tUHViU3ViLl9faW5pdF9fWAMAAABkZWZLyUvOh1gOAAAAUmVhZEZyb21QdWJTdWJYBQAAAGNsYXNzS4RLv4dYEgAAAHBhcnNlX3N1YnNjcmlwdGlvblgDAAAAZGVmTTMBTT0Bh1gdAAAAUHVic3ViTWVzc2FnZS5fZnJvbV9wcm90b19zdHJYAwAAAGRlZktXS2eHWBQAAABXcml0ZVN0cmluZ3NUb1B1YlN1YlgDAAAAZGVmS9hL24dYDQAAAF9QdWJTdWJTb3VyY2VYBQAAAGNsYXNzTT8BTXsBh1gbAAAAUHVic3ViTWVzc2FnZS5fZnJvbV9tZXNzYWdlWAMAAABkZWZLeUuCh1gmAAAAUmVhZEZyb21QdWJTdWIudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJYAwAAAGRlZku7S7+HWBcAAABSZWFkRnJvbVB1YlN1Yi5fX2luaXRfX1gDAAAAZGVmS4hLsodYDQAAAFdyaXRlVG9QdWJTdWJYBQAAAGNsYXNzS/BNIAGHWAsAAABwYXJzZV90b3BpY1gDAAAAZGVmTScBTTEBh1gNAAAAUHVic3ViTWVzc2FnZVgFAAAAY2xhc3NLMkuCh1gVAAAAUmVhZEZyb21QdWJTdWIuZXhwYW5kWAMAAABkZWZLs0u6h1gWAAAAX1JlYWRTdHJpbmdzRnJvbVB1YlN1YlgFAAAAY2xhc3NLxkvWh1gWAAAAUHVic3ViTWVzc2FnZS5fX2luaXRfX1gDAAAAZGVmS0FLR4dYEgAAAF9QdWJTdWJTaW5rLmZvcm1hdFgDAAAAZGVmTYwBTZABh1gWAAAAUHVic3ViTWVzc2FnZS5fX3JlcHJfX1gDAAAAZGVmS1RLVodYJQAAAFdyaXRlVG9QdWJTdWIudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJYAwAAAGRlZk0cAU0gAYdYCwAAAF9QdWJTdWJTaW5rWAUAAABjbGFzc019AU2dAYdYGAAAAF9QdWJTdWJTb3VyY2UuaXNfYm91bmRlZFgDAAAAZGVmTXkBTXsBh3V9cr6EAAAoWBUAAABSZWFkRnJvbVB1YlN1Yi5leHBhbmRqG1oAAFgUAAAAV3JpdGVUb1B1YlN1Yi5leHBhbmRqG1oAAFgUAAAAV3JpdGVTdHJpbmdzVG9QdWJTdWJqG1oAAFgVAAAAUmVhZFN0cmluZ3NGcm9tUHViU3ViahtaAABYJgAAAFJlYWRGcm9tUHViU3ViLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyahtaAABYJQAAAFdyaXRlVG9QdWJTdWIudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJqG1oAAFgaAAAAV3JpdGVUb1B1YlN1Yi50b19wcm90b19zdHJqG1oAAFgNAAAAV3JpdGVUb1B1YlN1YmobWgAAWA4AAABSZWFkRnJvbVB1YlN1YmobWgAAWA0AAABQdWJzdWJNZXNzYWdlahtaAAB1an1pAABYGQAAAGFwYWNoZV9iZWFtLmlvLmdjcC5wdWJzdWJyv4QAAIWBcsCEAAB9csGEAABidFU0YXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ19xdWVyeV9xdWVyeV90b190YWJsZV9waXBlbGluZShYmAoAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiSm9iIHRoYXQgcmVhZHMgYW5kIHdyaXRlcyBkYXRhIHRvIEJpZ1F1ZXJ5LgoKQSBEYXRhZmxvdyBqb2IgdGhhdCByZWFkcyBmcm9tIEJRIHVzaW5nIGEgcXVlcnkgYW5kIHRoZW4gd3JpdGVzIHRvIGEKYmlnIHF1ZXJ5IHRhYmxlIGF0IHRoZSBlbmQgb2YgdGhlIHBpcGVsaW5lLgoiIiIKCiMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgYXJncGFyc2UKCmltcG9ydCBhcGFjaGVfYmVhbSBhcyBiZWFtCmZyb20gYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5IGltcG9ydCBwYXJzZV90YWJsZV9zY2hlbWFfZnJvbV9qc29uCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBQaXBlbGluZU9wdGlvbnMKZnJvbSBhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3RfcGlwZWxpbmUgaW1wb3J0IFRlc3RQaXBlbGluZQoKCmRlZiBydW5fYnFfcGlwZWxpbmUoYXJndj1Ob25lKToKICAiIiJSdW4gdGhlIHNhbXBsZSBCaWdRdWVyeSBwaXBlbGluZS4KCiAgQXJnczoKICAgIGFyZ3Y6IEFyZ3VtZW50cyB0byB0aGUgcnVuIGZ1bmN0aW9uLgogICIiIgogIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXF1ZXJ5JywgcmVxdWlyZWQ9VHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1F1ZXJ5IHRvIHByb2Nlc3MgZm9yIHRoZSB0YWJsZS4nKQogIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tb3V0cHV0JywgcmVxdWlyZWQ9VHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J091dHB1dCBCUSB0YWJsZSB0byB3cml0ZSByZXN1bHRzIHRvLicpCiAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1vdXRwdXRfc2NoZW1hJywgZGVzdD0nb3V0cHV0X3NjaGVtYScsIHJlcXVpcmVkPVRydWUsCiAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdTY2hlbWEgZm9yIG91dHB1dCBCUSB0YWJsZS4nKQogIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tdXNlX3N0YW5kYXJkX3NxbCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgICAgICAgICAgICAgICBkZXN0PSd1c2Vfc3RhbmRhcmRfc3FsJywKICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J091dHB1dCBCUSB0YWJsZSB0byB3cml0ZSByZXN1bHRzIHRvLicpCiAga25vd25fYXJncywgcGlwZWxpbmVfYXJncyA9IHBhcnNlci5wYXJzZV9rbm93bl9hcmdzKGFyZ3YpCgogIHRhYmxlX3NjaGVtYSA9IHBhcnNlX3RhYmxlX3NjaGVtYV9mcm9tX2pzb24oa25vd25fYXJncy5vdXRwdXRfc2NoZW1hKQoKICBwID0gVGVzdFBpcGVsaW5lKG9wdGlvbnM9UGlwZWxpbmVPcHRpb25zKHBpcGVsaW5lX2FyZ3MpKQoKICAjIHB5bGludDogZGlzYWJsZT1leHByZXNzaW9uLW5vdC1hc3NpZ25lZAogICMgcHlsaW50OiBkaXNhYmxlPWJhZC1jb250aW51YXRpb24KICAocCB8ICdyZWFkJyA+PiBiZWFtLmlvLlJlYWQoYmVhbS5pby5CaWdRdWVyeVNvdXJjZSgKICAgICAgcXVlcnk9a25vd25fYXJncy5xdWVyeSwgdXNlX3N0YW5kYXJkX3NxbD1rbm93bl9hcmdzLnVzZV9zdGFuZGFyZF9zcWwpKQogICB8ICd3cml0ZScgPj4gYmVhbS5pby5Xcml0ZShiZWFtLmlvLkJpZ1F1ZXJ5U2luaygKICAgICAgICAgICBrbm93bl9hcmdzLm91dHB1dCwKICAgICAgICAgICBzY2hlbWE9dGFibGVfc2NoZW1hLAogICAgICAgICAgIGNyZWF0ZV9kaXNwb3NpdGlvbj1iZWFtLmlvLkJpZ1F1ZXJ5RGlzcG9zaXRpb24uQ1JFQVRFX0lGX05FRURFRCwKICAgICAgICAgICB3cml0ZV9kaXNwb3NpdGlvbj1iZWFtLmlvLkJpZ1F1ZXJ5RGlzcG9zaXRpb24uV1JJVEVfRU1QVFkpKSkKCiAgcmVzdWx0ID0gcC5ydW4oKQogIHJlc3VsdC53YWl0X3VudGlsX2ZpbmlzaCgpCn1ywoQAAFgPAAAAcnVuX2JxX3BpcGVsaW5lWAMAAABkZWZLI0tFh3N9csOEAABYDwAAAHJ1bl9icV9waXBlbGluZWrVYQAAc2p9aQAAWDQAAABhcGFjaGVfYmVhbS5pby5nY3AuYmlnX3F1ZXJ5X3F1ZXJ5X3RvX3RhYmxlX3BpcGVsaW5lcsSEAACFgXLFhAAAfXLGhAAAYnRVH2FwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHNyx4QAAChYYZgAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiU3ludGF4ICYgc2VtYW50aWNzIGZvciB0eXBlLWhpbnRpbmcgY3VzdG9tLWZ1bmN0aW9ucy9QVHJhbnNmb3JtcyBpbiB0aGUgU0RLLgoKVGhpcyBtb2R1bGUgZGVmaW5lcyB0eXBlLWhpbnRpbmcgb2JqZWN0cyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgc3ludGF4IGZvcgp0eXBlLWhpbnRpbmcgZnVuY3Rpb24gYXJndW1lbnRzLCBmdW5jdGlvbiByZXR1cm4gdHlwZXMsIG9yIFBUcmFuc2Zvcm0gb2JqZWN0CnRoZW1zZWx2ZXMuIFR5cGVIaW50J3MgZGVmaW5lZCBpbiB0aGUgbW9kdWxlIGNhbiBiZSB1c2VkIHRvIGltcGxlbWVudCBlaXRoZXIKc3RhdGljIG9yIHJ1bi10aW1lIHR5cGUtY2hlY2tpbmcgaW4gcmVndWxhciBQeXRob24gY29kZS4KClR5cGUtaGludHMgYXJlIGRlZmluZWQgYnkgJ2luZGV4aW5nJyBhIHR5cGUtcGFyYW1ldGVyIGludG8gYSBkZWZpbmVkCkNvbXBvc2l0ZVR5cGVIaW50IGluc3RhbmNlOgoKICAqICdMaXN0W2ludF0nLgoKVmFsaWQgdHlwZS1oaW50cyBhcmUgcGFydGl0aW9uZWQgaW50byB0d28gY2F0ZWdvcmllczogc2ltcGxlLCBhbmQgY29tcG9zaXRlLgoKU2ltcGxlIHR5cGUgaGludHMgYXJlIHR5cGUgaGludHMgYmFzZWQgb24gYSBzdWJzZXQgb2YgUHl0aG9uIHByaW1pdGl2ZSB0eXBlczoKaW50LCBib29sLCBmbG9hdCwgc3RyLCBvYmplY3QsIE5vbmUsIGFuZCBieXRlcy4gTm8gb3RoZXIgcHJpbWl0aXZlIHR5cGVzIGFyZQphbGxvd2VkLgoKQ29tcG9zaXRlIHR5cGUtaGludHMgYXJlIHJlc2VydmVkIGZvciBoaW50aW5nIHRoZSB0eXBlcyBvZiBjb250YWluZXItbGlrZQpQeXRob24gb2JqZWN0cyBzdWNoIGFzICdsaXN0Jy4gQ29tcG9zaXRlIHR5cGUtaGludHMgY2FuIGJlIHBhcmFtZXRlcml6ZWQgYnkgYW4KaW5uZXIgc2ltcGxlIG9yIGNvbXBvc2l0ZSB0eXBlLWhpbnQsIHVzaW5nIHRoZSAnaW5kZXhpbmcnIHN5bnRheC4gSW4gb3JkZXIgdG8KYXZvaWQgY29uZmxpY3Rpbmcgd2l0aCB0aGUgbmFtZXNwYWNlIG9mIHRoZSBidWlsdC1pbiBjb250YWluZXIgdHlwZXMsIHdoZW4Kc3BlY2lmeWluZyB0aGlzIGNhdGVnb3J5IG9mIHR5cGUtaGludHMsIHRoZSBmaXJzdCBsZXR0ZXIgc2hvdWxkIGNhcGl0YWxpemVkLgpUaGUgZm9sbG93aW5nIGNvbXBvc2l0ZSB0eXBlLWhpbnRzIGFyZSBwZXJtaXR0ZWQuIE5PVEU6ICdUJyBjYW4gYmUgYW55IG9mIHRoZQp0eXBlLWhpbnRzIGxpc3RlZCBvciBhIHNpbXBsZSBQeXRob24gdHlwZToKCiAgKiBBbnkKICAqIFVuaW9uW1QsIFQsIFRdCiAgKiBPcHRpb25hbFtUXQogICogVHVwbGVbVCwgVF0KICAqIFR1cGxlW1QsIC4uLl0KICAqIExpc3RbVF0KICAqIEtWW1QsIFRdCiAgKiBEaWN0W1QsIFRdCiAgKiBTZXRbVF0KICAqIEl0ZXJhYmxlW1RdCiAgKiBJdGVyYXRvcltUXQogICogR2VuZXJhdG9yW1RdCgpUeXBlLWhpbnRzIGNhbiBiZSBuZXN0ZWQsIGFsbG93aW5nIG9uZSB0byBkZWZpbmUgdHlwZS1oaW50cyBmb3IgY29tcGxleCB0eXBlczoKCiAgKiAnTGlzdFtUdXBsZVtpbnQsIGludCwgc3RyXV0KCkluIGFkZGl0aW9uLCB0eXBlLWhpbnRzIGNhbiBiZSB1c2VkIHRvIGltcGxlbWVudCBydW4tdGltZSB0eXBlLWNoZWNraW5nIHZpYSB0aGUKJ3R5cGVfY2hlY2snIG1ldGhvZCBvbiBlYWNoIFR5cGVDb25zdHJhaW50LgoKIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGNvbGxlY3Rpb25zCmltcG9ydCBjb3B5CmltcG9ydCBzeXMKaW1wb3J0IHR5cGVzCmZyb20gYnVpbHRpbnMgaW1wb3J0IG5leHQKZnJvbSBidWlsdGlucyBpbXBvcnQgemlwCgpmcm9tIGZ1dHVyZS51dGlscyBpbXBvcnQgd2l0aF9tZXRhY2xhc3MKCl9fYWxsX18gPSBbCiAgICAnQW55JywKICAgICdVbmlvbicsCiAgICAnT3B0aW9uYWwnLAogICAgJ1R1cGxlJywKICAgICdMaXN0JywKICAgICdLVicsCiAgICAnRGljdCcsCiAgICAnU2V0JywKICAgICdJdGVyYWJsZScsCiAgICAnSXRlcmF0b3InLAogICAgJ0dlbmVyYXRvcicsCiAgICAnV2luZG93ZWRWYWx1ZScsCiAgICAnVHlwZVZhcmlhYmxlJywKXQoKCiMgQSBzZXQgb2YgdGhlIGJ1aWx0LWluIFB5dGhvbiB0eXBlcyB3ZSBkb24ndCBzdXBwb3J0LCBndWlkaW5nIHRoZSB1c2VycwojIHRvIHRlbXBsYXRlZCAodXBwZXItY2FzZSkgdmVyc2lvbnMgaW5zdGVhZC4KRElTQUxMT1dFRF9QUklNSVRJVkVfVFlQRVMgPSAobGlzdCwgc2V0LCB0dXBsZSwgZGljdCkKCgpjbGFzcyBTaW1wbGVUeXBlSGludEVycm9yKFR5cGVFcnJvcik6CiAgcGFzcwoKCmNsYXNzIENvbXBvc2l0ZVR5cGVIaW50RXJyb3IoVHlwZUVycm9yKToKICBwYXNzCgoKY2xhc3MgR2V0aXRlbUNvbnN0cnVjdG9yKHR5cGUpOgogICIiIkEgbWV0YWNsYXNzIHRoYXQgbWFrZXMgQ2xzW2FyZ10gYW4gYWxpYXMgZm9yIENscyhhcmcpLiIiIgogIGRlZiBfX2dldGl0ZW1fXyhjbHMsIGFyZyk6CiAgICByZXR1cm4gY2xzKGFyZykKCgpjbGFzcyBUeXBlQ29uc3RyYWludChvYmplY3QpOgoKICAiIiJUaGUgYmFzZS1jbGFzcyBmb3IgYWxsIGNyZWF0ZWQgdHlwZS1jb25zdHJhaW50cyBkZWZpbmVkIGJlbG93LgoKICBBIDpjbGFzczpgVHlwZUNvbnN0cmFpbnRgIGlzIHRoZSByZXN1bHQgb2YgcGFyYW1ldGVyaXppbmcgYQogIDpjbGFzczpgQ29tcG9zaXRlVHlwZUhpbnRgIHdpdGggd2l0aCBvbmUgb2YgdGhlIGFsbG93ZWQgUHl0aG9uIHR5cGVzIG9yCiAgYW5vdGhlciA6Y2xhc3M6YENvbXBvc2l0ZVR5cGVIaW50YC4gSXQgYmluZHMgYW5kIGVuZm9yY2VzIGEgc3BlY2lmaWMKICB2ZXJzaW9uIG9mIGEgZ2VuZXJhbGl6ZWQgVHlwZUhpbnQuCiAgIiIiCgogIGRlZiBfY29uc2lzdGVudF93aXRoX2NoZWNrXyhzZWxmLCBzdWIpOgogICAgIiIiUmV0dXJucyB3aGV0aGVyIHN1YiBpcyBjb25zaXN0ZW50IHdpdGggc2VsZi4KCiAgICBIYXMgdGhlIHNhbWUgcmVsYXRpb25zaGlwIHRvIGlzX2NvbnNpc3RlbnRfd2l0aCgpIGFzCiAgICBfX3N1YmNsYXNzY2hlY2tfXyBkb2VzIGZvciBpc3N1YmNsYXNzKCkuCgogICAgTm90IG1lYW50IHRvIGJlIGNhbGxlZCBkaXJlY3RseTsgY2FsbCBpc19jb25zaXN0ZW50X3dpdGgoc3ViLCBzZWxmKQogICAgaW5zdGVhZC4KCiAgICBJbXBsZW1lbnRhdGlvbiBtYXkgYXNzdW1lIHRoYXQgbWF5YmVfc3ViX3R5cGUgaXMgbm90IEFueQogICAgYW5kIGhhcyBiZWVuIG5vcm1hbGl6ZWQuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIHR5cGVfY2hlY2soc2VsZiwgaW5zdGFuY2UpOgogICAgIiIiRGV0ZXJtaW5lcyBpZiB0aGUgdHlwZSBvZiAnaW5zdGFuY2UnIHNhdGlzZmllcyB0aGlzIHR5cGUgY29uc3RyYWludC4KCiAgICBBcmdzOgogICAgICBpbnN0YW5jZTogQW4gaW5zdGFuY2Ugb2YgYSBQeXRob24gb2JqZWN0LgoKICAgIFJhaXNlczoKICAgICAgOmNsYXNzOmB+ZXhjZXB0aW9ucy5UeXBlRXJyb3JgOiBUaGUgcGFzc2VkICoqaW5zdGFuY2UqKiBkb2Vzbid0IHNhdGlzZnkKICAgICAgICB0aGlzIDpjbGFzczpgVHlwZUNvbnN0cmFpbnRgLiBTdWJjbGFzc2VzIG9mCiAgICAgICAgOmNsYXNzOmBUeXBlQ29uc3RyYWludGAgYXJlIGZyZWUgdG8gcmFpc2UgYW55IG9mIHRoZSBzdWJjbGFzc2VzIG9mCiAgICAgICAgOmNsYXNzOmB+ZXhjZXB0aW9ucy5UeXBlRXJyb3JgIGRlZmluZWQgYWJvdmUsIGRlcGVuZGluZyBvbgogICAgICAgIHRoZSBtYW5uZXIgb2YgdGhlIHR5cGUgaGludCBlcnJvci4KCiAgICBBbGwgOmNsYXNzOmBUeXBlQ29uc3RyYWludGAgc3ViLWNsYXNzZXMgbXVzdCBkZWZpbmUgdGhpcyBtZXRob2QgaW4gb3RoZXIKICAgIGZvciB0aGUgY2xhc3Mgb2JqZWN0IHRvIGJlIGNyZWF0ZWQuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIG1hdGNoX3R5cGVfdmFyaWFibGVzKHNlbGYsIHVudXNlZF9jb25jcmV0ZV90eXBlKToKICAgIHJldHVybiB7fQoKICBkZWYgYmluZF90eXBlX3ZhcmlhYmxlcyhzZWxmLCB1bnVzZWRfYmluZGluZ3MpOgogICAgcmV0dXJuIHNlbGYKCiAgZGVmIF9pbm5lcl90eXBlcyhzZWxmKToKICAgICIiIkl0ZXJhdGVzIG92ZXIgdGhlIGlubmVyIHR5cGVzIG9mIHRoZSBjb21wb3NpdGUgdHlwZS4iIiIKICAgIHJldHVybiBbXQoKICBkZWYgdmlzaXQoc2VsZiwgdmlzaXRvciwgdmlzaXRvcl9hcmcpOgogICAgIiIiVmlzaXRvciBtZXRob2QgdG8gdmlzaXQgYWxsIGlubmVyIHR5cGVzIG9mIGEgY29tcG9zaXRlIHR5cGUuCgogICAgQXJnczoKICAgICAgdmlzaXRvcjogQSBjYWxsYWJsZSBpbnZva2VkIGZvciBhbGwgbm9kZXMgaW4gdGhlIHR5cGUgdHJlZSBjb21wcmlzaW5nCiAgICAgICAgYSBjb21wb3NpdGUgdHlwZS4gVGhlIHZpc2l0b3Igd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgbm9kZSB2aXNpdGVkCiAgICAgICAgYW5kIHRoZSB2aXNpdG9yIGFyZ3VtZW50IHNwZWNpZmllZCBoZXJlLgogICAgICB2aXNpdG9yX2FyZzogVmlzaXRvciBjYWxsYmFjayBzZWNvbmQgYXJndW1lbnQuCiAgICAiIiIKICAgIHZpc2l0b3Ioc2VsZiwgdmlzaXRvcl9hcmcpCiAgICBmb3IgdCBpbiBzZWxmLl9pbm5lcl90eXBlcygpOgogICAgICBpZiBpc2luc3RhbmNlKHQsIFR5cGVDb25zdHJhaW50KToKICAgICAgICB0LnZpc2l0KHZpc2l0b3IsIHZpc2l0b3JfYXJnKQogICAgICBlbHNlOgogICAgICAgIHZpc2l0b3IodCwgdmlzaXRvcl9hcmcpCgogIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgogICAgIyBUT0RPKEJFQU0tNTk0OSk6IE5lZWRlZCBmb3IgUHl0aG9uIDIgY29tcGF0aWJpbGl0eS4KICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgoKCmRlZiBtYXRjaF90eXBlX3ZhcmlhYmxlcyh0eXBlX2NvbnN0cmFpbnQsIGNvbmNyZXRlX3R5cGUpOgogIGlmIGlzaW5zdGFuY2UodHlwZV9jb25zdHJhaW50LCBUeXBlQ29uc3RyYWludCk6CiAgICByZXR1cm4gdHlwZV9jb25zdHJhaW50Lm1hdGNoX3R5cGVfdmFyaWFibGVzKGNvbmNyZXRlX3R5cGUpCiAgcmV0dXJuIHt9CgoKZGVmIGJpbmRfdHlwZV92YXJpYWJsZXModHlwZV9jb25zdHJhaW50LCBiaW5kaW5ncyk6CiAgaWYgaXNpbnN0YW5jZSh0eXBlX2NvbnN0cmFpbnQsIFR5cGVDb25zdHJhaW50KToKICAgIHJldHVybiB0eXBlX2NvbnN0cmFpbnQuYmluZF90eXBlX3ZhcmlhYmxlcyhiaW5kaW5ncykKICByZXR1cm4gdHlwZV9jb25zdHJhaW50CgoKY2xhc3MgSW5kZXhhYmxlVHlwZUNvbnN0cmFpbnQoVHlwZUNvbnN0cmFpbnQpOgogICIiIkFuIGludGVybmFsIGNvbW1vbiBiYXNlLWNsYXNzIGZvciBhbGwgdHlwZSBjb25zdHJhaW50cyB3aXRoIGluZGV4aW5nLgogIEUuRy4gU2VxdWVuY2VUeXBlQ29uc3RyYWludCArIFR1cGxlJ3Mgb2YgZml4ZWQgc2l6ZS4KICAiIiIKCiAgZGVmIF9jb25zdHJhaW50X2Zvcl9pbmRleChzZWxmLCBpZHgpOgogICAgIiIiUmV0dXJucyB0aGUgdHlwZSBhdCB0aGUgZ2l2ZW4gaW5kZXguIFRoaXMgaXMgdXNlZCB0byBhbGxvdyB0eXBlIGluZmVyZW5jZQogICAgdG8gZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IHR5cGUgZm9yIGEgc3BlY2lmaWMgaW5kZXguIE9uIGxpc3RzIHRoaXMgd2lsbCBhbHNvCiAgICBiZSB0aGUgc2FtZSwgaG93ZXZlciBmb3IgdHVwbGVzIHRoZSB2YWx1ZSB3aWxsIGRlcGVuZCBvbiB0aGUgcG9zaXRpb24uIFRoaXMKICAgIHdhcyBhZGRlZCBhcyBwYXJ0IG9mIHRoZSBmdXR1cml6ZSBjaGFuZ2VzIHNpbmNlIG1vcmUgb2YgdGhlIGV4cHJlc3Npb25zIG5vdwogICAgaW5kZXggaW50byB0dXBsZXMuIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgoKY2xhc3MgU2VxdWVuY2VUeXBlQ29uc3RyYWludChJbmRleGFibGVUeXBlQ29uc3RyYWludCk6CiAgIiIiQSBjb21tb24gYmFzZS1jbGFzcyBmb3IgYWxsIHNlcXVlbmNlIHJlbGF0ZWQgdHlwZS1jb25zdHJhaW50IGNsYXNzZXMuCgogIEEgc2VxdWVuY2UgaXMgZGVmaW5lZCBhcyBhbiBhcmJpdHJhcnkgbGVuZ3RoIGhvbW9nZW5lb3VzIGNvbnRhaW5lciB0eXBlLiBUeXBlCiAgaGludHMgd2hpY2ggZmFsbCB1bmRlciB0aGlzIGNhdGVnb3J5IGluY2x1ZGU6IExpc3RbVF0sIFNldFtUXSwgSXRlcmFibGVbVF0sCiAgYW5kIFR1cGxlW1QsIC4uLl0uCgogIFN1Yi1jbGFzc2VzIG1heSBuZWVkIHRvIG92ZXJyaWRlICdfY29uc2lzdGVudF93aXRoX2NoZWNrXycgaWYgYSBwYXJ0aWN1bGFyCiAgc2VxdWVuY2UgcmVxdWlyZXMgc3BlY2lhbCBoYW5kbGluZyB3aXRoIHJlc3BlY3QgdG8gdHlwZSBjb21wYXRpYmlsaXR5LgoKICBBdHRyaWJ1dGVzOgogICAgaW5uZXJfdHlwZTogVGhlIHR5cGUgd2hpY2ggZXZlcnkgZWxlbWVudCBpbiB0aGUgc2VxdWVuY2Ugc2hvdWxkIGJlIGFuCiAgICAgIGluc3RhbmNlIG9mLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgaW5uZXJfdHlwZSwgc2VxdWVuY2VfdHlwZSk6CiAgICBzZWxmLmlubmVyX3R5cGUgPSBpbm5lcl90eXBlCiAgICBzZWxmLl9zZXF1ZW5jZV90eXBlID0gc2VxdWVuY2VfdHlwZQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiAoaXNpbnN0YW5jZShvdGhlciwgU2VxdWVuY2VUeXBlQ29uc3RyYWludCkKICAgICAgICAgICAgYW5kIHR5cGUoc2VsZikgPT0gdHlwZShvdGhlcikKICAgICAgICAgICAgYW5kIHNlbGYuaW5uZXJfdHlwZSA9PSBvdGhlci5pbm5lcl90eXBlKQoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaChzZWxmLmlubmVyX3R5cGUpIF4gMTMgKiBoYXNoKHR5cGUoc2VsZikpCgogIGRlZiBfaW5uZXJfdHlwZXMoc2VsZik6CiAgICB5aWVsZCBzZWxmLmlubmVyX3R5cGUKCiAgZGVmIF9jb25zdHJhaW50X2Zvcl9pbmRleChzZWxmLCBpZHgpOgogICAgIiIiUmV0dXJucyB0aGUgdHlwZSBhdCB0aGUgZ2l2ZW4gaW5kZXguIiIiCiAgICByZXR1cm4gc2VsZi5pbm5lcl90eXBlCgogIGRlZiBfY29uc2lzdGVudF93aXRoX2NoZWNrXyhzZWxmLCBzdWIpOgogICAgcmV0dXJuIChpc2luc3RhbmNlKHN1Yiwgc2VsZi5fX2NsYXNzX18pCiAgICAgICAgICAgIGFuZCBpc19jb25zaXN0ZW50X3dpdGgoc3ViLmlubmVyX3R5cGUsIHNlbGYuaW5uZXJfdHlwZSkpCgogIGRlZiB0eXBlX2NoZWNrKHNlbGYsIHNlcXVlbmNlX2luc3RhbmNlKToKICAgIGlmIG5vdCBpc2luc3RhbmNlKHNlcXVlbmNlX2luc3RhbmNlLCBzZWxmLl9zZXF1ZW5jZV90eXBlKToKICAgICAgcmFpc2UgQ29tcG9zaXRlVHlwZUhpbnRFcnJvcigKICAgICAgICAgICIlcyB0eXBlLWNvbnN0cmFpbnQgdmlvbGF0ZWQuIFZhbGlkIG9iamVjdCBpbnN0YW5jZSAiCiAgICAgICAgICAibXVzdCBiZSBvZiB0eXBlICclcycuIEluc3RlYWQsIGFuIGluc3RhbmNlIG9mICclcycgIgogICAgICAgICAgIndhcyByZWNlaXZlZC4iCiAgICAgICAgICAlIChzZWxmLl9zZXF1ZW5jZV90eXBlLl9fbmFtZV9fLnRpdGxlKCksCiAgICAgICAgICAgICBzZWxmLl9zZXF1ZW5jZV90eXBlLl9fbmFtZV9fLmxvd2VyKCksCiAgICAgICAgICAgICBzZXF1ZW5jZV9pbnN0YW5jZS5fX2NsYXNzX18uX19uYW1lX18pKQoKICAgIGZvciBpbmRleCwgZWxlbSBpbiBlbnVtZXJhdGUoc2VxdWVuY2VfaW5zdGFuY2UpOgogICAgICB0cnk6CiAgICAgICAgY2hlY2tfY29uc3RyYWludChzZWxmLmlubmVyX3R5cGUsIGVsZW0pCiAgICAgIGV4Y2VwdCBTaW1wbGVUeXBlSGludEVycm9yIGFzIGU6CiAgICAgICAgcmFpc2UgQ29tcG9zaXRlVHlwZUhpbnRFcnJvcigKICAgICAgICAgICAgJyVzIGhpbnQgdHlwZS1jb25zdHJhaW50IHZpb2xhdGVkLiBUaGUgdHlwZSBvZiBlbGVtZW50ICMlcyBpbiAnCiAgICAgICAgICAgICd0aGUgcGFzc2VkICVzIGlzIGluY29ycmVjdC4gRXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgdHlwZSAlcywgJwogICAgICAgICAgICAnaW5zdGVhZCByZWNlaXZlZCBhbiBpbnN0YW5jZSBvZiB0eXBlICVzLicgJQogICAgICAgICAgICAocmVwcihzZWxmKSwgaW5kZXgsIF91bmlmaWVkX3JlcHIoc2VsZi5fc2VxdWVuY2VfdHlwZSksCiAgICAgICAgICAgICBfdW5pZmllZF9yZXByKHNlbGYuaW5uZXJfdHlwZSksIGVsZW0uX19jbGFzc19fLl9fbmFtZV9fKSkKICAgICAgZXhjZXB0IENvbXBvc2l0ZVR5cGVIaW50RXJyb3IgYXMgZToKICAgICAgICByYWlzZSBDb21wb3NpdGVUeXBlSGludEVycm9yKAogICAgICAgICAgICAnJXMgaGludCB0eXBlLWNvbnN0cmFpbnQgdmlvbGF0ZWQuIFRoZSB0eXBlIG9mIGVsZW1lbnQgIyVzIGluICcKICAgICAgICAgICAgJ3RoZSBwYXNzZWQgJXMgaXMgaW5jb3JyZWN0OiAlcycKICAgICAgICAgICAgJSAocmVwcihzZWxmKSwgaW5kZXgsIHNlbGYuX3NlcXVlbmNlX3R5cGUuX19uYW1lX18sIGUpKQoKICBkZWYgbWF0Y2hfdHlwZV92YXJpYWJsZXMoc2VsZiwgY29uY3JldGVfdHlwZSk6CiAgICBpZiBpc2luc3RhbmNlKGNvbmNyZXRlX3R5cGUsIFNlcXVlbmNlVHlwZUNvbnN0cmFpbnQpOgogICAgICByZXR1cm4gbWF0Y2hfdHlwZV92YXJpYWJsZXMoc2VsZi5pbm5lcl90eXBlLCBjb25jcmV0ZV90eXBlLmlubmVyX3R5cGUpCiAgICByZXR1cm4ge30KCiAgZGVmIGJpbmRfdHlwZV92YXJpYWJsZXMoc2VsZiwgYmluZGluZ3MpOgogICAgYm91bmRfaW5uZXJfdHlwZSA9IGJpbmRfdHlwZV92YXJpYWJsZXMoc2VsZi5pbm5lcl90eXBlLCBiaW5kaW5ncykKICAgIGlmIGJvdW5kX2lubmVyX3R5cGUgPT0gc2VsZi5pbm5lcl90eXBlOgogICAgICByZXR1cm4gc2VsZgogICAgYm91bmRfc2VsZiA9IGNvcHkuY29weShzZWxmKQogICAgYm91bmRfc2VsZi5pbm5lcl90eXBlID0gYm91bmRfaW5uZXJfdHlwZQogICAgcmV0dXJuIGJvdW5kX3NlbGYKCgpjbGFzcyBDb21wb3NpdGVUeXBlSGludChvYmplY3QpOgogICIiIlRoZSBiYXNlLWNsYXNzIGZvciBhbGwgY3JlYXRlZCB0eXBlLWhpbnQgY2xhc3NlcyBkZWZpbmVkIGJlbG93LgoKICBDb21wb3NpdGVUeXBlSGludCdzIHNlcnZlIHByaW1hcmlseSBhcyBUeXBlQ29uc3RyYWludCBmYWN0b3JpZXMuIFRoZXkgYXJlCiAgb25seSByZXF1aXJlZCB0byBkZWZpbmUgYSBzaW5nbGUgbWV0aG9kOiAnX19nZXRpdGVtX18nIHdoaWNoIHNob3VsZCByZXR1cm4gYQogIHBhcmFtZXRlcml6ZWQgVHlwZUNvbnN0cmFpbnQsIHRoYXQgY2FuIGJlIHVzZWQgdG8gZW5mb3JjZSBzdGF0aWMgb3IgcnVuLXRpbWUKICB0eXBlLWNoZWNraW5nLgoKICAnX19nZXRpdGVtX18nIGlzIHVzZWQgYXMgYSBmYWN0b3J5IGZ1bmN0aW9uIGluIG9yZGVyIHRvIHByb3ZpZGUgYSBmYW1pbGlhcgogIEFQSSBmb3IgZGVmaW5pbmcgdHlwZS1oaW50cy4gVGhlIHVsdGltYXRlIHJlc3VsdCBpcyB0aGF0IG9uZSB3aWxsIGJlIGFibGUgdG8KICB1c2U6IENvbXBvc2l0ZVR5cGVIaW50W3R5cGVfcGFyYW1ldGVyXSB0byBjcmVhdGUgYSB0eXBlLWhpbnQgb2JqZWN0IHRoYXQKICBiZWhhdmVzIGxpa2UgYW55IG90aGVyIFB5dGhvbiBvYmplY3QuIFRoaXMgYWxsb3dzIG9uZSB0byBjcmVhdGUKICAndHlwZS1hbGlhc2VzJyBieSBhc3NpZ25pbmcgdGhlIHJldHVybmVkIHR5cGUtaGludHMgdG8gYSB2YXJpYWJsZS4KCiAgICAqIEV4YW1wbGU6ICdDb29yZGluYXRlcyA9IExpc3RbVHVwbGVbaW50LCBpbnRdXScKICAiIiIKCiAgZGVmIF9fZ2V0aXRlbV9fXyhzZWxmLCBweV90eXBlKToKICAgICIiIkdpdmVuIGEgdHlwZSBjcmVhdGVzIGEgVHlwZUNvbnN0cmFpbnQgaW5zdGFuY2UgcGFyYW1ldGVyaXplZCBieSB0aGUgdHlwZS4KCiAgICBUaGlzIGZ1bmN0aW9uIHNlcnZlcyBhcyBhIGZhY3RvcnkgZnVuY3Rpb24gd2hpY2ggY3JlYXRlcyBUeXBlQ29uc3RyYWludAogICAgaW5zdGFuY2VzLiBBZGRpdGlvbmFsbHksIGltcGxlbWVudGF0aW9ucyBieSBzdWItY2xhc3NlcyBzaG91bGQgcGVyZm9ybSBhbnkKICAgIHNhbml0eSBjaGVja2luZyBvZiB0aGUgcGFzc2VkIHR5cGVzIGluIHRoaXMgbWV0aG9kIGluIG9yZGVyIHRvIHJ1bGUtb3V0CiAgICBkaXNhbGxvd2VkIGJlaGF2aW9yLiBTdWNoIGFzLCBhdHRlbXB0aW5nIHRvIGNyZWF0ZSBhIFR5cGVDb25zdHJhaW50IHdob3NlCiAgICBwYXJhbWV0ZXJpemVkIHR5cGUgaXMgYWN0dWFsbHkgYW4gb2JqZWN0IGluc3RhbmNlLgoKICAgIEFyZ3M6CiAgICAgIHB5X3R5cGU6IEFuIGluc3RhbmNlIG9mIGEgUHl0aG9uIHR5cGUgb3IgVHlwZUNvbnN0cmFpbnQuCgogICAgUmV0dXJuczogQW4gaW5zdGFuY2Ugb2YgYSBjdXN0b20gVHlwZUNvbnN0cmFpbnQgZm9yIHRoaXMgQ29tcG9zaXRlVHlwZUhpbnQuCgogICAgUmFpc2VzOgogICAgICBUeXBlRXJyb3I6IElmIHRoZSBwYXNzZWQgdHlwZSB2aW9sYXRlcyBhbnkgY29udHJhaW50cyBmb3IgdGhpcyBwYXJ0aWN1bGFyCiAgICAgICAgVHlwZUhpbnQuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCgpkZWYgdmFsaWRhdGVfY29tcG9zaXRlX3R5cGVfcGFyYW0odHlwZV9wYXJhbSwgZXJyb3JfbXNnX3ByZWZpeCk6CiAgIiIiRGV0ZXJtaW5lcyBpZiBhbiBvYmplY3QgaXMgYSB2YWxpZCB0eXBlIHBhcmFtZXRlciB0byBhCiAgOmNsYXNzOmBDb21wb3NpdGVUeXBlSGludGAuCgogIEltcGxlbWVudHMgc2FuaXR5IGNoZWNraW5nIHRvIGRpc2FsbG93IHRoaW5ncyBsaWtlOjoKCiAgICBMaXN0WzEsIDIsIDNdIG9yIERpY3RbNV0uCgogIEFyZ3M6CiAgICB0eXBlX3BhcmFtOiBBbiBvYmplY3QgaW5zdGFuY2UuCiAgICBlcnJvcl9tc2dfcHJlZml4ICg6Y2xhc3M6YHN0cmApOiBBIHN0cmluZyBwcmVmaXggdXNlZCB0byBmb3JtYXQgYW4gZXJyb3IKICAgICAgbWVzc2FnZSBpbiB0aGUgY2FzZSBvZiBhbiBleGNlcHRpb24uCgogIFJhaXNlczoKICAgIH5leGNlcHRpb25zLlR5cGVFcnJvcjogSWYgdGhlIHBhc3NlZCAqKnR5cGVfcGFyYW0qKiBpcyBub3QgYSB2YWxpZCB0eXBlCiAgICAgIHBhcmFtZXRlciBmb3IgYSA6Y2xhc3M6YENvbXBvc2l0ZVR5cGVIaW50YC4KICAiIiIKICAjIE11c3QgZWl0aGVyIGJlIGEgVHlwZUNvbnN0cmFpbnQgaW5zdGFuY2Ugb3IgYSBiYXNpYyBQeXRob24gdHlwZS4KICBwb3NzaWJsZV9jbGFzc2VzID0gW3R5cGUsIFR5cGVDb25zdHJhaW50XQogIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPT0gMjoKICAgICMgQWNjZXNzIGZyb20gX19kaWN0X18gdG8gYXZvaWQgcHkyNy1saW50MyBjb21wYXRpYmlsaXR5IGNoZWNrZXIgY29tcGxhaW50LgogICAgcG9zc2libGVfY2xhc3Nlcy5hcHBlbmQodHlwZXMuX19kaWN0X19bIkNsYXNzVHlwZSJdKQogIGlzX25vdF90eXBlX2NvbnN0cmFpbnQgPSAoCiAgICAgIG5vdCBpc2luc3RhbmNlKHR5cGVfcGFyYW0sIHR1cGxlKHBvc3NpYmxlX2NsYXNzZXMpKQogICAgICBhbmQgdHlwZV9wYXJhbSBpcyBub3QgTm9uZSkKICBpc19mb3JiaWRkZW5fdHlwZSA9IChpc2luc3RhbmNlKHR5cGVfcGFyYW0sIHR5cGUpIGFuZAogICAgICAgICAgICAgICAgICAgICAgIHR5cGVfcGFyYW0gaW4gRElTQUxMT1dFRF9QUklNSVRJVkVfVFlQRVMpCgogIGlmIGlzX25vdF90eXBlX2NvbnN0cmFpbnQgb3IgaXNfZm9yYmlkZGVuX3R5cGU6CiAgICByYWlzZSBUeXBlRXJyb3IoJyVzIG11c3QgYmUgYSBub24tc2VxdWVuY2UsIGEgdHlwZSwgb3IgYSBUeXBlQ29uc3RyYWludC4gJXMnCiAgICAgICAgICAgICAgICAgICAgJyBpcyBhbiBpbnN0YW5jZSBvZiAlcy4nICUgKGVycm9yX21zZ19wcmVmaXgsIHR5cGVfcGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVfcGFyYW0uX19jbGFzc19fLl9fbmFtZV9fKSkKCgpkZWYgX3VuaWZpZWRfcmVwcihvKToKICAiIiJHaXZlbiBhbiBvYmplY3QgcmV0dXJuIGEgcXVhbGlmaWVkIG5hbWUgZm9yIHRoZSBvYmplY3QuCgogIFRoaXMgZnVuY3Rpb24gY2xvc2VseSBtaXJyb3JzICdfX3F1YWxuYW1lX18nIHdoaWNoIHdhcyBpbnRyb2R1Y2VkIGluCiAgUHl0aG9uIDMuMy4gSXQgaXMgdXNlZCBwcmltYXJpbHkgdG8gZm9ybWF0IHR5cGVzIG9yIG9iamVjdCBpbnN0YW5jZXMgZm9yCiAgZXJyb3IgbWVzc2FnZXMuCgogIEFyZ3M6CiAgICBvOiBBbiBpbnN0YW5jZSBvZiBhIFR5cGVDb25zdHJhaW50IG9yIGEgdHlwZS4KCiAgUmV0dXJuczoKICAgIEEgcXVhbGlmaWVkIG5hbWUgZm9yIHRoZSBwYXNzZWQgUHl0aG9uIG9iamVjdCBmaXQgZm9yIHN0cmluZyBmb3JtYXR0aW5nLgogICIiIgogIHJldHVybiByZXByKG8pIGlmIGlzaW5zdGFuY2UoCiAgICAgIG8sIChUeXBlQ29uc3RyYWludCwgdHlwZShOb25lKSkpIGVsc2Ugby5fX25hbWVfXwoKCmRlZiBjaGVja19jb25zdHJhaW50KHR5cGVfY29uc3RyYWludCwgb2JqZWN0X2luc3RhbmNlKToKICAiIiJEZXRlcm1pbmUgaWYgdGhlIHBhc3NlZCB0eXBlIGluc3RhbmNlIHNhdGlzZmllcyB0aGUgVHlwZUNvbnN0cmFpbnQuCgogIFdoZW4gZXhhbWluaW5nIGEgY2FuZGlkYXRlIHR5cGUgZm9yIGNvbnN0cmFpbnQgc2F0aXNmYWN0aW9uIGluCiAgJ3R5cGVfY2hlY2snLCBhbGwgQ29tcG9zaXRlVHlwZUhpbnQncyBldmVudHVhbGx5IGNhbGwgdGhpcyBmdW5jdGlvbi4gVGhpcwogIGZ1bmN0aW9uIG1heSBlbmQgdXAgYmVpbmcgY2FsbGVkIHJlY3Vyc2l2ZWx5IGlmIHRoZSBoaW50ZWQgdHlwZSBvZiBhCiAgQ29tcG9zaXRlVHlwZUhpbnQgaXMgYW5vdGhlciBDb21wb3NpdGVUeXBlSGludC4KCiAgQXJnczoKICAgIHR5cGVfY29uc3RyYWludDogQW4gaW5zdGFuY2Ugb2YgYSBUeXBlQ29uc3RyYWludCBvciBhIGJ1aWx0LWluIFB5dGhvbiB0eXBlLgogICAgb2JqZWN0X2luc3RhbmNlOiBBbiBvYmplY3QgaW5zdGFuY2UuCgogIFJhaXNlczoKICAgIFNpbXBsZVR5cGVIaW50RXJyb3I6IElmICd0eXBlX2NvbnN0cmFpbnQnIGlzIGEgb25lIG9mIHRoZSBhbGxvd2VkIHByaW1pdGl2ZQogICAgICBQeXRob24gdHlwZXMgYW5kICdvYmplY3RfaW5zdGFuY2UnIGlzbid0IGFuIGluc3RhbmNlIG9mIHRoaXMgdHlwZS4KICAgIENvbXBvc2l0ZVR5cGVIaW50RXJyb3I6IElmICd0eXBlX2NvbnN0cmFpbnQnIGlzIGEgVHlwZUNvbnN0cmFpbnQgb2JqZWN0IGFuZAogICAgICAnb2JqZWN0X2luc3RhbmNlJyBkb2VzIG5vdCBzYXRpc2Z5IGl0cyBjb25zdHJhaW50LgogICIiIgogIGlmIHR5cGVfY29uc3RyYWludCBpcyBOb25lIGFuZCBvYmplY3RfaW5zdGFuY2UgaXMgTm9uZToKICAgIHJldHVybgogIGVsaWYgaXNpbnN0YW5jZSh0eXBlX2NvbnN0cmFpbnQsIFR5cGVDb25zdHJhaW50KToKICAgIHR5cGVfY29uc3RyYWludC50eXBlX2NoZWNrKG9iamVjdF9pbnN0YW5jZSkKICBlbGlmIHR5cGVfY29uc3RyYWludCBpcyBOb25lOgogICAgIyBUT0RPKHJvYmVydHdiKTogRml4IHVzZXMgb2YgTm9uZSBmb3IgQW55LgogICAgcGFzcwogIGVsaWYgbm90IGlzaW5zdGFuY2UodHlwZV9jb25zdHJhaW50LCB0eXBlKToKICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiYmFkIHR5cGU6ICVzIiAlICh0eXBlX2NvbnN0cmFpbnQsKSkKICBlbGlmIG5vdCBpc2luc3RhbmNlKG9iamVjdF9pbnN0YW5jZSwgdHlwZV9jb25zdHJhaW50KToKICAgIHJhaXNlIFNpbXBsZVR5cGVIaW50RXJyb3IKCgpjbGFzcyBBbnlUeXBlQ29uc3RyYWludChUeXBlQ29uc3RyYWludCk6CiAgIiIiQW4gQW55IHR5cGUtaGludC4KCiAgQW55IGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYXMgYSAiZG9uJ3QgY2FyZSIgd2hlbiBoaW50aW5nIHRoZSB0eXBlcyBvZgogIGZ1bmN0aW9uIGFyZ3VtZW50cyBvciByZXR1cm4gdHlwZXMuIEFsbCBvdGhlciBUeXBlQ29uc3RyYWludCdzIGFyZSBlcXVpdmFsZW50CiAgdG8gJ0FueScsIGFuZCBpdHMgJ3R5cGVfY2hlY2snIG1ldGhvZCBpcyBhIG5vLW9wLgogICIiIgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuIHR5cGUoc2VsZikgPT0gdHlwZShvdGhlcikKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICdBbnknCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgICMgVE9ETyhCRUFNLTM3MzApOiBGaXggdHlwZWhpbnRzLlR5cGVWYXJpYWJsZSBpc3N1ZXMgd2l0aCBfX2hhc2hfXy4KICAgIHJldHVybiBoYXNoKGlkKHNlbGYpKQoKICBkZWYgdHlwZV9jaGVjayhzZWxmLCBpbnN0YW5jZSk6CiAgICBwYXNzCgoKY2xhc3MgVHlwZVZhcmlhYmxlKEFueVR5cGVDb25zdHJhaW50KToKCiAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgogICAgc2VsZi5uYW1lID0gbmFtZQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiB0eXBlKHNlbGYpID09IHR5cGUob3RoZXIpIGFuZCBzZWxmLm5hbWUgPT0gb3RoZXIubmFtZQoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICAjIFRPRE8oQkVBTS0zNzMwKTogRml4IHR5cGVoaW50cy5UeXBlVmFyaWFibGUgaXNzdWVzIHdpdGggX19oYXNoX18uCiAgICByZXR1cm4gaGFzaChpZChzZWxmKSkKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICdUeXBlVmFyaWFibGVbJXNdJyAlIHNlbGYubmFtZQoKICBkZWYgbWF0Y2hfdHlwZV92YXJpYWJsZXMoc2VsZiwgY29uY3JldGVfdHlwZSk6CiAgICByZXR1cm4ge3NlbGY6IGNvbmNyZXRlX3R5cGV9CgogIGRlZiBiaW5kX3R5cGVfdmFyaWFibGVzKHNlbGYsIGJpbmRpbmdzKToKICAgIHJldHVybiBiaW5kaW5ncy5nZXQoc2VsZiwgc2VsZikKCgpjbGFzcyBVbmlvbkhpbnQoQ29tcG9zaXRlVHlwZUhpbnQpOgogICIiIkEgVW5pb24gdHlwZS1oaW50LiBVbmlvbltYLCBZXSBhY2NlcHRzIGluc3RhbmNlcyBvZiB0eXBlIFggT1IgdHlwZSBZLgoKICBEdXBsaWNhdGUgdHlwZSBwYXJhbWV0ZXJzIGFyZSBpZ25vcmVkLiBBZGRpdG9uYWxseSwgTmVzdGVkIFVuaW9uIGhpbnRzIHdpbGwKICBiZSBmbGF0dGVuZWQgb3V0LiBGb3IgZXhhbXBsZToKCiAgICAqIFVuaW9uW1VuaW9uW3N0ciwgaW50XSwgYm9vbF0gLT4gVW5pb25bc3RyLCBpbnQsIGJvb2xdCgogIEEgY2FuZGlkYXRlIHR5cGUgaW5zdGFuY2Ugc2F0aXNmaWVzIGEgVW5pb25Db25zdHJhaW50IGlmIGl0IGlzIGFuCiAgaW5zdGFuY2Ugb2YgYW55IG9mIHRoZSBwYXJhbWV0ZXJpemVkICd1bmlvbl90eXBlcycgZm9yIGEgVW5pb24uCgogIFVuaW9uW1hdIGlzIGRpc2FsbG93ZWQsIGFuZCBhbGwgdHlwZSBwYXJhbWV0ZXJzIHdpbGwgYmUgc2FuaXR5IGNoZWNrZWQgdG8KICBlbnN1cmUgY29tcGF0aWJpbGl0eSB3aXRoIG5lc3RlZCB0eXBlLWhpbnRzLgoKICBXaGVuIGNvbXBhcmluZyB0d28gVW5pb24gaGludHMsIG9yZGVyaW5nIGlzIGVuZm9yY2VkIGJlZm9yZSBjb21wYXJpc29uLgoKICAgICogVW5pb25baW50LCBzdHJdID09IFVuaW9uW3N0ciwgaW50XQogICIiIgoKICBjbGFzcyBVbmlvbkNvbnN0cmFpbnQoVHlwZUNvbnN0cmFpbnQpOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1bmlvbl90eXBlcyk6CiAgICAgIHNlbGYudW5pb25fdHlwZXMgPSBzZXQodW5pb25fdHlwZXMpCgogICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICAgIHJldHVybiAoaXNpbnN0YW5jZShvdGhlciwgVW5pb25IaW50LlVuaW9uQ29uc3RyYWludCkKICAgICAgICAgICAgICBhbmQgc2VsZi51bmlvbl90eXBlcyA9PSBvdGhlci51bmlvbl90eXBlcykKCiAgICBkZWYgX19oYXNoX18oc2VsZik6CiAgICAgIHJldHVybiAxICsgc3VtKGhhc2godCkgZm9yIHQgaW4gc2VsZi51bmlvbl90eXBlcykKCiAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICMgU29ydGluZyB0aGUgdHlwZSBuYW1lIHN0cmluZ3Mgc2ltcGxpZmllcyB1bml0IHRlc3RzLgogICAgICByZXR1cm4gJ1VuaW9uWyVzXScgJSAoJywgJy5qb2luKHNvcnRlZChfdW5pZmllZF9yZXByKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0IGluIHNlbGYudW5pb25fdHlwZXMpKSkKCiAgICBkZWYgX2lubmVyX3R5cGVzKHNlbGYpOgogICAgICBmb3IgdCBpbiBzZWxmLnVuaW9uX3R5cGVzOgogICAgICAgIHlpZWxkIHQKCiAgICBkZWYgX2NvbnNpc3RlbnRfd2l0aF9jaGVja18oc2VsZiwgc3ViKToKICAgICAgaWYgaXNpbnN0YW5jZShzdWIsIFVuaW9uQ29uc3RyYWludCk6CiAgICAgICAgIyBBIHVuaW9uIHR5cGUgaXMgY29tcGF0aWJsZSBpZiBldmVyeSBwb3NzaWJsZSB0eXBlIGlzIGNvbXBhdGlibGUuCiAgICAgICAgIyBFLmcuIFVuaW9uW0EsIEIsIENdID4gVW5pb25bQSwgQl0uCiAgICAgICAgcmV0dXJuIGFsbChpc19jb25zaXN0ZW50X3dpdGgoZWxlbSwgc2VsZikKICAgICAgICAgICAgICAgICAgIGZvciBlbGVtIGluIHN1Yi51bmlvbl90eXBlcykKICAgICAgIyBPdGhlciBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCBhdCBsZWFzdCBvbmUgb2YgdGhpcyB1bmlvbidzIHN1YnR5cGVzLgogICAgICAjIEUuZy4gVW5pb25bQSwgQiwgQ10gPiBUIGlmIFQgPiBBIG9yIFQgPiBCIG9yIFQgPiBDLgogICAgICByZXR1cm4gYW55KGlzX2NvbnNpc3RlbnRfd2l0aChzdWIsIGVsZW0pCiAgICAgICAgICAgICAgICAgZm9yIGVsZW0gaW4gc2VsZi51bmlvbl90eXBlcykKCiAgICBkZWYgdHlwZV9jaGVjayhzZWxmLCBpbnN0YW5jZSk6CiAgICAgIGVycm9yX21zZyA9ICcnCiAgICAgIGZvciB0IGluIHNlbGYudW5pb25fdHlwZXM6CiAgICAgICAgdHJ5OgogICAgICAgICAgY2hlY2tfY29uc3RyYWludCh0LCBpbnN0YW5jZSkKICAgICAgICAgIHJldHVybgogICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZToKICAgICAgICAgIGVycm9yX21zZyA9IHN0cihlKQogICAgICAgICAgY29udGludWUKCiAgICAgIHJhaXNlIENvbXBvc2l0ZVR5cGVIaW50RXJyb3IoCiAgICAgICAgICAnJXMgdHlwZS1jb25zdHJhaW50IHZpb2xhdGVkLiBFeHBlY3RlZCBhbiBpbnN0YW5jZSBvZiBvbmUgb2Y6ICVzLCAnCiAgICAgICAgICAncmVjZWl2ZWQgJXMgaW5zdGVhZC4lcycKICAgICAgICAgICUgKHJlcHIoc2VsZiksCiAgICAgICAgICAgICB0dXBsZShzb3J0ZWQoX3VuaWZpZWRfcmVwcih0KSBmb3IgdCBpbiBzZWxmLnVuaW9uX3R5cGVzKSksCiAgICAgICAgICAgICBpbnN0YW5jZS5fX2NsYXNzX18uX19uYW1lX18sIGVycm9yX21zZykpCgogIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCB0eXBlX3BhcmFtcyk6CiAgICBpZiBub3QgaXNpbnN0YW5jZSh0eXBlX3BhcmFtcywgKGNvbGxlY3Rpb25zLlNlcXVlbmNlLCBzZXQpKToKICAgICAgcmFpc2UgVHlwZUVycm9yKCdDYW5ub3QgY3JlYXRlIFVuaW9uIHdpdGhvdXQgYSBzZXF1ZW5jZSBvZiB0eXBlcy4nKQoKICAgICMgRmxhdHRlbiBuZXN0ZWQgVW5pb24ncyBhbmQgZHVwbGljYXRlZCByZXBlYXRlZCB0eXBlIGhpbnRzLgogICAgcGFyYW1zID0gc2V0KCkKICAgIGZvciB0IGluIHR5cGVfcGFyYW1zOgogICAgICB2YWxpZGF0ZV9jb21wb3NpdGVfdHlwZV9wYXJhbSgKICAgICAgICAgIHQsIGVycm9yX21zZ19wcmVmaXg9J0FsbCBwYXJhbWV0ZXJzIHRvIGEgVW5pb24gaGludCcKICAgICAgKQoKICAgICAgaWYgaXNpbnN0YW5jZSh0LCBzZWxmLlVuaW9uQ29uc3RyYWludCk6CiAgICAgICAgcGFyYW1zIHw9IHQudW5pb25fdHlwZXMKICAgICAgZWxzZToKICAgICAgICBwYXJhbXMuYWRkKHQpCgogICAgaWYgQW55IGluIHBhcmFtczoKICAgICAgcmV0dXJuIEFueQogICAgZWxpZiBsZW4ocGFyYW1zKSA9PSAxOgogICAgICByZXR1cm4gbmV4dChpdGVyKHBhcmFtcykpCiAgICByZXR1cm4gc2VsZi5VbmlvbkNvbnN0cmFpbnQocGFyYW1zKQoKClVuaW9uQ29uc3RyYWludCA9IFVuaW9uSGludC5VbmlvbkNvbnN0cmFpbnQKCgpjbGFzcyBPcHRpb25hbEhpbnQoVW5pb25IaW50KToKICAiIiJBbiBPcHRpb24gdHlwZS1oaW50LiBPcHRpb25hbFtYXSBhY2NlcHRzIGluc3RhbmNlcyBvZiBYIG9yIE5vbmUuCgogIFRoZSBPcHRpb25hbFtYXSBmYWN0b3J5IGZ1bmN0aW9uIHByb3hpZXMgdG8gVW5pb25bWCwgdHlwZShOb25lKV0KICAiIiIKCiAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIHB5X3R5cGUpOgogICAgIyBBIHNpbmdsZSB0eXBlIG11c3QgaGF2ZSBiZWVuIHBhc3NlZC4KICAgIGlmIGlzaW5zdGFuY2UocHlfdHlwZSwgY29sbGVjdGlvbnMuU2VxdWVuY2UpOgogICAgICByYWlzZSBUeXBlRXJyb3IoJ0FuIE9wdGlvbiB0eXBlLWhpbnQgb25seSBhY2NlcHRzIGEgc2luZ2xlIHR5cGUgJwogICAgICAgICAgICAgICAgICAgICAgJ3BhcmFtZXRlci4nKQoKICAgIHJldHVybiBVbmlvbltweV90eXBlLCB0eXBlKE5vbmUpXQoKCmNsYXNzIFR1cGxlSGludChDb21wb3NpdGVUeXBlSGludCk6CiAgIiIiQSBUdXBsZSB0eXBlLWhpbnQuCgogIFR1cGxlIGNhbiBhY2NlcHQgMSBvciBtb3JlIHR5cGUtaGludCBwYXJhbWV0ZXJzLgoKICBUdXBsZVtYLCBZXSByZXByZXNlbnRzIGEgdHVwbGUgb2YgKmV4YWN0bHkqIHR3byBlbGVtZW50cywgd2l0aCB0aGUgZmlyc3QKICBiZWluZyBvZiB0eXBlICdYJyBhbmQgdGhlIHNlY29uZCBhbiBpbnN0YW5jZSBvZiB0eXBlICdZJy4KCiAgICAqICgxLCAyKSBzYXRpc2ZpZXMgVHVwbGVbaW50LCBpbnRdCgogIEFkZGl0aW9uYWxseSwgb25lIGlzIGFibGUgdG8gdHlwZS1oaW50IGFuIGFyYml0YXJ5IGxlbmd0aCwgaG9tb2dlbmVvdXMgdHVwbGUKICBieSBwYXNzaW5nIHRoZSBFbGxpcHNpcyAoLi4uKSBvYmplY3QgYXMgdGhlIHNlY29uZCBwYXJhbWV0ZXIuCgogIEFzIGFuIGV4YW1wbGUsIFR1cGxlW3N0ciwgLi4uXSBpbmRpY2F0ZXMgYSB0dXBsZSBvZiBhbnkgbGVuZ3RoIHdpdGggZWFjaAogIGVsZW1lbnQgYmVpbmcgYW4gaW5zdGFuY2Ugb2YgJ3N0cicuCiAgIiIiCgogIGNsYXNzIFR1cGxlU2VxdWVuY2VDb25zdHJhaW50KFNlcXVlbmNlVHlwZUNvbnN0cmFpbnQpOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlX3BhcmFtKToKICAgICAgc3VwZXIoVHVwbGVIaW50LlR1cGxlU2VxdWVuY2VDb25zdHJhaW50LCBzZWxmKS5fX2luaXRfXyh0eXBlX3BhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1cGxlKQoKICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgcmV0dXJuICdUdXBsZVslcywgLi4uXScgJSBfdW5pZmllZF9yZXByKHNlbGYuaW5uZXJfdHlwZSkKCiAgICBkZWYgX2NvbnNpc3RlbnRfd2l0aF9jaGVja18oc2VsZiwgc3ViKToKICAgICAgaWYgaXNpbnN0YW5jZShzdWIsIFR1cGxlQ29uc3RyYWludCk6CiAgICAgICAgIyBFLmcuIFR1cGxlW0EsIEJdIDwgVHVwbGVbQywgLi4uXSBpZmYgQSA8IEMgYW5kIEIgPCBDLgogICAgICAgIHJldHVybiBhbGwoaXNfY29uc2lzdGVudF93aXRoKGVsZW0sIHNlbGYuaW5uZXJfdHlwZSkKICAgICAgICAgICAgICAgICAgIGZvciBlbGVtIGluIHN1Yi50dXBsZV90eXBlcykKICAgICAgcmV0dXJuIHN1cGVyKFR1cGxlU2VxdWVuY2VDb25zdHJhaW50LCBzZWxmKS5fY29uc2lzdGVudF93aXRoX2NoZWNrXyhzdWIpCgogIGNsYXNzIFR1cGxlQ29uc3RyYWludChJbmRleGFibGVUeXBlQ29uc3RyYWludCk6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGVfcGFyYW1zKToKICAgICAgc2VsZi50dXBsZV90eXBlcyA9IHR1cGxlKHR5cGVfcGFyYW1zKQoKICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgICByZXR1cm4gKGlzaW5zdGFuY2Uob3RoZXIsIFR1cGxlSGludC5UdXBsZUNvbnN0cmFpbnQpCiAgICAgICAgICAgICAgYW5kIHNlbGYudHVwbGVfdHlwZXMgPT0gb3RoZXIudHVwbGVfdHlwZXMpCgogICAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgICByZXR1cm4gaGFzaChzZWxmLnR1cGxlX3R5cGVzKQoKICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgcmV0dXJuICdUdXBsZVslc10nICUgKCcsICcuam9pbihfdW5pZmllZF9yZXByKHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHQgaW4gc2VsZi50dXBsZV90eXBlcykpCgogICAgZGVmIF9pbm5lcl90eXBlcyhzZWxmKToKICAgICAgZm9yIHQgaW4gc2VsZi50dXBsZV90eXBlczoKICAgICAgICB5aWVsZCB0CgogICAgZGVmIF9jb25zdHJhaW50X2Zvcl9pbmRleChzZWxmLCBpZHgpOgogICAgICAiIiJSZXR1cm5zIHRoZSB0eXBlIGF0IHRoZSBnaXZlbiBpbmRleC4iIiIKICAgICAgcmV0dXJuIHNlbGYudHVwbGVfdHlwZXNbaWR4XQoKICAgIGRlZiBfY29uc2lzdGVudF93aXRoX2NoZWNrXyhzZWxmLCBzdWIpOgogICAgICByZXR1cm4gKGlzaW5zdGFuY2Uoc3ViLCBzZWxmLl9fY2xhc3NfXykKICAgICAgICAgICAgICBhbmQgbGVuKHN1Yi50dXBsZV90eXBlcykgPT0gbGVuKHNlbGYudHVwbGVfdHlwZXMpCiAgICAgICAgICAgICAgYW5kIGFsbChpc19jb25zaXN0ZW50X3dpdGgoc3ViX2VsZW0sIGVsZW0pCiAgICAgICAgICAgICAgICAgICAgICBmb3Igc3ViX2VsZW0sIGVsZW0KICAgICAgICAgICAgICAgICAgICAgIGluIHppcChzdWIudHVwbGVfdHlwZXMsIHNlbGYudHVwbGVfdHlwZXMpKSkKCiAgICBkZWYgdHlwZV9jaGVjayhzZWxmLCB0dXBsZV9pbnN0YW5jZSk6CiAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHR1cGxlX2luc3RhbmNlLCB0dXBsZSk6CiAgICAgICAgcmFpc2UgQ29tcG9zaXRlVHlwZUhpbnRFcnJvcigKICAgICAgICAgICAgIlR1cGxlIHR5cGUgY29uc3RyYWludCB2aW9sYXRlZC4gVmFsaWQgb2JqZWN0IGluc3RhbmNlIG11c3QgYmUgb2YgIgogICAgICAgICAgICAidHlwZSAndHVwbGUnLiBJbnN0ZWFkLCBhbiBpbnN0YW5jZSBvZiAnJXMnIHdhcyByZWNlaXZlZC4iCiAgICAgICAgICAgICUgdHVwbGVfaW5zdGFuY2UuX19jbGFzc19fLl9fbmFtZV9fKQoKICAgICAgaWYgbGVuKHR1cGxlX2luc3RhbmNlKSAhPSBsZW4oc2VsZi50dXBsZV90eXBlcyk6CiAgICAgICAgcmFpc2UgQ29tcG9zaXRlVHlwZUhpbnRFcnJvcigKICAgICAgICAgICAgJ1Bhc3NlZCBvYmplY3QgaW5zdGFuY2UgaXMgb2YgdGhlIHByb3BlciB0eXBlLCBidXQgZGlmZmVycyBpbiAnCiAgICAgICAgICAgICdsZW5ndGggZnJvbSB0aGUgaGludGVkIHR5cGUuIEV4cGVjdGVkIGEgdHVwbGUgb2YgbGVuZ3RoICVzLCAnCiAgICAgICAgICAgICdyZWNlaXZlZCBhIHR1cGxlIG9mIGxlbmd0aCAlcy4nCiAgICAgICAgICAgICUgKGxlbihzZWxmLnR1cGxlX3R5cGVzKSwgbGVuKHR1cGxlX2luc3RhbmNlKSkpCgogICAgICBmb3IgdHlwZV9wb3MsIChleHBlY3RlZCwgYWN0dWFsKSBpbiBlbnVtZXJhdGUoemlwKHNlbGYudHVwbGVfdHlwZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVwbGVfaW5zdGFuY2UpKToKICAgICAgICB0cnk6CiAgICAgICAgICBjaGVja19jb25zdHJhaW50KGV4cGVjdGVkLCBhY3R1YWwpCiAgICAgICAgICBjb250aW51ZQogICAgICAgIGV4Y2VwdCBTaW1wbGVUeXBlSGludEVycm9yOgogICAgICAgICAgcmFpc2UgQ29tcG9zaXRlVHlwZUhpbnRFcnJvcigKICAgICAgICAgICAgICAnJXMgaGludCB0eXBlLWNvbnN0cmFpbnQgdmlvbGF0ZWQuIFRoZSB0eXBlIG9mIGVsZW1lbnQgIyVzIGluICcKICAgICAgICAgICAgICAndGhlIHBhc3NlZCB0dXBsZSBpcyBpbmNvcnJlY3QuIEV4cGVjdGVkIGFuIGluc3RhbmNlIG9mICcKICAgICAgICAgICAgICAndHlwZSAlcywgaW5zdGVhZCByZWNlaXZlZCBhbiBpbnN0YW5jZSBvZiB0eXBlICVzLicKICAgICAgICAgICAgICAlIChyZXByKHNlbGYpLCB0eXBlX3BvcywgX3VuaWZpZWRfcmVwcihleHBlY3RlZCksCiAgICAgICAgICAgICAgICAgYWN0dWFsLl9fY2xhc3NfXy5fX25hbWVfXykpCiAgICAgICAgZXhjZXB0IENvbXBvc2l0ZVR5cGVIaW50RXJyb3IgYXMgZToKICAgICAgICAgIHJhaXNlIENvbXBvc2l0ZVR5cGVIaW50RXJyb3IoCiAgICAgICAgICAgICAgJyVzIGhpbnQgdHlwZS1jb25zdHJhaW50IHZpb2xhdGVkLiBUaGUgdHlwZSBvZiBlbGVtZW50ICMlcyBpbiAnCiAgICAgICAgICAgICAgJ3RoZSBwYXNzZWQgdHVwbGUgaXMgaW5jb3JyZWN0LiAlcycKICAgICAgICAgICAgICAlIChyZXByKHNlbGYpLCB0eXBlX3BvcywgZSkpCgogICAgZGVmIG1hdGNoX3R5cGVfdmFyaWFibGVzKHNlbGYsIGNvbmNyZXRlX3R5cGUpOgogICAgICBiaW5kaW5ncyA9IHt9CiAgICAgIGlmIGlzaW5zdGFuY2UoY29uY3JldGVfdHlwZSwgVHVwbGVDb25zdHJhaW50KToKICAgICAgICBmb3IgYSwgYiBpbiB6aXAoc2VsZi50dXBsZV90eXBlcywgY29uY3JldGVfdHlwZS50dXBsZV90eXBlcyk6CiAgICAgICAgICBiaW5kaW5ncy51cGRhdGUobWF0Y2hfdHlwZV92YXJpYWJsZXMoYSwgYikpCiAgICAgIHJldHVybiBiaW5kaW5ncwoKICAgIGRlZiBiaW5kX3R5cGVfdmFyaWFibGVzKHNlbGYsIGJpbmRpbmdzKToKICAgICAgYm91bmRfdHVwbGVfdHlwZXMgPSB0dXBsZSgKICAgICAgICAgIGJpbmRfdHlwZV92YXJpYWJsZXModCwgYmluZGluZ3MpIGZvciB0IGluIHNlbGYudHVwbGVfdHlwZXMpCiAgICAgIGlmIGJvdW5kX3R1cGxlX3R5cGVzID09IHNlbGYudHVwbGVfdHlwZXM6CiAgICAgICAgcmV0dXJuIHNlbGYKICAgICAgcmV0dXJuIFR1cGxlW2JvdW5kX3R1cGxlX3R5cGVzXQoKICBkZWYgX19nZXRpdGVtX18oc2VsZiwgdHlwZV9wYXJhbXMpOgogICAgZWxsaXBzaXMgPSBGYWxzZQoKICAgIGlmIG5vdCBpc2luc3RhbmNlKHR5cGVfcGFyYW1zLCBjb2xsZWN0aW9ucy5JdGVyYWJsZSk6CiAgICAgICMgU3BlY2lhbCBjYXNlIGZvciBoaW50aW5nIHR1cGxlcyB3aXRoIGFyaXR5LTEuCiAgICAgIHR5cGVfcGFyYW1zID0gKHR5cGVfcGFyYW1zLCkKCiAgICBpZiB0eXBlX3BhcmFtcyBhbmQgdHlwZV9wYXJhbXNbLTFdID09IEVsbGlwc2lzOgogICAgICBpZiBsZW4odHlwZV9wYXJhbXMpICE9IDI6CiAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdFbGxpcHNpcyBjYW4gb25seSBiZSB1c2VkIHRvIHR5cGUtaGludCBhbiBhcmJpdHJhcnkgJwogICAgICAgICAgICAgICAgICAgICAgICAnbGVuZ3RoIHR1cGxlIG9mIGNvbnRhaW5pbmcgYSBzaW5nbGUgdHlwZTogJwogICAgICAgICAgICAgICAgICAgICAgICAnVHVwbGVbQSwgLi4uXS4nKQogICAgICAjIFR1cGxlW0EsIC4uLl0gaW5kaWNhdGVzIGFuIGFyYml0YXJ5IGxlbmd0aCBob21vZ2VuZW91cyB0dXBsZS4KICAgICAgdHlwZV9wYXJhbXMgPSB0eXBlX3BhcmFtc1s6MV0KICAgICAgZWxsaXBzaXMgPSBUcnVlCgogICAgZm9yIHQgaW4gdHlwZV9wYXJhbXM6CiAgICAgIHZhbGlkYXRlX2NvbXBvc2l0ZV90eXBlX3BhcmFtKAogICAgICAgICAgdCwKICAgICAgICAgIGVycm9yX21zZ19wcmVmaXg9J0FsbCBwYXJhbWV0ZXJzIHRvIGEgVHVwbGUgaGludCcKICAgICAgKQoKICAgIGlmIGVsbGlwc2lzOgogICAgICByZXR1cm4gc2VsZi5UdXBsZVNlcXVlbmNlQ29uc3RyYWludCh0eXBlX3BhcmFtc1swXSkKICAgIHJldHVybiBzZWxmLlR1cGxlQ29uc3RyYWludCh0eXBlX3BhcmFtcykKCgpUdXBsZUNvbnN0cmFpbnQgPSBUdXBsZUhpbnQuVHVwbGVDb25zdHJhaW50ClR1cGxlU2VxdWVuY2VDb25zdHJhaW50ID0gVHVwbGVIaW50LlR1cGxlU2VxdWVuY2VDb25zdHJhaW50CgoKY2xhc3MgTGlzdEhpbnQoQ29tcG9zaXRlVHlwZUhpbnQpOgogICIiIkEgTGlzdCB0eXBlLWhpbnQuCgogIExpc3RbWF0gcmVwcmVzZW50cyBhbiBpbnN0YW5jZSBvZiBhIGxpc3QgcG9wdWxhdGVkIGJ5IGEgc2luZ2xlIGhvbW9nZW5lb3VzCiAgdHlwZS4gVGhlIHBhcmFtZXRlcml6ZWQgdHlwZSAnWCcgY2FuIGVpdGhlciBiZSBhIGJ1aWx0LWluIFB5dGhvbiB0eXBlIG9yIGFuCiAgaW5zdGFuY2Ugb2YgYW5vdGhlciBUeXBlQ29uc3RyYWludC4KCiAgICAqIFsnMScsICcyJywgJzMnXSBzYXRpc2ZpZXMgTGlzdFtzdHJdCiAgIiIiCgogIGNsYXNzIExpc3RDb25zdHJhaW50KFNlcXVlbmNlVHlwZUNvbnN0cmFpbnQpOgoKICAgIGRlZiAgX19pbml0X18oc2VsZiwgbGlzdF90eXBlKToKICAgICAgc3VwZXIoTGlzdEhpbnQuTGlzdENvbnN0cmFpbnQsIHNlbGYpLl9faW5pdF9fKGxpc3RfdHlwZSwgbGlzdCkKCiAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgIHJldHVybiAnTGlzdFslc10nICUgX3VuaWZpZWRfcmVwcihzZWxmLmlubmVyX3R5cGUpCgogIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCB0KToKICAgIHZhbGlkYXRlX2NvbXBvc2l0ZV90eXBlX3BhcmFtKHQsIGVycm9yX21zZ19wcmVmaXg9J1BhcmFtZXRlciB0byBMaXN0IGhpbnQnKQoKICAgIHJldHVybiBzZWxmLkxpc3RDb25zdHJhaW50KHQpCgoKTGlzdENvbnN0cmFpbnQgPSBMaXN0SGludC5MaXN0Q29uc3RyYWludAoKCmNsYXNzIEtWSGludChDb21wb3NpdGVUeXBlSGludCk6CiAgIiIiQSBLViB0eXBlLWhpbnQsIHJlcHJlc2VudHMgYSBLZXktVmFsdWUgcGFpciBvZiBhIHBhcnRpY3VsYXIgdHlwZS4KCiAgSW50ZXJuYWxseSwgS1ZbWCwgWV0gcHJveGllcyB0byBUdXBsZVtYLCBZXS4gQSBLViB0eXBlLWhpbnQgYWNjZXB0cyBvbmx5CiAgYWNjZXB0cyBleGFjdGx5IHR3byB0eXBlLXBhcmFtZXRlcnMuIFRoZSBmaXJzdCByZXByZXNlbnRzIHRoZSByZXF1aXJlZAogIGtleS10eXBlIGFuZCB0aGUgc2Vjb25kIHRoZSByZXF1aXJlZCB2YWx1ZS10eXBlLgogICIiIgoKICBkZWYgX19nZXRpdGVtX18oc2VsZiwgdHlwZV9wYXJhbXMpOgogICAgaWYgbm90IGlzaW5zdGFuY2UodHlwZV9wYXJhbXMsIHR1cGxlKToKICAgICAgcmFpc2UgVHlwZUVycm9yKCdQYXJhbWV0ZXIgdG8gS1YgdHlwZS1oaW50IG11c3QgYmUgYSB0dXBsZSBvZiB0eXBlczogJwogICAgICAgICAgICAgICAgICAgICAgJ0tWWy4uLCAuLl0uJykKCiAgICBpZiBsZW4odHlwZV9wYXJhbXMpICE9IDI6CiAgICAgIHJhaXNlIFR5cGVFcnJvcigKICAgICAgICAgICdMZW5ndGggb2YgcGFyYW1ldGVycyB0byBhIEtWIHR5cGUtaGludCBtdXN0IGJlIGV4YWN0bHkgMi4gUGFzc2VkICcKICAgICAgICAgICdwYXJhbWV0ZXJzOiAlcywgaGF2ZSBhIGxlbmd0aCBvZiAlcy4nICUKICAgICAgICAgICh0eXBlX3BhcmFtcywgbGVuKHR5cGVfcGFyYW1zKSkKICAgICAgKQoKICAgIHJldHVybiBUdXBsZVt0eXBlX3BhcmFtc10KCgpkZWYga2V5X3ZhbHVlX3R5cGVzKGt2KToKICAiIiJSZXR1cm5zIHRoZSBrZXkgYW5kIHZhbHVlIHR5cGUgb2YgYSBLViB0eXBlLWhpbnQuCgogIEFyZ3M6CiAgICBrdjogQW4gaW5zdGFuY2Ugb2YgYSBUeXBlQ29uc3RyYWludCBzdWItY2xhc3MuCiAgUmV0dXJuczoKICAgIEEgdHVwbGU6IChrZXlfdHlwZSwgdmFsdWVfdHlwZSkgaWYgdGhlIHBhc3NlZCB0eXBlLWhpbnQgaXMgYW4gaW5zdGFuY2Ugb2YgYQogICAgS1YgdHlwZS1oaW50LCBhbmQgKEFueSwgQW55KSBvdGhlcndpc2UuCiAgIiIiCiAgaWYgaXNpbnN0YW5jZShrdiwgVHVwbGVIaW50LlR1cGxlQ29uc3RyYWludCk6CiAgICByZXR1cm4ga3YudHVwbGVfdHlwZXMKICByZXR1cm4gQW55LCBBbnkKCgpjbGFzcyBEaWN0SGludChDb21wb3NpdGVUeXBlSGludCk6CiAgIiIiQSBEaWN0IHR5cGUtaGludC4KCiAgRGljdFtLLCBWXSBSZXByZXNlbnRzIGEgZGljdGlvbmFyeSB3aGVyZSBhbGwga2V5cyBhcmUgb2YgYSBwYXJ0aWN1bGFyIHR5cGUKICBhbmQgYWxsIHZhbHVlcyBhcmUgb2YgYW5vdGhlciAocG9zc2libGUgdGhlIHNhbWUpIHR5cGUuCiAgIiIiCgogIGNsYXNzIERpY3RDb25zdHJhaW50KFR5cGVDb25zdHJhaW50KToKCiAgICBkZWYgX19pbml0X18oc2VsZiwga2V5X3R5cGUsIHZhbHVlX3R5cGUpOgogICAgICBzZWxmLmtleV90eXBlID0ga2V5X3R5cGUKICAgICAgc2VsZi52YWx1ZV90eXBlID0gdmFsdWVfdHlwZQoKICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgcmV0dXJuICdEaWN0WyVzLCAlc10nICUgKF91bmlmaWVkX3JlcHIoc2VsZi5rZXlfdHlwZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdW5pZmllZF9yZXByKHNlbGYudmFsdWVfdHlwZSkpCgogICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICAgIHJldHVybiAodHlwZShzZWxmKSA9PSB0eXBlKG90aGVyKQogICAgICAgICAgICAgIGFuZCBzZWxmLmtleV90eXBlID09IG90aGVyLmtleV90eXBlCiAgICAgICAgICAgICAgYW5kIHNlbGYudmFsdWVfdHlwZSA9PSBvdGhlci52YWx1ZV90eXBlKQoKICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgICAgcmV0dXJuIGhhc2goKHR5cGUoc2VsZiksIHNlbGYua2V5X3R5cGUsIHNlbGYudmFsdWVfdHlwZSkpCgogICAgZGVmIF9pbm5lcl90eXBlcyhzZWxmKToKICAgICAgeWllbGQgc2VsZi5rZXlfdHlwZQogICAgICB5aWVsZCBzZWxmLnZhbHVlX3R5cGUKCiAgICBkZWYgX2NvbnNpc3RlbnRfd2l0aF9jaGVja18oc2VsZiwgc3ViKToKICAgICAgcmV0dXJuIChpc2luc3RhbmNlKHN1Yiwgc2VsZi5fX2NsYXNzX18pCiAgICAgICAgICAgICAgYW5kIGlzX2NvbnNpc3RlbnRfd2l0aChzdWIua2V5X3R5cGUsIHNlbGYua2V5X3R5cGUpCiAgICAgICAgICAgICAgYW5kIGlzX2NvbnNpc3RlbnRfd2l0aChzdWIua2V5X3R5cGUsIHNlbGYua2V5X3R5cGUpKQoKICAgIGRlZiBfcmFpc2VfaGludF9leGNlcHRpb25fb3JfaW5uZXJfZXhjZXB0aW9uKHNlbGYsIGlzX2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY29ycmVjdF9pbnN0YW5jZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyX2Vycm9yX21lc3NhZ2U9JycpOgogICAgICBpbmNvcnJlY3RfdHlwZSA9ICd2YWx1ZXMnIGlmIG5vdCBpc19rZXkgZWxzZSAna2V5cycKICAgICAgaGludGVkX3R5cGUgPSBzZWxmLnZhbHVlX3R5cGUgaWYgbm90IGlzX2tleSBlbHNlIHNlbGYua2V5X3R5cGUKICAgICAgaWYgaW5uZXJfZXJyb3JfbWVzc2FnZToKICAgICAgICByYWlzZSBDb21wb3NpdGVUeXBlSGludEVycm9yKAogICAgICAgICAgICAnJXMgaGludCAlcy10eXBlIGNvbnN0cmFpbnQgdmlvbGF0ZWQuIEFsbCAlcyBzaG91bGQgYmUgb2YgdHlwZSAnCiAgICAgICAgICAgICclcy4gSW5zdGVhZDogJXMnCiAgICAgICAgICAgICUgKHJlcHIoc2VsZiksIGluY29ycmVjdF90eXBlWzotMV0sIGluY29ycmVjdF90eXBlLAogICAgICAgICAgICAgICBfdW5pZmllZF9yZXByKGhpbnRlZF90eXBlKSwgaW5uZXJfZXJyb3JfbWVzc2FnZSkKICAgICAgICApCiAgICAgIGVsc2U6CiAgICAgICAgcmFpc2UgQ29tcG9zaXRlVHlwZUhpbnRFcnJvcigKICAgICAgICAgICAgJyVzIGhpbnQgJXMtdHlwZSBjb25zdHJhaW50IHZpb2xhdGVkLiBBbGwgJXMgc2hvdWxkIGJlIG9mICcKICAgICAgICAgICAgJ3R5cGUgJXMuIEluc3RlYWQsICVzIGlzIG9mIHR5cGUgJXMuJwogICAgICAgICAgICAlIChyZXByKHNlbGYpLCBpbmNvcnJlY3RfdHlwZVs6LTFdLCBpbmNvcnJlY3RfdHlwZSwKICAgICAgICAgICAgICAgX3VuaWZpZWRfcmVwcihoaW50ZWRfdHlwZSksCiAgICAgICAgICAgICAgIGluY29ycmVjdF9pbnN0YW5jZSwgaW5jb3JyZWN0X2luc3RhbmNlLl9fY2xhc3NfXy5fX25hbWVfXykKICAgICAgICApCgogICAgZGVmIHR5cGVfY2hlY2soc2VsZiwgZGljdF9pbnN0YW5jZSk6CiAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGRpY3RfaW5zdGFuY2UsIGRpY3QpOgogICAgICAgIHJhaXNlIENvbXBvc2l0ZVR5cGVIaW50RXJyb3IoCiAgICAgICAgICAgICdEaWN0IHR5cGUtY29uc3RyYWludCB2aW9sYXRlZC4gQWxsIHBhc3NlZCBpbnN0YW5jZXMgbXVzdCBiZSBvZiAnCiAgICAgICAgICAgICd0eXBlIGRpY3QuICVzIGlzIG9mIHR5cGUgJXMuJwogICAgICAgICAgICAlIChkaWN0X2luc3RhbmNlLCBkaWN0X2luc3RhbmNlLl9fY2xhc3NfXy5fX25hbWVfXykpCgogICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBkaWN0X2luc3RhbmNlLml0ZW1zKCk6CiAgICAgICAgdHJ5OgogICAgICAgICAgY2hlY2tfY29uc3RyYWludChzZWxmLmtleV90eXBlLCBrZXkpCiAgICAgICAgZXhjZXB0IENvbXBvc2l0ZVR5cGVIaW50RXJyb3IgYXMgZToKICAgICAgICAgIHNlbGYuX3JhaXNlX2hpbnRfZXhjZXB0aW9uX29yX2lubmVyX2V4Y2VwdGlvbihUcnVlLCBrZXksIHN0cihlKSkKICAgICAgICBleGNlcHQgU2ltcGxlVHlwZUhpbnRFcnJvcjoKICAgICAgICAgIHNlbGYuX3JhaXNlX2hpbnRfZXhjZXB0aW9uX29yX2lubmVyX2V4Y2VwdGlvbihUcnVlLCBrZXkpCgogICAgICAgIHRyeToKICAgICAgICAgIGNoZWNrX2NvbnN0cmFpbnQoc2VsZi52YWx1ZV90eXBlLCB2YWx1ZSkKICAgICAgICBleGNlcHQgQ29tcG9zaXRlVHlwZUhpbnRFcnJvciBhcyBlOgogICAgICAgICAgc2VsZi5fcmFpc2VfaGludF9leGNlcHRpb25fb3JfaW5uZXJfZXhjZXB0aW9uKEZhbHNlLCB2YWx1ZSwgc3RyKGUpKQogICAgICAgIGV4Y2VwdCBTaW1wbGVUeXBlSGludEVycm9yOgogICAgICAgICAgc2VsZi5fcmFpc2VfaGludF9leGNlcHRpb25fb3JfaW5uZXJfZXhjZXB0aW9uKEZhbHNlLCB2YWx1ZSkKCiAgICBkZWYgbWF0Y2hfdHlwZV92YXJpYWJsZXMoc2VsZiwgY29uY3JldGVfdHlwZSk6CiAgICAgIGlmIGlzaW5zdGFuY2UoY29uY3JldGVfdHlwZSwgRGljdENvbnN0cmFpbnQpOgogICAgICAgIGJpbmRpbmdzID0ge30KICAgICAgICBiaW5kaW5ncy51cGRhdGUoCiAgICAgICAgICAgIG1hdGNoX3R5cGVfdmFyaWFibGVzKHNlbGYua2V5X3R5cGUsIGNvbmNyZXRlX3R5cGUua2V5X3R5cGUpKQogICAgICAgIGJpbmRpbmdzLnVwZGF0ZSgKICAgICAgICAgICAgbWF0Y2hfdHlwZV92YXJpYWJsZXMoc2VsZi52YWx1ZV90eXBlLCBjb25jcmV0ZV90eXBlLnZhbHVlX3R5cGUpKQogICAgICAgIHJldHVybiBiaW5kaW5ncwogICAgICByZXR1cm4ge30KCiAgICBkZWYgYmluZF90eXBlX3ZhcmlhYmxlcyhzZWxmLCBiaW5kaW5ncyk6CiAgICAgIGJvdW5kX2tleV90eXBlID0gYmluZF90eXBlX3ZhcmlhYmxlcyhzZWxmLmtleV90eXBlLCBiaW5kaW5ncykKICAgICAgYm91bmRfdmFsdWVfdHlwZSA9IGJpbmRfdHlwZV92YXJpYWJsZXMoc2VsZi52YWx1ZV90eXBlLCBiaW5kaW5ncykKICAgICAgaWYgKGJvdW5kX2tleV90eXBlLCBzZWxmLmtleV90eXBlKSA9PSAoYm91bmRfdmFsdWVfdHlwZSwgc2VsZi52YWx1ZV90eXBlKToKICAgICAgICByZXR1cm4gc2VsZgogICAgICByZXR1cm4gRGljdFtib3VuZF9rZXlfdHlwZSwgYm91bmRfdmFsdWVfdHlwZV0KCiAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIHR5cGVfcGFyYW1zKToKICAgICMgVHlwZSBwYXJhbSBtdXN0IGJlIGEgKGssIHYpIHBhaXIuCiAgICBpZiBub3QgaXNpbnN0YW5jZSh0eXBlX3BhcmFtcywgdHVwbGUpOgogICAgICByYWlzZSBUeXBlRXJyb3IoJ1BhcmFtZXRlciB0byBEaWN0IHR5cGUtaGludCBtdXN0IGJlIGEgdHVwbGUgb2YgdHlwZXM6ICcKICAgICAgICAgICAgICAgICAgICAgICdEaWN0Wy4uLCAuLl0uJykKCiAgICBpZiBsZW4odHlwZV9wYXJhbXMpICE9IDI6CiAgICAgIHJhaXNlIFR5cGVFcnJvcigKICAgICAgICAgICdMZW5ndGggb2YgcGFyYW1ldGVycyB0byBhIERpY3QgdHlwZS1oaW50IG11c3QgYmUgZXhhY3RseSAyLiBQYXNzZWQgJwogICAgICAgICAgJ3BhcmFtZXRlcnM6ICVzLCBoYXZlIGEgbGVuZ3RoIG9mICVzLicgJQogICAgICAgICAgKHR5cGVfcGFyYW1zLCBsZW4odHlwZV9wYXJhbXMpKQogICAgICApCgogICAga2V5X3R5cGUsIHZhbHVlX3R5cGUgPSB0eXBlX3BhcmFtcwoKICAgIHZhbGlkYXRlX2NvbXBvc2l0ZV90eXBlX3BhcmFtKAogICAgICAgIGtleV90eXBlLAogICAgICAgIGVycm9yX21zZ19wcmVmaXg9J0tleS10eXBlIHBhcmFtZXRlciB0byBhIERpY3QgaGludCcKICAgICkKICAgIHZhbGlkYXRlX2NvbXBvc2l0ZV90eXBlX3BhcmFtKAogICAgICAgIHZhbHVlX3R5cGUsCiAgICAgICAgZXJyb3JfbXNnX3ByZWZpeD0nVmFsdWUtdHlwZSBwYXJhbWV0ZXIgdG8gYSBEaWN0IGhpbnQnCiAgICApCgogICAgcmV0dXJuIHNlbGYuRGljdENvbnN0cmFpbnQoa2V5X3R5cGUsIHZhbHVlX3R5cGUpCgoKRGljdENvbnN0cmFpbnQgPSBEaWN0SGludC5EaWN0Q29uc3RyYWludAoKCmNsYXNzIFNldEhpbnQoQ29tcG9zaXRlVHlwZUhpbnQpOgogICIiIkEgU2V0IHR5cGUtaGludC4KCgogIFNldFtYXSBkZWZpbmVzIGEgdHlwZS1oaW50IGZvciBhIHNldCBvZiBob21vZ2VuZW91cyB0eXBlcy4gJ1gnIG1heSBiZSBlaXRoZXIgYQogIGJ1aWx0LWluIFB5dGhvbiB0eXBlIG9yIGEgYW5vdGhlciBuZXN0ZWQgVHlwZUNvbnN0cmFpbnQuCiAgIiIiCgogIGNsYXNzIFNldFR5cGVDb25zdHJhaW50KFNlcXVlbmNlVHlwZUNvbnN0cmFpbnQpOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlX3BhcmFtKToKICAgICAgc3VwZXIoU2V0SGludC5TZXRUeXBlQ29uc3RyYWludCwgc2VsZikuX19pbml0X18odHlwZV9wYXJhbSwgc2V0KQoKICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgcmV0dXJuICdTZXRbJXNdJyAlIF91bmlmaWVkX3JlcHIoc2VsZi5pbm5lcl90eXBlKQoKICBkZWYgX19nZXRpdGVtX18oc2VsZiwgdHlwZV9wYXJhbSk6CiAgICB2YWxpZGF0ZV9jb21wb3NpdGVfdHlwZV9wYXJhbSgKICAgICAgICB0eXBlX3BhcmFtLAogICAgICAgIGVycm9yX21zZ19wcmVmaXg9J1BhcmFtZXRlciB0byBhIFNldCBoaW50JwogICAgKQoKICAgIHJldHVybiBzZWxmLlNldFR5cGVDb25zdHJhaW50KHR5cGVfcGFyYW0pCgoKU2V0VHlwZUNvbnN0cmFpbnQgPSBTZXRIaW50LlNldFR5cGVDb25zdHJhaW50CgoKY2xhc3MgSXRlcmFibGVIaW50KENvbXBvc2l0ZVR5cGVIaW50KToKICAiIiJBbiBJdGVyYWJsZSB0eXBlLWhpbnQuCgogIEl0ZXJhYmxlW1hdIGRlZmluZXMgYSB0eXBlLWhpbnQgZm9yIGFuIG9iamVjdCBpbXBsZW1lbnRpbmcgYW4gJ19faXRlcl9fJwogIG1ldGhvZCB3aGljaCB5aWVsZHMgb2JqZWN0cyB3aGljaCBhcmUgYWxsIG9mIHRoZSBzYW1lIHR5cGUuCiAgIiIiCgogIGNsYXNzIEl0ZXJhYmxlVHlwZUNvbnN0cmFpbnQoU2VxdWVuY2VUeXBlQ29uc3RyYWludCk6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGl0ZXJfdHlwZSk6CiAgICAgIHN1cGVyKEl0ZXJhYmxlSGludC5JdGVyYWJsZVR5cGVDb25zdHJhaW50LCBzZWxmKS5fX2luaXRfXygKICAgICAgICAgIGl0ZXJfdHlwZSwgY29sbGVjdGlvbnMuSXRlcmFibGUpCgogICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICByZXR1cm4gJ0l0ZXJhYmxlWyVzXScgJSBfdW5pZmllZF9yZXByKHNlbGYuaW5uZXJfdHlwZSkKCiAgICBkZWYgX2NvbnNpc3RlbnRfd2l0aF9jaGVja18oc2VsZiwgc3ViKToKICAgICAgaWYgaXNpbnN0YW5jZShzdWIsIFNlcXVlbmNlVHlwZUNvbnN0cmFpbnQpOgogICAgICAgIHJldHVybiBpc19jb25zaXN0ZW50X3dpdGgoc3ViLmlubmVyX3R5cGUsIHNlbGYuaW5uZXJfdHlwZSkKICAgICAgZWxpZiBpc2luc3RhbmNlKHN1YiwgVHVwbGVDb25zdHJhaW50KToKICAgICAgICBpZiBub3Qgc3ViLnR1cGxlX3R5cGVzOgogICAgICAgICAgIyBUaGUgZW1wdHkgdHVwbGUgaXMgY29uc2lzdGVudCB3aXRoIEl0ZXJhdG9yW1RdIGZvciBhbnkgVC4KICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgIyBFYWNoIGVsZW1lbnQgaW4gdGhlIGhldHJvZ2VuaW91cyB0dXBsZSBtdXN0IGJlIGNvbnNpc3RlbnQgd2l0aAogICAgICAgICMgdGhlIGl0ZXJhdG9yIHR5cGUuCiAgICAgICAgIyBFLmcuIFR1cGxlW0EsIEJdIDwgSXRlcmFibGVbQ10gaWYgQSA8IEMgYW5kIEIgPCBDLgogICAgICAgIHJldHVybiBhbGwoaXNfY29uc2lzdGVudF93aXRoKGVsZW0sIHNlbGYuaW5uZXJfdHlwZSkKICAgICAgICAgICAgICAgICAgIGZvciBlbGVtIGluIHN1Yi50dXBsZV90eXBlcykKICAgICAgcmV0dXJuIEZhbHNlCgogIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCB0eXBlX3BhcmFtKToKICAgIHZhbGlkYXRlX2NvbXBvc2l0ZV90eXBlX3BhcmFtKAogICAgICAgIHR5cGVfcGFyYW0sIGVycm9yX21zZ19wcmVmaXg9J1BhcmFtZXRlciB0byBhbiBJdGVyYWJsZSBoaW50JwogICAgKQoKICAgIHJldHVybiBzZWxmLkl0ZXJhYmxlVHlwZUNvbnN0cmFpbnQodHlwZV9wYXJhbSkKCgpJdGVyYWJsZVR5cGVDb25zdHJhaW50ID0gSXRlcmFibGVIaW50Lkl0ZXJhYmxlVHlwZUNvbnN0cmFpbnQKCgpjbGFzcyBJdGVyYXRvckhpbnQoQ29tcG9zaXRlVHlwZUhpbnQpOgogICIiIkFuIEl0ZXJhdG9yIHR5cGUtaGludC4KCiAgSXRlcmF0b3JbWF0gZGVmaW5lcyBhIHR5cGUtaGludCBmb3IgYW4gb2JqZWN0IGltcGxlbWVudGluZyBib3RoICdfX2l0ZXJfXycKICBhbmQgYSAnbmV4dCcgbWV0aG9kIHdoaWNoIHlpZWxkcyBvYmplY3RzIHdoaWNoIGFyZSBhbGwgb2YgdGhlIHNhbWUgdHlwZS4gVHlwZQogIGNoZWNraW5nIGEgdHlwZS1oaW50IG9mIHRoaXMgdHlwZSBpcyBkZWZlcnJlZCBpbiBvcmRlciB0byBhdm9pZCBkZXBsZXRpbmcgdGhlCiAgdW5kZXJseWluZyBsYXppbHkgZ2VuZXJhdGVkIHNlcXVlbmNlLiBTZWUgZGVjb3JhdG9ycy5pbnRlcmxlYXZlX3R5cGVfY2hlY2sgZm9yCiAgZnVydGhlciBpbmZvcm1hdGlvbi4KICAiIiIKCiAgY2xhc3MgSXRlcmF0b3JUeXBlQ29uc3RyYWludChUeXBlQ29uc3RyYWludCk6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHQpOgogICAgICBzZWxmLnlpZWxkZWRfdHlwZSA9IHQKCiAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgIHJldHVybiAnSXRlcmF0b3JbJXNdJyAlIF91bmlmaWVkX3JlcHIoc2VsZi55aWVsZGVkX3R5cGUpCgogICAgZGVmIF9pbm5lcl90eXBlcyhzZWxmKToKICAgICAgeWllbGQgc2VsZi55aWVsZGVkX3R5cGUKCiAgICBkZWYgX2NvbnNpc3RlbnRfd2l0aF9jaGVja18oc2VsZiwgc3ViKToKICAgICAgcmV0dXJuIChpc2luc3RhbmNlKHN1Yiwgc2VsZi5fX2NsYXNzX18pCiAgICAgICAgICAgICAgYW5kIGlzX2NvbnNpc3RlbnRfd2l0aChzdWIueWllbGRlZF90eXBlLCBzZWxmLnlpZWxkZWRfdHlwZSkpCgogICAgZGVmIHR5cGVfY2hlY2soc2VsZiwgaW5zdGFuY2UpOgogICAgICAjIFNwZWNpYWwgY2FzZSBmb3IgbGF6eSB0eXBlcywgd2Ugb25seSBuZWVkIHRvIGVuZm9yY2UgdGhlIHVuZGVybHlpbmcKICAgICAgIyB0eXBlLiBUaGlzIGF2b2lkIGhhdmluZyB0byBjb21wdXRlIHRoZSBlbnRpcmV0eSBvZiB0aGUgZ2VuZXJhdG9yL2l0ZXIuCiAgICAgIHRyeToKICAgICAgICBjaGVja19jb25zdHJhaW50KHNlbGYueWllbGRlZF90eXBlLCBpbnN0YW5jZSkKICAgICAgICByZXR1cm4KICAgICAgZXhjZXB0IENvbXBvc2l0ZVR5cGVIaW50RXJyb3IgYXMgZToKICAgICAgICByYWlzZSBDb21wb3NpdGVUeXBlSGludEVycm9yKAogICAgICAgICAgICAnJXMgaGludCB0eXBlLWNvbnN0cmFpbnQgdmlvbGF0ZWQ6ICVzJyAlIChyZXByKHNlbGYpLCBzdHIoZSkpKQogICAgICBleGNlcHQgU2ltcGxlVHlwZUhpbnRFcnJvcjoKICAgICAgICByYWlzZSBDb21wb3NpdGVUeXBlSGludEVycm9yKAogICAgICAgICAgICAnJXMgaGludCB0eXBlLWNvbnN0cmFpbnQgdmlvbGF0ZWQuIEV4cGVjdGVkIGEgaXRlcmF0b3Igb2YgdHlwZSAlcy4gJwogICAgICAgICAgICAnSW5zdGVhZCByZWNlaXZlZCBhIGl0ZXJhdG9yIG9mIHR5cGUgJXMuJwogICAgICAgICAgICAlIChyZXByKHNlbGYpLCBfdW5pZmllZF9yZXByKHNlbGYueWllbGRlZF90eXBlKSwKICAgICAgICAgICAgICAgaW5zdGFuY2UuX19jbGFzc19fLl9fbmFtZV9fKSkKCiAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIHR5cGVfcGFyYW0pOgogICAgdmFsaWRhdGVfY29tcG9zaXRlX3R5cGVfcGFyYW0oCiAgICAgICAgdHlwZV9wYXJhbSwgZXJyb3JfbXNnX3ByZWZpeD0nUGFyYW1ldGVyIHRvIGFuIEl0ZXJhdG9yIGhpbnQnCiAgICApCgogICAgcmV0dXJuIHNlbGYuSXRlcmF0b3JUeXBlQ29uc3RyYWludCh0eXBlX3BhcmFtKQoKCkl0ZXJhdG9yVHlwZUNvbnN0cmFpbnQgPSBJdGVyYXRvckhpbnQuSXRlcmF0b3JUeXBlQ29uc3RyYWludAoKCmNsYXNzIFdpbmRvd2VkVHlwZUNvbnN0cmFpbnQod2l0aF9tZXRhY2xhc3MoR2V0aXRlbUNvbnN0cnVjdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVDb25zdHJhaW50KSk6CiAgIiIiQSB0eXBlIGNvbnN0cmFpbnQgZm9yIFdpbmRvd2VkVmFsdWUgb2JqZWN0cy4KCiAgTW9zdGx5IGZvciBpbnRlcm5hbCB1c2UuCgogIEF0dHJpYnV0ZXM6CiAgICBpbm5lcl90eXBlOiBUaGUgdHlwZSB3aGljaCB0aGUgZWxlbWVudCBzaG91bGQgYmUgYW4gaW5zdGFuY2Ugb2YuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBpbm5lcl90eXBlKToKICAgIHNlbGYuaW5uZXJfdHlwZSA9IGlubmVyX3R5cGUKCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gKGlzaW5zdGFuY2Uob3RoZXIsIFdpbmRvd2VkVHlwZUNvbnN0cmFpbnQpCiAgICAgICAgICAgIGFuZCBzZWxmLmlubmVyX3R5cGUgPT0gb3RoZXIuaW5uZXJfdHlwZSkKCiAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgcmV0dXJuIGhhc2goc2VsZi5pbm5lcl90eXBlKSBeIDEzICogaGFzaCh0eXBlKHNlbGYpKQoKICBkZWYgX2lubmVyX3R5cGVzKHNlbGYpOgogICAgeWllbGQgc2VsZi5pbm5lcl90eXBlCgogIGRlZiBfY29uc2lzdGVudF93aXRoX2NoZWNrXyhzZWxmLCBzdWIpOgogICAgcmV0dXJuIChpc2luc3RhbmNlKHN1Yiwgc2VsZi5fX2NsYXNzX18pCiAgICAgICAgICAgIGFuZCBpc19jb25zaXN0ZW50X3dpdGgoc3ViLmlubmVyX3R5cGUsIHNlbGYuaW5uZXJfdHlwZSkpCgogIGRlZiB0eXBlX2NoZWNrKHNlbGYsIGluc3RhbmNlKToKICAgIGZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgd2luZG93CiAgICBpZiBub3QgaXNpbnN0YW5jZShpbnN0YW5jZSwgd2luZG93LldpbmRvd2VkVmFsdWUpOgogICAgICByYWlzZSBDb21wb3NpdGVUeXBlSGludEVycm9yKAogICAgICAgICAgIldpbmRvdyB0eXBlLWNvbnN0cmFpbnQgdmlvbGF0ZWQuIFZhbGlkIG9iamVjdCBpbnN0YW5jZSAiCiAgICAgICAgICAibXVzdCBiZSBvZiB0eXBlICdXaW5kb3dlZFZhbHVlJy4gSW5zdGVhZCwgYW4gaW5zdGFuY2Ugb2YgJyVzJyAiCiAgICAgICAgICAid2FzIHJlY2VpdmVkLiIKICAgICAgICAgICUgKGluc3RhbmNlLl9fY2xhc3NfXy5fX25hbWVfXykpCgogICAgdHJ5OgogICAgICBjaGVja19jb25zdHJhaW50KHNlbGYuaW5uZXJfdHlwZSwgaW5zdGFuY2UudmFsdWUpCiAgICBleGNlcHQgKENvbXBvc2l0ZVR5cGVIaW50RXJyb3IsIFNpbXBsZVR5cGVIaW50RXJyb3IpOgogICAgICByYWlzZSBDb21wb3NpdGVUeXBlSGludEVycm9yKAogICAgICAgICAgJyVzIGhpbnQgdHlwZS1jb25zdHJhaW50IHZpb2xhdGVkLiBUaGUgdHlwZSBvZiBlbGVtZW50IGluICcKICAgICAgICAgICdpcyBpbmNvcnJlY3QuIEV4cGVjdGVkIGFuIGluc3RhbmNlIG9mIHR5cGUgJXMsICcKICAgICAgICAgICdpbnN0ZWFkIHJlY2VpdmVkIGFuIGluc3RhbmNlIG9mIHR5cGUgJXMuJyAlCiAgICAgICAgICAocmVwcihzZWxmKSwgX3VuaWZpZWRfcmVwcihzZWxmLmlubmVyX3R5cGUpLAogICAgICAgICAgIGluc3RhbmNlLnZhbHVlLl9fY2xhc3NfXy5fX25hbWVfXykpCgoKY2xhc3MgR2VuZXJhdG9ySGludChJdGVyYXRvckhpbnQpOgogIHBhc3MKCgojIENyZWF0ZSB0aGUgYWN0dWFsIGluc3RhbmNlcyBmb3IgYWxsIGRlZmluZWQgdHlwZS1oaW50cyBhYm92ZS4KQW55ID0gQW55VHlwZUNvbnN0cmFpbnQoKQpVbmlvbiA9IFVuaW9uSGludCgpCk9wdGlvbmFsID0gT3B0aW9uYWxIaW50KCkKVHVwbGUgPSBUdXBsZUhpbnQoKQpMaXN0ID0gTGlzdEhpbnQoKQpLViA9IEtWSGludCgpCkRpY3QgPSBEaWN0SGludCgpClNldCA9IFNldEhpbnQoKQpJdGVyYWJsZSA9IEl0ZXJhYmxlSGludCgpCkl0ZXJhdG9yID0gSXRlcmF0b3JIaW50KCkKR2VuZXJhdG9yID0gR2VuZXJhdG9ySGludCgpCldpbmRvd2VkVmFsdWUgPSBXaW5kb3dlZFR5cGVDb25zdHJhaW50CgoKX0tOT1dOX1BSSU1JVElWRV9UWVBFUyA9IHsKICAgIGRpY3Q6IERpY3RbQW55LCBBbnldLAogICAgbGlzdDogTGlzdFtBbnldLAogICAgdHVwbGU6IFR1cGxlW0FueSwgLi4uXSwKICAgIHNldDogU2V0W0FueV0sCiAgICAjIFVzaW5nIE5vbmUgZm9yIHRoZSBOb25lVHlwZSBpcyBhIGNvbW1vbiBjb252ZW50aW9uLgogICAgTm9uZTogdHlwZShOb25lKSwKfQoKCmRlZiBub3JtYWxpemUoeCk6CiAgaWYgeCBpbiBfS05PV05fUFJJTUlUSVZFX1RZUEVTOgogICAgcmV0dXJuIF9LTk9XTl9QUklNSVRJVkVfVFlQRVNbeF0KICByZXR1cm4geAoKCmRlZiBpc19jb25zaXN0ZW50X3dpdGgoc3ViLCBiYXNlKToKICAiIiJSZXR1cm5zIHdoZXRoZXIgdGhlIHR5cGUgYSBpcyBjb25zaXN0ZW50IHdpdGggYi4KCiAgVGhpcyBpcyBhY2NvcmRpZyB0byB0aGUgdGVybWlub2xvZ3kgb2YgUEVQIDQ4My80ODQuICBUaGlzIHJlbGF0aW9uc2hpcCBpcwogIG5laXRoZXIgc3ltbWV0cmljIG5vciB0cmFuc2l0aXZlLCBidXQgYSBnb29kIG1uZW1vbmljIHRvIGtlZXAgaW4gbWluZCBpcyB0aGF0CiAgaXNfY29uc2lzdGVudF93aXRoKGEsIGIpIGlzIHJvdWdobHkgZXF1aXZhbGVudCB0byB0aGUgaXNzdWJjbGFzcyhhLCBiKQogIHJlbGF0aW9uLCBidXQgYWxzbyBoYW5kbGVzIHRoZSBzcGVjaWFsIEFueSB0eXBlIGFzIHdlbGwgYXMgdHlwZQogIHBhcmFtZXRlcml6YXRpb24uCiAgIiIiCiAgaWYgc3ViID09IGJhc2U6CiAgICAjIENvbW1vbiBzcGVjaWFsIGNhc2UuCiAgICByZXR1cm4gVHJ1ZQogIGlmIGlzaW5zdGFuY2Uoc3ViLCBBbnlUeXBlQ29uc3RyYWludCkgb3IgaXNpbnN0YW5jZShiYXNlLCBBbnlUeXBlQ29uc3RyYWludCk6CiAgICByZXR1cm4gVHJ1ZQogIHN1YiA9IG5vcm1hbGl6ZShzdWIpCiAgYmFzZSA9IG5vcm1hbGl6ZShiYXNlKQogIGlmIGlzaW5zdGFuY2UoYmFzZSwgVHlwZUNvbnN0cmFpbnQpOgogICAgaWYgaXNpbnN0YW5jZShzdWIsIFVuaW9uQ29uc3RyYWludCk6CiAgICAgIHJldHVybiBhbGwoaXNfY29uc2lzdGVudF93aXRoKGMsIGJhc2UpIGZvciBjIGluIHN1Yi51bmlvbl90eXBlcykKICAgIHJldHVybiBiYXNlLl9jb25zaXN0ZW50X3dpdGhfY2hlY2tfKHN1YikKICBlbGlmIGlzaW5zdGFuY2Uoc3ViLCBUeXBlQ29uc3RyYWludCk6CiAgICAjIE5vdGhpbmcgYnV0IG9iamVjdCBsaXZlcyBhYm92ZSBhbnkgdHlwZSBjb25zdHJhaW50cy4KICAgIHJldHVybiBiYXNlID09IG9iamVjdAogIHJldHVybiBpc3N1YmNsYXNzKHN1YiwgYmFzZSkKCgpkZWYgY29lcmNlX3RvX2t2X3R5cGUoZWxlbWVudF90eXBlLCBsYWJlbD1Ob25lKToKICAiIiJBdHRlbXB0cyB0byBjb2VyY2UgZWxlbWVudF90eXBlIHRvIGEgY29tcGF0aWJsZSBrdiB0eXBlLgoKICBSYWlzZXMgYW4gZXJyb3Igb24gZmFpbHVyZS4KICAiIiIKICAjIElmIGVsZW1lbnRfdHlwZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIHRyZWF0IGl0IGFzIGBBbnlgLgogIGlmIG5vdCBlbGVtZW50X3R5cGU6CiAgICByZXR1cm4gS1ZbQW55LCBBbnldCiAgZWxpZiBpc2luc3RhbmNlKGVsZW1lbnRfdHlwZSwgVHVwbGVIaW50LlR1cGxlQ29uc3RyYWludCk6CiAgICBpZiBsZW4oZWxlbWVudF90eXBlLnR1cGxlX3R5cGVzKSA9PSAyOgogICAgICByZXR1cm4gZWxlbWVudF90eXBlCiAgICBlbHNlOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgIlR1cGxlIGlucHV0IHRvICVyIG11c3QgYmUgaGF2ZSB0d28gY29tcG9uZW50cy4gIgogICAgICAgICAgIkZvdW5kICVzLiIgJSAobGFiZWwsIGVsZW1lbnRfdHlwZSkpCiAgZWxpZiBpc2luc3RhbmNlKGVsZW1lbnRfdHlwZSwgQW55VHlwZUNvbnN0cmFpbnQpOgogICAgIyBgQW55YCB0eXBlIG5lZWRzIHRvIGJlIHJlcGxhY2VkIHdpdGggYSBLVltBbnksIEFueV0gdG8KICAgICMgc2F0aXNmeSB0aGUgS1YgZm9ybS4KICAgIHJldHVybiBLVltBbnksIEFueV0KICBlbGlmIGlzaW5zdGFuY2UoZWxlbWVudF90eXBlLCBVbmlvbkNvbnN0cmFpbnQpOgogICAgdW5pb25fdHlwZXMgPSBbCiAgICAgICAgY29lcmNlX3RvX2t2X3R5cGUodCkgZm9yIHQgaW4gZWxlbWVudF90eXBlLnVuaW9uX3R5cGVzXQogICAgcmV0dXJuIEtWWwogICAgICAgIFVuaW9uW3R1cGxlKHQudHVwbGVfdHlwZXNbMF0gZm9yIHQgaW4gdW5pb25fdHlwZXMpXSwKICAgICAgICBVbmlvblt0dXBsZSh0LnR1cGxlX3R5cGVzWzFdIGZvciB0IGluIHVuaW9uX3R5cGVzKV1dCiAgZWxzZToKICAgICMgVE9ETzogUG9zc2libHkgaGFuZGxlIG90aGVyIHZhbGlkIHR5cGVzLgogICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAiSW5wdXQgdG8gJXIgbXVzdCBiZSBjb21wYXRpYmxlIHdpdGggS1ZbQW55LCBBbnldLiAiCiAgICAgICAgIkZvdW5kICVzLiIgJSAobGFiZWwsIGVsZW1lbnRfdHlwZSkpCn1yyIQAAChYIAAAAERpY3RIaW50LkRpY3RDb25zdHJhaW50Ll9fcmVwcl9fWAMAAABkZWZNDANNDwOHWAgAAABMaXN0SGludFgFAAAAY2xhc3NNvwJN1QKHWB4AAABHZXRpdGVtQ29uc3RydWN0b3IuX19nZXRpdGVtX19YAwAAAGRlZkttS2+HWDsAAABJdGVyYXRvckhpbnQuSXRlcmF0b3JUeXBlQ29uc3RyYWludC5fY29uc2lzdGVudF93aXRoX2NoZWNrX1gDAAAAZGVmTdUDTdgDh1gZAAAAVW5pb25IaW50LlVuaW9uQ29uc3RyYWludFgFAAAAY2xhc3NN2AFNCAKHWCwAAABEaWN0SGludC5EaWN0Q29uc3RyYWludC5tYXRjaF90eXBlX3ZhcmlhYmxlc1gDAAAAZGVmTUwDTVUDh1gkAAAAVW5pb25IaW50LlVuaW9uQ29uc3RyYWludC50eXBlX2NoZWNrWAMAAABkZWZN+AFNCAKHWCoAAABTZXF1ZW5jZVR5cGVDb25zdHJhaW50LmJpbmRfdHlwZV92YXJpYWJsZXNYAwAAAGRlZk0ZAU0gAYdYCQAAAG5vcm1hbGl6ZVgDAAAAZGVmTUAETUQEh1gjAAAAU2VxdWVuY2VUeXBlQ29uc3RyYWludC5faW5uZXJfdHlwZXNYAwAAAGRlZkvvS/GHWBkAAABUdXBsZUhpbnQuVHVwbGVDb25zdHJhaW50WAUAAABjbGFzc01TAk2fAodYIgAAAFR5cGVDb25zdHJhaW50LmJpbmRfdHlwZV92YXJpYWJsZXNYAwAAAGRlZkueS6CHWBUAAABUeXBlQ29uc3RyYWludC5fX25lX19YAwAAAGRlZku1S7iHWCEAAABTZXF1ZW5jZVR5cGVDb25zdHJhaW50LnR5cGVfY2hlY2tYAwAAAGRlZkv6TRMBh1gqAAAAVHVwbGVIaW50LlR1cGxlU2VxdWVuY2VDb25zdHJhaW50Ll9fcmVwcl9fWAMAAABkZWZNSQJNSwKHWBEAAABBbnlUeXBlQ29uc3RyYWludFgFAAAAY2xhc3NNmgFNrQGHWBwAAABBbnlUeXBlQ29uc3RyYWludC50eXBlX2NoZWNrWAMAAABkZWZNqwFNrQGHWBkAAABTZXRIaW50LlNldFR5cGVDb25zdHJhaW50WAUAAABjbGFzc02DA02KA4dYDQAAAF91bmlmaWVkX3JlcHJYAwAAAGRlZk1qAU15AYdYIQAAAFR5cGVWYXJpYWJsZS5tYXRjaF90eXBlX3ZhcmlhYmxlc1gDAAAAZGVmTb4BTcABh1gtAAAASW5kZXhhYmxlVHlwZUNvbnN0cmFpbnQuX2NvbnN0cmFpbnRfZm9yX2luZGV4WAMAAABkZWZLy0vSh1gjAAAASXRlcmF0b3JIaW50Lkl0ZXJhdG9yVHlwZUNvbnN0cmFpbnRYBQAAAGNsYXNzTcoDTegDh1gMAAAAT3B0aW9uYWxIaW50WAUAAABjbGFzc00jAk0wAodYBwAAAFNldEhpbnRYBQAAAGNsYXNzTXsDTZIDh1gfAAAAV2luZG93ZWRUeXBlQ29uc3RyYWludC5fX2luaXRfX1gDAAAAZGVmTf4DTQAEh1gYAAAASXRlcmFibGVIaW50Ll9fZ2V0aXRlbV9fWAMAAABkZWZNtQNNuwOHWCsAAABTZXF1ZW5jZVR5cGVDb25zdHJhaW50Lm1hdGNoX3R5cGVfdmFyaWFibGVzWAMAAABkZWZNFAFNGAGHWCIAAABUdXBsZUhpbnQuVHVwbGVDb25zdHJhaW50Ll9faGFzaF9fWAMAAABkZWZNXAJNXgKHWBQAAABUeXBlQ29uc3RyYWludC52aXNpdFgDAAAAZGVmS6VLtIdYLAAAAFNlcXVlbmNlVHlwZUNvbnN0cmFpbnQuX2NvbnN0cmFpbnRfZm9yX2luZGV4WAMAAABkZWZL8kv1h1gVAAAAVHlwZVZhcmlhYmxlLl9faW5pdF9fWAMAAABkZWZNsQFNswGHWC0AAABUdXBsZUhpbnQuVHVwbGVDb25zdHJhaW50LmJpbmRfdHlwZV92YXJpYWJsZXNYAwAAAGRlZk2ZAk2fAodYBgAAAEtWSGludFgFAAAAY2xhc3NN2gJN7wKHWB8AAABTZXF1ZW5jZVR5cGVDb25zdHJhaW50Ll9faW5pdF9fWAMAAABkZWZL40vmh1gJAAAAVW5pb25IaW50WAUAAABjbGFzc03FAU0eAodYDgAAAFR5cGVDb25zdHJhaW50WAUAAABjbGFzc0txS7iHWCIAAABVbmlvbkhpbnQuVW5pb25Db25zdHJhaW50Ll9faGFzaF9fWAMAAABkZWZN4QFN4wGHWCAAAABVbmlvbkhpbnQuVW5pb25Db25zdHJhaW50Ll9fZXFfX1gDAAAAZGVmTd0BTeABh1guAAAAVHVwbGVIaW50LlR1cGxlQ29uc3RyYWludC5tYXRjaF90eXBlX3ZhcmlhYmxlc1gDAAAAZGVmTZICTZgCh1gsAAAASXRlcmF0b3JIaW50Lkl0ZXJhdG9yVHlwZUNvbnN0cmFpbnQuX19yZXByX19YAwAAAGRlZk3PA03RA4dYEwAAAGJpbmRfdHlwZV92YXJpYWJsZXNYAwAAAGRlZkvAS8SHWBMAAABTZXRIaW50Ll9fZ2V0aXRlbV9fWAMAAABkZWZNiwNNkgOHWCEAAABUdXBsZUhpbnQuVHVwbGVTZXF1ZW5jZUNvbnN0cmFpbnRYBQAAAGNsYXNzTUMCTVICh1gWAAAAU2VxdWVuY2VUeXBlQ29uc3RyYWludFgFAAAAY2xhc3NL1E0gAYdYIAAAAERpY3RIaW50LkRpY3RDb25zdHJhaW50Ll9faW5pdF9fWAMAAABkZWZNCANNCwOHWCQAAABUdXBsZUhpbnQuVHVwbGVDb25zdHJhaW50LnR5cGVfY2hlY2tYAwAAAGRlZk1yAk2RAodYGAAAAEl0ZXJhdG9ySGludC5fX2dldGl0ZW1fX1gDAAAAZGVmTekDTe8Dh1gSAAAAR2V0aXRlbUNvbnN0cnVjdG9yWAUAAABjbGFzc0trS2+HWDkAAABUdXBsZUhpbnQuVHVwbGVTZXF1ZW5jZUNvbnN0cmFpbnQuX2NvbnNpc3RlbnRfd2l0aF9jaGVja19YAwAAAGRlZk1MAk1SAodYIgAAAFVuaW9uSGludC5VbmlvbkNvbnN0cmFpbnQuX19pbml0X19YAwAAAGRlZk3aAU3cAYdYFQAAAFR5cGVWYXJpYWJsZS5fX3JlcHJfX1gDAAAAZGVmTbsBTb0Bh1gUAAAAbWF0Y2hfdHlwZV92YXJpYWJsZXNYAwAAAGRlZku6S76HWCIAAABTZXRIaW50LlNldFR5cGVDb25zdHJhaW50Ll9faW5pdF9fWAMAAABkZWZNhQNNhwOHWBAAAABjaGVja19jb25zdHJhaW50WAMAAABkZWZNewFNmAGHWBsAAABUeXBlQ29uc3RyYWludC5faW5uZXJfdHlwZXNYAwAAAGRlZkuhS6SHWCoAAABUdXBsZUhpbnQuVHVwbGVTZXF1ZW5jZUNvbnN0cmFpbnQuX19pbml0X19YAwAAAGRlZk1FAk1IAodYLAAAAEl0ZXJhdG9ySGludC5JdGVyYXRvclR5cGVDb25zdHJhaW50Ll9faW5pdF9fWAMAAABkZWZNzANNzgOHWC8AAABEaWN0SGludC5EaWN0Q29uc3RyYWludC5fY29uc2lzdGVudF93aXRoX2NoZWNrX1gDAAAAZGVmTRwDTSADh1gaAAAAQW55VHlwZUNvbnN0cmFpbnQuX19yZXByX19YAwAAAGRlZk2kAU2mAYdYHQAAAFdpbmRvd2VkVHlwZUNvbnN0cmFpbnQuX19lcV9fWAMAAABkZWZNAQRNBASHWBYAAABDb21wb3NpdGVUeXBlSGludEVycm9yWAUAAABjbGFzc0tnS2mHWCsAAABEaWN0SGludC5EaWN0Q29uc3RyYWludC5iaW5kX3R5cGVfdmFyaWFibGVzWAMAAABkZWZNVgNNXAOHWB0AAAB2YWxpZGF0ZV9jb21wb3NpdGVfdHlwZV9wYXJhbVgDAAAAZGVmTUgBTWgBh1gjAAAASXRlcmFibGVIaW50Lkl0ZXJhYmxlVHlwZUNvbnN0cmFpbnRYBQAAAGNsYXNzTZ4DTbQDh1gvAAAAVHVwbGVIaW50LlR1cGxlQ29uc3RyYWludC5fY29uc3RyYWludF9mb3JfaW5kZXhYAwAAAGRlZk1nAk1qAodYDAAAAEl0ZXJhdG9ySGludFgFAAAAY2xhc3NNwANN7wOHWCIAAABEaWN0SGludC5EaWN0Q29uc3RyYWludC50eXBlX2NoZWNrWAMAAABkZWZNNgNNSwOHWC4AAABTZXF1ZW5jZVR5cGVDb25zdHJhaW50Ll9jb25zaXN0ZW50X3dpdGhfY2hlY2tfWAMAAABkZWZL9kv5h1gWAAAAV2luZG93ZWRUeXBlQ29uc3RyYWludFgFAAAAY2xhc3NN9ANNIQSHWBoAAABBbnlUeXBlQ29uc3RyYWludC5fX2hhc2hfX1gDAAAAZGVmTacBTaoBh1g7AAAASXRlcmFibGVIaW50Lkl0ZXJhYmxlVHlwZUNvbnN0cmFpbnQuX2NvbnNpc3RlbnRfd2l0aF9jaGVja19YAwAAAGRlZk2nA020A4dYIgAAAFNldEhpbnQuU2V0VHlwZUNvbnN0cmFpbnQuX19yZXByX19YAwAAAGRlZk2IA02KA4dYHgAAAERpY3RIaW50LkRpY3RDb25zdHJhaW50Ll9fZXFfX1gDAAAAZGVmTRADTRQDh1gdAAAAU2VxdWVuY2VUeXBlQ29uc3RyYWludC5fX2VxX19YAwAAAGRlZkvnS+uHWCYAAABUeXBlQ29uc3RyYWludC5fY29uc2lzdGVudF93aXRoX2NoZWNrX1gDAAAAZGVmS3tLiIdYJAAAAERpY3RIaW50LkRpY3RDb25zdHJhaW50Ll9pbm5lcl90eXBlc1gDAAAAZGVmTRgDTRsDh1geAAAAQ29tcG9zaXRlVHlwZUhpbnQuX19nZXRpdGVtX19fWAMAAABkZWZNMwFNRgGHWBEAAABDb21wb3NpdGVUeXBlSGludFgFAAAAY2xhc3NNIgFNRgGHWCYAAABUdXBsZUhpbnQuVHVwbGVDb25zdHJhaW50Ll9pbm5lcl90eXBlc1gDAAAAZGVmTWMCTWYCh1gUAAAARGljdEhpbnQuX19nZXRpdGVtX19YAwAAAGRlZk1dA012A4dYHwAAAFNlcXVlbmNlVHlwZUNvbnN0cmFpbnQuX19oYXNoX19YAwAAAGRlZkvsS+6HWCIAAABUdXBsZUhpbnQuVHVwbGVDb25zdHJhaW50Ll9faW5pdF9fWAMAAABkZWZNVQJNVwKHWBQAAABMaXN0SGludC5fX2dldGl0ZW1fX1gDAAAAZGVmTdECTdUCh1gVAAAAVHlwZVZhcmlhYmxlLl9faGFzaF9fWAMAAABkZWZNtwFNugGHWDEAAABVbmlvbkhpbnQuVW5pb25Db25zdHJhaW50Ll9jb25zaXN0ZW50X3dpdGhfY2hlY2tfWAMAAABkZWZN7QFN9wGHWCIAAABUdXBsZUhpbnQuVHVwbGVDb25zdHJhaW50Ll9fcmVwcl9fWAMAAABkZWZNXwJNYgKHWA8AAABrZXlfdmFsdWVfdHlwZXNYAwAAAGRlZk3xAk39AodYIwAAAFdpbmRvd2VkVHlwZUNvbnN0cmFpbnQuX2lubmVyX3R5cGVzWAMAAABkZWZNCARNCgSHWBcAAABMaXN0SGludC5MaXN0Q29uc3RyYWludFgFAAAAY2xhc3NNyQJN0AKHWBMAAABUeXBlVmFyaWFibGUuX19lcV9fWAMAAABkZWZNtAFNtgGHWC4AAABJdGVyYXRvckhpbnQuSXRlcmF0b3JUeXBlQ29uc3RyYWludC50eXBlX2NoZWNrWAMAAABkZWZN2QNN6AOHWBUAAABUdXBsZUhpbnQuX19nZXRpdGVtX19YAwAAAGRlZk2gAk25AodYIwAAAFR5cGVDb25zdHJhaW50Lm1hdGNoX3R5cGVfdmFyaWFibGVzWAMAAABkZWZLm0udh1ggAAAARGljdEhpbnQuRGljdENvbnN0cmFpbnQuX19oYXNoX19YAwAAAGRlZk0VA00XA4dYLgAAAFdpbmRvd2VkVHlwZUNvbnN0cmFpbnQuX2NvbnNpc3RlbnRfd2l0aF9jaGVja19YAwAAAGRlZk0LBE0OBIdYLAAAAEl0ZXJhYmxlSGludC5JdGVyYWJsZVR5cGVDb25zdHJhaW50Ll9faW5pdF9fWAMAAABkZWZNoANNowOHWCAAAABUdXBsZUhpbnQuVHVwbGVDb25zdHJhaW50Ll9fZXFfX1gDAAAAZGVmTVgCTVsCh1gXAAAARGljdEhpbnQuRGljdENvbnN0cmFpbnRYBQAAAGNsYXNzTQYDTVwDh1gMAAAAVHlwZVZhcmlhYmxlWAUAAABjbGFzc02vAU3DAYdYGQAAAFR5cGVDb25zdHJhaW50LnR5cGVfY2hlY2tYAwAAAGRlZkuJS5qHWBgAAABBbnlUeXBlQ29uc3RyYWludC5fX2VxX19YAwAAAGRlZk2hAU2jAYdYIAAAAExpc3RIaW50Lkxpc3RDb25zdHJhaW50Ll9fcmVwcl9fWAMAAABkZWZNzgJN0AKHWAkAAABUdXBsZUhpbnRYBQAAAGNsYXNzTTICTbkCh1gmAAAAVW5pb25IaW50LlVuaW9uQ29uc3RyYWludC5faW5uZXJfdHlwZXNYAwAAAGRlZk3pAU3sAYdYIAAAAFR5cGVWYXJpYWJsZS5iaW5kX3R5cGVfdmFyaWFibGVzWAMAAABkZWZNwQFNwwGHWB8AAABXaW5kb3dlZFR5cGVDb25zdHJhaW50Ll9faGFzaF9fWAMAAABkZWZNBQRNBwSHWCEAAABXaW5kb3dlZFR5cGVDb25zdHJhaW50LnR5cGVfY2hlY2tYAwAAAGRlZk0PBE0hBIdYGAAAAE9wdGlvbmFsSGludC5fX2dldGl0ZW1fX1gDAAAAZGVmTSkCTTACh1gsAAAASXRlcmFibGVIaW50Lkl0ZXJhYmxlVHlwZUNvbnN0cmFpbnQuX19yZXByX19YAwAAAGRlZk2kA02mA4dYEgAAAEtWSGludC5fX2dldGl0ZW1fX1gDAAAAZGVmTeICTe8Ch1gNAAAAR2VuZXJhdG9ySGludFgFAAAAY2xhc3NNIwRNJQSHWBMAAABTaW1wbGVUeXBlSGludEVycm9yWAUAAABjbGFzc0tjS2WHWDAAAABJdGVyYXRvckhpbnQuSXRlcmF0b3JUeXBlQ29uc3RyYWludC5faW5uZXJfdHlwZXNYAwAAAGRlZk3SA03UA4dYEgAAAGlzX2NvbnNpc3RlbnRfd2l0aFgDAAAAZGVmTUYETV4Eh1ggAAAATGlzdEhpbnQuTGlzdENvbnN0cmFpbnQuX19pbml0X19YAwAAAGRlZk3LAk3NAodYFQAAAFVuaW9uSGludC5fX2dldGl0ZW1fX1gDAAAAZGVmTQkCTR4Ch1hAAAAARGljdEhpbnQuRGljdENvbnN0cmFpbnQuX3JhaXNlX2hpbnRfZXhjZXB0aW9uX29yX2lubmVyX2V4Y2VwdGlvblgDAAAAZGVmTSEDTTUDh1gRAAAAY29lcmNlX3RvX2t2X3R5cGVYAwAAAGRlZk1gBE1+BIdYCAAAAERpY3RIaW50WAUAAABjbGFzc03/Ak12A4dYFwAAAEluZGV4YWJsZVR5cGVDb25zdHJhaW50WAUAAABjbGFzc0vGS9KHWCIAAABVbmlvbkhpbnQuVW5pb25Db25zdHJhaW50Ll9fcmVwcl9fWAMAAABkZWZN5AFN6AGHWDEAAABUdXBsZUhpbnQuVHVwbGVDb25zdHJhaW50Ll9jb25zaXN0ZW50X3dpdGhfY2hlY2tfWAMAAABkZWZNawJNcQKHWAwAAABJdGVyYWJsZUhpbnRYBQAAAGNsYXNzTZcDTbsDh3V9csmEAAAoWAwAAABUeXBlVmFyaWFibGVq+2oAAFggAAAAVHlwZVZhcmlhYmxlLmJpbmRfdHlwZV92YXJpYWJsZXNq+2oAAFghAAAAVHlwZVZhcmlhYmxlLm1hdGNoX3R5cGVfdmFyaWFibGVzavtqAAB1an1pAABYHwAAAGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHNyyoQAAIWBcsuEAAB9csyEAABidHLNhAAAVR9hcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtKFiXGgAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJQcm92aWRlcyBUZXN0U3RyZWFtIGZvciB2ZXJpZnlpbmcgc3RyZWFtaW5nIHJ1bm5lciBzZW1hbnRpY3MuCgpGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCiIiIgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKZnJvbSBhYmMgaW1wb3J0IEFCQ01ldGEKZnJvbSBhYmMgaW1wb3J0IGFic3RyYWN0bWV0aG9kCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdApmcm9tIGZ1bmN0b29scyBpbXBvcnQgdG90YWxfb3JkZXJpbmcKCmZyb20gZnV0dXJlLnV0aWxzIGltcG9ydCB3aXRoX21ldGFjbGFzcwoKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgY29kZXJzCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IGNvcmUKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgcHZhbHVlCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgUFRyYW5zZm9ybQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IHdpbmRvdwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93IGltcG9ydCBUaW1lc3RhbXBlZFZhbHVlCmZyb20gYXBhY2hlX2JlYW0udXRpbHMgaW1wb3J0IHRpbWVzdGFtcApmcm9tIGFwYWNoZV9iZWFtLnV0aWxzLndpbmRvd2VkX3ZhbHVlIGltcG9ydCBXaW5kb3dlZFZhbHVlCgpfX2FsbF9fID0gWwogICAgJ0V2ZW50JywKICAgICdFbGVtZW50RXZlbnQnLAogICAgJ1dhdGVybWFya0V2ZW50JywKICAgICdQcm9jZXNzaW5nVGltZUV2ZW50JywKICAgICdUZXN0U3RyZWFtJywKICAgIF0KCgpAdG90YWxfb3JkZXJpbmcKY2xhc3MgRXZlbnQod2l0aF9tZXRhY2xhc3MoQUJDTWV0YSwgb2JqZWN0KSk6CiAgIiIiVGVzdCBzdHJlYW0gZXZlbnQgdG8gYmUgZW1pdHRlZCBkdXJpbmcgZXhlY3V0aW9uIG9mIGEgVGVzdFN0cmVhbS4iIiIKCiAgQGFic3RyYWN0bWV0aG9kCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIEBhYnN0cmFjdG1ldGhvZAogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgQGFic3RyYWN0bWV0aG9kCiAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgogICAgIyBUT0RPKEJFQU0tNTk0OSk6IE5lZWRlZCBmb3IgUHl0aG9uIDIgY29tcGF0aWJpbGl0eS4KICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgoKCmNsYXNzIEVsZW1lbnRFdmVudChFdmVudCk6CiAgIiIiRWxlbWVudC1wcm9kdWNpbmcgdGVzdCBzdHJlYW0gZXZlbnQuIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCB0aW1lc3RhbXBlZF92YWx1ZXMpOgogICAgc2VsZi50aW1lc3RhbXBlZF92YWx1ZXMgPSB0aW1lc3RhbXBlZF92YWx1ZXMKCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gc2VsZi50aW1lc3RhbXBlZF92YWx1ZXMgPT0gb3RoZXIudGltZXN0YW1wZWRfdmFsdWVzCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKHNlbGYudGltZXN0YW1wZWRfdmFsdWVzKQoKICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiBzZWxmLnRpbWVzdGFtcGVkX3ZhbHVlcyA8IG90aGVyLnRpbWVzdGFtcGVkX3ZhbHVlcwoKCmNsYXNzIFdhdGVybWFya0V2ZW50KEV2ZW50KToKICAiIiJXYXRlcm1hcmstYWR2YW5jaW5nIHRlc3Qgc3RyZWFtIGV2ZW50LiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgbmV3X3dhdGVybWFyayk6CiAgICBzZWxmLm5ld193YXRlcm1hcmsgPSB0aW1lc3RhbXAuVGltZXN0YW1wLm9mKG5ld193YXRlcm1hcmspCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuIHNlbGYubmV3X3dhdGVybWFyayA9PSBvdGhlci5uZXdfd2F0ZXJtYXJrCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKHNlbGYubmV3X3dhdGVybWFyaykKCiAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gc2VsZi5uZXdfd2F0ZXJtYXJrIDwgb3RoZXIubmV3X3dhdGVybWFyawoKCmNsYXNzIFByb2Nlc3NpbmdUaW1lRXZlbnQoRXZlbnQpOgogICIiIlByb2Nlc3NpbmcgdGltZS1hZHZhbmNpbmcgdGVzdCBzdHJlYW0gZXZlbnQuIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBhZHZhbmNlX2J5KToKICAgIHNlbGYuYWR2YW5jZV9ieSA9IHRpbWVzdGFtcC5EdXJhdGlvbi5vZihhZHZhbmNlX2J5KQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiBzZWxmLmFkdmFuY2VfYnkgPT0gb3RoZXIuYWR2YW5jZV9ieQoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaChzZWxmLmFkdmFuY2VfYnkpCgogIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuIHNlbGYuYWR2YW5jZV9ieSA8IG90aGVyLmFkdmFuY2VfYnkKCgpjbGFzcyBUZXN0U3RyZWFtKFBUcmFuc2Zvcm0pOgogICIiIlRlc3Qgc3RyZWFtIHRoYXQgZ2VuZXJhdGVzIGV2ZW50cyBvbiBhbiB1bmJvdW5kZWQgUENvbGxlY3Rpb24gb2YgZWxlbWVudHMuCgogIEVhY2ggZXZlbnQgZW1pdHMgZWxlbWVudHMsIGFkdmFuY2VzIHRoZSB3YXRlcm1hcmsgb3IgYWR2YW5jZXMgdGhlIHByb2Nlc3NpbmcKICB0aW1lLiAgQWZ0ZXIgYWxsIG9mIHRoZSBzcGVjaWZpZWQgZWxlbWVudHMgYXJlIGVtaXR0ZWQsIGNlYXNlcyB0byBwcm9kdWNlCiAgb3V0cHV0LgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgY29kZXI9Y29kZXJzLkZhc3RQcmltaXRpdmVzQ29kZXIpOgogICAgYXNzZXJ0IGNvZGVyIGlzIG5vdCBOb25lCiAgICBzZWxmLmNvZGVyID0gY29kZXIKICAgIHNlbGYuY3VycmVudF93YXRlcm1hcmsgPSB0aW1lc3RhbXAuTUlOX1RJTUVTVEFNUAogICAgc2VsZi5ldmVudHMgPSBbXQoKICBkZWYgZ2V0X3dpbmRvd2luZyhzZWxmLCB1bnVzZWRfaW5wdXRzKToKICAgIHJldHVybiBjb3JlLldpbmRvd2luZyh3aW5kb3cuR2xvYmFsV2luZG93cygpKQoKICBkZWYgZXhwYW5kKHNlbGYsIHBiZWdpbik6CiAgICBhc3NlcnQgaXNpbnN0YW5jZShwYmVnaW4sIHB2YWx1ZS5QQmVnaW4pCiAgICBzZWxmLnBpcGVsaW5lID0gcGJlZ2luLnBpcGVsaW5lCiAgICByZXR1cm4gcHZhbHVlLlBDb2xsZWN0aW9uKHNlbGYucGlwZWxpbmUpCgogIGRlZiBfaW5mZXJfb3V0cHV0X2NvZGVyKHNlbGYsIGlucHV0X3R5cGU9Tm9uZSwgaW5wdXRfY29kZXI9Tm9uZSk6CiAgICByZXR1cm4gc2VsZi5jb2RlcgoKICBkZWYgX2FkZChzZWxmLCBldmVudCk6CiAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBFbGVtZW50RXZlbnQpOgogICAgICBmb3IgdHYgaW4gZXZlbnQudGltZXN0YW1wZWRfdmFsdWVzOgogICAgICAgIGFzc2VydCB0di50aW1lc3RhbXAgPCB0aW1lc3RhbXAuTUFYX1RJTUVTVEFNUCwgKAogICAgICAgICAgICAnRWxlbWVudCB0aW1lc3RhbXAgbXVzdCBiZSBiZWZvcmUgdGltZXN0YW1wLk1BWF9USU1FU1RBTVAuJykKICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgV2F0ZXJtYXJrRXZlbnQpOgogICAgICBhc3NlcnQgZXZlbnQubmV3X3dhdGVybWFyayA+IHNlbGYuY3VycmVudF93YXRlcm1hcmssICgKICAgICAgICAgICdXYXRlcm1hcmsgbXVzdCBzdHJpY3RseS1tb25vdG9uaWNhbGx5IGFkdmFuY2UuJykKICAgICAgc2VsZi5jdXJyZW50X3dhdGVybWFyayA9IGV2ZW50Lm5ld193YXRlcm1hcmsKICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgUHJvY2Vzc2luZ1RpbWVFdmVudCk6CiAgICAgIGFzc2VydCBldmVudC5hZHZhbmNlX2J5ID4gMCwgKAogICAgICAgICAgJ011c3QgYWR2YW5jZSBwcm9jZXNzaW5nIHRpbWUgYnkgcG9zaXRpdmUgYW1vdW50LicpCiAgICBlbHNlOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdVbmtub3duIGV2ZW50OiAlcycgJSBldmVudCkKICAgIHNlbGYuZXZlbnRzLmFwcGVuZChldmVudCkKCiAgZGVmIGFkZF9lbGVtZW50cyhzZWxmLCBlbGVtZW50cyk6CiAgICAiIiJBZGQgZWxlbWVudHMgdG8gdGhlIFRlc3RTdHJlYW0uCgogICAgRWxlbWVudHMgYWRkZWQgdG8gdGhlIFRlc3RTdHJlYW0gd2lsbCBiZSBwcm9kdWNlZCBkdXJpbmcgcGlwZWxpbmUgZXhlY3V0aW9uLgogICAgVGhlc2UgZWxlbWVudHMgY2FuIGJlIFRpbWVzdGFtcGVkVmFsdWUsIFdpbmRvd2VkVmFsdWUgb3IgcmF3IHVud3JhcHBlZAogICAgZWxlbWVudHMgdGhhdCBhcmUgc2VyaWFsaXphYmxlIHVzaW5nIHRoZSBUZXN0U3RyZWFtJ3Mgc3BlY2lmaWVkIENvZGVyLiAgV2hlbgogICAgYSBUaW1lc3RhbXBlZFZhbHVlIG9yIGEgV2luZG93ZWRWYWx1ZSBlbGVtZW50IGlzIHVzZWQsIHRoZSB0aW1lc3RhbXAgb2YgdGhlCiAgICBUaW1lc3RhbXBlZFZhbHVlIG9yIFdpbmRvd2VkVmFsdWUgd2lsbCBiZSB0aGUgdGltZXN0YW1wIG9mIHRoZSBwcm9kdWNlZAogICAgZWxlbWVudDsgb3RoZXJ3aXNlLCB0aGUgY3VycmVudCB3YXRlcm1hcmsgdGltZXN0YW1wIHdpbGwgYmUgdXNlZCBmb3IgdGhhdAogICAgZWxlbWVudC4gIFRoZSB3aW5kb3dzIG9mIGEgZ2l2ZW4gV2luZG93ZWRWYWx1ZSBhcmUgaWdub3JlZCBieSB0aGUKICAgIFRlc3RTdHJlYW0uCiAgICAiIiIKICAgIHRpbWVzdGFtcGVkX3ZhbHVlcyA9IFtdCiAgICBmb3IgZWxlbWVudCBpbiBlbGVtZW50czoKICAgICAgaWYgaXNpbnN0YW5jZShlbGVtZW50LCBUaW1lc3RhbXBlZFZhbHVlKToKICAgICAgICB0aW1lc3RhbXBlZF92YWx1ZXMuYXBwZW5kKGVsZW1lbnQpCiAgICAgIGVsaWYgaXNpbnN0YW5jZShlbGVtZW50LCBXaW5kb3dlZFZhbHVlKToKICAgICAgICAjIERyb3Agd2luZG93cyBmb3IgZWxlbWVudHMgaW4gdGVzdCBzdHJlYW0uCiAgICAgICAgdGltZXN0YW1wZWRfdmFsdWVzLmFwcGVuZCgKICAgICAgICAgICAgVGltZXN0YW1wZWRWYWx1ZShlbGVtZW50LnZhbHVlLCBlbGVtZW50LnRpbWVzdGFtcCkpCiAgICAgIGVsc2U6CiAgICAgICAgIyBBZGQgZWxlbWVudHMgd2l0aCB0aW1lc3RhbXAgZXF1YWwgdG8gY3VycmVudCB3YXRlcm1hcmsuCiAgICAgICAgdGltZXN0YW1wZWRfdmFsdWVzLmFwcGVuZCgKICAgICAgICAgICAgVGltZXN0YW1wZWRWYWx1ZShlbGVtZW50LCBzZWxmLmN1cnJlbnRfd2F0ZXJtYXJrKSkKICAgIHNlbGYuX2FkZChFbGVtZW50RXZlbnQodGltZXN0YW1wZWRfdmFsdWVzKSkKICAgIHJldHVybiBzZWxmCgogIGRlZiBhZHZhbmNlX3dhdGVybWFya190byhzZWxmLCBuZXdfd2F0ZXJtYXJrKToKICAgICIiIkFkdmFuY2UgdGhlIHdhdGVybWFyayB0byBhIGdpdmVuIFVuaXggdGltZXN0YW1wLgoKICAgIFRoZSBVbml4IHRpbWVzdGFtcCB2YWx1ZSB1c2VkIG11c3QgYmUgbGF0ZXIgdGhhbiB0aGUgcHJldmlvdXMgd2F0ZXJtYXJrCiAgICB2YWx1ZSBhbmQgc2hvdWxkIGJlIGdpdmVuIGFzIGFuIGludCwgZmxvYXQgb3IgdXRpbHMudGltZXN0YW1wLlRpbWVzdGFtcAogICAgb2JqZWN0LgogICAgIiIiCiAgICBzZWxmLl9hZGQoV2F0ZXJtYXJrRXZlbnQobmV3X3dhdGVybWFyaykpCiAgICByZXR1cm4gc2VsZgoKICBkZWYgYWR2YW5jZV93YXRlcm1hcmtfdG9faW5maW5pdHkoc2VsZik6CiAgICAiIiJBZHZhbmNlIHRoZSB3YXRlcm1hcmsgdG8gdGhlIGVuZCBvZiB0aW1lLiIiIgogICAgc2VsZi5hZHZhbmNlX3dhdGVybWFya190byh0aW1lc3RhbXAuTUFYX1RJTUVTVEFNUCkKICAgIHJldHVybiBzZWxmCgogIGRlZiBhZHZhbmNlX3Byb2Nlc3NpbmdfdGltZShzZWxmLCBhZHZhbmNlX2J5KToKICAgICIiIkFkdmFuY2UgdGhlIGN1cnJlbnQgcHJvY2Vzc2luZyB0aW1lIGJ5IGEgZ2l2ZW4gZHVyYXRpb24gaW4gc2Vjb25kcy4KCiAgICBUaGUgZHVyYXRpb24gbXVzdCBiZSBhIHBvc2l0aXZlIHNlY29uZCBkdXJhdGlvbiBhbmQgc2hvdWxkIGJlIGdpdmVuIGFzIGFuCiAgICBpbnQsIGZsb2F0IG9yIHV0aWxzLnRpbWVzdGFtcC5EdXJhdGlvbiBvYmplY3QuCiAgICAiIiIKICAgIHNlbGYuX2FkZChQcm9jZXNzaW5nVGltZUV2ZW50KGFkdmFuY2VfYnkpKQogICAgcmV0dXJuIHNlbGYKfXLOhAAAKFgVAAAAV2F0ZXJtYXJrRXZlbnQuX19lcV9fWAMAAABkZWZLXEteh1gTAAAARWxlbWVudEV2ZW50Ll9fbHRfX1gDAAAAZGVmS1JLVIdYFQAAAEVsZW1lbnRFdmVudC5fX2luaXRfX1gDAAAAZGVmS0lLS4dYGAAAAFRlc3RTdHJlYW0uZ2V0X3dpbmRvd2luZ1gDAAAAZGVmS4RLhodYDgAAAFdhdGVybWFya0V2ZW50WAUAAABjbGFzc0tWS2SHWAwAAABFdmVudC5fX25lX19YAwAAAGRlZktBS0SHWAwAAABFdmVudC5fX2VxX19YAwAAAGRlZks1SziHWBUAAABFbGVtZW50RXZlbnQuX19oYXNoX19YAwAAAGRlZktPS1GHWA8AAABUZXN0U3RyZWFtLl9hZGRYAwAAAGRlZkuPS56HWB4AAABUZXN0U3RyZWFtLl9pbmZlcl9vdXRwdXRfY29kZXJYAwAAAGRlZkuMS46HWBMAAABUZXN0U3RyZWFtLl9faW5pdF9fWAMAAABkZWZLfkuDh1gKAAAAVGVzdFN0cmVhbVgFAAAAY2xhc3NLdkvRh1gTAAAAUHJvY2Vzc2luZ1RpbWVFdmVudFgFAAAAY2xhc3NLZkt0h1gfAAAAVGVzdFN0cmVhbS5hZHZhbmNlX3dhdGVybWFya190b1gDAAAAZGVmS7pLw4dYFwAAAFdhdGVybWFya0V2ZW50Ll9faGFzaF9fWAMAAABkZWZLX0thh1gcAAAAUHJvY2Vzc2luZ1RpbWVFdmVudC5fX2luaXRfX1gDAAAAZGVmS2lLa4dYDgAAAEV2ZW50Ll9faGFzaF9fWAMAAABkZWZLOUs8h1gMAAAARXZlbnQuX19sdF9fWAMAAABkZWZLPUtAh1gcAAAAUHJvY2Vzc2luZ1RpbWVFdmVudC5fX2hhc2hfX1gDAAAAZGVmS29LcYdYIgAAAFRlc3RTdHJlYW0uYWR2YW5jZV9wcm9jZXNzaW5nX3RpbWVYAwAAAGRlZkvJS9GHWBMAAABFbGVtZW50RXZlbnQuX19lcV9fWAMAAABkZWZLTEtOh1gaAAAAUHJvY2Vzc2luZ1RpbWVFdmVudC5fX2x0X19YAwAAAGRlZktyS3SHWBcAAABXYXRlcm1hcmtFdmVudC5fX2luaXRfX1gDAAAAZGVmS1lLW4dYFwAAAFRlc3RTdHJlYW0uYWRkX2VsZW1lbnRzWAMAAABkZWZLn0u5h1gFAAAARXZlbnRYBQAAAGNsYXNzSzFLRIdYGgAAAFByb2Nlc3NpbmdUaW1lRXZlbnQuX19lcV9fWAMAAABkZWZLbEtuh1goAAAAVGVzdFN0cmVhbS5hZHZhbmNlX3dhdGVybWFya190b19pbmZpbml0eVgDAAAAZGVmS8RLyIdYEQAAAFRlc3RTdHJlYW0uZXhwYW5kWAMAAABkZWZLh0uLh1gVAAAAV2F0ZXJtYXJrRXZlbnQuX19sdF9fWAMAAABkZWZLYktkh1gMAAAARWxlbWVudEV2ZW50WAUAAABjbGFzc0tGS1SHdX1yz4QAAChYDgAAAFdhdGVybWFya0V2ZW50ai5cAABYFwAAAFRlc3RTdHJlYW0uYWRkX2VsZW1lbnRzai5cAABYBQAAAEV2ZW50ai5cAABYDAAAAEVsZW1lbnRFdmVudGouXAAAWCIAAABUZXN0U3RyZWFtLmFkdmFuY2VfcHJvY2Vzc2luZ190aW1lai5cAABYKAAAAFRlc3RTdHJlYW0uYWR2YW5jZV93YXRlcm1hcmtfdG9faW5maW5pdHlqLlwAAFgRAAAAVGVzdFN0cmVhbS5leHBhbmRqLlwAAFgKAAAAVGVzdFN0cmVhbWouXAAAWBMAAABQcm9jZXNzaW5nVGltZUV2ZW50ai5cAABYHwAAAFRlc3RTdHJlYW0uYWR2YW5jZV93YXRlcm1hcmtfdG9qLlwAAFgYAAAAVGVzdFN0cmVhbS5nZXRfd2luZG93aW5nai5cAAB1an1pAABYHwAAAGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9zdHJlYW1y0IQAAIWBctGEAAB9ctKEAABidFUDYWJjKFjpGwAAIyBDb3B5cmlnaHQgMjAwNyBHb29nbGUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KIyBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCgoiIiJBYnN0cmFjdCBCYXNlIENsYXNzZXMgKEFCQ3MpIGFjY29yZGluZyB0byBQRVAgMzExOS4iIiIKCmltcG9ydCB0eXBlcwoKZnJvbSBfd2Vha3JlZnNldCBpbXBvcnQgV2Vha1NldAoKIyBJbnN0YW5jZSBvZiBvbGQtc3R5bGUgY2xhc3MKY2xhc3MgX0M6IHBhc3MKX0luc3RhbmNlVHlwZSA9IHR5cGUoX0MoKSkKCgpkZWYgYWJzdHJhY3RtZXRob2QoZnVuY29iaik6CiAgICAiIiJBIGRlY29yYXRvciBpbmRpY2F0aW5nIGFic3RyYWN0IG1ldGhvZHMuCgogICAgUmVxdWlyZXMgdGhhdCB0aGUgbWV0YWNsYXNzIGlzIEFCQ01ldGEgb3IgZGVyaXZlZCBmcm9tIGl0LiAgQQogICAgY2xhc3MgdGhhdCBoYXMgYSBtZXRhY2xhc3MgZGVyaXZlZCBmcm9tIEFCQ01ldGEgY2Fubm90IGJlCiAgICBpbnN0YW50aWF0ZWQgdW5sZXNzIGFsbCBvZiBpdHMgYWJzdHJhY3QgbWV0aG9kcyBhcmUgb3ZlcnJpZGRlbi4KICAgIFRoZSBhYnN0cmFjdCBtZXRob2RzIGNhbiBiZSBjYWxsZWQgdXNpbmcgYW55IG9mIHRoZSBub3JtYWwKICAgICdzdXBlcicgY2FsbCBtZWNoYW5pc21zLgoKICAgIFVzYWdlOgoKICAgICAgICBjbGFzcyBDOgogICAgICAgICAgICBfX21ldGFjbGFzc19fID0gQUJDTWV0YQogICAgICAgICAgICBAYWJzdHJhY3RtZXRob2QKICAgICAgICAgICAgZGVmIG15X2Fic3RyYWN0X21ldGhvZChzZWxmLCAuLi4pOgogICAgICAgICAgICAgICAgLi4uCiAgICAiIiIKICAgIGZ1bmNvYmouX19pc2Fic3RyYWN0bWV0aG9kX18gPSBUcnVlCiAgICByZXR1cm4gZnVuY29iagoKCmNsYXNzIGFic3RyYWN0cHJvcGVydHkocHJvcGVydHkpOgogICAgIiIiQSBkZWNvcmF0b3IgaW5kaWNhdGluZyBhYnN0cmFjdCBwcm9wZXJ0aWVzLgoKICAgIFJlcXVpcmVzIHRoYXQgdGhlIG1ldGFjbGFzcyBpcyBBQkNNZXRhIG9yIGRlcml2ZWQgZnJvbSBpdC4gIEEKICAgIGNsYXNzIHRoYXQgaGFzIGEgbWV0YWNsYXNzIGRlcml2ZWQgZnJvbSBBQkNNZXRhIGNhbm5vdCBiZQogICAgaW5zdGFudGlhdGVkIHVubGVzcyBhbGwgb2YgaXRzIGFic3RyYWN0IHByb3BlcnRpZXMgYXJlIG92ZXJyaWRkZW4uCiAgICBUaGUgYWJzdHJhY3QgcHJvcGVydGllcyBjYW4gYmUgY2FsbGVkIHVzaW5nIGFueSBvZiB0aGUgbm9ybWFsCiAgICAnc3VwZXInIGNhbGwgbWVjaGFuaXNtcy4KCiAgICBVc2FnZToKCiAgICAgICAgY2xhc3MgQzoKICAgICAgICAgICAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGEKICAgICAgICAgICAgQGFic3RyYWN0cHJvcGVydHkKICAgICAgICAgICAgZGVmIG15X2Fic3RyYWN0X3Byb3BlcnR5KHNlbGYpOgogICAgICAgICAgICAgICAgLi4uCgogICAgVGhpcyBkZWZpbmVzIGEgcmVhZC1vbmx5IHByb3BlcnR5OyB5b3UgY2FuIGFsc28gZGVmaW5lIGEgcmVhZC13cml0ZQogICAgYWJzdHJhY3QgcHJvcGVydHkgdXNpbmcgdGhlICdsb25nJyBmb3JtIG9mIHByb3BlcnR5IGRlY2xhcmF0aW9uOgoKICAgICAgICBjbGFzcyBDOgogICAgICAgICAgICBfX21ldGFjbGFzc19fID0gQUJDTWV0YQogICAgICAgICAgICBkZWYgZ2V0eChzZWxmKTogLi4uCiAgICAgICAgICAgIGRlZiBzZXR4KHNlbGYsIHZhbHVlKTogLi4uCiAgICAgICAgICAgIHggPSBhYnN0cmFjdHByb3BlcnR5KGdldHgsIHNldHgpCiAgICAiIiIKICAgIF9faXNhYnN0cmFjdG1ldGhvZF9fID0gVHJ1ZQoKCmNsYXNzIEFCQ01ldGEodHlwZSk6CgogICAgIiIiTWV0YWNsYXNzIGZvciBkZWZpbmluZyBBYnN0cmFjdCBCYXNlIENsYXNzZXMgKEFCQ3MpLgoKICAgIFVzZSB0aGlzIG1ldGFjbGFzcyB0byBjcmVhdGUgYW4gQUJDLiAgQW4gQUJDIGNhbiBiZSBzdWJjbGFzc2VkCiAgICBkaXJlY3RseSwgYW5kIHRoZW4gYWN0cyBhcyBhIG1peC1pbiBjbGFzcy4gIFlvdSBjYW4gYWxzbyByZWdpc3RlcgogICAgdW5yZWxhdGVkIGNvbmNyZXRlIGNsYXNzZXMgKGV2ZW4gYnVpbHQtaW4gY2xhc3NlcykgYW5kIHVucmVsYXRlZAogICAgQUJDcyBhcyAndmlydHVhbCBzdWJjbGFzc2VzJyAtLSB0aGVzZSBhbmQgdGhlaXIgZGVzY2VuZGFudHMgd2lsbAogICAgYmUgY29uc2lkZXJlZCBzdWJjbGFzc2VzIG9mIHRoZSByZWdpc3RlcmluZyBBQkMgYnkgdGhlIGJ1aWx0LWluCiAgICBpc3N1YmNsYXNzKCkgZnVuY3Rpb24sIGJ1dCB0aGUgcmVnaXN0ZXJpbmcgQUJDIHdvbid0IHNob3cgdXAgaW4KICAgIHRoZWlyIE1STyAoTWV0aG9kIFJlc29sdXRpb24gT3JkZXIpIG5vciB3aWxsIG1ldGhvZAogICAgaW1wbGVtZW50YXRpb25zIGRlZmluZWQgYnkgdGhlIHJlZ2lzdGVyaW5nIEFCQyBiZSBjYWxsYWJsZSAobm90CiAgICBldmVuIHZpYSBzdXBlcigpKS4KCiAgICAiIiIKCiAgICAjIEEgZ2xvYmFsIGNvdW50ZXIgdGhhdCBpcyBpbmNyZW1lbnRlZCBlYWNoIHRpbWUgYSBjbGFzcyBpcwogICAgIyByZWdpc3RlcmVkIGFzIGEgdmlydHVhbCBzdWJjbGFzcyBvZiBhbnl0aGluZy4gIEl0IGZvcmNlcyB0aGUKICAgICMgbmVnYXRpdmUgY2FjaGUgdG8gYmUgY2xlYXJlZCBiZWZvcmUgaXRzIG5leHQgdXNlLgogICAgX2FiY19pbnZhbGlkYXRpb25fY291bnRlciA9IDAKCiAgICBkZWYgX19uZXdfXyhtY2xzLCBuYW1lLCBiYXNlcywgbmFtZXNwYWNlKToKICAgICAgICBjbHMgPSBzdXBlcihBQkNNZXRhLCBtY2xzKS5fX25ld19fKG1jbHMsIG5hbWUsIGJhc2VzLCBuYW1lc3BhY2UpCiAgICAgICAgIyBDb21wdXRlIHNldCBvZiBhYnN0cmFjdCBtZXRob2QgbmFtZXMKICAgICAgICBhYnN0cmFjdHMgPSBzZXQobmFtZQogICAgICAgICAgICAgICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gbmFtZXNwYWNlLml0ZW1zKCkKICAgICAgICAgICAgICAgICAgICAgaWYgZ2V0YXR0cih2YWx1ZSwgIl9faXNhYnN0cmFjdG1ldGhvZF9fIiwgRmFsc2UpKQogICAgICAgIGZvciBiYXNlIGluIGJhc2VzOgogICAgICAgICAgICBmb3IgbmFtZSBpbiBnZXRhdHRyKGJhc2UsICJfX2Fic3RyYWN0bWV0aG9kc19fIiwgc2V0KCkpOgogICAgICAgICAgICAgICAgdmFsdWUgPSBnZXRhdHRyKGNscywgbmFtZSwgTm9uZSkKICAgICAgICAgICAgICAgIGlmIGdldGF0dHIodmFsdWUsICJfX2lzYWJzdHJhY3RtZXRob2RfXyIsIEZhbHNlKToKICAgICAgICAgICAgICAgICAgICBhYnN0cmFjdHMuYWRkKG5hbWUpCiAgICAgICAgY2xzLl9fYWJzdHJhY3RtZXRob2RzX18gPSBmcm96ZW5zZXQoYWJzdHJhY3RzKQogICAgICAgICMgU2V0IHVwIGluaGVyaXRhbmNlIHJlZ2lzdHJ5CiAgICAgICAgY2xzLl9hYmNfcmVnaXN0cnkgPSBXZWFrU2V0KCkKICAgICAgICBjbHMuX2FiY19jYWNoZSA9IFdlYWtTZXQoKQogICAgICAgIGNscy5fYWJjX25lZ2F0aXZlX2NhY2hlID0gV2Vha1NldCgpCiAgICAgICAgY2xzLl9hYmNfbmVnYXRpdmVfY2FjaGVfdmVyc2lvbiA9IEFCQ01ldGEuX2FiY19pbnZhbGlkYXRpb25fY291bnRlcgogICAgICAgIHJldHVybiBjbHMKCiAgICBkZWYgcmVnaXN0ZXIoY2xzLCBzdWJjbGFzcyk6CiAgICAgICAgIiIiUmVnaXN0ZXIgYSB2aXJ0dWFsIHN1YmNsYXNzIG9mIGFuIEFCQy4iIiIKICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzdWJjbGFzcywgKHR5cGUsIHR5cGVzLkNsYXNzVHlwZSkpOgogICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIkNhbiBvbmx5IHJlZ2lzdGVyIGNsYXNzZXMiKQogICAgICAgIGlmIGlzc3ViY2xhc3Moc3ViY2xhc3MsIGNscyk6CiAgICAgICAgICAgIHJldHVybiAgIyBBbHJlYWR5IGEgc3ViY2xhc3MKICAgICAgICAjIFN1YnRsZTogdGVzdCBmb3IgY3ljbGVzICphZnRlciogdGVzdGluZyBmb3IgImFscmVhZHkgYSBzdWJjbGFzcyI7CiAgICAgICAgIyB0aGlzIG1lYW5zIHdlIGFsbG93IFgucmVnaXN0ZXIoWCkgYW5kIGludGVycHJldCBpdCBhcyBhIG5vLW9wLgogICAgICAgIGlmIGlzc3ViY2xhc3MoY2xzLCBzdWJjbGFzcyk6CiAgICAgICAgICAgICMgVGhpcyB3b3VsZCBjcmVhdGUgYSBjeWNsZSwgd2hpY2ggaXMgYmFkIGZvciB0aGUgYWxnb3JpdGhtIGJlbG93CiAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiUmVmdXNpbmcgdG8gY3JlYXRlIGFuIGluaGVyaXRhbmNlIGN5Y2xlIikKICAgICAgICBjbHMuX2FiY19yZWdpc3RyeS5hZGQoc3ViY2xhc3MpCiAgICAgICAgQUJDTWV0YS5fYWJjX2ludmFsaWRhdGlvbl9jb3VudGVyICs9IDEgICMgSW52YWxpZGF0ZSBuZWdhdGl2ZSBjYWNoZQoKICAgIGRlZiBfZHVtcF9yZWdpc3RyeShjbHMsIGZpbGU9Tm9uZSk6CiAgICAgICAgIiIiRGVidWcgaGVscGVyIHRvIHByaW50IHRoZSBBQkMgcmVnaXN0cnkuIiIiCiAgICAgICAgcHJpbnQgPj4gZmlsZSwgIkNsYXNzOiAlcy4lcyIgJSAoY2xzLl9fbW9kdWxlX18sIGNscy5fX25hbWVfXykKICAgICAgICBwcmludCA+PiBmaWxlLCAiSW52LmNvdW50ZXI6ICVzIiAlIEFCQ01ldGEuX2FiY19pbnZhbGlkYXRpb25fY291bnRlcgogICAgICAgIGZvciBuYW1lIGluIHNvcnRlZChjbHMuX19kaWN0X18ua2V5cygpKToKICAgICAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCJfYWJjXyIpOgogICAgICAgICAgICAgICAgdmFsdWUgPSBnZXRhdHRyKGNscywgbmFtZSkKICAgICAgICAgICAgICAgIHByaW50ID4+IGZpbGUsICIlczogJXIiICUgKG5hbWUsIHZhbHVlKQoKICAgIGRlZiBfX2luc3RhbmNlY2hlY2tfXyhjbHMsIGluc3RhbmNlKToKICAgICAgICAiIiJPdmVycmlkZSBmb3IgaXNpbnN0YW5jZShpbnN0YW5jZSwgY2xzKS4iIiIKICAgICAgICAjIElubGluZSB0aGUgY2FjaGUgY2hlY2tpbmcgd2hlbiBpdCdzIHNpbXBsZS4KICAgICAgICBzdWJjbGFzcyA9IGdldGF0dHIoaW5zdGFuY2UsICdfX2NsYXNzX18nLCBOb25lKQogICAgICAgIGlmIHN1YmNsYXNzIGlzIG5vdCBOb25lIGFuZCBzdWJjbGFzcyBpbiBjbHMuX2FiY19jYWNoZToKICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICBzdWJ0eXBlID0gdHlwZShpbnN0YW5jZSkKICAgICAgICAjIE9sZC1zdHlsZSBpbnN0YW5jZXMKICAgICAgICBpZiBzdWJ0eXBlIGlzIF9JbnN0YW5jZVR5cGU6CiAgICAgICAgICAgIHN1YnR5cGUgPSBzdWJjbGFzcwogICAgICAgIGlmIHN1YnR5cGUgaXMgc3ViY2xhc3Mgb3Igc3ViY2xhc3MgaXMgTm9uZToKICAgICAgICAgICAgaWYgKGNscy5fYWJjX25lZ2F0aXZlX2NhY2hlX3ZlcnNpb24gPT0KICAgICAgICAgICAgICAgIEFCQ01ldGEuX2FiY19pbnZhbGlkYXRpb25fY291bnRlciBhbmQKICAgICAgICAgICAgICAgIHN1YnR5cGUgaW4gY2xzLl9hYmNfbmVnYXRpdmVfY2FjaGUpOgogICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgICAgICMgRmFsbCBiYWNrIHRvIHRoZSBzdWJjbGFzcyBjaGVjay4KICAgICAgICAgICAgcmV0dXJuIGNscy5fX3N1YmNsYXNzY2hlY2tfXyhzdWJ0eXBlKQogICAgICAgIHJldHVybiAoY2xzLl9fc3ViY2xhc3NjaGVja19fKHN1YmNsYXNzKSBvcgogICAgICAgICAgICAgICAgY2xzLl9fc3ViY2xhc3NjaGVja19fKHN1YnR5cGUpKQoKICAgIGRlZiBfX3N1YmNsYXNzY2hlY2tfXyhjbHMsIHN1YmNsYXNzKToKICAgICAgICAiIiJPdmVycmlkZSBmb3IgaXNzdWJjbGFzcyhzdWJjbGFzcywgY2xzKS4iIiIKICAgICAgICAjIENoZWNrIGNhY2hlCiAgICAgICAgaWYgc3ViY2xhc3MgaW4gY2xzLl9hYmNfY2FjaGU6CiAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgIyBDaGVjayBuZWdhdGl2ZSBjYWNoZTsgbWF5IGhhdmUgdG8gaW52YWxpZGF0ZQogICAgICAgIGlmIGNscy5fYWJjX25lZ2F0aXZlX2NhY2hlX3ZlcnNpb24gPCBBQkNNZXRhLl9hYmNfaW52YWxpZGF0aW9uX2NvdW50ZXI6CiAgICAgICAgICAgICMgSW52YWxpZGF0ZSB0aGUgbmVnYXRpdmUgY2FjaGUKICAgICAgICAgICAgY2xzLl9hYmNfbmVnYXRpdmVfY2FjaGUgPSBXZWFrU2V0KCkKICAgICAgICAgICAgY2xzLl9hYmNfbmVnYXRpdmVfY2FjaGVfdmVyc2lvbiA9IEFCQ01ldGEuX2FiY19pbnZhbGlkYXRpb25fY291bnRlcgogICAgICAgIGVsaWYgc3ViY2xhc3MgaW4gY2xzLl9hYmNfbmVnYXRpdmVfY2FjaGU6CiAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICMgQ2hlY2sgdGhlIHN1YmNsYXNzIGhvb2sKICAgICAgICBvayA9IGNscy5fX3N1YmNsYXNzaG9va19fKHN1YmNsYXNzKQogICAgICAgIGlmIG9rIGlzIG5vdCBOb3RJbXBsZW1lbnRlZDoKICAgICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uob2ssIGJvb2wpCiAgICAgICAgICAgIGlmIG9rOgogICAgICAgICAgICAgICAgY2xzLl9hYmNfY2FjaGUuYWRkKHN1YmNsYXNzKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgY2xzLl9hYmNfbmVnYXRpdmVfY2FjaGUuYWRkKHN1YmNsYXNzKQogICAgICAgICAgICByZXR1cm4gb2sKICAgICAgICAjIENoZWNrIGlmIGl0J3MgYSBkaXJlY3Qgc3ViY2xhc3MKICAgICAgICBpZiBjbHMgaW4gZ2V0YXR0cihzdWJjbGFzcywgJ19fbXJvX18nLCAoKSk6CiAgICAgICAgICAgIGNscy5fYWJjX2NhY2hlLmFkZChzdWJjbGFzcykKICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAjIENoZWNrIGlmIGl0J3MgYSBzdWJjbGFzcyBvZiBhIHJlZ2lzdGVyZWQgY2xhc3MgKHJlY3Vyc2l2ZSkKICAgICAgICBmb3IgcmNscyBpbiBjbHMuX2FiY19yZWdpc3RyeToKICAgICAgICAgICAgaWYgaXNzdWJjbGFzcyhzdWJjbGFzcywgcmNscyk6CiAgICAgICAgICAgICAgICBjbHMuX2FiY19jYWNoZS5hZGQoc3ViY2xhc3MpCiAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICMgQ2hlY2sgaWYgaXQncyBhIHN1YmNsYXNzIG9mIGEgc3ViY2xhc3MgKHJlY3Vyc2l2ZSkKICAgICAgICBmb3Igc2NscyBpbiBjbHMuX19zdWJjbGFzc2VzX18oKToKICAgICAgICAgICAgaWYgaXNzdWJjbGFzcyhzdWJjbGFzcywgc2Nscyk6CiAgICAgICAgICAgICAgICBjbHMuX2FiY19jYWNoZS5hZGQoc3ViY2xhc3MpCiAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICMgTm8gZGljZTsgdXBkYXRlIG5lZ2F0aXZlIGNhY2hlCiAgICAgICAgY2xzLl9hYmNfbmVnYXRpdmVfY2FjaGUuYWRkKHN1YmNsYXNzKQogICAgICAgIHJldHVybiBGYWxzZQp9ctOEAAAoWAcAAABBQkNNZXRhWAUAAABjbGFzc0tBS7qHWAIAAABfQ1gFAAAAY2xhc3NLC0sMh1gQAAAAQUJDTWV0YS5yZWdpc3RlclgDAAAAZGVmS2lLdodYDgAAAGFic3RyYWN0bWV0aG9kWAMAAABkZWZLD0sih1gPAAAAQUJDTWV0YS5fX25ld19fWAMAAABkZWZLVktoh1gWAAAAQUJDTWV0YS5fZHVtcF9yZWdpc3RyeVgDAAAAZGVmS3dLf4dYGQAAAEFCQ01ldGEuX19zdWJjbGFzc2NoZWNrX19YAwAAAGRlZkuUS7qHWBAAAABhYnN0cmFjdHByb3BlcnR5WAUAAABjbGFzc0skSz+HWBkAAABBQkNNZXRhLl9faW5zdGFuY2VjaGVja19fWAMAAABkZWZLgEuTh3V9an1pAABYGwAAAGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pb3LUhAAAhYFy1YQAAH1y1oQAAGJ0VR1hcGFjaGVfYmVhbS51dGlscy5wcm90b191dGlsc3LXhAAAKFgKCAAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKZnJvbSBnb29nbGUucHJvdG9idWYgaW1wb3J0IGFueV9wYjIKZnJvbSBnb29nbGUucHJvdG9idWYgaW1wb3J0IHN0cnVjdF9wYjIKCgpkZWYgcGFja19BbnkobXNnKToKICAiIiJDcmVhdGVzIGEgcHJvdG9idWYgQW55IHdpdGggbXNnIGFzIGl0cyBjb250ZW50LgoKICBSZXR1cm5zIE5vbmUgaWYgbXNnIGlzIE5vbmUuCiAgIiIiCiAgaWYgbXNnIGlzIE5vbmU6CiAgICByZXR1cm4gTm9uZQoKICByZXN1bHQgPSBhbnlfcGIyLkFueSgpCiAgcmVzdWx0LlBhY2sobXNnKQogIHJldHVybiByZXN1bHQKCgpkZWYgdW5wYWNrX0FueShhbnlfbXNnLCBtc2dfY2xhc3MpOgogICIiIlVucGFja3MgYW55X21zZyBpbnRvIG1zZ19jbGFzcy4KCiAgUmV0dXJucyBOb25lIGlmIG1zZ19jbGFzcyBpcyBOb25lLgogICIiIgogIGlmIG1zZ19jbGFzcyBpcyBOb25lOgogICAgcmV0dXJuIE5vbmUKICBtc2cgPSBtc2dfY2xhc3MoKQogIGFueV9tc2cuVW5wYWNrKG1zZykKICByZXR1cm4gbXNnCgoKZGVmIHBhcnNlX0J5dGVzKHNlcmlhbGl6ZWRfYnl0ZXMsIG1zZ19jbGFzcyk6CiAgIiIiUGFyc2VzIHRoZSBTdHJpbmcgb2YgYnl0ZXMgaW50byBtc2dfY2xhc3MuCgogIFJldHVybnMgdGhlIGlucHV0IGJ5dGVzIGlmIG1zZ19jbGFzcyBpcyBOb25lLiIiIgogIGlmIG1zZ19jbGFzcyBpcyBOb25lIG9yIG1zZ19jbGFzcyBpcyBieXRlczoKICAgIHJldHVybiBzZXJpYWxpemVkX2J5dGVzCiAgbXNnID0gbXNnX2NsYXNzKCkKICBtc2cuUGFyc2VGcm9tU3RyaW5nKHNlcmlhbGl6ZWRfYnl0ZXMpCiAgcmV0dXJuIG1zZwoKCmRlZiBwYWNrX1N0cnVjdCgqKmt3YXJncyk6CiAgIiIiUmV0dXJucyBhIHN0cnVjdCBjb250YWluaW5nIHRoZSB2YWx1ZXMgaW5kaWNhdGVkIGJ5IGt3YXJncy4KICAiIiIKICBtc2cgPSBzdHJ1Y3RfcGIyLlN0cnVjdCgpCiAgZm9yIGtleSwgdmFsdWUgaW4ga3dhcmdzLml0ZW1zKCk6CiAgICBtc2dba2V5XSA9IHZhbHVlICAjIHB5bGludDogZGlzYWJsZT11bnN1YnNjcmlwdGFibGUtb2JqZWN0LCB1bnN1cHBvcnRlZC1hc3NpZ25tZW50LW9wZXJhdGlvbgogIHJldHVybiBtc2cKCgpkZWYgZnJvbV9taWNyb3MoY2xzLCBtaWNyb3MpOgogIHJlc3VsdCA9IGNscygpCiAgcmVzdWx0LkZyb21NaWNyb3NlY29uZHMobWljcm9zKQogIHJldHVybiByZXN1bHQKfXLYhAAAKFgIAAAAcGFja19BbnlYAwAAAGRlZksaSyWHWAsAAABwYXJzZV9CeXRlc1gDAAAAZGVmSzNLPIdYCwAAAHBhY2tfU3RydWN0WAMAAABkZWZLPktFh1gLAAAAZnJvbV9taWNyb3NYAwAAAGRlZktHS0uHWAoAAAB1bnBhY2tfQW55WAMAAABkZWZLJ0sxh3V9ctmEAAAoWAgAAABwYWNrX0FueWoUYgAAWAsAAABwYXJzZV9CeXRlc2oUYgAAWAsAAABwYWNrX1N0cnVjdGoUYgAAWAsAAABmcm9tX21pY3Jvc2oUYgAAWAoAAAB1bnBhY2tfQW55ahRiAAB1an1pAABYHQAAAGFwYWNoZV9iZWFtLnV0aWxzLnByb3RvX3V0aWxzctqEAACFgXLbhAAAfXLchAAAYnRy3YQAAFUwYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjKFjNHQAAZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKIyBHZW5lcmF0ZWQgYnkgdGhlIGdSUEMgUHl0aG9uIHByb3RvY29sIGNvbXBpbGVyIHBsdWdpbi4gRE8gTk9UIEVESVQhCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdAppbXBvcnQgZ3JwYwoKZnJvbSAuIGltcG9ydCBiZWFtX2ZuX2FwaV9wYjIgYXMgYmVhbV9fZm5fX2FwaV9fcGIyCgoKY2xhc3MgQmVhbUZuQ29udHJvbFN0dWIob2JqZWN0KToKICAiIiIKICBDb250cm9sIFBsYW5lIEFQSQoKICBQcm9ncmVzcyByZXBvcnRpbmcgYW5kIHNwbGl0dGluZyBzdGlsbCBuZWVkIGZ1cnRoZXIgdmV0dGluZy4gQWxzbywgdGhpcyBtYXkKICBjaGFuZ2Ugd2l0aCB0aGUgYWRkaXRpb24gb2YgbmV3IHR5cGVzIG9mIGluc3RydWN0aW9ucy9yZXNwb25zZXMgcmVsYXRlZCB0bwogIG1ldHJpY3MuCgogIEFuIEFQSSB0aGF0IGRlc2NyaWJlcyB0aGUgd29yayB0aGF0IGEgU0RLIGhhcm5lc3MgaXMgbWVhbnQgdG8gZG8uCiAgU3RhYmxlCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBjaGFubmVsKToKICAgICIiIkNvbnN0cnVjdG9yLgoKICAgIEFyZ3M6CiAgICAgIGNoYW5uZWw6IEEgZ3JwYy5DaGFubmVsLgogICAgIiIiCiAgICBzZWxmLkNvbnRyb2wgPSBjaGFubmVsLnN0cmVhbV9zdHJlYW0oCiAgICAgICAgJy9vcmcuYXBhY2hlLmJlYW0ubW9kZWwuZm5fZXhlY3V0aW9uLnYxLkJlYW1GbkNvbnRyb2wvQ29udHJvbCcsCiAgICAgICAgcmVxdWVzdF9zZXJpYWxpemVyPWJlYW1fX2ZuX19hcGlfX3BiMi5JbnN0cnVjdGlvblJlc3BvbnNlLlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICAgIHJlc3BvbnNlX2Rlc2VyaWFsaXplcj1iZWFtX19mbl9fYXBpX19wYjIuSW5zdHJ1Y3Rpb25SZXF1ZXN0LkZyb21TdHJpbmcsCiAgICAgICAgKQoKCmNsYXNzIEJlYW1GbkNvbnRyb2xTZXJ2aWNlcihvYmplY3QpOgogICIiIgogIENvbnRyb2wgUGxhbmUgQVBJCgogIFByb2dyZXNzIHJlcG9ydGluZyBhbmQgc3BsaXR0aW5nIHN0aWxsIG5lZWQgZnVydGhlciB2ZXR0aW5nLiBBbHNvLCB0aGlzIG1heQogIGNoYW5nZSB3aXRoIHRoZSBhZGRpdGlvbiBvZiBuZXcgdHlwZXMgb2YgaW5zdHJ1Y3Rpb25zL3Jlc3BvbnNlcyByZWxhdGVkIHRvCiAgbWV0cmljcy4KCiAgQW4gQVBJIHRoYXQgZGVzY3JpYmVzIHRoZSB3b3JrIHRoYXQgYSBTREsgaGFybmVzcyBpcyBtZWFudCB0byBkby4KICBTdGFibGUKICAiIiIKCiAgZGVmIENvbnRyb2woc2VsZiwgcmVxdWVzdF9pdGVyYXRvciwgY29udGV4dCk6CiAgICAiIiJJbnN0cnVjdGlvbnMgc2VudCBieSB0aGUgcnVubmVyIHRvIHRoZSBTREsgcmVxdWVzdGluZyBkaWZmZXJlbnQgdHlwZXMKICAgIG9mIHdvcmsuCiAgICAiIiIKICAgIGNvbnRleHQuc2V0X2NvZGUoZ3JwYy5TdGF0dXNDb2RlLlVOSU1QTEVNRU5URUQpCiAgICBjb250ZXh0LnNldF9kZXRhaWxzKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCgoKZGVmIGFkZF9CZWFtRm5Db250cm9sU2VydmljZXJfdG9fc2VydmVyKHNlcnZpY2VyLCBzZXJ2ZXIpOgogIHJwY19tZXRob2RfaGFuZGxlcnMgPSB7CiAgICAgICdDb250cm9sJzogZ3JwYy5zdHJlYW1fc3RyZWFtX3JwY19tZXRob2RfaGFuZGxlcigKICAgICAgICAgIHNlcnZpY2VyLkNvbnRyb2wsCiAgICAgICAgICByZXF1ZXN0X2Rlc2VyaWFsaXplcj1iZWFtX19mbl9fYXBpX19wYjIuSW5zdHJ1Y3Rpb25SZXNwb25zZS5Gcm9tU3RyaW5nLAogICAgICAgICAgcmVzcG9uc2Vfc2VyaWFsaXplcj1iZWFtX19mbl9fYXBpX19wYjIuSW5zdHJ1Y3Rpb25SZXF1ZXN0LlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICApLAogIH0KICBnZW5lcmljX2hhbmRsZXIgPSBncnBjLm1ldGhvZF9oYW5kbGVyc19nZW5lcmljX2hhbmRsZXIoCiAgICAgICdvcmcuYXBhY2hlLmJlYW0ubW9kZWwuZm5fZXhlY3V0aW9uLnYxLkJlYW1GbkNvbnRyb2wnLCBycGNfbWV0aG9kX2hhbmRsZXJzKQogIHNlcnZlci5hZGRfZ2VuZXJpY19ycGNfaGFuZGxlcnMoKGdlbmVyaWNfaGFuZGxlciwpKQoKCmNsYXNzIEJlYW1GbkRhdGFTdHViKG9iamVjdCk6CiAgIiIiU3RhYmxlCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBjaGFubmVsKToKICAgICIiIkNvbnN0cnVjdG9yLgoKICAgIEFyZ3M6CiAgICAgIGNoYW5uZWw6IEEgZ3JwYy5DaGFubmVsLgogICAgIiIiCiAgICBzZWxmLkRhdGEgPSBjaGFubmVsLnN0cmVhbV9zdHJlYW0oCiAgICAgICAgJy9vcmcuYXBhY2hlLmJlYW0ubW9kZWwuZm5fZXhlY3V0aW9uLnYxLkJlYW1GbkRhdGEvRGF0YScsCiAgICAgICAgcmVxdWVzdF9zZXJpYWxpemVyPWJlYW1fX2ZuX19hcGlfX3BiMi5FbGVtZW50cy5TZXJpYWxpemVUb1N0cmluZywKICAgICAgICByZXNwb25zZV9kZXNlcmlhbGl6ZXI9YmVhbV9fZm5fX2FwaV9fcGIyLkVsZW1lbnRzLkZyb21TdHJpbmcsCiAgICAgICAgKQoKCmNsYXNzIEJlYW1GbkRhdGFTZXJ2aWNlcihvYmplY3QpOgogICIiIlN0YWJsZQogICIiIgoKICBkZWYgRGF0YShzZWxmLCByZXF1ZXN0X2l0ZXJhdG9yLCBjb250ZXh0KToKICAgICIiIlVzZWQgdG8gc2VuZCBkYXRhIGJldHdlZW4gaGFybmVzc2VzLgogICAgIiIiCiAgICBjb250ZXh0LnNldF9jb2RlKGdycGMuU3RhdHVzQ29kZS5VTklNUExFTUVOVEVEKQogICAgY29udGV4dC5zZXRfZGV0YWlscygnTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQoKCmRlZiBhZGRfQmVhbUZuRGF0YVNlcnZpY2VyX3RvX3NlcnZlcihzZXJ2aWNlciwgc2VydmVyKToKICBycGNfbWV0aG9kX2hhbmRsZXJzID0gewogICAgICAnRGF0YSc6IGdycGMuc3RyZWFtX3N0cmVhbV9ycGNfbWV0aG9kX2hhbmRsZXIoCiAgICAgICAgICBzZXJ2aWNlci5EYXRhLAogICAgICAgICAgcmVxdWVzdF9kZXNlcmlhbGl6ZXI9YmVhbV9fZm5fX2FwaV9fcGIyLkVsZW1lbnRzLkZyb21TdHJpbmcsCiAgICAgICAgICByZXNwb25zZV9zZXJpYWxpemVyPWJlYW1fX2ZuX19hcGlfX3BiMi5FbGVtZW50cy5TZXJpYWxpemVUb1N0cmluZywKICAgICAgKSwKICB9CiAgZ2VuZXJpY19oYW5kbGVyID0gZ3JwYy5tZXRob2RfaGFuZGxlcnNfZ2VuZXJpY19oYW5kbGVyKAogICAgICAnb3JnLmFwYWNoZS5iZWFtLm1vZGVsLmZuX2V4ZWN1dGlvbi52MS5CZWFtRm5EYXRhJywgcnBjX21ldGhvZF9oYW5kbGVycykKICBzZXJ2ZXIuYWRkX2dlbmVyaWNfcnBjX2hhbmRsZXJzKChnZW5lcmljX2hhbmRsZXIsKSkKCgpjbGFzcyBCZWFtRm5TdGF0ZVN0dWIob2JqZWN0KToKICAjIG1pc3NpbmcgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGNvbW1lbnQgaW4gLnByb3RvIGZpbGUKICBwYXNzCgogIGRlZiBfX2luaXRfXyhzZWxmLCBjaGFubmVsKToKICAgICIiIkNvbnN0cnVjdG9yLgoKICAgIEFyZ3M6CiAgICAgIGNoYW5uZWw6IEEgZ3JwYy5DaGFubmVsLgogICAgIiIiCiAgICBzZWxmLlN0YXRlID0gY2hhbm5lbC5zdHJlYW1fc3RyZWFtKAogICAgICAgICcvb3JnLmFwYWNoZS5iZWFtLm1vZGVsLmZuX2V4ZWN1dGlvbi52MS5CZWFtRm5TdGF0ZS9TdGF0ZScsCiAgICAgICAgcmVxdWVzdF9zZXJpYWxpemVyPWJlYW1fX2ZuX19hcGlfX3BiMi5TdGF0ZVJlcXVlc3QuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICAgcmVzcG9uc2VfZGVzZXJpYWxpemVyPWJlYW1fX2ZuX19hcGlfX3BiMi5TdGF0ZVJlc3BvbnNlLkZyb21TdHJpbmcsCiAgICAgICAgKQoKCmNsYXNzIEJlYW1GblN0YXRlU2VydmljZXIob2JqZWN0KToKICAjIG1pc3NpbmcgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGNvbW1lbnQgaW4gLnByb3RvIGZpbGUKICBwYXNzCgogIGRlZiBTdGF0ZShzZWxmLCByZXF1ZXN0X2l0ZXJhdG9yLCBjb250ZXh0KToKICAgICIiIlVzZWQgdG8gZ2V0L2FwcGVuZC9jbGVhciBzdGF0ZSBzdG9yZWQgYnkgdGhlIHJ1bm5lciBvbiBiZWhhbGYgb2YgdGhlIFNESy4KICAgICIiIgogICAgY29udGV4dC5zZXRfY29kZShncnBjLlN0YXR1c0NvZGUuVU5JTVBMRU1FTlRFRCkKICAgIGNvbnRleHQuc2V0X2RldGFpbHMoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKCgpkZWYgYWRkX0JlYW1GblN0YXRlU2VydmljZXJfdG9fc2VydmVyKHNlcnZpY2VyLCBzZXJ2ZXIpOgogIHJwY19tZXRob2RfaGFuZGxlcnMgPSB7CiAgICAgICdTdGF0ZSc6IGdycGMuc3RyZWFtX3N0cmVhbV9ycGNfbWV0aG9kX2hhbmRsZXIoCiAgICAgICAgICBzZXJ2aWNlci5TdGF0ZSwKICAgICAgICAgIHJlcXVlc3RfZGVzZXJpYWxpemVyPWJlYW1fX2ZuX19hcGlfX3BiMi5TdGF0ZVJlcXVlc3QuRnJvbVN0cmluZywKICAgICAgICAgIHJlc3BvbnNlX3NlcmlhbGl6ZXI9YmVhbV9fZm5fX2FwaV9fcGIyLlN0YXRlUmVzcG9uc2UuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICksCiAgfQogIGdlbmVyaWNfaGFuZGxlciA9IGdycGMubWV0aG9kX2hhbmRsZXJzX2dlbmVyaWNfaGFuZGxlcigKICAgICAgJ29yZy5hcGFjaGUuYmVhbS5tb2RlbC5mbl9leGVjdXRpb24udjEuQmVhbUZuU3RhdGUnLCBycGNfbWV0aG9kX2hhbmRsZXJzKQogIHNlcnZlci5hZGRfZ2VuZXJpY19ycGNfaGFuZGxlcnMoKGdlbmVyaWNfaGFuZGxlciwpKQoKCmNsYXNzIEJlYW1GbkxvZ2dpbmdTdHViKG9iamVjdCk6CiAgIiIiU3RhYmxlCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBjaGFubmVsKToKICAgICIiIkNvbnN0cnVjdG9yLgoKICAgIEFyZ3M6CiAgICAgIGNoYW5uZWw6IEEgZ3JwYy5DaGFubmVsLgogICAgIiIiCiAgICBzZWxmLkxvZ2dpbmcgPSBjaGFubmVsLnN0cmVhbV9zdHJlYW0oCiAgICAgICAgJy9vcmcuYXBhY2hlLmJlYW0ubW9kZWwuZm5fZXhlY3V0aW9uLnYxLkJlYW1GbkxvZ2dpbmcvTG9nZ2luZycsCiAgICAgICAgcmVxdWVzdF9zZXJpYWxpemVyPWJlYW1fX2ZuX19hcGlfX3BiMi5Mb2dFbnRyeS5MaXN0LlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICAgIHJlc3BvbnNlX2Rlc2VyaWFsaXplcj1iZWFtX19mbl9fYXBpX19wYjIuTG9nQ29udHJvbC5Gcm9tU3RyaW5nLAogICAgICAgICkKCgpjbGFzcyBCZWFtRm5Mb2dnaW5nU2VydmljZXIob2JqZWN0KToKICAiIiJTdGFibGUKICAiIiIKCiAgZGVmIExvZ2dpbmcoc2VsZiwgcmVxdWVzdF9pdGVyYXRvciwgY29udGV4dCk6CiAgICAiIiJBbGxvd3MgZm9yIHRoZSBTREsgdG8gZW1pdCBsb2cgZW50cmllcyB3aGljaCB0aGUgcnVubmVyIGNhbgogICAgYXNzb2NpYXRlIHdpdGggdGhlIGFjdGl2ZSBqb2IuCiAgICAiIiIKICAgIGNvbnRleHQuc2V0X2NvZGUoZ3JwYy5TdGF0dXNDb2RlLlVOSU1QTEVNRU5URUQpCiAgICBjb250ZXh0LnNldF9kZXRhaWxzKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCgoKZGVmIGFkZF9CZWFtRm5Mb2dnaW5nU2VydmljZXJfdG9fc2VydmVyKHNlcnZpY2VyLCBzZXJ2ZXIpOgogIHJwY19tZXRob2RfaGFuZGxlcnMgPSB7CiAgICAgICdMb2dnaW5nJzogZ3JwYy5zdHJlYW1fc3RyZWFtX3JwY19tZXRob2RfaGFuZGxlcigKICAgICAgICAgIHNlcnZpY2VyLkxvZ2dpbmcsCiAgICAgICAgICByZXF1ZXN0X2Rlc2VyaWFsaXplcj1iZWFtX19mbl9fYXBpX19wYjIuTG9nRW50cnkuTGlzdC5Gcm9tU3RyaW5nLAogICAgICAgICAgcmVzcG9uc2Vfc2VyaWFsaXplcj1iZWFtX19mbl9fYXBpX19wYjIuTG9nQ29udHJvbC5TZXJpYWxpemVUb1N0cmluZywKICAgICAgKSwKICB9CiAgZ2VuZXJpY19oYW5kbGVyID0gZ3JwYy5tZXRob2RfaGFuZGxlcnNfZ2VuZXJpY19oYW5kbGVyKAogICAgICAnb3JnLmFwYWNoZS5iZWFtLm1vZGVsLmZuX2V4ZWN1dGlvbi52MS5CZWFtRm5Mb2dnaW5nJywgcnBjX21ldGhvZF9oYW5kbGVycykKICBzZXJ2ZXIuYWRkX2dlbmVyaWNfcnBjX2hhbmRsZXJzKChnZW5lcmljX2hhbmRsZXIsKSkKCgpjbGFzcyBCZWFtRm5FeHRlcm5hbFdvcmtlclBvb2xTdHViKG9iamVjdCk6CiAgIyBtaXNzaW5nIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBjb21tZW50IGluIC5wcm90byBmaWxlCiAgcGFzcwoKICBkZWYgX19pbml0X18oc2VsZiwgY2hhbm5lbCk6CiAgICAiIiJDb25zdHJ1Y3Rvci4KCiAgICBBcmdzOgogICAgICBjaGFubmVsOiBBIGdycGMuQ2hhbm5lbC4KICAgICIiIgogICAgc2VsZi5Ob3RpZnlSdW5uZXJBdmFpbGFibGUgPSBjaGFubmVsLnVuYXJ5X3VuYXJ5KAogICAgICAgICcvb3JnLmFwYWNoZS5iZWFtLm1vZGVsLmZuX2V4ZWN1dGlvbi52MS5CZWFtRm5FeHRlcm5hbFdvcmtlclBvb2wvTm90aWZ5UnVubmVyQXZhaWxhYmxlJywKICAgICAgICByZXF1ZXN0X3NlcmlhbGl6ZXI9YmVhbV9fZm5fX2FwaV9fcGIyLk5vdGlmeVJ1bm5lckF2YWlsYWJsZVJlcXVlc3QuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICAgcmVzcG9uc2VfZGVzZXJpYWxpemVyPWJlYW1fX2ZuX19hcGlfX3BiMi5Ob3RpZnlSdW5uZXJBdmFpbGFibGVSZXNwb25zZS5Gcm9tU3RyaW5nLAogICAgICAgICkKCgpjbGFzcyBCZWFtRm5FeHRlcm5hbFdvcmtlclBvb2xTZXJ2aWNlcihvYmplY3QpOgogICMgbWlzc2luZyBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gY29tbWVudCBpbiAucHJvdG8gZmlsZQogIHBhc3MKCiAgZGVmIE5vdGlmeVJ1bm5lckF2YWlsYWJsZShzZWxmLCByZXF1ZXN0LCBjb250ZXh0KToKICAgICMgbWlzc2luZyBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gY29tbWVudCBpbiAucHJvdG8gZmlsZQogICAgcGFzcwogICAgY29udGV4dC5zZXRfY29kZShncnBjLlN0YXR1c0NvZGUuVU5JTVBMRU1FTlRFRCkKICAgIGNvbnRleHQuc2V0X2RldGFpbHMoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKCgpkZWYgYWRkX0JlYW1GbkV4dGVybmFsV29ya2VyUG9vbFNlcnZpY2VyX3RvX3NlcnZlcihzZXJ2aWNlciwgc2VydmVyKToKICBycGNfbWV0aG9kX2hhbmRsZXJzID0gewogICAgICAnTm90aWZ5UnVubmVyQXZhaWxhYmxlJzogZ3JwYy51bmFyeV91bmFyeV9ycGNfbWV0aG9kX2hhbmRsZXIoCiAgICAgICAgICBzZXJ2aWNlci5Ob3RpZnlSdW5uZXJBdmFpbGFibGUsCiAgICAgICAgICByZXF1ZXN0X2Rlc2VyaWFsaXplcj1iZWFtX19mbl9fYXBpX19wYjIuTm90aWZ5UnVubmVyQXZhaWxhYmxlUmVxdWVzdC5Gcm9tU3RyaW5nLAogICAgICAgICAgcmVzcG9uc2Vfc2VyaWFsaXplcj1iZWFtX19mbl9fYXBpX19wYjIuTm90aWZ5UnVubmVyQXZhaWxhYmxlUmVzcG9uc2UuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICksCiAgfQogIGdlbmVyaWNfaGFuZGxlciA9IGdycGMubWV0aG9kX2hhbmRsZXJzX2dlbmVyaWNfaGFuZGxlcigKICAgICAgJ29yZy5hcGFjaGUuYmVhbS5tb2RlbC5mbl9leGVjdXRpb24udjEuQmVhbUZuRXh0ZXJuYWxXb3JrZXJQb29sJywgcnBjX21ldGhvZF9oYW5kbGVycykKICBzZXJ2ZXIuYWRkX2dlbmVyaWNfcnBjX2hhbmRsZXJzKChnZW5lcmljX2hhbmRsZXIsKSkKfXLehAAAKFgVAAAAQmVhbUZuTG9nZ2luZ1NlcnZpY2VyWAUAAABjbGFzc0upS7SHWBgAAABCZWFtRm5TdGF0ZVN0dWIuX19pbml0X19YAwAAAGRlZktyS32HWBEAAABCZWFtRm5Db250cm9sU3R1YlgFAAAAY2xhc3NLCUsgh1ggAAAAYWRkX0JlYW1GbkRhdGFTZXJ2aWNlcl90b19zZXJ2ZXJYAwAAAGRlZkthS2yHWBkAAABCZWFtRm5TdGF0ZVNlcnZpY2VyLlN0YXRlWAMAAABkZWZLg0uJh1gdAAAAQmVhbUZuTG9nZ2luZ1NlcnZpY2VyLkxvZ2dpbmdYAwAAAGRlZkutS7SHWDYAAABCZWFtRm5FeHRlcm5hbFdvcmtlclBvb2xTZXJ2aWNlci5Ob3RpZnlSdW5uZXJBdmFpbGFibGVYAwAAAGRlZkvYS96HWCAAAABCZWFtRm5FeHRlcm5hbFdvcmtlclBvb2xTZXJ2aWNlclgFAAAAY2xhc3NL1Eveh1gXAAAAQmVhbUZuRGF0YVN0dWIuX19pbml0X19YAwAAAGRlZktIS1OHWCUAAABCZWFtRm5FeHRlcm5hbFdvcmtlclBvb2xTdHViLl9faW5pdF9fWAMAAABkZWZLx0vSh1gdAAAAQmVhbUZuQ29udHJvbFNlcnZpY2VyLkNvbnRyb2xYAwAAAGRlZksuSzWHWCMAAABhZGRfQmVhbUZuTG9nZ2luZ1NlcnZpY2VyX3RvX3NlcnZlclgDAAAAZGVmS7ZLwYdYFwAAAEJlYW1GbkRhdGFTZXJ2aWNlci5EYXRhWAMAAABkZWZLWUtfh1gcAAAAQmVhbUZuRXh0ZXJuYWxXb3JrZXJQb29sU3R1YlgFAAAAY2xhc3NLw0vSh1gaAAAAQmVhbUZuQ29udHJvbFN0dWIuX19pbml0X19YAwAAAGRlZksVSyCHWA4AAABCZWFtRm5EYXRhU3R1YlgFAAAAY2xhc3NLREtTh1gTAAAAQmVhbUZuU3RhdGVTZXJ2aWNlclgFAAAAY2xhc3NLf0uJh1gPAAAAQmVhbUZuU3RhdGVTdHViWAUAAABjbGFzc0tuS32HWBoAAABCZWFtRm5Mb2dnaW5nU3R1Yi5fX2luaXRfX1gDAAAAZGVmS5xLp4dYLgAAAGFkZF9CZWFtRm5FeHRlcm5hbFdvcmtlclBvb2xTZXJ2aWNlcl90b19zZXJ2ZXJYAwAAAGRlZkvgS+uHWBIAAABCZWFtRm5EYXRhU2VydmljZXJYBQAAAGNsYXNzS1VLX4dYIwAAAGFkZF9CZWFtRm5Db250cm9sU2VydmljZXJfdG9fc2VydmVyWAMAAABkZWZLN0tCh1gVAAAAQmVhbUZuQ29udHJvbFNlcnZpY2VyWAUAAABjbGFzc0siSzWHWBEAAABCZWFtRm5Mb2dnaW5nU3R1YlgFAAAAY2xhc3NLmEunh1ghAAAAYWRkX0JlYW1GblN0YXRlU2VydmljZXJfdG9fc2VydmVyWAMAAABkZWZLi0uWh3V9ct+EAAAoWBMAAABCZWFtRm5TdGF0ZVNlcnZpY2VyWDAAAABhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGNy4IQAAFgPAAAAQmVhbUZuU3RhdGVTdHViauCEAABYEgAAAEJlYW1GbkRhdGFTZXJ2aWNlcmrghAAAWB0AAABCZWFtRm5Mb2dnaW5nU2VydmljZXIuTG9nZ2luZ2rghAAAWCAAAABhZGRfQmVhbUZuRGF0YVNlcnZpY2VyX3RvX3NlcnZlcmrghAAAWCAAAABCZWFtRm5FeHRlcm5hbFdvcmtlclBvb2xTZXJ2aWNlcmrghAAAWC4AAABhZGRfQmVhbUZuRXh0ZXJuYWxXb3JrZXJQb29sU2VydmljZXJfdG9fc2VydmVyauCEAABYFQAAAEJlYW1GbkxvZ2dpbmdTZXJ2aWNlcmrghAAAWCMAAABhZGRfQmVhbUZuQ29udHJvbFNlcnZpY2VyX3RvX3NlcnZlcmrghAAAWBEAAABCZWFtRm5Db250cm9sU3R1YmrghAAAWDYAAABCZWFtRm5FeHRlcm5hbFdvcmtlclBvb2xTZXJ2aWNlci5Ob3RpZnlSdW5uZXJBdmFpbGFibGVq4IQAAFgdAAAAQmVhbUZuQ29udHJvbFNlcnZpY2VyLkNvbnRyb2xq4IQAAFgcAAAAQmVhbUZuRXh0ZXJuYWxXb3JrZXJQb29sU3R1YmrghAAAWBUAAABCZWFtRm5Db250cm9sU2VydmljZXJq4IQAAFgZAAAAQmVhbUZuU3RhdGVTZXJ2aWNlci5TdGF0ZWrghAAAWBEAAABCZWFtRm5Mb2dnaW5nU3R1YmrghAAAWCMAAABhZGRfQmVhbUZuTG9nZ2luZ1NlcnZpY2VyX3RvX3NlcnZlcmrghAAAWBcAAABCZWFtRm5EYXRhU2VydmljZXIuRGF0YWrghAAAWCEAAABhZGRfQmVhbUZuU3RhdGVTZXJ2aWNlcl90b19zZXJ2ZXJq4IQAAFgOAAAAQmVhbUZuRGF0YVN0dWJq4IQAAHVqfWkAAFgwAAAAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjcuGEAACFgXLihAAAfXLjhAAAYnRy5IQAAFUgYXBhY2hlX2JlYW0uaW50ZXJuYWwuaHR0cF9jbGllbnQoWKEJAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIlV0aWxpdHkgZnVuY3Rpb25zIHVzZWQgZm9yIGNyZWF0aW5nIGEgY29tbW9uIEh0dHAgY2xpZW50IGZyb20gaHR0cGxpYjIuCgpGb3IgaW50ZXJuYWwgdXNlIG9ubHkuIE5vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCiIiIgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IG9zCmltcG9ydCByZQoKaW1wb3J0IGh0dHBsaWIyCgojIFRoaXMgaXMgdGhlIG51bWJlciBvZiBzZWNvbmRzIHRoZSBsaWJyYXJ5IHdpbGwgd2FpdCBmb3IgR0NTIG9wZXJhdGlvbnMgdG8KIyBjb21wbGV0ZS4KREVGQVVMVF9IVFRQX1RJTUVPVVRfU0VDT05EUyA9IDYwCgoKZGVmIHByb3h5X2luZm9fZnJvbV9lbnZpcm9ubWVudF92YXIocHJveHlfZW52X3Zhcik6CiAgIiIiUmVhZHMgcHJveHkgaW5mbyBmcm9tIHRoZSBlbnZpcm9ubWVudCBhbmQgY29udmVydHMgdG8gaHR0cGxpYjIuUHJveHlJbmZvLgoKICBBcmdzOgogICAgcHJveHlfZW52X3ZhcjogZW52aXJvbm1lbnQgdmFyaWFibGUgc3RyaW5nIHRvIHJlYWQsIGh0dHBfcHJveHkgb3IKICAgICAgIGh0dHBzX3Byb3h5IChpbiBsb3dlciBjYXNlKS4KICAgICAgIEV4YW1wbGU6IGh0dHA6Ly9teXByb3h5LmRvbWFpbi5jb206ODA4MAoKICBSZXR1cm5zOgogICAgaHR0cGxpYjIuUHJveHlJbmZvIGNvbnN0cnVjdGVkIGZyb20gdGhlIGVudmlyb25tZW50IHN0cmluZy4KICAiIiIKICBwcm94eV91cmwgPSBvcy5lbnZpcm9uLmdldChwcm94eV9lbnZfdmFyKQogIGlmIG5vdCBwcm94eV91cmw6CiAgICByZXR1cm4gTm9uZQogIHByb3h5X3Byb3RvY29sID0gcHJveHlfZW52X3Zhci5sb3dlcigpLnNwbGl0KCdfJylbMF0KICBpZiBub3QgcmUubWF0Y2goJ15odHRwcz86Ly8nLCBwcm94eV91cmwsIGZsYWdzPXJlLklHTk9SRUNBU0UpOgogICAgbG9nZ2luZy53YXJuKCJwcm94eV9pbmZvX2Zyb21fdXJsIHJlcXVpcmVzIGEgcHJvdG9jb2wsIHdoaWNoIGlzIGFsd2F5cyAiCiAgICAgICAgICAgICAgICAgImh0dHAgb3IgaHR0cHMuIikKICAgIHByb3h5X3VybCA9IHByb3h5X3Byb3RvY29sICsgJzovLycgKyBwcm94eV91cmwKICByZXR1cm4gaHR0cGxpYjIucHJveHlfaW5mb19mcm9tX3VybChwcm94eV91cmwsIG1ldGhvZD1wcm94eV9wcm90b2NvbCkKCgpkZWYgZ2V0X25ld19odHRwKCk6CiAgIiIiQ3JlYXRlcyBhbmQgcmV0dXJucyBhIG5ldyBodHRwbGliMi5IdHRwIGluc3RhbmNlLgoKICBSZXR1cm5zOgogICAgQW4gaW5pdGlhbGl6ZWQgaHR0cGxpYjIuSHR0cCBpbnN0YW5jZS4KICAiIiIKICBwcm94eV9pbmZvID0gTm9uZQogIGZvciBwcm94eV9lbnZfdmFyIGluIFsnaHR0cF9wcm94eScsICdodHRwc19wcm94eSddOgogICAgaWYgb3MuZW52aXJvbi5nZXQocHJveHlfZW52X3Zhcik6CiAgICAgIHByb3h5X2luZm8gPSBwcm94eV9pbmZvX2Zyb21fZW52aXJvbm1lbnRfdmFyKHByb3h5X2Vudl92YXIpCiAgICAgIGJyZWFrCiAgIyBVc2UgYSBub24taW5maW5pdGUgU1NMIHRpbWVvdXQgdG8gYXZvaWQgaGFuZ3MgZHVyaW5nIG5ldHdvcmsgZmxha2luZXNzLgogIHJldHVybiBodHRwbGliMi5IdHRwKHByb3h5X2luZm89cHJveHlfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PURFRkFVTFRfSFRUUF9USU1FT1VUX1NFQ09ORFMpCn1y5YQAAChYDAAAAGdldF9uZXdfaHR0cFgDAAAAZGVmSzlLR4dYHwAAAHByb3h5X2luZm9fZnJvbV9lbnZpcm9ubWVudF92YXJYAwAAAGRlZksjSzeHdX1y5oQAAChYDAAAAGdldF9uZXdfaHR0cFggAAAAYXBhY2hlX2JlYW0uaW50ZXJuYWwuaHR0cF9jbGllbnRy54QAAFgfAAAAcHJveHlfaW5mb19mcm9tX2Vudmlyb25tZW50X3ZhcmrnhAAAdWp9aQAAWCAAAABhcGFjaGVfYmVhbS5pbnRlcm5hbC5odHRwX2NsaWVudHLohAAAhYFy6YQAAH1y6oQAAGJ0cuuEAABVIWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybShYDXcAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiUFRyYW5zZm9ybSBhbmQgZGVzY2VuZGFudHMuCgpBIFBUcmFuc2Zvcm0gaXMgYW4gb2JqZWN0IGRlc2NyaWJpbmcgKG5vdCBleGVjdXRpbmcpIGEgY29tcHV0YXRpb24uIFRoZSBhY3R1YWwKZXhlY3V0aW9uIHNlbWFudGljcyBmb3IgYSB0cmFuc2Zvcm0gaXMgY2FwdHVyZWQgYnkgYSBydW5uZXIgb2JqZWN0LiBBIHRyYW5zZm9ybQpvYmplY3QgYWx3YXlzIGJlbG9uZ3MgdG8gYSBwaXBlbGluZSBvYmplY3QuCgpBIFBUcmFuc2Zvcm0gZGVyaXZlZCBjbGFzcyBuZWVkcyB0byBkZWZpbmUgdGhlIGV4cGFuZCgpIG1ldGhvZCB0aGF0IGRlc2NyaWJlcwpob3cgb25lIG9yIG1vcmUgUFZhbHVlcyBhcmUgY3JlYXRlZCBieSB0aGUgdHJhbnNmb3JtLgoKVGhlIG1vZHVsZSBkZWZpbmVzIGEgZmV3IHN0YW5kYXJkIHRyYW5zZm9ybXM6IEZsYXRNYXAgKHBhcmFsbGVsIGRvKSwKR3JvdXBCeUtleSAoZ3JvdXAgYnkga2V5KSwgZXRjLiBOb3RlIHRoYXQgdGhlIGV4cGFuZCgpIG1ldGhvZHMgZm9yIHRoZXNlCmNsYXNzZXMgY29udGFpbiBjb2RlIHRoYXQgd2lsbCBhZGQgbm9kZXMgdG8gdGhlIHByb2Nlc3NpbmcgZ3JhcGggYXNzb2NpYXRlZAp3aXRoIGEgcGlwZWxpbmUuCgpBcyBzdXBwb3J0IGZvciB0aGUgRmxhdE1hcCB0cmFuc2Zvcm0sIHRoZSBtb2R1bGUgYWxzbyBkZWZpbmVzIGEgRG9GbgpjbGFzcyBhbmQgd3JhcHBlciBjbGFzcyB0aGF0IGFsbG93cyBsYW1iZGEgZnVuY3Rpb25zIHRvIGJlIHVzZWQgYXMKRmxhdE1hcCBwcm9jZXNzaW5nIGZ1bmN0aW9ucy4KIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGNvcHkKaW1wb3J0IGl0ZXJ0b29scwppbXBvcnQgb3BlcmF0b3IKaW1wb3J0IG9zCmltcG9ydCBzeXMKaW1wb3J0IHRocmVhZGluZwpmcm9tIGJ1aWx0aW5zIGltcG9ydCBoZXgKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0CmZyb20gYnVpbHRpbnMgaW1wb3J0IHppcApmcm9tIGZ1bmN0b29scyBpbXBvcnQgcmVkdWNlCgpmcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgbWVzc2FnZQoKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgZXJyb3IKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgcHZhbHVlCmZyb20gYXBhY2hlX2JlYW0uaW50ZXJuYWwgaW1wb3J0IHBpY2tsZXIKZnJvbSBhcGFjaGVfYmVhbS5pbnRlcm5hbCBpbXBvcnQgdXRpbApmcm9tIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5IGltcG9ydCBweXRob25fdXJucwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheSBpbXBvcnQgRGlzcGxheURhdGFJdGVtCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5IGltcG9ydCBIYXNEaXNwbGF5RGF0YQpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cyBpbXBvcnQgdHlwZWhpbnRzCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnMgaW1wb3J0IFR5cGVDaGVja0Vycm9yCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnMgaW1wb3J0IFdpdGhUeXBlSGludHMKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9ycyBpbXBvcnQgZ2V0Y2FsbGFyZ3NfZm9yaGludHMKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9ycyBpbXBvcnQgZ2V0ZnVsbGFyZ3NwZWMKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2UgaW1wb3J0IGluc3RhbmNlX3RvX3R5cGUKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzIGltcG9ydCB2YWxpZGF0ZV9jb21wb3NpdGVfdHlwZV9wYXJhbQpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzIGltcG9ydCBwcm90b191dGlscwoKX19hbGxfXyA9IFsKICAgICdQVHJhbnNmb3JtJywKICAgICdwdHJhbnNmb3JtX2ZuJywKICAgICdsYWJlbF9mcm9tX2NhbGxhYmxlJywKICAgIF0KCgpjbGFzcyBfUFZhbHVlaXNoVHJhbnNmb3JtKG9iamVjdCk6CiAgIiIiVmlzaXRvciBmb3IgUFZhbHVlaXNoIG9iamVjdHMuCgogIEEgUFZhbHVlaXNoIGlzIGEgUFZhbHVlLCBvciBsaXN0LCB0dXBsZSwgZGljdCBvZiBQVmFsdWVzaXNoIG9iamVjdHMuCgogIFRoaXMgdmlzaXRzIGEgUFZhbHVlaXNoLCBjb250c3RydWN0aW5nIGEgKHBvc3NpYmx5IG11dGF0ZWQpIGNvcHkuCiAgIiIiCiAgZGVmIHZpc2l0X25lc3RlZChzZWxmLCBub2RlLCAqYXJncyk6CiAgICBpZiBpc2luc3RhbmNlKG5vZGUsICh0dXBsZSwgbGlzdCkpOgogICAgICBhcmdzID0gW3NlbGYudmlzaXQoeCwgKmFyZ3MpIGZvciB4IGluIG5vZGVdCiAgICAgIGlmIGlzaW5zdGFuY2Uobm9kZSwgdHVwbGUpIGFuZCBoYXNhdHRyKG5vZGUuX19jbGFzc19fLCAnX21ha2UnKToKICAgICAgICAjIG5hbWVkdHVwbGVzIHJlcXVpcmUgdW5wYWNrZWQgYXJndW1lbnRzIGluIHRoZWlyIGNvbnN0cnVjdG9yCiAgICAgICAgcmV0dXJuIG5vZGUuX19jbGFzc19fKCphcmdzKQogICAgICBlbHNlOgogICAgICAgIHJldHVybiBub2RlLl9fY2xhc3NfXyhhcmdzKQogICAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIGRpY3QpOgogICAgICByZXR1cm4gbm9kZS5fX2NsYXNzX18oCiAgICAgICAgICB7a2V5OiBzZWxmLnZpc2l0KHZhbHVlLCAqYXJncykgZm9yIChrZXksIHZhbHVlKSBpbiBub2RlLml0ZW1zKCl9KQogICAgZWxzZToKICAgICAgcmV0dXJuIG5vZGUKCgpjbGFzcyBfU2V0SW5wdXRQVmFsdWVzKF9QVmFsdWVpc2hUcmFuc2Zvcm0pOgogIGRlZiB2aXNpdChzZWxmLCBub2RlLCByZXBsYWNlbWVudHMpOgogICAgaWYgaWQobm9kZSkgaW4gcmVwbGFjZW1lbnRzOgogICAgICByZXR1cm4gcmVwbGFjZW1lbnRzW2lkKG5vZGUpXQogICAgZWxzZToKICAgICAgcmV0dXJuIHNlbGYudmlzaXRfbmVzdGVkKG5vZGUsIHJlcGxhY2VtZW50cykKCgojIENhY2hlcyB0byBhbGxvdyBmb3IgbWF0ZXJpYWxpemF0aW9uIG9mIHZhbHVlcyB3aGVuIGV4ZWN1dGluZyBhIHBpcGVsaW5lCiMgaW4tcHJvY2VzcywgaW4gZWFnZXIgbW9kZS4gIFRoaXMgY2FjaGUgYWxsb3dzIHRoZSBzYW1lIF9NYXRlcmlhbGl6ZWRSZXN1bHQKIyBvYmplY3QgdG8gYmUgYWNjZXNzZWQgYW5kIHVzZWQgZGVzcGl0ZSBSdW5uZXIgQVBJIHJvdW5kLXRyaXAgc2VyaWFsaXphdGlvbi4KX3BpcGVsaW5lX21hdGVyaWFsaXphdGlvbl9jYWNoZSA9IHt9Cl9waXBlbGluZV9tYXRlcmlhbGl6YXRpb25fbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKCgpkZWYgX2FsbG9jYXRlX21hdGVyaWFsaXplZF9waXBlbGluZShwaXBlbGluZSk6CiAgcGlkID0gb3MuZ2V0cGlkKCkKICB3aXRoIF9waXBlbGluZV9tYXRlcmlhbGl6YXRpb25fbG9jazoKICAgIHBpcGVsaW5lX2lkID0gaWQocGlwZWxpbmUpCiAgICBfcGlwZWxpbmVfbWF0ZXJpYWxpemF0aW9uX2NhY2hlWyhwaWQsIHBpcGVsaW5lX2lkKV0gPSB7fQoKCmRlZiBfYWxsb2NhdGVfbWF0ZXJpYWxpemVkX3Jlc3VsdChwaXBlbGluZSk6CiAgcGlkID0gb3MuZ2V0cGlkKCkKICB3aXRoIF9waXBlbGluZV9tYXRlcmlhbGl6YXRpb25fbG9jazoKICAgIHBpcGVsaW5lX2lkID0gaWQocGlwZWxpbmUpCiAgICBpZiAocGlkLCBwaXBlbGluZV9pZCkgbm90IGluIF9waXBlbGluZV9tYXRlcmlhbGl6YXRpb25fY2FjaGU6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ01hdGVyaWFsaXplZCBwaXBlbGluZSBpcyBub3QgYWxsb2NhdGVkIGZvciByZXN1bHQgJwogICAgICAgICAgICAgICAgICAgICAgICdjYWNoZS4nKQogICAgcmVzdWx0X2lkID0gbGVuKF9waXBlbGluZV9tYXRlcmlhbGl6YXRpb25fY2FjaGVbKHBpZCwgcGlwZWxpbmVfaWQpXSkKICAgIHJlc3VsdCA9IF9NYXRlcmlhbGl6ZWRSZXN1bHQocGlwZWxpbmVfaWQsIHJlc3VsdF9pZCkKICAgIF9waXBlbGluZV9tYXRlcmlhbGl6YXRpb25fY2FjaGVbKHBpZCwgcGlwZWxpbmVfaWQpXVtyZXN1bHRfaWRdID0gcmVzdWx0CiAgICByZXR1cm4gcmVzdWx0CgoKZGVmIF9nZXRfbWF0ZXJpYWxpemVkX3Jlc3VsdChwaXBlbGluZV9pZCwgcmVzdWx0X2lkKToKICBwaWQgPSBvcy5nZXRwaWQoKQogIHdpdGggX3BpcGVsaW5lX21hdGVyaWFsaXphdGlvbl9sb2NrOgogICAgaWYgKHBpZCwgcGlwZWxpbmVfaWQpIG5vdCBpbiBfcGlwZWxpbmVfbWF0ZXJpYWxpemF0aW9uX2NhY2hlOgogICAgICByYWlzZSBFeGNlcHRpb24oCiAgICAgICAgICAnTWF0ZXJpYWxpemF0aW9uIGluIG91dC1vZi1wcm9jZXNzIGFuZCByZW1vdGUgcnVubmVycyBpcyBub3QgeWV0ICcKICAgICAgICAgICdzdXBwb3J0ZWQuJykKICAgIHJldHVybiBfcGlwZWxpbmVfbWF0ZXJpYWxpemF0aW9uX2NhY2hlWyhwaWQsIHBpcGVsaW5lX2lkKV1bcmVzdWx0X2lkXQoKCmRlZiBfcmVsZWFzZV9tYXRlcmlhbGl6ZWRfcGlwZWxpbmUocGlwZWxpbmUpOgogIHBpZCA9IG9zLmdldHBpZCgpCiAgd2l0aCBfcGlwZWxpbmVfbWF0ZXJpYWxpemF0aW9uX2xvY2s6CiAgICBwaXBlbGluZV9pZCA9IGlkKHBpcGVsaW5lKQogICAgZGVsIF9waXBlbGluZV9tYXRlcmlhbGl6YXRpb25fY2FjaGVbKHBpZCwgcGlwZWxpbmVfaWQpXQoKCmNsYXNzIF9NYXRlcmlhbGl6ZWRSZXN1bHQob2JqZWN0KToKICBkZWYgX19pbml0X18oc2VsZiwgcGlwZWxpbmVfaWQsIHJlc3VsdF9pZCk6CiAgICBzZWxmLl9waXBlbGluZV9pZCA9IHBpcGVsaW5lX2lkCiAgICBzZWxmLl9yZXN1bHRfaWQgPSByZXN1bHRfaWQKICAgIHNlbGYuZWxlbWVudHMgPSBbXQoKICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKICAgICMgV2hlbiB1bnBpY2tsZWQgKGR1cmluZyBSdW5uZXIgQVBJIHJvdW5kdHJpcCBzZXJhaWxpemF0aW9uKSwgZ2V0IHRoZQogICAgIyBfTWF0ZXJpYWxpemVkUmVzdWx0IG9iamVjdCBmcm9tIHRoZSBjYWNoZSBzbyB0aGF0IHZhbHVlcyBhcmUgd3JpdHRlbgogICAgIyB0byB0aGUgb3JpZ2luYWwgX01hdGVyaWFsaXplZFJlc3VsdCB3aGVuIHJ1biBpbiBlYWdlciBtb2RlLgogICAgcmV0dXJuIChfZ2V0X21hdGVyaWFsaXplZF9yZXN1bHQsIChzZWxmLl9waXBlbGluZV9pZCwgc2VsZi5fcmVzdWx0X2lkKSkKCgpjbGFzcyBfTWF0ZXJpYWxpemVkRG9PdXRwdXRzVHVwbGUocHZhbHVlLkRvT3V0cHV0c1R1cGxlKToKICBkZWYgX19pbml0X18oc2VsZiwgZGVmZXJyZWQsIHJlc3VsdHNfYnlfdGFnKToKICAgIHN1cGVyKF9NYXRlcmlhbGl6ZWREb091dHB1dHNUdXBsZSwgc2VsZikuX19pbml0X18oCiAgICAgICAgTm9uZSwgTm9uZSwgZGVmZXJyZWQuX3RhZ3MsIGRlZmVycmVkLl9tYWluX3RhZykKICAgIHNlbGYuX2RlZmVycmVkID0gZGVmZXJyZWQKICAgIHNlbGYuX3Jlc3VsdHNfYnlfdGFnID0gcmVzdWx0c19ieV90YWcKCiAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIHRhZyk6CiAgICBpZiB0YWcgbm90IGluIHNlbGYuX3Jlc3VsdHNfYnlfdGFnOgogICAgICByYWlzZSBLZXlFcnJvcigKICAgICAgICAgICdUYWcgJXIgaXMgbm90IGEgYSBkZWZpbmVkIG91dHB1dCB0YWcgb2YgJXMuJyAlICgKICAgICAgICAgICAgICB0YWcsIHNlbGYuX2RlZmVycmVkKSkKICAgIHJldHVybiBzZWxmLl9yZXN1bHRzX2J5X3RhZ1t0YWddLmVsZW1lbnRzCgoKY2xhc3MgX0FkZE1hdGVyaWFsaXphdGlvblRyYW5zZm9ybXMoX1BWYWx1ZWlzaFRyYW5zZm9ybSk6CgogIGRlZiBfbWF0ZXJpYWxpemVfdHJhbnNmb3JtKHNlbGYsIHBpcGVsaW5lKToKICAgIHJlc3VsdCA9IF9hbGxvY2F0ZV9tYXRlcmlhbGl6ZWRfcmVzdWx0KHBpcGVsaW5lKQoKICAgICMgTmVlZCB0byBkZWZpbmUgX01hdGVyaWFsaXplVmFsdWVzRG9GbiBoZXJlIHRvIGF2b2lkIGNpcmN1bGFyCiAgICAjIGRlcGVuZGVuY2llcy4KICAgIGZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IERvRm4KICAgIGZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IFBhckRvCgogICAgY2xhc3MgX01hdGVyaWFsaXplVmFsdWVzRG9GbihEb0ZuKToKICAgICAgZGVmIHByb2Nlc3Moc2VsZiwgZWxlbWVudCk6CiAgICAgICAgcmVzdWx0LmVsZW1lbnRzLmFwcGVuZChlbGVtZW50KQoKICAgIG1hdGVyaWFsaXphdGlvbl9sYWJlbCA9ICdfTWF0ZXJpYWxpemVWYWx1ZXMlZCcgJSByZXN1bHQuX3Jlc3VsdF9pZAogICAgcmV0dXJuIChtYXRlcmlhbGl6YXRpb25fbGFiZWwgPj4gUGFyRG8oX01hdGVyaWFsaXplVmFsdWVzRG9GbigpKSwKICAgICAgICAgICAgcmVzdWx0KQoKICBkZWYgdmlzaXQoc2VsZiwgbm9kZSk6CiAgICBpZiBpc2luc3RhbmNlKG5vZGUsIHB2YWx1ZS5QVmFsdWUpOgogICAgICB0cmFuc2Zvcm0sIHJlc3VsdCA9IHNlbGYuX21hdGVyaWFsaXplX3RyYW5zZm9ybShub2RlLnBpcGVsaW5lKQogICAgICBub2RlIHwgdHJhbnNmb3JtCiAgICAgIHJldHVybiByZXN1bHQKICAgIGVsaWYgaXNpbnN0YW5jZShub2RlLCBwdmFsdWUuRG9PdXRwdXRzVHVwbGUpOgogICAgICByZXN1bHRzX2J5X3RhZyA9IHt9CiAgICAgIGZvciB0YWcgaW4gaXRlcnRvb2xzLmNoYWluKFtub2RlLl9tYWluX3RhZ10sIG5vZGUuX3RhZ3MpOgogICAgICAgIHJlc3VsdHNfYnlfdGFnW3RhZ10gPSBzZWxmLnZpc2l0KG5vZGVbdGFnXSkKICAgICAgcmV0dXJuIF9NYXRlcmlhbGl6ZWREb091dHB1dHNUdXBsZShub2RlLCByZXN1bHRzX2J5X3RhZykKICAgIGVsc2U6CiAgICAgIHJldHVybiBzZWxmLnZpc2l0X25lc3RlZChub2RlKQoKCmNsYXNzIF9GaW5hbGl6ZU1hdGVyaWFsaXphdGlvbihfUFZhbHVlaXNoVHJhbnNmb3JtKToKICBkZWYgdmlzaXQoc2VsZiwgbm9kZSk6CiAgICBpZiBpc2luc3RhbmNlKG5vZGUsIF9NYXRlcmlhbGl6ZWRSZXN1bHQpOgogICAgICByZXR1cm4gbm9kZS5lbGVtZW50cwogICAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIF9NYXRlcmlhbGl6ZWREb091dHB1dHNUdXBsZSk6CiAgICAgIHJldHVybiBub2RlCiAgICBlbHNlOgogICAgICByZXR1cm4gc2VsZi52aXNpdF9uZXN0ZWQobm9kZSkKCgpjbGFzcyBfR2V0UFZhbHVlcyhfUFZhbHVlaXNoVHJhbnNmb3JtKToKICBkZWYgdmlzaXQoc2VsZiwgbm9kZSwgcHZhbHVlcyk6CiAgICBpZiBpc2luc3RhbmNlKG5vZGUsIChwdmFsdWUuUFZhbHVlLCBwdmFsdWUuRG9PdXRwdXRzVHVwbGUpKToKICAgICAgcHZhbHVlcy5hcHBlbmQobm9kZSkKICAgIGVsc2U6CiAgICAgIHNlbGYudmlzaXRfbmVzdGVkKG5vZGUsIHB2YWx1ZXMpCgoKZGVmIGdldF9uZXN0ZWRfcHZhbHVlcyhwdmFsdWVpc2gpOgogIHB2YWx1ZXMgPSBbXQogIF9HZXRQVmFsdWVzKCkudmlzaXQocHZhbHVlaXNoLCBwdmFsdWVzKQogIHJldHVybiBwdmFsdWVzCgoKY2xhc3MgX1ppcFBWYWx1ZXMob2JqZWN0KToKICAiIiJQYWlycyBlYWNoIFBWYWx1ZSBpbiBhIHB2YWx1ZWlzaCB3aXRoIGEgdmFsdWUgaW4gYSBwYXJhbGxlbCBvdXQgc2libGluZy4KCiAgU2libGluZyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBuZXN0ZWQgc3RydWN0dXJlIGFzIHB2YWx1ZWlzaC4gIExlYXZlcyBpbgogIHNpYmxpbmcgYXJlIGV4cGFuZGVkIGFjcm9zcyBuZXN0ZWQgcHZhbHVlaXNoIGxpc3RzLCB0dXBsZXMsIGFuZCBkaWN0cy4KICBGb3IgZXhhbXBsZQoKICAgICAgWmlwUFZhbHVlcygpLnZpc2l0KHsnYSc6IHBjMSwgJ2InOiAocGMyLCBwYzMpfSwKICAgICAgICAgICAgICAgICAgICAgICAgIHsnYSc6ICdBJywgJ2InLCAnQid9KQoKICB3aWxsIHJldHVybgoKICAgICAgWygnYScsIHBjMSwgJ0EnKSwgKCdiJywgcGMyLCAnQicpLCAoJ2InLCBwYzMsICdCJyldCiAgIiIiCgogIGRlZiB2aXNpdChzZWxmLCBwdmFsdWVpc2gsIHNpYmxpbmcsIHBhaXJzPU5vbmUsIGNvbnRleHQ9Tm9uZSk6CiAgICBpZiBwYWlycyBpcyBOb25lOgogICAgICBwYWlycyA9IFtdCiAgICAgIHNlbGYudmlzaXQocHZhbHVlaXNoLCBzaWJsaW5nLCBwYWlycywgY29udGV4dCkKICAgICAgcmV0dXJuIHBhaXJzCiAgICBlbGlmIGlzaW5zdGFuY2UocHZhbHVlaXNoLCAocHZhbHVlLlBWYWx1ZSwgcHZhbHVlLkRvT3V0cHV0c1R1cGxlKSk6CiAgICAgIHBhaXJzLmFwcGVuZCgoY29udGV4dCwgcHZhbHVlaXNoLCBzaWJsaW5nKSkKICAgIGVsaWYgaXNpbnN0YW5jZShwdmFsdWVpc2gsIChsaXN0LCB0dXBsZSkpOgogICAgICBzZWxmLnZpc2l0X3NlcXVlbmNlKHB2YWx1ZWlzaCwgc2libGluZywgcGFpcnMsIGNvbnRleHQpCiAgICBlbGlmIGlzaW5zdGFuY2UocHZhbHVlaXNoLCBkaWN0KToKICAgICAgc2VsZi52aXNpdF9kaWN0KHB2YWx1ZWlzaCwgc2libGluZywgcGFpcnMsIGNvbnRleHQpCgogIGRlZiB2aXNpdF9zZXF1ZW5jZShzZWxmLCBwdmFsdWVpc2gsIHNpYmxpbmcsIHBhaXJzLCBjb250ZXh0KToKICAgIGlmIGlzaW5zdGFuY2Uoc2libGluZywgKGxpc3QsIHR1cGxlKSk6CiAgICAgIGZvciBpeCwgKHAsIHMpIGluIGVudW1lcmF0ZSh6aXAoCiAgICAgICAgICBwdmFsdWVpc2gsIGxpc3Qoc2libGluZykgKyBbTm9uZV0gKiBsZW4ocHZhbHVlaXNoKSkpOgogICAgICAgIHNlbGYudmlzaXQocCwgcywgcGFpcnMsICdwb3NpdGlvbiAlcycgJSBpeCkKICAgIGVsc2U6CiAgICAgIGZvciBwIGluIHB2YWx1ZWlzaDoKICAgICAgICBzZWxmLnZpc2l0KHAsIHNpYmxpbmcsIHBhaXJzLCBjb250ZXh0KQoKICBkZWYgdmlzaXRfZGljdChzZWxmLCBwdmFsdWVpc2gsIHNpYmxpbmcsIHBhaXJzLCBjb250ZXh0KToKICAgIGlmIGlzaW5zdGFuY2Uoc2libGluZywgZGljdCk6CiAgICAgIGZvciBrZXksIHAgaW4gcHZhbHVlaXNoLml0ZW1zKCk6CiAgICAgICAgc2VsZi52aXNpdChwLCBzaWJsaW5nLmdldChrZXkpLCBwYWlycywga2V5KQogICAgZWxzZToKICAgICAgZm9yIHAgaW4gcHZhbHVlaXNoLnZhbHVlcygpOgogICAgICAgIHNlbGYudmlzaXQocCwgc2libGluZywgcGFpcnMsIGNvbnRleHQpCgoKY2xhc3MgUFRyYW5zZm9ybShXaXRoVHlwZUhpbnRzLCBIYXNEaXNwbGF5RGF0YSk6CiAgIiIiQSB0cmFuc2Zvcm0gb2JqZWN0IHVzZWQgdG8gbW9kaWZ5IG9uZSBvciBtb3JlIFBDb2xsZWN0aW9ucy4KCiAgU3ViY2xhc3NlcyBtdXN0IGRlZmluZSBhbiBleHBhbmQoKSBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQgd2hlbiB0aGUgdHJhbnNmb3JtCiAgaXMgYXBwbGllZCB0byBzb21lIGFyZ3VtZW50cy4gVHlwaWNhbCB1c2FnZSBwYXR0ZXJuIHdpbGwgYmU6CgogICAgaW5wdXQgfCBDdXN0b21UcmFuc2Zvcm0oLi4uKQoKICBUaGUgZXhwYW5kKCkgbWV0aG9kIG9mIHRoZSBDdXN0b21UcmFuc2Zvcm0gb2JqZWN0IHBhc3NlZCBpbiB3aWxsIGJlIGNhbGxlZAogIHdpdGggaW5wdXQgYXMgYW4gYXJndW1lbnQuCiAgIiIiCiAgIyBCeSBkZWZhdWx0LCB0cmFuc2Zvcm1zIGRvbid0IGhhdmUgYW55IHNpZGUgaW5wdXRzLgogIHNpZGVfaW5wdXRzID0gKCkKCiAgIyBVc2VkIGZvciBudWxsYXJ5IHRyYW5zZm9ybXMuCiAgcGlwZWxpbmUgPSBOb25lCgogICMgRGVmYXVsdCBpcyB1bnNldC4KICBfdXNlcl9sYWJlbCA9IE5vbmUKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGxhYmVsPU5vbmUpOgogICAgc3VwZXIoUFRyYW5zZm9ybSwgc2VsZikuX19pbml0X18oKQogICAgc2VsZi5sYWJlbCA9IGxhYmVsCgogIEBwcm9wZXJ0eQogIGRlZiBsYWJlbChzZWxmKToKICAgIHJldHVybiBzZWxmLl91c2VyX2xhYmVsIG9yIHNlbGYuZGVmYXVsdF9sYWJlbCgpCgogIEBsYWJlbC5zZXR0ZXIKICBkZWYgbGFiZWwoc2VsZiwgdmFsdWUpOgogICAgc2VsZi5fdXNlcl9sYWJlbCA9IHZhbHVlCgogIGRlZiBkZWZhdWx0X2xhYmVsKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCgogIGRlZiB3aXRoX2lucHV0X3R5cGVzKHNlbGYsIGlucHV0X3R5cGVfaGludCk6CiAgICAiIiJBbm5vdGF0ZXMgdGhlIGlucHV0IHR5cGUgb2YgYSA6Y2xhc3M6YFBUcmFuc2Zvcm1gIHdpdGggYSB0eXBlLWhpbnQuCgogICAgQXJnczoKICAgICAgaW5wdXRfdHlwZV9oaW50ICh0eXBlKTogQW4gaW5zdGFuY2Ugb2YgYW4gYWxsb3dlZCBidWlsdC1pbiB0eXBlLCBhIGN1c3RvbQogICAgICAgIGNsYXNzLCBvciBhbiBpbnN0YW5jZSBvZiBhCiAgICAgICAgOmNsYXNzOmB+YXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50cy5UeXBlQ29uc3RyYWludGAuCgogICAgUmFpc2VzOgogICAgICB+ZXhjZXB0aW9ucy5UeXBlRXJyb3I6IElmICoqaW5wdXRfdHlwZV9oaW50KiogaXMgbm90IGEgdmFsaWQgdHlwZS1oaW50LgogICAgICAgIFNlZQogICAgICAgIDpvYmo6YGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHMudmFsaWRhdGVfY29tcG9zaXRlX3R5cGVfcGFyYW0oKWAKICAgICAgICBmb3IgZnVydGhlciBkZXRhaWxzLgoKICAgIFJldHVybnM6CiAgICAgIFBUcmFuc2Zvcm06IEEgcmVmZXJlbmNlIHRvIHRoZSBpbnN0YW5jZSBvZiB0aGlzIHBhcnRpY3VsYXIKICAgICAgOmNsYXNzOmBQVHJhbnNmb3JtYCBvYmplY3QuIFRoaXMgYWxsb3dzIGNoYWluaW5nIHR5cGUtaGludGluZyByZWxhdGVkCiAgICAgIG1ldGhvZHMuCiAgICAiIiIKICAgIHZhbGlkYXRlX2NvbXBvc2l0ZV90eXBlX3BhcmFtKGlucHV0X3R5cGVfaGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUeXBlIGhpbnRzIGZvciBhIFBUcmFuc2Zvcm0nKQogICAgcmV0dXJuIHN1cGVyKFBUcmFuc2Zvcm0sIHNlbGYpLndpdGhfaW5wdXRfdHlwZXMoaW5wdXRfdHlwZV9oaW50KQoKICBkZWYgd2l0aF9vdXRwdXRfdHlwZXMoc2VsZiwgdHlwZV9oaW50KToKICAgICIiIkFubm90YXRlcyB0aGUgb3V0cHV0IHR5cGUgb2YgYSA6Y2xhc3M6YFBUcmFuc2Zvcm1gIHdpdGggYSB0eXBlLWhpbnQuCgogICAgQXJnczoKICAgICAgdHlwZV9oaW50ICh0eXBlKTogQW4gaW5zdGFuY2Ugb2YgYW4gYWxsb3dlZCBidWlsdC1pbiB0eXBlLCBhIGN1c3RvbSBjbGFzcywKICAgICAgICBvciBhIDpjbGFzczpgfmFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHMuVHlwZUNvbnN0cmFpbnRgLgoKICAgIFJhaXNlczoKICAgICAgfmV4Y2VwdGlvbnMuVHlwZUVycm9yOiBJZiAqKnR5cGVfaGludCoqIGlzIG5vdCBhIHZhbGlkIHR5cGUtaGludC4gU2VlCiAgICAgICAgOm9iajpgfmFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHMudmFsaWRhdGVfY29tcG9zaXRlX3R5cGVfcGFyYW0oKWAKICAgICAgICBmb3IgZnVydGhlciBkZXRhaWxzLgoKICAgIFJldHVybnM6CiAgICAgIFBUcmFuc2Zvcm06IEEgcmVmZXJlbmNlIHRvIHRoZSBpbnN0YW5jZSBvZiB0aGlzIHBhcnRpY3VsYXIKICAgICAgOmNsYXNzOmBQVHJhbnNmb3JtYCBvYmplY3QuIFRoaXMgYWxsb3dzIGNoYWluaW5nIHR5cGUtaGludGluZyByZWxhdGVkCiAgICAgIG1ldGhvZHMuCiAgICAiIiIKICAgIHZhbGlkYXRlX2NvbXBvc2l0ZV90eXBlX3BhcmFtKHR5cGVfaGludCwgJ1R5cGUgaGludHMgZm9yIGEgUFRyYW5zZm9ybScpCiAgICByZXR1cm4gc3VwZXIoUFRyYW5zZm9ybSwgc2VsZikud2l0aF9vdXRwdXRfdHlwZXModHlwZV9oaW50KQoKICBkZWYgdHlwZV9jaGVja19pbnB1dHMoc2VsZiwgcHZhbHVlaXNoKToKICAgIHNlbGYudHlwZV9jaGVja19pbnB1dHNfb3Jfb3V0cHV0cyhwdmFsdWVpc2gsICdpbnB1dCcpCgogIGRlZiBpbmZlcl9vdXRwdXRfdHlwZShzZWxmLCB1bnVzZWRfaW5wdXRfdHlwZSk6CiAgICByZXR1cm4gc2VsZi5nZXRfdHlwZV9oaW50cygpLnNpbXBsZV9vdXRwdXRfdHlwZShzZWxmLmxhYmVsKSBvciB0eXBlaGludHMuQW55CgogIGRlZiB0eXBlX2NoZWNrX291dHB1dHMoc2VsZiwgcHZhbHVlaXNoKToKICAgIHNlbGYudHlwZV9jaGVja19pbnB1dHNfb3Jfb3V0cHV0cyhwdmFsdWVpc2gsICdvdXRwdXQnKQoKICBkZWYgdHlwZV9jaGVja19pbnB1dHNfb3Jfb3V0cHV0cyhzZWxmLCBwdmFsdWVpc2gsIGlucHV0X29yX291dHB1dCk6CiAgICBoaW50cyA9IGdldGF0dHIoc2VsZi5nZXRfdHlwZV9oaW50cygpLCBpbnB1dF9vcl9vdXRwdXQgKyAnX3R5cGVzJykKICAgIGlmIG5vdCBoaW50czoKICAgICAgcmV0dXJuCiAgICBhcmdfaGludHMsIGt3YXJnX2hpbnRzID0gaGludHMKICAgIGlmIGFyZ19oaW50cyBhbmQga3dhcmdfaGludHM6CiAgICAgIHJhaXNlIFR5cGVDaGVja0Vycm9yKAogICAgICAgICAgJ1BUcmFuc2Zvcm0gY2Fubm90IGhhdmUgYm90aCBwb3NpdGlvbmFsIGFuZCBrZXl3b3JkIHR5cGUgaGludHMgJwogICAgICAgICAgJ3dpdGhvdXQgb3ZlcnJpZGluZyAlcy5fdHlwZV9jaGVja18lcygpJyAlICgKICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXywgaW5wdXRfb3Jfb3V0cHV0KSkKICAgIHJvb3RfaGludCA9ICgKICAgICAgICBhcmdfaGludHNbMF0gaWYgbGVuKGFyZ19oaW50cykgPT0gMSBlbHNlIGFyZ19oaW50cyBvciBrd2FyZ19oaW50cykKICAgIGZvciBjb250ZXh0LCBwdmFsdWVfLCBoaW50IGluIF9aaXBQVmFsdWVzKCkudmlzaXQocHZhbHVlaXNoLCByb290X2hpbnQpOgogICAgICBpZiBwdmFsdWVfLmVsZW1lbnRfdHlwZSBpcyBOb25lOgogICAgICAgICMgVE9ETyhyb2JlcnR3Yik6IEl0J3MgYSBidWcgdGhhdCB3ZSBldmVyIGdldCBoZXJlLiAodHlwZWNoZWNrKQogICAgICAgIGNvbnRpbnVlCiAgICAgIGlmIGhpbnQgYW5kIG5vdCB0eXBlaGludHMuaXNfY29uc2lzdGVudF93aXRoKHB2YWx1ZV8uZWxlbWVudF90eXBlLCBoaW50KToKICAgICAgICBhdF9jb250ZXh0ID0gJyAlcyAlcycgJSAoaW5wdXRfb3Jfb3V0cHV0LCBjb250ZXh0KSBpZiBjb250ZXh0IGVsc2UgJycKICAgICAgICByYWlzZSBUeXBlQ2hlY2tFcnJvcigKICAgICAgICAgICAgJyVzIHR5cGUgaGludCB2aW9sYXRpb24gYXQgJXMlczogZXhwZWN0ZWQgJXMsIGdvdCAlcycgJSAoCiAgICAgICAgICAgICAgICBpbnB1dF9vcl9vdXRwdXQudGl0bGUoKSwgc2VsZi5sYWJlbCwgYXRfY29udGV4dCwgaGludCwKICAgICAgICAgICAgICAgIHB2YWx1ZV8uZWxlbWVudF90eXBlKSkKCiAgZGVmIF9pbmZlcl9vdXRwdXRfY29kZXIoc2VsZiwgaW5wdXRfdHlwZT1Ob25lLCBpbnB1dF9jb2Rlcj1Ob25lKToKICAgICIiIlJldHVybnMgdGhlIG91dHB1dCBjb2RlciB0byB1c2UgZm9yIG91dHB1dCBvZiB0aGlzIHRyYW5zZm9ybS4KCiAgICBOb3RlOiB0aGlzIEFQSSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gY2hhbmdlOyBwbGVhc2UgZG8gbm90IHJlbHkKICAgIG9uIGJlaGF2aW9yIGluZHVjZWQgYnkgdGhpcyBtZXRob2QuCgogICAgVGhlIENvZGVyIHJldHVybmVkIGhlcmUgc2hvdWxkIG5vdCBiZSB3cmFwcGVkIGluIGEgV2luZG93ZWRWYWx1ZUNvZGVyCiAgICB3cmFwcGVyLgoKICAgIEFyZ3M6CiAgICAgIGlucHV0X3R5cGU6IEFuIGluc3RhbmNlIG9mIGFuIGFsbG93ZWQgYnVpbHQtaW4gdHlwZSwgYSBjdXN0b20gY2xhc3MsIG9yIGEKICAgICAgICB0eXBlaGludHMuVHlwZUNvbnN0cmFpbnQgZm9yIHRoZSBpbnB1dCB0eXBlLCBvciBOb25lIGlmIG5vdCBhdmFpbGFibGUuCiAgICAgIGlucHV0X2NvZGVyOiBDb2RlciBvYmplY3QgZm9yIGVuY29kaW5nIGlucHV0IHRvIHRoaXMgUFRyYW5zZm9ybSwgb3IgTm9uZQogICAgICAgIGlmIG5vdCBhdmFpbGFibGUuCgogICAgUmV0dXJuczoKICAgICAgQ29kZXIgb2JqZWN0IGZvciBlbmNvZGluZyBvdXRwdXQgb2YgdGhpcyBQVHJhbnNmb3JtIG9yIE5vbmUgaWYgdW5rbm93bi4KICAgICIiIgogICAgIyBUT0RPKGNjeSk6IGZ1cnRoZXIgcmVmaW5lIHRoaXMgQVBJLgogICAgcmV0dXJuIE5vbmUKCiAgZGVmIF9jbG9uZShzZWxmLCBuZXdfbGFiZWwpOgogICAgIiIiQ2xvbmVzIHRoZSBjdXJyZW50IHRyYW5zZm9ybSBpbnN0YW5jZSB1bmRlciBhIG5ldyBsYWJlbC4iIiIKICAgIHRyYW5zZm9ybSA9IGNvcHkuY29weShzZWxmKQogICAgdHJhbnNmb3JtLmxhYmVsID0gbmV3X2xhYmVsCiAgICByZXR1cm4gdHJhbnNmb3JtCgogIGRlZiBleHBhbmQoc2VsZiwgaW5wdXRfb3JfaW5wdXRzKToKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIF9fc3RyX18oc2VsZik6CiAgICByZXR1cm4gJzwlcz4nICUgc2VsZi5fc3RyX2ludGVybmFsKCkKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICc8JXMgYXQgJXM+JyAlIChzZWxmLl9zdHJfaW50ZXJuYWwoKSwgaGV4KGlkKHNlbGYpKSkKCiAgZGVmIF9zdHJfaW50ZXJuYWwoc2VsZik6CiAgICByZXR1cm4gJyVzKFBUcmFuc2Zvcm0pJXMlcyVzJyAlICgKICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywKICAgICAgICAnIGxhYmVsPVslc10nICUgc2VsZi5sYWJlbCBpZiAoaGFzYXR0cihzZWxmLCAnbGFiZWwnKSBhbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbCkgZWxzZSAnJywKICAgICAgICAnIGlucHV0cz0lcycgJSBzdHIoc2VsZi5pbnB1dHMpIGlmIChoYXNhdHRyKHNlbGYsICdpbnB1dHMnKSBhbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmlucHV0cykgZWxzZSAnJywKICAgICAgICAnIHNpZGVfaW5wdXRzPSVzJyAlIHN0cihzZWxmLnNpZGVfaW5wdXRzKSBpZiBzZWxmLnNpZGVfaW5wdXRzIGVsc2UgJycpCgogIGRlZiBfY2hlY2tfcGNvbGxlY3Rpb24oc2VsZiwgcGNvbGwpOgogICAgaWYgbm90IGlzaW5zdGFuY2UocGNvbGwsIHB2YWx1ZS5QQ29sbGVjdGlvbik6CiAgICAgIHJhaXNlIGVycm9yLlRyYW5zZm9ybUVycm9yKCdFeHBlY3RpbmcgYSBQQ29sbGVjdGlvbiBhcmd1bWVudC4nKQogICAgaWYgbm90IHBjb2xsLnBpcGVsaW5lOgogICAgICByYWlzZSBlcnJvci5UcmFuc2Zvcm1FcnJvcignUENvbGxlY3Rpb24gbm90IHBhcnQgb2YgYSBwaXBlbGluZS4nKQoKICBkZWYgZ2V0X3dpbmRvd2luZyhzZWxmLCBpbnB1dHMpOgogICAgIiIiUmV0dXJucyB0aGUgd2luZG93IGZ1bmN0aW9uIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0cmFuc2Zvcm0ncyBvdXRwdXQuCgogICAgQnkgZGVmYXVsdCBtb3N0IHRyYW5zZm9ybXMganVzdCByZXR1cm4gdGhlIHdpbmRvd2luZyBmdW5jdGlvbiBhc3NvY2lhdGVkCiAgICB3aXRoIHRoZSBpbnB1dCBQQ29sbGVjdGlvbiAob3IgdGhlIGZpcnN0IGlucHV0IGlmIHNldmVyYWwpLgogICAgIiIiCiAgICAjIFRPRE8ocm9iZXJ0d2IpOiBBc3NlcnQgYWxsIGlucHV0IFdpbmRvd0ZucyBjb21wYXRpYmxlLgogICAgcmV0dXJuIGlucHV0c1swXS53aW5kb3dpbmcKCiAgZGVmIF9fcnJzaGlmdF9fKHNlbGYsIGxhYmVsKToKICAgIHJldHVybiBfTmFtZWRQVHJhbnNmb3JtKHNlbGYsIGxhYmVsKQoKICBkZWYgX19vcl9fKHNlbGYsIHJpZ2h0KToKICAgICIiIlVzZWQgdG8gY29tcG9zZSBQVHJhbnNmb3JtcywgZS5nLiwgcHRyYW5zZm9ybTEgfCBwdHJhbnNmb3JtMi4iIiIKICAgIGlmIGlzaW5zdGFuY2UocmlnaHQsIFBUcmFuc2Zvcm0pOgogICAgICByZXR1cm4gX0NoYWluZWRQVHJhbnNmb3JtKHNlbGYsIHJpZ2h0KQogICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCgogIGRlZiBfX3Jvcl9fKHNlbGYsIGxlZnQsIGxhYmVsPU5vbmUpOgogICAgIiIiVXNlZCB0byBhcHBseSB0aGlzIFBUcmFuc2Zvcm0gdG8gbm9uLVBWYWx1ZXMsIGUuZy4sIGEgdHVwbGUuIiIiCiAgICBwdmFsdWVpc2gsIHB2YWx1ZXMgPSBzZWxmLl9leHRyYWN0X2lucHV0X3B2YWx1ZXMobGVmdCkKICAgIHBpcGVsaW5lcyA9IFt2LnBpcGVsaW5lIGZvciB2IGluIHB2YWx1ZXMgaWYgaXNpbnN0YW5jZSh2LCBwdmFsdWUuUFZhbHVlKV0KICAgIGlmIHB2YWx1ZXMgYW5kIG5vdCBwaXBlbGluZXM6CiAgICAgIGRlZmVycmVkID0gRmFsc2UKICAgICAgIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KICAgICAgZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgcGlwZWxpbmUKICAgICAgZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IFBpcGVsaW5lT3B0aW9ucwogICAgICAjIHB5bGludDogZW5hYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCiAgICAgIHAgPSBwaXBlbGluZS5QaXBlbGluZSgKICAgICAgICAgICdEaXJlY3RSdW5uZXInLCBQaXBlbGluZU9wdGlvbnMoc3lzLmFyZ3YpKQogICAgZWxzZToKICAgICAgaWYgbm90IHBpcGVsaW5lczoKICAgICAgICBpZiBzZWxmLnBpcGVsaW5lIGlzIG5vdCBOb25lOgogICAgICAgICAgcCA9IHNlbGYucGlwZWxpbmUKICAgICAgICBlbHNlOgogICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignIiVzIiByZXF1aXJlcyBhIHBpcGVsaW5lIHRvIGJlIHNwZWNpZmllZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcyB0aGVyZSBhcmUgbm8gZGVmZXJyZWQgaW5wdXRzLiclIHNlbGYubGFiZWwpCiAgICAgIGVsc2U6CiAgICAgICAgcCA9IHNlbGYucGlwZWxpbmUgb3IgcGlwZWxpbmVzWzBdCiAgICAgICAgZm9yIHBwIGluIHBpcGVsaW5lczoKICAgICAgICAgIGlmIHAgIT0gcHA6CiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAgICAgICAnTWl4aW5nIHZhbHVlIGZyb20gZGlmZmVyZW50IHBpcGVsaW5lcyBub3QgYWxsb3dlZC4nKQogICAgICBkZWZlcnJlZCA9IG5vdCBnZXRhdHRyKHAucnVubmVyLCAnaXNfZWFnZXInLCBGYWxzZSkKICAgICMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCiAgICBmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSBpbXBvcnQgQ3JlYXRlCiAgICAjIHB5bGludDogZW5hYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCiAgICByZXBsYWNlbWVudHMgPSB7aWQodik6IHAgfCAnQ3JlYXRlUElucHV0JXMnICUgaXggPj4gQ3JlYXRlKHYpCiAgICAgICAgICAgICAgICAgICAgZm9yIGl4LCB2IGluIGVudW1lcmF0ZShwdmFsdWVzKQogICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHYsIHB2YWx1ZS5QVmFsdWUpIGFuZCB2IGlzIG5vdCBOb25lfQogICAgcHZhbHVlaXNoID0gX1NldElucHV0UFZhbHVlcygpLnZpc2l0KHB2YWx1ZWlzaCwgcmVwbGFjZW1lbnRzKQogICAgc2VsZi5waXBlbGluZSA9IHAKICAgIHJlc3VsdCA9IHAuYXBwbHkoc2VsZiwgcHZhbHVlaXNoLCBsYWJlbCkKICAgIGlmIGRlZmVycmVkOgogICAgICByZXR1cm4gcmVzdWx0CiAgICBfYWxsb2NhdGVfbWF0ZXJpYWxpemVkX3BpcGVsaW5lKHApCiAgICBtYXRlcmlhbGl6ZWRfcmVzdWx0ID0gX0FkZE1hdGVyaWFsaXphdGlvblRyYW5zZm9ybXMoKS52aXNpdChyZXN1bHQpCiAgICBwLnJ1bigpLndhaXRfdW50aWxfZmluaXNoKCkKICAgIF9yZWxlYXNlX21hdGVyaWFsaXplZF9waXBlbGluZShwKQogICAgcmV0dXJuIF9GaW5hbGl6ZU1hdGVyaWFsaXphdGlvbigpLnZpc2l0KG1hdGVyaWFsaXplZF9yZXN1bHQpCgogIGRlZiBfZXh0cmFjdF9pbnB1dF9wdmFsdWVzKHNlbGYsIHB2YWx1ZWlzaCk6CiAgICAiIiJFeHRyYWN0IGFsbCB0aGUgcHZhbHVlcyBjb250YWluZWQgaW4gdGhlIGlucHV0IHB2YWx1ZWlzaC4KCiAgICBSZXR1cm5zIHB2YWx1ZWlzaCBhcyB3ZWxsIGFzIHRoZSBmbGF0IGlucHV0cyBsaXN0IGFzIHRoZSBpbnB1dCBtYXkgaGF2ZSB0bwogICAgYmUgY29waWVkIGFzIGluc3BlY3Rpb24gbWF5IGJlIGRlc3RydWN0aXZlLgoKICAgIEJ5IGRlZmF1bHQsIHJlY3Vyc2l2ZWx5IGV4dHJhY3RzIHR1cGxlIGNvbXBvbmVudHMgYW5kIGRpY3QgdmFsdWVzLgoKICAgIEdlbmVyYWxseSBvbmx5IG5lZWRzIHRvIGJlIG92ZXJyaWRlbiBmb3IgbXVsdGktaW5wdXQgUFRyYW5zZm9ybXMuCiAgICAiIiIKICAgICMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1vcmRlcgogICAgZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgcGlwZWxpbmUKICAgICMgcHlsaW50OiBlbmFibGU9d3JvbmctaW1wb3J0LW9yZGVyCiAgICBpZiBpc2luc3RhbmNlKHB2YWx1ZWlzaCwgcGlwZWxpbmUuUGlwZWxpbmUpOgogICAgICBwdmFsdWVpc2ggPSBwdmFsdWUuUEJlZ2luKHB2YWx1ZWlzaCkKCiAgICBkZWYgX2RpY3RfdHVwbGVfbGVhdmVzKHB2YWx1ZWlzaCk6CiAgICAgIGlmIGlzaW5zdGFuY2UocHZhbHVlaXNoLCB0dXBsZSk6CiAgICAgICAgZm9yIGEgaW4gcHZhbHVlaXNoOgogICAgICAgICAgZm9yIHAgaW4gX2RpY3RfdHVwbGVfbGVhdmVzKGEpOgogICAgICAgICAgICB5aWVsZCBwCiAgICAgIGVsaWYgaXNpbnN0YW5jZShwdmFsdWVpc2gsIGRpY3QpOgogICAgICAgIGZvciBhIGluIHB2YWx1ZWlzaC52YWx1ZXMoKToKICAgICAgICAgIGZvciBwIGluIF9kaWN0X3R1cGxlX2xlYXZlcyhhKToKICAgICAgICAgICAgeWllbGQgcAogICAgICBlbHNlOgogICAgICAgIHlpZWxkIHB2YWx1ZWlzaAogICAgcmV0dXJuIHB2YWx1ZWlzaCwgdHVwbGUoX2RpY3RfdHVwbGVfbGVhdmVzKHB2YWx1ZWlzaCkpCgogIF9rbm93bl91cm5zID0ge30KCiAgQGNsYXNzbWV0aG9kCiAgZGVmIHJlZ2lzdGVyX3VybihjbHMsIHVybiwgcGFyYW1ldGVyX3R5cGUsIGNvbnN0cnVjdG9yPU5vbmUpOgogICAgZGVmIHJlZ2lzdGVyKGNvbnN0cnVjdG9yKToKICAgICAgY2xzLl9rbm93bl91cm5zW3Vybl0gPSBwYXJhbWV0ZXJfdHlwZSwgY29uc3RydWN0b3IKICAgICAgcmV0dXJuIHN0YXRpY21ldGhvZChjb25zdHJ1Y3RvcikKICAgIGlmIGNvbnN0cnVjdG9yOgogICAgICAjIFVzZWQgYXMgYSBzdGF0ZW1lbnQuCiAgICAgIHJlZ2lzdGVyKGNvbnN0cnVjdG9yKQogICAgZWxzZToKICAgICAgIyBVc2VkIGFzIGEgZGVjb3JhdG9yLgogICAgICByZXR1cm4gcmVnaXN0ZXIKCiAgZGVmIHRvX3J1bm5lcl9hcGkoc2VsZiwgY29udGV4dCwgaGFzX3BhcnRzPUZhbHNlKToKICAgIGZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpIGltcG9ydCBiZWFtX3J1bm5lcl9hcGlfcGIyCiAgICB1cm4sIHR5cGVkX3BhcmFtID0gc2VsZi50b19ydW5uZXJfYXBpX3BhcmFtZXRlcihjb250ZXh0KQogICAgaWYgdXJuID09IHB5dGhvbl91cm5zLkdFTkVSSUNfQ09NUE9TSVRFX1RSQU5TRk9STSBhbmQgbm90IGhhc19wYXJ0czoKICAgICAgIyBUT0RPKEJFQU0tMzgxMik6IFJlbW92ZSB0aGlzIGZhbGxiYWNrLgogICAgICB1cm4sIHR5cGVkX3BhcmFtID0gc2VsZi50b19ydW5uZXJfYXBpX3BpY2tsZWQoY29udGV4dCkKICAgIHJldHVybiBiZWFtX3J1bm5lcl9hcGlfcGIyLkZ1bmN0aW9uU3BlYygKICAgICAgICB1cm49dXJuLAogICAgICAgIHBheWxvYWQ9dHlwZWRfcGFyYW0uU2VyaWFsaXplVG9TdHJpbmcoKQogICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZWRfcGFyYW0sIG1lc3NhZ2UuTWVzc2FnZSkKICAgICAgICBlbHNlIHR5cGVkX3BhcmFtLmVuY29kZSgndXRmLTgnKSBpZiBpc2luc3RhbmNlKHR5cGVkX3BhcmFtLCBzdHIpCiAgICAgICAgZWxzZSB0eXBlZF9wYXJhbSkKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIGZyb21fcnVubmVyX2FwaShjbHMsIHByb3RvLCBjb250ZXh0KToKICAgIGlmIHByb3RvIGlzIE5vbmUgb3Igbm90IHByb3RvLnVybjoKICAgICAgcmV0dXJuIE5vbmUKICAgIHBhcmFtZXRlcl90eXBlLCBjb25zdHJ1Y3RvciA9IGNscy5fa25vd25fdXJuc1twcm90by51cm5dCiAgICByZXR1cm4gY29uc3RydWN0b3IoCiAgICAgICAgcHJvdG9fdXRpbHMucGFyc2VfQnl0ZXMocHJvdG8ucGF5bG9hZCwgcGFyYW1ldGVyX3R5cGUpLAogICAgICAgIGNvbnRleHQpCgogIGRlZiB0b19ydW5uZXJfYXBpX3BhcmFtZXRlcihzZWxmLCB1bnVzZWRfY29udGV4dCk6CiAgICAjIFRoZSBwYXlsb2FkIGhlcmUgaXMganVzdCB0byBlYXNlIGRlYnVnZ2luZy4KICAgIHJldHVybiAocHl0aG9uX3VybnMuR0VORVJJQ19DT01QT1NJVEVfVFJBTlNGT1JNLAogICAgICAgICAgICBnZXRhdHRyKHNlbGYsICdfZm5fYXBpX3BheWxvYWQnLCBzdHIoc2VsZikpKQoKICBkZWYgdG9fcnVubmVyX2FwaV9waWNrbGVkKHNlbGYsIHVudXNlZF9jb250ZXh0KToKICAgIHJldHVybiAocHl0aG9uX3VybnMuUElDS0xFRF9UUkFOU0ZPUk0sCiAgICAgICAgICAgIHBpY2tsZXIuZHVtcHMoc2VsZikpCgogIGRlZiBydW5uZXJfYXBpX3JlcXVpcmVzX2tleWVkX2lucHV0KHNlbGYpOgogICAgcmV0dXJuIEZhbHNlCgoKQFBUcmFuc2Zvcm0ucmVnaXN0ZXJfdXJuKHB5dGhvbl91cm5zLkdFTkVSSUNfQ09NUE9TSVRFX1RSQU5TRk9STSwgTm9uZSkKZGVmIF9jcmVhdGVfdHJhbnNmb3JtKHBheWxvYWQsIHVudXNlZF9jb250ZXh0KToKICBlbXB0eV90cmFuc2Zvcm0gPSBQVHJhbnNmb3JtKCkKICBlbXB0eV90cmFuc2Zvcm0uX2ZuX2FwaV9wYXlsb2FkID0gcGF5bG9hZAogIHJldHVybiBlbXB0eV90cmFuc2Zvcm0KCgpAUFRyYW5zZm9ybS5yZWdpc3Rlcl91cm4ocHl0aG9uX3VybnMuUElDS0xFRF9UUkFOU0ZPUk0sIE5vbmUpCmRlZiBfdW5waWNrbGVfdHJhbnNmb3JtKHBpY2tsZWRfYnl0ZXMsIHVudXNlZF9jb250ZXh0KToKICByZXR1cm4gcGlja2xlci5sb2FkcyhwaWNrbGVkX2J5dGVzKQoKCmNsYXNzIF9DaGFpbmVkUFRyYW5zZm9ybShQVHJhbnNmb3JtKToKCiAgZGVmIF9faW5pdF9fKHNlbGYsICpwYXJ0cyk6CiAgICBzdXBlcihfQ2hhaW5lZFBUcmFuc2Zvcm0sIHNlbGYpLl9faW5pdF9fKGxhYmVsPXNlbGYuX2NoYWluX2xhYmVsKHBhcnRzKSkKICAgIHNlbGYuX3BhcnRzID0gcGFydHMKCiAgZGVmIF9jaGFpbl9sYWJlbChzZWxmLCBwYXJ0cyk6CiAgICByZXR1cm4gJ3wnLmpvaW4ocC5sYWJlbCBmb3IgcCBpbiBwYXJ0cykKCiAgZGVmIF9fb3JfXyhzZWxmLCByaWdodCk6CiAgICBpZiBpc2luc3RhbmNlKHJpZ2h0LCBQVHJhbnNmb3JtKToKICAgICAgIyBDcmVhdGUgYSBmbGF0IGxpc3QgcmF0aGVyIHRoYW4gYSBuZXN0ZWQgdHJlZSBvZiBjb21wb3NpdGUKICAgICAgIyB0cmFuc2Zvcm1zIGZvciBiZXR0ZXIgbW9uaXRvcmluZywgZXRjLgogICAgICByZXR1cm4gX0NoYWluZWRQVHJhbnNmb3JtKCooc2VsZi5fcGFydHMgKyAocmlnaHQsKSkpCiAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKCiAgZGVmIGV4cGFuZChzZWxmLCBwdmFsKToKICAgIHJldHVybiByZWR1Y2Uob3BlcmF0b3Iub3JfLCBzZWxmLl9wYXJ0cywgcHZhbCkKCgpjbGFzcyBQVHJhbnNmb3JtV2l0aFNpZGVJbnB1dHMoUFRyYW5zZm9ybSk6CiAgIiIiQSBzdXBlcmNsYXNzIGZvciBhbnkgOmNsYXNzOmBQVHJhbnNmb3JtYCAoZS5nLgogIDpmdW5jOmB+YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkZsYXRNYXBgIG9yCiAgOmNsYXNzOmB+YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVGbmApCiAgaW52b2tpbmcgdXNlciBjb2RlLgoKICA6Y2xhc3M6YFBUcmFuc2Zvcm1gIHMgbGlrZSA6ZnVuYzpgfmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5GbGF0TWFwYAogIGludm9rZSB1c2VyLXN1cHBsaWVkIGNvZGUgaW4gc29tZSBraW5kIG9mIHBhY2thZ2UgKGUuZy4gYQogIDpjbGFzczpgfmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Eb0ZuYCkgYW5kIG9wdGlvbmFsbHkgcHJvdmlkZSBhcmd1bWVudHMKICBhbmQgc2lkZSBpbnB1dHMgdG8gdGhhdCBjb2RlLiBUaGlzIGludGVybmFsLXVzZS1vbmx5IGNsYXNzIGNvbnRhaW5zIGNvbW1vbgogIGZ1bmN0aW9uYWxpdHkgZm9yIDpjbGFzczpgUFRyYW5zZm9ybWAgcyB0aGF0IGZpdCB0aGlzIG1vZGVsLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgZm4sICphcmdzLCAqKmt3YXJncyk6CiAgICBpZiBpc2luc3RhbmNlKGZuLCB0eXBlKSBhbmQgaXNzdWJjbGFzcyhmbiwgV2l0aFR5cGVIaW50cyk6CiAgICAgICMgRG9uJ3QgdHJlYXQgRm4gY2xhc3Mgb2JqZWN0cyBhcyBjYWxsYWJsZXMuCiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1VzZSAlcygpIG5vdCAlcy4nICUgKGZuLl9fbmFtZV9fLCBmbi5fX25hbWVfXykpCiAgICBzZWxmLmZuID0gc2VsZi5tYWtlX2ZuKGZuKQogICAgIyBOb3cgdGhhdCB3ZSBmaWd1cmUgb3V0IHRoZSBsYWJlbCwgaW5pdGlhbGl6ZSB0aGUgc3VwZXItY2xhc3MuCiAgICBzdXBlcihQVHJhbnNmb3JtV2l0aFNpZGVJbnB1dHMsIHNlbGYpLl9faW5pdF9fKCkKCiAgICBpZiAoYW55KFtpc2luc3RhbmNlKHYsIHB2YWx1ZS5QQ29sbGVjdGlvbikgZm9yIHYgaW4gYXJnc10pIG9yCiAgICAgICAgYW55KFtpc2luc3RhbmNlKHYsIHB2YWx1ZS5QQ29sbGVjdGlvbikgZm9yIHYgaW4ga3dhcmdzLnZhbHVlcygpXSkpOgogICAgICByYWlzZSBlcnJvci5TaWRlSW5wdXRFcnJvcigKICAgICAgICAgICdQQ29sbGVjdGlvbiB1c2VkIGRpcmVjdGx5IGFzIHNpZGUgaW5wdXQgYXJndW1lbnQuIFNwZWNpZnkgJwogICAgICAgICAgJ0FzSXRlcihwY29sbGVjdGlvbikgb3IgQXNTaW5nbGV0b24ocGNvbGxlY3Rpb24pIHRvIGluZGljYXRlIGhvdyB0aGUgJwogICAgICAgICAgJ1BDb2xsZWN0aW9uIGlzIHRvIGJlIHVzZWQuJykKICAgIHNlbGYuYXJncywgc2VsZi5rd2FyZ3MsIHNlbGYuc2lkZV9pbnB1dHMgPSB1dGlsLnJlbW92ZV9vYmplY3RzX2Zyb21fYXJncygKICAgICAgICBhcmdzLCBrd2FyZ3MsIHB2YWx1ZS5Bc1NpZGVJbnB1dCkKICAgIHNlbGYucmF3X3NpZGVfaW5wdXRzID0gYXJncywga3dhcmdzCgogICAgIyBQcmV2ZW50IG5hbWUgY29sbGlzaW9ucyB3aXRoIGZucyBvZiB0aGUgZm9ybSAnPGZ1bmN0aW9uIDxsYW1iZGE+IGF0IC4uLj4nCiAgICBzZWxmLl9jYWNoZWRfZm4gPSBzZWxmLmZuCgogICAgIyBFbnN1cmUgZm4gYW5kIHNpZGUgaW5wdXRzIGFyZSBwaWNrbGFibGUgZm9yIHJlbW90ZSBleGVjdXRpb24uCiAgICBzZWxmLmZuID0gcGlja2xlci5sb2FkcyhwaWNrbGVyLmR1bXBzKHNlbGYuZm4pKQogICAgc2VsZi5hcmdzID0gcGlja2xlci5sb2FkcyhwaWNrbGVyLmR1bXBzKHNlbGYuYXJncykpCiAgICBzZWxmLmt3YXJncyA9IHBpY2tsZXIubG9hZHMocGlja2xlci5kdW1wcyhzZWxmLmt3YXJncykpCgogICAgIyBGb3IgdHlwZSBoaW50cywgYmVjYXVzZSBsb2FkcyhkdW1wcyhjbGFzcykpICE9IGNsYXNzLgogICAgc2VsZi5mbiA9IHNlbGYuX2NhY2hlZF9mbgoKICBkZWYgd2l0aF9pbnB1dF90eXBlcygKICAgICAgc2VsZiwgaW5wdXRfdHlwZV9oaW50LCAqc2lkZV9pbnB1dHNfYXJnX2hpbnRzLCAqKnNpZGVfaW5wdXRfa3dhcmdfaGludHMpOgogICAgIiIiQW5ub3RhdGVzIHRoZSB0eXBlcyBvZiBtYWluIGlucHV0cyBhbmQgc2lkZSBpbnB1dHMgZm9yIHRoZSBQVHJhbnNmb3JtLgoKICAgIEFyZ3M6CiAgICAgIGlucHV0X3R5cGVfaGludDogQW4gaW5zdGFuY2Ugb2YgYW4gYWxsb3dlZCBidWlsdC1pbiB0eXBlLCBhIGN1c3RvbSBjbGFzcywKICAgICAgICBvciBhbiBpbnN0YW5jZSBvZiBhIHR5cGVoaW50cy5UeXBlQ29uc3RyYWludC4KICAgICAgKnNpZGVfaW5wdXRzX2FyZ19oaW50czogQSB2YXJpYWJsZSBsZW5ndGggYXJndW1lbnQgY29tcG9zZWQgb2YKICAgICAgICBvZiBhbiBhbGxvd2VkIGJ1aWx0LWluIHR5cGUsIGEgY3VzdG9tIGNsYXNzLCBvciBhCiAgICAgICAgdHlwZWhpbnRzLlR5cGVDb25zdHJhaW50LgogICAgICAqKnNpZGVfaW5wdXRfa3dhcmdfaGludHM6IEEgZGljdGlvbmFyeSBhcmd1bWVudCBjb21wb3NlZCBvZgogICAgICAgIG9mIGFuIGFsbG93ZWQgYnVpbHQtaW4gdHlwZSwgYSBjdXN0b20gY2xhc3MsIG9yIGEKICAgICAgICB0eXBlaGludHMuVHlwZUNvbnN0cmFpbnQuCgogICAgRXhhbXBsZSBvZiBhbm5vdGF0aW5nIHRoZSB0eXBlcyBvZiBzaWRlLWlucHV0czo6CgogICAgICBGbGF0TWFwKCkud2l0aF9pbnB1dF90eXBlcyhpbnQsIGludCwgYm9vbCkKCiAgICBSYWlzZXM6CiAgICAgIDpjbGFzczpgfmV4Y2VwdGlvbnMuVHlwZUVycm9yYDogSWYgKip0eXBlX2hpbnQqKiBpcyBub3QgYSB2YWxpZCB0eXBlLWhpbnQuCiAgICAgICAgU2VlCiAgICAgICAgOmZ1bmM6YH5hcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzLnZhbGlkYXRlX2NvbXBvc2l0ZV90eXBlX3BhcmFtYAogICAgICAgIGZvciBmdXJ0aGVyIGRldGFpbHMuCgogICAgUmV0dXJuczoKICAgICAgOmNsYXNzOmBQVHJhbnNmb3JtYDogQSByZWZlcmVuY2UgdG8gdGhlIGluc3RhbmNlIG9mIHRoaXMgcGFydGljdWxhcgogICAgICA6Y2xhc3M6YFBUcmFuc2Zvcm1gIG9iamVjdC4gVGhpcyBhbGxvd3MgY2hhaW5pbmcgdHlwZS1oaW50aW5nIHJlbGF0ZWQKICAgICAgbWV0aG9kcy4KICAgICIiIgogICAgc3VwZXIoUFRyYW5zZm9ybVdpdGhTaWRlSW5wdXRzLCBzZWxmKS53aXRoX2lucHV0X3R5cGVzKGlucHV0X3R5cGVfaGludCkKCiAgICBmb3Igc2kgaW4gc2lkZV9pbnB1dHNfYXJnX2hpbnRzOgogICAgICB2YWxpZGF0ZV9jb21wb3NpdGVfdHlwZV9wYXJhbShzaSwgJ1R5cGUgaGludHMgZm9yIGEgUFRyYW5zZm9ybScpCiAgICBmb3Igc2kgaW4gc2lkZV9pbnB1dF9rd2FyZ19oaW50cy52YWx1ZXMoKToKICAgICAgdmFsaWRhdGVfY29tcG9zaXRlX3R5cGVfcGFyYW0oc2ksICdUeXBlIGhpbnRzIGZvciBhIFBUcmFuc2Zvcm0nKQoKICAgIHNlbGYuc2lkZV9pbnB1dHNfdHlwZXMgPSBzaWRlX2lucHV0c19hcmdfaGludHMKICAgIHJldHVybiBXaXRoVHlwZUhpbnRzLndpdGhfaW5wdXRfdHlwZXMoCiAgICAgICAgc2VsZiwgaW5wdXRfdHlwZV9oaW50LCAqc2lkZV9pbnB1dHNfYXJnX2hpbnRzLCAqKnNpZGVfaW5wdXRfa3dhcmdfaGludHMpCgogIGRlZiB0eXBlX2NoZWNrX2lucHV0cyhzZWxmLCBwdmFsdWVpc2gpOgogICAgdHlwZV9oaW50cyA9IHNlbGYuZ2V0X3R5cGVfaGludHMoKS5pbnB1dF90eXBlcwogICAgaWYgdHlwZV9oaW50czoKICAgICAgYXJncywga3dhcmdzID0gc2VsZi5yYXdfc2lkZV9pbnB1dHMKCiAgICAgIGRlZiBlbGVtZW50X3R5cGUoc2lkZV9pbnB1dCk6CiAgICAgICAgaWYgaXNpbnN0YW5jZShzaWRlX2lucHV0LCBwdmFsdWUuQXNTaWRlSW5wdXQpOgogICAgICAgICAgcmV0dXJuIHNpZGVfaW5wdXQuZWxlbWVudF90eXBlCiAgICAgICAgcmV0dXJuIGluc3RhbmNlX3RvX3R5cGUoc2lkZV9pbnB1dCkKCiAgICAgIGFyZ190eXBlcyA9IFtwdmFsdWVpc2guZWxlbWVudF90eXBlXSArIFtlbGVtZW50X3R5cGUodikgZm9yIHYgaW4gYXJnc10KICAgICAga3dhcmdzX3R5cGVzID0ge2s6IGVsZW1lbnRfdHlwZSh2KSBmb3IgKGssIHYpIGluIGt3YXJncy5pdGVtcygpfQogICAgICBhcmdzcGVjX2ZuID0gc2VsZi5fcHJvY2Vzc19hcmdzcGVjX2ZuKCkKICAgICAgYmluZGluZ3MgPSBnZXRjYWxsYXJnc19mb3JoaW50cyhhcmdzcGVjX2ZuLCAqYXJnX3R5cGVzLCAqKmt3YXJnc190eXBlcykKICAgICAgaGludHMgPSBnZXRjYWxsYXJnc19mb3JoaW50cyhhcmdzcGVjX2ZuLCAqdHlwZV9oaW50c1swXSwgKip0eXBlX2hpbnRzWzFdKQogICAgICBmb3IgYXJnLCBoaW50IGluIGhpbnRzLml0ZW1zKCk6CiAgICAgICAgaWYgYXJnLnN0YXJ0c3dpdGgoJ19fdW5rbm93bl9fJyk6CiAgICAgICAgICBjb250aW51ZQogICAgICAgIGlmIGhpbnQgaXMgTm9uZToKICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgaWYgbm90IHR5cGVoaW50cy5pc19jb25zaXN0ZW50X3dpdGgoCiAgICAgICAgICAgIGJpbmRpbmdzLmdldChhcmcsIHR5cGVoaW50cy5BbnkpLCBoaW50KToKICAgICAgICAgIHJhaXNlIFR5cGVDaGVja0Vycm9yKAogICAgICAgICAgICAgICdUeXBlIGhpbnQgdmlvbGF0aW9uIGZvciBcJyVzXCc6IHJlcXVpcmVzICVzIGJ1dCBnb3QgJXMgZm9yICVzJwogICAgICAgICAgICAgICUgKHNlbGYubGFiZWwsIGhpbnQsIGJpbmRpbmdzW2FyZ10sIGFyZykpCgogIGRlZiBfcHJvY2Vzc19hcmdzcGVjX2ZuKHNlbGYpOgogICAgIiIiUmV0dXJucyBhbiBhcmdzcGVjIG9mIHRoZSBmdW5jdGlvbiBhY3R1YWxseSBjb25zdW1pbmcgdGhlIGRhdGEuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIG1ha2VfZm4oc2VsZiwgZm4pOgogICAgIyBUT0RPKHNpbHZpdWMpOiBBZGQgY29tbWVudCBkZXNjcmliaW5nIHRoYXQgdGhpcyBpcyBtZWFudCB0byBiZSBvdmVycmlkZW4KICAgICMgYnkgbWV0aG9kcyBkZXRlY3RpbmcgY2FsbGFibGVzIGFuZCB3cmFwcGluZyB0aGVtIGluIERvRm5zLgogICAgcmV0dXJuIGZuCgogIGRlZiBkZWZhdWx0X2xhYmVsKHNlbGYpOgogICAgcmV0dXJuICclcyglcyknICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBzZWxmLmZuLmRlZmF1bHRfbGFiZWwoKSkKCgpjbGFzcyBfUFRyYW5zZm9ybUZuUFRyYW5zZm9ybShQVHJhbnNmb3JtKToKICAiIiJBIGNsYXNzIHdyYXBwZXIgZm9yIGEgZnVuY3Rpb24tYmFzZWQgdHJhbnNmb3JtLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgZm4sICphcmdzLCAqKmt3YXJncyk6CiAgICBzdXBlcihfUFRyYW5zZm9ybUZuUFRyYW5zZm9ybSwgc2VsZikuX19pbml0X18oKQogICAgc2VsZi5fZm4gPSBmbgogICAgc2VsZi5fYXJncyA9IGFyZ3MKICAgIHNlbGYuX2t3YXJncyA9IGt3YXJncwoKICBkZWYgZGlzcGxheV9kYXRhKHNlbGYpOgogICAgcmVzID0geydmbic6IChzZWxmLl9mbi5fX25hbWVfXwogICAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKHNlbGYuX2ZuLCAnX19uYW1lX18nKQogICAgICAgICAgICAgICAgICBlbHNlIHNlbGYuX2ZuLl9fY2xhc3NfXyksCiAgICAgICAgICAgJ2FyZ3MnOiBEaXNwbGF5RGF0YUl0ZW0oc3RyKHNlbGYuX2FyZ3MpKS5kcm9wX2lmX2RlZmF1bHQoJygpJyksCiAgICAgICAgICAgJ2t3YXJncyc6IERpc3BsYXlEYXRhSXRlbShzdHIoc2VsZi5fa3dhcmdzKSkuZHJvcF9pZl9kZWZhdWx0KCd7fScpfQogICAgcmV0dXJuIHJlcwoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgICMgU2luY2UgdGhlIFBUcmFuc2Zvcm0gd2lsbCBiZSBpbXBsZW1lbnRlZCBlbnRpcmVseSBhcyBhIGZ1bmN0aW9uCiAgICAjIChvbmNlIGNhbGxlZCksIHdlIG5lZWQgdG8gcGFzcyB0aHJvdWdoIGFueSB0eXBlLWhpbnRpbmcgaW5mb3JtYXRpb24gdGhhdAogICAgIyBtYXkgaGF2ZSBiZWVuIGFubm90YXRlZCB2aWEgdGhlIC53aXRoX2lucHV0X3R5cGVzKCkgYW5kCiAgICAjIC53aXRoX291dHB1dF90eXBlcygpIG1ldGhvZHMuCiAgICBrd2FyZ3MgPSBkaWN0KHNlbGYuX2t3YXJncykKICAgIGFyZ3MgPSB0dXBsZShzZWxmLl9hcmdzKQoKICAgICMgVE9ETyhCRUFNLTU4NzgpIFN1cHBvcnQga2V5d29yZC1vbmx5IGFyZ3VtZW50cy4KICAgIHRyeToKICAgICAgaWYgJ3R5cGVfaGludHMnIGluIGdldGZ1bGxhcmdzcGVjKHNlbGYuX2ZuKS5hcmdzOgogICAgICAgIGFyZ3MgPSAoc2VsZi5nZXRfdHlwZV9oaW50cygpLCkgKyBhcmdzCiAgICBleGNlcHQgVHlwZUVycm9yOgogICAgICAjIE1pZ2h0IG5vdCBiZSBhIGZ1bmN0aW9uLgogICAgICBwYXNzCiAgICByZXR1cm4gc2VsZi5fZm4ocGNvbGwsICphcmdzLCAqKmt3YXJncykKCiAgZGVmIGRlZmF1bHRfbGFiZWwoc2VsZik6CiAgICBpZiBzZWxmLl9hcmdzOgogICAgICByZXR1cm4gJyVzKCVzKScgJSAoCiAgICAgICAgICBsYWJlbF9mcm9tX2NhbGxhYmxlKHNlbGYuX2ZuKSwgbGFiZWxfZnJvbV9jYWxsYWJsZShzZWxmLl9hcmdzWzBdKSkKICAgIHJldHVybiBsYWJlbF9mcm9tX2NhbGxhYmxlKHNlbGYuX2ZuKQoKCmRlZiBwdHJhbnNmb3JtX2ZuKGZuKToKICAiIiJBIGRlY29yYXRvciBmb3IgYSBmdW5jdGlvbi1iYXNlZCBQVHJhbnNmb3JtLgoKICBFeHBlcmltZW50YWw7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIEFyZ3M6CiAgICBmbjogQSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgYSBjdXN0b20gUFRyYW5zZm9ybS4KCiAgUmV0dXJuczoKICAgIEEgQ2FsbGFibGVQVHJhbnNmb3JtIGluc3RhbmNlIHdyYXBwaW5nIHRoZSBmdW5jdGlvbi1iYXNlZCBQVHJhbnNmb3JtLgoKICBUaGlzIHdyYXBwZXIgcHJvdmlkZXMgYW4gYWx0ZXJuYXRpdmUsIHNpbXBsZXIgd2F5IHRvIGRlZmluZSBhIFBUcmFuc2Zvcm0uCiAgVGhlIHN0YW5kYXJkIG1ldGhvZCBpcyB0byBzdWJjbGFzcyBmcm9tIFBUcmFuc2Zvcm0gYW5kIG92ZXJyaWRlIHRoZSBleHBhbmQoKQogIG1ldGhvZC4gQW4gZXF1aXZhbGVudCBlZmZlY3QgY2FuIGJlIG9idGFpbmVkIGJ5IGRlZmluaW5nIGEgZnVuY3Rpb24gdGhhdAogIGFuIGlucHV0IFBDb2xsZWN0aW9uIGFuZCBhZGRpdGlvbmFsIG9wdGlvbmFsIGFyZ3VtZW50cyBhbmQgcmV0dXJucyBhCiAgcmVzdWx0aW5nIFBDb2xsZWN0aW9uLiBGb3IgZXhhbXBsZTo6CgogICAgQHB0cmFuc2Zvcm1fZm4KICAgIGRlZiBDdXN0b21NYXBwZXIocGNvbGwsIG1hcGZuKToKICAgICAgcmV0dXJuIHBjb2xsIHwgUGFyRG8obWFwZm4pCgogIFRoZSBlcXVpdmFsZW50IGFwcHJvYWNoIHVzaW5nIFBUcmFuc2Zvcm0gc3ViY2xhc3Npbmc6OgoKICAgIGNsYXNzIEN1c3RvbU1hcHBlcihQVHJhbnNmb3JtKToKCiAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXBmbik6CiAgICAgICAgc3VwZXIoQ3VzdG9tTWFwcGVyLCBzZWxmKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5tYXBmbiA9IG1hcGZuCgogICAgICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgICAgICByZXR1cm4gcGNvbGwgfCBQYXJEbyhzZWxmLm1hcGZuKQoKICBXaXRoIGVpdGhlciBtZXRob2QgdGhlIGN1c3RvbSBQVHJhbnNmb3JtIGNhbiBiZSB1c2VkIGluIHBpcGVsaW5lcyBhcyBpZgogIGl0IHdlcmUgb25lIG9mIHRoZSAibmF0aXZlIiBQVHJhbnNmb3Jtczo6CgogICAgcmVzdWx0X3Bjb2xsID0gaW5wdXRfcGNvbGwgfCAnTGFiZWwnID4+IEN1c3RvbU1hcHBlcihzb21lZm4pCgogIE5vdGUgdGhhdCBmb3IgYm90aCBzb2x1dGlvbnMgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24gb2YgdGhlIHBpcGUKICBvcGVyYXRvciAoaS5lLiwgYHxgKSB3aWxsIGluamVjdCB0aGUgcGNvbGwgYXJndW1lbnQgaW4gaXRzIHByb3BlciBwbGFjZQogIChmaXJzdCBhcmd1bWVudCBpZiBubyBsYWJlbCB3YXMgc3BlY2lmaWVkIGFuZCBzZWNvbmQgYXJndW1lbnQgb3RoZXJ3aXNlKS4KICAiIiIKICAjIFRPRE8ocm9iZXJ0d2IpOiBDb25zaWRlciByZW1vdmluZyBzdGF0aWNtZXRob2QgdG8gYWxsb3cgZm9yIHNlbGYgcGFyYW1ldGVyLgoKICBkZWYgY2FsbGFibGVfcHRyYW5zZm9ybV9mYWN0b3J5KCphcmdzLCAqKmt3YXJncyk6CiAgICByZXR1cm4gX1BUcmFuc2Zvcm1GblBUcmFuc2Zvcm0oZm4sICphcmdzLCAqKmt3YXJncykKICByZXR1cm4gY2FsbGFibGVfcHRyYW5zZm9ybV9mYWN0b3J5CgoKZGVmIGxhYmVsX2Zyb21fY2FsbGFibGUoZm4pOgogIGlmIGhhc2F0dHIoZm4sICdkZWZhdWx0X2xhYmVsJyk6CiAgICByZXR1cm4gZm4uZGVmYXVsdF9sYWJlbCgpCiAgZWxpZiBoYXNhdHRyKGZuLCAnX19uYW1lX18nKToKICAgIGlmIGZuLl9fbmFtZV9fID09ICc8bGFtYmRhPic6CiAgICAgIHJldHVybiAnPGxhbWJkYSBhdCAlczolcz4nICUgKAogICAgICAgICAgb3MucGF0aC5iYXNlbmFtZShmbi5fX2NvZGVfXy5jb19maWxlbmFtZSksCiAgICAgICAgICBmbi5fX2NvZGVfXy5jb19maXJzdGxpbmVubykKICAgIHJldHVybiBmbi5fX25hbWVfXwogIHJldHVybiBzdHIoZm4pCgoKY2xhc3MgX05hbWVkUFRyYW5zZm9ybShQVHJhbnNmb3JtKToKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHRyYW5zZm9ybSwgbGFiZWwpOgogICAgc3VwZXIoX05hbWVkUFRyYW5zZm9ybSwgc2VsZikuX19pbml0X18obGFiZWwpCiAgICBzZWxmLnRyYW5zZm9ybSA9IHRyYW5zZm9ybQoKICBkZWYgX19yb3JfXyhzZWxmLCBwdmFsdWVpc2gsIF91bnVzZWQ9Tm9uZSk6CiAgICByZXR1cm4gc2VsZi50cmFuc2Zvcm0uX19yb3JfXyhwdmFsdWVpc2gsIHNlbGYubGFiZWwpCgogIGRlZiBleHBhbmQoc2VsZiwgcHZhbHVlKToKICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiU2hvdWxkIG5ldmVyIGJlIGV4cGFuZGVkIGRpcmVjdGx5LiIpCn1y7IQAAChYNAAAAF9BZGRNYXRlcmlhbGl6YXRpb25UcmFuc2Zvcm1zLl9tYXRlcmlhbGl6ZV90cmFuc2Zvcm1YAwAAAGRlZkuzS8KHWCAAAABQVHJhbnNmb3JtV2l0aFNpZGVJbnB1dHMubWFrZV9mblgDAAAAZGVmTdMCTdcCh1gQAAAAX1NldElucHV0UFZhbHVlc1gFAAAAY2xhc3NLYUtnh1gpAAAAUFRyYW5zZm9ybVdpdGhTaWRlSW5wdXRzLndpdGhfaW5wdXRfdHlwZXNYAwAAAGRlZk2MAk2zAodYEQAAAFBUcmFuc2Zvcm0uX19vcl9fWAMAAABkZWZNwwFNyAGHWBEAAABfR2V0UFZhbHVlcy52aXNpdFgDAAAAZGVmS9xL4YdYJwAAAF9NYXRlcmlhbGl6ZWREb091dHB1dHNUdXBsZS5fX2dldGl0ZW1fX1gDAAAAZGVmS6lLr4dYGwAAAF9NYXRlcmlhbGl6ZWREb091dHB1dHNUdXBsZVgFAAAAY2xhc3NLokuvh1ggAAAAUFRyYW5zZm9ybS5yZWdpc3Rlcl91cm4ucmVnaXN0ZXJYAwAAAGRlZk0VAk0YAodYIgAAAFBUcmFuc2Zvcm0udG9fcnVubmVyX2FwaV9wYXJhbWV0ZXJYAwAAAGRlZk01Ak05AodYIAAAAF9QVmFsdWVpc2hUcmFuc2Zvcm0udmlzaXRfbmVzdGVkWAMAAABkZWZLUktfh1gTAAAAbGFiZWxfZnJvbV9jYWxsYWJsZVgDAAAAZGVmTTUDTT8Dh1gmAAAAUFRyYW5zZm9ybVdpdGhTaWRlSW5wdXRzLmRlZmF1bHRfbGFiZWxYAwAAAGRlZk3YAk3aAodYHQAAAF9hbGxvY2F0ZV9tYXRlcmlhbGl6ZWRfcmVzdWx0WAMAAABkZWZLd0uCh1gcAAAAUFRyYW5zZm9ybS50eXBlX2NoZWNrX2lucHV0c1gDAAAAZGVmTWQBTWYBh1gQAAAAX05hbWVkUFRyYW5zZm9ybVgFAAAAY2xhc3NNQQNNTAOHWCMAAABfQWRkTWF0ZXJpYWxpemF0aW9uVHJhbnNmb3Jtcy52aXNpdFgDAAAAZGVmS8NLz4dYEQAAAF9jcmVhdGVfdHJhbnNmb3JtWAMAAABkZWZNQgJNRwKHWAsAAABfR2V0UFZhbHVlc1gFAAAAY2xhc3NL20vhh1gfAAAAX2FsbG9jYXRlX21hdGVyaWFsaXplZF9waXBlbGluZVgDAAAAZGVmS3BLdYdYIAAAAFBUcmFuc2Zvcm0udG9fcnVubmVyX2FwaV9waWNrbGVkWAMAAABkZWZNOgJNPQKHWBMAAABfTWF0ZXJpYWxpemVkUmVzdWx0WAUAAABjbGFzc0uVS6CHWBMAAABfdW5waWNrbGVfdHJhbnNmb3JtWAMAAABkZWZNSQJNTAKHWBoAAABfWmlwUFZhbHVlcy52aXNpdF9zZXF1ZW5jZVgDAAAAZGVmTQQBTQwBh1geAAAAX0ZpbmFsaXplTWF0ZXJpYWxpemF0aW9uLnZpc2l0WAMAAABkZWZL0kvZh1ghAAAAUFRyYW5zZm9ybS5fZXh0cmFjdF9pbnB1dF9wdmFsdWVzWAMAAABkZWZN9AFNEAKHWBgAAABQVHJhbnNmb3JtLmdldF93aW5kb3dpbmdYAwAAAGRlZk23AU2/AYdYEgAAAFBUcmFuc2Zvcm0uX19yb3JfX1gDAAAAZGVmTckBTfMBh1g3AAAAUFRyYW5zZm9ybVdpdGhTaWRlSW5wdXRzLnR5cGVfY2hlY2tfaW5wdXRzLmVsZW1lbnRfdHlwZVgDAAAAZGVmTbkCTb0Ch1gRAAAAX1ppcFBWYWx1ZXMudmlzaXRYAwAAAGRlZkv4TQMBh1gnAAAAUFRyYW5zZm9ybS50eXBlX2NoZWNrX2lucHV0c19vcl9vdXRwdXRzWAMAAABkZWZNbQFNgwGHWBYAAABfWmlwUFZhbHVlcy52aXNpdF9kaWN0WAMAAABkZWZNDQFNFAGHWBkAAABfQ2hhaW5lZFBUcmFuc2Zvcm0uX19vcl9fWAMAAABkZWZNVwJNXQKHWCQAAABfUFRyYW5zZm9ybUZuUFRyYW5zZm9ybS5kaXNwbGF5X2RhdGFYAwAAAGRlZk3lAk3sAodYJAAAAF9NYXRlcmlhbGl6ZWREb091dHB1dHNUdXBsZS5fX2luaXRfX1gDAAAAZGVmS6NLqIdYHAAAAFBUcmFuc2Zvcm0ud2l0aF9vdXRwdXRfdHlwZXNYAwAAAGRlZk1QAU1jAYdYIAAAAF9QVHJhbnNmb3JtRm5QVHJhbnNmb3JtLl9faW5pdF9fWAMAAABkZWZN3wJN5AKHWBkAAABfQ2hhaW5lZFBUcmFuc2Zvcm0uZXhwYW5kWAMAAABkZWZNXgJNYAKHWBMAAABfUFZhbHVlaXNoVHJhbnNmb3JtWAUAAABjbGFzc0tLS1+HWBwAAABQVHJhbnNmb3JtLmluZmVyX291dHB1dF90eXBlWAMAAABkZWZNZwFNaQGHWFMAAABfQWRkTWF0ZXJpYWxpemF0aW9uVHJhbnNmb3Jtcy5fbWF0ZXJpYWxpemVfdHJhbnNmb3JtLl9NYXRlcmlhbGl6ZVZhbHVlc0RvRm4ucHJvY2Vzc1gDAAAAZGVmS7xLvodYEQAAAFBUcmFuc2Zvcm0uZXhwYW5kWAMAAABkZWZNnwFNoQGHWB4AAABQVHJhbnNmb3JtLl9pbmZlcl9vdXRwdXRfY29kZXJYAwAAAGRlZk2EAU2YAYdYHgAAAF9NYXRlcmlhbGl6ZWRSZXN1bHQuX19yZWR1Y2VfX1gDAAAAZGVmS5tLoIdYEwAAAFBUcmFuc2Zvcm0uX19yZXByX19YAwAAAGRlZk2lAU2nAYdYEQAAAFBUcmFuc2Zvcm0uX2Nsb25lWAMAAABkZWZNmQFNngGHWBIAAABQVHJhbnNmb3JtLl9fc3RyX19YAwAAAGRlZk2iAU2kAYdYGAAAAFBUcmFuc2Zvcm1XaXRoU2lkZUlucHV0c1gFAAAAY2xhc3NNYgJN2gKHWA0AAABwdHJhbnNmb3JtX2ZuWAMAAABkZWZNBQNNMwOHWDQAAABQVHJhbnNmb3JtLl9leHRyYWN0X2lucHV0X3B2YWx1ZXMuX2RpY3RfdHVwbGVfbGVhdmVzWAMAAABkZWZNBAJNDwKHWBsAAABQVHJhbnNmb3JtLndpdGhfaW5wdXRfdHlwZXNYAwAAAGRlZk05AU1PAYdYCgAAAFBUcmFuc2Zvcm1YBQAAAGNsYXNzTRYBTUACh1gSAAAAX0NoYWluZWRQVHJhbnNmb3JtWAUAAABjbGFzc01OAk1gAodYGgAAAFBUcmFuc2Zvcm0uZnJvbV9ydW5uZXJfYXBpWAMAAABkZWZNLAJNNAKHWCwAAABQVHJhbnNmb3JtV2l0aFNpZGVJbnB1dHMuX3Byb2Nlc3NfYXJnc3BlY19mblgDAAAAZGVmTc4CTdICh1gYAAAAUFRyYW5zZm9ybS5fc3RyX2ludGVybmFsWAMAAABkZWZNqAFNsAGHWBsAAABfQ2hhaW5lZFBUcmFuc2Zvcm0uX19pbml0X19YAwAAAGRlZk1QAk1TAodYGAAAAF9OYW1lZFBUcmFuc2Zvcm0uX19yb3JfX1gDAAAAZGVmTUcDTUkDh1gWAAAAX1NldElucHV0UFZhbHVlcy52aXNpdFgDAAAAZGVmS2JLZ4dYHQAAAF9BZGRNYXRlcmlhbGl6YXRpb25UcmFuc2Zvcm1zWAUAAABjbGFzc0uxS8+HWBcAAABfTmFtZWRQVHJhbnNmb3JtLmV4cGFuZFgDAAAAZGVmTUoDTUwDh1gcAAAAX01hdGVyaWFsaXplZFJlc3VsdC5fX2luaXRfX1gDAAAAZGVmS5ZLmodYHgAAAF9yZWxlYXNlX21hdGVyaWFsaXplZF9waXBlbGluZVgDAAAAZGVmS45Lk4dYKgAAAFBUcmFuc2Zvcm0ucnVubmVyX2FwaV9yZXF1aXJlc19rZXllZF9pbnB1dFgDAAAAZGVmTT4CTUACh1gqAAAAUFRyYW5zZm9ybVdpdGhTaWRlSW5wdXRzLnR5cGVfY2hlY2tfaW5wdXRzWAMAAABkZWZNtAJNzQKHWBgAAABfZ2V0X21hdGVyaWFsaXplZF9yZXN1bHRYAwAAAGRlZkuES4yHWBcAAABQVHJhbnNmb3JtLnJlZ2lzdGVyX3VyblgDAAAAZGVmTRMCTR4Ch1gZAAAAX05hbWVkUFRyYW5zZm9ybS5fX2luaXRfX1gDAAAAZGVmTUMDTUYDh1gdAAAAUFRyYW5zZm9ybS50eXBlX2NoZWNrX291dHB1dHNYAwAAAGRlZk1qAU1sAYdYIQAAAFBUcmFuc2Zvcm1XaXRoU2lkZUlucHV0cy5fX2luaXRfX1gDAAAAZGVmTW8CTYsCh1gYAAAAX0ZpbmFsaXplTWF0ZXJpYWxpemF0aW9uWAUAAABjbGFzc0vRS9mHWB0AAABQVHJhbnNmb3JtLl9jaGVja19wY29sbGVjdGlvblgDAAAAZGVmTbEBTbYBh1gQAAAAUFRyYW5zZm9ybS5sYWJlbFgDAAAAZGVmTTIBTTUBh1hLAAAAX0FkZE1hdGVyaWFsaXphdGlvblRyYW5zZm9ybXMuX21hdGVyaWFsaXplX3RyYW5zZm9ybS5fTWF0ZXJpYWxpemVWYWx1ZXNEb0ZuWAUAAABjbGFzc0u7S76HWCUAAABfUFRyYW5zZm9ybUZuUFRyYW5zZm9ybS5kZWZhdWx0X2xhYmVsWAMAAABkZWZN/gJNAwOHWAsAAABfWmlwUFZhbHVlc1gFAAAAY2xhc3NL6U0UAYdYGAAAAFBUcmFuc2Zvcm0uZGVmYXVsdF9sYWJlbFgDAAAAZGVmTTYBTTgBh1gSAAAAZ2V0X25lc3RlZF9wdmFsdWVzWAMAAABkZWZL40vnh1gfAAAAX0NoYWluZWRQVHJhbnNmb3JtLl9jaGFpbl9sYWJlbFgDAAAAZGVmTVQCTVYCh1gpAAAAcHRyYW5zZm9ybV9mbi5jYWxsYWJsZV9wdHJhbnNmb3JtX2ZhY3RvcnlYAwAAAGRlZk0wA00yA4dYFgAAAFBUcmFuc2Zvcm0uX19ycnNoaWZ0X19YAwAAAGRlZk3AAU3CAYdYGAAAAFBUcmFuc2Zvcm0udG9fcnVubmVyX2FwaVgDAAAAZGVmTR8CTSsCh1geAAAAX1BUcmFuc2Zvcm1GblBUcmFuc2Zvcm0uZXhwYW5kWAMAAABkZWZN7QJN/QKHWBcAAABfUFRyYW5zZm9ybUZuUFRyYW5zZm9ybVgFAAAAY2xhc3NN3AJNAwOHWBMAAABQVHJhbnNmb3JtLl9faW5pdF9fWAMAAABkZWZNKgFNLQGHdX1y7YQAAChYHAAAAFBUcmFuc2Zvcm0uaW5mZXJfb3V0cHV0X3R5cGVqTV8AAFgqAAAAUFRyYW5zZm9ybS5ydW5uZXJfYXBpX3JlcXVpcmVzX2tleWVkX2lucHV0ak1fAABYEQAAAFBUcmFuc2Zvcm0uZXhwYW5kak1fAABYHQAAAFBUcmFuc2Zvcm0udHlwZV9jaGVja19vdXRwdXRzak1fAABYFwAAAFBUcmFuc2Zvcm0ucmVnaXN0ZXJfdXJuak1fAABYGAAAAFBUcmFuc2Zvcm0uZ2V0X3dpbmRvd2luZ2pNXwAAWCIAAABQVHJhbnNmb3JtLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyak1fAABYIAAAAFBUcmFuc2Zvcm0udG9fcnVubmVyX2FwaV9waWNrbGVkak1fAABYJwAAAFBUcmFuc2Zvcm0udHlwZV9jaGVja19pbnB1dHNfb3Jfb3V0cHV0c2pNXwAAWBsAAABQVHJhbnNmb3JtLndpdGhfaW5wdXRfdHlwZXNqTV8AAFgTAAAAbGFiZWxfZnJvbV9jYWxsYWJsZWpNXwAAWAoAAABQVHJhbnNmb3Jtak1fAABYGgAAAFBUcmFuc2Zvcm0uZnJvbV9ydW5uZXJfYXBpak1fAABYHAAAAFBUcmFuc2Zvcm0udHlwZV9jaGVja19pbnB1dHNqTV8AAFgNAAAAcHRyYW5zZm9ybV9mbmpNXwAAWBwAAABQVHJhbnNmb3JtLndpdGhfb3V0cHV0X3R5cGVzak1fAABYGAAAAFBUcmFuc2Zvcm0uZGVmYXVsdF9sYWJlbGpNXwAAWBgAAABQVHJhbnNmb3JtLnRvX3J1bm5lcl9hcGlqTV8AAHVqfWkAAFghAAAAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3Jtcu6EAACFgXLvhAAAfXLwhAAAYnRy8YQAAFUcYXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZShY8igAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKQ29uY2F0IFNvdXJjZSwgd2hpY2ggcmVhZHMgdGhlIHVuaW9uIG9mIHNldmVyYWwgb3RoZXIgc291cmNlcy4KIiIiCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CmZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KCmltcG9ydCBiaXNlY3QKaW1wb3J0IHRocmVhZGluZwpmcm9tIGJ1aWx0aW5zIGltcG9ydCByYW5nZQoKZnJvbSBhcGFjaGVfYmVhbS5pbyBpbXBvcnQgaW9iYXNlCgoKY2xhc3MgQ29uY2F0U291cmNlKGlvYmFzZS5Cb3VuZGVkU291cmNlKToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIEEgYGBCb3VuZGVkU291cmNlYGAgdGhhdCBjYW4gZ3JvdXAgYSBzZXQgb2YgYGBCb3VuZGVkU291cmNlc2BgLgoKICBQcmltYXJpbHkgZm9yIGludGVybmFsIHVzZSwgdXNlIHRoZSBgYGFwYWNoZV9iZWFtLkZsYXR0ZW5gYCB0cmFuc2Zvcm0KICB0byBjcmVhdGUgdGhlIHVuaW9uIG9mIHNldmVyYWwgcmVhZHMuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBzb3VyY2VzKToKICAgIHNlbGYuX3NvdXJjZV9idW5kbGVzID0gW3NvdXJjZSBpZiBpc2luc3RhbmNlKHNvdXJjZSwgaW9iYXNlLlNvdXJjZUJ1bmRsZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaW9iYXNlLlNvdXJjZUJ1bmRsZShOb25lLCBzb3VyY2UsIE5vbmUsIE5vbmUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Igc291cmNlIGluIHNvdXJjZXNdCgogIEBwcm9wZXJ0eQogIGRlZiBzb3VyY2VzKHNlbGYpOgogICAgcmV0dXJuIFtzLnNvdXJjZSBmb3IgcyBpbiBzZWxmLl9zb3VyY2VfYnVuZGxlc10KCiAgZGVmIGVzdGltYXRlX3NpemUoc2VsZik6CiAgICByZXR1cm4gc3VtKHMuc291cmNlLmVzdGltYXRlX3NpemUoKSBmb3IgcyBpbiBzZWxmLl9zb3VyY2VfYnVuZGxlcykKCiAgZGVmIHNwbGl0KAogICAgICBzZWxmLCBkZXNpcmVkX2J1bmRsZV9zaXplPU5vbmUsIHN0YXJ0X3Bvc2l0aW9uPU5vbmUsIHN0b3BfcG9zaXRpb249Tm9uZSk6CiAgICBpZiBzdGFydF9wb3NpdGlvbiBvciBzdG9wX3Bvc2l0aW9uOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgJ011bHRpLWxldmVsIGluaXRpYWwgc3BsaXR0aW5nIGlzIG5vdCBzdXBwb3J0ZWQuIEV4cGVjdGVkIHN0YXJ0IGFuZCAnCiAgICAgICAgICAnc3RvcCBwb3NpdGlvbnMgdG8gYmUgTm9uZS4gUmVjZWl2ZWQgJXIgYW5kICVyIHJlc3BlY3RpdmVseS4nICUKICAgICAgICAgIChzdGFydF9wb3NpdGlvbiwgc3RvcF9wb3NpdGlvbikpCgogICAgZm9yIHNvdXJjZSBpbiBzZWxmLl9zb3VyY2VfYnVuZGxlczoKICAgICAgIyBXZSBhc3N1bWUgYWxsIHN1Yi1zb3VyY2VzIHRvIHByb2R1Y2UgYnVuZGxlcyB0aGF0IHNwZWNpZnkgd2VpZ2h0IHVzaW5nCiAgICAgICMgdGhlIHNhbWUgdW5pdC4gRm9yIGV4YW1wbGUsIGFsbCBzdWItc291cmNlcyBtYXkgc3BlY2lmeSB0aGUgc2l6ZSBpbgogICAgICAjIGJ5dGVzIGFzIHRoZWlyIHdlaWdodC4KICAgICAgZm9yIGJ1bmRsZSBpbiBzb3VyY2Uuc291cmNlLnNwbGl0KAogICAgICAgICAgZGVzaXJlZF9idW5kbGVfc2l6ZSwgc291cmNlLnN0YXJ0X3Bvc2l0aW9uLCBzb3VyY2Uuc3RvcF9wb3NpdGlvbik6CiAgICAgICAgeWllbGQgYnVuZGxlCgogIGRlZiBnZXRfcmFuZ2VfdHJhY2tlcihzZWxmLCBzdGFydF9wb3NpdGlvbj1Ob25lLCBzdG9wX3Bvc2l0aW9uPU5vbmUpOgogICAgaWYgc3RhcnRfcG9zaXRpb24gaXMgTm9uZToKICAgICAgc3RhcnRfcG9zaXRpb24gPSAoMCwgTm9uZSkKICAgIGlmIHN0b3BfcG9zaXRpb24gaXMgTm9uZToKICAgICAgc3RvcF9wb3NpdGlvbiA9IChsZW4oc2VsZi5fc291cmNlX2J1bmRsZXMpLCBOb25lKQogICAgcmV0dXJuIENvbmNhdFJhbmdlVHJhY2tlcigKICAgICAgICBzdGFydF9wb3NpdGlvbiwgc3RvcF9wb3NpdGlvbiwgc2VsZi5fc291cmNlX2J1bmRsZXMpCgogIGRlZiByZWFkKHNlbGYsIHJhbmdlX3RyYWNrZXIpOgogICAgc3RhcnRfc291cmNlLCBfID0gcmFuZ2VfdHJhY2tlci5zdGFydF9wb3NpdGlvbigpCiAgICBzdG9wX3NvdXJjZSwgc3RvcF9wb3MgPSByYW5nZV90cmFja2VyLnN0b3BfcG9zaXRpb24oKQogICAgaWYgc3RvcF9wb3MgaXMgbm90IE5vbmU6CiAgICAgIHN0b3Bfc291cmNlICs9IDEKICAgIGZvciBzb3VyY2VfaXggaW4gcmFuZ2Uoc3RhcnRfc291cmNlLCBzdG9wX3NvdXJjZSk6CiAgICAgIGlmIG5vdCByYW5nZV90cmFja2VyLnRyeV9jbGFpbSgoc291cmNlX2l4LCBOb25lKSk6CiAgICAgICAgYnJlYWsKICAgICAgZm9yIHJlY29yZCBpbiBzZWxmLl9zb3VyY2VfYnVuZGxlc1tzb3VyY2VfaXhdLnNvdXJjZS5yZWFkKAogICAgICAgICAgcmFuZ2VfdHJhY2tlci5zdWJfcmFuZ2VfdHJhY2tlcihzb3VyY2VfaXgpKToKICAgICAgICB5aWVsZCByZWNvcmQKCiAgZGVmIGRlZmF1bHRfb3V0cHV0X2NvZGVyKHNlbGYpOgogICAgaWYgc2VsZi5fc291cmNlX2J1bmRsZXM6CiAgICAgICMgR2V0dGluZyBjb2RlciBmcm9tIHRoZSBmaXJzdCBzdWItc291cmNlcy4gVGhpcyBhc3N1bWVzIGFsbCBzdWItc291cmNlcwogICAgICAjIHRvIHByb2R1Y2UgdGhlIHNhbWUgY29kZXIuCiAgICAgIHJldHVybiBzZWxmLl9zb3VyY2VfYnVuZGxlc1swXS5zb3VyY2UuZGVmYXVsdF9vdXRwdXRfY29kZXIoKQogICAgZWxzZToKICAgICAgcmV0dXJuIHN1cGVyKENvbmNhdFNvdXJjZSwgc2VsZikuZGVmYXVsdF9vdXRwdXRfY29kZXIoKQoKCmNsYXNzIENvbmNhdFJhbmdlVHJhY2tlcihpb2Jhc2UuUmFuZ2VUcmFja2VyKToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIFJhbmdlIHRyYWNrZXIgZm9yIENvbmNhdFNvdXJjZSIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgc3RhcnQsIGVuZCwgc291cmNlX2J1bmRsZXMpOgogICAgIiIiSW5pdGlhbGl6ZXMgYGBDb25jYXRSYW5nZVRyYWNrZXJgYAoKICAgIEFyZ3M6CiAgICAgIHN0YXJ0OiBzdGFydCBwb3NpdGlvbiwgYSB0dXBsZSBvZiAoc291cmNlX2luZGV4LCBzb3VyY2VfcG9zaXRpb24pCiAgICAgIGVuZDogZW5kIHBvc2l0aW9uLCBhIHR1cGxlIG9mIChzb3VyY2VfaW5kZXgsIHNvdXJjZV9wb3NpdGlvbikKICAgICAgc291cmNlX2J1bmRsZXM6IHRoZSBsaXN0IG9mIHNvdXJjZSBidW5kbGVzIGluIHRoZSBDb25jYXRTb3VyY2UKICAgICIiIgogICAgc3VwZXIoQ29uY2F0UmFuZ2VUcmFja2VyLCBzZWxmKS5fX2luaXRfXygpCiAgICBzZWxmLl9zdGFydCA9IHN0YXJ0CiAgICBzZWxmLl9lbmQgPSBlbmQKICAgIHNlbGYuX3NvdXJjZV9idW5kbGVzID0gc291cmNlX2J1bmRsZXMKICAgIHNlbGYuX2xvY2sgPSB0aHJlYWRpbmcuUkxvY2soKQogICAgIyBMYXppbHktaW5pdGlhbGl6ZWQgbGlzdCBvZiBSYW5nZVRyYWNrZXJzIGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBzb3VyY2UuCiAgICBzZWxmLl9yYW5nZV90cmFja2VycyA9IFtOb25lXSAqIGxlbihzb3VyY2VfYnVuZGxlcykKICAgICMgVGhlIGN1cnJlbnRseS1iZWluZy1pdGVyYXRlZC1vdmVyIChhbmQgbGF0ZXN0IGNsYWltZWQpIHNvdXJjZS4KICAgIHNlbGYuX2NsYWltZWRfc291cmNlX2l4ID0gc2VsZi5fc3RhcnRbMF0KICAgICMgTm93IGNvbXB1dGUgY3VtdWxhdGl2ZSBwcm9ncmVzcyB0aHJvdWdoIHRoZSBzb3VyY2VzIGZvciBjb252ZXJ0aW5nCiAgICAjIGJldHdlZW4gZ2xvYmFsIGZyYWN0aW9ucyBhbmQgZnJhY3Rpb25zIHdpdGhpbiBzcGVjaWZpYyBzb3VyY2VzLgogICAgIyBUT0RPKHJvYmVydHdiKTogSW1wbGVtZW50IGZyYWN0aW9uLWF0LXBvc2l0aW9uIHRvIHByb3Blcmx5IHNjYWxlCiAgICAjIHBhcnRpYWwgc3RhcnQgYW5kIGVuZCBzb3VyY2VzLgogICAgIyBOb3RlLCBob3dldmVyLCB0aGF0IGluIHByYWN0aWNlIHNwbGl0cyBhcmUgdHlwaWNhbGx5IG9uIHNvdXJjZQogICAgIyBib3VuZGFyaWVzIGFueXdheXMuCiAgICBsYXN0ID0gZW5kWzBdIGlmIGVuZFsxXSBpcyBOb25lIGVsc2UgZW5kWzBdICsgMQogICAgc2VsZi5fY3VtdWxhdGl2ZV93ZWlnaHRzID0gKAogICAgICAgIFswXSAqIHN0YXJ0WzBdCiAgICAgICAgKyBzZWxmLl9jb21wdXRlX2N1bXVsYXRpdmVfd2VpZ2h0cyhzb3VyY2VfYnVuZGxlc1tzdGFydFswXTpsYXN0XSkKICAgICAgICArIFsxXSAqIChsZW4oc291cmNlX2J1bmRsZXMpIC0gbGFzdCAtIHN0YXJ0WzBdKSkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBfY29tcHV0ZV9jdW11bGF0aXZlX3dlaWdodHMoc291cmNlX2J1bmRsZXMpOgogICAgIyBUd28gYWRqYWNlbnQgc291cmNlcyBtdXN0IGRpZmZlciBzbyB0aGF0IHRoZXkgY2FuIGJlIHVuaXF1ZWx5CiAgICAjIGlkZW50aWZpZWQgYnkgYSBzaW5nbGUgZ2xvYmFsIGZyYWN0aW9uLiAgTGV0IG1pbl9kaWZmIGJlIHRoZQogICAgIyBzbWFsbGVzdCBhbGxvd2FibGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHNvdXJjZXMuCiAgICBtaW5fZGlmZiA9IDFlLTUKICAgICMgRm9yIHRoZSBjb21wdXRhdGlvbiBiZWxvdywgd2UgbmVlZCB3ZWlnaHRzIGZvciBhbGwgc291cmNlcy4KICAgICMgU3Vic3RpdHV0ZSBhdmVyYWdlIHdlaWdodHMgZm9yIHRob3NlIHdob3NlIHdlaWdodHMgYXJlCiAgICAjIHVuc3BlY2lmaWVkIChvciAxLjAgZm9yIGV2ZXJ5dGhpbmcgaWYgbm9uZSBhcmUga25vd24pLgogICAga25vd24gPSBbcy53ZWlnaHQgZm9yIHMgaW4gc291cmNlX2J1bmRsZXMgaWYgcy53ZWlnaHQgaXMgbm90IE5vbmVdCiAgICBhdmcgPSBzdW0oa25vd24pIC8gbGVuKGtub3duKSBpZiBrbm93biBlbHNlIDEuMAogICAgd2VpZ2h0cyA9IFtzLndlaWdodCBvciBhdmcgZm9yIHMgaW4gc291cmNlX2J1bmRsZXNdCgogICAgIyBOb3cgY29tcHV0ZSBydW5uaW5nIHRvdGFscyBvZiB0aGUgcGVyY2VudCBkb25lIHVwb24gcmVhY2hpbmcKICAgICMgZWFjaCBzb3VyY2UsIHdpdGggcmVzcGVjdCB0byB0aGUgc3RhcnQgYW5kIGVuZCBwb3NpdGlvbnMuCiAgICAjIEUuZy4gaWYgdGhlIHdlaWdodHMgd2VyZSBbMTAwLCAyMCwgM10gd2Ugd291bGQgcHJvZHVjZQogICAgIyBbMC4wLCAxMDAvMTIzLCAxMjAvMTIzLCAxLjBdCiAgICB0b3RhbCA9IGZsb2F0KHN1bSh3ZWlnaHRzKSkKICAgIHJ1bm5pbmdfdG90YWwgPSBbMF0KICAgIGZvciB3IGluIHdlaWdodHM6CiAgICAgIHJ1bm5pbmdfdG90YWwuYXBwZW5kKAogICAgICAgICAgbWF4KG1pbl9kaWZmLCBtaW4oMSwgcnVubmluZ190b3RhbFstMV0gKyB3IC8gdG90YWwpKSkKICAgIHJ1bm5pbmdfdG90YWxbLTFdID0gMSAgIyBJbiBjYXNlIG9mIHJvdW5kaW5nIGVycm9yLgogICAgIyBUaGVyZSBhcmUgaXNzdWVzIGlmLCBkdWUgdG8gcm91ZGluZyBlcnJvciBvciBncmVhdGx5IGRpZmZlcmluZyBzaXplcywKICAgICMgdHdvIGFkamFjZW50IHJ1bm5pbmcgdG90YWwgd2VpZ2h0cyBhcmUgZXF1YWwuIE5vcm1hbGl6ZSB0aGlzIHRoaW5ncyBzbwogICAgIyB0aGF0IHRoaXMgbmV2ZXIgaGFwcGVucy4KICAgIGZvciBrIGluIHJhbmdlKDEsIGxlbihydW5uaW5nX3RvdGFsKSk6CiAgICAgIGlmIHJ1bm5pbmdfdG90YWxba10gPT0gcnVubmluZ190b3RhbFtrIC0gMV06CiAgICAgICAgZm9yIGogaW4gcmFuZ2Uoayk6CiAgICAgICAgICBydW5uaW5nX3RvdGFsW2pdICo9ICgxIC0gbWluX2RpZmYpCiAgICByZXR1cm4gcnVubmluZ190b3RhbAoKICBkZWYgc3RhcnRfcG9zaXRpb24oc2VsZik6CiAgICByZXR1cm4gc2VsZi5fc3RhcnQKCiAgZGVmIHN0b3BfcG9zaXRpb24oc2VsZik6CiAgICByZXR1cm4gc2VsZi5fZW5kCgogIGRlZiB0cnlfY2xhaW0oc2VsZiwgcG9zKToKICAgIHNvdXJjZV9peCwgc291cmNlX3BvcyA9IHBvcwogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICBpZiBzb3VyY2VfaXggPiBzZWxmLl9lbmRbMF06CiAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgIGVsaWYgc291cmNlX2l4ID09IHNlbGYuX2VuZFswXSBhbmQgc2VsZi5fZW5kWzFdIGlzIE5vbmU6CiAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgIGVsc2U6CiAgICAgICAgYXNzZXJ0IHNvdXJjZV9peCA+PSBzZWxmLl9jbGFpbWVkX3NvdXJjZV9peAogICAgICAgIHNlbGYuX2NsYWltZWRfc291cmNlX2l4ID0gc291cmNlX2l4CiAgICAgICAgaWYgc291cmNlX3BvcyBpcyBOb25lOgogICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICBlbHNlOgogICAgICAgICAgcmV0dXJuIHNlbGYuc3ViX3JhbmdlX3RyYWNrZXIoc291cmNlX2l4KS50cnlfY2xhaW0oc291cmNlX3BvcykKCiAgZGVmIHRyeV9zcGxpdChzZWxmLCBwb3MpOgogICAgc291cmNlX2l4LCBzb3VyY2VfcG9zID0gcG9zCiAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgIGlmIHNvdXJjZV9peCA8IHNlbGYuX2NsYWltZWRfc291cmNlX2l4OgogICAgICAgICMgQWxyZWFkeSBjbGFpbWVkLgogICAgICAgIHJldHVybiBOb25lCiAgICAgIGVsaWYgc291cmNlX2l4ID4gc2VsZi5fZW5kWzBdOgogICAgICAgICMgQWZ0ZXIgZW5kLgogICAgICAgIHJldHVybiBOb25lCiAgICAgIGVsaWYgc291cmNlX2l4ID09IHNlbGYuX2VuZFswXSBhbmQgc2VsZi5fZW5kWzFdIGlzIE5vbmU6CiAgICAgICAgIyBBdC9hZnRlciBlbmQuCiAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgZWxzZToKICAgICAgICBpZiBzb3VyY2VfaXggPiBzZWxmLl9jbGFpbWVkX3NvdXJjZV9peDoKICAgICAgICAgICMgUHJlZmVyIHRvIHNwbGl0IG9uIGV2ZW4gYm91bmRhcnkuCiAgICAgICAgICBzcGxpdF9wb3MgPSBOb25lCiAgICAgICAgICByYXRpbyA9IHNlbGYuX2N1bXVsYXRpdmVfd2VpZ2h0c1tzb3VyY2VfaXhdCiAgICAgICAgZWxzZToKICAgICAgICAgICMgU3BsaXQgdGhlIGN1cnJlbnQgc3Vic291cmNlLgogICAgICAgICAgc3BsaXQgPSBzZWxmLnN1Yl9yYW5nZV90cmFja2VyKHNvdXJjZV9peCkudHJ5X3NwbGl0KAogICAgICAgICAgICAgIHNvdXJjZV9wb3MpCiAgICAgICAgICBpZiBub3Qgc3BsaXQ6CiAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgICBzcGxpdF9wb3MsIGZyYWMgPSBzcGxpdAogICAgICAgICAgcmF0aW8gPSBzZWxmLmxvY2FsX3RvX2dsb2JhbChzb3VyY2VfaXgsIGZyYWMpCgogICAgICAgIHNlbGYuX2VuZCA9IHNvdXJjZV9peCwgc3BsaXRfcG9zCiAgICAgICAgc2VsZi5fY3VtdWxhdGl2ZV93ZWlnaHRzID0gW21pbih3IC8gcmF0aW8sIDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB3IGluIHNlbGYuX2N1bXVsYXRpdmVfd2VpZ2h0c10KICAgICAgICByZXR1cm4gKHNvdXJjZV9peCwgc3BsaXRfcG9zKSwgcmF0aW8KCiAgZGVmIHNldF9jdXJyZW50X3Bvc2l0aW9uKHNlbGYsIHBvcyk6CiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdTaG91bGQgb25seSBiZSBjYWxsZWQgb24gc3ViLXRyYWNrZXJzJykKCiAgZGVmIHBvc2l0aW9uX2F0X2ZyYWN0aW9uKHNlbGYsIGZyYWN0aW9uKToKICAgIHNvdXJjZV9peCwgc291cmNlX2ZyYWMgPSBzZWxmLmdsb2JhbF90b19sb2NhbChmcmFjdGlvbikKICAgIGxhc3QgPSBzZWxmLl9lbmRbMF0gaWYgc2VsZi5fZW5kWzFdIGlzIE5vbmUgZWxzZSBzZWxmLl9lbmRbMF0gKyAxCiAgICBpZiBzb3VyY2VfaXggPT0gbGFzdDoKICAgICAgcmV0dXJuIChzb3VyY2VfaXgsIE5vbmUpCiAgICBlbHNlOgogICAgICByZXR1cm4gKHNvdXJjZV9peCwKICAgICAgICAgICAgICBzZWxmLnN1Yl9yYW5nZV90cmFja2VyKHNvdXJjZV9peCkucG9zaXRpb25fYXRfZnJhY3Rpb24oCiAgICAgICAgICAgICAgICAgIHNvdXJjZV9mcmFjKSkKCiAgZGVmIGZyYWN0aW9uX2NvbnN1bWVkKHNlbGYpOgogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICByZXR1cm4gc2VsZi5sb2NhbF90b19nbG9iYWwoCiAgICAgICAgICBzZWxmLl9jbGFpbWVkX3NvdXJjZV9peCwKICAgICAgICAgIHNlbGYuc3ViX3JhbmdlX3RyYWNrZXIoc2VsZi5fY2xhaW1lZF9zb3VyY2VfaXgpCiAgICAgICAgICAuZnJhY3Rpb25fY29uc3VtZWQoKSkKCiAgZGVmIGxvY2FsX3RvX2dsb2JhbChzZWxmLCBzb3VyY2VfaXgsIHNvdXJjZV9mcmFjKToKICAgIGN3ID0gc2VsZi5fY3VtdWxhdGl2ZV93ZWlnaHRzCiAgICAjIFRoZSBnbG9iYWwgZnJhY3Rpb24gaXMgdGhlIGZyYWN0aW9uIHRvIHNvdXJjZV9peCBwbHVzIHNvbWUgcG9ydGlvbiBvZgogICAgIyB0aGUgd2F5IHRvd2FyZHMgdGhlIG5leHQgc291cmNlLgogICAgcmV0dXJuIGN3W3NvdXJjZV9peF0gKyBzb3VyY2VfZnJhYyAqIChjd1tzb3VyY2VfaXggKyAxXSAtIGN3W3NvdXJjZV9peF0pCgogIGRlZiBnbG9iYWxfdG9fbG9jYWwoc2VsZiwgZnJhYyk6CiAgICBpZiBmcmFjID09IDE6CiAgICAgIGxhc3QgPSBzZWxmLl9lbmRbMF0gaWYgc2VsZi5fZW5kWzFdIGlzIE5vbmUgZWxzZSBzZWxmLl9lbmRbMF0gKyAxCiAgICAgIHJldHVybiAobGFzdCwgTm9uZSkKICAgIGVsc2U6CiAgICAgIGN3ID0gc2VsZi5fY3VtdWxhdGl2ZV93ZWlnaHRzCiAgICAgICMgRmluZCB0aGUgbGFzdCBzb3VyY2UgdGhhdCBzdGFydHMgYXQgb3IgYmVmb3JlIGZyYWMuCiAgICAgIHNvdXJjZV9peCA9IGJpc2VjdC5iaXNlY3QoY3csIGZyYWMpIC0gMQogICAgICAjIFJldHVybiB0aGlzIHNvdXJjZSwgY29udmVydGluZyB3aGF0J3MgbGVmdCBvZiBmcmFjIGFmdGVyIHN0YXJ0aW5nCiAgICAgICMgdGhpcyBzb3VyY2UgaW50byBhIHZhbHVlIGluIFswLjAsIDEuMCkgcmVwcmVzZW50aW5nIGhvdyBmYXIgd2UgYXJlCiAgICAgICMgdG93YXJkcyB0aGUgbmV4dCBzb3VyY2UuCiAgICAgIHJldHVybiAoc291cmNlX2l4LAogICAgICAgICAgICAgIChmcmFjIC0gY3dbc291cmNlX2l4XSkgLyAoY3dbc291cmNlX2l4ICsgMV0gLSBjd1tzb3VyY2VfaXhdKSkKCiAgZGVmIHN1Yl9yYW5nZV90cmFja2VyKHNlbGYsIHNvdXJjZV9peCk6CiAgICBhc3NlcnQgc2VsZi5fc3RhcnRbMF0gPD0gc291cmNlX2l4IDw9IHNlbGYuX2VuZFswXQogICAgaWYgc2VsZi5fcmFuZ2VfdHJhY2tlcnNbc291cmNlX2l4XSBpcyBOb25lOgogICAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgICAgaWYgc2VsZi5fcmFuZ2VfdHJhY2tlcnNbc291cmNlX2l4XSBpcyBOb25lOgogICAgICAgICAgc291cmNlID0gc2VsZi5fc291cmNlX2J1bmRsZXNbc291cmNlX2l4XQogICAgICAgICAgaWYgc291cmNlX2l4ID09IHNlbGYuX3N0YXJ0WzBdIGFuZCBzZWxmLl9zdGFydFsxXSBpcyBub3QgTm9uZToKICAgICAgICAgICAgc3RhcnQgPSBzZWxmLl9zdGFydFsxXQogICAgICAgICAgZWxzZToKICAgICAgICAgICAgc3RhcnQgPSBzb3VyY2Uuc3RhcnRfcG9zaXRpb24KICAgICAgICAgIGlmIHNvdXJjZV9peCA9PSBzZWxmLl9lbmRbMF0gYW5kIHNlbGYuX2VuZFsxXSBpcyBub3QgTm9uZToKICAgICAgICAgICAgc3RvcCA9IHNlbGYuX2VuZFsxXQogICAgICAgICAgZWxzZToKICAgICAgICAgICAgc3RvcCA9IHNvdXJjZS5zdG9wX3Bvc2l0aW9uCiAgICAgICAgICBzZWxmLl9yYW5nZV90cmFja2Vyc1tzb3VyY2VfaXhdID0gc291cmNlLnNvdXJjZS5nZXRfcmFuZ2VfdHJhY2tlcigKICAgICAgICAgICAgICBzdGFydCwgc3RvcCkKICAgIHJldHVybiBzZWxmLl9yYW5nZV90cmFja2Vyc1tzb3VyY2VfaXhdCn1y8oQAAChYHAAAAENvbmNhdFJhbmdlVHJhY2tlci50cnlfc3BsaXRYAwAAAGRlZku5S9eHWCQAAABDb25jYXRSYW5nZVRyYWNrZXIuc3ViX3JhbmdlX3RyYWNrZXJYAwAAAGRlZk0AAU0RAYdYDAAAAENvbmNhdFNvdXJjZVgFAAAAY2xhc3NLIEtgh1gcAAAAQ29uY2F0UmFuZ2VUcmFja2VyLnRyeV9jbGFpbVgDAAAAZGVmS6pLuIdYFAAAAENvbmNhdFNvdXJjZS5zb3VyY2VzWAMAAABkZWZLLksxh1gkAAAAQ29uY2F0UmFuZ2VUcmFja2VyLmZyYWN0aW9uX2NvbnN1bWVkWAMAAABkZWZL5Uvrh1gVAAAAQ29uY2F0U291cmNlLl9faW5pdF9fWAMAAABkZWZLKUsth1gSAAAAQ29uY2F0U291cmNlLnNwbGl0WAMAAABkZWZLNUtEh1geAAAAQ29uY2F0U291cmNlLmdldF9yYW5nZV90cmFja2VyWAMAAABkZWZLRUtMh1ggAAAAQ29uY2F0UmFuZ2VUcmFja2VyLnN0b3BfcG9zaXRpb25YAwAAAGRlZkunS6mHWBoAAABDb25jYXRTb3VyY2UuZXN0aW1hdGVfc2l6ZVgDAAAAZGVmSzJLNIdYEQAAAENvbmNhdFNvdXJjZS5yZWFkWAMAAABkZWZLTUtYh1ghAAAAQ29uY2F0UmFuZ2VUcmFja2VyLnN0YXJ0X3Bvc2l0aW9uWAMAAABkZWZLpEumh1gSAAAAQ29uY2F0UmFuZ2VUcmFja2VyWAUAAABjbGFzc0tiTREBh1giAAAAQ29uY2F0UmFuZ2VUcmFja2VyLmdsb2JhbF90b19sb2NhbFgDAAAAZGVmS/JL/4dYIQAAAENvbmNhdFNvdXJjZS5kZWZhdWx0X291dHB1dF9jb2RlclgDAAAAZGVmS1lLYIdYJwAAAENvbmNhdFJhbmdlVHJhY2tlci5zZXRfY3VycmVudF9wb3NpdGlvblgDAAAAZGVmS9hL2odYJwAAAENvbmNhdFJhbmdlVHJhY2tlci5wb3NpdGlvbl9hdF9mcmFjdGlvblgDAAAAZGVmS9tL5IdYLgAAAENvbmNhdFJhbmdlVHJhY2tlci5fY29tcHV0ZV9jdW11bGF0aXZlX3dlaWdodHNYAwAAAGRlZkuES6OHWCIAAABDb25jYXRSYW5nZVRyYWNrZXIubG9jYWxfdG9fZ2xvYmFsWAMAAABkZWZL7Evxh1gbAAAAQ29uY2F0UmFuZ2VUcmFja2VyLl9faW5pdF9fWAMAAABkZWZLZ0uDh3V9cvOEAAAoWBwAAABDb25jYXRSYW5nZVRyYWNrZXIudHJ5X3NwbGl0ak9rAABYIgAAAENvbmNhdFJhbmdlVHJhY2tlci5nbG9iYWxfdG9fbG9jYWxqT2sAAFgcAAAAQ29uY2F0UmFuZ2VUcmFja2VyLnRyeV9jbGFpbWpPawAAWCIAAABDb25jYXRSYW5nZVRyYWNrZXIubG9jYWxfdG9fZ2xvYmFsak9rAABYEgAAAENvbmNhdFNvdXJjZS5zcGxpdGpPawAAWB4AAABDb25jYXRTb3VyY2UuZ2V0X3JhbmdlX3RyYWNrZXJqT2sAAFgkAAAAQ29uY2F0UmFuZ2VUcmFja2VyLnN1Yl9yYW5nZV90cmFja2Vyak9rAABYIAAAAENvbmNhdFJhbmdlVHJhY2tlci5zdG9wX3Bvc2l0aW9uak9rAABYEQAAAENvbmNhdFNvdXJjZS5yZWFkak9rAABYIQAAAENvbmNhdFJhbmdlVHJhY2tlci5zdGFydF9wb3NpdGlvbmpPawAAWBIAAABDb25jYXRSYW5nZVRyYWNrZXJqT2sAAFgnAAAAQ29uY2F0UmFuZ2VUcmFja2VyLnBvc2l0aW9uX2F0X2ZyYWN0aW9uak9rAABYIQAAAENvbmNhdFNvdXJjZS5kZWZhdWx0X291dHB1dF9jb2RlcmpPawAAWCcAAABDb25jYXRSYW5nZVRyYWNrZXIuc2V0X2N1cnJlbnRfcG9zaXRpb25qT2sAAFgkAAAAQ29uY2F0UmFuZ2VUcmFja2VyLmZyYWN0aW9uX2NvbnN1bWVkak9rAABYDAAAAENvbmNhdFNvdXJjZWpPawAAWBoAAABDb25jYXRTb3VyY2UuZXN0aW1hdGVfc2l6ZWpPawAAdWp9aQAAWBwAAABhcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNlcvSEAACFgXL1hAAAfXL2hAAAYnRVJ2FwYWNoZV9iZWFtLnRvb2xzLmNvZGVyc19taWNyb2JlbmNobWFyayhYkRsAACMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKIiIiQSBtaWNyb2JlbmNobWFyayBmb3IgbWVhc3VyaW5nIHBlcmZvcm1hbmNlIG9mIGNvZGVycy4KClRoaXMgcnVucyBhIHNlcXVlbmNlIG9mIGVuY29kZS1kZWNvZGUgb3BlcmF0aW9ucyBvbiByYW5kb20gaW5wdXRzCnRvIGNvbGxlY3QgcGVyZm9ybWFuY2Ugb2YgdmFyaW91cyBjb2RlcnMuCgpUbyBldmFsdWF0ZSBjb2RlcnMgcGVyZm9ybWFuY2Ugd2UgYXBwcm94aW1hdGUgdGhlIGJlaGF2aW9yCmhvdyB0aGUgY29kZXJzIGFyZSB1c2VkIGluIFBDb2xsZWN0aW9uczogd2UgZW5jb2RlIGFuZCBkZWNvZGUKYSBsaXN0IG9mIGVsZW1lbnRzLiBBbiBlbGVtZW50IGNhbiBiZSBhIHN0cmluZywgYSBsaXN0IG9mIGludGVnZXJzLAphIHdpbmRvd2VkIHZhbHVlLCBvciBhbnkgb3RoZXIgb2JqZWN0IHdlIHdhbnQgYSBjb2RlciB0byBwcm9jZXNzLgoKUnVuIGFzOgogIHB5dGhvbiAtbSBhcGFjaGVfYmVhbS50b29scy5jb2RlcnNfbWljcm9iZW5jaG1hcmsKCiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoKaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCByYW5kb20KaW1wb3J0IHJlCmltcG9ydCBzdHJpbmcKaW1wb3J0IHN5cwoKZnJvbSBwYXN0LmJ1aWx0aW5zIGltcG9ydCB1bmljb2RlCgpmcm9tIGFwYWNoZV9iZWFtLmNvZGVycyBpbXBvcnQgY29kZXJzCmZyb20gYXBhY2hlX2JlYW0udG9vbHMgaW1wb3J0IHV0aWxzCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgd2luZG93CmZyb20gYXBhY2hlX2JlYW0udXRpbHMgaW1wb3J0IHdpbmRvd2VkX3ZhbHVlCgoKZGVmIGNvZGVyX2JlbmNobWFya19mYWN0b3J5KGNvZGVyLCBnZW5lcmF0ZV9mbik6CiAgIiIiQ3JlYXRlcyBhIGJlbmNobWFyayB0aGF0IGVuY29kZXMgYW5kIGRlY29kZXMgYSBsaXN0IG9mIGVsZW1lbnRzLgoKICBBcmdzOgogICAgY29kZXI6IGNvZGVyIHRvIHVzZSB0byBlbmNvZGUgYW4gZWxlbWVudC4KICAgIGdlbmVyYXRlX2ZuOiBhIGNhbGxhYmxlIHRoYXQgZ2VuZXJhdGVzIGFuIGVsZW1lbnQuCiAgIiIiCgogIGNsYXNzIENvZGVyQmVuY2htYXJrKG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgbnVtX2VsZW1lbnRzX3Blcl9iZW5jaG1hcmspOgogICAgICBzZWxmLl9jb2RlciA9IGNvZGVycy5JdGVyYWJsZUNvZGVyKGNvZGVyKQogICAgICBzZWxmLl9saXN0ID0gW2dlbmVyYXRlX2ZuKCkKICAgICAgICAgICAgICAgICAgICBmb3IgXyBpbiByYW5nZShudW1fZWxlbWVudHNfcGVyX2JlbmNobWFyayldCgogICAgZGVmIF9fY2FsbF9fKHNlbGYpOgogICAgICAjIENhbGxpbmcgY29kZXIgb3BlcmF0aW9ucyBvbiBhIHNpbmdsZSBlbGVtZW50IGF0IGEgdGltZSBtYXkgaW5jdXIKICAgICAgIyB1bnJlbGV2YW50IG92ZXJoZWFkLiBUbyBjb21wZW5zYXRlLCB3ZSB1c2UgYSBsaXN0IGVsZW1lbnRzLgogICAgICBfID0gc2VsZi5fY29kZXIuZGVjb2RlKHNlbGYuX2NvZGVyLmVuY29kZShzZWxmLl9saXN0KSkKCiAgQ29kZXJCZW5jaG1hcmsuX19uYW1lX18gPSAiJXMsICVzIiAlICgKICAgICAgZ2VuZXJhdGVfZm4uX19uYW1lX18sIHN0cihjb2RlcikpCgogIHJldHVybiBDb2RlckJlbmNobWFyawoKCmRlZiBzbWFsbF9pbnQoKToKICByZXR1cm4gcmFuZG9tLnJhbmRpbnQoMCwgMTI3KQoKCmRlZiBsYXJnZV9pbnQoKToKICByZXR1cm4gcmFuZG9tLnJhbmRpbnQoc3lzLm1heHNpemUgPj4gMiwgc3lzLm1heHNpemUpCgoKZGVmIHJhbmRvbV9zdHJpbmcobGVuZ3RoKToKICByZXR1cm4gdW5pY29kZSgnJy5qb2luKHJhbmRvbS5jaG9pY2UoCiAgICAgIHN0cmluZy5hc2NpaV9sZXR0ZXJzICsgc3RyaW5nLmRpZ2l0cykgZm9yIF8gaW4gcmFuZ2UobGVuZ3RoKSkpCgoKZGVmIHNtYWxsX3N0cmluZygpOgogIHJldHVybiByYW5kb21fc3RyaW5nKDQpCgoKZGVmIGxhcmdlX3N0cmluZygpOgogIHJldHVybiByYW5kb21fc3RyaW5nKDEwMCkKCgpkZWYgbGlzdF9pbnQoc2l6ZSk6CiAgcmV0dXJuIFtzbWFsbF9pbnQoKSBmb3IgXyBpbiByYW5nZShzaXplKV0KCgpkZWYgZGljdF9pbnRfaW50KHNpemUpOgogIHJldHVybiB7aTogaSBmb3IgaSBpbiBsaXN0X2ludChzaXplKX0KCgpkZWYgc21hbGxfbGlzdCgpOgogIHJldHVybiBsaXN0X2ludCgxMCkKCgpkZWYgbGFyZ2VfbGlzdCgpOgogICMgQm9vbCBpcyB0aGUgbGFzdCBpdGVtIGluIEZhc3RQcmltaXRpdmVDb2RlcnMgYmVmb3JlIHBpY2tsZS4KICByZXR1cm4gW2Jvb2woaykgZm9yIGsgaW4gbGlzdF9pbnQoMTAwMCldCgoKZGVmIHNtYWxsX3R1cGxlKCk6CiAgIyBCZW5jaG1hcmsgYSBjb21tb24gY2FzZSBvZiAyLWVsZW1lbnQgdHVwbGVzLgogIHJldHVybiB0dXBsZShsaXN0X2ludCgyKSkKCgpkZWYgbGFyZ2VfdHVwbGUoKToKICByZXR1cm4gdHVwbGUobGFyZ2VfbGlzdCgpKQoKCmRlZiBzbWFsbF9kaWN0KCk6CiAgcmV0dXJuIHtpOiBpIGZvciBpIGluIHNtYWxsX2xpc3QoKX0KCgpkZWYgbGFyZ2VfZGljdCgpOgogIHJldHVybiB7aTogaSBmb3IgaSBpbiBsYXJnZV9saXN0KCl9CgoKZGVmIGxhcmdlX2l0ZXJhYmxlKCk6CiAgeWllbGQgJ2EnICogY29kZXJzLmNvZGVyX2ltcGwuU2VxdWVuY2VDb2RlckltcGwuX0RFRkFVTFRfQlVGRkVSX1NJWkUKICBmb3IgayBpbiByYW5nZSgxMDAwKToKICAgIHlpZWxkIGsKCgpkZWYgZ2xvYmFsbHlfd2luZG93ZWRfdmFsdWUoKToKICByZXR1cm4gd2luZG93ZWRfdmFsdWUuV2luZG93ZWRWYWx1ZSgKICAgICAgdmFsdWU9c21hbGxfaW50KCksCiAgICAgIHRpbWVzdGFtcD0xMjM0NTY3OCwKICAgICAgd2luZG93cz0od2luZG93Lkdsb2JhbFdpbmRvdygpLCkpCgoKZGVmIHJhbmRvbV93aW5kb3dlZF92YWx1ZShudW1fd2luZG93cyk6CiAgcmV0dXJuIHdpbmRvd2VkX3ZhbHVlLldpbmRvd2VkVmFsdWUoCiAgICAgIHZhbHVlPXNtYWxsX2ludCgpLAogICAgICB0aW1lc3RhbXA9MTIzNDU2NzgsCiAgICAgIHdpbmRvd3M9dHVwbGUoCiAgICAgICAgICB3aW5kb3cuSW50ZXJ2YWxXaW5kb3coaSAqIDEwLCBpICogMTAgKyBzbWFsbF9pbnQoKSkKICAgICAgICAgIGZvciBpIGluIHJhbmdlKG51bV93aW5kb3dzKQogICAgICApKQoKCmRlZiB3dl93aXRoX29uZV93aW5kb3coKToKICByZXR1cm4gcmFuZG9tX3dpbmRvd2VkX3ZhbHVlKG51bV93aW5kb3dzPTEpCgoKZGVmIHd2X3dpdGhfbXVsdGlwbGVfd2luZG93cygpOgogIHJldHVybiByYW5kb21fd2luZG93ZWRfdmFsdWUobnVtX3dpbmRvd3M9MzIpCgoKZGVmIHJ1bl9jb2Rlcl9iZW5jaG1hcmtzKAogICAgbnVtX3J1bnMsIGlucHV0X3NpemUsIHNlZWQsIHZlcmJvc2UsIGZpbHRlcl9yZWdleD0nLionKToKICByYW5kb20uc2VlZChzZWVkKQoKICAjIFRPRE8oQkVBTS00NDQxKTogUGljayBjb2RlcnMgdXNpbmcgdHlwZSBoaW50cywgZm9yIGV4YW1wbGU6CiAgIyB0dXBsZV9jb2RlciA9IHR5cGVjb2RlcnMucmVnaXN0cnkuZ2V0X2NvZGVyKHR5cGVoaW50cy5UdXBsZVtpbnQsIC4uLl0pCiAgYmVuY2htYXJrcyA9IFsKICAgICAgY29kZXJfYmVuY2htYXJrX2ZhY3RvcnkoCiAgICAgICAgICBjb2RlcnMuRmFzdFByaW1pdGl2ZXNDb2RlcigpLCBzbWFsbF9pbnQpLAogICAgICBjb2Rlcl9iZW5jaG1hcmtfZmFjdG9yeSgKICAgICAgICAgIGNvZGVycy5GYXN0UHJpbWl0aXZlc0NvZGVyKCksIGxhcmdlX2ludCksCiAgICAgIGNvZGVyX2JlbmNobWFya19mYWN0b3J5KAogICAgICAgICAgY29kZXJzLkZhc3RQcmltaXRpdmVzQ29kZXIoKSwgc21hbGxfc3RyaW5nKSwKICAgICAgY29kZXJfYmVuY2htYXJrX2ZhY3RvcnkoCiAgICAgICAgICBjb2RlcnMuRmFzdFByaW1pdGl2ZXNDb2RlcigpLCBsYXJnZV9zdHJpbmcpLAogICAgICBjb2Rlcl9iZW5jaG1hcmtfZmFjdG9yeSgKICAgICAgICAgIGNvZGVycy5GYXN0UHJpbWl0aXZlc0NvZGVyKCksCiAgICAgICAgICBzbWFsbF9saXN0KSwKICAgICAgY29kZXJfYmVuY2htYXJrX2ZhY3RvcnkoCiAgICAgICAgICBjb2RlcnMuSXRlcmFibGVDb2Rlcihjb2RlcnMuRmFzdFByaW1pdGl2ZXNDb2RlcigpKSwKICAgICAgICAgIHNtYWxsX2xpc3QpLAogICAgICBjb2Rlcl9iZW5jaG1hcmtfZmFjdG9yeSgKICAgICAgICAgIGNvZGVycy5GYXN0UHJpbWl0aXZlc0NvZGVyKCksCiAgICAgICAgICBsYXJnZV9saXN0KSwKICAgICAgY29kZXJfYmVuY2htYXJrX2ZhY3RvcnkoCiAgICAgICAgICBjb2RlcnMuSXRlcmFibGVDb2Rlcihjb2RlcnMuRmFzdFByaW1pdGl2ZXNDb2RlcigpKSwKICAgICAgICAgIGxhcmdlX2xpc3QpLAogICAgICBjb2Rlcl9iZW5jaG1hcmtfZmFjdG9yeSgKICAgICAgICAgIGNvZGVycy5JdGVyYWJsZUNvZGVyKGNvZGVycy5GYXN0UHJpbWl0aXZlc0NvZGVyKCkpLAogICAgICAgICAgbGFyZ2VfaXRlcmFibGUpLAogICAgICBjb2Rlcl9iZW5jaG1hcmtfZmFjdG9yeSgKICAgICAgICAgIGNvZGVycy5GYXN0UHJpbWl0aXZlc0NvZGVyKCksCiAgICAgICAgICBzbWFsbF90dXBsZSksCiAgICAgIGNvZGVyX2JlbmNobWFya19mYWN0b3J5KAogICAgICAgICAgY29kZXJzLkZhc3RQcmltaXRpdmVzQ29kZXIoKSwKICAgICAgICAgIGxhcmdlX3R1cGxlKSwKICAgICAgY29kZXJfYmVuY2htYXJrX2ZhY3RvcnkoCiAgICAgICAgICBjb2RlcnMuRmFzdFByaW1pdGl2ZXNDb2RlcigpLAogICAgICAgICAgc21hbGxfZGljdCksCiAgICAgIGNvZGVyX2JlbmNobWFya19mYWN0b3J5KAogICAgICAgICAgY29kZXJzLkZhc3RQcmltaXRpdmVzQ29kZXIoKSwKICAgICAgICAgIGxhcmdlX2RpY3QpLAogICAgICBjb2Rlcl9iZW5jaG1hcmtfZmFjdG9yeSgKICAgICAgICAgIGNvZGVycy5XaW5kb3dlZFZhbHVlQ29kZXIoY29kZXJzLkZhc3RQcmltaXRpdmVzQ29kZXIoKSksCiAgICAgICAgICB3dl93aXRoX29uZV93aW5kb3cpLAogICAgICBjb2Rlcl9iZW5jaG1hcmtfZmFjdG9yeSgKICAgICAgICAgIGNvZGVycy5XaW5kb3dlZFZhbHVlQ29kZXIoY29kZXJzLkZhc3RQcmltaXRpdmVzQ29kZXIoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZXJzLkludGVydmFsV2luZG93Q29kZXIoKSksCiAgICAgICAgICB3dl93aXRoX211bHRpcGxlX3dpbmRvd3MpLAogICAgICBjb2Rlcl9iZW5jaG1hcmtfZmFjdG9yeSgKICAgICAgICAgIGNvZGVycy5XaW5kb3dlZFZhbHVlQ29kZXIoY29kZXJzLkZhc3RQcmltaXRpdmVzQ29kZXIoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZXJzLkdsb2JhbFdpbmRvd0NvZGVyKCkpLAogICAgICAgICAgZ2xvYmFsbHlfd2luZG93ZWRfdmFsdWUpLAogICAgICBjb2Rlcl9iZW5jaG1hcmtfZmFjdG9yeSgKICAgICAgICAgIGNvZGVycy5MZW5ndGhQcmVmaXhDb2Rlcihjb2RlcnMuRmFzdFByaW1pdGl2ZXNDb2RlcigpKSwKICAgICAgICAgIHNtYWxsX2ludCkKICBdCgogIHN1aXRlID0gW3V0aWxzLkJlbmNobWFya0NvbmZpZyhiLCBpbnB1dF9zaXplLCBudW1fcnVucykgZm9yIGIgaW4gYmVuY2htYXJrcwogICAgICAgICAgIGlmIHJlLnNlYXJjaChmaWx0ZXJfcmVnZXgsIGIuX19uYW1lX18sIGZsYWdzPXJlLkkpXQogIHV0aWxzLnJ1bl9iZW5jaG1hcmtzKHN1aXRlLCB2ZXJib3NlPXZlcmJvc2UpCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKCiAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQogIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZmlsdGVyJywgZGVmYXVsdD0nLionKQogIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tbnVtX3J1bnMnLCBkZWZhdWx0PTIwLCB0eXBlPWludCkKICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW51bV9lbGVtZW50c19wZXJfYmVuY2htYXJrJywgZGVmYXVsdD0xMDAwLCB0eXBlPWludCkKICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXNlZWQnLCBkZWZhdWx0PTQyLCB0eXBlPWludCkKICBvcHRpb25zID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQoKICB1dGlscy5jaGVja19jb21waWxlZCgiYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVyX2ltcGwiKQoKICBudW1fcnVucyA9IDIwCiAgbnVtX2VsZW1lbnRzX3Blcl9iZW5jaG1hcmsgPSAxMDAwCiAgc2VlZCA9IDQyICAjIEZpeCB0aGUgc2VlZCBmb3IgYmV0dGVyIGNvbnNpc3RlbmN5CgogIHJ1bl9jb2Rlcl9iZW5jaG1hcmtzKAogICAgICBvcHRpb25zLm51bV9ydW5zLCBvcHRpb25zLm51bV9lbGVtZW50c19wZXJfYmVuY2htYXJrLCBvcHRpb25zLnNlZWQsCiAgICAgIHZlcmJvc2U9VHJ1ZSwgZmlsdGVyX3JlZ2V4PW9wdGlvbnMuZmlsdGVyKQp9cveEAAAoWAoAAABzbWFsbF9kaWN0WAMAAABkZWZLeEt6h1gXAAAAZ2xvYmFsbHlfd2luZG93ZWRfdmFsdWVYAwAAAGRlZkuGS4uHWA0AAAByYW5kb21fc3RyaW5nWAMAAABkZWZLUUtUh1gMAAAAc21hbGxfc3RyaW5nWAMAAABkZWZLVktYh1gUAAAAcnVuX2NvZGVyX2JlbmNobWFya3NYAwAAAGRlZkufS9yHWBUAAAByYW5kb21fd2luZG93ZWRfdmFsdWVYAwAAAGRlZkuNS5WHWAoAAABsYXJnZV9kaWN0WAMAAABkZWZLfEt+h1gIAAAAbGlzdF9pbnRYAwAAAGRlZkteS2CHWAoAAABzbWFsbF9saXN0WAMAAABkZWZLZktoh1gKAAAAbGFyZ2VfbGlzdFgDAAAAZGVmS2pLbYdYJgAAAGNvZGVyX2JlbmNobWFya19mYWN0b3J5LkNvZGVyQmVuY2htYXJrWAUAAABjbGFzc0s4S0KHWAkAAABsYXJnZV9pbnRYAwAAAGRlZktNS0+HWBcAAABjb2Rlcl9iZW5jaG1hcmtfZmFjdG9yeVgDAAAAZGVmSzBLR4dYCQAAAHNtYWxsX2ludFgDAAAAZGVmS0lLS4dYCwAAAHNtYWxsX3R1cGxlWAMAAABkZWZLb0tyh1gSAAAAd3Zfd2l0aF9vbmVfd2luZG93WAMAAABkZWZLl0uZh1gLAAAAbGFyZ2VfdHVwbGVYAwAAAGRlZkt0S3aHWAwAAABkaWN0X2ludF9pbnRYAwAAAGRlZktiS2SHWAwAAABsYXJnZV9zdHJpbmdYAwAAAGRlZktaS1yHWC8AAABjb2Rlcl9iZW5jaG1hcmtfZmFjdG9yeS5Db2RlckJlbmNobWFyay5fX2NhbGxfX1gDAAAAZGVmSz5LQodYGAAAAHd2X3dpdGhfbXVsdGlwbGVfd2luZG93c1gDAAAAZGVmS5tLnYdYLwAAAGNvZGVyX2JlbmNobWFya19mYWN0b3J5LkNvZGVyQmVuY2htYXJrLl9faW5pdF9fWAMAAABkZWZLOUs9h1gOAAAAbGFyZ2VfaXRlcmFibGVYAwAAAGRlZkuAS4SHdX1y+IQAAChYCgAAAGxhcmdlX2xpc3RqhmIAAFgLAAAAbGFyZ2VfdHVwbGVqhmIAAFgXAAAAZ2xvYmFsbHlfd2luZG93ZWRfdmFsdWVqhmIAAFgJAAAAbGFyZ2VfaW50aoZiAABYDAAAAGRpY3RfaW50X2ludGqGYgAAWA0AAAByYW5kb21fc3RyaW5naoZiAABYCgAAAHNtYWxsX2RpY3RqhmIAAFgXAAAAY29kZXJfYmVuY2htYXJrX2ZhY3RvcnlqhmIAAFgJAAAAc21hbGxfaW50aoZiAABYEgAAAHd2X3dpdGhfb25lX3dpbmRvd2qGYgAAWAsAAABzbWFsbF90dXBsZWqGYgAAWAgAAABsaXN0X2ludGqGYgAAWAwAAABzbWFsbF9zdHJpbmdqhmIAAFgUAAAAcnVuX2NvZGVyX2JlbmNobWFya3NqhmIAAFgVAAAAcmFuZG9tX3dpbmRvd2VkX3ZhbHVlaoZiAABYGAAAAHd2X3dpdGhfbXVsdGlwbGVfd2luZG93c2qGYgAAWA4AAABsYXJnZV9pdGVyYWJsZWqGYgAAWAoAAABzbWFsbF9saXN0aoZiAABYCgAAAGxhcmdlX2RpY3RqhmIAAFgMAAAAbGFyZ2Vfc3RyaW5naoZiAAB1an1pAABYJwAAAGFwYWNoZV9iZWFtLnRvb2xzLmNvZGVyc19taWNyb2JlbmNobWFya3L5hAAAhYFy+oQAAH1y+4QAAGJ0VR5hcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2UoWMhDAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkEgZnJhbWV3b3JrIGZvciBkZXZlbG9waW5nIHNvdXJjZXMgZm9yIG5ldyBmaWxlIHR5cGVzLgoKVG8gY3JlYXRlIGEgc291cmNlIGZvciBhIG5ldyBmaWxlIHR5cGUgYSBzdWItY2xhc3Mgb2YgOmNsYXNzOmBGaWxlQmFzZWRTb3VyY2VgCnNob3VsZCBiZSBjcmVhdGVkLiBTdWItY2xhc3NlcyBvZiA6Y2xhc3M6YEZpbGVCYXNlZFNvdXJjZWAgbXVzdCBpbXBsZW1lbnQgdGhlCm1ldGhvZCA6bWV0aDpgRmlsZUJhc2VkU291cmNlLnJlYWRfcmVjb3JkcygpYC4gUGxlYXNlIHJlYWQgdGhlIGRvY3VtZW50YXRpb24gb2YKdGhhdCBtZXRob2QgZm9yIG1vcmUgZGV0YWlscy4KCkZvciBhbiBleGFtcGxlIGltcGxlbWVudGF0aW9uIG9mIDpjbGFzczpgRmlsZUJhc2VkU291cmNlYCBzZWUKOmNsYXNzOmB+YXBhY2hlX2JlYW0uaW8uX0F2cm9Tb3VyY2VgLgoiIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0Cgpmcm9tIHBhc3QuYnVpbHRpbnMgaW1wb3J0IGxvbmcKZnJvbSBwYXN0LmJ1aWx0aW5zIGltcG9ydCB1bmljb2RlCgpmcm9tIGFwYWNoZV9iZWFtLmludGVybmFsIGltcG9ydCBwaWNrbGVyCmZyb20gYXBhY2hlX2JlYW0uaW8gaW1wb3J0IGNvbmNhdF9zb3VyY2UKZnJvbSBhcGFjaGVfYmVhbS5pbyBpbXBvcnQgaW9iYXNlCmZyb20gYXBhY2hlX2JlYW0uaW8gaW1wb3J0IHJhbmdlX3RyYWNrZXJzCmZyb20gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbSBpbXBvcnQgQ29tcHJlc3Npb25UeXBlcwpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zIGltcG9ydCBGaWxlU3lzdGVtcwpmcm9tIGFwYWNoZV9iZWFtLmlvLnJlc3RyaWN0aW9uX3RyYWNrZXJzIGltcG9ydCBPZmZzZXRSYW5nZQpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIgaW1wb3J0IFN0YXRpY1ZhbHVlUHJvdmlkZXIKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyIGltcG9ydCBWYWx1ZVByb3ZpZGVyCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlciBpbXBvcnQgY2hlY2tfYWNjZXNzaWJsZQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSBpbXBvcnQgRG9Gbgpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSBpbXBvcnQgUGFyRG8KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgaW1wb3J0IFBUcmFuc2Zvcm0KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXkgaW1wb3J0IERpc3BsYXlEYXRhSXRlbQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbCBpbXBvcnQgUmVzaHVmZmxlCgpNQVhfTlVNX1RIUkVBRFNfRk9SX1NJWkVfRVNUSU1BVElPTiA9IDI1CgpfX2FsbF9fID0gWydGaWxlQmFzZWRTb3VyY2UnXQoKCmNsYXNzIEZpbGVCYXNlZFNvdXJjZShpb2Jhc2UuQm91bmRlZFNvdXJjZSk6CiAgIiIiQSA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5pby5pb2Jhc2UuQm91bmRlZFNvdXJjZWAgZm9yIHJlYWRpbmcgYSBmaWxlIGdsb2Igb2YKICBhIGdpdmVuIHR5cGUuIiIiCgogIE1JTl9OVU1CRVJfT0ZfRklMRVNfVE9fU1RBVCA9IDEwMAogIE1JTl9GUkFDVElPTl9PRl9GSUxFU19UT19TVEFUID0gMC4wMQoKICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgZmlsZV9wYXR0ZXJuLAogICAgICAgICAgICAgICBtaW5fYnVuZGxlX3NpemU9MCwKICAgICAgICAgICAgICAgY29tcHJlc3Npb25fdHlwZT1Db21wcmVzc2lvblR5cGVzLkFVVE8sCiAgICAgICAgICAgICAgIHNwbGl0dGFibGU9VHJ1ZSwKICAgICAgICAgICAgICAgdmFsaWRhdGU9VHJ1ZSk6CiAgICAiIiJJbml0aWFsaXplcyA6Y2xhc3M6YEZpbGVCYXNlZFNvdXJjZWAuCgogICAgQXJnczoKICAgICAgZmlsZV9wYXR0ZXJuIChzdHIpOiB0aGUgZmlsZSBnbG9iIHRvIHJlYWQgYSBzdHJpbmcgb3IgYQogICAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIuVmFsdWVQcm92aWRlcmAKICAgICAgICAocGxhY2Vob2xkZXIgdG8gaW5qZWN0IGEgcnVudGltZSB2YWx1ZSkuCiAgICAgIG1pbl9idW5kbGVfc2l6ZSAoc3RyKTogbWluaW11bSBzaXplIG9mIGJ1bmRsZXMgdGhhdCBzaG91bGQgYmUgZ2VuZXJhdGVkCiAgICAgICAgd2hlbiBwZXJmb3JtaW5nIGluaXRpYWwgc3BsaXR0aW5nIG9uIHRoaXMgc291cmNlLgogICAgICBjb21wcmVzc2lvbl90eXBlIChzdHIpOiBVc2VkIHRvIGhhbmRsZSBjb21wcmVzc2VkIG91dHB1dCBmaWxlcy4KICAgICAgICBUeXBpY2FsIHZhbHVlIGlzIDphdHRyOmBDb21wcmVzc2lvblR5cGVzLkFVVE8KICAgICAgICA8YXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5Db21wcmVzc2lvblR5cGVzLkFVVE8+YCwKICAgICAgICBpbiB3aGljaCBjYXNlIHRoZSBmaW5hbCBmaWxlIHBhdGgncyBleHRlbnNpb24gd2lsbCBiZSB1c2VkIHRvIGRldGVjdAogICAgICAgIHRoZSBjb21wcmVzc2lvbi4KICAgICAgc3BsaXR0YWJsZSAoYm9vbCk6IHdoZXRoZXIgOmNsYXNzOmBGaWxlQmFzZWRTb3VyY2VgIHNob3VsZCB0cnkgdG8KICAgICAgICBsb2dpY2FsbHkgc3BsaXQgYSBzaW5nbGUgZmlsZSBpbnRvIGRhdGEgcmFuZ2VzIHNvIHRoYXQgZGlmZmVyZW50IHBhcnRzCiAgICAgICAgb2YgdGhlIHNhbWUgZmlsZSBjYW4gYmUgcmVhZCBpbiBwYXJhbGxlbC4gSWYgc2V0IHRvIDpkYXRhOmBGYWxzZWAsCiAgICAgICAgOmNsYXNzOmBGaWxlQmFzZWRTb3VyY2VgIHdpbGwgcHJldmVudCBib3RoIGluaXRpYWwgYW5kIGR5bmFtaWMgc3BsaXR0aW5nCiAgICAgICAgb2Ygc291cmNlcyBmb3Igc2luZ2xlIGZpbGVzLiBGaWxlIHBhdHRlcm5zIHRoYXQgcmVwcmVzZW50IG11bHRpcGxlIGZpbGVzCiAgICAgICAgbWF5IHN0aWxsIGdldCBzcGxpdCBpbnRvIHNvdXJjZXMgZm9yIGluZGl2aWR1YWwgZmlsZXMuIEV2ZW4gaWYgc2V0IHRvCiAgICAgICAgOmRhdGE6YFRydWVgIGJ5IHRoZSB1c2VyLCA6Y2xhc3M6YEZpbGVCYXNlZFNvdXJjZWAgbWF5IGNob29zZSB0byBub3QKICAgICAgICBzcGxpdCB0aGUgZmlsZSwgZm9yIGV4YW1wbGUsIGZvciBjb21wcmVzc2VkIGZpbGVzIHdoZXJlIGN1cnJlbnRseSBpdCBpcwogICAgICAgIG5vdCBwb3NzaWJsZSB0byBlZmZpY2llbnRseSByZWFkIGEgZGF0YSByYW5nZSB3aXRob3V0IGRlY29tcHJlc3NpbmcgdGhlCiAgICAgICAgd2hvbGUgZmlsZS4KICAgICAgdmFsaWRhdGUgKGJvb2wpOiBCb29sZWFuIGZsYWcgdG8gdmVyaWZ5IHRoYXQgdGhlIGZpbGVzIGV4aXN0IGR1cmluZyB0aGUKICAgICAgICBwaXBlbGluZSBjcmVhdGlvbiB0aW1lLgoKICAgIFJhaXNlczoKICAgICAgfmV4Y2VwdGlvbnMuVHlwZUVycm9yOiB3aGVuICoqY29tcHJlc3Npb25fdHlwZSoqIGlzIG5vdCB2YWxpZCBvciBpZgogICAgICAgICoqZmlsZV9wYXR0ZXJuKiogaXMgbm90IGEgOmNsYXNzOmBzdHJgIG9yIGEKICAgICAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyLlZhbHVlUHJvdmlkZXJgLgogICAgICB+ZXhjZXB0aW9ucy5WYWx1ZUVycm9yOiB3aGVuIGNvbXByZXNzaW9uIGFuZCBzcGxpdHRhYmxlIGZpbGVzIGFyZQogICAgICAgIHNwZWNpZmllZC4KICAgICAgfmV4Y2VwdGlvbnMuSU9FcnJvcjogd2hlbiB0aGUgZmlsZSBwYXR0ZXJuIHNwZWNpZmllZCB5aWVsZHMgYW4gZW1wdHkKICAgICAgICByZXN1bHQuCiAgICAiIiIKCiAgICBpZiBub3QgaXNpbnN0YW5jZShmaWxlX3BhdHRlcm4sICgoc3RyLCB1bmljb2RlKSwgVmFsdWVQcm92aWRlcikpOgogICAgICByYWlzZSBUeXBlRXJyb3IoJyVzOiBmaWxlX3BhdHRlcm4gbXVzdCBiZSBvZiB0eXBlIHN0cmluZycKICAgICAgICAgICAgICAgICAgICAgICcgb3IgVmFsdWVQcm92aWRlcjsgZ290ICVyIGluc3RlYWQnCiAgICAgICAgICAgICAgICAgICAgICAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgZmlsZV9wYXR0ZXJuKSkKCiAgICBpZiBpc2luc3RhbmNlKGZpbGVfcGF0dGVybiwgKHN0ciwgdW5pY29kZSkpOgogICAgICBmaWxlX3BhdHRlcm4gPSBTdGF0aWNWYWx1ZVByb3ZpZGVyKHN0ciwgZmlsZV9wYXR0ZXJuKQogICAgc2VsZi5fcGF0dGVybiA9IGZpbGVfcGF0dGVybgoKICAgIHNlbGYuX2NvbmNhdF9zb3VyY2UgPSBOb25lCiAgICBzZWxmLl9taW5fYnVuZGxlX3NpemUgPSBtaW5fYnVuZGxlX3NpemUKICAgIGlmIG5vdCBDb21wcmVzc2lvblR5cGVzLmlzX3ZhbGlkX2NvbXByZXNzaW9uX3R5cGUoY29tcHJlc3Npb25fdHlwZSk6CiAgICAgIHJhaXNlIFR5cGVFcnJvcignY29tcHJlc3Npb25fdHlwZSBtdXN0IGJlIENvbXByZXNzaW9uVHlwZSBvYmplY3QgYnV0ICcKICAgICAgICAgICAgICAgICAgICAgICd3YXMgJXMnICUgdHlwZShjb21wcmVzc2lvbl90eXBlKSkKICAgIHNlbGYuX2NvbXByZXNzaW9uX3R5cGUgPSBjb21wcmVzc2lvbl90eXBlCiAgICBzZWxmLl9zcGxpdHRhYmxlID0gc3BsaXR0YWJsZQogICAgaWYgdmFsaWRhdGUgYW5kIGZpbGVfcGF0dGVybi5pc19hY2Nlc3NpYmxlKCk6CiAgICAgIHNlbGYuX3ZhbGlkYXRlKCkKCiAgZGVmIGRpc3BsYXlfZGF0YShzZWxmKToKICAgIHJldHVybiB7J2ZpbGVfcGF0dGVybic6IERpc3BsYXlEYXRhSXRlbShzdHIoc2VsZi5fcGF0dGVybiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9IkZpbGUgUGF0dGVybiIpLAogICAgICAgICAgICAnY29tcHJlc3Npb24nOiBEaXNwbGF5RGF0YUl0ZW0oc3RyKHNlbGYuX2NvbXByZXNzaW9uX3R5cGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9J0NvbXByZXNzaW9uIFR5cGUnKX0KCiAgQGNoZWNrX2FjY2Vzc2libGUoWydfcGF0dGVybiddKQogIGRlZiBfZ2V0X2NvbmNhdF9zb3VyY2Uoc2VsZik6CiAgICBpZiBzZWxmLl9jb25jYXRfc291cmNlIGlzIE5vbmU6CiAgICAgIHBhdHRlcm4gPSBzZWxmLl9wYXR0ZXJuLmdldCgpCgogICAgICBzaW5nbGVfZmlsZV9zb3VyY2VzID0gW10KICAgICAgbWF0Y2hfcmVzdWx0ID0gRmlsZVN5c3RlbXMubWF0Y2goW3BhdHRlcm5dKVswXQogICAgICBmaWxlc19tZXRhZGF0YSA9IG1hdGNoX3Jlc3VsdC5tZXRhZGF0YV9saXN0CgogICAgICAjIFdlIGNyZWF0ZSBhIHJlZmVyZW5jZSBmb3IgRmlsZUJhc2VkU291cmNlIHRoYXQgd2lsbCBiZSBzZXJpYWxpemVkIGFsb25nCiAgICAgICMgd2l0aCBlYWNoIF9TaW5nbGVGaWxlU291cmNlLiBUbyBwcmV2ZW50IHRoaXMgRmlsZUJhc2VkU291cmNlIGZyb20gaGF2aW5nCiAgICAgICMgYSByZWZlcmVuY2UgdG8gQ29uY2F0U291cmNlIChyZXN1bHRpbmcgaW4gcXVhZHJhdGljIHNwYWNlIGNvbXBsZXhpdHkpCiAgICAgICMgd2UgY2xvbmUgaXQgaGVyZS4KICAgICAgZmlsZV9iYXNlZF9zb3VyY2VfcmVmID0gcGlja2xlci5sb2FkcyhwaWNrbGVyLmR1bXBzKHNlbGYpKQoKICAgICAgZm9yIGZpbGVfbWV0YWRhdGEgaW4gZmlsZXNfbWV0YWRhdGE6CiAgICAgICAgZmlsZV9uYW1lID0gZmlsZV9tZXRhZGF0YS5wYXRoCiAgICAgICAgZmlsZV9zaXplID0gZmlsZV9tZXRhZGF0YS5zaXplX2luX2J5dGVzCiAgICAgICAgaWYgZmlsZV9zaXplID09IDA6CiAgICAgICAgICBjb250aW51ZSAgIyBJZ25vcmluZyBlbXB0eSBmaWxlLgoKICAgICAgICAjIFdlIGRldGVybWluZSBzcGxpdHRhYmlsaXR5IG9mIHRoaXMgc3BlY2lmaWMgZmlsZS4KICAgICAgICBzcGxpdHRhYmxlID0gKAogICAgICAgICAgICBzZWxmLnNwbGl0dGFibGUgYW5kCiAgICAgICAgICAgIF9kZXRlcm1pbmVfc3BsaXR0YWJpbGl0eV9mcm9tX2NvbXByZXNzaW9uX3R5cGUoCiAgICAgICAgICAgICAgICBmaWxlX25hbWUsIHNlbGYuX2NvbXByZXNzaW9uX3R5cGUpKQoKICAgICAgICBzaW5nbGVfZmlsZV9zb3VyY2UgPSBfU2luZ2xlRmlsZVNvdXJjZSgKICAgICAgICAgICAgZmlsZV9iYXNlZF9zb3VyY2VfcmVmLCBmaWxlX25hbWUsCiAgICAgICAgICAgIDAsCiAgICAgICAgICAgIGZpbGVfc2l6ZSwKICAgICAgICAgICAgbWluX2J1bmRsZV9zaXplPXNlbGYuX21pbl9idW5kbGVfc2l6ZSwKICAgICAgICAgICAgc3BsaXR0YWJsZT1zcGxpdHRhYmxlKQogICAgICAgIHNpbmdsZV9maWxlX3NvdXJjZXMuYXBwZW5kKHNpbmdsZV9maWxlX3NvdXJjZSkKICAgICAgc2VsZi5fY29uY2F0X3NvdXJjZSA9IGNvbmNhdF9zb3VyY2UuQ29uY2F0U291cmNlKHNpbmdsZV9maWxlX3NvdXJjZXMpCiAgICByZXR1cm4gc2VsZi5fY29uY2F0X3NvdXJjZQoKICBkZWYgb3Blbl9maWxlKHNlbGYsIGZpbGVfbmFtZSk6CiAgICByZXR1cm4gRmlsZVN5c3RlbXMub3BlbigKICAgICAgICBmaWxlX25hbWUsICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICAgIGNvbXByZXNzaW9uX3R5cGU9c2VsZi5fY29tcHJlc3Npb25fdHlwZSkKCiAgQGNoZWNrX2FjY2Vzc2libGUoWydfcGF0dGVybiddKQogIGRlZiBfdmFsaWRhdGUoc2VsZik6CiAgICAiIiJWYWxpZGF0ZSBpZiB0aGVyZSBhcmUgYWN0dWFsIGZpbGVzIGluIHRoZSBzcGVjaWZpZWQgZ2xvYiBwYXR0ZXJuCiAgICAiIiIKICAgIHBhdHRlcm4gPSBzZWxmLl9wYXR0ZXJuLmdldCgpCgogICAgIyBMaW1pdCB0aGUgcmVzcG9uc2VzIGFzIHdlIG9ubHkgd2FudCB0byBjaGVjayBpZiBzb21ldGhpbmcgZXhpc3RzCiAgICBtYXRjaF9yZXN1bHQgPSBGaWxlU3lzdGVtcy5tYXRjaChbcGF0dGVybl0sIGxpbWl0cz1bMV0pWzBdCiAgICBpZiBsZW4obWF0Y2hfcmVzdWx0Lm1ldGFkYXRhX2xpc3QpIDw9IDA6CiAgICAgIHJhaXNlIElPRXJyb3IoCiAgICAgICAgICAnTm8gZmlsZXMgZm91bmQgYmFzZWQgb24gdGhlIGZpbGUgcGF0dGVybiAlcycgJSBwYXR0ZXJuKQoKICBkZWYgc3BsaXQoCiAgICAgIHNlbGYsIGRlc2lyZWRfYnVuZGxlX3NpemU9Tm9uZSwgc3RhcnRfcG9zaXRpb249Tm9uZSwgc3RvcF9wb3NpdGlvbj1Ob25lKToKICAgIHJldHVybiBzZWxmLl9nZXRfY29uY2F0X3NvdXJjZSgpLnNwbGl0KAogICAgICAgIGRlc2lyZWRfYnVuZGxlX3NpemU9ZGVzaXJlZF9idW5kbGVfc2l6ZSwKICAgICAgICBzdGFydF9wb3NpdGlvbj1zdGFydF9wb3NpdGlvbiwKICAgICAgICBzdG9wX3Bvc2l0aW9uPXN0b3BfcG9zaXRpb24pCgogIEBjaGVja19hY2Nlc3NpYmxlKFsnX3BhdHRlcm4nXSkKICBkZWYgZXN0aW1hdGVfc2l6ZShzZWxmKToKICAgIHBhdHRlcm4gPSBzZWxmLl9wYXR0ZXJuLmdldCgpCiAgICBtYXRjaF9yZXN1bHQgPSBGaWxlU3lzdGVtcy5tYXRjaChbcGF0dGVybl0pWzBdCiAgICByZXR1cm4gc3VtKFtmLnNpemVfaW5fYnl0ZXMgZm9yIGYgaW4gbWF0Y2hfcmVzdWx0Lm1ldGFkYXRhX2xpc3RdKQoKICBkZWYgcmVhZChzZWxmLCByYW5nZV90cmFja2VyKToKICAgIHJldHVybiBzZWxmLl9nZXRfY29uY2F0X3NvdXJjZSgpLnJlYWQocmFuZ2VfdHJhY2tlcikKCiAgZGVmIGdldF9yYW5nZV90cmFja2VyKHNlbGYsIHN0YXJ0X3Bvc2l0aW9uLCBzdG9wX3Bvc2l0aW9uKToKICAgIHJldHVybiBzZWxmLl9nZXRfY29uY2F0X3NvdXJjZSgpLmdldF9yYW5nZV90cmFja2VyKHN0YXJ0X3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcF9wb3NpdGlvbikKCiAgZGVmIHJlYWRfcmVjb3JkcyhzZWxmLCBmaWxlX25hbWUsIG9mZnNldF9yYW5nZV90cmFja2VyKToKICAgICIiIlJldHVybnMgYSBnZW5lcmF0b3Igb2YgcmVjb3JkcyBjcmVhdGVkIGJ5IHJlYWRpbmcgZmlsZSAnZmlsZV9uYW1lJy4KCiAgICBBcmdzOgogICAgICBmaWxlX25hbWU6IGEgYGBzdHJpbmdgYCB0aGF0IGdpdmVzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIGJlIHJlYWQuIE1ldGhvZAogICAgICAgICAgICAgICAgIGBgRmlsZUJhc2VkU291cmNlLm9wZW5fZmlsZSgpYGAgbXVzdCBiZSB1c2VkIHRvIG9wZW4gdGhlIGZpbGUKICAgICAgICAgICAgICAgICBhbmQgY3JlYXRlIGEgc2Vla2FibGUgZmlsZSBvYmplY3QuCiAgICAgIG9mZnNldF9yYW5nZV90cmFja2VyOiBhIG9iamVjdCBvZiB0eXBlIGBgT2Zmc2V0UmFuZ2VUcmFja2VyYGAuIFRoaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMgdGhlIGJ5dGUgcmFuZ2Ugb2YgdGhlIGZpbGUgdGhhdCBzaG91bGQgYmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWQuIFNlZSBkb2N1bWVudGF0aW9uIGluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYGlvYmFzZS5Cb3VuZGVkU291cmNlLnJlYWQoKWBgIGZvciBtb3JlIGluZm9ybWF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiByZWFkaW5nIHJlY29yZHMgd2hpbGUgY29tcGx5aW5nIHRvIHRoZSByYW5nZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCBieSBhIGdpdmVuIGBgUmFuZ2VUcmFja2VyYGAuCgogICAgUmV0dXJuczoKICAgICAgYW4gaXRlcmF0b3IgdGhhdCBnaXZlcyB0aGUgcmVjb3JkcyByZWFkIGZyb20gdGhlIGdpdmVuIGZpbGUuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgQHByb3BlcnR5CiAgZGVmIHNwbGl0dGFibGUoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fc3BsaXR0YWJsZQoKCmRlZiBfZGV0ZXJtaW5lX3NwbGl0dGFiaWxpdHlfZnJvbV9jb21wcmVzc2lvbl90eXBlKAogICAgZmlsZV9wYXRoLCBjb21wcmVzc2lvbl90eXBlKToKICBpZiBjb21wcmVzc2lvbl90eXBlID09IENvbXByZXNzaW9uVHlwZXMuQVVUTzoKICAgIGNvbXByZXNzaW9uX3R5cGUgPSBDb21wcmVzc2lvblR5cGVzLmRldGVjdF9jb21wcmVzc2lvbl90eXBlKGZpbGVfcGF0aCkKCiAgcmV0dXJuIGNvbXByZXNzaW9uX3R5cGUgPT0gQ29tcHJlc3Npb25UeXBlcy5VTkNPTVBSRVNTRUQKCgpjbGFzcyBfU2luZ2xlRmlsZVNvdXJjZShpb2Jhc2UuQm91bmRlZFNvdXJjZSk6CiAgIiIiRGVub3RlcyBhIHNvdXJjZSBmb3IgYSBzcGVjaWZpYyBmaWxlIHR5cGUuIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlX2Jhc2VkX3NvdXJjZSwgZmlsZV9uYW1lLCBzdGFydF9vZmZzZXQsIHN0b3Bfb2Zmc2V0LAogICAgICAgICAgICAgICBtaW5fYnVuZGxlX3NpemU9MCwgc3BsaXR0YWJsZT1UcnVlKToKICAgIGlmIG5vdCBpc2luc3RhbmNlKHN0YXJ0X29mZnNldCwgKGludCwgbG9uZykpOgogICAgICByYWlzZSBUeXBlRXJyb3IoCiAgICAgICAgICAnc3RhcnRfb2Zmc2V0IG11c3QgYmUgYSBudW1iZXIuIFJlY2VpdmVkOiAlcicgJSBzdGFydF9vZmZzZXQpCiAgICBpZiBzdG9wX29mZnNldCAhPSByYW5nZV90cmFja2Vycy5PZmZzZXRSYW5nZVRyYWNrZXIuT0ZGU0VUX0lORklOSVRZOgogICAgICBpZiBub3QgaXNpbnN0YW5jZShzdG9wX29mZnNldCwgKGludCwgbG9uZykpOgogICAgICAgIHJhaXNlIFR5cGVFcnJvcigKICAgICAgICAgICAgJ3N0b3Bfb2Zmc2V0IG11c3QgYmUgYSBudW1iZXIuIFJlY2VpdmVkOiAlcicgJSBzdG9wX29mZnNldCkKICAgICAgaWYgc3RhcnRfb2Zmc2V0ID49IHN0b3Bfb2Zmc2V0OgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAgICdzdGFydF9vZmZzZXQgbXVzdCBiZSBzbWFsbGVyIHRoYW4gc3RvcF9vZmZzZXQuIFJlY2VpdmVkICVkIGFuZCAlZCAnCiAgICAgICAgICAgICdmb3Igc3RhcnQgYW5kIHN0b3Agb2Zmc2V0cyByZXNwZWN0aXZlbHknICUKICAgICAgICAgICAgKHN0YXJ0X29mZnNldCwgc3RvcF9vZmZzZXQpKQoKICAgIHNlbGYuX2ZpbGVfbmFtZSA9IGZpbGVfbmFtZQogICAgc2VsZi5faXNfZ2NzX2ZpbGUgPSBmaWxlX25hbWUuc3RhcnRzd2l0aCgnZ3M6Ly8nKSBpZiBmaWxlX25hbWUgZWxzZSBGYWxzZQogICAgc2VsZi5fc3RhcnRfb2Zmc2V0ID0gc3RhcnRfb2Zmc2V0CiAgICBzZWxmLl9zdG9wX29mZnNldCA9IHN0b3Bfb2Zmc2V0CiAgICBzZWxmLl9taW5fYnVuZGxlX3NpemUgPSBtaW5fYnVuZGxlX3NpemUKICAgIHNlbGYuX2ZpbGVfYmFzZWRfc291cmNlID0gZmlsZV9iYXNlZF9zb3VyY2UKICAgIHNlbGYuX3NwbGl0dGFibGUgPSBzcGxpdHRhYmxlCgogIGRlZiBzcGxpdChzZWxmLCBkZXNpcmVkX2J1bmRsZV9zaXplLCBzdGFydF9vZmZzZXQ9Tm9uZSwgc3RvcF9vZmZzZXQ9Tm9uZSk6CiAgICBpZiBzdGFydF9vZmZzZXQgaXMgTm9uZToKICAgICAgc3RhcnRfb2Zmc2V0ID0gc2VsZi5fc3RhcnRfb2Zmc2V0CiAgICBpZiBzdG9wX29mZnNldCBpcyBOb25lOgogICAgICBzdG9wX29mZnNldCA9IHNlbGYuX3N0b3Bfb2Zmc2V0CgogICAgaWYgc2VsZi5fc3BsaXR0YWJsZToKICAgICAgc3BsaXRzID0gT2Zmc2V0UmFuZ2Uoc3RhcnRfb2Zmc2V0LCBzdG9wX29mZnNldCkuc3BsaXQoCiAgICAgICAgICBkZXNpcmVkX2J1bmRsZV9zaXplLCBzZWxmLl9taW5fYnVuZGxlX3NpemUpCiAgICAgIGZvciBzcGxpdCBpbiBzcGxpdHM6CiAgICAgICAgeWllbGQgaW9iYXNlLlNvdXJjZUJ1bmRsZSgKICAgICAgICAgICAgc3BsaXQuc3RvcCAtIHNwbGl0LnN0YXJ0LAogICAgICAgICAgICBfU2luZ2xlRmlsZVNvdXJjZSgKICAgICAgICAgICAgICAgICMgQ29weWluZyB0aGlzIHNvIHRoYXQgZWFjaCBzdWItc291cmNlIGdldHMgYSBmcmVzaCBpbnN0YW5jZS4KICAgICAgICAgICAgICAgIHBpY2tsZXIubG9hZHMocGlja2xlci5kdW1wcyhzZWxmLl9maWxlX2Jhc2VkX3NvdXJjZSkpLAogICAgICAgICAgICAgICAgc2VsZi5fZmlsZV9uYW1lLAogICAgICAgICAgICAgICAgc3BsaXQuc3RhcnQsCiAgICAgICAgICAgICAgICBzcGxpdC5zdG9wLAogICAgICAgICAgICAgICAgbWluX2J1bmRsZV9zaXplPXNlbGYuX21pbl9idW5kbGVfc2l6ZSwKICAgICAgICAgICAgICAgIHNwbGl0dGFibGU9c2VsZi5fc3BsaXR0YWJsZSksCiAgICAgICAgICAgIHNwbGl0LnN0YXJ0LAogICAgICAgICAgICBzcGxpdC5zdG9wKQogICAgZWxzZToKICAgICAgIyBSZXR1cm5pbmcgYSBzaW5nbGUgc3ViLXNvdXJjZSB3aXRoIGVuZCBvZmZzZXQgc2V0IHRvIE9GRlNFVF9JTkZJTklUWSAoc28KICAgICAgIyB0aGF0IGFsbCBkYXRhIG9mIHRoZSBzb3VyY2UgZ2V0cyByZWFkKSBzaW5jZSB0aGlzIHNvdXJjZSBpcwogICAgICAjIHVuc3BsaXR0YWJsZS4gQ2hvb3Npbmcgc2l6ZSBvZiB0aGUgZmlsZSBhcyBlbmQgb2Zmc2V0IHdpbGwgYmUgd3JvbmcgZm9yCiAgICAgICMgY2VydGFpbiB1bnNwbGl0dGFibGUgc291cmNlLCBlLmcuLCBjb21wcmVzc2VkIHNvdXJjZXMuCiAgICAgIHlpZWxkIGlvYmFzZS5Tb3VyY2VCdW5kbGUoCiAgICAgICAgICBzdG9wX29mZnNldCAtIHN0YXJ0X29mZnNldCwKICAgICAgICAgIF9TaW5nbGVGaWxlU291cmNlKAogICAgICAgICAgICAgIHNlbGYuX2ZpbGVfYmFzZWRfc291cmNlLAogICAgICAgICAgICAgIHNlbGYuX2ZpbGVfbmFtZSwKICAgICAgICAgICAgICBzdGFydF9vZmZzZXQsCiAgICAgICAgICAgICAgcmFuZ2VfdHJhY2tlcnMuT2Zmc2V0UmFuZ2VUcmFja2VyLk9GRlNFVF9JTkZJTklUWSwKICAgICAgICAgICAgICBtaW5fYnVuZGxlX3NpemU9c2VsZi5fbWluX2J1bmRsZV9zaXplLAogICAgICAgICAgICAgIHNwbGl0dGFibGU9c2VsZi5fc3BsaXR0YWJsZQogICAgICAgICAgKSwKICAgICAgICAgIHN0YXJ0X29mZnNldCwKICAgICAgICAgIHJhbmdlX3RyYWNrZXJzLk9mZnNldFJhbmdlVHJhY2tlci5PRkZTRVRfSU5GSU5JVFkKICAgICAgKQoKICBkZWYgZXN0aW1hdGVfc2l6ZShzZWxmKToKICAgIHJldHVybiBzZWxmLl9zdG9wX29mZnNldCAtIHNlbGYuX3N0YXJ0X29mZnNldAoKICBkZWYgZ2V0X3JhbmdlX3RyYWNrZXIoc2VsZiwgc3RhcnRfcG9zaXRpb24sIHN0b3BfcG9zaXRpb24pOgogICAgaWYgc3RhcnRfcG9zaXRpb24gaXMgTm9uZToKICAgICAgc3RhcnRfcG9zaXRpb24gPSBzZWxmLl9zdGFydF9vZmZzZXQKICAgIGlmIHN0b3BfcG9zaXRpb24gaXMgTm9uZToKICAgICAgIyBJZiBmaWxlIGlzIHVuc3BsaXR0YWJsZSB3ZSBjaG9vc2UgT0ZGU0VUX0lORklOSVRZIGFzIHRoZSBkZWZhdWx0IGVuZAogICAgICAjIG9mZnNldCBzbyB0aGF0IGFsbCBkYXRhIG9mIHRoZSBzb3VyY2UgZ2V0cyByZWFkLiBDaG9vc2luZyBzaXplIG9mIHRoZQogICAgICAjIGZpbGUgYXMgZW5kIG9mZnNldCB3aWxsIGJlIHdyb25nIGZvciBjZXJ0YWluIHVuc3BsaXR0YWJsZSBzb3VyY2UsIGZvcgogICAgICAjIGUuZy4sIGNvbXByZXNzZWQgc291cmNlcy4KICAgICAgc3RvcF9wb3NpdGlvbiA9ICgKICAgICAgICAgIHNlbGYuX3N0b3Bfb2Zmc2V0IGlmIHNlbGYuX3NwbGl0dGFibGUKICAgICAgICAgIGVsc2UgcmFuZ2VfdHJhY2tlcnMuT2Zmc2V0UmFuZ2VUcmFja2VyLk9GRlNFVF9JTkZJTklUWSkKCiAgICByYW5nZV90cmFja2VyID0gcmFuZ2VfdHJhY2tlcnMuT2Zmc2V0UmFuZ2VUcmFja2VyKAogICAgICAgIHN0YXJ0X3Bvc2l0aW9uLCBzdG9wX3Bvc2l0aW9uKQogICAgaWYgbm90IHNlbGYuX3NwbGl0dGFibGU6CiAgICAgIHJhbmdlX3RyYWNrZXIgPSByYW5nZV90cmFja2Vycy5VbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIocmFuZ2VfdHJhY2tlcikKCiAgICByZXR1cm4gcmFuZ2VfdHJhY2tlcgoKICBkZWYgcmVhZChzZWxmLCByYW5nZV90cmFja2VyKToKICAgIHJldHVybiBzZWxmLl9maWxlX2Jhc2VkX3NvdXJjZS5yZWFkX3JlY29yZHMoc2VsZi5fZmlsZV9uYW1lLCByYW5nZV90cmFja2VyKQoKICBkZWYgZGVmYXVsdF9vdXRwdXRfY29kZXIoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fZmlsZV9iYXNlZF9zb3VyY2UuZGVmYXVsdF9vdXRwdXRfY29kZXIoKQoKCmNsYXNzIF9FeHBhbmRJbnRvUmFuZ2VzKERvRm4pOgoKICBkZWYgX19pbml0X18oCiAgICAgIHNlbGYsIHNwbGl0dGFibGUsIGNvbXByZXNzaW9uX3R5cGUsIGRlc2lyZWRfYnVuZGxlX3NpemUsIG1pbl9idW5kbGVfc2l6ZSk6CiAgICBzZWxmLl9kZXNpcmVkX2J1bmRsZV9zaXplID0gZGVzaXJlZF9idW5kbGVfc2l6ZQogICAgc2VsZi5fbWluX2J1bmRsZV9zaXplID0gbWluX2J1bmRsZV9zaXplCiAgICBzZWxmLl9zcGxpdHRhYmxlID0gc3BsaXR0YWJsZQogICAgc2VsZi5fY29tcHJlc3Npb25fdHlwZSA9IGNvbXByZXNzaW9uX3R5cGUKCiAgZGVmIHByb2Nlc3Moc2VsZiwgZWxlbWVudCwgKmFyZ3MsICoqa3dhcmdzKToKICAgIG1hdGNoX3Jlc3VsdHMgPSBGaWxlU3lzdGVtcy5tYXRjaChbZWxlbWVudF0pCiAgICBmb3IgbWV0YWRhdGEgaW4gbWF0Y2hfcmVzdWx0c1swXS5tZXRhZGF0YV9saXN0OgogICAgICBzcGxpdHRhYmxlID0gKAogICAgICAgICAgc2VsZi5fc3BsaXR0YWJsZSBhbmQKICAgICAgICAgIF9kZXRlcm1pbmVfc3BsaXR0YWJpbGl0eV9mcm9tX2NvbXByZXNzaW9uX3R5cGUoCiAgICAgICAgICAgICAgbWV0YWRhdGEucGF0aCwgc2VsZi5fY29tcHJlc3Npb25fdHlwZSkpCgogICAgICBpZiBzcGxpdHRhYmxlOgogICAgICAgIGZvciBzcGxpdCBpbiBPZmZzZXRSYW5nZSgKICAgICAgICAgICAgMCwgbWV0YWRhdGEuc2l6ZV9pbl9ieXRlcykuc3BsaXQoCiAgICAgICAgICAgICAgICBzZWxmLl9kZXNpcmVkX2J1bmRsZV9zaXplLCBzZWxmLl9taW5fYnVuZGxlX3NpemUpOgogICAgICAgICAgeWllbGQgKG1ldGFkYXRhLCBzcGxpdCkKICAgICAgZWxzZToKICAgICAgICB5aWVsZCAobWV0YWRhdGEsIE9mZnNldFJhbmdlKAogICAgICAgICAgICAwLCByYW5nZV90cmFja2Vycy5PZmZzZXRSYW5nZVRyYWNrZXIuT0ZGU0VUX0lORklOSVRZKSkKCgpjbGFzcyBfUmVhZFJhbmdlKERvRm4pOgoKICBkZWYgX19pbml0X18oc2VsZiwgc291cmNlX2Zyb21fZmlsZSk6CiAgICBzZWxmLl9zb3VyY2VfZnJvbV9maWxlID0gc291cmNlX2Zyb21fZmlsZQoKICBkZWYgcHJvY2VzcyhzZWxmLCBlbGVtZW50LCAqYXJncywgKiprd2FyZ3MpOgogICAgbWV0YWRhdGEsIHJhbmdlID0gZWxlbWVudAogICAgc291cmNlID0gc2VsZi5fc291cmNlX2Zyb21fZmlsZShtZXRhZGF0YS5wYXRoKQogICAgIyBGb2xsb3dpbmcgc3BsaXQoKSBvcGVyYXRpb24gaGFzIHRvIGJlIHBlcmZvcm1lZCB0byBjcmVhdGUgYSBwcm9wZXIKICAgICMgX1NpbmdsZUZpbGVTb3VyY2UuIE90aGVyd2lzZSB3aGF0IHdlIGhhdmUgaXMgYSBDb25jYXRTb3VyY2UgdGhhdCBjb250YWlucwogICAgIyBhIHNpbmdsZSBfU2luZ2xlRmlsZVNvdXJjZS4gQ29uY2F0U291cmNlLnJlYWQoKSBleHBlY3RzIGEgUmFuZ2VUcmFrZXIgZm9yCiAgICAjIHN1Yi1zb3VyY2UgcmFuZ2UgYW5kIHJlYWRzIGZ1bGwgc3ViLXNvdXJjZXMgKG5vdCBieXRlIHJhbmdlcykuCiAgICBzb3VyY2UgPSBsaXN0KHNvdXJjZS5zcGxpdChmbG9hdCgnaW5mJykpKVswXS5zb3VyY2UKICAgIGZvciByZWNvcmQgaW4gc291cmNlLnJlYWQocmFuZ2UubmV3X3RyYWNrZXIoKSk6CiAgICAgIHlpZWxkIHJlY29yZAoKCmNsYXNzIFJlYWRBbGxGaWxlcyhQVHJhbnNmb3JtKToKICAiIiJBIFJlYWQgdHJhbnNmb3JtIHRoYXQgcmVhZHMgYSBQQ29sbGVjdGlvbiBvZiBmaWxlcy4KCiAgUGlwZWxpbmUgYXV0aG9ycyBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5LiBUaGlzIGlzIHRvIGJlIHVzZWQgYnkgUmVhZAogIFBUcmFuc2Zvcm0gYXV0aG9ycyB3aG8gd2lzaGVzIHRvIGltcGxlbWVudCBmaWxlLWJhc2VkIFJlYWQgdHJhbnNmb3JtcyB0aGF0CiAgcmVhZCBhIFBDb2xsZWN0aW9uIG9mIGZpbGVzLgogICIiIgoKICBkZWYgX19pbml0X18oCiAgICAgIHNlbGYsIHNwbGl0dGFibGUsIGNvbXByZXNzaW9uX3R5cGUsIGRlc2lyZWRfYnVuZGxlX3NpemUsIG1pbl9idW5kbGVfc2l6ZSwKICAgICAgc291cmNlX2Zyb21fZmlsZSk6CiAgICAiIiIKICAgIEFyZ3M6CiAgICAgIHNwbGl0dGFibGU6IElmIEZhbHNlLCBmaWxlcyB3b24ndCBiZSBzcGxpdCBpbnRvIHN1Yi1yYW5nZXMuIElmIFRydWUsCiAgICAgICAgICAgICAgICAgIGZpbGVzIG1heSBvciBtYXkgbm90IGJlIHNwbGl0IGludG8gZGF0YSByYW5nZXMuCiAgICAgIGNvbXByZXNzaW9uX3R5cGU6IEEgYGBDb21wcmVzc2lvblR5cGVgYCBvYmplY3QgdGhhdCBzcGVjaWZpZXMgdGhlCiAgICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uIHR5cGUgb2YgdGhlIGZpbGVzIHRoYXQgd2lsbCBiZSBwcm9jZXNzZWQuIElmCiAgICAgICAgICAgICAgICAgIGBgQ29tcHJlc3Npb25UeXBlLkFVVE9gYCwgc3lzdGVtIHdpbGwgdHJ5IHRvIGF1dG9tYXRpY2FsbHkKICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lIHRoZSBjb21wcmVzc2lvbiB0eXBlIGJhc2VkIG9uIHRoZSBleHRlbnNpb24gb2YKICAgICAgICAgICAgICAgICAgZmlsZXMuCiAgICAgIGRlc2lyZWRfYnVuZGxlX3NpemU6IHRoZSBkZXNpcmVkIHNpemUgb2YgZGF0YSByYW5nZXMgdGhhdCBzaG91bGQgYmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVkIHdoZW4gc3BsaXR0aW5nIGEgZmlsZSBpbnRvIGRhdGEgcmFuZ2VzLgogICAgICBtaW5fYnVuZGxlX3NpemU6IG1pbmltdW0gc2l6ZSBvZiBkYXRhIHJhbmdlcyB0aGF0IHNob3VsZCBiZSBnZW5lcmF0ZWQgd2hlbgogICAgICAgICAgICAgICAgICAgICAgICAgICBzcGxpdHRpbmcgYSBmaWxlIGludG8gZGF0YSByYW5nZXMuCiAgICAgIHNvdXJjZV9mcm9tX2ZpbGU6IGEgZnVuY3Rpb24gdGhhdCBwcm9kdWNlcyBhIGBgQm91bmRlZFNvdXJjZWBgIGdpdmVuIGEKICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSBuYW1lLiBTeXN0ZW0gd2lsbCB1c2UgdGhpcyBmdW5jdGlvbiB0byBnZW5lcmF0ZQogICAgICAgICAgICAgICAgICAgICAgICBgYEJvdW5kZWRTb3VyY2VgYCBvYmplY3RzIGZvciBmaWxlIHBhdGhzLiBOb3RlIHRoYXQgZmlsZQogICAgICAgICAgICAgICAgICAgICAgICBwYXRocyBwYXNzZWQgdG8gdGhpcyB3aWxsIGJlIGZvciBpbmRpdmlkdWFsIGZpbGVzLCBub3QKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGZpbGUgcGF0dGVybnMgZXZlbiBpZiB0aGUgYGBQQ29sbGVjdGlvbmBgIG9mIGZpbGVzCiAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZCBieSB0aGUgdHJhbnNmb3JtIGNvbnNpc3Qgb2YgZmlsZSBwYXR0ZXJucy4KICAgICIiIgogICAgc2VsZi5fc3BsaXR0YWJsZSA9IHNwbGl0dGFibGUKICAgIHNlbGYuX2NvbXByZXNzaW9uX3R5cGUgPSBjb21wcmVzc2lvbl90eXBlCiAgICBzZWxmLl9kZXNpcmVkX2J1bmRsZV9zaXplID0gZGVzaXJlZF9idW5kbGVfc2l6ZQogICAgc2VsZi5fbWluX2J1bmRsZV9zaXplID0gbWluX2J1bmRsZV9zaXplCiAgICBzZWxmLl9zb3VyY2VfZnJvbV9maWxlID0gc291cmNlX2Zyb21fZmlsZQoKICBkZWYgZXhwYW5kKHNlbGYsIHB2YWx1ZSk6CiAgICByZXR1cm4gKHB2YWx1ZQogICAgICAgICAgICB8ICdFeHBhbmRJbnRvUmFuZ2VzJyA+PiBQYXJEbyhfRXhwYW5kSW50b1JhbmdlcygKICAgICAgICAgICAgICAgIHNlbGYuX3NwbGl0dGFibGUsIHNlbGYuX2NvbXByZXNzaW9uX3R5cGUsCiAgICAgICAgICAgICAgICBzZWxmLl9kZXNpcmVkX2J1bmRsZV9zaXplLCBzZWxmLl9taW5fYnVuZGxlX3NpemUpKQogICAgICAgICAgICB8ICdSZXNoYXJkJyA+PiBSZXNodWZmbGUoKQogICAgICAgICAgICB8ICdSZWFkUmFuZ2UnID4+IFBhckRvKF9SZWFkUmFuZ2Uoc2VsZi5fc291cmNlX2Zyb21fZmlsZSkpKQp9cvyEAAAoWC4AAABfZGV0ZXJtaW5lX3NwbGl0dGFiaWxpdHlfZnJvbV9jb21wcmVzc2lvbl90eXBlWAMAAABkZWZL40vph1gSAAAAX1JlYWRSYW5nZS5wcm9jZXNzWAMAAABkZWZNawFNdQGHWBQAAABGaWxlQmFzZWRTb3VyY2UucmVhZFgDAAAAZGVmS8RLxodYCgAAAF9SZWFkUmFuZ2VYBQAAAGNsYXNzTWYBTXUBh1gTAAAAX1JlYWRSYW5nZS5fX2luaXRfX1gDAAAAZGVmTWgBTWoBh1gZAAAAX0V4cGFuZEludG9SYW5nZXMucHJvY2Vzc1gDAAAAZGVmTVQBTWQBh1gdAAAARmlsZUJhc2VkU291cmNlLmVzdGltYXRlX3NpemVYAwAAAGRlZku+S8OHWBMAAABSZWFkQWxsRmlsZXMuZXhwYW5kWAMAAABkZWZNnAFNowGHWBoAAABGaWxlQmFzZWRTb3VyY2Uuc3BsaXR0YWJsZVgDAAAAZGVmS95L4YdYGAAAAEZpbGVCYXNlZFNvdXJjZS5fX2luaXRfX1gDAAAAZGVmSz5LeodYGgAAAF9FeHBhbmRJbnRvUmFuZ2VzLl9faW5pdF9fWAMAAABkZWZNTQFNUwGHWCYAAABfU2luZ2xlRmlsZVNvdXJjZS5kZWZhdWx0X291dHB1dF9jb2RlclgDAAAAZGVmTUcBTUkBh1gcAAAARmlsZUJhc2VkU291cmNlLmRpc3BsYXlfZGF0YVgDAAAAZGVmS3tLgIdYHAAAAEZpbGVCYXNlZFNvdXJjZS5yZWFkX3JlY29yZHNYAwAAAGRlZkvLS92HWCMAAABfU2luZ2xlRmlsZVNvdXJjZS5nZXRfcmFuZ2VfdHJhY2tlclgDAAAAZGVmTTEBTUMBh1gZAAAARmlsZUJhc2VkU291cmNlLm9wZW5fZmlsZVgDAAAAZGVmS6ZLqodYIgAAAEZpbGVCYXNlZFNvdXJjZS5fZ2V0X2NvbmNhdF9zb3VyY2VYAwAAAGRlZkuBS6WHWBUAAABSZWFkQWxsRmlsZXMuX19pbml0X19YAwAAAGRlZk1/AU2bAYdYDAAAAFJlYWRBbGxGaWxlc1gFAAAAY2xhc3NNdwFNowGHWBEAAABfRXhwYW5kSW50b1Jhbmdlc1gFAAAAY2xhc3NNSwFNZAGHWBoAAABfU2luZ2xlRmlsZVNvdXJjZS5fX2luaXRfX1gDAAAAZGVmS+5NBAGHWBYAAABfU2luZ2xlRmlsZVNvdXJjZS5yZWFkWAMAAABkZWZNRAFNRgGHWBcAAABfU2luZ2xlRmlsZVNvdXJjZS5zcGxpdFgDAAAAZGVmTQUBTS0Bh1gRAAAAX1NpbmdsZUZpbGVTb3VyY2VYBQAAAGNsYXNzS+tNSQGHWBkAAABGaWxlQmFzZWRTb3VyY2UuX3ZhbGlkYXRlWAMAAABkZWZLq0u2h1gVAAAARmlsZUJhc2VkU291cmNlLnNwbGl0WAMAAABkZWZLt0u9h1gPAAAARmlsZUJhc2VkU291cmNlWAUAAABjbGFzc0s3S+GHWCEAAABGaWxlQmFzZWRTb3VyY2UuZ2V0X3JhbmdlX3RyYWNrZXJYAwAAAGRlZkvHS8qHWB8AAABfU2luZ2xlRmlsZVNvdXJjZS5lc3RpbWF0ZV9zaXplWAMAAABkZWZNLgFNMAGHdX1y/YQAAChYHAAAAEZpbGVCYXNlZFNvdXJjZS5yZWFkX3JlY29yZHNqZGsAAFgcAAAARmlsZUJhc2VkU291cmNlLmRpc3BsYXlfZGF0YWpkawAAWB0AAABGaWxlQmFzZWRTb3VyY2UuZXN0aW1hdGVfc2l6ZWpkawAAWBkAAABGaWxlQmFzZWRTb3VyY2Uub3Blbl9maWxlamRrAABYFQAAAEZpbGVCYXNlZFNvdXJjZS5zcGxpdGpkawAAWA8AAABGaWxlQmFzZWRTb3VyY2VqZGsAAFgUAAAARmlsZUJhc2VkU291cmNlLnJlYWRqZGsAAFghAAAARmlsZUJhc2VkU291cmNlLmdldF9yYW5nZV90cmFja2VyamRrAAB1an1pAABYHgAAAGFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNvdXJjZXL+hAAAhYFy/4QAAH1yAIUAAGJ0VS5hcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLnF1ZXJ5X3NwbGl0dGVyKFiyJQAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJJbXBsZW1lbnRzIGEgQ2xvdWQgRGF0YXN0b3JlIHF1ZXJ5IHNwbGl0dGVyLiIiIgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydApmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCgpmcm9tIGJ1aWx0aW5zIGltcG9ydCByYW5nZQpmcm9tIGJ1aWx0aW5zIGltcG9ydCByb3VuZAoKZnJvbSBhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxIGltcG9ydCBoZWxwZXIKCiMgUHJvdGVjdCBhZ2FpbnN0IGVudmlyb25tZW50cyB3aGVyZSBkYXRhc3RvcmUgbGlicmFyeSBpcyBub3QgYXZhaWxhYmxlLgojIHB5bGludDogZGlzYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbgp0cnk6CiAgZnJvbSBnb29nbGUuY2xvdWQucHJvdG8uZGF0YXN0b3JlLnYxIGltcG9ydCBkYXRhc3RvcmVfcGIyCiAgZnJvbSBnb29nbGUuY2xvdWQucHJvdG8uZGF0YXN0b3JlLnYxIGltcG9ydCBxdWVyeV9wYjIKICBmcm9tIGdvb2dsZS5jbG91ZC5wcm90by5kYXRhc3RvcmUudjEucXVlcnlfcGIyIGltcG9ydCBQcm9wZXJ0eUZpbHRlcgogIGZyb20gZ29vZ2xlLmNsb3VkLnByb3RvLmRhdGFzdG9yZS52MS5xdWVyeV9wYjIgaW1wb3J0IENvbXBvc2l0ZUZpbHRlcgogIGZyb20gZ29vZ2xlZGF0YXN0b3JlIGltcG9ydCBoZWxwZXIgYXMgZGF0YXN0b3JlX2hlbHBlcgogIFVOU1VQUE9SVEVEX09QRVJBVE9SUyA9IFtQcm9wZXJ0eUZpbHRlci5MRVNTX1RIQU4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb3BlcnR5RmlsdGVyLkxFU1NfVEhBTl9PUl9FUVVBTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvcGVydHlGaWx0ZXIuR1JFQVRFUl9USEFOLAogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0eUZpbHRlci5HUkVBVEVSX1RIQU5fT1JfRVFVQUxdCmV4Y2VwdCBJbXBvcnRFcnJvcjoKICBVTlNVUFBPUlRFRF9PUEVSQVRPUlMgPSBOb25lCiMgcHlsaW50OiBlbmFibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KCgpfX2FsbF9fID0gWwogICAgJ2dldF9zcGxpdHMnLApdCgpTQ0FUVEVSX1BST1BFUlRZX05BTUUgPSAnX19zY2F0dGVyX18nCktFWV9QUk9QRVJUWV9OQU1FID0gJ19fa2V5X18nCiMgVGhlIG51bWJlciBvZiBrZXlzIHRvIHNhbXBsZSBmb3IgZWFjaCBzcGxpdC4KS0VZU19QRVJfU1BMSVQgPSAzMgoKCmRlZiBnZXRfc3BsaXRzKGRhdGFzdG9yZSwgcXVlcnksIG51bV9zcGxpdHMsIHBhcnRpdGlvbj1Ob25lKToKICAiIiJSZXR1cm5zIGEgbGlzdCBvZiBzaGFyZGVkIHF1ZXJpZXMgZm9yIHRoZSBnaXZlbiBDbG91ZCBEYXRhc3RvcmUgcXVlcnkuCgogIFRoaXMgd2lsbCBjcmVhdGUgdXAgdG8gdGhlIGRlc2lyZWQgbnVtYmVyIG9mIHNwbGl0cywgaG93ZXZlciBpdCBtYXkgcmV0dXJuCiAgbGVzcyBzcGxpdHMgaWYgdGhlIGRlc2lyZWQgbnVtYmVyIG9mIHNwbGl0cyBpcyB1bmF2YWlsYWJsZS4gVGhpcyB3aWxsIGhhcHBlbgogIGlmIHRoZSBudW1iZXIgb2Ygc3BsaXQgcG9pbnRzIHByb3ZpZGVkIGJ5IHRoZSB1bmRlcmx5aW5nIERhdGFzdG9yZSBpcyBsZXNzCiAgdGhhbiB0aGUgZGVzaXJlZCBudW1iZXIsIHdoaWNoIHdpbGwgb2NjdXIgaWYgdGhlIG51bWJlciBvZiByZXN1bHRzIGZvciB0aGUKICBxdWVyeSBpcyB0b28gc21hbGwuCgogIFRoaXMgaW1wbGVtZW50YXRpb24gb2YgdGhlIFF1ZXJ5U3BsaXR0ZXIgdXNlcyB0aGUgX19zY2F0dGVyX18gcHJvcGVydHkgdG8KICBnYXRoZXIgcmFuZG9tIHNwbGl0IHBvaW50cyBmb3IgYSBxdWVyeS4KCiAgTm90ZTogVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBkZXJpdmVkIGZyb20gdGhlIGphdmEgcXVlcnkgc3BsaXR0ZXIgaW4KICBodHRwczovL2dpdGh1Yi5jb20vR29vZ2xlQ2xvdWRQbGF0Zm9ybS9nb29nbGUtY2xvdWQtZGF0YXN0b3JlL2Jsb2IvbWFzdGVyL2phdmEvZGF0YXN0b3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9kYXRhc3RvcmUvdjEvY2xpZW50L1F1ZXJ5U3BsaXR0ZXJJbXBsLmphdmEKCiAgQXJnczoKICAgIGRhdGFzdG9yZTogdGhlIGRhdGFzdG9yZSBjbGllbnQuCiAgICBxdWVyeTogdGhlIHF1ZXJ5IHRvIHNwbGl0LgogICAgbnVtX3NwbGl0czogdGhlIGRlc2lyZWQgbnVtYmVyIG9mIHNwbGl0cy4KICAgIHBhcnRpdGlvbjogdGhlIHBhcnRpdGlvbiB0aGUgcXVlcnkgaXMgcnVubmluZyBpbi4KCiAgUmV0dXJuczoKICAgIEEgbGlzdCBvZiBzcGxpdCBxdWVyaWVzLCBvZiBhIG1heCBsZW5ndGggb2YgYG51bV9zcGxpdHNgCiAgIiIiCgogICMgVmFsaWRhdGUgdGhhdCB0aGUgbnVtYmVyIG9mIHNwbGl0cyBpcyBub3Qgb3V0IG9mIGJvdW5kcy4KICBpZiBudW1fc3BsaXRzIDwgMToKICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1RoZSBudW1iZXIgb2Ygc3BsaXRzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuJykKCiAgaWYgbnVtX3NwbGl0cyA9PSAxOgogICAgcmV0dXJuIFtxdWVyeV0KCiAgX3ZhbGlkYXRlX3F1ZXJ5KHF1ZXJ5KQoKICBzcGxpdHMgPSBbXQogIHNjYXR0ZXJfa2V5cyA9IF9nZXRfc2NhdHRlcl9rZXlzKGRhdGFzdG9yZSwgcXVlcnksIG51bV9zcGxpdHMsIHBhcnRpdGlvbikKICBsYXN0X2tleSA9IE5vbmUKICBmb3IgbmV4dF9rZXkgaW4gX2dldF9zcGxpdF9rZXkoc2NhdHRlcl9rZXlzLCBudW1fc3BsaXRzKToKICAgIHNwbGl0cy5hcHBlbmQoX2NyZWF0ZV9zcGxpdChsYXN0X2tleSwgbmV4dF9rZXksIHF1ZXJ5KSkKICAgIGxhc3Rfa2V5ID0gbmV4dF9rZXkKCiAgc3BsaXRzLmFwcGVuZChfY3JlYXRlX3NwbGl0KGxhc3Rfa2V5LCBOb25lLCBxdWVyeSkpCiAgcmV0dXJuIHNwbGl0cwoKCmRlZiBfdmFsaWRhdGVfcXVlcnkocXVlcnkpOgogICIiIiBWZXJpZmllcyB0aGF0IHRoZSBnaXZlbiBxdWVyeSBjYW4gYmUgcHJvcGVybHkgc2NhdHRlcmVkLiIiIgoKICBpZiBsZW4ocXVlcnkua2luZCkgIT0gMToKICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1F1ZXJ5IG11c3QgaGF2ZSBleGFjdGx5IG9uZSBraW5kLicpCgogIGlmIHF1ZXJ5Lm9yZGVyOgogICAgcmFpc2UgVmFsdWVFcnJvcignUXVlcnkgY2Fubm90IGhhdmUgYW55IHNvcnQgb3JkZXJzLicpCgogIGlmIHF1ZXJ5Lkhhc0ZpZWxkKCdsaW1pdCcpOgogICAgcmFpc2UgVmFsdWVFcnJvcignUXVlcnkgY2Fubm90IGhhdmUgYSBsaW1pdCBzZXQuJykKCiAgaWYgcXVlcnkub2Zmc2V0ID4gMDoKICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1F1ZXJ5IGNhbm5vdCBoYXZlIGFuIG9mZnNldCBzZXQuJykKCiAgX3ZhbGlkYXRlX2ZpbHRlcihxdWVyeS5maWx0ZXIpCgoKZGVmIF92YWxpZGF0ZV9maWx0ZXIoZmlsdGVyKToKICAiIiJWYWxpZGF0ZXMgdGhhdCB3ZSBvbmx5IGhhdmUgYWxsb3dhYmxlIGZpbHRlcnMuCgogIE5vdGUgdGhhdCBlcXVhbGl0eSBhbmQgYW5jZXN0b3IgZmlsdGVycyBhcmUgYWxsb3dlZCwgaG93ZXZlciB0aGV5IG1heSByZXN1bHQKICBpbiBpbmVmZmljaWVudCBzaGFyZGluZy4KICAiIiIKCiAgaWYgZmlsdGVyLkhhc0ZpZWxkKCdjb21wb3NpdGVfZmlsdGVyJyk6CiAgICBmb3Igc3ViX2ZpbHRlciBpbiBmaWx0ZXIuY29tcG9zaXRlX2ZpbHRlci5maWx0ZXJzOgogICAgICBfdmFsaWRhdGVfZmlsdGVyKHN1Yl9maWx0ZXIpCiAgZWxpZiBmaWx0ZXIuSGFzRmllbGQoJ3Byb3BlcnR5X2ZpbHRlcicpOgogICAgaWYgZmlsdGVyLnByb3BlcnR5X2ZpbHRlci5vcCBpbiBVTlNVUFBPUlRFRF9PUEVSQVRPUlM6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1F1ZXJ5IGNhbm5vdCBoYXZlIGFueSBpbmVxdWFsaXR5IGZpbHRlcnMuJykKICBlbHNlOgogICAgcGFzcwoKCmRlZiBfY3JlYXRlX3NjYXR0ZXJfcXVlcnkocXVlcnksIG51bV9zcGxpdHMpOgogICIiIkNyZWF0ZXMgYSBzY2F0dGVyIHF1ZXJ5IGZyb20gdGhlIGdpdmVuIHVzZXIgcXVlcnkuIiIiCgogIHNjYXR0ZXJfcXVlcnkgPSBxdWVyeV9wYjIuUXVlcnkoKQogIGZvciBraW5kIGluIHF1ZXJ5LmtpbmQ6CiAgICBzY2F0dGVyX2tpbmQgPSBzY2F0dGVyX3F1ZXJ5LmtpbmQuYWRkKCkKICAgIHNjYXR0ZXJfa2luZC5Db3B5RnJvbShraW5kKQoKICAjIGFzY2VuZGluZyBvcmRlcgogIGRhdGFzdG9yZV9oZWxwZXIuYWRkX3Byb3BlcnR5X29yZGVycyhzY2F0dGVyX3F1ZXJ5LCBTQ0FUVEVSX1BST1BFUlRZX05BTUUpCgogICMgVGhlcmUgaXMgYSBzcGxpdCBjb250YWluaW5nIGVudGl0aWVzIGJlZm9yZSBhbmQgYWZ0ZXIgZWFjaCBzY2F0dGVyIGVudGl0eToKICAjIHx8LS0tKi0tLS0tLSotLS0tLS0qLS0tLS0tKi0tLS0tLSotLS0tLS0qLS0tLS0tKi0tLXx8ICAqID0gc2NhdHRlciBlbnRpdHkKICAjIElmIHdlIHJlcHJlc2VudCBlYWNoIHNwbGl0IGFzIGEgcmVnaW9uIGJlZm9yZSBhIHNjYXR0ZXIgZW50aXR5LCB0aGVyZSBpcyBhbgogICMgZXh0cmEgcmVnaW9uIGZvbGxvd2luZyB0aGUgbGFzdCBzY2F0dGVyIHBvaW50LiBUaHVzLCB3ZSBkbyBub3QgbmVlZCB0aGUKICAjIHNjYXR0ZXIgZW50aXR5IGZvciB0aGUgbGFzdCByZWdpb24uCiAgc2NhdHRlcl9xdWVyeS5saW1pdC52YWx1ZSA9IChudW1fc3BsaXRzIC0gMSkgKiBLRVlTX1BFUl9TUExJVAogIGRhdGFzdG9yZV9oZWxwZXIuYWRkX3Byb2plY3Rpb24oc2NhdHRlcl9xdWVyeSwgS0VZX1BST1BFUlRZX05BTUUpCgogIHJldHVybiBzY2F0dGVyX3F1ZXJ5CgoKZGVmIF9nZXRfc2NhdHRlcl9rZXlzKGRhdGFzdG9yZSwgcXVlcnksIG51bV9zcGxpdHMsIHBhcnRpdGlvbik6CiAgIiIiR2V0cyBhIGxpc3Qgb2Ygc3BsaXQga2V5cyBnaXZlbiBhIGRlc2lyZWQgbnVtYmVyIG9mIHNwbGl0cy4KCiAgVGhpcyBsaXN0IHdpbGwgY29udGFpbiBtdWx0aXBsZSBzcGxpdCBrZXlzIGZvciBlYWNoIHNwbGl0LiBPbmx5IGEgc2luZ2xlIHNwbGl0CiAga2V5IHdpbGwgYmUgY2hvc2VuIGFzIHRoZSBzcGxpdCBwb2ludCwgaG93ZXZlciBwcm92aWRpbmcgbXVsdGlwbGUga2V5cyBhbGxvd3MKICBmb3IgbW9yZSB1bmlmb3JtIHNoYXJkaW5nLgoKICBBcmdzOgogICAgbnVtU3BsaXRzOiB0aGUgbnVtYmVyIG9mIGRlc2lyZWQgc3BsaXRzLgogICAgcXVlcnk6IHRoZSB1c2VyIHF1ZXJ5LgogICAgcGFydGl0aW9uOiB0aGUgcGFydGl0aW9uIHRvIHJ1biB0aGUgcXVlcnkgaW4uCiAgICBkYXRhc3RvcmU6IHRoZSBjbGllbnQgdG8gZGF0YXN0b3JlIGNvbnRhaW5pbmcgdGhlIGRhdGEuCgogIFJldHVybnM6CiAgICBBIGxpc3Qgb2Ygc2NhdHRlciBrZXlzIHJldHVybmVkIGJ5IERhdGFzdG9yZS4KICAiIiIKICBzY2F0dGVyX3BvaW50X3F1ZXJ5ID0gX2NyZWF0ZV9zY2F0dGVyX3F1ZXJ5KHF1ZXJ5LCBudW1fc3BsaXRzKQoKICBrZXlfc3BsaXRzID0gW10KICB3aGlsZSBUcnVlOgogICAgcmVxID0gZGF0YXN0b3JlX3BiMi5SdW5RdWVyeVJlcXVlc3QoKQogICAgaWYgcGFydGl0aW9uOgogICAgICByZXEucGFydGl0aW9uX2lkLkNvcHlGcm9tKHBhcnRpdGlvbikKCiAgICByZXEucXVlcnkuQ29weUZyb20oc2NhdHRlcl9wb2ludF9xdWVyeSkKCiAgICByZXNwID0gZGF0YXN0b3JlLnJ1bl9xdWVyeShyZXEpCiAgICBmb3IgZW50aXR5X3Jlc3VsdCBpbiByZXNwLmJhdGNoLmVudGl0eV9yZXN1bHRzOgogICAgICBrZXlfc3BsaXRzLmFwcGVuZChlbnRpdHlfcmVzdWx0LmVudGl0eS5rZXkpCgogICAgaWYgcmVzcC5iYXRjaC5tb3JlX3Jlc3VsdHMgIT0gcXVlcnlfcGIyLlF1ZXJ5UmVzdWx0QmF0Y2guTk9UX0ZJTklTSEVEOgogICAgICBicmVhawoKICAgIHNjYXR0ZXJfcG9pbnRfcXVlcnkuc3RhcnRfY3Vyc29yID0gcmVzcC5iYXRjaC5lbmRfY3Vyc29yCiAgICBzY2F0dGVyX3BvaW50X3F1ZXJ5LmxpbWl0LnZhbHVlIC09IGxlbihyZXNwLmJhdGNoLmVudGl0eV9yZXN1bHRzKQoKICBrZXlfc3BsaXRzLnNvcnQoaGVscGVyLmtleV9jb21wYXJhdG9yKQogIHJldHVybiBrZXlfc3BsaXRzCgoKZGVmIF9nZXRfc3BsaXRfa2V5KGtleXMsIG51bV9zcGxpdHMpOgogICIiIkdpdmVuIGEgbGlzdCBvZiBrZXlzIGFuZCBhIG51bWJlciBvZiBzcGxpdHMgZmluZCB0aGUga2V5cyB0byBzcGxpdCBvbi4KCiAgQXJnczoKICAgIGtleXM6IHRoZSBsaXN0IG9mIGtleXMuCiAgICBudW1fc3BsaXRzOiB0aGUgbnVtYmVyIG9mIHNwbGl0cy4KCiAgUmV0dXJuczoKICAgIEEgbGlzdCBvZiBrZXlzIHRvIHNwbGl0IG9uLgoKICAiIiIKCiAgIyBJZiB0aGUgbnVtYmVyIG9mIGtleXMgaXMgbGVzcyB0aGFuIHRoZSBudW1iZXIgb2Ygc3BsaXRzLCB3ZSBhcmUgbGltaXRlZAogICMgaW4gdGhlIG51bWJlciBvZiBzcGxpdHMgd2UgY2FuIG1ha2UuCiAgaWYgbm90IGtleXMgb3IgKGxlbihrZXlzKSA8IChudW1fc3BsaXRzIC0gMSkpOgogICAgcmV0dXJuIGtleXMKCiAgIyBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiBrZXlzIHBlciBzcGxpdC4gVGhpcyBzaG91bGQgYmUgS0VZU19QRVJfU1BMSVQsCiAgIyBidXQgbWF5IGJlIGxlc3MgaWYgdGhlcmUgYXJlIG5vdCBLRVlTX1BFUl9TUExJVCAqIChudW1TcGxpdHMgLSAxKSBzY2F0dGVyCiAgIyBlbnRpdGllcy4KICAjCiAgIyBDb25zaWRlciB0aGUgZm9sbG93aW5nIGRhdGFzZXQsIHdoZXJlIC0gcmVwcmVzZW50cyBhbiBlbnRpdHkgYW5kCiAgIyAqIHJlcHJlc2VudHMgYW4gZW50aXR5IHRoYXQgaXMgcmV0dXJuZWQgYXMgYSBzY2F0dGVyIGVudGl0eToKICAjIHx8LS0tKi0tLS0tKi0tLS0qLS0tLS0qLS0tLS0qLS0tLS0tKi0tLS0qLS0tLXx8CiAgIyBJZiB3ZSB3YW50IDQgc3BsaXRzIGluIHRoaXMgZGF0YSwgdGhlIG9wdGltYWwgc3BsaXQgd291bGQgbG9vayBsaWtlOgogICMgfHwtLS0qLS0tLS0qLS0tLSotLS0tLSotLS0tLSotLS0tLS0qLS0tLSotLS0tfHwKICAjICAgICAgICAgICAgfCAgICAgICAgICB8ICAgICAgICAgICAgfAogICMgVGhlIHNjYXR0ZXIga2V5cyBpbiB0aGUgbGFzdCByZWdpb24gYXJlIG5vdCB1c2VmdWwgdG8gdXMsIHNvIHdlIG5ldmVyCiAgIyByZXF1ZXN0IHRoZW06CiAgIyB8fC0tLSotLS0tLSotLS0tKi0tLS0tKi0tLS0tKi0tLS0tLSotLS0tLS0tLS18fAogICMgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgICAgICB8CiAgIyBXaXRoIDYgc2NhdHRlciBrZXlzIHdlIHdhbnQgdG8gc2V0IHNjYXR0ZXIgcG9pbnRzIGF0IGluZGV4ZXM6IDEsIDMsIDUuCiAgIwogICMgV2Uga2VlcCB0aGlzIGFzIGEgZmxvYXQgc28gdGhhdCBhbnkgImZyYWN0aW9uYWwiIGtleXMgcGVyIHNwbGl0IGdldAogICMgZGlzdHJpYnV0ZWQgdGhyb3VnaG91dCB0aGUgc3BsaXRzIGFuZCBkb24ndCBtYWtlIHRoZSBsYXN0IHNwbGl0CiAgIyBzaWduaWZpY2FudGx5IGxhcmdlciB0aGFuIHRoZSByZXN0LgoKICBudW1fa2V5c19wZXJfc3BsaXQgPSBtYXgoMS4wLCBmbG9hdChsZW4oa2V5cykpIC8gKG51bV9zcGxpdHMgLSAxKSkKCiAgc3BsaXRfa2V5cyA9IFtdCgogICMgR3JhYiB0aGUgbGFzdCBzYW1wbGUgZm9yIGVhY2ggc3BsaXQsIG90aGVyd2lzZSB0aGUgZmlyc3Qgc3BsaXQgd2lsbCBiZSB0b28KICAjIHNtYWxsLgogIGZvciBpIGluIHJhbmdlKDEsIG51bV9zcGxpdHMpOgogICAgc3BsaXRfaW5kZXggPSBpbnQocm91bmQoaSAqIG51bV9rZXlzX3Blcl9zcGxpdCkgLSAxKQogICAgc3BsaXRfa2V5cy5hcHBlbmQoa2V5c1tzcGxpdF9pbmRleF0pCgogIHJldHVybiBzcGxpdF9rZXlzCgoKZGVmIF9jcmVhdGVfc3BsaXQobGFzdF9rZXksIG5leHRfa2V5LCBxdWVyeSk6CiAgIiIiQ3JlYXRlIGEgbmV3IHtAbGluayBRdWVyeX0gZ2l2ZW4gdGhlIHF1ZXJ5IGFuZCByYW5nZS4uCgogIEFyZ3M6CiAgICBsYXN0X2tleTogdGhlIHByZXZpb3VzIGtleS4gSWYgbnVsbCB0aGVuIGFzc3VtZWQgdG8gYmUgdGhlIGJlZ2lubmluZy4KICAgIG5leHRfa2V5OiB0aGUgbmV4dCBrZXkuIElmIG51bGwgdGhlbiBhc3N1bWVkIHRvIGJlIHRoZSBlbmQuCiAgICBxdWVyeTogdGhlIGRlc2lyZWQgcXVlcnkuCgogIFJldHVybnM6CiAgICBBIHNwbGl0IHF1ZXJ5IHdpdGggZmV0Y2hlcyBlbnRpdGllcyBpbiB0aGUgcmFuZ2UgW2xhc3Rfa2V5LCBuZXh0X2tleSkKICAiIiIKICBpZiBub3QgKGxhc3Rfa2V5IG9yIG5leHRfa2V5KToKICAgIHJldHVybiBxdWVyeQoKICBzcGxpdF9xdWVyeSA9IHF1ZXJ5X3BiMi5RdWVyeSgpCiAgc3BsaXRfcXVlcnkuQ29weUZyb20ocXVlcnkpCiAgY29tcG9zaXRlX2ZpbHRlciA9IHNwbGl0X3F1ZXJ5LmZpbHRlci5jb21wb3NpdGVfZmlsdGVyCiAgY29tcG9zaXRlX2ZpbHRlci5vcCA9IENvbXBvc2l0ZUZpbHRlci5BTkQKCiAgaWYgcXVlcnkuSGFzRmllbGQoJ2ZpbHRlcicpOgogICAgY29tcG9zaXRlX2ZpbHRlci5maWx0ZXJzLmFkZCgpLkNvcHlGcm9tKHF1ZXJ5LmZpbHRlcikKCiAgaWYgbGFzdF9rZXk6CiAgICBsb3dlcl9ib3VuZCA9IGNvbXBvc2l0ZV9maWx0ZXIuZmlsdGVycy5hZGQoKQogICAgbG93ZXJfYm91bmQucHJvcGVydHlfZmlsdGVyLnByb3BlcnR5Lm5hbWUgPSBLRVlfUFJPUEVSVFlfTkFNRQogICAgbG93ZXJfYm91bmQucHJvcGVydHlfZmlsdGVyLm9wID0gUHJvcGVydHlGaWx0ZXIuR1JFQVRFUl9USEFOX09SX0VRVUFMCiAgICBsb3dlcl9ib3VuZC5wcm9wZXJ0eV9maWx0ZXIudmFsdWUua2V5X3ZhbHVlLkNvcHlGcm9tKGxhc3Rfa2V5KQoKICBpZiBuZXh0X2tleToKICAgIHVwcGVyX2JvdW5kID0gY29tcG9zaXRlX2ZpbHRlci5maWx0ZXJzLmFkZCgpCiAgICB1cHBlcl9ib3VuZC5wcm9wZXJ0eV9maWx0ZXIucHJvcGVydHkubmFtZSA9IEtFWV9QUk9QRVJUWV9OQU1FCiAgICB1cHBlcl9ib3VuZC5wcm9wZXJ0eV9maWx0ZXIub3AgPSBQcm9wZXJ0eUZpbHRlci5MRVNTX1RIQU4KICAgIHVwcGVyX2JvdW5kLnByb3BlcnR5X2ZpbHRlci52YWx1ZS5rZXlfdmFsdWUuQ29weUZyb20obmV4dF9rZXkpCgogIHJldHVybiBzcGxpdF9xdWVyeQp9cgGFAAAoWBAAAABfdmFsaWRhdGVfZmlsdGVyWAMAAABkZWZLdUuEh1gKAAAAZ2V0X3NwbGl0c1gDAAAAZGVmSzZLYYdYEQAAAF9nZXRfc2NhdHRlcl9rZXlzWAMAAABkZWZLnEvCh1gPAAAAX3ZhbGlkYXRlX3F1ZXJ5WAMAAABkZWZLY0tzh1gVAAAAX2NyZWF0ZV9zY2F0dGVyX3F1ZXJ5WAMAAABkZWZLhkuah1gNAAAAX2NyZWF0ZV9zcGxpdFgDAAAAZGVmS/ZNGQGHWA4AAABfZ2V0X3NwbGl0X2tleVgDAAAAZGVmS8RL9Id1fXIChQAAWAoAAABnZXRfc3BsaXRzartkAABzan1pAABYLgAAAGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEucXVlcnlfc3BsaXR0ZXJyA4UAAIWBcgSFAAB9cgWFAABidFUfYXBhY2hlX2JlYW0ucnVubmVycy5qb2IubWFuYWdlcihYPQcAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiQSBvYmplY3QgdG8gY29udHJvbCB0byB0aGUgSm9iIEFQSSBDby1Qcm9jZXNzCiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBsb2dnaW5nCmltcG9ydCBzdWJwcm9jZXNzCmltcG9ydCB0aW1lCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdAoKaW1wb3J0IGdycGMKCmZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpIGltcG9ydCBiZWFtX2pvYl9hcGlfcGIyX2dycGMKCgpjbGFzcyBEb2NrZXJSUENNYW5hZ2VyKG9iamVjdCk6CiAgIiIiQSBuYXRpdmUgY28tcHJvY2VzcyB0byBzdGFydCBhIGNvbnRpYW5lciB0aGF0IHNwZWFrcyB0aGUgSm9iQXBpCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIHJ1bl9jb21tYW5kPU5vbmUpOgogICAgIyBUT0RPKEJFQU0tMjQzMSk6IENoYW5nZSB0aGlzIHRvIGEgZG9ja2VyIGNvbnRhaW5lciBmcm9tIGEgY29tbWFuZC4KICAgIHNlbGYucHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oCiAgICAgICAgWydweXRob24nLAogICAgICAgICAnLW0nLAogICAgICAgICAnYXBhY2hlX2JlYW0ucnVubmVycy5leHBlcmltZW50YWwucHl0aG9uX3JwY19kaXJlY3Quc2VydmVyJ10pCgogICAgc2VsZi5jaGFubmVsID0gZ3JwYy5pbnNlY3VyZV9jaGFubmVsKCdsb2NhbGhvc3Q6NTAwNTEnKQogICAgc2VsZi5zZXJ2aWNlID0gYmVhbV9qb2JfYXBpX3BiMl9ncnBjLkpvYlNlcnZpY2VTdHViKHNlbGYuY2hhbm5lbCkKCiAgICAjIFNsZWVwIGZvciAyIHNlY29uZHMgZm9yIHByb2Nlc3MgdG8gc3RhcnQgY29tcGxldGVseQogICAgIyBUaGlzIGlzIGp1c3QgZm9yIHRoZSBjby1wcm9jZXNzIGFuZCB3b3VsZCBiZSByZW1vdmVkCiAgICAjIG9uY2Ugd2UgbWlncmF0ZSB0byBkb2NrZXIuCiAgICB0aW1lLnNsZWVwKDIpCgogIGRlZiBfX2RlbF9fKHNlbGYpOgogICAgIiIiVGVybWluYXRlIHRoZSBjby1wcm9jZXNzIHdoZW4gdGhlIG1hbmFnZXIgaXMgR0MnZWQKICAgICIiIgogICAgbG9nZ2luZy5pbmZvKCdTaHV0dGluZyB0aGUgY28tcHJvY2VzcycpCiAgICBzZWxmLnByb2Nlc3MudGVybWluYXRlKCkKfXIGhQAAKFgZAAAARG9ja2VyUlBDTWFuYWdlci5fX2luaXRfX1gDAAAAZGVmSyRLModYEAAAAERvY2tlclJQQ01hbmFnZXJYBQAAAGNsYXNzSyFLOIdYGAAAAERvY2tlclJQQ01hbmFnZXIuX19kZWxfX1gDAAAAZGVmSzNLOId1fXIHhQAAWBAAAABEb2NrZXJSUENNYW5hZ2VyWB8AAABhcGFjaGVfYmVhbS5ydW5uZXJzLmpvYi5tYW5hZ2VycgiFAABzan1pAABYHwAAAGFwYWNoZV9iZWFtLnJ1bm5lcnMuam9iLm1hbmFnZXJyCYUAAIWBcgqFAAB9cguFAABidHIMhQAAVRxhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzaW5rKFgYPAAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJGaWxlLWJhc2VkIHNpbmsuIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IG9zCmltcG9ydCByZQppbXBvcnQgdGltZQppbXBvcnQgdXVpZApmcm9tIGJ1aWx0aW5zIGltcG9ydCByYW5nZQpmcm9tIGJ1aWx0aW5zIGltcG9ydCB6aXAKCmZyb20gZnV0dXJlLnV0aWxzIGltcG9ydCBpdGVyaXRlbXMKZnJvbSBwYXN0LmJ1aWx0aW5zIGltcG9ydCB1bmljb2RlCgpmcm9tIGFwYWNoZV9iZWFtLmludGVybmFsIGltcG9ydCB1dGlsCmZyb20gYXBhY2hlX2JlYW0uaW8gaW1wb3J0IGlvYmFzZQpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0gaW1wb3J0IEJlYW1JT0Vycm9yCmZyb20gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbSBpbXBvcnQgQ29tcHJlc3Npb25UeXBlcwpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zIGltcG9ydCBGaWxlU3lzdGVtcwpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIgaW1wb3J0IFN0YXRpY1ZhbHVlUHJvdmlkZXIKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyIGltcG9ydCBWYWx1ZVByb3ZpZGVyCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlciBpbXBvcnQgY2hlY2tfYWNjZXNzaWJsZQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheSBpbXBvcnQgRGlzcGxheURhdGFJdGVtCgpERUZBVUxUX1NIQVJEX05BTUVfVEVNUExBVEUgPSAnLVNTU1NTLW9mLU5OTk5OJwoKX19hbGxfXyA9IFsnRmlsZUJhc2VkU2luayddCgoKY2xhc3MgRmlsZUJhc2VkU2luayhpb2Jhc2UuU2luayk6CiAgIiIiQSBzaW5rIHRvIGEgR0NTIG9yIGxvY2FsIGZpbGVzLgoKICBUbyBpbXBsZW1lbnQgYSBmaWxlLWJhc2VkIHNpbmssIGV4dGVuZCB0aGlzIGNsYXNzIGFuZCBvdmVycmlkZQogIGVpdGhlciA6bWV0aDpgLndyaXRlX3JlY29yZCgpYCBvciA6bWV0aDpgLndyaXRlX2VuY29kZWRfcmVjb3JkKClgLgoKICBJZiBuZWVkZWQsIGFsc28gb3ZlcndyaXRlIDptZXRoOmAub3BlbigpYCBhbmQvb3IgOm1ldGg6YC5jbG9zZSgpYCB0byBjdXN0b21pemUKICB0aGUgZmlsZSBoYW5kbGluZyBvciB3cml0ZSBoZWFkZXJzIGFuZCBmb290ZXJzLgoKICBUaGUgb3V0cHV0IG9mIHRoaXMgd3JpdGUgaXMgYSA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb25gIG9mCiAgYWxsIHdyaXR0ZW4gc2hhcmRzLgogICIiIgoKICAjIE1heCBudW1iZXIgb2YgdGhyZWFkcyB0byBiZSB1c2VkIGZvciByZW5hbWluZy4KICBfTUFYX1JFTkFNRV9USFJFQURTID0gNjQKICBfX2hhc2hfXyA9IE5vbmUKCiAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgIGZpbGVfcGF0aF9wcmVmaXgsCiAgICAgICAgICAgICAgIGNvZGVyLAogICAgICAgICAgICAgICBmaWxlX25hbWVfc3VmZml4PScnLAogICAgICAgICAgICAgICBudW1fc2hhcmRzPTAsCiAgICAgICAgICAgICAgIHNoYXJkX25hbWVfdGVtcGxhdGU9Tm9uZSwKICAgICAgICAgICAgICAgbWltZV90eXBlPSdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICAgICAgICAgICBjb21wcmVzc2lvbl90eXBlPUNvbXByZXNzaW9uVHlwZXMuQVVUTyk6CiAgICAiIiIKICAgICBSYWlzZXM6CiAgICAgIH5leGNlcHRpb25zLlR5cGVFcnJvcjogaWYgZmlsZSBwYXRoIHBhcmFtZXRlcnMgYXJlIG5vdCBhIDpjbGFzczpgc3RyYCBvcgogICAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIuVmFsdWVQcm92aWRlcmAsIG9yIGlmCiAgICAgICAgKipjb21wcmVzc2lvbl90eXBlKiogaXMgbm90IG1lbWJlciBvZgogICAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3Npb25UeXBlc2AuCiAgICAgIH5leGNlcHRpb25zLlZhbHVlRXJyb3I6IGlmICoqc2hhcmRfbmFtZV90ZW1wbGF0ZSoqIGlzIG5vdCBvZiBleHBlY3RlZAogICAgICAgIGZvcm1hdC4KICAgICIiIgogICAgaWYgbm90IGlzaW5zdGFuY2UoZmlsZV9wYXRoX3ByZWZpeCwgKChzdHIsIHVuaWNvZGUpLCBWYWx1ZVByb3ZpZGVyKSk6CiAgICAgIHJhaXNlIFR5cGVFcnJvcignZmlsZV9wYXRoX3ByZWZpeCBtdXN0IGJlIGEgc3RyaW5nIG9yIFZhbHVlUHJvdmlkZXI7JwogICAgICAgICAgICAgICAgICAgICAgJ2dvdCAlciBpbnN0ZWFkJyAlIGZpbGVfcGF0aF9wcmVmaXgpCiAgICBpZiBub3QgaXNpbnN0YW5jZShmaWxlX25hbWVfc3VmZml4LCAoKHN0ciwgdW5pY29kZSksIFZhbHVlUHJvdmlkZXIpKToKICAgICAgcmFpc2UgVHlwZUVycm9yKCdmaWxlX25hbWVfc3VmZml4IG11c3QgYmUgYSBzdHJpbmcgb3IgVmFsdWVQcm92aWRlcjsnCiAgICAgICAgICAgICAgICAgICAgICAnZ290ICVyIGluc3RlYWQnICUgZmlsZV9uYW1lX3N1ZmZpeCkKCiAgICBpZiBub3QgQ29tcHJlc3Npb25UeXBlcy5pc192YWxpZF9jb21wcmVzc2lvbl90eXBlKGNvbXByZXNzaW9uX3R5cGUpOgogICAgICByYWlzZSBUeXBlRXJyb3IoJ2NvbXByZXNzaW9uX3R5cGUgbXVzdCBiZSBDb21wcmVzc2lvblR5cGUgb2JqZWN0IGJ1dCAnCiAgICAgICAgICAgICAgICAgICAgICAnd2FzICVzJyAlIHR5cGUoY29tcHJlc3Npb25fdHlwZSkpCiAgICBpZiBzaGFyZF9uYW1lX3RlbXBsYXRlIGlzIE5vbmU6CiAgICAgIHNoYXJkX25hbWVfdGVtcGxhdGUgPSBERUZBVUxUX1NIQVJEX05BTUVfVEVNUExBVEUKICAgIGVsaWYgc2hhcmRfbmFtZV90ZW1wbGF0ZSA9PSAnJzoKICAgICAgbnVtX3NoYXJkcyA9IDEKICAgIGlmIGlzaW5zdGFuY2UoZmlsZV9wYXRoX3ByZWZpeCwgKHN0ciwgdW5pY29kZSkpOgogICAgICBmaWxlX3BhdGhfcHJlZml4ID0gU3RhdGljVmFsdWVQcm92aWRlcihzdHIsIGZpbGVfcGF0aF9wcmVmaXgpCiAgICBpZiBpc2luc3RhbmNlKGZpbGVfbmFtZV9zdWZmaXgsIChzdHIsIHVuaWNvZGUpKToKICAgICAgZmlsZV9uYW1lX3N1ZmZpeCA9IFN0YXRpY1ZhbHVlUHJvdmlkZXIoc3RyLCBmaWxlX25hbWVfc3VmZml4KQogICAgc2VsZi5maWxlX3BhdGhfcHJlZml4ID0gZmlsZV9wYXRoX3ByZWZpeAogICAgc2VsZi5maWxlX25hbWVfc3VmZml4ID0gZmlsZV9uYW1lX3N1ZmZpeAogICAgc2VsZi5udW1fc2hhcmRzID0gbnVtX3NoYXJkcwogICAgc2VsZi5jb2RlciA9IGNvZGVyCiAgICBzZWxmLnNoYXJkX25hbWVfZm9ybWF0ID0gc2VsZi5fdGVtcGxhdGVfdG9fZm9ybWF0KHNoYXJkX25hbWVfdGVtcGxhdGUpCiAgICBzZWxmLnNoYXJkX25hbWVfZ2xvYl9mb3JtYXQgPSBzZWxmLl90ZW1wbGF0ZV90b19nbG9iX2Zvcm1hdCgKICAgICAgICBzaGFyZF9uYW1lX3RlbXBsYXRlKQogICAgc2VsZi5jb21wcmVzc2lvbl90eXBlID0gY29tcHJlc3Npb25fdHlwZQogICAgc2VsZi5taW1lX3R5cGUgPSBtaW1lX3R5cGUKCiAgZGVmIGRpc3BsYXlfZGF0YShzZWxmKToKICAgIHJldHVybiB7J3NoYXJkcyc6CiAgICAgICAgICAgIERpc3BsYXlEYXRhSXRlbShzZWxmLm51bV9zaGFyZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD0nTnVtYmVyIG9mIFNoYXJkcycpLmRyb3BfaWZfZGVmYXVsdCgwKSwKICAgICAgICAgICAgJ2NvbXByZXNzaW9uJzoKICAgICAgICAgICAgRGlzcGxheURhdGFJdGVtKHN0cihzZWxmLmNvbXByZXNzaW9uX3R5cGUpKSwKICAgICAgICAgICAgJ2ZpbGVfcGF0dGVybic6CiAgICAgICAgICAgIERpc3BsYXlEYXRhSXRlbSgne317fXt9Jy5mb3JtYXQoc2VsZi5maWxlX3BhdGhfcHJlZml4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2hhcmRfbmFtZV9mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5maWxlX25hbWVfc3VmZml4KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPSdGaWxlIFBhdHRlcm4nKX0KCiAgQGNoZWNrX2FjY2Vzc2libGUoWydmaWxlX3BhdGhfcHJlZml4J10pCiAgZGVmIG9wZW4oc2VsZiwgdGVtcF9wYXRoKToKICAgICIiIk9wZW5zIGBgdGVtcF9wYXRoYGAsIHJldHVybmluZyBhbiBvcGFxdWUgZmlsZSBoYW5kbGUgb2JqZWN0LgoKICAgIFRoZSByZXR1cm5lZCBmaWxlIGhhbmRsZSBpcyBwYXNzZWQgdG8gYGB3cml0ZV9bZW5jb2RlZF9dcmVjb3JkYGAgYW5kCiAgICBgYGNsb3NlYGAuCiAgICAiIiIKICAgIHJldHVybiBGaWxlU3lzdGVtcy5jcmVhdGUodGVtcF9wYXRoLCBzZWxmLm1pbWVfdHlwZSwgc2VsZi5jb21wcmVzc2lvbl90eXBlKQoKICBkZWYgd3JpdGVfcmVjb3JkKHNlbGYsIGZpbGVfaGFuZGxlLCB2YWx1ZSk6CiAgICAiIiJXcml0ZXMgYSBzaW5nbGUgcmVjb3JkIGdvIHRoZSBmaWxlIGhhbmRsZSByZXR1cm5lZCBieSBgYG9wZW4oKWBgLgoKICAgIEJ5IGRlZmF1bHQsIGNhbGxzIGBgd3JpdGVfZW5jb2RlZF9yZWNvcmRgYCBhZnRlciBlbmNvZGluZyB0aGUgcmVjb3JkIHdpdGgKICAgIHRoaXMgc2luaydzIENvZGVyLgogICAgIiIiCiAgICBzZWxmLndyaXRlX2VuY29kZWRfcmVjb3JkKGZpbGVfaGFuZGxlLCBzZWxmLmNvZGVyLmVuY29kZSh2YWx1ZSkpCgogIGRlZiB3cml0ZV9lbmNvZGVkX3JlY29yZChzZWxmLCBmaWxlX2hhbmRsZSwgZW5jb2RlZF92YWx1ZSk6CiAgICAiIiJXcml0ZXMgYSBzaW5nbGUgZW5jb2RlZCByZWNvcmQgdG8gdGhlIGZpbGUgaGFuZGxlIHJldHVybmVkIGJ5IGBgb3BlbigpYGAuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIGNsb3NlKHNlbGYsIGZpbGVfaGFuZGxlKToKICAgICIiIkZpbmFsaXplIGFuZCBjbG9zZSB0aGUgZmlsZSBoYW5kbGUgcmV0dXJuZWQgZnJvbSBgYG9wZW4oKWBgLgoKICAgIENhbGxlZCBhZnRlciBhbGwgcmVjb3JkcyBhcmUgd3JpdHRlbi4KCiAgICBCeSBkZWZhdWx0LCBjYWxscyBgYGZpbGVfaGFuZGxlLmNsb3NlKClgYCBpZmYgaXQgaXMgbm90IE5vbmUuCiAgICAiIiIKICAgIGlmIGZpbGVfaGFuZGxlIGlzIG5vdCBOb25lOgogICAgICBmaWxlX2hhbmRsZS5jbG9zZSgpCgogIEBjaGVja19hY2Nlc3NpYmxlKFsnZmlsZV9wYXRoX3ByZWZpeCcsICdmaWxlX25hbWVfc3VmZml4J10pCiAgZGVmIGluaXRpYWxpemVfd3JpdGUoc2VsZik6CiAgICBmaWxlX3BhdGhfcHJlZml4ID0gc2VsZi5maWxlX3BhdGhfcHJlZml4LmdldCgpCgogICAgdG1wX2RpciA9IHNlbGYuX2NyZWF0ZV90ZW1wX2RpcihmaWxlX3BhdGhfcHJlZml4KQogICAgRmlsZVN5c3RlbXMubWtkaXJzKHRtcF9kaXIpCiAgICByZXR1cm4gdG1wX2RpcgoKICBkZWYgX2NyZWF0ZV90ZW1wX2RpcihzZWxmLCBmaWxlX3BhdGhfcHJlZml4KToKICAgIGJhc2VfcGF0aCwgbGFzdF9jb21wb25lbnQgPSBGaWxlU3lzdGVtcy5zcGxpdChmaWxlX3BhdGhfcHJlZml4KQogICAgaWYgbm90IGxhc3RfY29tcG9uZW50OgogICAgICAjIFRyeWluZyB0byByZS1zcGxpdCB0aGUgYmFzZV9wYXRoIHRvIGNoZWNrIGlmIGl0J3MgYSByb290LgogICAgICBuZXdfYmFzZV9wYXRoLCBfID0gRmlsZVN5c3RlbXMuc3BsaXQoYmFzZV9wYXRoKQogICAgICBpZiBiYXNlX3BhdGggPT0gbmV3X2Jhc2VfcGF0aDoKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdDYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBmb3Igcm9vdCBwYXRoICcKICAgICAgICAgICAgICAgICAgICAgICAgICdwcmVmaXggJXMuIFBsZWFzZSBzcGVjaWZ5IGEgZmlsZSBwYXRoIHByZWZpeCB3aXRoICcKICAgICAgICAgICAgICAgICAgICAgICAgICdhdCBsZWFzdCB0d28gY29tcG9uZW50cy4nICUgZmlsZV9wYXRoX3ByZWZpeCkKICAgIHBhdGhfY29tcG9uZW50cyA9IFtiYXNlX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgJ2JlYW0tdGVtcC0nICsgbGFzdF9jb21wb25lbnQgKyAnLScgKyB1dWlkLnV1aWQxKCkuaGV4XQogICAgcmV0dXJuIEZpbGVTeXN0ZW1zLmpvaW4oKnBhdGhfY29tcG9uZW50cykKCiAgQGNoZWNrX2FjY2Vzc2libGUoWydmaWxlX3BhdGhfcHJlZml4JywgJ2ZpbGVfbmFtZV9zdWZmaXgnXSkKICBkZWYgb3Blbl93cml0ZXIoc2VsZiwgaW5pdF9yZXN1bHQsIHVpZCk6CiAgICAjIEEgcHJvcGVyIHN1ZmZpeCBpcyBuZWVkZWQgZm9yIEFVVE8gY29tcHJlc3Npb24gZGV0ZWN0aW9uLgogICAgIyBXZSBhbHNvIGVuc3VyZSB0aGVyZSB3aWxsIGJlIG5vIGNvbGxpc2lvbnMgd2l0aCB1aWQgYW5kIGEKICAgICMgKHBvc3NpYmx5IHVuc2hhcmRlZCkgZmlsZV9wYXRoX3ByZWZpeCBhbmQgYSAocG9zc2libHkgZW1wdHkpCiAgICAjIGZpbGVfbmFtZV9zdWZmaXguCiAgICBmaWxlX3BhdGhfcHJlZml4ID0gc2VsZi5maWxlX3BhdGhfcHJlZml4LmdldCgpCiAgICBmaWxlX25hbWVfc3VmZml4ID0gc2VsZi5maWxlX25hbWVfc3VmZml4LmdldCgpCiAgICBzdWZmaXggPSAoCiAgICAgICAgJy4nICsgb3MucGF0aC5iYXNlbmFtZShmaWxlX3BhdGhfcHJlZml4KSArIGZpbGVfbmFtZV9zdWZmaXgpCiAgICByZXR1cm4gRmlsZUJhc2VkU2lua1dyaXRlcihzZWxmLCBvcy5wYXRoLmpvaW4oaW5pdF9yZXN1bHQsIHVpZCkgKyBzdWZmaXgpCgogIEBjaGVja19hY2Nlc3NpYmxlKFsnZmlsZV9wYXRoX3ByZWZpeCcsICdmaWxlX25hbWVfc3VmZml4J10pCiAgZGVmIF9nZXRfZmluYWxfbmFtZShzZWxmLCBzaGFyZF9udW0sIG51bV9zaGFyZHMpOgogICAgcmV0dXJuICcnLmpvaW4oWwogICAgICAgIHNlbGYuZmlsZV9wYXRoX3ByZWZpeC5nZXQoKSwKICAgICAgICBzZWxmLnNoYXJkX25hbWVfZm9ybWF0ICUgZGljdChzaGFyZF9udW09c2hhcmRfbnVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9zaGFyZHM9bnVtX3NoYXJkcyksCiAgICAgICAgc2VsZi5maWxlX25hbWVfc3VmZml4LmdldCgpCiAgICBdKQoKICBAY2hlY2tfYWNjZXNzaWJsZShbJ2ZpbGVfcGF0aF9wcmVmaXgnLCAnZmlsZV9uYW1lX3N1ZmZpeCddKQogIGRlZiBfZ2V0X2ZpbmFsX25hbWVfZ2xvYihzZWxmLCBudW1fc2hhcmRzKToKICAgIHJldHVybiAnJy5qb2luKFsKICAgICAgICBzZWxmLmZpbGVfcGF0aF9wcmVmaXguZ2V0KCksCiAgICAgICAgc2VsZi5zaGFyZF9uYW1lX2dsb2JfZm9ybWF0ICUgZGljdChudW1fc2hhcmRzPW51bV9zaGFyZHMpLAogICAgICAgIHNlbGYuZmlsZV9uYW1lX3N1ZmZpeC5nZXQoKQogICAgXSkKCiAgZGVmIHByZV9maW5hbGl6ZShzZWxmLCBpbml0X3Jlc3VsdCwgd3JpdGVyX3Jlc3VsdHMpOgogICAgbnVtX3NoYXJkcyA9IGxlbihsaXN0KHdyaXRlcl9yZXN1bHRzKSkKICAgIGRzdF9nbG9iID0gc2VsZi5fZ2V0X2ZpbmFsX25hbWVfZ2xvYihudW1fc2hhcmRzKQogICAgZHN0X2dsb2JfZmlsZXMgPSBbZmlsZV9tZXRhZGF0YS5wYXRoCiAgICAgICAgICAgICAgICAgICAgICBmb3IgbXIgaW4gRmlsZVN5c3RlbXMubWF0Y2goW2RzdF9nbG9iXSkKICAgICAgICAgICAgICAgICAgICAgIGZvciBmaWxlX21ldGFkYXRhIGluIG1yLm1ldGFkYXRhX2xpc3RdCgogICAgaWYgZHN0X2dsb2JfZmlsZXM6CiAgICAgIGxvZ2dpbmcud2FybignRGVsZXRpbmcgJWQgZXhpc3RpbmcgZmlsZXMgaW4gdGFyZ2V0IHBhdGggbWF0Y2hpbmc6ICVzJywKICAgICAgICAgICAgICAgICAgIGxlbihkc3RfZ2xvYl9maWxlcyksIHNlbGYuc2hhcmRfbmFtZV9nbG9iX2Zvcm1hdCkKICAgICAgRmlsZVN5c3RlbXMuZGVsZXRlKGRzdF9nbG9iX2ZpbGVzKQoKICBkZWYgX2NoZWNrX3N0YXRlX2Zvcl9maW5hbGl6ZV93cml0ZShzZWxmLCB3cml0ZXJfcmVzdWx0cywgbnVtX3NoYXJkcyk6CiAgICAiIiJDaGVja3Mgd3JpdGVyIG91dHB1dCBmaWxlcycgc3RhdGVzLgoKICAgIFJldHVybnM6CiAgICAgIHNyY19maWxlcywgZHN0X2ZpbGVzOiBMaXN0cyBvZiBmaWxlcyB0byByZW5hbWUuIEZvciBlYWNoIGksIGZpbmFsaXplX3dyaXRlCiAgICAgICAgc2hvdWxkIHJlbmFtZShzcmNfZmlsZXNbaV0sIGRzdF9maWxlc1tpXSkuCiAgICAgIGRlbGV0ZV9maWxlczogU3JjIGZpbGVzIHRvIGRlbGV0ZS4gVGhlc2UgY291bGQgYmUgbGVmdG92ZXJzIGZyb20gYW4KICAgICAgICBpbmNvbXBsZXRlIChub24tYXRvbWljKSByZW5hbWUgb3BlcmF0aW9uLgogICAgICBudW1fc2tpcHBlZDogVGFsbHkgb2Ygd3JpdGVyIHJlc3VsdHMgZmlsZXMgYWxyZWFkeSByZW5hbWVkLCBzdWNoIGFzIGZyb20KICAgICAgICBhIHByZXZpb3VzIHJ1biBvZiBmaW5hbGl6ZV93cml0ZSgpLgogICAgIiIiCiAgICBpZiBub3Qgd3JpdGVyX3Jlc3VsdHM6CiAgICAgIHJldHVybiBbXSwgW10sIFtdLCAwCgogICAgc3JjX2dsb2IgPSBGaWxlU3lzdGVtcy5qb2luKEZpbGVTeXN0ZW1zLnNwbGl0KHdyaXRlcl9yZXN1bHRzWzBdKVswXSwgJyonKQogICAgZHN0X2dsb2IgPSBzZWxmLl9nZXRfZmluYWxfbmFtZV9nbG9iKG51bV9zaGFyZHMpCiAgICBzcmNfZ2xvYl9maWxlcyA9IHNldChmaWxlX21ldGFkYXRhLnBhdGgKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBtciBpbiBGaWxlU3lzdGVtcy5tYXRjaChbc3JjX2dsb2JdKQogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGZpbGVfbWV0YWRhdGEgaW4gbXIubWV0YWRhdGFfbGlzdCkKICAgIGRzdF9nbG9iX2ZpbGVzID0gc2V0KGZpbGVfbWV0YWRhdGEucGF0aAogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG1yIGluIEZpbGVTeXN0ZW1zLm1hdGNoKFtkc3RfZ2xvYl0pCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZmlsZV9tZXRhZGF0YSBpbiBtci5tZXRhZGF0YV9saXN0KQoKICAgIHNyY19maWxlcyA9IFtdCiAgICBkc3RfZmlsZXMgPSBbXQogICAgZGVsZXRlX2ZpbGVzID0gW10KICAgIG51bV9za2lwcGVkID0gMAogICAgZm9yIHNoYXJkX251bSwgc3JjIGluIGVudW1lcmF0ZSh3cml0ZXJfcmVzdWx0cyk6CiAgICAgIGZpbmFsX25hbWUgPSBzZWxmLl9nZXRfZmluYWxfbmFtZShzaGFyZF9udW0sIG51bV9zaGFyZHMpCiAgICAgIGRzdCA9IGZpbmFsX25hbWUKICAgICAgc3JjX2V4aXN0cyA9IHNyYyBpbiBzcmNfZ2xvYl9maWxlcwogICAgICBkc3RfZXhpc3RzID0gZHN0IGluIGRzdF9nbG9iX2ZpbGVzCiAgICAgIGlmIG5vdCBzcmNfZXhpc3RzIGFuZCBub3QgZHN0X2V4aXN0czoKICAgICAgICByYWlzZSBCZWFtSU9FcnJvcignc3JjIGFuZCBkc3QgZmlsZXMgZG8gbm90IGV4aXN0LiBzcmM6ICVzLCBkc3Q6ICVzJyAlICgKICAgICAgICAgICAgc3JjLCBkc3QpKQogICAgICBpZiBub3Qgc3JjX2V4aXN0cyBhbmQgZHN0X2V4aXN0czoKICAgICAgICBsb2dnaW5nLmRlYnVnKCdzcmM6ICVzIC0+IGRzdDogJXMgYWxyZWFkeSByZW5hbWVkLCBza2lwcGluZycsIHNyYywgZHN0KQogICAgICAgIG51bV9za2lwcGVkICs9IDEKICAgICAgICBjb250aW51ZQogICAgICBpZiAoc3JjX2V4aXN0cyBhbmQgZHN0X2V4aXN0cyBhbmQKICAgICAgICAgIEZpbGVTeXN0ZW1zLmNoZWNrc3VtKHNyYykgPT0gRmlsZVN5c3RlbXMuY2hlY2tzdW0oZHN0KSk6CiAgICAgICAgbG9nZ2luZy5kZWJ1Zygnc3JjOiAlcyA9PSBkc3Q6ICVzLCBkZWxldGluZyBzcmMnLCBzcmMsIGRzdCkKICAgICAgICBkZWxldGVfZmlsZXMuYXBwZW5kKHNyYykKICAgICAgICBjb250aW51ZQoKICAgICAgc3JjX2ZpbGVzLmFwcGVuZChzcmMpCiAgICAgIGRzdF9maWxlcy5hcHBlbmQoZHN0KQogICAgcmV0dXJuIHNyY19maWxlcywgZHN0X2ZpbGVzLCBkZWxldGVfZmlsZXMsIG51bV9za2lwcGVkCgogIEBjaGVja19hY2Nlc3NpYmxlKFsnZmlsZV9wYXRoX3ByZWZpeCddKQogIGRlZiBmaW5hbGl6ZV93cml0ZShzZWxmLCBpbml0X3Jlc3VsdCwgd3JpdGVyX3Jlc3VsdHMsCiAgICAgICAgICAgICAgICAgICAgIHVudXNlZF9wcmVfZmluYWxpemVfcmVzdWx0cyk6CiAgICB3cml0ZXJfcmVzdWx0cyA9IHNvcnRlZCh3cml0ZXJfcmVzdWx0cykKICAgIG51bV9zaGFyZHMgPSBsZW4od3JpdGVyX3Jlc3VsdHMpCgogICAgc3JjX2ZpbGVzLCBkc3RfZmlsZXMsIGRlbGV0ZV9maWxlcywgbnVtX3NraXBwZWQgPSAoCiAgICAgICAgc2VsZi5fY2hlY2tfc3RhdGVfZm9yX2ZpbmFsaXplX3dyaXRlKHdyaXRlcl9yZXN1bHRzLCBudW1fc2hhcmRzKSkKICAgIG51bV9za2lwcGVkICs9IGxlbihkZWxldGVfZmlsZXMpCiAgICBGaWxlU3lzdGVtcy5kZWxldGUoZGVsZXRlX2ZpbGVzKQogICAgbnVtX3NoYXJkc190b19maW5hbGl6ZSA9IGxlbihzcmNfZmlsZXMpCiAgICBtaW5fdGhyZWFkcyA9IG1pbihudW1fc2hhcmRzX3RvX2ZpbmFsaXplLCBGaWxlQmFzZWRTaW5rLl9NQVhfUkVOQU1FX1RIUkVBRFMpCiAgICBudW1fdGhyZWFkcyA9IG1heCgxLCBtaW5fdGhyZWFkcykKCiAgICBjaHVua19zaXplID0gRmlsZVN5c3RlbXMuZ2V0X2NodW5rX3NpemUoc2VsZi5maWxlX3BhdGhfcHJlZml4LmdldCgpKQogICAgc291cmNlX2ZpbGVfYmF0Y2ggPSBbc3JjX2ZpbGVzW2k6aSArIGNodW5rX3NpemVdCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oc3JjX2ZpbGVzKSwgY2h1bmtfc2l6ZSldCiAgICBkZXN0aW5hdGlvbl9maWxlX2JhdGNoID0gW2RzdF9maWxlc1tpOmkgKyBjaHVua19zaXplXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oZHN0X2ZpbGVzKSwgY2h1bmtfc2l6ZSldCgogICAgaWYgbnVtX3NoYXJkc190b19maW5hbGl6ZToKICAgICAgbG9nZ2luZy5pbmZvKAogICAgICAgICAgJ1N0YXJ0aW5nIGZpbmFsaXplX3dyaXRlIHRocmVhZHMgd2l0aCBudW1fc2hhcmRzOiAlZCAoc2tpcHBlZDogJWQpLCAnCiAgICAgICAgICAnYmF0Y2hlczogJWQsIG51bV90aHJlYWRzOiAlZCcsCiAgICAgICAgICBudW1fc2hhcmRzX3RvX2ZpbmFsaXplLCBudW1fc2tpcHBlZCwgbGVuKHNvdXJjZV9maWxlX2JhdGNoKSwKICAgICAgICAgIG51bV90aHJlYWRzKQogICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKCiAgICAgICMgVXNlIGEgdGhyZWFkIHBvb2wgZm9yIHJlbmFtaW5nIG9wZXJhdGlvbnMuCiAgICAgIGRlZiBfcmVuYW1lX2JhdGNoKGJhdGNoKToKICAgICAgICAiIiJfcmVuYW1lX2JhdGNoIGV4ZWN1dGVzIGJhdGNoIHJlbmFtZSBvcGVyYXRpb25zLiIiIgogICAgICAgIHNvdXJjZV9maWxlcywgZGVzdGluYXRpb25fZmlsZXMgPSBiYXRjaAogICAgICAgIGV4Y2VwdGlvbnMgPSBbXQogICAgICAgIHRyeToKICAgICAgICAgIEZpbGVTeXN0ZW1zLnJlbmFtZShzb3VyY2VfZmlsZXMsIGRlc3RpbmF0aW9uX2ZpbGVzKQogICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbnMKICAgICAgICBleGNlcHQgQmVhbUlPRXJyb3IgYXMgZXhwOgogICAgICAgICAgaWYgZXhwLmV4Y2VwdGlvbl9kZXRhaWxzIGlzIE5vbmU6CiAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICBmb3IgKHNyYywgZHN0KSwgZXhjZXB0aW9uIGluIGl0ZXJpdGVtcyhleHAuZXhjZXB0aW9uX2RldGFpbHMpOgogICAgICAgICAgICBpZiBleGNlcHRpb246CiAgICAgICAgICAgICAgbG9nZ2luZy5lcnJvcigoJ0V4Y2VwdGlvbiBpbiBfcmVuYW1lX2JhdGNoLiBzcmM6ICVzLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RzdDogJXMsIGVycjogJXMnKSwgc3JjLCBkc3QsIGV4Y2VwdGlvbikKICAgICAgICAgICAgICBleGNlcHRpb25zLmFwcGVuZChleGNlcHRpb24pCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygnUmVuYW1lIHN1Y2Nlc3NmdWw6ICVzIC0+ICVzJywgc3JjLCBkc3QpCiAgICAgICAgICByZXR1cm4gZXhjZXB0aW9ucwoKICAgICAgZXhjZXB0aW9uX2JhdGNoZXMgPSB1dGlsLnJ1bl91c2luZ190aHJlYWRwb29sKAogICAgICAgICAgX3JlbmFtZV9iYXRjaCwgbGlzdCh6aXAoc291cmNlX2ZpbGVfYmF0Y2gsIGRlc3RpbmF0aW9uX2ZpbGVfYmF0Y2gpKSwKICAgICAgICAgIG51bV90aHJlYWRzKQoKICAgICAgYWxsX2V4Y2VwdGlvbnMgPSBbZSBmb3IgZXhjZXB0aW9uX2JhdGNoIGluIGV4Y2VwdGlvbl9iYXRjaGVzCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBlIGluIGV4Y2VwdGlvbl9iYXRjaF0KICAgICAgaWYgYWxsX2V4Y2VwdGlvbnM6CiAgICAgICAgcmFpc2UgRXhjZXB0aW9uKAogICAgICAgICAgICAnRW5jb3VudGVyZWQgZXhjZXB0aW9ucyBpbiBmaW5hbGl6ZV93cml0ZTogJXMnICUgYWxsX2V4Y2VwdGlvbnMpCgogICAgICBmb3IgZmluYWxfbmFtZSBpbiBkc3RfZmlsZXM6CiAgICAgICAgeWllbGQgZmluYWxfbmFtZQoKICAgICAgbG9nZ2luZy5pbmZvKCdSZW5hbWVkICVkIHNoYXJkcyBpbiAlLjJmIHNlY29uZHMuJywgbnVtX3NoYXJkc190b19maW5hbGl6ZSwKICAgICAgICAgICAgICAgICAgIHRpbWUudGltZSgpIC0gc3RhcnRfdGltZSkKICAgIGVsc2U6CiAgICAgIGxvZ2dpbmcud2FybmluZygKICAgICAgICAgICdObyBzaGFyZHMgZm91bmQgdG8gZmluYWxpemUuIG51bV9zaGFyZHM6ICVkLCBza2lwcGVkOiAlZCcsCiAgICAgICAgICBudW1fc2hhcmRzLCBudW1fc2tpcHBlZCkKCiAgICB0cnk6CiAgICAgIEZpbGVTeXN0ZW1zLmRlbGV0ZShbaW5pdF9yZXN1bHRdKQogICAgZXhjZXB0IElPRXJyb3I6CiAgICAgICMgTWF5IGhhdmUgYWxyZWFkeSBiZWVuIHJlbW92ZWQuCiAgICAgIHBhc3MKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBfdGVtcGxhdGVfcmVwbGFjZV9udW1fc2hhcmRzKHNoYXJkX25hbWVfdGVtcGxhdGUpOgogICAgbWF0Y2ggPSByZS5zZWFyY2goJ04rJywgc2hhcmRfbmFtZV90ZW1wbGF0ZSkKICAgIGlmIG1hdGNoOgogICAgICBzaGFyZF9uYW1lX3RlbXBsYXRlID0gc2hhcmRfbmFtZV90ZW1wbGF0ZS5yZXBsYWNlKAogICAgICAgICAgbWF0Y2guZ3JvdXAoMCksICclJShudW1fc2hhcmRzKTAlZGQnICUgbGVuKG1hdGNoLmdyb3VwKDApKSkKICAgIHJldHVybiBzaGFyZF9uYW1lX3RlbXBsYXRlCgogIEBzdGF0aWNtZXRob2QKICBkZWYgX3RlbXBsYXRlX3RvX2Zvcm1hdChzaGFyZF9uYW1lX3RlbXBsYXRlKToKICAgIGlmIG5vdCBzaGFyZF9uYW1lX3RlbXBsYXRlOgogICAgICByZXR1cm4gJycKICAgIG1hdGNoID0gcmUuc2VhcmNoKCdTKycsIHNoYXJkX25hbWVfdGVtcGxhdGUpCiAgICBpZiBtYXRjaCBpcyBOb25lOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgIlNoYXJkIG51bWJlciBwYXR0ZXJuIFMrIG5vdCBmb3VuZCBpbiBzaGFyZF9uYW1lX3RlbXBsYXRlOiAlcyIgJQogICAgICAgICAgc2hhcmRfbmFtZV90ZW1wbGF0ZSkKICAgIHNoYXJkX25hbWVfZm9ybWF0ID0gc2hhcmRfbmFtZV90ZW1wbGF0ZS5yZXBsYWNlKAogICAgICAgIG1hdGNoLmdyb3VwKDApLCAnJSUoc2hhcmRfbnVtKTAlZGQnICUgbGVuKG1hdGNoLmdyb3VwKDApKSkKICAgIHJldHVybiBGaWxlQmFzZWRTaW5rLl90ZW1wbGF0ZV9yZXBsYWNlX251bV9zaGFyZHMoc2hhcmRfbmFtZV9mb3JtYXQpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgX3RlbXBsYXRlX3RvX2dsb2JfZm9ybWF0KHNoYXJkX25hbWVfdGVtcGxhdGUpOgogICAgaWYgbm90IHNoYXJkX25hbWVfdGVtcGxhdGU6CiAgICAgIHJldHVybiAnJwogICAgbWF0Y2ggPSByZS5zZWFyY2goJ1MrJywgc2hhcmRfbmFtZV90ZW1wbGF0ZSkKICAgIGlmIG1hdGNoIGlzIE5vbmU6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAiU2hhcmQgbnVtYmVyIHBhdHRlcm4gUysgbm90IGZvdW5kIGluIHNoYXJkX25hbWVfdGVtcGxhdGU6ICVzIiAlCiAgICAgICAgICBzaGFyZF9uYW1lX3RlbXBsYXRlKQogICAgc2hhcmRfbmFtZV9mb3JtYXQgPSBzaGFyZF9uYW1lX3RlbXBsYXRlLnJlcGxhY2UobWF0Y2guZ3JvdXAoMCksICcqJykKICAgIHJldHVybiBGaWxlQmFzZWRTaW5rLl90ZW1wbGF0ZV9yZXBsYWNlX251bV9zaGFyZHMoc2hhcmRfbmFtZV9mb3JtYXQpCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgIyBUT0RPOiBDbGVhbiB1cCB3b3JraXRlbV90ZXN0IHdoaWNoIHVzZXMgdGhpcy4KICAgICMgcHlsaW50OiBkaXNhYmxlPXVuaWRpb21hdGljLXR5cGVjaGVjawogICAgcmV0dXJuIHR5cGUoc2VsZikgPT0gdHlwZShvdGhlcikgYW5kIHNlbGYuX19kaWN0X18gPT0gb3RoZXIuX19kaWN0X18KCiAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CiAgICAjIFRPRE8oQkVBTS01OTQ5KTogTmVlZGVkIGZvciBQeXRob24gMiBjb21wYXRpYmlsaXR5LgogICAgcmV0dXJuIG5vdCBzZWxmID09IG90aGVyCgoKY2xhc3MgRmlsZUJhc2VkU2lua1dyaXRlcihpb2Jhc2UuV3JpdGVyKToKICAiIiJUaGUgd3JpdGVyIGZvciBGaWxlQmFzZWRTaW5rLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgc2luaywgdGVtcF9zaGFyZF9wYXRoKToKICAgIHNlbGYuc2luayA9IHNpbmsKICAgIHNlbGYudGVtcF9zaGFyZF9wYXRoID0gdGVtcF9zaGFyZF9wYXRoCiAgICBzZWxmLnRlbXBfaGFuZGxlID0gc2VsZi5zaW5rLm9wZW4odGVtcF9zaGFyZF9wYXRoKQoKICBkZWYgd3JpdGUoc2VsZiwgdmFsdWUpOgogICAgc2VsZi5zaW5rLndyaXRlX3JlY29yZChzZWxmLnRlbXBfaGFuZGxlLCB2YWx1ZSkKCiAgZGVmIGNsb3NlKHNlbGYpOgogICAgc2VsZi5zaW5rLmNsb3NlKHNlbGYudGVtcF9oYW5kbGUpCiAgICByZXR1cm4gc2VsZi50ZW1wX3NoYXJkX3BhdGgKfXINhQAAKFgiAAAARmlsZUJhc2VkU2luay53cml0ZV9lbmNvZGVkX3JlY29yZFgDAAAAZGVmS4tLj4dYGQAAAEZpbGVCYXNlZFNpbmsub3Blbl93cml0ZXJYAwAAAGRlZkuvS7qHWBMAAABGaWxlQmFzZWRTaW5rLmNsb3NlWAMAAABkZWZLkEuZh1gaAAAARmlsZUJhc2VkU2luay5wcmVfZmluYWxpemVYAwAAAGRlZkvMS9eHWBYAAABGaWxlQmFzZWRTaW5rLl9faW5pdF9fWAMAAABkZWZLQUtth1geAAAARmlsZUJhc2VkU2luay5fY3JlYXRlX3RlbXBfZGlyWAMAAABkZWZLokuuh1gTAAAARmlsZUJhc2VkU2lua1dyaXRlclgFAAAAY2xhc3NNfgFNjQGHWA0AAABGaWxlQmFzZWRTaW5rWAUAAABjbGFzc0swTXwBh1gZAAAARmlsZUJhc2VkU2lua1dyaXRlci5jbG9zZVgDAAAAZGVmTYoBTY0Bh1gtAAAARmlsZUJhc2VkU2luay5fY2hlY2tfc3RhdGVfZm9yX2ZpbmFsaXplX3dyaXRlWAMAAABkZWZL2E0IAYdYHgAAAEZpbGVCYXNlZFNpbmsuaW5pdGlhbGl6ZV93cml0ZVgDAAAAZGVmS5pLoYdYKgAAAEZpbGVCYXNlZFNpbmsuZmluYWxpemVfd3JpdGUuX3JlbmFtZV9iYXRjaFgDAAAAZGVmTSYBTTgBh1gZAAAARmlsZUJhc2VkU2lua1dyaXRlci53cml0ZVgDAAAAZGVmTYcBTYkBh1gSAAAARmlsZUJhc2VkU2luay5vcGVuWAMAAABkZWZLekuCh1gdAAAARmlsZUJhc2VkU2luay5fZ2V0X2ZpbmFsX25hbWVYAwAAAGRlZku7S8OHWCoAAABGaWxlQmFzZWRTaW5rLl90ZW1wbGF0ZV9yZXBsYWNlX251bV9zaGFyZHNYAwAAAGRlZk1TAU1aAYdYHAAAAEZpbGVCYXNlZFNpbmsuZmluYWxpemVfd3JpdGVYAwAAAGRlZk0JAU1SAYdYGgAAAEZpbGVCYXNlZFNpbmsud3JpdGVfcmVjb3JkWAMAAABkZWZLg0uKh1gUAAAARmlsZUJhc2VkU2luay5fX2VxX19YAwAAAGRlZk10AU14AYdYFAAAAEZpbGVCYXNlZFNpbmsuX19uZV9fWAMAAABkZWZNeQFNfAGHWCYAAABGaWxlQmFzZWRTaW5rLl90ZW1wbGF0ZV90b19nbG9iX2Zvcm1hdFgDAAAAZGVmTWgBTXMBh1gaAAAARmlsZUJhc2VkU2luay5kaXNwbGF5X2RhdGFYAwAAAGRlZktuS3mHWCIAAABGaWxlQmFzZWRTaW5rLl9nZXRfZmluYWxfbmFtZV9nbG9iWAMAAABkZWZLxEvLh1ghAAAARmlsZUJhc2VkU2luay5fdGVtcGxhdGVfdG9fZm9ybWF0WAMAAABkZWZNWwFNZwGHWBwAAABGaWxlQmFzZWRTaW5rV3JpdGVyLl9faW5pdF9fWAMAAABkZWZNggFNhgGHdX1yDoUAAChYIgAAAEZpbGVCYXNlZFNpbmsud3JpdGVfZW5jb2RlZF9yZWNvcmRqd18AAFgaAAAARmlsZUJhc2VkU2luay5kaXNwbGF5X2RhdGFqd18AAFgNAAAARmlsZUJhc2VkU2lua2p3XwAAWBkAAABGaWxlQmFzZWRTaW5rLm9wZW5fd3JpdGVyandfAABYEwAAAEZpbGVCYXNlZFNpbmsuY2xvc2Vqd18AAFgcAAAARmlsZUJhc2VkU2luay5maW5hbGl6ZV93cml0ZWp3XwAAWB4AAABGaWxlQmFzZWRTaW5rLmluaXRpYWxpemVfd3JpdGVqd18AAFgaAAAARmlsZUJhc2VkU2luay53cml0ZV9yZWNvcmRqd18AAFgSAAAARmlsZUJhc2VkU2luay5vcGVuandfAABYGgAAAEZpbGVCYXNlZFNpbmsucHJlX2ZpbmFsaXplandfAAB1an1pAABYHAAAAGFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNpbmtyD4UAAIWBchCFAAB9chGFAABidHV1Yi4=